MailPoet Newsletters (New) - Version 3.0.0-beta.1

Version Description

  • 2016-10 =

  • Initial public beta release.

Download this release

Release Info

Developer wysija
Plugin Icon 128x128 MailPoet Newsletters (New)
Version 3.0.0-beta.1
Comparing to
See all releases

Version 3.0.0-beta.1

Files changed (173) hide show
  1. assets/css/admin.css +2838 -0
  2. assets/css/importExport.css +70 -0
  3. assets/css/newsletter_editor.css +2470 -0
  4. assets/css/public.css +55 -0
  5. assets/css/rtl.css +0 -0
  6. assets/img/blank_templates/fake-logo.png +0 -0
  7. assets/img/datepicker/animated-overlay.gif +0 -0
  8. assets/img/datepicker/cal_logo.png +0 -0
  9. assets/img/datepicker/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  10. assets/img/datepicker/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  11. assets/img/datepicker/ui-bg_flat_10_000000_40x100.png +0 -0
  12. assets/img/datepicker/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  13. assets/img/datepicker/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  14. assets/img/datepicker/ui-bg_glass_65_ffffff_1x400.png +0 -0
  15. assets/img/datepicker/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  16. assets/img/datepicker/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  17. assets/img/datepicker/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  18. assets/img/datepicker/ui-icons_222222_256x240.png +0 -0
  19. assets/img/datepicker/ui-icons_228ef1_256x240.png +0 -0
  20. assets/img/datepicker/ui-icons_454545_256x240.png +0 -0
  21. assets/img/datepicker/ui-icons_ef8c08_256x240.png +0 -0
  22. assets/img/datepicker/ui-icons_ffd27a_256x240.png +0 -0
  23. assets/img/datepicker/ui-icons_ffffff_256x240.png +0 -0
  24. assets/img/form_editor_icons.png +0 -0
  25. assets/img/handle.png +0 -0
  26. assets/img/mailpoet_logo.png +0 -0
  27. assets/img/menu_icon.png +0 -0
  28. assets/img/modal_close_button.png +0 -0
  29. assets/img/newsletter_editor/200x83.jpg +0 -0
  30. assets/img/newsletter_editor/300x125.jpg +0 -0
  31. assets/img/newsletter_editor/600x250.jpg +0 -0
  32. assets/img/newsletter_editor/block-icons/auto-post.svg +15 -0
  33. assets/img/newsletter_editor/block-icons/button.svg +13 -0
  34. assets/img/newsletter_editor/block-icons/divider.svg +5 -0
  35. assets/img/newsletter_editor/block-icons/document.svg +10 -0
  36. assets/img/newsletter_editor/block-icons/footer.svg +11 -0
  37. assets/img/newsletter_editor/block-icons/gallery.svg +23 -0
  38. assets/img/newsletter_editor/block-icons/header.svg +11 -0
  39. assets/img/newsletter_editor/block-icons/image.svg +7 -0
  40. assets/img/newsletter_editor/block-icons/podcast.svg +11 -0
  41. assets/img/newsletter_editor/block-icons/post.svg +10 -0
  42. assets/img/newsletter_editor/block-icons/spacer.svg +4 -0
  43. assets/img/newsletter_editor/block-icons/text.svg +6 -0
  44. assets/img/newsletter_editor/block-tools/move-horizontal.svg +10 -0
  45. assets/img/newsletter_editor/block-tools/move-without-bg.svg +5 -0
  46. assets/img/newsletter_editor/block-tools/move.svg +10 -0
  47. assets/img/newsletter_editor/block-tools/settings-column.svg +18 -0
  48. assets/img/newsletter_editor/block-tools/settings-without-bg.svg +17 -0
  49. assets/img/newsletter_editor/block-tools/settings.svg +18 -0
  50. assets/img/newsletter_editor/block-tools/trash-without-bg.svg +12 -0
  51. assets/img/newsletter_editor/block-tools/trash.svg +22 -0
  52. assets/img/newsletter_editor/image-missing.png +0 -0
  53. assets/img/newsletter_editor/image-missing.svg +27 -0
  54. assets/img/newsletter_editor/layout-icons/1-column.svg +5 -0
  55. assets/img/newsletter_editor/layout-icons/2-column.svg +7 -0
  56. assets/img/newsletter_editor/layout-icons/3-column.svg +9 -0
  57. assets/img/newsletter_editor/social-icons/01-social/Email.png +0 -0
  58. assets/img/newsletter_editor/social-icons/01-social/Facebook.png +0 -0
  59. assets/img/newsletter_editor/social-icons/01-social/Google-Plus.png +0 -0
  60. assets/img/newsletter_editor/social-icons/01-social/Instagram.png +0 -0
  61. assets/img/newsletter_editor/social-icons/01-social/LinkedIn.png +0 -0
  62. assets/img/newsletter_editor/social-icons/01-social/Pinterest.png +0 -0
  63. assets/img/newsletter_editor/social-icons/01-social/Twitter.png +0 -0
  64. assets/img/newsletter_editor/social-icons/01-social/Website.png +0 -0
  65. assets/img/newsletter_editor/social-icons/01-social/Youtube.png +0 -0
  66. assets/img/newsletter_editor/social-icons/02-grey/Email.png +0 -0
  67. assets/img/newsletter_editor/social-icons/02-grey/Facebook.png +0 -0
  68. assets/img/newsletter_editor/social-icons/02-grey/Google-Plus.png +0 -0
  69. assets/img/newsletter_editor/social-icons/02-grey/Instagram.png +0 -0
  70. assets/img/newsletter_editor/social-icons/02-grey/LinkedIn.png +0 -0
  71. assets/img/newsletter_editor/social-icons/02-grey/Pinterest.png +0 -0
  72. assets/img/newsletter_editor/social-icons/02-grey/Twitter.png +0 -0
  73. assets/img/newsletter_editor/social-icons/02-grey/Website.png +0 -0
  74. assets/img/newsletter_editor/social-icons/02-grey/Youtube.png +0 -0
  75. assets/img/newsletter_editor/social-icons/03-circles/Email.png +0 -0
  76. assets/img/newsletter_editor/social-icons/03-circles/Facebook.png +0 -0
  77. assets/img/newsletter_editor/social-icons/03-circles/Google-Plus.png +0 -0
  78. assets/img/newsletter_editor/social-icons/03-circles/Instagram.png +0 -0
  79. assets/img/newsletter_editor/social-icons/03-circles/LinkedIn.png +0 -0
  80. assets/img/newsletter_editor/social-icons/03-circles/Pinterest.png +0 -0
  81. assets/img/newsletter_editor/social-icons/03-circles/Twitter.png +0 -0
  82. assets/img/newsletter_editor/social-icons/03-circles/Website.png +0 -0
  83. assets/img/newsletter_editor/social-icons/03-circles/Youtube.png +0 -0
  84. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Email.png +0 -0
  85. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Facebook.png +0 -0
  86. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Google-Plus.png +0 -0
  87. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Instagram.png +0 -0
  88. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/LinkedIn.png +0 -0
  89. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Pinterest.png +0 -0
  90. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Twitter.png +0 -0
  91. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Website.png +0 -0
  92. assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Youtube.png +0 -0
  93. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Email.png +0 -0
  94. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Facebook.png +0 -0
  95. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Google-Plus.png +0 -0
  96. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Instagram.png +0 -0
  97. assets/img/newsletter_editor/social-icons/05-full-gradient-square/LinkedIn.png +0 -0
  98. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Pinterest.png +0 -0
  99. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Twitter.png +0 -0
  100. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Website.png +0 -0
  101. assets/img/newsletter_editor/social-icons/05-full-gradient-square/Youtube.png +0 -0
  102. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Email.png +0 -0
  103. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Facebook.png +0 -0
  104. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Google-Plus.png +0 -0
  105. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Instagram.png +0 -0
  106. assets/img/newsletter_editor/social-icons/06-full-symbol-color/LinkedIn.png +0 -0
  107. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Pinterest.png +0 -0
  108. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Twitter.png +0 -0
  109. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Website.png +0 -0
  110. assets/img/newsletter_editor/social-icons/06-full-symbol-color/Youtube.png +0 -0
  111. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Email.png +0 -0
  112. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Facebook.png +0 -0
  113. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Google-Plus.png +0 -0
  114. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Instagram.png +0 -0
  115. assets/img/newsletter_editor/social-icons/07-full-symbol-black/LinkedIn.png +0 -0
  116. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Pinterest.png +0 -0
  117. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Twitter.png +0 -0
  118. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Website.png +0 -0
  119. assets/img/newsletter_editor/social-icons/07-full-symbol-black/Youtube.png +0 -0
  120. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Email.png +0 -0
  121. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Facebook.png +0 -0
  122. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Google-Plus.png +0 -0
  123. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Instagram.png +0 -0
  124. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/LinkedIn.png +0 -0
  125. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Pinterest.png +0 -0
  126. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Twitter.png +0 -0
  127. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Website.png +0 -0
  128. assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Youtube.png +0 -0
  129. assets/img/newsletter_editor/social-icons/09-line-roundrect/Email.png +0 -0
  130. assets/img/newsletter_editor/social-icons/09-line-roundrect/Facebook.png +0 -0
  131. assets/img/newsletter_editor/social-icons/09-line-roundrect/Google-Plus.png +0 -0
  132. assets/img/newsletter_editor/social-icons/09-line-roundrect/Instagram.png +0 -0
  133. assets/img/newsletter_editor/social-icons/09-line-roundrect/LinkedIn.png +0 -0
  134. assets/img/newsletter_editor/social-icons/09-line-roundrect/Pinterest.png +0 -0
  135. assets/img/newsletter_editor/social-icons/09-line-roundrect/Twitter.png +0 -0
  136. assets/img/newsletter_editor/social-icons/09-line-roundrect/Website.png +0 -0
  137. assets/img/newsletter_editor/social-icons/09-line-roundrect/Youtube.png +0 -0
  138. assets/img/newsletter_editor/social-icons/10-line-square/Email.png +0 -0
  139. assets/img/newsletter_editor/social-icons/10-line-square/Facebook.png +0 -0
  140. assets/img/newsletter_editor/social-icons/10-line-square/Google-Plus.png +0 -0
  141. assets/img/newsletter_editor/social-icons/10-line-square/Instagram.png +0 -0
  142. assets/img/newsletter_editor/social-icons/10-line-square/LinkedIn.png +0 -0
  143. assets/img/newsletter_editor/social-icons/10-line-square/Pinterest.png +0 -0
  144. assets/img/newsletter_editor/social-icons/10-line-square/Twitter.png +0 -0
  145. assets/img/newsletter_editor/social-icons/10-line-square/Website.png +0 -0
  146. assets/img/newsletter_editor/social-icons/10-line-square/Youtube.png +0 -0
  147. assets/img/newsletter_editor/social-icons/custom.png +0 -0
  148. assets/img/post_notifications_template/ALC-widget-icon.png +0 -0
  149. assets/img/post_notifications_template/settings-icon-highlight.png +0 -0
  150. assets/img/preview_magnifying_glass.svg +12 -0
  151. assets/img/sample_templates/coffee/coffee-grain.jpg +0 -0
  152. assets/img/sample_templates/coffee/header-v2.jpg +0 -0
  153. assets/img/sample_templates/coffee/map-v2.jpg +0 -0
  154. assets/img/sample_templates/coffee/sandwich.jpg +0 -0
  155. assets/img/sample_templates/discount/bicycle-header2.png +0 -0
  156. assets/img/sample_templates/discount/bicycle-header3.png +0 -0
  157. assets/img/sample_templates/discount/orange-bicycle.jpg +0 -0
  158. assets/img/sample_templates/discount/red-icycle.jpg +0 -0
  159. assets/img/sample_templates/restaurant/boyga-1329911-639x852.jpg +0 -0
  160. assets/img/sample_templates/restaurant/burger.jpg +0 -0
  161. assets/img/sample_templates/restaurant/header.jpg +0 -0
  162. assets/img/sample_templates/restaurant/macaroni-w-salad-1323787.jpg +0 -0
  163. assets/img/sample_templates/travel/gallery1.jpg +0 -0
  164. assets/img/sample_templates/travel/gallery2.jpg +0 -0
  165. assets/img/sample_templates/travel/gallery3.jpg +0 -0
  166. assets/img/sample_templates/travel/gallery4.jpg +0 -0
  167. assets/img/sample_templates/travel/glow-worms.jpg +0 -0
  168. assets/img/sample_templates/travel/header.png +0 -0
  169. assets/img/sample_templates/travel/holiday-park.jpg +0 -0
  170. assets/img/sample_templates/travel/luge.jpg +0 -0
  171. assets/img/welcome_template/beacon.png +0 -0
  172. assets/img/welcome_template/mailpoet-logo.png +0 -0
  173. assets/js/admin.js +23533 -0
assets/css/admin.css ADDED
@@ -0,0 +1,2838 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .select2-container {
2
+ box-sizing: border-box;
3
+ display: inline-block;
4
+ margin: 0;
5
+ position: relative;
6
+ vertical-align: middle; }
7
+ .select2-container .select2-selection--single {
8
+ box-sizing: border-box;
9
+ cursor: pointer;
10
+ display: block;
11
+ height: 28px;
12
+ user-select: none;
13
+ -webkit-user-select: none; }
14
+ .select2-container .select2-selection--single .select2-selection__rendered {
15
+ display: block;
16
+ padding-left: 8px;
17
+ padding-right: 20px;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap; }
21
+ .select2-container .select2-selection--single .select2-selection__clear {
22
+ position: relative; }
23
+ .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
24
+ padding-right: 8px;
25
+ padding-left: 20px; }
26
+ .select2-container .select2-selection--multiple {
27
+ box-sizing: border-box;
28
+ cursor: pointer;
29
+ display: block;
30
+ min-height: 32px;
31
+ user-select: none;
32
+ -webkit-user-select: none; }
33
+ .select2-container .select2-selection--multiple .select2-selection__rendered {
34
+ display: inline-block;
35
+ overflow: hidden;
36
+ padding-left: 8px;
37
+ text-overflow: ellipsis;
38
+ white-space: nowrap; }
39
+ .select2-container .select2-search--inline {
40
+ float: left; }
41
+ .select2-container .select2-search--inline .select2-search__field {
42
+ box-sizing: border-box;
43
+ border: none;
44
+ font-size: 100%;
45
+ margin-top: 5px;
46
+ padding: 0; }
47
+ .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
48
+ -webkit-appearance: none; }
49
+
50
+ .select2-dropdown {
51
+ background-color: white;
52
+ border: 1px solid #aaa;
53
+ border-radius: 4px;
54
+ box-sizing: border-box;
55
+ display: block;
56
+ position: absolute;
57
+ left: -100000px;
58
+ width: 100%;
59
+ z-index: 1051; }
60
+
61
+ .select2-results {
62
+ display: block; }
63
+
64
+ .select2-results__options {
65
+ list-style: none;
66
+ margin: 0;
67
+ padding: 0; }
68
+
69
+ .select2-results__option {
70
+ padding: 6px;
71
+ user-select: none;
72
+ -webkit-user-select: none; }
73
+ .select2-results__option[aria-selected] {
74
+ cursor: pointer; }
75
+
76
+ .select2-container--open .select2-dropdown {
77
+ left: 0; }
78
+
79
+ .select2-container--open .select2-dropdown--above {
80
+ border-bottom: none;
81
+ border-bottom-left-radius: 0;
82
+ border-bottom-right-radius: 0; }
83
+
84
+ .select2-container--open .select2-dropdown--below {
85
+ border-top: none;
86
+ border-top-left-radius: 0;
87
+ border-top-right-radius: 0; }
88
+
89
+ .select2-search--dropdown {
90
+ display: block;
91
+ padding: 4px; }
92
+ .select2-search--dropdown .select2-search__field {
93
+ padding: 4px;
94
+ width: 100%;
95
+ box-sizing: border-box; }
96
+ .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
97
+ -webkit-appearance: none; }
98
+ .select2-search--dropdown.select2-search--hide {
99
+ display: none; }
100
+
101
+ .select2-close-mask {
102
+ border: 0;
103
+ margin: 0;
104
+ padding: 0;
105
+ display: block;
106
+ position: fixed;
107
+ left: 0;
108
+ top: 0;
109
+ min-height: 100%;
110
+ min-width: 100%;
111
+ height: auto;
112
+ width: auto;
113
+ opacity: 0;
114
+ z-index: 99;
115
+ background-color: #fff;
116
+ filter: alpha(opacity=0); }
117
+
118
+ .select2-hidden-accessible {
119
+ border: 0 !important;
120
+ clip: rect(0 0 0 0) !important;
121
+ height: 1px !important;
122
+ margin: -1px !important;
123
+ overflow: hidden !important;
124
+ padding: 0 !important;
125
+ position: absolute !important;
126
+ width: 1px !important; }
127
+
128
+ .select2-container--default .select2-selection--single {
129
+ background-color: #fff;
130
+ border: 1px solid #aaa;
131
+ border-radius: 4px; }
132
+ .select2-container--default .select2-selection--single .select2-selection__rendered {
133
+ color: #444;
134
+ line-height: 28px; }
135
+ .select2-container--default .select2-selection--single .select2-selection__clear {
136
+ cursor: pointer;
137
+ float: right;
138
+ font-weight: bold; }
139
+ .select2-container--default .select2-selection--single .select2-selection__placeholder {
140
+ color: #999; }
141
+ .select2-container--default .select2-selection--single .select2-selection__arrow {
142
+ height: 26px;
143
+ position: absolute;
144
+ top: 1px;
145
+ right: 1px;
146
+ width: 20px; }
147
+ .select2-container--default .select2-selection--single .select2-selection__arrow b {
148
+ border-color: #888 transparent transparent transparent;
149
+ border-style: solid;
150
+ border-width: 5px 4px 0 4px;
151
+ height: 0;
152
+ left: 50%;
153
+ margin-left: -4px;
154
+ margin-top: -2px;
155
+ position: absolute;
156
+ top: 50%;
157
+ width: 0; }
158
+
159
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
160
+ float: left; }
161
+
162
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
163
+ left: 1px;
164
+ right: auto; }
165
+
166
+ .select2-container--default.select2-container--disabled .select2-selection--single {
167
+ background-color: #eee;
168
+ cursor: default; }
169
+ .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
170
+ display: none; }
171
+
172
+ .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
173
+ border-color: transparent transparent #888 transparent;
174
+ border-width: 0 4px 5px 4px; }
175
+
176
+ .select2-container--default .select2-selection--multiple {
177
+ background-color: white;
178
+ border: 1px solid #aaa;
179
+ border-radius: 4px;
180
+ cursor: text; }
181
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered {
182
+ box-sizing: border-box;
183
+ list-style: none;
184
+ margin: 0;
185
+ padding: 0 5px;
186
+ width: 100%; }
187
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
188
+ list-style: none; }
189
+ .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
190
+ color: #999;
191
+ margin-top: 5px;
192
+ float: left; }
193
+ .select2-container--default .select2-selection--multiple .select2-selection__clear {
194
+ cursor: pointer;
195
+ float: right;
196
+ font-weight: bold;
197
+ margin-top: 5px;
198
+ margin-right: 10px; }
199
+ .select2-container--default .select2-selection--multiple .select2-selection__choice {
200
+ background-color: #e4e4e4;
201
+ border: 1px solid #aaa;
202
+ border-radius: 4px;
203
+ cursor: default;
204
+ float: left;
205
+ margin-right: 5px;
206
+ margin-top: 5px;
207
+ padding: 0 5px; }
208
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
209
+ color: #999;
210
+ cursor: pointer;
211
+ display: inline-block;
212
+ font-weight: bold;
213
+ margin-right: 2px; }
214
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
215
+ color: #333; }
216
+
217
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
218
+ float: right; }
219
+
220
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
221
+ margin-left: 5px;
222
+ margin-right: auto; }
223
+
224
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
225
+ margin-left: 2px;
226
+ margin-right: auto; }
227
+
228
+ .select2-container--default.select2-container--focus .select2-selection--multiple {
229
+ border: solid black 1px;
230
+ outline: 0; }
231
+
232
+ .select2-container--default.select2-container--disabled .select2-selection--multiple {
233
+ background-color: #eee;
234
+ cursor: default; }
235
+
236
+ .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
237
+ display: none; }
238
+
239
+ .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
240
+ border-top-left-radius: 0;
241
+ border-top-right-radius: 0; }
242
+
243
+ .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
244
+ border-bottom-left-radius: 0;
245
+ border-bottom-right-radius: 0; }
246
+
247
+ .select2-container--default .select2-search--dropdown .select2-search__field {
248
+ border: 1px solid #aaa; }
249
+
250
+ .select2-container--default .select2-search--inline .select2-search__field {
251
+ background: transparent;
252
+ border: none;
253
+ outline: 0;
254
+ box-shadow: none;
255
+ -webkit-appearance: textfield; }
256
+
257
+ .select2-container--default .select2-results > .select2-results__options {
258
+ max-height: 200px;
259
+ overflow-y: auto; }
260
+
261
+ .select2-container--default .select2-results__option[role=group] {
262
+ padding: 0; }
263
+
264
+ .select2-container--default .select2-results__option[aria-disabled=true] {
265
+ color: #999; }
266
+
267
+ .select2-container--default .select2-results__option[aria-selected=true] {
268
+ background-color: #ddd; }
269
+
270
+ .select2-container--default .select2-results__option .select2-results__option {
271
+ padding-left: 1em; }
272
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
273
+ padding-left: 0; }
274
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
275
+ margin-left: -1em;
276
+ padding-left: 2em; }
277
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
278
+ margin-left: -2em;
279
+ padding-left: 3em; }
280
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
281
+ margin-left: -3em;
282
+ padding-left: 4em; }
283
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
284
+ margin-left: -4em;
285
+ padding-left: 5em; }
286
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
287
+ margin-left: -5em;
288
+ padding-left: 6em; }
289
+
290
+ .select2-container--default .select2-results__option--highlighted[aria-selected] {
291
+ background-color: #5897fb;
292
+ color: white; }
293
+
294
+ .select2-container--default .select2-results__group {
295
+ cursor: default;
296
+ display: block;
297
+ padding: 6px; }
298
+
299
+ .select2-container--classic .select2-selection--single {
300
+ background-color: #f7f7f7;
301
+ border: 1px solid #aaa;
302
+ border-radius: 4px;
303
+ outline: 0;
304
+ background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
305
+ background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
306
+ background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
307
+ background-repeat: repeat-x;
308
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
309
+ .select2-container--classic .select2-selection--single:focus {
310
+ border: 1px solid #5897fb; }
311
+ .select2-container--classic .select2-selection--single .select2-selection__rendered {
312
+ color: #444;
313
+ line-height: 28px; }
314
+ .select2-container--classic .select2-selection--single .select2-selection__clear {
315
+ cursor: pointer;
316
+ float: right;
317
+ font-weight: bold;
318
+ margin-right: 10px; }
319
+ .select2-container--classic .select2-selection--single .select2-selection__placeholder {
320
+ color: #999; }
321
+ .select2-container--classic .select2-selection--single .select2-selection__arrow {
322
+ background-color: #ddd;
323
+ border: none;
324
+ border-left: 1px solid #aaa;
325
+ border-top-right-radius: 4px;
326
+ border-bottom-right-radius: 4px;
327
+ height: 26px;
328
+ position: absolute;
329
+ top: 1px;
330
+ right: 1px;
331
+ width: 20px;
332
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
333
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
334
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
335
+ background-repeat: repeat-x;
336
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
337
+ .select2-container--classic .select2-selection--single .select2-selection__arrow b {
338
+ border-color: #888 transparent transparent transparent;
339
+ border-style: solid;
340
+ border-width: 5px 4px 0 4px;
341
+ height: 0;
342
+ left: 50%;
343
+ margin-left: -4px;
344
+ margin-top: -2px;
345
+ position: absolute;
346
+ top: 50%;
347
+ width: 0; }
348
+
349
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
350
+ float: left; }
351
+
352
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
353
+ border: none;
354
+ border-right: 1px solid #aaa;
355
+ border-radius: 0;
356
+ border-top-left-radius: 4px;
357
+ border-bottom-left-radius: 4px;
358
+ left: 1px;
359
+ right: auto; }
360
+
361
+ .select2-container--classic.select2-container--open .select2-selection--single {
362
+ border: 1px solid #5897fb; }
363
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
364
+ background: transparent;
365
+ border: none; }
366
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
367
+ border-color: transparent transparent #888 transparent;
368
+ border-width: 0 4px 5px 4px; }
369
+
370
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
371
+ border-top: none;
372
+ border-top-left-radius: 0;
373
+ border-top-right-radius: 0;
374
+ background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
375
+ background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
376
+ background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
377
+ background-repeat: repeat-x;
378
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
379
+
380
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
381
+ border-bottom: none;
382
+ border-bottom-left-radius: 0;
383
+ border-bottom-right-radius: 0;
384
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
385
+ background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
386
+ background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
387
+ background-repeat: repeat-x;
388
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
389
+
390
+ .select2-container--classic .select2-selection--multiple {
391
+ background-color: white;
392
+ border: 1px solid #aaa;
393
+ border-radius: 4px;
394
+ cursor: text;
395
+ outline: 0; }
396
+ .select2-container--classic .select2-selection--multiple:focus {
397
+ border: 1px solid #5897fb; }
398
+ .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
399
+ list-style: none;
400
+ margin: 0;
401
+ padding: 0 5px; }
402
+ .select2-container--classic .select2-selection--multiple .select2-selection__clear {
403
+ display: none; }
404
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice {
405
+ background-color: #e4e4e4;
406
+ border: 1px solid #aaa;
407
+ border-radius: 4px;
408
+ cursor: default;
409
+ float: left;
410
+ margin-right: 5px;
411
+ margin-top: 5px;
412
+ padding: 0 5px; }
413
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
414
+ color: #888;
415
+ cursor: pointer;
416
+ display: inline-block;
417
+ font-weight: bold;
418
+ margin-right: 2px; }
419
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
420
+ color: #555; }
421
+
422
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
423
+ float: right; }
424
+
425
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
426
+ margin-left: 5px;
427
+ margin-right: auto; }
428
+
429
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
430
+ margin-left: 2px;
431
+ margin-right: auto; }
432
+
433
+ .select2-container--classic.select2-container--open .select2-selection--multiple {
434
+ border: 1px solid #5897fb; }
435
+
436
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
437
+ border-top: none;
438
+ border-top-left-radius: 0;
439
+ border-top-right-radius: 0; }
440
+
441
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
442
+ border-bottom: none;
443
+ border-bottom-left-radius: 0;
444
+ border-bottom-right-radius: 0; }
445
+
446
+ .select2-container--classic .select2-search--dropdown .select2-search__field {
447
+ border: 1px solid #aaa;
448
+ outline: 0; }
449
+
450
+ .select2-container--classic .select2-search--inline .select2-search__field {
451
+ outline: 0;
452
+ box-shadow: none; }
453
+
454
+ .select2-container--classic .select2-dropdown {
455
+ background-color: white;
456
+ border: 1px solid transparent; }
457
+
458
+ .select2-container--classic .select2-dropdown--above {
459
+ border-bottom: none; }
460
+
461
+ .select2-container--classic .select2-dropdown--below {
462
+ border-top: none; }
463
+
464
+ .select2-container--classic .select2-results > .select2-results__options {
465
+ max-height: 200px;
466
+ overflow-y: auto; }
467
+
468
+ .select2-container--classic .select2-results__option[role=group] {
469
+ padding: 0; }
470
+
471
+ .select2-container--classic .select2-results__option[aria-disabled=true] {
472
+ color: grey; }
473
+
474
+ .select2-container--classic .select2-results__option--highlighted[aria-selected] {
475
+ background-color: #3875d7;
476
+ color: white; }
477
+
478
+ .select2-container--classic .select2-results__group {
479
+ cursor: default;
480
+ display: block;
481
+ padding: 6px; }
482
+
483
+ .select2-container--classic.select2-container--open .select2-dropdown {
484
+ border-color: #5897fb; }
485
+
486
+ /*! jQuery UI - v1.10.1 - 2013-03-10
487
+ * http://jqueryui.com
488
+ * Includes: jquery.ui.core.css, jquery.ui.datepicker.css
489
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
490
+ * Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
491
+
492
+ /* Layout helpers
493
+ ----------------------------------*/
494
+ .ui-helper-hidden {
495
+ display: none;
496
+ }
497
+ .ui-helper-hidden-accessible {
498
+ border: 0;
499
+ clip: rect(0 0 0 0);
500
+ height: 1px;
501
+ margin: -1px;
502
+ overflow: hidden;
503
+ padding: 0;
504
+ position: absolute;
505
+ width: 1px;
506
+ }
507
+ .ui-helper-reset {
508
+ margin: 0;
509
+ padding: 0;
510
+ border: 0;
511
+ outline: 0;
512
+ line-height: 1.3;
513
+ text-decoration: none;
514
+ font-size: 100%;
515
+ list-style: none;
516
+ }
517
+ .ui-helper-clearfix:before,
518
+ .ui-helper-clearfix:after {
519
+ content: "";
520
+ display: table;
521
+ border-collapse: collapse;
522
+ }
523
+ .ui-helper-clearfix:after {
524
+ clear: both;
525
+ }
526
+ .ui-helper-clearfix {
527
+ min-height: 0; /* support: IE7 */
528
+ }
529
+ .ui-helper-zfix {
530
+ width: 100%;
531
+ height: 100%;
532
+ top: 0;
533
+ left: 0;
534
+ position: absolute;
535
+ opacity: 0;
536
+ filter:Alpha(Opacity=0);
537
+ }
538
+
539
+ .ui-front {
540
+ z-index: 100;
541
+ }
542
+
543
+
544
+ /* Interaction Cues
545
+ ----------------------------------*/
546
+ .ui-state-disabled {
547
+ cursor: default !important;
548
+ }
549
+
550
+
551
+ /* Icons
552
+ ----------------------------------*/
553
+
554
+ /* states and images */
555
+ .ui-icon {
556
+ display: block;
557
+ text-indent: -99999px;
558
+ overflow: hidden;
559
+ background-repeat: no-repeat;
560
+ }
561
+
562
+
563
+ /* Misc visuals
564
+ ----------------------------------*/
565
+
566
+ /* Overlays */
567
+ .ui-widget-overlay {
568
+ position: fixed;
569
+ top: 0;
570
+ left: 0;
571
+ width: 100%;
572
+ height: 100%;
573
+ }
574
+ .ui-datepicker {
575
+ width: 17em;
576
+ padding: .2em .2em 0;
577
+ display: none;
578
+ }
579
+ .ui-datepicker .ui-datepicker-header {
580
+ position: relative;
581
+ padding: .2em 0;
582
+ }
583
+ .ui-datepicker .ui-datepicker-prev,
584
+ .ui-datepicker .ui-datepicker-next {
585
+ position: absolute;
586
+ top: 2px;
587
+ width: 1.8em;
588
+ height: 1.8em;
589
+ }
590
+ .ui-datepicker .ui-datepicker-prev-hover,
591
+ .ui-datepicker .ui-datepicker-next-hover {
592
+ top: 1px;
593
+ }
594
+ .ui-datepicker .ui-datepicker-prev {
595
+ left: 2px;
596
+ }
597
+ .ui-datepicker .ui-datepicker-next {
598
+ right: 2px;
599
+ }
600
+ .ui-datepicker .ui-datepicker-prev-hover {
601
+ left: 1px;
602
+ }
603
+ .ui-datepicker .ui-datepicker-next-hover {
604
+ right: 1px;
605
+ }
606
+ .ui-datepicker .ui-datepicker-prev span,
607
+ .ui-datepicker .ui-datepicker-next span {
608
+ display: block;
609
+ position: absolute;
610
+ left: 50%;
611
+ margin-left: -8px;
612
+ top: 50%;
613
+ margin-top: -8px;
614
+ }
615
+ .ui-datepicker .ui-datepicker-title {
616
+ margin: 0 2.3em;
617
+ line-height: 1.8em;
618
+ text-align: center;
619
+ }
620
+ .ui-datepicker .ui-datepicker-title select {
621
+ font-size: 1em;
622
+ margin: 1px 0;
623
+ }
624
+ .ui-datepicker select.ui-datepicker-month-year {
625
+ width: 100%;
626
+ }
627
+ .ui-datepicker select.ui-datepicker-month,
628
+ .ui-datepicker select.ui-datepicker-year {
629
+ width: 49%;
630
+ }
631
+ .ui-datepicker table {
632
+ width: 100%;
633
+ font-size: .9em;
634
+ border-collapse: collapse;
635
+ margin: 0 0 .4em;
636
+ }
637
+ .ui-datepicker th {
638
+ padding: .7em .3em;
639
+ text-align: center;
640
+ font-weight: bold;
641
+ border: 0;
642
+ }
643
+ .ui-datepicker td {
644
+ border: 0;
645
+ padding: 1px;
646
+ }
647
+ .ui-datepicker td span,
648
+ .ui-datepicker td a {
649
+ display: block;
650
+ padding: .2em;
651
+ text-align: right;
652
+ text-decoration: none;
653
+ }
654
+ .ui-datepicker .ui-datepicker-buttonpane {
655
+ background-image: none;
656
+ margin: .7em 0 0 0;
657
+ padding: 0 .2em;
658
+ border-left: 0;
659
+ border-right: 0;
660
+ border-bottom: 0;
661
+ }
662
+ .ui-datepicker .ui-datepicker-buttonpane button {
663
+ float: right;
664
+ margin: .5em .2em .4em;
665
+ cursor: pointer;
666
+ padding: .2em .6em .3em .6em;
667
+ width: auto;
668
+ overflow: visible;
669
+ }
670
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
671
+ float: left;
672
+ }
673
+
674
+ /* with multiple calendars */
675
+ .ui-datepicker.ui-datepicker-multi {
676
+ width: auto;
677
+ }
678
+ .ui-datepicker-multi .ui-datepicker-group {
679
+ float: left;
680
+ }
681
+ .ui-datepicker-multi .ui-datepicker-group table {
682
+ width: 95%;
683
+ margin: 0 auto .4em;
684
+ }
685
+ .ui-datepicker-multi-2 .ui-datepicker-group {
686
+ width: 50%;
687
+ }
688
+ .ui-datepicker-multi-3 .ui-datepicker-group {
689
+ width: 33.3%;
690
+ }
691
+ .ui-datepicker-multi-4 .ui-datepicker-group {
692
+ width: 25%;
693
+ }
694
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
695
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
696
+ border-left-width: 0;
697
+ }
698
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
699
+ clear: left;
700
+ }
701
+ .ui-datepicker-row-break {
702
+ clear: both;
703
+ width: 100%;
704
+ font-size: 0;
705
+ }
706
+
707
+ /* RTL support */
708
+ .ui-datepicker-rtl {
709
+ direction: rtl;
710
+ }
711
+ .ui-datepicker-rtl .ui-datepicker-prev {
712
+ right: 2px;
713
+ left: auto;
714
+ }
715
+ .ui-datepicker-rtl .ui-datepicker-next {
716
+ left: 2px;
717
+ right: auto;
718
+ }
719
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
720
+ right: 1px;
721
+ left: auto;
722
+ }
723
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
724
+ left: 1px;
725
+ right: auto;
726
+ }
727
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
728
+ clear: right;
729
+ }
730
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
731
+ float: left;
732
+ }
733
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
734
+ .ui-datepicker-rtl .ui-datepicker-group {
735
+ float: right;
736
+ }
737
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
738
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
739
+ border-right-width: 0;
740
+ border-left-width: 1px;
741
+ }
742
+
743
+ /* Component containers
744
+ ----------------------------------*/
745
+ .ui-widget {
746
+ font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
747
+ font-size: 1.1em;
748
+ }
749
+ .ui-widget .ui-widget {
750
+ font-size: 1em;
751
+ }
752
+ .ui-widget input,
753
+ .ui-widget select,
754
+ .ui-widget textarea,
755
+ .ui-widget button {
756
+ font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
757
+ font-size: 1em;
758
+ }
759
+ .ui-widget-content {
760
+ border: 1px solid #dddddd;
761
+ background: #eeeeee url(../img/datepicker/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
762
+ color: #333333;
763
+ }
764
+ .ui-widget-content a {
765
+ color: #333333;
766
+ }
767
+ .ui-widget-header {
768
+ border: 1px solid #e78f08;
769
+ background: #f6a828 url(../img/datepicker/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
770
+ color: #ffffff;
771
+ font-weight: bold;
772
+ }
773
+ .ui-widget-header a {
774
+ color: #ffffff;
775
+ }
776
+
777
+ /* Interaction states
778
+ ----------------------------------*/
779
+ .ui-state-default,
780
+ .ui-widget-content .ui-state-default,
781
+ .ui-widget-header .ui-state-default {
782
+ border: 1px solid #cccccc;
783
+ background: #f6f6f6 url(../img/datepicker/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
784
+ font-weight: bold;
785
+ color: #1c94c4;
786
+ }
787
+ .ui-state-default a,
788
+ .ui-state-default a:link,
789
+ .ui-state-default a:visited {
790
+ color: #1c94c4;
791
+ text-decoration: none;
792
+ }
793
+ .ui-state-hover,
794
+ .ui-widget-content .ui-state-hover,
795
+ .ui-widget-header .ui-state-hover,
796
+ .ui-state-focus,
797
+ .ui-widget-content .ui-state-focus,
798
+ .ui-widget-header .ui-state-focus {
799
+ border: 1px solid #fbcb09;
800
+ background: #fdf5ce url(../img/datepicker/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
801
+ font-weight: bold;
802
+ color: #c77405;
803
+ }
804
+ .ui-state-hover a,
805
+ .ui-state-hover a:hover,
806
+ .ui-state-hover a:link,
807
+ .ui-state-hover a:visited {
808
+ color: #c77405;
809
+ text-decoration: none;
810
+ }
811
+ .ui-state-active,
812
+ .ui-widget-content .ui-state-active,
813
+ .ui-widget-header .ui-state-active {
814
+ border: 1px solid #fbd850;
815
+ background: #ffffff url(../img/datepicker/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
816
+ font-weight: bold;
817
+ color: #eb8f00;
818
+ }
819
+ .ui-state-active a,
820
+ .ui-state-active a:link,
821
+ .ui-state-active a:visited {
822
+ color: #eb8f00;
823
+ text-decoration: none;
824
+ }
825
+
826
+ /* Interaction Cues
827
+ ----------------------------------*/
828
+ .ui-state-highlight,
829
+ .ui-widget-content .ui-state-highlight,
830
+ .ui-widget-header .ui-state-highlight {
831
+ border: 1px solid #fed22f;
832
+ background: #ffe45c url(../img/datepicker/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
833
+ color: #363636;
834
+ }
835
+ .ui-state-highlight a,
836
+ .ui-widget-content .ui-state-highlight a,
837
+ .ui-widget-header .ui-state-highlight a {
838
+ color: #363636;
839
+ }
840
+ .ui-state-error,
841
+ .ui-widget-content .ui-state-error,
842
+ .ui-widget-header .ui-state-error {
843
+ border: 1px solid #cd0a0a;
844
+ background: #b81900 url(../img/datepicker/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
845
+ color: #ffffff;
846
+ }
847
+ .ui-state-error a,
848
+ .ui-widget-content .ui-state-error a,
849
+ .ui-widget-header .ui-state-error a {
850
+ color: #ffffff;
851
+ }
852
+ .ui-state-error-text,
853
+ .ui-widget-content .ui-state-error-text,
854
+ .ui-widget-header .ui-state-error-text {
855
+ color: #ffffff;
856
+ }
857
+ .ui-priority-primary,
858
+ .ui-widget-content .ui-priority-primary,
859
+ .ui-widget-header .ui-priority-primary {
860
+ font-weight: bold;
861
+ }
862
+ .ui-priority-secondary,
863
+ .ui-widget-content .ui-priority-secondary,
864
+ .ui-widget-header .ui-priority-secondary {
865
+ opacity: .7;
866
+ filter:Alpha(Opacity=70);
867
+ font-weight: normal;
868
+ }
869
+ .ui-state-disabled,
870
+ .ui-widget-content .ui-state-disabled,
871
+ .ui-widget-header .ui-state-disabled {
872
+ opacity: .35;
873
+ filter:Alpha(Opacity=35);
874
+ background-image: none;
875
+ }
876
+ .ui-state-disabled .ui-icon {
877
+ filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
878
+ }
879
+
880
+ /* Icons
881
+ ----------------------------------*/
882
+
883
+ /* states and images */
884
+ .ui-icon {
885
+ width: 16px;
886
+ height: 16px;
887
+ background-position: 16px 16px;
888
+ }
889
+ .ui-icon,
890
+ .ui-widget-content .ui-icon {
891
+ background-image: url(../img/datepicker/ui-icons_222222_256x240.png);
892
+ }
893
+ .ui-widget-header .ui-icon {
894
+ background-image: url(../img/datepicker/ui-icons_ffffff_256x240.png);
895
+ }
896
+ .ui-state-default .ui-icon {
897
+ background-image: url(../img/datepicker/ui-icons_ef8c08_256x240.png);
898
+ }
899
+ .ui-state-hover .ui-icon,
900
+ .ui-state-focus .ui-icon {
901
+ background-image: url(../img/datepicker/ui-icons_ef8c08_256x240.png);
902
+ }
903
+ .ui-state-active .ui-icon {
904
+ background-image: url(../img/datepicker/ui-icons_ef8c08_256x240.png);
905
+ }
906
+ .ui-state-highlight .ui-icon {
907
+ background-image: url(../img/datepicker/ui-icons_228ef1_256x240.png);
908
+ }
909
+ .ui-state-error .ui-icon,
910
+ .ui-state-error-text .ui-icon {
911
+ background-image: url(../img/datepicker/ui-icons_ffd27a_256x240.png);
912
+ }
913
+
914
+ /* positioning */
915
+ .ui-icon-carat-1-n { background-position: 0 0; }
916
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
917
+ .ui-icon-carat-1-e { background-position: -32px 0; }
918
+ .ui-icon-carat-1-se { background-position: -48px 0; }
919
+ .ui-icon-carat-1-s { background-position: -64px 0; }
920
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
921
+ .ui-icon-carat-1-w { background-position: -96px 0; }
922
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
923
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
924
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
925
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
926
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
927
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
928
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
929
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
930
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
931
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
932
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
933
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
934
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
935
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
936
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
937
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
938
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
939
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
940
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
941
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
942
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
943
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
944
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
945
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
946
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
947
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
948
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
949
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
950
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
951
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
952
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
953
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
954
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
955
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
956
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
957
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
958
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
959
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
960
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
961
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
962
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
963
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
964
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
965
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
966
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
967
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
968
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
969
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
970
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
971
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
972
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
973
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
974
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
975
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
976
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
977
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
978
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
979
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
980
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
981
+ .ui-icon-extlink { background-position: -32px -80px; }
982
+ .ui-icon-newwin { background-position: -48px -80px; }
983
+ .ui-icon-refresh { background-position: -64px -80px; }
984
+ .ui-icon-shuffle { background-position: -80px -80px; }
985
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
986
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
987
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
988
+ .ui-icon-folder-open { background-position: -16px -96px; }
989
+ .ui-icon-document { background-position: -32px -96px; }
990
+ .ui-icon-document-b { background-position: -48px -96px; }
991
+ .ui-icon-note { background-position: -64px -96px; }
992
+ .ui-icon-mail-closed { background-position: -80px -96px; }
993
+ .ui-icon-mail-open { background-position: -96px -96px; }
994
+ .ui-icon-suitcase { background-position: -112px -96px; }
995
+ .ui-icon-comment { background-position: -128px -96px; }
996
+ .ui-icon-person { background-position: -144px -96px; }
997
+ .ui-icon-print { background-position: -160px -96px; }
998
+ .ui-icon-trash { background-position: -176px -96px; }
999
+ .ui-icon-locked { background-position: -192px -96px; }
1000
+ .ui-icon-unlocked { background-position: -208px -96px; }
1001
+ .ui-icon-bookmark { background-position: -224px -96px; }
1002
+ .ui-icon-tag { background-position: -240px -96px; }
1003
+ .ui-icon-home { background-position: 0 -112px; }
1004
+ .ui-icon-flag { background-position: -16px -112px; }
1005
+ .ui-icon-calendar { background-position: -32px -112px; }
1006
+ .ui-icon-cart { background-position: -48px -112px; }
1007
+ .ui-icon-pencil { background-position: -64px -112px; }
1008
+ .ui-icon-clock { background-position: -80px -112px; }
1009
+ .ui-icon-disk { background-position: -96px -112px; }
1010
+ .ui-icon-calculator { background-position: -112px -112px; }
1011
+ .ui-icon-zoomin { background-position: -128px -112px; }
1012
+ .ui-icon-zoomout { background-position: -144px -112px; }
1013
+ .ui-icon-search { background-position: -160px -112px; }
1014
+ .ui-icon-wrench { background-position: -176px -112px; }
1015
+ .ui-icon-gear { background-position: -192px -112px; }
1016
+ .ui-icon-heart { background-position: -208px -112px; }
1017
+ .ui-icon-star { background-position: -224px -112px; }
1018
+ .ui-icon-link { background-position: -240px -112px; }
1019
+ .ui-icon-cancel { background-position: 0 -128px; }
1020
+ .ui-icon-plus { background-position: -16px -128px; }
1021
+ .ui-icon-plusthick { background-position: -32px -128px; }
1022
+ .ui-icon-minus { background-position: -48px -128px; }
1023
+ .ui-icon-minusthick { background-position: -64px -128px; }
1024
+ .ui-icon-close { background-position: -80px -128px; }
1025
+ .ui-icon-closethick { background-position: -96px -128px; }
1026
+ .ui-icon-key { background-position: -112px -128px; }
1027
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1028
+ .ui-icon-scissors { background-position: -144px -128px; }
1029
+ .ui-icon-clipboard { background-position: -160px -128px; }
1030
+ .ui-icon-copy { background-position: -176px -128px; }
1031
+ .ui-icon-contact { background-position: -192px -128px; }
1032
+ .ui-icon-image { background-position: -208px -128px; }
1033
+ .ui-icon-video { background-position: -224px -128px; }
1034
+ .ui-icon-script { background-position: -240px -128px; }
1035
+ .ui-icon-alert { background-position: 0 -144px; }
1036
+ .ui-icon-info { background-position: -16px -144px; }
1037
+ .ui-icon-notice { background-position: -32px -144px; }
1038
+ .ui-icon-help { background-position: -48px -144px; }
1039
+ .ui-icon-check { background-position: -64px -144px; }
1040
+ .ui-icon-bullet { background-position: -80px -144px; }
1041
+ .ui-icon-radio-on { background-position: -96px -144px; }
1042
+ .ui-icon-radio-off { background-position: -112px -144px; }
1043
+ .ui-icon-pin-w { background-position: -128px -144px; }
1044
+ .ui-icon-pin-s { background-position: -144px -144px; }
1045
+ .ui-icon-play { background-position: 0 -160px; }
1046
+ .ui-icon-pause { background-position: -16px -160px; }
1047
+ .ui-icon-seek-next { background-position: -32px -160px; }
1048
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1049
+ .ui-icon-seek-end { background-position: -64px -160px; }
1050
+ .ui-icon-seek-start { background-position: -80px -160px; }
1051
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1052
+ .ui-icon-seek-first { background-position: -80px -160px; }
1053
+ .ui-icon-stop { background-position: -96px -160px; }
1054
+ .ui-icon-eject { background-position: -112px -160px; }
1055
+ .ui-icon-volume-off { background-position: -128px -160px; }
1056
+ .ui-icon-volume-on { background-position: -144px -160px; }
1057
+ .ui-icon-power { background-position: 0 -176px; }
1058
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1059
+ .ui-icon-signal { background-position: -32px -176px; }
1060
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1061
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1062
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1063
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1064
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1065
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1066
+ .ui-icon-circle-close { background-position: -32px -192px; }
1067
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1068
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1069
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1070
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1071
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1072
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1073
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1074
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1075
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1076
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1077
+ .ui-icon-circle-check { background-position: -208px -192px; }
1078
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1079
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1080
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1081
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1082
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1083
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1084
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1085
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1086
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1087
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1088
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1089
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1090
+
1091
+
1092
+ /* Misc visuals
1093
+ ----------------------------------*/
1094
+
1095
+ /* Corner radius */
1096
+ .ui-corner-all,
1097
+ .ui-corner-top,
1098
+ .ui-corner-left,
1099
+ .ui-corner-tl {
1100
+ border-top-left-radius: 4px;
1101
+ }
1102
+ .ui-corner-all,
1103
+ .ui-corner-top,
1104
+ .ui-corner-right,
1105
+ .ui-corner-tr {
1106
+ border-top-right-radius: 4px;
1107
+ }
1108
+ .ui-corner-all,
1109
+ .ui-corner-bottom,
1110
+ .ui-corner-left,
1111
+ .ui-corner-bl {
1112
+ border-bottom-left-radius: 4px;
1113
+ }
1114
+ .ui-corner-all,
1115
+ .ui-corner-bottom,
1116
+ .ui-corner-right,
1117
+ .ui-corner-br {
1118
+ border-bottom-right-radius: 4px;
1119
+ }
1120
+
1121
+ /* Overlays */
1122
+ .ui-widget-overlay {
1123
+ background: #666666 url(../img/datepicker/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
1124
+ opacity: .5;
1125
+ filter: Alpha(Opacity=50);
1126
+ }
1127
+ .ui-widget-shadow {
1128
+ margin: -5px 0 0 -5px;
1129
+ padding: 5px;
1130
+ background: #000000 url(../img/datepicker/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
1131
+ opacity: .2;
1132
+ filter: Alpha(Opacity=20);
1133
+ border-radius: 5px;
1134
+ }
1135
+
1136
+ /**
1137
+ * Melon skin from: https://github.com/rtsinani/jquery-datepicker-skins
1138
+ */
1139
+
1140
+ .wp-admin {
1141
+ font-size: 90%;
1142
+ }
1143
+
1144
+ .wp-admin .ui-widget {
1145
+ font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
1146
+ background: #2e3641;
1147
+ border: none;
1148
+ border-radius: 0;
1149
+ -webkit-border-radius: 0;
1150
+ -moz-border-radius: 0;
1151
+ }
1152
+
1153
+ .wp-admin .ui-datepicker {
1154
+ padding: 0;
1155
+ }
1156
+
1157
+ .wp-admin .ui-datepicker-header {
1158
+ border: none;
1159
+ background: transparent;
1160
+ font-weight: normal;
1161
+ font-size: 15px;
1162
+ }
1163
+
1164
+ .wp-admin .ui-datepicker-header .ui-state-hover {
1165
+ background: transparent;
1166
+ border-color: transparent;
1167
+ cursor: pointer;
1168
+ border-radius: 0;
1169
+ -webkit-border-radius: 0;
1170
+ -moz-border-radius: 0;
1171
+ }
1172
+
1173
+ .wp-admin .ui-datepicker .ui-datepicker-title {
1174
+ margin-top: .4em;
1175
+ margin-bottom: .3em;
1176
+ color: #e9f0f4;
1177
+ }
1178
+
1179
+ .wp-admin .ui-datepicker .ui-datepicker-prev-hover,
1180
+ .wp-admin .ui-datepicker .ui-datepicker-next-hover,
1181
+ .wp-admin .ui-datepicker .ui-datepicker-next,
1182
+ .wp-admin .ui-datepicker .ui-datepicker-prev {
1183
+ top: .9em;
1184
+ border:none;
1185
+ }
1186
+
1187
+ .wp-admin .ui-datepicker .ui-datepicker-prev-hover {
1188
+ left: 2px;
1189
+ }
1190
+
1191
+ .wp-admin .ui-datepicker .ui-datepicker-next-hover {
1192
+ right: 2px;
1193
+ }
1194
+
1195
+ .wp-admin .ui-datepicker .ui-datepicker-next span,
1196
+ .wp-admin .ui-datepicker .ui-datepicker-prev span {
1197
+ background-image: url(../img/datepicker/ui-icons_ffffff_256x240.png);
1198
+ background-position: -32px 0;
1199
+ margin-top: 0;
1200
+ top: 0;
1201
+ font-weight: normal;
1202
+ }
1203
+
1204
+ .wp-admin .ui-datepicker .ui-datepicker-prev span {
1205
+ background-position: -96px 0;
1206
+ }
1207
+
1208
+ .wp-admin .ui-datepicker table {
1209
+ margin: 0;
1210
+ }
1211
+
1212
+ .wp-admin .ui-datepicker th {
1213
+ padding: 1em 0;
1214
+ color: #ccc;
1215
+ font-size: 13px;
1216
+ font-weight: normal;
1217
+ border: none;
1218
+ border-top: 1px solid #3a414d;
1219
+ }
1220
+
1221
+ .wp-admin .ui-datepicker td {
1222
+ background: #f97e76;
1223
+ border: none;
1224
+ padding: 0;
1225
+ }
1226
+
1227
+ .wp-admin td .ui-state-default {
1228
+ background: transparent;
1229
+ border: none;
1230
+ text-align: center;
1231
+ padding: .5em;
1232
+ margin: 0;
1233
+ font-weight: normal;
1234
+ color: #efefef;
1235
+ font-size: 16px;
1236
+ }
1237
+
1238
+ .wp-admin .ui-state-disabled {
1239
+ opacity: 1;
1240
+ }
1241
+
1242
+ .wp-admin .ui-state-disabled .ui-state-default {
1243
+ color: #fba49e;
1244
+ }
1245
+
1246
+ .wp-admin td .ui-state-active,
1247
+ .wp-admin td .ui-state-hover {
1248
+ background: #2e3641;
1249
+ }
1250
+
1251
+
1252
+ .clearfix {
1253
+ zoom: 1;
1254
+ }
1255
+ .clearfix:before,
1256
+ .clearfix:after {
1257
+ content: "";
1258
+ display: table;
1259
+ }
1260
+ .clearfix:after {
1261
+ clear: both;
1262
+ }
1263
+ a:focus {
1264
+ outline: 0 none !important;
1265
+ }
1266
+ .mailpoet_success {
1267
+ color: #090;
1268
+ }
1269
+ .mailpoet_error {
1270
+ color: #900;
1271
+ }
1272
+ .mailpoet_hidden {
1273
+ display: none;
1274
+ }
1275
+ .select2-container {
1276
+ width: 25em !important;
1277
+ }
1278
+ textarea.regular-text {
1279
+ width: 25em !important;
1280
+ }
1281
+ @media screen and (max-width: 782px) {
1282
+ .select2-container {
1283
+ width: 100% !important;
1284
+ }
1285
+ }
1286
+ progress {
1287
+ background-color: #efefef;
1288
+ height: 2em;
1289
+ border: 0;
1290
+ width: 100%;
1291
+ }
1292
+ progress::-webkit-progress-bar {
1293
+ background-color: #efefef;
1294
+ }
1295
+ progress::-webkit-progress-value {
1296
+ background-color: #69b1e9;
1297
+ border-radius: 5px;
1298
+ }
1299
+ progress::-moz-progress-bar {
1300
+ background-color: #69b1e9;
1301
+ border-radius: 5px;
1302
+ }
1303
+ body.mailpoet_modal_opened {
1304
+ overflow: hidden;
1305
+ }
1306
+ #mailpoet_modal_overlay {
1307
+ height: 100%;
1308
+ left: 0;
1309
+ overflow-y: auto;
1310
+ overflow-x: hidden;
1311
+ position: fixed;
1312
+ top: 0;
1313
+ width: 100%;
1314
+ z-index: 100000;
1315
+ background-color: rgba(0,0,0,0.6);
1316
+ }
1317
+ .mailpoet_modal_highlight {
1318
+ pointer-events: none;
1319
+ background-color: #f1f1f1;
1320
+ position: relative;
1321
+ z-index: 100001 !important;
1322
+ -webkit-box-shadow: 0px 0px 20px 2px rgba(255,255,255,0.75);
1323
+ box-shadow: 0px 0px 20px 2px rgba(255,255,255,0.75);
1324
+ }
1325
+ #mailpoet_modal_overlay.mailpoet_overlay_hidden {
1326
+ background-color: transparent;
1327
+ }
1328
+ #mailpoet_modal_overlay.mailpoet_overlay_loading {
1329
+ background-color: rgba(0,0,0,0.6) !important;
1330
+ display: block !important;
1331
+ }
1332
+ .mailpoet_modal_opened #mailpoet_modal_overlay {
1333
+ display: block;
1334
+ }
1335
+ #mailpoet_popup {
1336
+ display: none;
1337
+ position: absolute;
1338
+ z-index: 25;
1339
+ top: 48px;
1340
+ padding-bottom: 48px;
1341
+ margin: 0;
1342
+ }
1343
+ .mailpoet_popup_wrapper {
1344
+ background-color: #f0f0f0;
1345
+ overflow: hidden;
1346
+ position: relative;
1347
+ width: 100%;
1348
+ z-index: 0;
1349
+ }
1350
+ .mailpoet_overlay_hidden .mailpoet_popup_wrapper {
1351
+ border: 1px solid #333;
1352
+ }
1353
+ #mailpoet_popup_title {
1354
+ background-color: #222;
1355
+ border: 1px solid #333;
1356
+ height: 27px;
1357
+ margin: 0;
1358
+ padding: 0 30px 0 0;
1359
+ }
1360
+ #mailpoet_popup_title h2 {
1361
+ color: #cfcfcf;
1362
+ font-size: 12px;
1363
+ font-weight: normal;
1364
+ margin: 6px 0 0 10px;
1365
+ padding: 0;
1366
+ font-family: "Lucida Grande", Verdana, Arial, sans-serif;
1367
+ }
1368
+ .mailpoet_popup_body {
1369
+ padding: 10px 10px 10px 10px;
1370
+ }
1371
+ #mailpoet_modal_overlay.mailpoet_panel_overlay {
1372
+ top: 32px;
1373
+ overflow: hidden;
1374
+ }
1375
+ #mailpoet_panel {
1376
+ display: none;
1377
+ position: fixed;
1378
+ z-index: 100002;
1379
+ top: 0;
1380
+ bottom: 0;
1381
+ padding: 0;
1382
+ margin: 0;
1383
+ width: 100%;
1384
+ -webkit-transition: margin 350ms ease-out;
1385
+ -moz-transition: margin 350ms ease-out;
1386
+ -o-transition: margin 350ms ease-out;
1387
+ -ms-transition: margin 350ms ease-out;
1388
+ transition: margin 350ms ease-out;
1389
+ }
1390
+ .mailpoet_panel_wrapper {
1391
+ background-color: #f1f1f1;
1392
+ border: 1px solid #e1e1e1;
1393
+ border-top: 0 none;
1394
+ height: 100%;
1395
+ overflow-y: auto;
1396
+ overflow-x: hidden;
1397
+ width: 100%;
1398
+ top: 0;
1399
+ z-index: 0;
1400
+ }
1401
+ #mailpoet_panel_title {
1402
+ margin: 0;
1403
+ padding: 0;
1404
+ position: relative;
1405
+ height: 0;
1406
+ }
1407
+ #mailpoet_panel_title h2 {
1408
+ color: #cfcfcf;
1409
+ background-color: #222;
1410
+ border-left: 1px solid #444;
1411
+ border-right: 1px solid #444;
1412
+ font-size: 1em;
1413
+ font-weight: normal;
1414
+ margin: 0;
1415
+ padding: 0 30px 0 10px;
1416
+ font-family: "Lucida Grande", Verdana, Arial, sans-serif;
1417
+ line-height: 32px;
1418
+ }
1419
+ .mailpoet_panel_body {
1420
+ padding: 10px 10px 36px 10px;
1421
+ }
1422
+ #mailpoet_modal_close {
1423
+ background: url("../img/modal_close_button.png") 7px 7px no-repeat;
1424
+ height: 30px;
1425
+ overflow: hidden;
1426
+ padding: 0;
1427
+ position: absolute;
1428
+ width: 30px;
1429
+ z-index: 2;
1430
+ outline: 0 none;
1431
+ }
1432
+ #mailpoet_popup #mailpoet_modal_close {
1433
+ right: 0;
1434
+ top: 0;
1435
+ }
1436
+ #mailpoet_panel #mailpoet_modal_close {
1437
+ right: 10px;
1438
+ top: 7px;
1439
+ }
1440
+ #mailpoet_modal_close:focus {
1441
+ outline: 0 none;
1442
+ }
1443
+ .mailpoet_align_left {
1444
+ margin: 0;
1445
+ text-align: left;
1446
+ }
1447
+ .mailpoet_align_center {
1448
+ margin: 0;
1449
+ text-align: center;
1450
+ }
1451
+ .mailpoet_align_right {
1452
+ margin: 0;
1453
+ text-align: right;
1454
+ }
1455
+ @media screen and (max-width: 782px) {
1456
+ #mailpoet_modal_overlay.mailpoet_panel_overlay {
1457
+ top: 46px;
1458
+ }
1459
+ .mailpoet_panel_body {
1460
+ padding-bottom: 52px;
1461
+ }
1462
+ }
1463
+ #mailpoet_loading {
1464
+ width: 150px;
1465
+ height: 32px;
1466
+ position: relative;
1467
+ left: 50%;
1468
+ top: 50%;
1469
+ margin-left: -75px;
1470
+ margin-top: -16px;
1471
+ }
1472
+ .mailpoet_modal_loading {
1473
+ -webkit-animation-direction: linear;
1474
+ -moz-animation-direction: linear;
1475
+ -o-animation-direction: linear;
1476
+ -ms-animation-direction: linear;
1477
+ animation-direction: linear;
1478
+ -webkit-animation-duration: 1.95s;
1479
+ -moz-animation-duration: 1.95s;
1480
+ -o-animation-duration: 1.95s;
1481
+ -ms-animation-duration: 1.95s;
1482
+ animation-duration: 1.95s;
1483
+ -webkit-animation-iteration-count: infinite;
1484
+ -moz-animation-iteration-count: infinite;
1485
+ -o-animation-iteration-count: infinite;
1486
+ -ms-animation-iteration-count: infinite;
1487
+ animation-iteration-count: infinite;
1488
+ -webkit-animation-name: bounce_mailpoet_modal_loading;
1489
+ -moz-animation-name: bounce_mailpoet_modal_loading;
1490
+ -o-animation-name: bounce_mailpoet_modal_loading;
1491
+ -ms-animation-name: bounce_mailpoet_modal_loading;
1492
+ animation-name: bounce_mailpoet_modal_loading;
1493
+ border-radius: 21px;
1494
+ background-color: #e01d4e;
1495
+ float: left;
1496
+ height: 32px;
1497
+ margin-left: 17px;
1498
+ width: 32px;
1499
+ }
1500
+ #mailpoet_modal_loading_1 {
1501
+ -webkit-animation-delay: 0.39s;
1502
+ -moz-animation-delay: 0.39s;
1503
+ -o-animation-delay: 0.39s;
1504
+ -ms-animation-delay: 0.39s;
1505
+ animation-delay: 0.39s;
1506
+ }
1507
+ #mailpoet_modal_loading_2 {
1508
+ -webkit-animation-delay: 0.91s;
1509
+ -moz-animation-delay: 0.91s;
1510
+ -o-animation-delay: 0.91s;
1511
+ -ms-animation-delay: 0.91s;
1512
+ animation-delay: 0.91s;
1513
+ }
1514
+ #mailpoet_modal_loading_3 {
1515
+ -webkit-animation-delay: 1.17s;
1516
+ -moz-animation-delay: 1.17s;
1517
+ -o-animation-delay: 1.17s;
1518
+ -ms-animation-delay: 1.17s;
1519
+ animation-delay: 1.17s;
1520
+ }
1521
+ @-moz-keyframes bounce_mailpoet_modal_loading {
1522
+ 0%, 50% {
1523
+ background-color: #064e6d;
1524
+ }
1525
+ }
1526
+ @-webkit-keyframes bounce_mailpoet_modal_loading {
1527
+ 0%, 50% {
1528
+ background-color: #064e6d;
1529
+ }
1530
+ }
1531
+ @-o-keyframes bounce_mailpoet_modal_loading {
1532
+ 0%, 50% {
1533
+ background-color: #064e6d;
1534
+ }
1535
+ }
1536
+ @keyframes bounce_mailpoet_modal_loading {
1537
+ 0%, 50% {
1538
+ background-color: #064e6d;
1539
+ }
1540
+ }
1541
+ .mailpoet_notice {
1542
+ position: relative;
1543
+ }
1544
+ .mailpoet_notice_close {
1545
+ position: absolute;
1546
+ right: 0.5em;
1547
+ top: 0.5em;
1548
+ color: #999;
1549
+ text-decoration: none !important;
1550
+ }
1551
+ /* BASICS */
1552
+
1553
+ .CodeMirror {
1554
+ /* Set height, width, borders, and global font properties here */
1555
+ font-family: monospace;
1556
+ height: 300px;
1557
+ color: black;
1558
+ }
1559
+
1560
+ /* PADDING */
1561
+
1562
+ .CodeMirror-lines {
1563
+ padding: 4px 0; /* Vertical padding around content */
1564
+ }
1565
+ .CodeMirror pre {
1566
+ padding: 0 4px; /* Horizontal padding of content */
1567
+ }
1568
+
1569
+ .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
1570
+ background-color: white; /* The little square between H and V scrollbars */
1571
+ }
1572
+
1573
+ /* GUTTER */
1574
+
1575
+ .CodeMirror-gutters {
1576
+ border-right: 1px solid #ddd;
1577
+ background-color: #f7f7f7;
1578
+ white-space: nowrap;
1579
+ }
1580
+ .CodeMirror-linenumbers {}
1581
+ .CodeMirror-linenumber {
1582
+ padding: 0 3px 0 5px;
1583
+ min-width: 20px;
1584
+ text-align: right;
1585
+ color: #999;
1586
+ white-space: nowrap;
1587
+ }
1588
+
1589
+ .CodeMirror-guttermarker { color: black; }
1590
+ .CodeMirror-guttermarker-subtle { color: #999; }
1591
+
1592
+ /* CURSOR */
1593
+
1594
+ .CodeMirror-cursor {
1595
+ border-left: 1px solid black;
1596
+ border-right: none;
1597
+ width: 0;
1598
+ }
1599
+ /* Shown when moving in bi-directional text */
1600
+ .CodeMirror div.CodeMirror-secondarycursor {
1601
+ border-left: 1px solid silver;
1602
+ }
1603
+ .cm-fat-cursor .CodeMirror-cursor {
1604
+ width: auto;
1605
+ border: 0 !important;
1606
+ background: #7e7;
1607
+ }
1608
+ .cm-fat-cursor div.CodeMirror-cursors {
1609
+ z-index: 1;
1610
+ }
1611
+
1612
+ .cm-animate-fat-cursor {
1613
+ width: auto;
1614
+ border: 0;
1615
+ -webkit-animation: blink 1.06s steps(1) infinite;
1616
+ -moz-animation: blink 1.06s steps(1) infinite;
1617
+ animation: blink 1.06s steps(1) infinite;
1618
+ background-color: #7e7;
1619
+ }
1620
+ @-moz-keyframes blink {
1621
+ 0% {}
1622
+ 50% { background-color: transparent; }
1623
+ 100% {}
1624
+ }
1625
+ @-webkit-keyframes blink {
1626
+ 0% {}
1627
+ 50% { background-color: transparent; }
1628
+ 100% {}
1629
+ }
1630
+ @keyframes blink {
1631
+ 0% {}
1632
+ 50% { background-color: transparent; }
1633
+ 100% {}
1634
+ }
1635
+
1636
+ /* Can style cursor different in overwrite (non-insert) mode */
1637
+ .CodeMirror-overwrite .CodeMirror-cursor {}
1638
+
1639
+ .cm-tab { display: inline-block; text-decoration: inherit; }
1640
+
1641
+ .CodeMirror-rulers {
1642
+ position: absolute;
1643
+ left: 0; right: 0; top: -50px; bottom: -20px;
1644
+ overflow: hidden;
1645
+ }
1646
+ .CodeMirror-ruler {
1647
+ border-left: 1px solid #ccc;
1648
+ top: 0; bottom: 0;
1649
+ position: absolute;
1650
+ }
1651
+
1652
+ /* DEFAULT THEME */
1653
+
1654
+ .cm-s-default .cm-header {color: blue;}
1655
+ .cm-s-default .cm-quote {color: #090;}
1656
+ .cm-negative {color: #d44;}
1657
+ .cm-positive {color: #292;}
1658
+ .cm-header, .cm-strong {font-weight: bold;}
1659
+ .cm-em {font-style: italic;}
1660
+ .cm-link {text-decoration: underline;}
1661
+ .cm-strikethrough {text-decoration: line-through;}
1662
+
1663
+ .cm-s-default .cm-keyword {color: #708;}
1664
+ .cm-s-default .cm-atom {color: #219;}
1665
+ .cm-s-default .cm-number {color: #164;}
1666
+ .cm-s-default .cm-def {color: #00f;}
1667
+ .cm-s-default .cm-variable,
1668
+ .cm-s-default .cm-punctuation,
1669
+ .cm-s-default .cm-property,
1670
+ .cm-s-default .cm-operator {}
1671
+ .cm-s-default .cm-variable-2 {color: #05a;}
1672
+ .cm-s-default .cm-variable-3 {color: #085;}
1673
+ .cm-s-default .cm-comment {color: #a50;}
1674
+ .cm-s-default .cm-string {color: #a11;}
1675
+ .cm-s-default .cm-string-2 {color: #f50;}
1676
+ .cm-s-default .cm-meta {color: #555;}
1677
+ .cm-s-default .cm-qualifier {color: #555;}
1678
+ .cm-s-default .cm-builtin {color: #30a;}
1679
+ .cm-s-default .cm-bracket {color: #997;}
1680
+ .cm-s-default .cm-tag {color: #170;}
1681
+ .cm-s-default .cm-attribute {color: #00c;}
1682
+ .cm-s-default .cm-hr {color: #999;}
1683
+ .cm-s-default .cm-link {color: #00c;}
1684
+
1685
+ .cm-s-default .cm-error {color: #f00;}
1686
+ .cm-invalidchar {color: #f00;}
1687
+
1688
+ .CodeMirror-composing { border-bottom: 2px solid; }
1689
+
1690
+ /* Default styles for common addons */
1691
+
1692
+ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
1693
+ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
1694
+ .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
1695
+ .CodeMirror-activeline-background {background: #e8f2ff;}
1696
+
1697
+ /* STOP */
1698
+
1699
+ /* The rest of this file contains styles related to the mechanics of
1700
+ the editor. You probably shouldn't touch them. */
1701
+
1702
+ .CodeMirror {
1703
+ position: relative;
1704
+ overflow: hidden;
1705
+ background: white;
1706
+ }
1707
+
1708
+ .CodeMirror-scroll {
1709
+ overflow: scroll !important; /* Things will break if this is overridden */
1710
+ /* 30px is the magic margin used to hide the element's real scrollbars */
1711
+ /* See overflow: hidden in .CodeMirror */
1712
+ margin-bottom: -30px; margin-right: -30px;
1713
+ padding-bottom: 30px;
1714
+ height: 100%;
1715
+ outline: none; /* Prevent dragging from highlighting the element */
1716
+ position: relative;
1717
+ }
1718
+ .CodeMirror-sizer {
1719
+ position: relative;
1720
+ border-right: 30px solid transparent;
1721
+ }
1722
+
1723
+ /* The fake, visible scrollbars. Used to force redraw during scrolling
1724
+ before actual scrolling happens, thus preventing shaking and
1725
+ flickering artifacts. */
1726
+ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
1727
+ position: absolute;
1728
+ z-index: 6;
1729
+ display: none;
1730
+ }
1731
+ .CodeMirror-vscrollbar {
1732
+ right: 0; top: 0;
1733
+ overflow-x: hidden;
1734
+ overflow-y: scroll;
1735
+ }
1736
+ .CodeMirror-hscrollbar {
1737
+ bottom: 0; left: 0;
1738
+ overflow-y: hidden;
1739
+ overflow-x: scroll;
1740
+ }
1741
+ .CodeMirror-scrollbar-filler {
1742
+ right: 0; bottom: 0;
1743
+ }
1744
+ .CodeMirror-gutter-filler {
1745
+ left: 0; bottom: 0;
1746
+ }
1747
+
1748
+ .CodeMirror-gutters {
1749
+ position: absolute; left: 0; top: 0;
1750
+ min-height: 100%;
1751
+ z-index: 3;
1752
+ }
1753
+ .CodeMirror-gutter {
1754
+ white-space: normal;
1755
+ height: 100%;
1756
+ display: inline-block;
1757
+ vertical-align: top;
1758
+ margin-bottom: -30px;
1759
+ }
1760
+ .CodeMirror-gutter-wrapper {
1761
+ position: absolute;
1762
+ z-index: 4;
1763
+ background: none !important;
1764
+ border: none !important;
1765
+ }
1766
+ .CodeMirror-gutter-background {
1767
+ position: absolute;
1768
+ top: 0; bottom: 0;
1769
+ z-index: 4;
1770
+ }
1771
+ .CodeMirror-gutter-elt {
1772
+ position: absolute;
1773
+ cursor: default;
1774
+ z-index: 4;
1775
+ }
1776
+ .CodeMirror-gutter-wrapper {
1777
+ -webkit-user-select: none;
1778
+ -moz-user-select: none;
1779
+ user-select: none;
1780
+ }
1781
+
1782
+ .CodeMirror-lines {
1783
+ cursor: text;
1784
+ min-height: 1px; /* prevents collapsing before first draw */
1785
+ }
1786
+ .CodeMirror pre {
1787
+ /* Reset some styles that the rest of the page might have set */
1788
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
1789
+ border-width: 0;
1790
+ background: transparent;
1791
+ font-family: inherit;
1792
+ font-size: inherit;
1793
+ margin: 0;
1794
+ white-space: pre;
1795
+ word-wrap: normal;
1796
+ line-height: inherit;
1797
+ color: inherit;
1798
+ z-index: 2;
1799
+ position: relative;
1800
+ overflow: visible;
1801
+ -webkit-tap-highlight-color: transparent;
1802
+ -webkit-font-variant-ligatures: none;
1803
+ font-variant-ligatures: none;
1804
+ }
1805
+ .CodeMirror-wrap pre {
1806
+ word-wrap: break-word;
1807
+ white-space: pre-wrap;
1808
+ word-break: normal;
1809
+ }
1810
+
1811
+ .CodeMirror-linebackground {
1812
+ position: absolute;
1813
+ left: 0; right: 0; top: 0; bottom: 0;
1814
+ z-index: 0;
1815
+ }
1816
+
1817
+ .CodeMirror-linewidget {
1818
+ position: relative;
1819
+ z-index: 2;
1820
+ overflow: auto;
1821
+ }
1822
+
1823
+ .CodeMirror-widget {}
1824
+
1825
+ .CodeMirror-code {
1826
+ outline: none;
1827
+ }
1828
+
1829
+ /* Force content-box sizing for the elements where we expect it */
1830
+ .CodeMirror-scroll,
1831
+ .CodeMirror-sizer,
1832
+ .CodeMirror-gutter,
1833
+ .CodeMirror-gutters,
1834
+ .CodeMirror-linenumber {
1835
+ -moz-box-sizing: content-box;
1836
+ box-sizing: content-box;
1837
+ }
1838
+
1839
+ .CodeMirror-measure {
1840
+ position: absolute;
1841
+ width: 100%;
1842
+ height: 0;
1843
+ overflow: hidden;
1844
+ visibility: hidden;
1845
+ }
1846
+
1847
+ .CodeMirror-cursor {
1848
+ position: absolute;
1849
+ pointer-events: none;
1850
+ }
1851
+ .CodeMirror-measure pre { position: static; }
1852
+
1853
+ div.CodeMirror-cursors {
1854
+ visibility: hidden;
1855
+ position: relative;
1856
+ z-index: 3;
1857
+ }
1858
+ div.CodeMirror-dragcursors {
1859
+ visibility: visible;
1860
+ }
1861
+
1862
+ .CodeMirror-focused div.CodeMirror-cursors {
1863
+ visibility: visible;
1864
+ }
1865
+
1866
+ .CodeMirror-selected { background: #d9d9d9; }
1867
+ .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
1868
+ .CodeMirror-crosshair { cursor: crosshair; }
1869
+ .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
1870
+ .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
1871
+
1872
+ .cm-searching {
1873
+ background: #ffa;
1874
+ background: rgba(255, 255, 0, .4);
1875
+ }
1876
+
1877
+ /* Used to force a border model for a node */
1878
+ .cm-force-border { padding-right: .1px; }
1879
+
1880
+ @media print {
1881
+ /* Hide the cursor when printing */
1882
+ .CodeMirror div.CodeMirror-cursors {
1883
+ visibility: hidden;
1884
+ }
1885
+ }
1886
+
1887
+ /* See issue #2901 */
1888
+ .cm-tab-wrap-hack:after { content: ''; }
1889
+
1890
+ /* Help users use markselection to safely style text background */
1891
+ span.CodeMirror-selectedtext { background: none; }
1892
+
1893
+ /* neo theme for codemirror */
1894
+
1895
+ /* Color scheme */
1896
+
1897
+ .cm-s-neo.CodeMirror {
1898
+ background-color:#ffffff;
1899
+ color:#2e383c;
1900
+ line-height:1.4375;
1901
+ }
1902
+ .cm-s-neo .cm-comment { color:#75787b; }
1903
+ .cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; }
1904
+ .cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; }
1905
+ .cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; }
1906
+ .cm-s-neo .cm-string { color:#b35e14; }
1907
+ .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; }
1908
+
1909
+
1910
+ /* Editor styling */
1911
+
1912
+ .cm-s-neo pre {
1913
+ padding:0;
1914
+ }
1915
+
1916
+ .cm-s-neo .CodeMirror-gutters {
1917
+ border:none;
1918
+ border-right:10px solid transparent;
1919
+ background-color:transparent;
1920
+ }
1921
+
1922
+ .cm-s-neo .CodeMirror-linenumber {
1923
+ padding:0;
1924
+ color:#e0e2e5;
1925
+ }
1926
+
1927
+ .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }
1928
+ .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }
1929
+
1930
+ .cm-s-neo .CodeMirror-cursor {
1931
+ width: auto;
1932
+ border: 0;
1933
+ background: rgba(155,157,162,0.37);
1934
+ z-index: 1;
1935
+ }
1936
+
1937
+ #mailpoet_form_name {
1938
+ font-size: 23px;
1939
+ }
1940
+ #mailpoet_form_history {
1941
+ display: none;
1942
+ }
1943
+ #mailpoet_form_editor {
1944
+ padding: 20px;
1945
+ width: 300px;
1946
+ border: 1px solid #ccc;
1947
+ position: relative;
1948
+ background-color: #fff;
1949
+ -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.2) inset 0 0 20px rgba(0,0,0,0.1);
1950
+ box-shadow: 0 0 5px rgba(0,0,0,0.2) inset 0 0 20px rgba(0,0,0,0.1);
1951
+ }
1952
+ #mailpoet_form_editor:before,
1953
+ #mailpoet_form_editor:after {
1954
+ position: absolute;
1955
+ width: 40%;
1956
+ height: 10px;
1957
+ content: ' ';
1958
+ left: 12px;
1959
+ bottom: 12px;
1960
+ background: transparent;
1961
+ -webkit-transform: skew(-5deg) rotate(-5deg);
1962
+ -moz-transform: skew(-5deg) rotate(-5deg);
1963
+ -ms-transform: skew(-5deg) rotate(-5deg);
1964
+ -o-transform: skew(-5deg) rotate(-5deg);
1965
+ -webkit-transform: skew(-5deg) rotate(-5deg);
1966
+ -moz-transform: skew(-5deg) rotate(-5deg);
1967
+ -o-transform: skew(-5deg) rotate(-5deg);
1968
+ -ms-transform: skew(-5deg) rotate(-5deg);
1969
+ transform: skew(-5deg) rotate(-5deg);
1970
+ rgba(0,0,0,0.3)
1971
+ rgba(0,0,0,0.3)
1972
+ -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.3);
1973
+ box-shadow: 0 6px 12px rgba(0,0,0,0.3);
1974
+ z-index: -1;
1975
+ }
1976
+ #mailpoet_form_editor:after {
1977
+ left: auto;
1978
+ right: 12px;
1979
+ -webkit-transform: skew(5deg) rotate(5deg);
1980
+ -moz-transform: skew(5deg) rotate(5deg);
1981
+ -ms-transform: skew(5deg) rotate(5deg);
1982
+ -o-transform: skew(5deg) rotate(5deg);
1983
+ -webkit-transform: skew(5deg) rotate(5deg);
1984
+ -moz-transform: skew(5deg) rotate(5deg);
1985
+ -o-transform: skew(5deg) rotate(5deg);
1986
+ -ms-transform: skew(5deg) rotate(5deg);
1987
+ transform: skew(5deg) rotate(5deg);
1988
+ }
1989
+ .mailpoet_warning {
1990
+ font-weight: bold;
1991
+ color: #900;
1992
+ }
1993
+ .block_placeholder {
1994
+ font-weight: bold;
1995
+ height: 0;
1996
+ overflow: hidden;
1997
+ line-height: 30px;
1998
+ text-align: center;
1999
+ border: 0 none;
2000
+ width: 298px;
2001
+ z-index: 9500;
2002
+ margin: 0 auto;
2003
+ text-indent: -9999px;
2004
+ }
2005
+ .block_placeholder.active {
2006
+ text-indent: 0;
2007
+ /*border:1px dashed #dfdfdf;*/
2008
+ /*background-color:#f5f5f5;*/
2009
+ background-color: #4cb7e1;
2010
+ display: block;
2011
+ overflow: auto;
2012
+ height: 30px;
2013
+ }
2014
+ .block_placeholder.hover {
2015
+ background-color: #0074a2;
2016
+ border-color: #0074a2;
2017
+ color: #fff;
2018
+ }
2019
+ .mailpoet_form_block {
2020
+ background-color: #fff;
2021
+ height: 20px;
2022
+ border: 0 none;
2023
+ }
2024
+ .mailpoet_form_block.highlighted {
2025
+ border: 1px solid #5897fb;
2026
+ padding: 9px 17px;
2027
+ }
2028
+ .mailpoet_form_block img {
2029
+ max-width: 100%;
2030
+ }
2031
+ .mailpoet_form_block p {
2032
+ margin: 5px 0;
2033
+ word-wrap: break-word;
2034
+ }
2035
+ .mailpoet_radio,
2036
+ .mailpoet_checkbox {
2037
+ margin: -2px 5px 0 0;
2038
+ }
2039
+ #mailpoet_form_wrapper {
2040
+ position: relative;
2041
+ margin: 20px 0 0 0;
2042
+ }
2043
+ #mailpoet_form_container {
2044
+ width: 340px;
2045
+ margin: 0;
2046
+ }
2047
+ #mailpoet_form_editor.loading,
2048
+ #mailpoet_form_toolbar.loading {
2049
+ background: url("loading.gif") no-repeat center center #fcfcfc;
2050
+ }
2051
+ #mailpoet_form_toolbar.loading {
2052
+ border: 1px solid #dfdfdf;
2053
+ }
2054
+ #mailpoet_form_toolbar.loading #mailpoet_toolbar_fields {
2055
+ visibility: hidden;
2056
+ z-index: 1;
2057
+ }
2058
+ #wysija-add-field {
2059
+ float: none;
2060
+ }
2061
+ #mailpoet_form_toolbar {
2062
+ z-index: 999;
2063
+ position: absolute;
2064
+ width: 400px;
2065
+ }
2066
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs {
2067
+ border-bottom: 1px solid #dfdfdf;
2068
+ line-height: 0;
2069
+ }
2070
+ #mailpoet_form_toolbar .add_custom_field {
2071
+ text-align: center;
2072
+ padding: 15px 0 5px 0;
2073
+ }
2074
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs li,
2075
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs a {
2076
+ margin: 0;
2077
+ height: 30px;
2078
+ line-height: 30px;
2079
+ padding: 0;
2080
+ display: -moz-inline-box;
2081
+ display: inline-block;
2082
+ *display: inline;
2083
+ *float: left;
2084
+ outline: 0 none;
2085
+ }
2086
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs a {
2087
+ outline: 0 none;
2088
+ text-decoration: none;
2089
+ color: #a6a6a6;
2090
+ }
2091
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs li {
2092
+ margin: 0 0 1px 0;
2093
+ }
2094
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs a {
2095
+ font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
2096
+ background-color: #f5f5f5;
2097
+ background: -webkit-linear-gradient(center top, #f9f9f9, #f5f5f5);
2098
+ background: -moz-linear-gradient(center top, #f9f9f9, #f5f5f5);
2099
+ background: -o-linear-gradient(center top, #f9f9f9, #f5f5f5);
2100
+ background: -ms-linear-gradient(center top, #f9f9f9, #f5f5f5);
2101
+ background: linear-gradient(center top, #f9f9f9, #f5f5f5);
2102
+ border: 1px solid #dfdfdf;
2103
+ border-radius: 3px 3px 0 0;
2104
+ -webkit-box-shadow: 0 1px 0 #fff inset;
2105
+ box-shadow: 0 1px 0 #fff inset;
2106
+ padding: 0 7px;
2107
+ }
2108
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs a:hover {
2109
+ background-color: #eee;
2110
+ }
2111
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs a.selected {
2112
+ color: #000;
2113
+ border-bottom: 0 none;
2114
+ background: #fcfcfc;
2115
+ filter: none;
2116
+ padding-bottom: 1px;
2117
+ }
2118
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs .last a,
2119
+ .wysija_params {
2120
+ display: none !important;
2121
+ }
2122
+ #mailpoet_form_toolbar .mailpoet_form_toolbar_tabs,
2123
+ #mailpoet_form_toolbar #mailpoet_toolbar_fields {
2124
+ position: relative;
2125
+ z-index: 9998;
2126
+ margin: 0;
2127
+ }
2128
+ #mailpoet_form_name_input {
2129
+ vertical-align: bottom;
2130
+ }
2131
+ .mailpoet_form_widget {
2132
+ width: 298px;
2133
+ height: 25px;
2134
+ line-height: 25px;
2135
+ z-index: 9999 !important;
2136
+ }
2137
+ .mailpoet_toolbar_section {
2138
+ margin-bottom: 0;
2139
+ background: none repeat scroll 0 0 #fff;
2140
+ border: 1px solid #e5e5e5;
2141
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
2142
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
2143
+ min-width: 255px;
2144
+ position: relative;
2145
+ cursor: pointer;
2146
+ overflow: hidden;
2147
+ max-height: 1000px;
2148
+ -webkit-transition: max-height 0.5s ease-in-out;
2149
+ -moz-transition: max-height 0.5s ease-in-out;
2150
+ -o-transition: max-height 0.5s ease-in-out;
2151
+ -ms-transition: max-height 0.5s ease-in-out;
2152
+ transition: max-height 0.5s ease-in-out;
2153
+ }
2154
+ .mailpoet_toolbar_section > div {
2155
+ padding: 10px 20px 20px 20px;
2156
+ overflow: auto;
2157
+ height: 100%;
2158
+ min-width: 255px;
2159
+ }
2160
+ .mailpoet_toolbar_section h3 {
2161
+ margin: 10px;
2162
+ position: relative;
2163
+ }
2164
+ .mailpoet_toolbar_section.closed {
2165
+ max-height: 38px;
2166
+ }
2167
+ .mailpoet_toolbar_section .mailpoet_toggle {
2168
+ position: absolute;
2169
+ top: 0;
2170
+ right: 0;
2171
+ height: 38px;
2172
+ width: 27px;
2173
+ }
2174
+ .mailpoet_toolbar_section .mailpoet_toggle:focus {
2175
+ outline: 0 none !important;
2176
+ -webkit-box-shadow: none !important;
2177
+ box-shadow: none !important;
2178
+ }
2179
+ .mailpoet_toolbar_section .mailpoet_toggle:before {
2180
+ right: 12px;
2181
+ font: 400 20px/1 dashicons;
2182
+ speak: none;
2183
+ display: inline-block;
2184
+ padding: 8px 10px;
2185
+ top: 0;
2186
+ position: relative;
2187
+ -webkit-font-smoothing: antialiased;
2188
+ -moz-osx-font-smoothing: grayscale;
2189
+ text-decoration: none !important;
2190
+ content: '\f142';
2191
+ }
2192
+ .mailpoet_toolbar_section.closed .mailpoet_toggle:before {
2193
+ content: '\f140';
2194
+ }
2195
+ #mailpoet_form_styles {
2196
+ margin: 10px;
2197
+ max-width: 318px;
2198
+ width: 318px;
2199
+ min-height: 300px;
2200
+ resize: vertical;
2201
+ }
2202
+ #mailpoet_form_toolbar a.mailpoet_form_field,
2203
+ .mailpoet_form_widget {
2204
+ height: 25px;
2205
+ line-height: 25px;
2206
+ background-color: #f5f5f5;
2207
+ background: -webkit-linear-gradient(center top, #f9f9f9, #ececec);
2208
+ background: -moz-linear-gradient(center top, #f9f9f9, #ececec);
2209
+ background: -o-linear-gradient(center top, #f9f9f9, #ececec);
2210
+ background: -ms-linear-gradient(center top, #f9f9f9, #ececec);
2211
+ background: linear-gradient(center top, #f9f9f9, #ececec);
2212
+ border: 1px solid #dfdfdf;
2213
+ border-radius: 3px;
2214
+ -webkit-box-shadow: 0 1px 0 #fff inset;
2215
+ box-shadow: 0 1px 0 #fff inset;
2216
+ display: block;
2217
+ font-size: 12px;
2218
+ font-weight: bold;
2219
+ padding: 0 7px;
2220
+ cursor: move;
2221
+ color: #222;
2222
+ text-shadow: 0 1px 0 #fff;
2223
+ }
2224
+ #mailpoet_form_toolbar a.mailpoet_form_field.disabled {
2225
+ cursor: pointer;
2226
+ color: #ccc;
2227
+ pointer-events: none;
2228
+ }
2229
+ .mailpoet_form_field_edit {
2230
+ position: absolute;
2231
+ right: 27px;
2232
+ bottom: 13px;
2233
+ }
2234
+ .mailpoet_form_field_delete {
2235
+ position: absolute;
2236
+ right: 7px;
2237
+ bottom: 13px;
2238
+ }
2239
+ #mailpoet_toolbar_fields li {
2240
+ padding: 0 0 10px 0;
2241
+ position: relative;
2242
+ }
2243
+ #mailpoet_toolbar_fields li.notice {
2244
+ font-style: italic;
2245
+ font-size: 11px;
2246
+ margin: 0 !important;
2247
+ border: 0 none !important;
2248
+ background: none !important;
2249
+ }
2250
+ .mailpoet_form_block {
2251
+ position: relative;
2252
+ margin: 0;
2253
+ padding: 10px 18px 10px 18px;
2254
+ display: inline-table;
2255
+ display: block;
2256
+ height: 1%;
2257
+ margin: 0;
2258
+ z-index: 98;
2259
+ }
2260
+ .mailpoet_form_block.dragging {
2261
+ z-index: 99000;
2262
+ pointer-events: none;
2263
+ }
2264
+ .mailpoet_form_block:after {
2265
+ content: ".";
2266
+ display: block;
2267
+ height: 0;
2268
+ clear: both;
2269
+ visibility: hidden;
2270
+ }
2271
+ .mailpoet_form_block.hover {
2272
+ border: 1px dashed #bbb;
2273
+ margin: 0 0 0 0;
2274
+ padding: 9px 17px 9px 17px;
2275
+ }
2276
+ .mailpoet_form_block.static {
2277
+ /*padding:0;
2278
+ margin:0;*/
2279
+ background-color: #999;
2280
+ }
2281
+ .mailpoet_form_block .wysija_controls {
2282
+ background-color: #dfdfdf;
2283
+ background: -webkit-linear-gradient(center top, #eee, #bbb);
2284
+ background: -moz-linear-gradient(center top, #eee, #bbb);
2285
+ background: -o-linear-gradient(center top, #eee, #bbb);
2286
+ background: -ms-linear-gradient(center top, #eee, #bbb);
2287
+ background: linear-gradient(center top, #eee, #bbb);
2288
+ border-radius: 2px;
2289
+ border: 1px solid #ccc;
2290
+ position: absolute;
2291
+ margin: 0;
2292
+ padding: 0;
2293
+ width: 298px;
2294
+ height: 20px;
2295
+ left: -1px;
2296
+ right: 0;
2297
+ top: -22px;
2298
+ }
2299
+ .mailpoet_form_block .wysija_controls li {
2300
+ float: left;
2301
+ width: 20px;
2302
+ height: 20px;
2303
+ }
2304
+ .mailpoet_form_block .wysija_controls a {
2305
+ cursor: pointer;
2306
+ float: left;
2307
+ font-size: 120%;
2308
+ font-weight: bold;
2309
+ height: 20px;
2310
+ line-height: 20px;
2311
+ text-align: center;
2312
+ width: 20px;
2313
+ color: #000;
2314
+ }
2315
+ .mailpoet_form_block .wysija_controls a.remove {
2316
+ margin: 0 0 0 1px;
2317
+ }
2318
+ .mailpoet_form_block .handle_container,
2319
+ .mailpoet_form_block .handle_container a {
2320
+ float: none;
2321
+ width: 40px !important;
2322
+ }
2323
+ .mailpoet_form_block .handle_container {
2324
+ left: 140px;
2325
+ top: 0;
2326
+ position: absolute;
2327
+ }
2328
+ .wysija_controls a span,
2329
+ .wysija_gallery .wysija_tools a span,
2330
+ .wysija_image .wysija_tools a span,
2331
+ .wysija_text .wysija_tools a span,
2332
+ #mailpoet_toolbar_fields a span {
2333
+ display: block;
2334
+ height: 20px;
2335
+ width: 20px;
2336
+ }
2337
+ .wysija_controls span input {
2338
+ margin: 2px 0 0 0;
2339
+ padding: 0;
2340
+ color: transparent;
2341
+ }
2342
+ .alignment-left span {
2343
+ background: url("../img/form_editor_icons.png") no-repeat 0 0;
2344
+ }
2345
+ .alignment-left.active span,
2346
+ .alignment-left:hover span {
2347
+ background: url("../img/form_editor_icons.png") no-repeat 0 -20px;
2348
+ }
2349
+ .alignment-center span {
2350
+ background: url("../img/form_editor_icons.png") no-repeat -20px 0;
2351
+ }
2352
+ .alignment-center.active span,
2353
+ .alignment-center:hover span {
2354
+ background: url("../img/form_editor_icons.png") no-repeat -20px -20px;
2355
+ }
2356
+ .alignment-right span {
2357
+ background: url("../img/form_editor_icons.png") no-repeat -40px 0;
2358
+ }
2359
+ .alignment-right.active span,
2360
+ .alignment-right:hover span {
2361
+ background: url("../img/form_editor_icons.png") no-repeat -40px -20px;
2362
+ }
2363
+ .add-link span {
2364
+ background: url("../img/form_editor_icons.png") no-repeat -60px 0;
2365
+ }
2366
+ .add-link.active span,
2367
+ .add-link:hover span {
2368
+ background: url("../img/form_editor_icons.png") no-repeat -60px -20px;
2369
+ }
2370
+ .remove-link span {
2371
+ background: url("../img/form_editor_icons.png") no-repeat -80px 0;
2372
+ }
2373
+ .remove-link.active span,
2374
+ .remove-link:hover span {
2375
+ background: url("../img/form_editor_icons.png") no-repeat -80px -20px;
2376
+ }
2377
+ .remove span,
2378
+ .delete span {
2379
+ background: url("../img/form_editor_icons.png") no-repeat -100px 0;
2380
+ }
2381
+ .remove.active span,
2382
+ .remove:hover span,
2383
+ .delete.active span,
2384
+ .delete:hover span {
2385
+ background: url("../img/form_editor_icons.png") no-repeat -100px -20px;
2386
+ }
2387
+ .handle span {
2388
+ background: url("../img/handle.png") no-repeat;
2389
+ cursor: move;
2390
+ width: 40px !important;
2391
+ }
2392
+ .duplicate span {
2393
+ background: url("../img/form_editor_icons.png") no-repeat -140px 0;
2394
+ }
2395
+ .duplicate.active span,
2396
+ .duplicate:hover span {
2397
+ background: url("../img/form_editor_icons.png") no-repeat -140px -20px;
2398
+ }
2399
+ .settings span {
2400
+ background: url("../img/form_editor_icons.png") no-repeat -160px 0;
2401
+ }
2402
+ .settings.active span,
2403
+ .settings:hover span {
2404
+ background: url("../img/form_editor_icons.png") no-repeat -160px -20px;
2405
+ }
2406
+ .icon-plus span {
2407
+ background: url("../img/form_editor_icons.png") no-repeat -200px 0;
2408
+ }
2409
+ .icon-plus.active span,
2410
+ .icon-plus:hover span {
2411
+ background: url("../img/form_editor_icons.png") no-repeat -200px -20px;
2412
+ }
2413
+ .icon-minus span {
2414
+ background: url("../img/form_editor_icons.png") no-repeat -220px 0;
2415
+ }
2416
+ .icon-minus.active span,
2417
+ .icon-minus:hover span {
2418
+ background: url("../img/form_editor_icons.png") no-repeat -220px -20px;
2419
+ }
2420
+ .wysija_options {
2421
+ display: none;
2422
+ }
2423
+ .wysija_settings {
2424
+ position: absolute;
2425
+ z-index: 1000;
2426
+ }
2427
+ .wysija_settings a {
2428
+ background-color: #f5f5f5;
2429
+ background: -webkit-linear-gradient(center top, #f9f9f9, #ececec);
2430
+ background: -moz-linear-gradient(center top, #f9f9f9, #ececec);
2431
+ background: -o-linear-gradient(center top, #f9f9f9, #ececec);
2432
+ background: -ms-linear-gradient(center top, #f9f9f9, #ececec);
2433
+ background: linear-gradient(center top, #f9f9f9, #ececec);
2434
+ border: 1px solid #dfdfdf;
2435
+ border-radius: 3px;
2436
+ -webkit-box-shadow: 0 1px 0 #fff inset;
2437
+ box-shadow: 0 1px 0 #fff inset;
2438
+ font-size: 12px;
2439
+ font-weight: normal;
2440
+ cursor: pointer;
2441
+ color: #222;
2442
+ text-shadow: 0 1px 0 #fff;
2443
+ text-decoration: none;
2444
+ display: block;
2445
+ padding: 5px 5px 3px 27px;
2446
+ }
2447
+ .wysija_settings a span {
2448
+ width: 20px;
2449
+ height: 20px;
2450
+ position: absolute;
2451
+ top: 3px;
2452
+ left: 5px;
2453
+ }
2454
+ .mailpoet_form_block label {
2455
+ margin: 0 5px 0 0;
2456
+ display: block;
2457
+ }
2458
+ #mailpoet_on_success textarea,
2459
+ #mailpoet_on_success select {
2460
+ width: 100%;
2461
+ }
2462
+ #mailpoet_on_success textarea {
2463
+ height: 50px;
2464
+ min-height: 50px;
2465
+ resize: vertical;
2466
+ }
2467
+ .mailpoet_form_block textarea {
2468
+ resize: none;
2469
+ }
2470
+ .mailpoet_form_block input,
2471
+ .mailpoet_form_block textarea {
2472
+ pointer-events: none;
2473
+ }
2474
+ #mailpoet_form_export textarea {
2475
+ width: 340px;
2476
+ height: 150px;
2477
+ min-height: 150px;
2478
+ resize: vertical;
2479
+ font-size: 85%;
2480
+ display: none;
2481
+ }
2482
+ .mailpoet_form_field_edit,
2483
+ .mailpoet_form_field_delete {
2484
+ text-decoration: none;
2485
+ }
2486
+ .mailpoet_form_field_edit:hover .dashicons-admin-generic:before,
2487
+ .mailpoet_form_field_delete:hover .dashicons-dismiss:before,
2488
+ .settings:hover .dashicons-admin-generic:before {
2489
+ color: #2ea2cc;
2490
+ }
2491
+ .mailpoet_form_field_edit span,
2492
+ .mailpoet_form_field_delete span {
2493
+ background: none !important;
2494
+ color: #999;
2495
+ }
2496
+ .mailpoet_form_field_delete span:before {
2497
+ font-size: 21px;
2498
+ }
2499
+ .CodeMirror {
2500
+ border: 1px solid #eee;
2501
+ }
2502
+ #mailpoet_form_segments.parsley-error + span .select2-selection {
2503
+ border: 1px solid #b94a48;
2504
+ }
2505
+ .mailpoet_listing_loading tbody tr,
2506
+ .mailpoet_form_loading tbody tr {
2507
+ opacity: 0.2;
2508
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
2509
+ filter: alpha(opacity=20);
2510
+ }
2511
+ .mailpoet_select_all {
2512
+ background-color: #f1f1f1;
2513
+ }
2514
+ .mailpoet_select_all td {
2515
+ text-align: center;
2516
+ }
2517
+ .mailpoet_listing_table th span {
2518
+ white-space: nowrap;
2519
+ }
2520
+ .mailpoet_listing_table thead .check-column,
2521
+ .mailpoet_listing_table tfoot .check-column {
2522
+ padding: 10px 0 0 3px;
2523
+ }
2524
+ .mailpoet_listing_table thead th.column-primary,
2525
+ .mailpoet_listing_table tfoot th.column-primary {
2526
+ width: 25em;
2527
+ }
2528
+ @media screen and (max-width: 782px) {
2529
+ .mailpoet_listing_table thead th.column-primary,
2530
+ .mailpoet_listing_table tfoot th.column-primary {
2531
+ width: 100%;
2532
+ }
2533
+ }
2534
+ #newsletters_container h2.nav-tab-wrapper {
2535
+ margin-bottom: 1rem;
2536
+ }
2537
+ .mailpoet_boxes.mailpoet_boxes_loading {
2538
+ opacity: 0.2;
2539
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
2540
+ filter: alpha(opacity=20);
2541
+ }
2542
+ .mailpoet_boxes li {
2543
+ float: left;
2544
+ position: relative;
2545
+ padding: 15px;
2546
+ margin: 15px 25px 0 0;
2547
+ width: 425px;
2548
+ height: 150px;
2549
+ border: 1px solid #dedede;
2550
+ background-color: #fff;
2551
+ }
2552
+ .mailpoet_boxes .mailpoet_thumbnail {
2553
+ background-color: #222;
2554
+ -webkit-background-size: 50% 50%;
2555
+ -moz-background-size: 50% 50%;
2556
+ background-size: 50% 50%;
2557
+ background-repeat: no-repeat;
2558
+ background-position: center;
2559
+ color: #222;
2560
+ border: 1px solid #ccc;
2561
+ width: 150px;
2562
+ height: 150px;
2563
+ margin-right: 15px;
2564
+ float: left;
2565
+ overflow: hidden;
2566
+ position: relative;
2567
+ }
2568
+ .mailpoet_boxes .mailpoet_thumbnail img {
2569
+ min-width: 150px;
2570
+ height: auto;
2571
+ width: 110%;
2572
+ position: relative;
2573
+ top: 50%;
2574
+ left: 50%;
2575
+ -webkit-transform: translate(-50%, -50%);
2576
+ -moz-transform: translate(-50%, -50%);
2577
+ -o-transform: translate(-50%, -50%);
2578
+ -ms-transform: translate(-50%, -50%);
2579
+ transform: translate(-50%, -50%);
2580
+ }
2581
+ .mailpoet_boxes .mailpoet_thumbnail .mailpoet_overlay {
2582
+ position: absolute;
2583
+ top: 0;
2584
+ left: 0;
2585
+ right: 0;
2586
+ bottom: 0;
2587
+ background-color: rgba(255,255,255,0);
2588
+ opacity: 0;
2589
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
2590
+ filter: alpha(opacity=0);
2591
+ -webkit-transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2592
+ -moz-transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2593
+ -o-transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2594
+ -ms-transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2595
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2596
+ }
2597
+ .mailpoet_boxes .mailpoet_thumbnail .mailpoet_overlay:hover {
2598
+ background-color: rgba(255,255,255,0.7);
2599
+ opacity: 1;
2600
+ -ms-filter: none;
2601
+ filter: none;
2602
+ }
2603
+ .mailpoet_boxes .mailpoet_thumbnail .mailpoet_overlay::after {
2604
+ content: " ";
2605
+ position: absolute;
2606
+ top: 0;
2607
+ left: 0;
2608
+ bottom: 0;
2609
+ right: 0;
2610
+ background: url("../img/preview_magnifying_glass.svg") no-repeat center center;
2611
+ }
2612
+ .mailpoet_boxes .mailpoet_description {
2613
+ float: left;
2614
+ width: 245px;
2615
+ max-height: calc(115px - 2em);
2616
+ padding-bottom: 2em;
2617
+ overflow: hidden;
2618
+ }
2619
+ .mailpoet_boxes .mailpoet_description h3 {
2620
+ margin: 0 0 0.7em 0;
2621
+ overflow: hidden;
2622
+ max-width: 210px;
2623
+ line-height: 1.4em;
2624
+ }
2625
+ .mailpoet_boxes .mailpoet_description p {
2626
+ font-size: 13px;
2627
+ line-height: 1.5;
2628
+ margin: 1em 0;
2629
+ }
2630
+ .mailpoet_boxes .mailpoet_actions {
2631
+ position: absolute;
2632
+ bottom: 15px;
2633
+ right: 15px;
2634
+ }
2635
+ .mailpoet_boxes .mailpoet_delete {
2636
+ display: none;
2637
+ position: absolute;
2638
+ top: 15px;
2639
+ right: 15px;
2640
+ }
2641
+ .mailpoet_boxes li:hover .mailpoet_delete {
2642
+ display: block;
2643
+ }
2644
+ .mailpoet_boxes .mailpoet_delete a {
2645
+ color: #a00;
2646
+ }
2647
+ .mailpoet_boxes .mailpoet_delete a:hover {
2648
+ color: #f00;
2649
+ }
2650
+ [data-type="notification"] .mailpoet_thumbnail {
2651
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2032%2032%22%20enable-background%3D%22new%200%200%2032%2032%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M10%2C10v18h12l6-6V10H10z%20M21.746%2C18.747l-0.609%2C0.609c-0.368%2C0.374-0.578%2C0.822-0.63%2C1.344%20c-0.051%2C0.523%2C0.064%2C0.998%2C0.345%2C1.426l-1.487%2C1.479l-1.958-1.958l-2.275%2C2.267c-0.292%2C0.292-0.844%2C0.712-1.653%2C1.259%20c-0.81%2C0.547-1.288%2C0.747-1.434%2C0.601c-0.146-0.146%2C0.054-0.627%2C0.601-1.442c0.547-0.815%2C0.964-1.366%2C1.251-1.653l2.267-2.267%20l-1.958-1.966l1.487-1.479c0.422%2C0.282%2C0.896%2C0.397%2C1.422%2C0.345c0.526-0.052%2C0.972-0.264%2C1.34-0.638l0.609-0.609%20c0.374-0.368%2C0.586-0.815%2C0.638-1.34c0.051-0.525-0.064-1.002-0.345-1.43l1.479-1.479l5.167%2C5.159l-1.487%2C1.479%20c-0.422-0.282-0.896-0.397-1.422-0.345C22.569%2C18.16%2C22.12%2C18.373%2C21.746%2C18.747z%20M22%2C26.5V22h4.5L22%2C26.5z%22%2F%3E%3Cg%20opacity%3D%220.3%22%3E%3Cg%3E%3Cpath%20fill%3D%22%23ffffff%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7%2C7v18h2V9h16V7H7z%20M22%2C4H4v18h2V6h16V4z%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
2652
+ }
2653
+ [data-type="welcome"] .mailpoet_thumbnail {
2654
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2070%2070%22%20enable-background%3D%22new%200%200%2070%2070%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23ffffff%22%20d%3D%22M62.751%2C65.368L43.923%2C50.955l18.832-14.377l-5.395-4.118v-3.479l5.983%2C4.568%20v3.479l0.166%2C26.269C63.51%2C64.089%2C63.198%2C64.783%2C62.751%2C65.368z%20M31.502%2C49.5l-15.993-12v-30c0-1.657%2C1.343-3%2C2.999-3h33.985%20c1.656%2C0%2C2.999%2C1.343%2C2.999%2C3v30l-15.993%2C12H31.502z%20M47.5%2C13.5h-3v-3h-2v3h-3v2h3v3h2v-3h3V13.5z%20M44.504%2C33.316%20c0%2C0-0.012-1.304-2.653-2.478c-1.306-0.58-2.845-1.702-5.621-2.048c0.839-0.646%2C1.231-1.976%2C1.946-3.796%20c0.01-0.027%2C0.02-0.055%2C0.03-0.081c0.161%2C0.028%2C0.324%2C0.027%2C0.444-0.048c0.333-0.209%2C0.535-1.347%2C0.542-1.902%20c0.009-0.831-0.406-0.75-0.406-0.75s-0.009-0.003-0.021-0.006c0.002-0.066%2C0.006-0.133%2C0.006-0.199c0-0.751%2C0.152-2.021-0.047-2.728%20c-0.3-1.068-0.723-1.941-1.46-2.242c-0.97-0.396-2.341-1.536-2.788-1.536c-0.537%2C0-1.961%2C1.114-2.797%2C1.544%20c-0.707%2C0.363-1.154%2C1.175-1.453%2C2.241c-0.193%2C0.688-0.045%2C1.94-0.045%2C2.721c0%2C0.065%2C0.004%2C0.131%2C0.006%2C0.196%20c-0.02%2C0.005-0.034%2C0.009-0.034%2C0.009s-0.416-0.082-0.407%2C0.75c0.006%2C0.555%2C0.209%2C1.693%2C0.542%2C1.902%20c0.122%2C0.077%2C0.291%2C0.077%2C0.456%2C0.046c0.011%2C0.029%2C0.022%2C0.06%2C0.033%2C0.089c0.722%2C1.835%2C1.091%2C3.158%2C1.937%2C3.797%20c-2.748%2C0.354-4.277%2C1.467-5.575%2C2.046c-2.631%2C1.173-2.643%2C2.473-2.643%2C2.473v2.182l20.008-0.003V33.316z%20M26.795%2C50.955%20L8.05%2C65.305c-0.419-0.574-0.55-1.41-0.55-2.174V37.015l-0.015%2C0.011v-3.479l5.998-4.579v3.479L8.017%2C36.62L26.795%2C50.955z%20M29.137%2C52.659v-0.157h12.462v0.144l0.047-0.036L59.73%2C66.5H10.989l18.084-13.889L29.137%2C52.659z%22%2F%3E%3C%2Fsvg%3E%0A");
2655
+ }
2656
+ [data-type="standard"] .mailpoet_thumbnail {
2657
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2070%2070%22%20enable-background%3D%22new%200%200%2070%2070%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M62.751%2C65.368L43.923%2C50.955l18.832-14.377l-5.395-4.118v-3.479l5.983%2C4.568%20v3.479l0.166%2C26.269C63.51%2C64.089%2C63.198%2C64.783%2C62.751%2C65.368z%20M31.433%2C49.5l-15.955-12v-30c0-1.657%2C1.339-3%2C2.992-3h33.905%20c1.652%2C0%2C2.992%2C1.343%2C2.992%2C3v30l-15.955%2C12H31.433z%20M18.469%2C35.5H33.5v-2H18.469V35.5z%20M18.469%2C31.5H33.5v-2H18.469V31.5z%20M18.469%2C27.5H33.5v-2H18.469V27.5z%20M38.406%2C7.5H18.469v14h19.937V7.5z%20M52.375%2C7.5H40.408v2h11.967V7.5z%20M52.375%2C11.5H40.408v2%20h11.967V11.5z%20M52.375%2C15.5H40.408v2h11.967V15.5z%20M52.375%2C19.5H40.408v2h11.967V19.5z%20M52.375%2C25.5H37.5v2h14.875V25.5z%20M52.375%2C29.5H37.5v2h14.875V29.5z%20M52.375%2C33.5H37.5v2h14.875V33.5z%20M26.14%2C17.192L28.442%2C9.5l3.277%2C6.571l1.71-2.571l2.992%2C6%20h-2.992h-3.989h-0.997H25.45h-4.986l3.989-4L26.14%2C17.192z%20M22.469%2C12.5h-1c-0.552%2C0-1-0.448-1-1v-1c0-0.552%2C0.448-1%2C1-1h1%20c0.552%2C0%2C1%2C0.448%2C1%2C1v1C23.469%2C12.052%2C23.021%2C12.5%2C22.469%2C12.5z%20M26.795%2C50.955L8.05%2C65.305c-0.419-0.574-0.55-1.41-0.55-2.174%20V37.015l-0.015%2C0.011v-3.479l5.998-4.579v3.479L8.017%2C36.62L26.795%2C50.955z%20M29.137%2C52.659v-0.157h12.462v0.144l0.047-0.036%20L59.73%2C66.5H10.989l18.084-13.889L29.137%2C52.659z%22%2F%3E%3C%2Fsvg%3E%0A");
2658
+ }
2659
+ .mailpoet_boxes_preview {
2660
+ margin: -10px;
2661
+ padding: 10px 20px;
2662
+ }
2663
+ .mailpoet_breadcrumb {
2664
+ font-size: 0.9em;
2665
+ text-transform: uppercase;
2666
+ color: #444;
2667
+ }
2668
+ .mailpoet_breadcrumb .mailpoet_current {
2669
+ font-weight: bold;
2670
+ }
2671
+ .mailpoet_breadcrumb a {
2672
+ text-decoration: none;
2673
+ color: #444;
2674
+ }
2675
+ .mailpoet_breadcrumb a:hover {
2676
+ color: #222;
2677
+ }
2678
+ .mailpoet_form {
2679
+ margin: 0 0 20px 0;
2680
+ }
2681
+ .mailpoet_form td {
2682
+ vertical-align: top !important;
2683
+ }
2684
+ input.parsley-success,
2685
+ select.parsley-success,
2686
+ textarea.parsley-success {
2687
+ color: #468847;
2688
+ background-color: #dff0d8;
2689
+ border: 1px solid #d6e9c6;
2690
+ }
2691
+ input.parsley-error,
2692
+ select.parsley-error,
2693
+ textarea.parsley-error {
2694
+ color: #b94a48;
2695
+ background-color: #f2dede;
2696
+ border: 1px solid #eed3d7;
2697
+ }
2698
+ .parsley-errors-list {
2699
+ margin: 2px 0 3px;
2700
+ padding: 0;
2701
+ list-style-type: none;
2702
+ font-size: 0.9em;
2703
+ line-height: 0.9em;
2704
+ color: #b94a48;
2705
+ opacity: 0;
2706
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
2707
+ filter: alpha(opacity=0);
2708
+ -webkit-transition: all 0.3s ease-in;
2709
+ -moz-transition: all 0.3s ease-in;
2710
+ -o-transition: all 0.3s ease-in;
2711
+ -ms-transition: all 0.3s ease-in;
2712
+ transition: all 0.3s ease-in;
2713
+ -o-transition: all 0.3s ease-in;
2714
+ -moz-transition: all 0.3s ease-in;
2715
+ -webkit-transition: all 0.3s ease-in;
2716
+ }
2717
+ .parsley-errors-list.filled {
2718
+ opacity: 1;
2719
+ -ms-filter: none;
2720
+ filter: none;
2721
+ }
2722
+ .parsley-errors-list {
2723
+ margin-top: 8px;
2724
+ }
2725
+ .parsley-required,
2726
+ .parsley-custom-error-message {
2727
+ color: #b94a48;
2728
+ }
2729
+ #mailpoet_settings .mailpoet_panel {
2730
+ display: none;
2731
+ }
2732
+ #mailpoet_settings .form-table th {
2733
+ width: 20em;
2734
+ }
2735
+ #mailpoet_settings .mailpoet_sending_methods {
2736
+ margin: 25px 0 0 0;
2737
+ }
2738
+ #mailpoet_settings .mailpoet_sending_methods li {
2739
+ float: left;
2740
+ position: relative;
2741
+ padding: 15px 15px 0 15px;
2742
+ margin: 0 25px 25px 0;
2743
+ width: 300px;
2744
+ height: 250px;
2745
+ border: 1px solid #dedede;
2746
+ background-color: #fff;
2747
+ }
2748
+ #mailpoet_settings .mailpoet_sending_methods h3 {
2749
+ text-align: center;
2750
+ height: 54px;
2751
+ line-height: 54px;
2752
+ font-size: 1.5em;
2753
+ }
2754
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_description {
2755
+ font-size: 14px;
2756
+ }
2757
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_status {
2758
+ background-color: #2f2f2f;
2759
+ color: #fff;
2760
+ position: absolute;
2761
+ bottom: 0;
2762
+ left: 0;
2763
+ right: 0;
2764
+ -o-text-overflow: ellipsis;
2765
+ text-overflow: ellipsis;
2766
+ padding: 15px;
2767
+ }
2768
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_status span {
2769
+ visibility: hidden;
2770
+ font-weight: bold;
2771
+ }
2772
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_active .mailpoet_status span {
2773
+ visibility: visible;
2774
+ }
2775
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_active #mailpoet_mta_activate {
2776
+ visibility: hidden;
2777
+ }
2778
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_actions {
2779
+ bottom: 15px;
2780
+ color: #fff;
2781
+ padding: 0;
2782
+ position: absolute;
2783
+ right: 15px;
2784
+ }
2785
+ #mailpoet_settings .mailpoet_sending_methods .mailpoet_actions .button-secondary {
2786
+ margin: 0 -6px -4px 0;
2787
+ }
2788
+ @media screen and (max-width: 782px) {
2789
+ #mailpoet_settings .form-table th {
2790
+ width: auto;
2791
+ }
2792
+ #mailpoet_settings .mailpoet_sending_methods li {
2793
+ float: none;
2794
+ width: auto;
2795
+ margin-right: 0;
2796
+ }
2797
+ }
2798
+ .mailpoet_progress {
2799
+ background-color: #efefef;
2800
+ height: 25px;
2801
+ padding: 0;
2802
+ width: 100%;
2803
+ margin: 0;
2804
+ border-radius: 5px;
2805
+ position: relative;
2806
+ }
2807
+ .mailpoet_progress_label {
2808
+ position: absolute;
2809
+ width: 100%;
2810
+ text-align: center;
2811
+ display: inline-block;
2812
+ margin: 2px 0 0 0;
2813
+ }
2814
+ .mailpoet_progress_bar {
2815
+ position: absolute;
2816
+ display: inline-block;
2817
+ height: 100%;
2818
+ border-radius: 3px;
2819
+ -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.5) inset;
2820
+ box-shadow: 0 1px 0 rgba(255,255,255,0.5) inset;
2821
+ background-color: #34c2e3;
2822
+ background-image: -webkit-linear-gradient(top, #34c2e3, #1ba4c4);
2823
+ background-image: -moz-linear-gradient(top, #34c2e3, #1ba4c4);
2824
+ background-image: -o-linear-gradient(top, #34c2e3, #1ba4c4);
2825
+ background-image: -ms-linear-gradient(top, #34c2e3, #1ba4c4);
2826
+ background-image: linear-gradient(to bottom, #34c2e3, #1ba4c4);
2827
+ }
2828
+ .mailpoet_progress_complete .mailpoet_progress_bar {
2829
+ background-color: #fecf23;
2830
+ background-image: -webkit-linear-gradient(top, #fecf23, #fd9215);
2831
+ background-image: -moz-linear-gradient(top, #fecf23, #fd9215);
2832
+ background-image: -o-linear-gradient(top, #fecf23, #fd9215);
2833
+ background-image: -ms-linear-gradient(top, #fecf23, #fd9215);
2834
+ background-image: linear-gradient(to bottom, #fecf23, #fd9215);
2835
+ }
2836
+ #subscribers_container .mailpoet_segments_unsubscribed {
2837
+ color: #a9a9a9;
2838
+ }
assets/css/importExport.css ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .mailpoet_hidden,
2
+ .mailpoet_validation_error {
3
+ display: none;
4
+ }
5
+ .form-table th {
6
+ width: 300px;
7
+ }
8
+ #paste_input {
9
+ width: 100%;
10
+ }
11
+ input[type="radio"] {
12
+ margin-right: 0.5em !important;
13
+ }
14
+ input[type="radio"] + span {
15
+ margin-right: 2.5em;
16
+ }
17
+ span.mailpoet_mailchimp-key-status.mailpoet_mailchimp-ok:before {
18
+ content: "\2713";
19
+ color: #0e90d2;
20
+ margin-left: 15px;
21
+ }
22
+ span.mailpoet_mailchimp-key-status.mailpoet_mailchimp-error:before {
23
+ content: "\2717";
24
+ color: #900;
25
+ margin-left: 15px;
26
+ }
27
+ #subscribers_data {
28
+ overflow: auto;
29
+ }
30
+ #subscribers_data table {
31
+ width: auto;
32
+ }
33
+ #subscribers_data td {
34
+ padding: 0.5em;
35
+ }
36
+ #subscribers_data > table > tbody > td {
37
+ padding: 0.5em;
38
+ }
39
+ #subscribers_data > table > tbody > tr:nth-child(odd) {
40
+ background: #f9f9f9;
41
+ }
42
+ #subscribers_data .mailpoet_header {
43
+ text-transform: uppercase;
44
+ font-weight: 600;
45
+ text-decoration: underline;
46
+ }
47
+ #subscribers_data th:first-child,
48
+ #subscribers_data td:first-child {
49
+ width: 10em !important;
50
+ text-align: center !important;
51
+ padding: 0 1em 0 1em !important;
52
+ vertical-align: inherit !important;
53
+ }
54
+ #subscribers_data > table > thead > tr > th > span {
55
+ width: 15em !important;
56
+ }
57
+ .mailpoet_data_match {
58
+ color: #0e90d2;
59
+ margin-left: 0.25em;
60
+ }
61
+ .mailpoet_import_error,
62
+ .mailpoet_validation_error {
63
+ color: #900;
64
+ }
65
+ tr.mailpoet_segments > td > a {
66
+ margin-left: 15px;
67
+ }
68
+ span.select2-search.select2-search--dropdown {
69
+ display: none !important;
70
+ }
assets/css/newsletter_editor.css ADDED
@@ -0,0 +1,2470 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .select2-container {
2
+ box-sizing: border-box;
3
+ display: inline-block;
4
+ margin: 0;
5
+ position: relative;
6
+ vertical-align: middle; }
7
+ .select2-container .select2-selection--single {
8
+ box-sizing: border-box;
9
+ cursor: pointer;
10
+ display: block;
11
+ height: 28px;
12
+ user-select: none;
13
+ -webkit-user-select: none; }
14
+ .select2-container .select2-selection--single .select2-selection__rendered {
15
+ display: block;
16
+ padding-left: 8px;
17
+ padding-right: 20px;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap; }
21
+ .select2-container .select2-selection--single .select2-selection__clear {
22
+ position: relative; }
23
+ .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
24
+ padding-right: 8px;
25
+ padding-left: 20px; }
26
+ .select2-container .select2-selection--multiple {
27
+ box-sizing: border-box;
28
+ cursor: pointer;
29
+ display: block;
30
+ min-height: 32px;
31
+ user-select: none;
32
+ -webkit-user-select: none; }
33
+ .select2-container .select2-selection--multiple .select2-selection__rendered {
34
+ display: inline-block;
35
+ overflow: hidden;
36
+ padding-left: 8px;
37
+ text-overflow: ellipsis;
38
+ white-space: nowrap; }
39
+ .select2-container .select2-search--inline {
40
+ float: left; }
41
+ .select2-container .select2-search--inline .select2-search__field {
42
+ box-sizing: border-box;
43
+ border: none;
44
+ font-size: 100%;
45
+ margin-top: 5px;
46
+ padding: 0; }
47
+ .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
48
+ -webkit-appearance: none; }
49
+
50
+ .select2-dropdown {
51
+ background-color: white;
52
+ border: 1px solid #aaa;
53
+ border-radius: 4px;
54
+ box-sizing: border-box;
55
+ display: block;
56
+ position: absolute;
57
+ left: -100000px;
58
+ width: 100%;
59
+ z-index: 1051; }
60
+
61
+ .select2-results {
62
+ display: block; }
63
+
64
+ .select2-results__options {
65
+ list-style: none;
66
+ margin: 0;
67
+ padding: 0; }
68
+
69
+ .select2-results__option {
70
+ padding: 6px;
71
+ user-select: none;
72
+ -webkit-user-select: none; }
73
+ .select2-results__option[aria-selected] {
74
+ cursor: pointer; }
75
+
76
+ .select2-container--open .select2-dropdown {
77
+ left: 0; }
78
+
79
+ .select2-container--open .select2-dropdown--above {
80
+ border-bottom: none;
81
+ border-bottom-left-radius: 0;
82
+ border-bottom-right-radius: 0; }
83
+
84
+ .select2-container--open .select2-dropdown--below {
85
+ border-top: none;
86
+ border-top-left-radius: 0;
87
+ border-top-right-radius: 0; }
88
+
89
+ .select2-search--dropdown {
90
+ display: block;
91
+ padding: 4px; }
92
+ .select2-search--dropdown .select2-search__field {
93
+ padding: 4px;
94
+ width: 100%;
95
+ box-sizing: border-box; }
96
+ .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
97
+ -webkit-appearance: none; }
98
+ .select2-search--dropdown.select2-search--hide {
99
+ display: none; }
100
+
101
+ .select2-close-mask {
102
+ border: 0;
103
+ margin: 0;
104
+ padding: 0;
105
+ display: block;
106
+ position: fixed;
107
+ left: 0;
108
+ top: 0;
109
+ min-height: 100%;
110
+ min-width: 100%;
111
+ height: auto;
112
+ width: auto;
113
+ opacity: 0;
114
+ z-index: 99;
115
+ background-color: #fff;
116
+ filter: alpha(opacity=0); }
117
+
118
+ .select2-hidden-accessible {
119
+ border: 0 !important;
120
+ clip: rect(0 0 0 0) !important;
121
+ height: 1px !important;
122
+ margin: -1px !important;
123
+ overflow: hidden !important;
124
+ padding: 0 !important;
125
+ position: absolute !important;
126
+ width: 1px !important; }
127
+
128
+ .select2-container--default .select2-selection--single {
129
+ background-color: #fff;
130
+ border: 1px solid #aaa;
131
+ border-radius: 4px; }
132
+ .select2-container--default .select2-selection--single .select2-selection__rendered {
133
+ color: #444;
134
+ line-height: 28px; }
135
+ .select2-container--default .select2-selection--single .select2-selection__clear {
136
+ cursor: pointer;
137
+ float: right;
138
+ font-weight: bold; }
139
+ .select2-container--default .select2-selection--single .select2-selection__placeholder {
140
+ color: #999; }
141
+ .select2-container--default .select2-selection--single .select2-selection__arrow {
142
+ height: 26px;
143
+ position: absolute;
144
+ top: 1px;
145
+ right: 1px;
146
+ width: 20px; }
147
+ .select2-container--default .select2-selection--single .select2-selection__arrow b {
148
+ border-color: #888 transparent transparent transparent;
149
+ border-style: solid;
150
+ border-width: 5px 4px 0 4px;
151
+ height: 0;
152
+ left: 50%;
153
+ margin-left: -4px;
154
+ margin-top: -2px;
155
+ position: absolute;
156
+ top: 50%;
157
+ width: 0; }
158
+
159
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
160
+ float: left; }
161
+
162
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
163
+ left: 1px;
164
+ right: auto; }
165
+
166
+ .select2-container--default.select2-container--disabled .select2-selection--single {
167
+ background-color: #eee;
168
+ cursor: default; }
169
+ .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
170
+ display: none; }
171
+
172
+ .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
173
+ border-color: transparent transparent #888 transparent;
174
+ border-width: 0 4px 5px 4px; }
175
+
176
+ .select2-container--default .select2-selection--multiple {
177
+ background-color: white;
178
+ border: 1px solid #aaa;
179
+ border-radius: 4px;
180
+ cursor: text; }
181
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered {
182
+ box-sizing: border-box;
183
+ list-style: none;
184
+ margin: 0;
185
+ padding: 0 5px;
186
+ width: 100%; }
187
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
188
+ list-style: none; }
189
+ .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
190
+ color: #999;
191
+ margin-top: 5px;
192
+ float: left; }
193
+ .select2-container--default .select2-selection--multiple .select2-selection__clear {
194
+ cursor: pointer;
195
+ float: right;
196
+ font-weight: bold;
197
+ margin-top: 5px;
198
+ margin-right: 10px; }
199
+ .select2-container--default .select2-selection--multiple .select2-selection__choice {
200
+ background-color: #e4e4e4;
201
+ border: 1px solid #aaa;
202
+ border-radius: 4px;
203
+ cursor: default;
204
+ float: left;
205
+ margin-right: 5px;
206
+ margin-top: 5px;
207
+ padding: 0 5px; }
208
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
209
+ color: #999;
210
+ cursor: pointer;
211
+ display: inline-block;
212
+ font-weight: bold;
213
+ margin-right: 2px; }
214
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
215
+ color: #333; }
216
+
217
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
218
+ float: right; }
219
+
220
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
221
+ margin-left: 5px;
222
+ margin-right: auto; }
223
+
224
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
225
+ margin-left: 2px;
226
+ margin-right: auto; }
227
+
228
+ .select2-container--default.select2-container--focus .select2-selection--multiple {
229
+ border: solid black 1px;
230
+ outline: 0; }
231
+
232
+ .select2-container--default.select2-container--disabled .select2-selection--multiple {
233
+ background-color: #eee;
234
+ cursor: default; }
235
+
236
+ .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
237
+ display: none; }
238
+
239
+ .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
240
+ border-top-left-radius: 0;
241
+ border-top-right-radius: 0; }
242
+
243
+ .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
244
+ border-bottom-left-radius: 0;
245
+ border-bottom-right-radius: 0; }
246
+
247
+ .select2-container--default .select2-search--dropdown .select2-search__field {
248
+ border: 1px solid #aaa; }
249
+
250
+ .select2-container--default .select2-search--inline .select2-search__field {
251
+ background: transparent;
252
+ border: none;
253
+ outline: 0;
254
+ box-shadow: none;
255
+ -webkit-appearance: textfield; }
256
+
257
+ .select2-container--default .select2-results > .select2-results__options {
258
+ max-height: 200px;
259
+ overflow-y: auto; }
260
+
261
+ .select2-container--default .select2-results__option[role=group] {
262
+ padding: 0; }
263
+
264
+ .select2-container--default .select2-results__option[aria-disabled=true] {
265
+ color: #999; }
266
+
267
+ .select2-container--default .select2-results__option[aria-selected=true] {
268
+ background-color: #ddd; }
269
+
270
+ .select2-container--default .select2-results__option .select2-results__option {
271
+ padding-left: 1em; }
272
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
273
+ padding-left: 0; }
274
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
275
+ margin-left: -1em;
276
+ padding-left: 2em; }
277
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
278
+ margin-left: -2em;
279
+ padding-left: 3em; }
280
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
281
+ margin-left: -3em;
282
+ padding-left: 4em; }
283
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
284
+ margin-left: -4em;
285
+ padding-left: 5em; }
286
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
287
+ margin-left: -5em;
288
+ padding-left: 6em; }
289
+
290
+ .select2-container--default .select2-results__option--highlighted[aria-selected] {
291
+ background-color: #5897fb;
292
+ color: white; }
293
+
294
+ .select2-container--default .select2-results__group {
295
+ cursor: default;
296
+ display: block;
297
+ padding: 6px; }
298
+
299
+ .select2-container--classic .select2-selection--single {
300
+ background-color: #f7f7f7;
301
+ border: 1px solid #aaa;
302
+ border-radius: 4px;
303
+ outline: 0;
304
+ background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
305
+ background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
306
+ background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
307
+ background-repeat: repeat-x;
308
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
309
+ .select2-container--classic .select2-selection--single:focus {
310
+ border: 1px solid #5897fb; }
311
+ .select2-container--classic .select2-selection--single .select2-selection__rendered {
312
+ color: #444;
313
+ line-height: 28px; }
314
+ .select2-container--classic .select2-selection--single .select2-selection__clear {
315
+ cursor: pointer;
316
+ float: right;
317
+ font-weight: bold;
318
+ margin-right: 10px; }
319
+ .select2-container--classic .select2-selection--single .select2-selection__placeholder {
320
+ color: #999; }
321
+ .select2-container--classic .select2-selection--single .select2-selection__arrow {
322
+ background-color: #ddd;
323
+ border: none;
324
+ border-left: 1px solid #aaa;
325
+ border-top-right-radius: 4px;
326
+ border-bottom-right-radius: 4px;
327
+ height: 26px;
328
+ position: absolute;
329
+ top: 1px;
330
+ right: 1px;
331
+ width: 20px;
332
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
333
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
334
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
335
+ background-repeat: repeat-x;
336
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
337
+ .select2-container--classic .select2-selection--single .select2-selection__arrow b {
338
+ border-color: #888 transparent transparent transparent;
339
+ border-style: solid;
340
+ border-width: 5px 4px 0 4px;
341
+ height: 0;
342
+ left: 50%;
343
+ margin-left: -4px;
344
+ margin-top: -2px;
345
+ position: absolute;
346
+ top: 50%;
347
+ width: 0; }
348
+
349
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
350
+ float: left; }
351
+
352
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
353
+ border: none;
354
+ border-right: 1px solid #aaa;
355
+ border-radius: 0;
356
+ border-top-left-radius: 4px;
357
+ border-bottom-left-radius: 4px;
358
+ left: 1px;
359
+ right: auto; }
360
+
361
+ .select2-container--classic.select2-container--open .select2-selection--single {
362
+ border: 1px solid #5897fb; }
363
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
364
+ background: transparent;
365
+ border: none; }
366
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
367
+ border-color: transparent transparent #888 transparent;
368
+ border-width: 0 4px 5px 4px; }
369
+
370
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
371
+ border-top: none;
372
+ border-top-left-radius: 0;
373
+ border-top-right-radius: 0;
374
+ background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
375
+ background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
376
+ background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
377
+ background-repeat: repeat-x;
378
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
379
+
380
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
381
+ border-bottom: none;
382
+ border-bottom-left-radius: 0;
383
+ border-bottom-right-radius: 0;
384
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
385
+ background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
386
+ background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
387
+ background-repeat: repeat-x;
388
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
389
+
390
+ .select2-container--classic .select2-selection--multiple {
391
+ background-color: white;
392
+ border: 1px solid #aaa;
393
+ border-radius: 4px;
394
+ cursor: text;
395
+ outline: 0; }
396
+ .select2-container--classic .select2-selection--multiple:focus {
397
+ border: 1px solid #5897fb; }
398
+ .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
399
+ list-style: none;
400
+ margin: 0;
401
+ padding: 0 5px; }
402
+ .select2-container--classic .select2-selection--multiple .select2-selection__clear {
403
+ display: none; }
404
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice {
405
+ background-color: #e4e4e4;
406
+ border: 1px solid #aaa;
407
+ border-radius: 4px;
408
+ cursor: default;
409
+ float: left;
410
+ margin-right: 5px;
411
+ margin-top: 5px;
412
+ padding: 0 5px; }
413
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
414
+ color: #888;
415
+ cursor: pointer;
416
+ display: inline-block;
417
+ font-weight: bold;
418
+ margin-right: 2px; }
419
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
420
+ color: #555; }
421
+
422
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
423
+ float: right; }
424
+
425
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
426
+ margin-left: 5px;
427
+ margin-right: auto; }
428
+
429
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
430
+ margin-left: 2px;
431
+ margin-right: auto; }
432
+
433
+ .select2-container--classic.select2-container--open .select2-selection--multiple {
434
+ border: 1px solid #5897fb; }
435
+
436
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
437
+ border-top: none;
438
+ border-top-left-radius: 0;
439
+ border-top-right-radius: 0; }
440
+
441
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
442
+ border-bottom: none;
443
+ border-bottom-left-radius: 0;
444
+ border-bottom-right-radius: 0; }
445
+
446
+ .select2-container--classic .select2-search--dropdown .select2-search__field {
447
+ border: 1px solid #aaa;
448
+ outline: 0; }
449
+
450
+ .select2-container--classic .select2-search--inline .select2-search__field {
451
+ outline: 0;
452
+ box-shadow: none; }
453
+
454
+ .select2-container--classic .select2-dropdown {
455
+ background-color: white;
456
+ border: 1px solid transparent; }
457
+
458
+ .select2-container--classic .select2-dropdown--above {
459
+ border-bottom: none; }
460
+
461
+ .select2-container--classic .select2-dropdown--below {
462
+ border-top: none; }
463
+
464
+ .select2-container--classic .select2-results > .select2-results__options {
465
+ max-height: 200px;
466
+ overflow-y: auto; }
467
+
468
+ .select2-container--classic .select2-results__option[role=group] {
469
+ padding: 0; }
470
+
471
+ .select2-container--classic .select2-results__option[aria-disabled=true] {
472
+ color: grey; }
473
+
474
+ .select2-container--classic .select2-results__option--highlighted[aria-selected] {
475
+ background-color: #3875d7;
476
+ color: white; }
477
+
478
+ .select2-container--classic .select2-results__group {
479
+ cursor: default;
480
+ display: block;
481
+ padding: 6px; }
482
+
483
+ .select2-container--classic.select2-container--open .select2-dropdown {
484
+ border-color: #5897fb; }
485
+
486
+ /***
487
+ Spectrum Colorpicker v1.8.0
488
+ https://github.com/bgrins/spectrum
489
+ Author: Brian Grinstead
490
+ License: MIT
491
+ ***/
492
+
493
+ .sp-container {
494
+ position:absolute;
495
+ top:0;
496
+ left:0;
497
+ display:inline-block;
498
+ *display: inline;
499
+ *zoom: 1;
500
+ /* https://github.com/bgrins/spectrum/issues/40 */
501
+ z-index: 9999994;
502
+ overflow: hidden;
503
+ }
504
+ .sp-container.sp-flat {
505
+ position: relative;
506
+ }
507
+
508
+ /* Fix for * { box-sizing: border-box; } */
509
+ .sp-container,
510
+ .sp-container * {
511
+ -webkit-box-sizing: content-box;
512
+ -moz-box-sizing: content-box;
513
+ box-sizing: content-box;
514
+ }
515
+
516
+ /* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */
517
+ .sp-top {
518
+ position:relative;
519
+ width: 100%;
520
+ display:inline-block;
521
+ }
522
+ .sp-top-inner {
523
+ position:absolute;
524
+ top:0;
525
+ left:0;
526
+ bottom:0;
527
+ right:0;
528
+ }
529
+ .sp-color {
530
+ position: absolute;
531
+ top:0;
532
+ left:0;
533
+ bottom:0;
534
+ right:20%;
535
+ }
536
+ .sp-hue {
537
+ position: absolute;
538
+ top:0;
539
+ right:0;
540
+ bottom:0;
541
+ left:84%;
542
+ height: 100%;
543
+ }
544
+
545
+ .sp-clear-enabled .sp-hue {
546
+ top:33px;
547
+ height: 77.5%;
548
+ }
549
+
550
+ .sp-fill {
551
+ padding-top: 80%;
552
+ }
553
+ .sp-sat, .sp-val {
554
+ position: absolute;
555
+ top:0;
556
+ left:0;
557
+ right:0;
558
+ bottom:0;
559
+ }
560
+
561
+ .sp-alpha-enabled .sp-top {
562
+ margin-bottom: 18px;
563
+ }
564
+ .sp-alpha-enabled .sp-alpha {
565
+ display: block;
566
+ }
567
+ .sp-alpha-handle {
568
+ position:absolute;
569
+ top:-4px;
570
+ bottom: -4px;
571
+ width: 6px;
572
+ left: 50%;
573
+ cursor: pointer;
574
+ border: 1px solid black;
575
+ background: white;
576
+ opacity: .8;
577
+ }
578
+ .sp-alpha {
579
+ display: none;
580
+ position: absolute;
581
+ bottom: -14px;
582
+ right: 0;
583
+ left: 0;
584
+ height: 8px;
585
+ }
586
+ .sp-alpha-inner {
587
+ border: solid 1px #333;
588
+ }
589
+
590
+ .sp-clear {
591
+ display: none;
592
+ }
593
+
594
+ .sp-clear.sp-clear-display {
595
+ background-position: center;
596
+ }
597
+
598
+ .sp-clear-enabled .sp-clear {
599
+ display: block;
600
+ position:absolute;
601
+ top:0px;
602
+ right:0;
603
+ bottom:0;
604
+ left:84%;
605
+ height: 28px;
606
+ }
607
+
608
+ /* Don't allow text selection */
609
+ .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button {
610
+ -webkit-user-select:none;
611
+ -moz-user-select: -moz-none;
612
+ -o-user-select:none;
613
+ user-select: none;
614
+ }
615
+
616
+ .sp-container.sp-input-disabled .sp-input-container {
617
+ display: none;
618
+ }
619
+ .sp-container.sp-buttons-disabled .sp-button-container {
620
+ display: none;
621
+ }
622
+ .sp-container.sp-palette-buttons-disabled .sp-palette-button-container {
623
+ display: none;
624
+ }
625
+ .sp-palette-only .sp-picker-container {
626
+ display: none;
627
+ }
628
+ .sp-palette-disabled .sp-palette-container {
629
+ display: none;
630
+ }
631
+
632
+ .sp-initial-disabled .sp-initial {
633
+ display: none;
634
+ }
635
+
636
+
637
+ /* Gradients for hue, saturation and value instead of images. Not pretty... but it works */
638
+ .sp-sat {
639
+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));
640
+ background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));
641
+ background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
642
+ background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
643
+ background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));
644
+ background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));
645
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";
646
+ filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');
647
+ }
648
+ .sp-val {
649
+ background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));
650
+ background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));
651
+ background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
652
+ background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
653
+ background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));
654
+ background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));
655
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";
656
+ filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');
657
+ }
658
+
659
+ .sp-hue {
660
+ background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
661
+ background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
662
+ background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
663
+ background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));
664
+ background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
665
+ background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
666
+ }
667
+
668
+ /* IE filters do not support multiple color stops.
669
+ Generate 6 divs, line them up, and do two color gradients for each.
670
+ Yes, really.
671
+ */
672
+ .sp-1 {
673
+ height:17%;
674
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');
675
+ }
676
+ .sp-2 {
677
+ height:16%;
678
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');
679
+ }
680
+ .sp-3 {
681
+ height:17%;
682
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');
683
+ }
684
+ .sp-4 {
685
+ height:17%;
686
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');
687
+ }
688
+ .sp-5 {
689
+ height:16%;
690
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');
691
+ }
692
+ .sp-6 {
693
+ height:17%;
694
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');
695
+ }
696
+
697
+ .sp-hidden {
698
+ display: none !important;
699
+ }
700
+
701
+ /* Clearfix hack */
702
+ .sp-cf:before, .sp-cf:after { content: ""; display: table; }
703
+ .sp-cf:after { clear: both; }
704
+ .sp-cf { *zoom: 1; }
705
+
706
+ /* Mobile devices, make hue slider bigger so it is easier to slide */
707
+ @media (max-device-width: 480px) {
708
+ .sp-color { right: 40%; }
709
+ .sp-hue { left: 63%; }
710
+ .sp-fill { padding-top: 60%; }
711
+ }
712
+ .sp-dragger {
713
+ border-radius: 5px;
714
+ height: 5px;
715
+ width: 5px;
716
+ border: 1px solid #fff;
717
+ background: #000;
718
+ cursor: pointer;
719
+ position:absolute;
720
+ top:0;
721
+ left: 0;
722
+ }
723
+ .sp-slider {
724
+ position: absolute;
725
+ top:0;
726
+ cursor:pointer;
727
+ height: 3px;
728
+ left: -1px;
729
+ right: -1px;
730
+ border: 1px solid #000;
731
+ background: white;
732
+ opacity: .8;
733
+ }
734
+
735
+ /*
736
+ Theme authors:
737
+ Here are the basic themeable display options (colors, fonts, global widths).
738
+ See http://bgrins.github.io/spectrum/themes/ for instructions.
739
+ */
740
+
741
+ .sp-container {
742
+ border-radius: 0;
743
+ background-color: #ECECEC;
744
+ border: solid 1px #f0c49B;
745
+ padding: 0;
746
+ }
747
+ .sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear {
748
+ font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
749
+ -webkit-box-sizing: border-box;
750
+ -moz-box-sizing: border-box;
751
+ -ms-box-sizing: border-box;
752
+ box-sizing: border-box;
753
+ }
754
+ .sp-top {
755
+ margin-bottom: 3px;
756
+ }
757
+ .sp-color, .sp-hue, .sp-clear {
758
+ border: solid 1px #666;
759
+ }
760
+
761
+ /* Input */
762
+ .sp-input-container {
763
+ float:right;
764
+ width: 100px;
765
+ margin-bottom: 4px;
766
+ }
767
+ .sp-initial-disabled .sp-input-container {
768
+ width: 100%;
769
+ }
770
+ .sp-input {
771
+ font-size: 12px !important;
772
+ border: 1px inset;
773
+ padding: 4px 5px;
774
+ margin: 0;
775
+ width: 100%;
776
+ background:transparent;
777
+ border-radius: 3px;
778
+ color: #222;
779
+ }
780
+ .sp-input:focus {
781
+ border: 1px solid orange;
782
+ }
783
+ .sp-input.sp-validation-error {
784
+ border: 1px solid red;
785
+ background: #fdd;
786
+ }
787
+ .sp-picker-container , .sp-palette-container {
788
+ float:left;
789
+ position: relative;
790
+ padding: 10px;
791
+ padding-bottom: 300px;
792
+ margin-bottom: -290px;
793
+ }
794
+ .sp-picker-container {
795
+ width: 172px;
796
+ border-left: solid 1px #fff;
797
+ }
798
+
799
+ /* Palettes */
800
+ .sp-palette-container {
801
+ border-right: solid 1px #ccc;
802
+ }
803
+
804
+ .sp-palette-only .sp-palette-container {
805
+ border: 0;
806
+ }
807
+
808
+ .sp-palette .sp-thumb-el {
809
+ display: block;
810
+ position:relative;
811
+ float:left;
812
+ width: 24px;
813
+ height: 15px;
814
+ margin: 3px;
815
+ cursor: pointer;
816
+ border:solid 2px transparent;
817
+ }
818
+ .sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {
819
+ border-color: orange;
820
+ }
821
+ .sp-thumb-el {
822
+ position:relative;
823
+ }
824
+
825
+ /* Initial */
826
+ .sp-initial {
827
+ float: left;
828
+ border: solid 1px #333;
829
+ }
830
+ .sp-initial span {
831
+ width: 30px;
832
+ height: 25px;
833
+ border:none;
834
+ display:block;
835
+ float:left;
836
+ margin:0;
837
+ }
838
+
839
+ .sp-initial .sp-clear-display {
840
+ background-position: center;
841
+ }
842
+
843
+ /* Buttons */
844
+ .sp-palette-button-container,
845
+ .sp-button-container {
846
+ float: right;
847
+ }
848
+
849
+ /* Replacer (the little preview div that shows up instead of the <input>) */
850
+ .sp-replacer {
851
+ margin:0;
852
+ overflow:hidden;
853
+ cursor:pointer;
854
+ padding: 4px;
855
+ display:inline-block;
856
+ *zoom: 1;
857
+ *display: inline;
858
+ border: solid 1px #91765d;
859
+ background: #eee;
860
+ color: #333;
861
+ vertical-align: middle;
862
+ }
863
+ .sp-replacer:hover, .sp-replacer.sp-active {
864
+ border-color: #F0C49B;
865
+ color: #111;
866
+ }
867
+ .sp-replacer.sp-disabled {
868
+ cursor:default;
869
+ border-color: silver;
870
+ color: silver;
871
+ }
872
+ .sp-dd {
873
+ padding: 2px 0;
874
+ height: 16px;
875
+ line-height: 16px;
876
+ float:left;
877
+ font-size:10px;
878
+ }
879
+ .sp-preview {
880
+ position:relative;
881
+ width:25px;
882
+ height: 20px;
883
+ border: solid 1px #222;
884
+ margin-right: 5px;
885
+ float:left;
886
+ z-index: 0;
887
+ }
888
+
889
+ .sp-palette {
890
+ *width: 220px;
891
+ max-width: 220px;
892
+ }
893
+ .sp-palette .sp-thumb-el {
894
+ width:16px;
895
+ height: 16px;
896
+ margin:2px 1px;
897
+ border: solid 1px #d0d0d0;
898
+ }
899
+
900
+ .sp-container {
901
+ padding-bottom:0;
902
+ }
903
+
904
+
905
+ /* Buttons: http://hellohappy.org/css3-buttons/ */
906
+ .sp-container button {
907
+ background-color: #eeeeee;
908
+ background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);
909
+ background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);
910
+ background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);
911
+ background-image: -o-linear-gradient(top, #eeeeee, #cccccc);
912
+ background-image: linear-gradient(to bottom, #eeeeee, #cccccc);
913
+ border: 1px solid #ccc;
914
+ border-bottom: 1px solid #bbb;
915
+ border-radius: 3px;
916
+ color: #333;
917
+ font-size: 14px;
918
+ line-height: 1;
919
+ padding: 5px 4px;
920
+ text-align: center;
921
+ text-shadow: 0 1px 0 #eee;
922
+ vertical-align: middle;
923
+ }
924
+ .sp-container button:hover {
925
+ background-color: #dddddd;
926
+ background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);
927
+ background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);
928
+ background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);
929
+ background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);
930
+ background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);
931
+ border: 1px solid #bbb;
932
+ border-bottom: 1px solid #999;
933
+ cursor: pointer;
934
+ text-shadow: 0 1px 0 #ddd;
935
+ }
936
+ .sp-container button:active {
937
+ border: 1px solid #aaa;
938
+ border-bottom: 1px solid #888;
939
+ -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
940
+ -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
941
+ -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
942
+ -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
943
+ box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;
944
+ }
945
+ .sp-cancel {
946
+ font-size: 11px;
947
+ color: #d93f3f !important;
948
+ margin:0;
949
+ padding:2px;
950
+ margin-right: 5px;
951
+ vertical-align: middle;
952
+ text-decoration:none;
953
+
954
+ }
955
+ .sp-cancel:hover {
956
+ color: #d93f3f !important;
957
+ text-decoration: underline;
958
+ }
959
+
960
+
961
+ .sp-palette span:hover, .sp-palette span.sp-thumb-active {
962
+ border-color: #000;
963
+ }
964
+
965
+ .sp-preview, .sp-alpha, .sp-thumb-el {
966
+ position:relative;
967
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
968
+ }
969
+ .sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner {
970
+ display:block;
971
+ position:absolute;
972
+ top:0;left:0;bottom:0;right:0;
973
+ }
974
+
975
+ .sp-palette .sp-thumb-inner {
976
+ background-position: 50% 50%;
977
+ background-repeat: no-repeat;
978
+ }
979
+
980
+ .sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner {
981
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);
982
+ }
983
+
984
+ .sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner {
985
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);
986
+ }
987
+
988
+ .sp-clear-display {
989
+ background-repeat:no-repeat;
990
+ background-position: center;
991
+ background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==);
992
+ }
993
+
994
+ @-moz-keyframes fadeIn {
995
+ 0% {
996
+ opacity: 0.3;
997
+ }
998
+ 100% {
999
+ opacity: 1;
1000
+ }
1001
+ }
1002
+ @-webkit-keyframes fadeIn {
1003
+ 0% {
1004
+ opacity: 0.3;
1005
+ }
1006
+ 100% {
1007
+ opacity: 1;
1008
+ }
1009
+ }
1010
+ @-o-keyframes fadeIn {
1011
+ 0% {
1012
+ opacity: 0.3;
1013
+ }
1014
+ 100% {
1015
+ opacity: 1;
1016
+ }
1017
+ }
1018
+ @keyframes fadeIn {
1019
+ 0% {
1020
+ opacity: 0.3;
1021
+ }
1022
+ 100% {
1023
+ opacity: 1;
1024
+ }
1025
+ }
1026
+ a {
1027
+ color: #2ea1cd;
1028
+ text-decoration: none;
1029
+ }
1030
+ .mailpoet_hidden {
1031
+ display: none !important;
1032
+ }
1033
+ input.mailpoet_color {
1034
+ width: 5em;
1035
+ }
1036
+ select.mailpoet_font-family {
1037
+ width: 8em;
1038
+ }
1039
+ select.mailpoet_font-size {
1040
+ width: 5em;
1041
+ }
1042
+ .mailpoet_input,
1043
+ .mailpoet_select {
1044
+ -webkit-border-radius: 1px;
1045
+ -moz-border-radius: 1px;
1046
+ border-radius: 1px;
1047
+ -webkit-box-shadow: none !important;
1048
+ -moz-box-shadow: none !important;
1049
+ box-shadow: none !important;
1050
+ appearance: none;
1051
+ padding: 3px;
1052
+ line-height: 22px;
1053
+ }
1054
+ .mailpoet_input {
1055
+ width: 283px;
1056
+ border: 1px solid #e5e5e5;
1057
+ }
1058
+ .mailpoet_input_small {
1059
+ width: 48px;
1060
+ }
1061
+ .mailpoet_input_medium {
1062
+ width: 150px;
1063
+ }
1064
+ .mailpoet_input_full {
1065
+ width: 100%;
1066
+ box-sizing: border-box;
1067
+ }
1068
+ .mailpoet_range {
1069
+ width: 283px;
1070
+ -webkit-appearance: none;
1071
+ padding: 0;
1072
+ vertical-align: middle;
1073
+ }
1074
+ .mailpoet_range:focus {
1075
+ outline: none;
1076
+ }
1077
+ .mailpoet_range::-webkit-slider-runnable-track {
1078
+ width: 100%;
1079
+ height: 12px;
1080
+ cursor: pointer;
1081
+ animate: 0.2s;
1082
+ background: #fff;
1083
+ -webkit-border-radius: 3px;
1084
+ -moz-border-radius: 3px;
1085
+ border-radius: 3px;
1086
+ border: 1px solid #ddd;
1087
+ }
1088
+ .mailpoet_range::-webkit-slider-thumb {
1089
+ border: 1px solid #333;
1090
+ height: 26px;
1091
+ width: 13px;
1092
+ -webkit-border-radius: 3px;
1093
+ -moz-border-radius: 3px;
1094
+ border-radius: 3px;
1095
+ background: #a4a4a4;
1096
+ cursor: pointer;
1097
+ -webkit-appearance: none;
1098
+ margin-top: -8.666666666666666px;
1099
+ }
1100
+ .mailpoet_range:hover::-webkit-slider-thumb {
1101
+ background: #0074a2;
1102
+ }
1103
+ .mailpoet_range::-moz-range-track {
1104
+ width: 100%;
1105
+ height: 12px;
1106
+ cursor: pointer;
1107
+ animate: 0.2s;
1108
+ background: #fff;
1109
+ -webkit-border-radius: 3px;
1110
+ -moz-border-radius: 3px;
1111
+ border-radius: 3px;
1112
+ border: 1px solid #ddd;
1113
+ }
1114
+ .mailpoet_range::-moz-range-thumb {
1115
+ border: 1px solid #333;
1116
+ height: 26px;
1117
+ width: 13px;
1118
+ -webkit-border-radius: 3px;
1119
+ -moz-border-radius: 3px;
1120
+ border-radius: 3px;
1121
+ background: #a4a4a4;
1122
+ cursor: pointer;
1123
+ }
1124
+ .mailpoet_range:hover::-moz-range-thumb {
1125
+ background: #0074a2;
1126
+ }
1127
+ .mailpoet_range::-ms-fill-lower {
1128
+ border: 1px solid #ddd;
1129
+ background: #fff;
1130
+ }
1131
+ .mailpoet_range::-ms-fill-upper {
1132
+ border: 1px solid #ddd;
1133
+ background: #fff;
1134
+ }
1135
+ .mailpoet_range::-ms-track {
1136
+ width: 100%;
1137
+ height: 12px;
1138
+ cursor: pointer;
1139
+ animate: 0.2s;
1140
+ background: transparent;
1141
+ border-color: transparent;
1142
+ border-width: 24px 0;
1143
+ color: transparent;
1144
+ }
1145
+ .mailpoet_range::-ms-thumb {
1146
+ border: 1px solid #333;
1147
+ height: 26px;
1148
+ width: 13px;
1149
+ -webkit-border-radius: 3px;
1150
+ -moz-border-radius: 3px;
1151
+ border-radius: 3px;
1152
+ background: #a4a4a4;
1153
+ cursor: pointer;
1154
+ }
1155
+ .mailpoet_range:hover::-ms-thumb {
1156
+ background: #0074a2;
1157
+ }
1158
+ .mailpoet_range:focus::-ms-fill-lower {
1159
+ border: 1px solid #ddd;
1160
+ background: #fff;
1161
+ }
1162
+ .mailpoet_range:focus::-ms-fill-upper {
1163
+ border: 1px solid #ddd;
1164
+ background: #fff;
1165
+ }
1166
+ .mailpoet_range_small {
1167
+ width: 100px;
1168
+ }
1169
+ .mailpoet_range_medium {
1170
+ width: 180px;
1171
+ }
1172
+ .mailpoet_select {
1173
+ border-color: #e5e5e5;
1174
+ color: #656565;
1175
+ margin: 0;
1176
+ }
1177
+ .mailpoet_select_large {
1178
+ width: 139px;
1179
+ }
1180
+ .mailpoet_select_medium {
1181
+ width: 103px;
1182
+ }
1183
+ .mailpoet_select_small {
1184
+ width: 68px;
1185
+ }
1186
+ .mailpoet_select_half_width {
1187
+ width: 50%;
1188
+ }
1189
+ #mailpoet_editor_content ol,
1190
+ #mailpoet_editor_content ul {
1191
+ list-style-position: inside;
1192
+ margin-left: 0;
1193
+ }
1194
+ #mailpoet_editor_content ul {
1195
+ list-style-type: disc;
1196
+ }
1197
+ .mailpoet_button {
1198
+ margin: 0;
1199
+ border: 1px solid #ddd;
1200
+ background-color: #f8f8f8;
1201
+ padding: 6px 20px;
1202
+ color: #a4a4a4;
1203
+ -webkit-border-radius: 3px;
1204
+ -moz-border-radius: 3px;
1205
+ border-radius: 3px;
1206
+ line-height: normal;
1207
+ vertical-align: top;
1208
+ }
1209
+ .mailpoet_button_full {
1210
+ width: 100%;
1211
+ box-sizing: border-box;
1212
+ }
1213
+ .mailpoet_button_primary {
1214
+ border-color: #0074a2;
1215
+ background-color: #2ea1cd;
1216
+ color: #fff;
1217
+ }
1218
+ .mailpoet_button_primary:hover {
1219
+ background-color: #1e8cbe;
1220
+ }
1221
+ .mailpoet_button_group {
1222
+ display: inline;
1223
+ }
1224
+ .mailpoet_button_group .mailpoet_button:first-child {
1225
+ margin-right: 0;
1226
+ padding: 6px 12px 6px;
1227
+ border-top-right-radius: 0;
1228
+ border-bottom-right-radius: 0;
1229
+ }
1230
+ .mailpoet_button_group .mailpoet_button:last-child {
1231
+ margin-left: 0;
1232
+ padding-left: 10px;
1233
+ padding-right: 10px;
1234
+ border-left: 0;
1235
+ border-top-left-radius: 0;
1236
+ border-bottom-left-radius: 0;
1237
+ }
1238
+ .mailpoet_text_content p {
1239
+ margin: 1em 0;
1240
+ }
1241
+ .mailpoet_separator {
1242
+ margin: 17px 20px;
1243
+ }
1244
+ .mailpoet_option_offset_left_small {
1245
+ margin-left: 10px;
1246
+ }
1247
+ input.mailpoet_option_offset_left_small {
1248
+ margin-left: 10px !important;
1249
+ }
1250
+ #mailpoet_editor {
1251
+ width: 100%;
1252
+ clear: both;
1253
+ }
1254
+ #mailpoet_editor_heading {
1255
+ padding-left: 15px;
1256
+ margin-left: 2px;
1257
+ }
1258
+ #mailpoet_editor_main_wrapper {
1259
+ border: 1px solid #ddd;
1260
+ border-left: 0;
1261
+ position: relative;
1262
+ min-width: 1050px;
1263
+ }
1264
+ #mailpoet_editor_content_container {
1265
+ width: 100%;
1266
+ padding-right: 330px;
1267
+ box-sizing: border-box;
1268
+ }
1269
+ #mailpoet_editor_sidebar {
1270
+ float: right;
1271
+ width: 330px;
1272
+ box-sizing: border-box;
1273
+ }
1274
+ .mailpoet_newsletter_wrapper {
1275
+ max-width: 660px;
1276
+ width: 660px;
1277
+ margin: auto;
1278
+ position: relative;
1279
+ }
1280
+ .mailpoet_form_field {
1281
+ margin-top: 15px;
1282
+ margin-bottom: 15px;
1283
+ }
1284
+ .mailpoet_form_field_title {
1285
+ clear: both;
1286
+ margin-bottom: 5px;
1287
+ }
1288
+ .mailpoet_form_field_title_small {
1289
+ width: 120px;
1290
+ }
1291
+ .mailpoet_form_field_title_inline {
1292
+ display: inline-block;
1293
+ margin-bottom: 0;
1294
+ margin-top: 6px;
1295
+ }
1296
+ .mailpoet_form_field_optional {
1297
+ font-size: 0.8em;
1298
+ color: #a4a4a4;
1299
+ }
1300
+ .mailpoet_form_field_radio_option,
1301
+ .mailpoet_form_field_checkbox_option {
1302
+ display: inline-block;
1303
+ vertical-align: top;
1304
+ margin-right: 5px;
1305
+ line-height: 30px;
1306
+ }
1307
+ .mailpoet_form_field_radio_option:last-child,
1308
+ .mailpoet_form_field_checkbox_option:last-child {
1309
+ margin-right: 0;
1310
+ }
1311
+ .mailpoet_form_field_input_option {
1312
+ display: inline-block;
1313
+ }
1314
+ .mailpoet_form_field_input_option input[type=checkbox] {
1315
+ vertical-align: top;
1316
+ }
1317
+ .mailpoet_form_field_input_option input[type=text] {
1318
+ vertical-align: middle;
1319
+ }
1320
+ .mailpoet_form_field_block {
1321
+ display: block;
1322
+ }
1323
+ .mailpoet_heading_form_field {
1324
+ margin-top: 5px;
1325
+ margin-bottom: 5px;
1326
+ }
1327
+ .mailpoet_input_title,
1328
+ .mailpoet_input_preheader {
1329
+ width: 500px;
1330
+ padding: 3px;
1331
+ line-height: normal;
1332
+ }
1333
+ .mailpoet_input_title {
1334
+ font-size: 23px;
1335
+ }
1336
+ .mailpoet_breadcrumbs {
1337
+ float: right;
1338
+ clear: both;
1339
+ margin-bottom: 13px;
1340
+ margin-right: 17px;
1341
+ font-size: 0.9em;
1342
+ text-transform: uppercase;
1343
+ }
1344
+ #mailpoet_editor_sidebar {
1345
+ border-left: #ddd;
1346
+ border-bottom: #ddd;
1347
+ color: #656565;
1348
+ font-size: 13px;
1349
+ }
1350
+ #mailpoet_editor_sidebar .mailpoet_sidebar_region {
1351
+ margin-bottom: 0;
1352
+ border-left: 1px solid #ddd;
1353
+ border-bottom: 1px solid #ddd;
1354
+ border-top: 0;
1355
+ border-right: 0;
1356
+ }
1357
+ #mailpoet_editor_sidebar .mailpoet_sidebar_region.closed .mailpoet_region_content {
1358
+ display: none;
1359
+ }
1360
+ #mailpoet_editor_sidebar .mailpoet_region_content {
1361
+ padding: 0 20px;
1362
+ margin-top: 12px;
1363
+ }
1364
+ #mailpoet_editor_sidebar,
1365
+ #mailpoet_editor_sidebar .postbox {
1366
+ background-color: #f8f8f8;
1367
+ }
1368
+ #mailpoet_editor_sidebar .postbox {
1369
+ padding-bottom: 20px;
1370
+ }
1371
+ #mailpoet_editor_sidebar .postbox.closed {
1372
+ padding-bottom: 0;
1373
+ }
1374
+ #mailpoet_editor_sidebar .postbox.closed h3 {
1375
+ color: #a4a4a4;
1376
+ cursor: pointer;
1377
+ }
1378
+ #mailpoet_editor_sidebar .postbox h3,
1379
+ #mailpoet_editor_sidebar .postbox:hover h3 {
1380
+ margin: 0;
1381
+ padding: 17px 20px;
1382
+ text-transform: uppercase;
1383
+ color: #0074a2;
1384
+ }
1385
+ #mailpoet_editor_sidebar .postbox h3,
1386
+ #mailpoet_editor_sidebar .postbox .handlediv {
1387
+ cursor: auto;
1388
+ border: 0;
1389
+ }
1390
+ #mailpoet_editor_sidebar .postbox .handlediv::before {
1391
+ top: 18px;
1392
+ right: 18px;
1393
+ font: 400 20px/1 dashicons;
1394
+ speak: none;
1395
+ display: inline-block;
1396
+ position: relative;
1397
+ -webkit-font-smoothing: antialiased;
1398
+ -moz-osx-font-smoothing: grayscale;
1399
+ text-decoration: none !important;
1400
+ content: '\f142';
1401
+ color: #0074a2;
1402
+ }
1403
+ #mailpoet_editor_sidebar .postbox.closed .handlediv::before {
1404
+ content: '\f140';
1405
+ color: #a4a4a4;
1406
+ }
1407
+ #mailpoet_editor_sidebar .postbox.closed:hover .handlediv::before {
1408
+ color: #0074a2;
1409
+ }
1410
+ .mailpoet_widget {
1411
+ display: inline-block;
1412
+ width: 70px;
1413
+ text-align: center;
1414
+ float: left;
1415
+ padding: 0 13px 15px 13px;
1416
+ }
1417
+ .mailpoet_widget:nth-child(3n+1) {
1418
+ clear: left;
1419
+ }
1420
+ .mailpoet_widget .mailpoet_widget_icon {
1421
+ width: 70px;
1422
+ height: 70px;
1423
+ background-color: #fff;
1424
+ -webkit-border-radius: 3px;
1425
+ -moz-border-radius: 3px;
1426
+ border-radius: 3px;
1427
+ -webkit-box-shadow: 1px 2px #d8d8d8;
1428
+ -moz-box-shadow: 1px 2px #d8d8d8;
1429
+ box-shadow: 1px 2px #d8d8d8;
1430
+ color: #aaa;
1431
+ fill: #aaa;
1432
+ text-align: center;
1433
+ line-height: 70px;
1434
+ box-sizing: border-box;
1435
+ margin-bottom: 9px;
1436
+ /* Vertically align widget icon glyphs */
1437
+ }
1438
+ .mailpoet_widget .mailpoet_widget_icon > * {
1439
+ vertical-align: middle;
1440
+ width: 30px;
1441
+ height: 30px;
1442
+ font-size: 30px;
1443
+ }
1444
+ .mailpoet_widget .mailpoet_widget_icon:hover {
1445
+ color: #0074a2;
1446
+ fill: #0074a2;
1447
+ border: 1px solid #0074a2;
1448
+ }
1449
+ .mailpoet_widget.mailpoet_droppable_active {
1450
+ color: #0074a2;
1451
+ fill: #0074a2;
1452
+ }
1453
+ .mailpoet_widget.mailpoet_droppable_active .mailpoet_widget_icon {
1454
+ border: 1px solid #0074a2;
1455
+ color: #0074a2;
1456
+ fill: #0074a2;
1457
+ -webkit-box-shadow: none;
1458
+ -moz-box-shadow: none;
1459
+ box-shadow: none;
1460
+ }
1461
+ .mailpoet_widget.mailpoet_droppable_active .mailpoet_widget_title {
1462
+ display: none;
1463
+ }
1464
+ .mailpoet_editor_settings {
1465
+ color: #656565;
1466
+ font-size: 13px;
1467
+ }
1468
+ .mailpoet_editor_settings p {
1469
+ font-size: 1em;
1470
+ }
1471
+ .mailpoet_editor_settings h3 {
1472
+ font-size: 1.4em;
1473
+ color: #0074a2;
1474
+ text-transform: uppercase;
1475
+ }
1476
+ .mailpoet_sidepanel_field {
1477
+ margin-top: 15px;
1478
+ margin-bottom: 15px;
1479
+ }
1480
+ .mailpoet_sidepanel_field_title {
1481
+ clear: both;
1482
+ margin-bottom: 5px;
1483
+ }
1484
+ .mailpoet_sidepanel_field_title_small {
1485
+ width: 120px;
1486
+ }
1487
+ .mailpoet_sidepanel_field_title_inline {
1488
+ display: inline-block;
1489
+ vertical-align: middle;
1490
+ line-height: 30px;
1491
+ margin-bottom: 0;
1492
+ }
1493
+ .mailpoet_sidepanel_field_optional {
1494
+ font-size: 0.8em;
1495
+ color: #a4a4a4;
1496
+ }
1497
+ .mailpoet_sidepanel_radio_option,
1498
+ .mailpoet_sidepanel_checkbox_option {
1499
+ display: inline-block;
1500
+ vertical-align: top;
1501
+ margin-right: 15px;
1502
+ line-height: 30px;
1503
+ }
1504
+ .mailpoet_sidepanel_radio_option:last-child,
1505
+ .mailpoet_sidepanel_checkbox_option:last-child {
1506
+ margin-right: 0;
1507
+ }
1508
+ .mailpoet_sidepanel_input_option {
1509
+ display: inline-block;
1510
+ }
1511
+ .mailpoet_sidepanel_input_option input[type=checkbox] {
1512
+ vertical-align: top;
1513
+ }
1514
+ .mailpoet_sidepanel_input_option input[type=text] {
1515
+ vertical-align: middle;
1516
+ }
1517
+ #mailpoet_editor_bottom {
1518
+ margin-top: 39px;
1519
+ margin-left: 29px;
1520
+ }
1521
+ .mailpoet_save_options {
1522
+ -webkit-border-radius: 3px;
1523
+ -moz-border-radius: 3px;
1524
+ border-radius: 3px;
1525
+ float: left;
1526
+ overflow: hidden;
1527
+ margin: 5px 0 0 0;
1528
+ clear: both;
1529
+ vertical-align: top;
1530
+ background: #fff;
1531
+ border: 1px solid #ddd;
1532
+ }
1533
+ .mailpoet_save_option {
1534
+ margin: 0;
1535
+ }
1536
+ .mailpoet_save_option > a {
1537
+ display: block;
1538
+ padding-left: 20px;
1539
+ padding-right: 20px;
1540
+ line-height: 2em;
1541
+ }
1542
+ .mailpoet_save_option:hover {
1543
+ background-color: #2ea1cd;
1544
+ color: #fff;
1545
+ }
1546
+ .mailpoet_save_option:hover > a {
1547
+ color: #fff;
1548
+ }
1549
+ .mailpoet_save_show_options {
1550
+ padding: 6px 3px 4px;
1551
+ }
1552
+ .mailpoet_save_show_options.mailpoet_save_show_options_active .mailpoet_save_show_options_icon::before {
1553
+ content: '\f142';
1554
+ }
1555
+ .mailpoet_save_show_options_icon {
1556
+ vertical-align: middle;
1557
+ }
1558
+ .mailpoet_save_show_options_icon::before {
1559
+ content: '\f140';
1560
+ }
1561
+ .mailpoet_save_as_template_container,
1562
+ .mailpoet_export_template_container {
1563
+ -webkit-border-radius: 3px;
1564
+ -moz-border-radius: 3px;
1565
+ border-radius: 3px;
1566
+ display: inline-block;
1567
+ clear: both;
1568
+ margin-top: 5px;
1569
+ padding: 0 10px;
1570
+ background-color: #fff;
1571
+ border: 1px solid #ddd;
1572
+ }
1573
+ .mailpoet_save_as_template_title,
1574
+ .mailpoet_export_template_title {
1575
+ font-size: 1.1em;
1576
+ }
1577
+ .mailpoet_editor_last_saved {
1578
+ color: #a4a4a4;
1579
+ font-size: 0.9em;
1580
+ display: inline;
1581
+ }
1582
+ .mailpoet_save_error {
1583
+ color: #d54e21;
1584
+ }
1585
+ .mailpoet_tools {
1586
+ position: absolute;
1587
+ top: 0;
1588
+ right: 0;
1589
+ z-index: 20;
1590
+ padding: 2px;
1591
+ text-align: right;
1592
+ overflow: hidden;
1593
+ }
1594
+ .mailpoet_tools .mailpoet_tool_slider {
1595
+ position: relative;
1596
+ right: -100%;
1597
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1);
1598
+ opacity: 0;
1599
+ }
1600
+ .mailpoet_tools.mailpoet_display_tools .mailpoet_tool_slider {
1601
+ right: 0;
1602
+ opacity: 1;
1603
+ }
1604
+ .mailpoet_tools a {
1605
+ vertical-align: top;
1606
+ }
1607
+ .mailpoet_container_horizontal + .mailpoet_tools {
1608
+ left: 100%;
1609
+ right: initial;
1610
+ padding-left: 5px;
1611
+ }
1612
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_tool_slider {
1613
+ left: -100%;
1614
+ right: initial;
1615
+ }
1616
+ .mailpoet_container_horizontal + .mailpoet_tools.mailpoet_display_tools .mailpoet_tool_slider {
1617
+ left: 0;
1618
+ }
1619
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_tool {
1620
+ width: 24px;
1621
+ height: 24px;
1622
+ display: block;
1623
+ }
1624
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_tool .mailpoet_tool_icon {
1625
+ width: 24px;
1626
+ height: 24px;
1627
+ }
1628
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_activate {
1629
+ max-width: 100%;
1630
+ max-height: 24px;
1631
+ opacity: 1;
1632
+ display: block;
1633
+ }
1634
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_confirm,
1635
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_cancel {
1636
+ max-width: 100%;
1637
+ max-height: 0;
1638
+ opacity: 0;
1639
+ overflow: hidden;
1640
+ display: block;
1641
+ margin: 0;
1642
+ }
1643
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_activated {
1644
+ width: auto;
1645
+ height: auto;
1646
+ }
1647
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_activated .mailpoet_delete_block_activate {
1648
+ overflow: hidden;
1649
+ max-height: 0;
1650
+ opacity: 0;
1651
+ }
1652
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_activated .mailpoet_delete_block_confirm,
1653
+ .mailpoet_container_horizontal + .mailpoet_tools .mailpoet_delete_block_activated .mailpoet_delete_block_cancel {
1654
+ max-height: 48px;
1655
+ opacity: 1;
1656
+ }
1657
+ .mailpoet_tool {
1658
+ display: inline-block;
1659
+ width: 20px;
1660
+ height: 20px;
1661
+ padding: 2px;
1662
+ }
1663
+ .mailpoet_tool:hover {
1664
+ filter: progid:DXImageTransform.Microsoft.Dropshadow(OffX=1, OffY=2, Color='#d2d2d4');
1665
+ -webkit-filter: drop-shadow(1px 2px 0px #d2d2d4);
1666
+ -ms-filter: progid:DXImageTransform.Microsoft.Dropshadow(OffX=1, OffY=2, Color='#d2d2d4');
1667
+ filter: drop-shadow(1px 2px 0px #d2d2d4);
1668
+ }
1669
+ .mailpoet_tool .mailpoet_tool_icon {
1670
+ fill: #333;
1671
+ width: 20px;
1672
+ height: 20px;
1673
+ }
1674
+ .mailpoet_tool .mailpoet_tool_icon .mailpoet_tool_icon_foreground {
1675
+ fill: #fff;
1676
+ }
1677
+ .mailpoet_tool .mailpoet_tool_icon:hover {
1678
+ fill: #bbb;
1679
+ }
1680
+ .mailpoet_tool .mailpoet_tool_icon:hover .mailpoet_tool_icon_foreground {
1681
+ fill: #fff;
1682
+ }
1683
+ .mailpoet_tool .mailpoet_tool_icon:active {
1684
+ fill: #0074a2;
1685
+ }
1686
+ .mailpoet_tool .mailpoet_tool_icon:active .mailpoet_tool_icon_foreground {
1687
+ fill: #fff;
1688
+ }
1689
+ .mailpoet_tool .mailpoet_delete_block_confirmation {
1690
+ position: absolute;
1691
+ top: 0;
1692
+ right: 0;
1693
+ width: 200px;
1694
+ }
1695
+ .mailpoet_delete_block {
1696
+ display: inline-block;
1697
+ padding: 2px;
1698
+ vertical-align: top;
1699
+ transition: background 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
1700
+ }
1701
+ .mailpoet_delete_block .mailpoet_tool {
1702
+ padding: 0;
1703
+ }
1704
+ .mailpoet_delete_block .mailpoet_delete_block_activate {
1705
+ max-width: 20px;
1706
+ display: inline-block;
1707
+ opacity: 1;
1708
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
1709
+ }
1710
+ .mailpoet_delete_block .mailpoet_delete_block_confirm,
1711
+ .mailpoet_delete_block .mailpoet_delete_block_cancel {
1712
+ max-width: 0;
1713
+ opacity: 0;
1714
+ overflow: hidden;
1715
+ display: inline-block;
1716
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
1717
+ }
1718
+ .mailpoet_delete_block_activated {
1719
+ height: auto;
1720
+ width: auto;
1721
+ -webkit-border-radius: 3px;
1722
+ -moz-border-radius: 3px;
1723
+ border-radius: 3px;
1724
+ background-color: #e64047;
1725
+ padding: 3px 5px;
1726
+ }
1727
+ .mailpoet_delete_block_activated .mailpoet_delete_block_activate {
1728
+ overflow: hidden;
1729
+ max-width: 0;
1730
+ opacity: 0;
1731
+ }
1732
+ .mailpoet_delete_block_activated .mailpoet_delete_block_confirm,
1733
+ .mailpoet_delete_block_activated .mailpoet_delete_block_cancel {
1734
+ max-width: 100%;
1735
+ opacity: 1;
1736
+ }
1737
+ .mailpoet_delete_block_activated .mailpoet_delete_block_cancel {
1738
+ margin-left: 3px;
1739
+ }
1740
+ .mailpoet_delete_block_confirm {
1741
+ color: #fff;
1742
+ }
1743
+ .mailpoet_delete_block_confirm:hover {
1744
+ color: #fff;
1745
+ text-decoration: underline;
1746
+ }
1747
+ .mailpoet_delete_block_cancel {
1748
+ color: #f4c6c8;
1749
+ }
1750
+ .mailpoet_delete_block_cancel:hover {
1751
+ color: #f4c6c8;
1752
+ text-decoration: underline;
1753
+ }
1754
+ .mailpoet_newsletter_layer_selector.mailpoet_container_layer_active .mailpoet_tool_icon {
1755
+ fill: #0074a2;
1756
+ z-index: 100001 !important;
1757
+ }
1758
+ .mailpoet_newsletter_layer_selector.mailpoet_container_layer_active .mailpoet_tool_icon .mailpoet_tool_icon_foreground {
1759
+ fill: #fff;
1760
+ }
1761
+ .mailpoet_container_layer_active .mailpoet_block {
1762
+ pointer-events: none;
1763
+ opacity: 0.4;
1764
+ }
1765
+ .mailpoet_container_layer_active .mailpoet_container_block {
1766
+ pointer-events: auto;
1767
+ opacity: 1;
1768
+ }
1769
+ .mailpoet_container_layer_active .mailpoet_container_block > .mailpoet_tools {
1770
+ display: block !important;
1771
+ }
1772
+ .mailpoet_container_layer_active > .mailpoet_tools {
1773
+ z-index: 100001 !important;
1774
+ }
1775
+ .mailpoet_layer_overlay {
1776
+ height: 100%;
1777
+ left: 0;
1778
+ overflow-y: auto;
1779
+ overflow-x: hidden;
1780
+ position: fixed;
1781
+ top: 0;
1782
+ width: 100%;
1783
+ z-index: 100000;
1784
+ background-color: rgba(0,0,0,0.6);
1785
+ margin: 0 !important;
1786
+ }
1787
+ .mailpoet_layer_highlight {
1788
+ pointer-events: none;
1789
+ background-color: #f1f1f1;
1790
+ position: relative;
1791
+ z-index: 100001 !important;
1792
+ }
1793
+ .mailpoet_drop_marker {
1794
+ background-color: #0074a2;
1795
+ position: absolute;
1796
+ min-width: 2px;
1797
+ min-height: 2px;
1798
+ z-index: 1;
1799
+ -webkit-box-shadow: 0px 0px 1px 0px #0074a2;
1800
+ -moz-box-shadow: 0px 0px 1px 0px #0074a2;
1801
+ box-shadow: 0px 0px 1px 0px #0074a2;
1802
+ }
1803
+ .mailpoet_drop_marker::before,
1804
+ .mailpoet_drop_marker::after {
1805
+ position: absolute;
1806
+ margin-top: -18px;
1807
+ font: 400 40px/1 dashicons;
1808
+ color: #0074a2;
1809
+ }
1810
+ .mailpoet_drop_marker::before {
1811
+ left: -25px;
1812
+ content: "\f139";
1813
+ }
1814
+ .mailpoet_drop_marker::after {
1815
+ right: -23px;
1816
+ content: "\f141";
1817
+ }
1818
+ .mailpoet_drop_marker.mailpoet_drop_marker_middle,
1819
+ .mailpoet_drop_marker.mailpoet_drop_marker_first.mailpoet_drop_marker_after,
1820
+ .mailpoet_drop_marker.mailpoet_drop_marker_last.mailpoet_drop_marker_before {
1821
+ margin-top: -1px;
1822
+ }
1823
+ .mailpoet_drop_marker.mailpoet_drop_marker_last.mailpoet_drop_marker_after {
1824
+ margin-top: -2px;
1825
+ }
1826
+ #mailpoet_editor .mailpoet_droppable_active {
1827
+ z-index: 21000;
1828
+ }
1829
+ .mailpoet_block.mailpoet_droppable_active {
1830
+ border: 1px dashed #0074a2 !important;
1831
+ width: 660px;
1832
+ }
1833
+ .mailpoet_block.mailpoet_droppable_active .mailpoet_tools {
1834
+ display: none !important;
1835
+ }
1836
+ .mailpoet_widget.mailpoet_droppable_active {
1837
+ padding: 0;
1838
+ margin: 0;
1839
+ z-index: 2;
1840
+ animation-name: fadeIn;
1841
+ animation-duration: 300ms;
1842
+ animation-fill-mode: forwards;
1843
+ animation-timing-function: ease-in;
1844
+ }
1845
+ .mailpoet_widget.mailpoet_droppable_active .mailpoet_widget_icon {
1846
+ padding: 0;
1847
+ margin: 0;
1848
+ }
1849
+ .mailpoet_drop_active > .mailpoet_container > div > .mailpoet_container_empty {
1850
+ background-color: #0074a2;
1851
+ -webkit-box-shadow: inset 1px 2px 1px #025c80;
1852
+ -moz-box-shadow: inset 1px 2px 1px #025c80;
1853
+ box-shadow: inset 1px 2px 1px #025c80;
1854
+ color: #fff;
1855
+ }
1856
+ .mailpoet_resize_handle_container {
1857
+ position: absolute;
1858
+ bottom: 0;
1859
+ text-align: center;
1860
+ width: 100%;
1861
+ }
1862
+ .mailpoet_resize_handle {
1863
+ padding: 6px 15px 10px 6px;
1864
+ position: relative;
1865
+ top: 5px;
1866
+ background: #0074a2;
1867
+ -webkit-border-radius: 3px;
1868
+ -moz-border-radius: 3px;
1869
+ border-radius: 3px;
1870
+ display: inline-block;
1871
+ width: 30px;
1872
+ cursor: ns-resize;
1873
+ z-index: 2;
1874
+ }
1875
+ .mailpoet_resize_handle .mailpoet_resize_handle_text,
1876
+ .mailpoet_resize_handle .mailpoet_resize_handle_icon {
1877
+ pointer-events: none;
1878
+ }
1879
+ .mailpoet_resize_handle_text {
1880
+ line-height: 1.5em;
1881
+ font-size: 11px;
1882
+ font-weight: bold;
1883
+ color: #fff;
1884
+ text-align: center;
1885
+ }
1886
+ .mailpoet_resize_handle_icon {
1887
+ position: absolute;
1888
+ top: 9px;
1889
+ right: 1px;
1890
+ }
1891
+ .mailpoet_resize_handle_icon > svg {
1892
+ width: 15px;
1893
+ height: 15px;
1894
+ fill: #fff;
1895
+ }
1896
+ .mailpoet_block.mailpoet_resize_active > .mailpoet_block_highlight {
1897
+ border: 1px dashed #0074a2;
1898
+ }
1899
+ .mailpoet_block.mailpoet_resize_active > .mailpoet_block_highlight .mailpoet_resize_handle {
1900
+ display: inline-block;
1901
+ }
1902
+ .mailpoet_block {
1903
+ box-sizing: border-box;
1904
+ position: relative;
1905
+ float: left;
1906
+ background-color: inherit;
1907
+ box-sizing: border-box;
1908
+ margin-bottom: 20px;
1909
+ padding-left: 20px;
1910
+ padding-right: 20px;
1911
+ }
1912
+ .mailpoet_block > .mailpoet_block_highlight {
1913
+ position: absolute;
1914
+ top: 0;
1915
+ right: 0;
1916
+ bottom: 0;
1917
+ left: 0;
1918
+ pointer-events: none;
1919
+ border: 1px solid rgba(255,255,255,0);
1920
+ }
1921
+ .mailpoet_block:hover > .mailpoet_block_highlight,
1922
+ .mailpoet_block.mailpoet_highlight > .mailpoet_block_highlight {
1923
+ border: 1px dashed #0074a2;
1924
+ }
1925
+ .mailpoet_block:last-child {
1926
+ margin-bottom: 0;
1927
+ }
1928
+ .mailpoet_content {
1929
+ position: relative;
1930
+ line-height: 1.6em;
1931
+ }
1932
+ .mailpoet_content p,
1933
+ .mailpoet_content h1,
1934
+ .mailpoet_content h2,
1935
+ .mailpoet_content h3,
1936
+ .mailpoet_content h4,
1937
+ .mailpoet_content h5,
1938
+ .mailpoet_content h6 {
1939
+ line-height: 1.6em;
1940
+ padding: 0;
1941
+ margin: 0;
1942
+ font-style: normal;
1943
+ font-weight: normal;
1944
+ }
1945
+ .mailpoet_content h1,
1946
+ .mailpoet_content h2,
1947
+ .mailpoet_content h3,
1948
+ .mailpoet_content h4,
1949
+ .mailpoet_content h5,
1950
+ .mailpoet_content h6 {
1951
+ margin-bottom: 0.3em;
1952
+ }
1953
+ .mailpoet_content p {
1954
+ margin-top: 0;
1955
+ margin-bottom: 0;
1956
+ font-weight: normal;
1957
+ }
1958
+ .mailpoet_content ul {
1959
+ padding: 0;
1960
+ margin-top: 10px;
1961
+ margin-bottom: 10px;
1962
+ }
1963
+ .mailpoet_content li {
1964
+ margin-top: 0;
1965
+ font-weight: normal;
1966
+ margin-bottom: 10px;
1967
+ }
1968
+ .mailpoet_content blockquote {
1969
+ margin: 0 0 1.6em;
1970
+ padding-left: 10px;
1971
+ border-left: 2px #565656 solid;
1972
+ }
1973
+ .mailpoet_container {
1974
+ width: 100%;
1975
+ min-height: 15px;
1976
+ position: relative;
1977
+ }
1978
+ .mailpoet_container_block {
1979
+ margin-left: 0;
1980
+ margin-right: 0;
1981
+ position: relative;
1982
+ box-sizing: border-box;
1983
+ border: 0;
1984
+ padding-left: 0;
1985
+ padding-right: 0;
1986
+ }
1987
+ .mailpoet_container_block:hover > .mailpoet_block_highlight {
1988
+ border: 0;
1989
+ }
1990
+ .mailpoet_container_vertical > * {
1991
+ width: 100%;
1992
+ box-sizing: border-box;
1993
+ }
1994
+ .mailpoet_container_horizontal > * {
1995
+ vertical-align: top;
1996
+ }
1997
+ #mailpoet_editor_content .mailpoet_container {
1998
+ box-sizing: border-box;
1999
+ float: left;
2000
+ }
2001
+ #mailpoet_editor_content > .mailpoet_container_block {
2002
+ width: 660px;
2003
+ border: 0;
2004
+ }
2005
+ #mailpoet_editor_content > .mailpoet_container_block > .mailpoet_container > .mailpoet_container_block {
2006
+ margin-bottom: 0;
2007
+ }
2008
+ #mailpoet_editor_content .mailpoet_container_horizontal > .mailpoet_container_block {
2009
+ margin-bottom: 0;
2010
+ width: 660px;
2011
+ }
2012
+ #mailpoet_editor_content > .mailpoet_container_block > .mailpoet_container > .mailpoet_container_block > .mailpoet_container_horizontal > .mailpoet_block:first-child:nth-last-child(2),
2013
+ #mailpoet_editor_content > .mailpoet_container_block > .mailpoet_container > .mailpoet_container_block > .mailpoet_container_horizontal > .mailpoet_block:first-child:nth-last-child(2) ~ .mailpoet_block {
2014
+ width: 330px;
2015
+ }
2016
+ #mailpoet_editor_content > .mailpoet_container_block > .mailpoet_container > .mailpoet_container_block > .mailpoet_container_horizontal > .mailpoet_block:first-child:nth-last-child(3),
2017
+ #mailpoet_editor_content > .mailpoet_container_block > .mailpoet_container > .mailpoet_container_block > .mailpoet_container_horizontal > .mailpoet_block:first-child:nth-last-child(3) ~ .mailpoet_block {
2018
+ width: 220px;
2019
+ }
2020
+ .mailpoet_container_empty {
2021
+ text-align: center;
2022
+ background-color: #f2f2f2;
2023
+ margin: 20px;
2024
+ padding: 15px;
2025
+ -webkit-box-shadow: inset 1px 2px 1px #a4a4a4;
2026
+ -moz-box-shadow: inset 1px 2px 1px #a4a4a4;
2027
+ box-shadow: inset 1px 2px 1px #a4a4a4;
2028
+ color: #656565;
2029
+ -webkit-border-radius: 3px;
2030
+ -moz-border-radius: 3px;
2031
+ border-radius: 3px;
2032
+ transition: background 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2033
+ }
2034
+ .mailpoet_automated_latest_content_block {
2035
+ padding: 0;
2036
+ }
2037
+ .mailpoet_automated_latest_content_block_overlay {
2038
+ position: absolute;
2039
+ z-index: 19;
2040
+ width: 100%;
2041
+ height: 100%;
2042
+ background: rgba(255,255,255,0);
2043
+ transition: background 0.15s ease-out;
2044
+ }
2045
+ .mailpoet_automated_latest_content_block_overlay:hover {
2046
+ background: rgba(255,255,255,0.7);
2047
+ cursor: pointer;
2048
+ }
2049
+ .mailpoet_automated_latest_content_block_posts {
2050
+ overflow: auto;
2051
+ }
2052
+ .mailpoet_automated_latest_content_block_posts > .mailpoet_block {
2053
+ width: 100%;
2054
+ }
2055
+ .mailpoet_automated_latest_content_display_options {
2056
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2057
+ max-height: 2000px;
2058
+ opacity: 1;
2059
+ overflow-y: hidden;
2060
+ }
2061
+ .mailpoet_automated_latest_content_display_options.mailpoet_closed {
2062
+ max-height: 0px;
2063
+ opacity: 0;
2064
+ }
2065
+ .mailpoet_automated_latest_content_show_amount {
2066
+ width: 25px;
2067
+ }
2068
+ .mailpoet_automated_latest_content_content_type {
2069
+ width: 180px;
2070
+ }
2071
+ .mailpoet_posts_block {
2072
+ padding-left: 0;
2073
+ padding-right: 0;
2074
+ }
2075
+ .mailpoet_posts_block_posts {
2076
+ overflow: auto;
2077
+ }
2078
+ .mailpoet_posts_block_posts > .mailpoet_block {
2079
+ width: 100%;
2080
+ }
2081
+ .mailpoet_post_selection_filter_row {
2082
+ margin-top: 5px;
2083
+ margin-bottom: 5px;
2084
+ }
2085
+ .mailpoet_posts_categories_and_tags {
2086
+ width: 100%;
2087
+ }
2088
+ .mailpoet_settings_posts_display_options,
2089
+ .mailpoet_settings_posts_selection {
2090
+ transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1) /* ease-in-out */;
2091
+ max-height: 2000px;
2092
+ opacity: 1;
2093
+ overflow-y: hidden;
2094
+ }
2095
+ .mailpoet_settings_posts_display_options.mailpoet_closed,
2096
+ .mailpoet_settings_posts_selection.mailpoet_closed {
2097
+ max-height: 0px;
2098
+ opacity: 0;
2099
+ }
2100
+ .mailpoet_settings_posts_show_display_options,
2101
+ .mailpoet_settings_posts_show_post_selection {
2102
+ display: block;
2103
+ margin-top: 10px;
2104
+ }
2105
+ .mailpoet_post_selection_container {
2106
+ margin-top: 20px;
2107
+ margin-bottom: 20px;
2108
+ }
2109
+ .mailpoet_settings_posts_single_post {
2110
+ -webkit-border-radius: 1px;
2111
+ -moz-border-radius: 1px;
2112
+ border-radius: 1px;
2113
+ width: 100%;
2114
+ margin-top: 5px;
2115
+ margin-bottom: 5px;
2116
+ height: 38px;
2117
+ line-height: 38px;
2118
+ overflow: hidden;
2119
+ border: 1px solid #ddd;
2120
+ background-color: #fff;
2121
+ }
2122
+ .mailpoet_settings_posts_single_post:hover {
2123
+ border-color: #0074a2;
2124
+ }
2125
+ .mailpoet_settings_posts_single_post .mailpoet_select_post_checkbox {
2126
+ margin-left: 10px;
2127
+ margin-right: 8px;
2128
+ }
2129
+ .mailpoet_button_block {
2130
+ overflow: hidden;
2131
+ }
2132
+ .mailpoet_button_block .mailpoet_editor_button {
2133
+ display: block;
2134
+ margin: auto;
2135
+ line-height: 2em;
2136
+ text-align: center;
2137
+ text-decoration: none;
2138
+ box-sizing: border-box;
2139
+ max-width: 100%;
2140
+ }
2141
+ .mailpoet_button_block .mailpoet_editor_button:hover {
2142
+ cursor: all-scroll;
2143
+ }
2144
+ .mailpoet_divider_block {
2145
+ padding-left: 0;
2146
+ padding-right: 0;
2147
+ margin-bottom: 0;
2148
+ cursor: all-scroll;
2149
+ }
2150
+ .mailpoet_divider {
2151
+ margin-left: 20px;
2152
+ margin-right: 20px;
2153
+ }
2154
+ .mailpoet_field_divider_style {
2155
+ max-width: 660px;
2156
+ margin: auto;
2157
+ display: block;
2158
+ width: 100%;
2159
+ border: 1px solid transparent;
2160
+ }
2161
+ .mailpoet_active_divider_style {
2162
+ border: 1px solid #adadad;
2163
+ background: #daebf2;
2164
+ }
2165
+ .mailpoet_field_divider_style:hover {
2166
+ border: 1px solid #0074a2;
2167
+ }
2168
+ .mailpoet_divider_selector img {
2169
+ width: 100%;
2170
+ }
2171
+ .mailpoet_field_divider_style {
2172
+ padding: 10px 0;
2173
+ }
2174
+ .mailpoet_image_block img {
2175
+ vertical-align: bottom;
2176
+ max-width: 100%;
2177
+ width: auto;
2178
+ height: auto;
2179
+ }
2180
+ .mailpoet_image_block.mailpoet_full_image {
2181
+ padding-left: 0;
2182
+ padding-right: 0;
2183
+ margin-bottom: 0;
2184
+ }
2185
+ .mailpoet_image_block .mailpoet_content a:hover {
2186
+ cursor: all-scroll;
2187
+ }
2188
+ .mailpoet_social_block {
2189
+ padding-top: 0px;
2190
+ padding-bottom: 0px;
2191
+ }
2192
+ .mailpoet_social_block .mailpoet_social {
2193
+ text-align: center;
2194
+ }
2195
+ .mailpoet_social span {
2196
+ display: inline-block;
2197
+ padding: 2px 3px;
2198
+ }
2199
+ .mailpoet_social span,
2200
+ .mailpoet_social a,
2201
+ .mailpoet_social img {
2202
+ vertical-align: top;
2203
+ }
2204
+ .mailpoet_social a {
2205
+ cursor: all-scroll;
2206
+ }
2207
+ .mailpoet_social_icon_set {
2208
+ border: 1px solid transparent;
2209
+ padding: 5px;
2210
+ margin-bottom: 5px;
2211
+ }
2212
+ .mailpoet_social_icon_set:hover {
2213
+ border: 1px solid #0074a2;
2214
+ }
2215
+ .mailpoet_social_icon_set img {
2216
+ width: 32px;
2217
+ height: 32px;
2218
+ vertical-align: middle;
2219
+ padding: 2px 3px;
2220
+ }
2221
+ .mailpoet_active_icon_set {
2222
+ border: 1px dashed #adadad;
2223
+ background-color: #daebf2;
2224
+ }
2225
+ .mailpoet_social_icon_settings {
2226
+ position: relative;
2227
+ padding: 28px 9px 8px 9px;
2228
+ margin-bottom: 9px;
2229
+ background: #fff;
2230
+ border: 1px solid #ddd;
2231
+ }
2232
+ .mailpoet_social_icon_settings_row {
2233
+ clear: both;
2234
+ overflow: auto;
2235
+ margin-bottom: 10px;
2236
+ line-height: 30px;
2237
+ }
2238
+ .mailpoet_social_icon_settings_label {
2239
+ margin-right: 5px;
2240
+ text-align: left;
2241
+ }
2242
+ .mailpoet_social_icon_settings_label .mailpoet_social_icon_image {
2243
+ width: 30px;
2244
+ height: 30px;
2245
+ }
2246
+ .mailpoet_social_icon_settings_label.mailpoet_social_icon_image_label {
2247
+ line-height: initial;
2248
+ }
2249
+ .mailpoet_social_icon_settings_form_element {
2250
+ float: left;
2251
+ width: 100%;
2252
+ }
2253
+ .mailpoet_social_icon_settings_form_element input,
2254
+ .mailpoet_social_icon_settings_form_element select {
2255
+ width: 100%;
2256
+ height: 30px;
2257
+ box-sizing: border-box;
2258
+ margin: 0;
2259
+ vertical-align: middle;
2260
+ display: inline-block;
2261
+ }
2262
+ .mailpoet_social_icon_settings_tool {
2263
+ position: absolute;
2264
+ top: 10px;
2265
+ }
2266
+ .mailpoet_social_icon_settings_tool .mailpoet_tool_icon {
2267
+ fill: #333;
2268
+ width: 16px;
2269
+ height: 16px;
2270
+ }
2271
+ .mailpoet_social_icon_settings_tool .mailpoet_tool_icon:hover {
2272
+ fill: #bbb;
2273
+ }
2274
+ .mailpoet_social_icon_settings_tool .mailpoet_tool_icon:active {
2275
+ fill: #0074a2;
2276
+ }
2277
+ .mailpoet_social_icon_settings_tool .mailpoet_tool_icon:active {
2278
+ filter: progid:DXImageTransform.Microsoft.Dropshadow(OffX=1, OffY=2, Color='#d2d2d4');
2279
+ -webkit-filter: drop-shadow(1px 2px 0px #d2d2d4);
2280
+ -ms-filter: progid:DXImageTransform.Microsoft.Dropshadow(OffX=1, OffY=2, Color='#d2d2d4');
2281
+ filter: drop-shadow(1px 2px 0px #d2d2d4);
2282
+ }
2283
+ .mailpoet_social_icon_settings_move_icon {
2284
+ right: 5px;
2285
+ }
2286
+ .mailpoet_social_icon_settings_delete_icon {
2287
+ right: 26px;
2288
+ }
2289
+ .mailpoet_spacer {
2290
+ text-align: center;
2291
+ }
2292
+ .mailpoet_spacer_block {
2293
+ padding-left: 0;
2294
+ padding-right: 0;
2295
+ margin-bottom: 0;
2296
+ cursor: all-scroll;
2297
+ }
2298
+ .mailpoet_text_block {
2299
+ padding-left: 0;
2300
+ padding-right: 0;
2301
+ }
2302
+ .mailpoet_text_block > .mailpoet_content {
2303
+ overflow: hidden;
2304
+ padding-top: 0;
2305
+ padding-bottom: 0px;
2306
+ padding-left: 20px;
2307
+ padding-right: 20px;
2308
+ }
2309
+ .mailpoet_text_block > .mailpoet_content > *:last-child {
2310
+ margin-bottom: 0;
2311
+ }
2312
+ .mailpoet_header_block {
2313
+ padding-left: 0;
2314
+ padding-right: 0;
2315
+ margin-bottom: 0;
2316
+ }
2317
+ .mailpoet_header_block .mailpoet_content {
2318
+ padding: 10px 20px;
2319
+ }
2320
+ .mailpoet_header_block .mailpoet_content > *:last-child {
2321
+ margin-bottom: 0;
2322
+ }
2323
+ .mailpoet_footer_block {
2324
+ padding-left: 0;
2325
+ padding-right: 0;
2326
+ margin-bottom: 0;
2327
+ }
2328
+ .mailpoet_footer_block .mailpoet_content {
2329
+ padding: 10px 20px;
2330
+ }
2331
+ .mailpoet_footer_block .mailpoet_content > *:last-child {
2332
+ margin-bottom: 0;
2333
+ }
2334
+ .select2-dropdown {
2335
+ z-index: 101000 !important;
2336
+ }
2337
+ .select2-container {
2338
+ border: none;
2339
+ padding: 0;
2340
+ }
2341
+ .select2 input,
2342
+ .select2 input:focus {
2343
+ border-color: none;
2344
+ -webkit-box-shadow: none;
2345
+ -moz-box-shadow: none;
2346
+ box-shadow: none;
2347
+ margin: 0;
2348
+ padding: 0;
2349
+ }
2350
+ .mailpoet_editor_settings .select2-container {
2351
+ width: 100% !important;
2352
+ }
2353
+ div.mce-toolbar-grp.mce-container {
2354
+ position: absolute;
2355
+ }
2356
+ .mce-tinymce.mce-tinymce-inline {
2357
+ -webkit-border-radius: 3px;
2358
+ -moz-border-radius: 3px;
2359
+ border-radius: 3px;
2360
+ background-color: #f8f8f8;
2361
+ border: 1px solid #ddd;
2362
+ -webkit-box-shadow: 0px 0px 3px 1px rgba(0,0,0,0.05);
2363
+ -moz-box-shadow: 0px 0px 3px 1px rgba(0,0,0,0.05);
2364
+ box-shadow: 0px 0px 3px 1px rgba(0,0,0,0.05);
2365
+ }
2366
+ .mce-window div.mce-container-body.mce-abs-layout {
2367
+ overflow: hidden;
2368
+ }
2369
+ .mce-window .mce-window-head div.mce-dragh {
2370
+ width: -webkit-calc(100% - 36px);
2371
+ width: calc(100% - 36px);
2372
+ }
2373
+ .mce-i-mailpoet_shortcodes:before {
2374
+ font: 400 20px/1 dashicons !important;
2375
+ content: "\f307";
2376
+ }
2377
+ .mce-edit-focus {
2378
+ outline: none;
2379
+ }
2380
+ #wp-link li,
2381
+ #wp-link div.query-notice,
2382
+ clear: both,
2383
+ margin-bottom: 0,
2384
+ border-bottom: 1px solid #f1f1f1,
2385
+ color: #333,
2386
+ padding: 4px 6px,
2387
+ cursor: pointer,
2388
+ position: relative,
2389
+ #wpbody-content > * {
2390
+ margin-left: 20px;
2391
+ }
2392
+ #wpbody-content > .wrap {
2393
+ margin-left: 0;
2394
+ }
2395
+ #wpcontent {
2396
+ margin-left: 160px;
2397
+ padding-left: 0;
2398
+ }
2399
+ .folded #wpcontent {
2400
+ margin-left: 36px;
2401
+ }
2402
+ .wrap {
2403
+ margin-left: 0;
2404
+ margin-right: 0;
2405
+ }
2406
+ #wpadminbar {
2407
+ z-index: 50000;
2408
+ }
2409
+ body {
2410
+ overflow-x: auto;
2411
+ }
2412
+ .media-sidebar {
2413
+ display: none;
2414
+ }
2415
+ #mailpoet-media-manager .attachments-browser .attachments,
2416
+ #mailpoet-media-manager .attachments-browser .uploader-inline {
2417
+ margin-right: 0;
2418
+ }
2419
+ #mailpoet-media-manager .attachments-browser .attachments,
2420
+ #mailpoet-media-manager .attachments-browser .media-toolbar,
2421
+ #mailpoet-media-manager .attachments-browser .uploader-inline {
2422
+ right: 0;
2423
+ }
2424
+ #media-attachment-date-filters {
2425
+ max-width: calc(100% - 12px);
2426
+ }
2427
+ .sp-replacer {
2428
+ -webkit-border-radius: 3px;
2429
+ -moz-border-radius: 3px;
2430
+ border-radius: 3px;
2431
+ padding: 0;
2432
+ border: 0;
2433
+ -webkit-box-shadow: 1px 2px #d8d8d8;
2434
+ -moz-box-shadow: 1px 2px #d8d8d8;
2435
+ box-shadow: 1px 2px #d8d8d8;
2436
+ }
2437
+ .sp-preview {
2438
+ border-width: 0;
2439
+ margin-right: 0;
2440
+ width: 25px;
2441
+ height: 25px;
2442
+ }
2443
+ .sp-dd {
2444
+ display: none;
2445
+ }
2446
+ .mailpoet_panel_body {
2447
+ margin: 19px;
2448
+ padding: 0;
2449
+ }
2450
+ .mailpoet_panel_wrapper {
2451
+ background-color: #f8f8f8;
2452
+ border: 1px solid #ddd;
2453
+ }
2454
+ #mailpoet_modal_close {
2455
+ display: none;
2456
+ }
2457
+ .wrap > .mailpoet_notice,
2458
+ .update-nag {
2459
+ margin-left: 17px !important;
2460
+ }
2461
+ .mailpoet_button_group .button:first-child {
2462
+ border-right: 0;
2463
+ border-top-right-radius: 0;
2464
+ border-bottom-right-radius: 0;
2465
+ }
2466
+ .mailpoet_button_group .button:last-child {
2467
+ border-left: 0;
2468
+ border-top-left-radius: 0;
2469
+ border-bottom-left-radius: 0;
2470
+ }
assets/css/public.css ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ input.parsley-success,
2
+ select.parsley-success,
3
+ textarea.parsley-success {
4
+ color: #468847;
5
+ background-color: #dff0d8;
6
+ border: 1px solid #d6e9c6;
7
+ }
8
+ input.parsley-error,
9
+ select.parsley-error,
10
+ textarea.parsley-error {
11
+ color: #b94a48;
12
+ background-color: #f2dede;
13
+ border: 1px solid #eed3d7;
14
+ }
15
+ .parsley-errors-list {
16
+ margin: 2px 0 3px;
17
+ padding: 0;
18
+ list-style-type: none;
19
+ font-size: 0.9em;
20
+ line-height: 0.9em;
21
+ color: #b94a48;
22
+ opacity: 0;
23
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
24
+ filter: alpha(opacity=0);
25
+ -webkit-transition: all 0.3s ease-in;
26
+ -moz-transition: all 0.3s ease-in;
27
+ -o-transition: all 0.3s ease-in;
28
+ -ms-transition: all 0.3s ease-in;
29
+ transition: all 0.3s ease-in;
30
+ -o-transition: all 0.3s ease-in;
31
+ -moz-transition: all 0.3s ease-in;
32
+ -webkit-transition: all 0.3s ease-in;
33
+ }
34
+ .parsley-errors-list.filled {
35
+ opacity: 1;
36
+ -ms-filter: none;
37
+ filter: none;
38
+ }
39
+ .parsley-errors-list {
40
+ margin-top: 8px;
41
+ }
42
+ .parsley-required,
43
+ .parsley-custom-error-message {
44
+ color: #b94a48;
45
+ }
46
+ /* labels */
47
+ .mailpoet_text_label,
48
+ .mailpoet_textarea_label,
49
+ .mailpoet_select_label,
50
+ .mailpoet_radio_label,
51
+ .mailpoet_checkbox_label,
52
+ .mailpoet_list_label,
53
+ .mailpoet_date_label {
54
+ display: block;
55
+ }
assets/css/rtl.css ADDED
File without changes
assets/img/blank_templates/fake-logo.png ADDED
Binary file
assets/img/datepicker/animated-overlay.gif ADDED
Binary file
assets/img/datepicker/cal_logo.png ADDED
Binary file
assets/img/datepicker/ui-bg_diagonals-thick_18_b81900_40x40.png ADDED
Binary file
assets/img/datepicker/ui-bg_diagonals-thick_20_666666_40x40.png ADDED
Binary file
assets/img/datepicker/ui-bg_flat_10_000000_40x100.png ADDED
Binary file
assets/img/datepicker/ui-bg_glass_100_f6f6f6_1x400.png ADDED
Binary file
assets/img/datepicker/ui-bg_glass_100_fdf5ce_1x400.png ADDED
Binary file
assets/img/datepicker/ui-bg_glass_65_ffffff_1x400.png ADDED
Binary file
assets/img/datepicker/ui-bg_gloss-wave_35_f6a828_500x100.png ADDED
Binary file
assets/img/datepicker/ui-bg_highlight-soft_100_eeeeee_1x100.png ADDED
Binary file
assets/img/datepicker/ui-bg_highlight-soft_75_ffe45c_1x100.png ADDED
Binary file
assets/img/datepicker/ui-icons_222222_256x240.png ADDED
Binary file
assets/img/datepicker/ui-icons_228ef1_256x240.png ADDED
Binary file
assets/img/datepicker/ui-icons_454545_256x240.png ADDED
Binary file
assets/img/datepicker/ui-icons_ef8c08_256x240.png ADDED
Binary file
assets/img/datepicker/ui-icons_ffd27a_256x240.png ADDED
Binary file
assets/img/datepicker/ui-icons_ffffff_256x240.png ADDED
Binary file
assets/img/form_editor_icons.png ADDED
Binary file
assets/img/handle.png ADDED
Binary file
assets/img/mailpoet_logo.png ADDED
Binary file
assets/img/menu_icon.png ADDED
Binary file
assets/img/modal_close_button.png ADDED
Binary file
assets/img/newsletter_editor/200x83.jpg ADDED
Binary file
assets/img/newsletter_editor/300x125.jpg ADDED
Binary file
assets/img/newsletter_editor/600x250.jpg ADDED
Binary file
assets/img/newsletter_editor/block-icons/auto-post.svg ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="76.5 166.5 459 459" enable-background="new 76.5 166.5 459 459" xml:space="preserve">
3
+ <path d="M191.25,281.25V625.5h229.5L535.5,510.75v-229.5H191.25z M415.893,448.536l-11.647,11.647
4
+ c-7.038,7.152-11.054,15.721-12.049,25.704c-0.976,10.002,1.224,19.087,6.599,27.272l-28.439,28.285l-37.446-37.446l-43.51,43.356
5
+ c-5.584,5.584-16.142,13.617-31.613,24.078c-15.492,10.461-24.633,14.286-27.425,11.494c-2.792-2.792,1.033-11.991,11.494-27.578
6
+ s18.437-26.125,23.925-31.613l43.356-43.356l-37.447-37.601l28.438-28.285c8.071,5.393,17.136,7.593,27.196,6.598
7
+ c10.06-0.994,18.59-5.049,25.628-12.201l11.646-11.647c7.153-7.038,11.208-15.587,12.202-25.627
8
+ c0.976-10.041-1.224-19.164-6.598-27.349l28.285-28.286l98.819,98.666l-28.439,28.286c-8.07-5.394-17.136-7.593-27.195-6.598
9
+ C431.632,437.31,423.045,441.384,415.893,448.536z M420.75,596.813V510.75h86.063L420.75,596.813z"/>
10
+ <g opacity="0.3">
11
+ <g>
12
+ <path d="M133.875,223.875v344.25h38.25v-306h306v-38.25H133.875z M420.75,166.5H76.5v344.25h38.25v-306h306V166.5z"/>
13
+ </g>
14
+ </g>
15
+ </svg>
assets/img/newsletter_editor/block-icons/button.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="0 195.188 573.75 446.946" enable-background="new 0 195.188 573.75 446.946" xml:space="preserve">
3
+ <path d="M535.5,482.062h-20.655c-12.967,90.468-90.574,160.071-184.618,160.071c-94.068,0-171.65-69.604-184.646-160.071H38.25
4
+ c-21.133,0-38.25-17.117-38.25-38.25V233.438c0-21.133,17.117-38.25,38.25-38.25H535.5c21.114,0,38.25,17.117,38.25,38.25v210.375
5
+ C573.75,464.945,556.614,482.062,535.5,482.062z M463.889,382.016c0-11.045-9.259-20.009-20.703-20.009
6
+ c-11.419,0-19.677,8.964-19.677,20.009v43.34c0,3.682-4.095,6.67-7.884,6.67c-3.814,0-7.909-2.988-7.909-6.67v-50.01
7
+ c0-11.045-8.258-20.009-19.676-20.009s-18.677,8.964-18.677,20.009v50.01c0,3.682-5.097,6.67-8.909,6.67
8
+ c-3.815,0-9.671-2.988-9.671-6.67v-56.681c0-11.046-8.258-20.01-19.703-20.01c-11.418,0-18.702,8.964-18.702,20.01v56.681
9
+ c0,3.682-6.27,6.67-10.084,6.67c-3.815,0-11.458-2.988-11.458-6.67V288.64c0-11.046-8.258-20.01-19.677-20.01
10
+ s-17.715,8.964-17.715,20.01v173.413c0,3.685-11.419,6.67-15.233,6.67c-3.815,0-3.335-2.985-3.335-6.67v-85.532
11
+ c-2.16-0.747-15.794-2.269-18.222-2.269c-11.419,0-20.09,10.085-20.09,21.131v73.34c0,66.297,74.622,120.058,143.187,120.058
12
+ s124.138-53.761,124.138-120.058V382.016L463.889,382.016z"/>
13
+ </svg>
assets/img/newsletter_editor/block-icons/divider.svg ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="124.312 348.188 382.5 114.75" enable-background="new 124.312 348.188 382.5 114.75" xml:space="preserve">
3
+ <rect x="124.312" y="348.188" width="382.5" height="38.25"/>
4
+ <rect x="124.312" y="424.688" width="382.5" height="38.25"/>
5
+ </svg>
assets/img/newsletter_editor/block-icons/document.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="123.987 156.766 383.169 497.575" enable-background="new 123.987 156.766 383.169 497.575" xml:space="preserve">
3
+ <g>
4
+ <g>
5
+ <path d="M379.421,156.766H123.987v497.575h383.169V281.173L379.421,156.766z M449.438,577.688h-267.75v-38.25h267.75V577.688z
6
+ M449.438,482.063h-267.75v-38.25h267.75V482.063z M449.438,386.438h-267.75v-38.25h267.75V386.438z M373.454,289.531V186.677
7
+ l101.764,102.854H373.454z"/>
8
+ </g>
9
+ </g>
10
+ </svg>
assets/img/newsletter_editor/block-icons/footer.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="77.063 89.506 459 612" enable-background="new 77.063 89.506 459 612" xml:space="preserve">
3
+ <path opacity="0.3" enable-background="new " d="M516.938,89.506H96.188c-10.557,0-19.125,8.568-19.125,19.125v38.25
4
+ c0,10.557,8.568,19.125,19.125,19.125h420.75c10.558,0,19.125-8.568,19.125-19.125v-38.25
5
+ C536.063,98.074,527.494,89.506,516.938,89.506z"/>
6
+ <path opacity="0.3" enable-background="new " d="M516.938,205.131H96.188c-10.557,0-19.125,8.568-19.125,19.125v304.25
7
+ c0,10.557,8.568,19.125,19.125,19.125h420.75c10.558,0,19.125-8.568,19.125-19.125v-304.25
8
+ C536.063,213.699,527.494,205.131,516.938,205.131z"/>
9
+ <path d="M516.938,586.756H96.188c-10.557,0-19.125,8.567-19.125,19.125v76.5c0,10.557,8.568,19.125,19.125,19.125h420.75
10
+ c10.558,0,19.125-8.568,19.125-19.125v-76.5C536.063,595.323,527.494,586.756,516.938,586.756z"/>
11
+ </svg>
assets/img/newsletter_editor/block-icons/gallery.svg ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="19.125 166.5 573.75 459" enable-background="new 19.125 166.5 573.75 459" xml:space="preserve">
3
+ <g>
4
+ <g>
5
+ <path d="M19.125,376.875h267.75V166.5H19.125V376.875z M38.25,185.625h229.5V357.75H38.25V185.625z M57.375,338.625h191.25
6
+ l-191.25-114.75V338.625z M210.375,204.75c-10.461,0-19.45,3.768-26.966,11.284S172.125,232.539,172.125,243
7
+ s3.768,19.45,11.284,26.966s16.505,11.284,26.966,11.284s19.45-3.768,26.966-11.284s11.284-16.505,11.284-26.966
8
+ s-3.768-19.45-11.284-26.966S220.836,204.75,210.375,204.75z M516.375,281.25c10.461,0,19.45-3.768,26.966-11.284
9
+ c7.517-7.516,11.284-16.505,11.284-26.966s-3.768-19.45-11.284-26.966c-7.516-7.516-16.505-11.284-26.966-11.284
10
+ s-19.45,3.768-26.966,11.284c-7.517,7.516-11.284,16.505-11.284,26.966s3.768,19.45,11.284,26.966
11
+ C496.925,277.482,505.914,281.25,516.375,281.25z M325.125,166.5v210.375h267.75V166.5H325.125z M573.75,357.75h-229.5V185.625
12
+ h229.5V357.75z M363.375,223.875v114.75h191.25L363.375,223.875z M19.125,625.5h267.75V415.125H19.125V625.5z M38.25,434.25h229.5
13
+ v172.125H38.25V434.25z M210.375,453.375c-10.461,0-19.45,3.768-26.966,11.284c-7.516,7.516-11.284,16.505-11.284,26.966
14
+ s3.768,19.45,11.284,26.966c7.516,7.517,16.505,11.284,26.966,11.284s19.45-3.768,26.966-11.284
15
+ c7.516-7.516,11.284-16.505,11.284-26.966s-3.768-19.45-11.284-26.966C229.825,457.143,220.836,453.375,210.375,453.375z
16
+ M57.375,587.25h191.25L57.375,472.5V587.25z M516.375,453.375c-10.461,0-19.45,3.768-26.966,11.284
17
+ c-7.517,7.516-11.284,16.505-11.284,26.966s3.768,19.45,11.284,26.966c7.516,7.517,16.505,11.284,26.966,11.284
18
+ s19.45-3.768,26.966-11.284c7.517-7.516,11.284-16.505,11.284-26.966s-3.768-19.45-11.284-26.966
19
+ C535.825,457.143,526.836,453.375,516.375,453.375z M363.375,587.25h191.25L363.375,472.5V587.25z M325.125,625.5h267.75V415.125
20
+ h-267.75V625.5z M344.25,434.25h229.5v172.125h-229.5V434.25z"/>
21
+ </g>
22
+ </g>
23
+ </svg>
assets/img/newsletter_editor/block-icons/header.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="77.063 89.506 459 612" enable-background="new 77.063 89.506 459 612" xml:space="preserve">
3
+ <path d="M516.938,89.506H96.188c-10.557,0-19.125,8.568-19.125,19.125v38.25c0,10.557,8.568,19.125,19.125,19.125h420.75
4
+ c10.558,0,19.125-8.568,19.125-19.125v-38.25C536.063,98.074,527.494,89.506,516.938,89.506z"/>
5
+ <path opacity="0.3" enable-background="new " d="M516.938,205.131H96.188c-10.557,0-19.125,8.568-19.125,19.125v304.25
6
+ c0,10.557,8.568,19.125,19.125,19.125h420.75c10.558,0,19.125-8.568,19.125-19.125v-304.25
7
+ C536.063,213.699,527.494,205.131,516.938,205.131z"/>
8
+ <path opacity="0.3" enable-background="new " d="M516.938,586.756H96.188c-10.557,0-19.125,8.567-19.125,19.125v76.5
9
+ c0,10.557,8.568,19.125,19.125,19.125h420.75c10.558,0,19.125-8.568,19.125-19.125v-76.5
10
+ C536.063,595.323,527.494,586.756,516.938,586.756z"/>
11
+ </svg>
assets/img/newsletter_editor/block-icons/image.svg ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="38.25 185.625 535.5 420.75" enable-background="new 38.25 185.625 535.5 420.75" xml:space="preserve">
3
+ <path d="M459,606.375H38.25v-306v-38.25v-76.5h535.5v420.75h-76.5H459z M535.5,223.875h-459v344.25h459V223.875z M114.75,529.875
4
+ v-229.5l382.5,229.5H114.75z M420.75,415.125c-20.903,0-38.881-7.516-53.933-22.567c-15.052-15.051-22.567-33.01-22.567-53.933
5
+ c0-20.904,7.516-38.881,22.567-53.933s33.029-22.567,53.933-22.567s38.881,7.516,53.933,22.567s22.567,33.029,22.567,53.933
6
+ c0,20.923-7.516,38.881-22.567,53.933C459.631,407.609,441.653,415.125,420.75,415.125z"/>
7
+ </svg>
assets/img/newsletter_editor/block-icons/podcast.svg ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="114.425 147.203 383.169 497.575" enable-background="new 114.425 147.203 383.169 497.575" xml:space="preserve">
3
+ <path d="M114.425,147.203v497.575h383.169V271.611L369.878,147.222H114.425V147.203z M363.892,177.114l101.764,102.854H363.892
4
+ V177.114z M389.021,527.235c-8.3,8.09-18.513,12.126-30.657,12.126c-14.478,0-25.972-4.036-34.482-12.126
5
+ c-8.3-8.3-12.45-18.245-12.45-29.854c0-11.609,4.15-21.458,12.45-29.549c12.125-11.818,27.464-15.032,45.977-9.639v-71.527
6
+ l-95.797,18.666v103.236c0,11.398-6.809,23.008-20.426,34.827c-6.598,5.393-16.811,8.09-30.657,8.09
7
+ c-12.125,0-22.357-4.15-30.658-12.432c-8.51-8.3-12.775-18.13-12.775-29.548c0-11.188,4.246-21.152,12.775-29.854
8
+ c8.3-8.09,18.513-12.125,30.658-12.125c9.371,0,15.759,0.727,19.163,2.181V364.903c0-9.333,3.825-14.727,11.494-16.161
9
+ c5.948-1.454,51.198-9.543,135.711-24.25c3.614-0.421,6.483,0.612,8.626,3.117c2.563,2.486,3.824,5.489,3.824,9.027V497.42
10
+ C401.797,508.569,397.532,518.534,389.021,527.235L389.021,527.235z"/>
11
+ </svg>
assets/img/newsletter_editor/block-icons/post.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="133.875 223.875 344.25 344.25" enable-background="new 133.875 223.875 344.25 344.25" xml:space="preserve">
3
+ <path d="M133.875,223.875v344.25h229.5l114.75-114.75v-229.5H133.875z M358.518,391.161l-11.647,11.647
4
+ c-7.038,7.152-11.054,15.721-12.049,25.704c-0.976,10.002,1.224,19.087,6.599,27.272L312.98,484.07l-37.447-37.446l-43.509,43.356
5
+ c-5.584,5.584-16.142,13.617-31.613,24.078c-15.492,10.461-24.633,14.286-27.425,11.494c-2.792-2.792,1.033-11.991,11.494-27.578
6
+ s18.437-26.125,23.925-31.613l43.356-43.356l-37.447-37.6l28.439-28.286c8.07,5.393,17.136,7.592,27.195,6.598
7
+ c10.06-0.994,18.59-5.049,25.628-12.202l11.646-11.647c7.153-7.038,11.208-15.587,12.202-25.627
8
+ c0.976-10.041-1.224-19.164-6.598-27.349l28.285-28.286l98.819,98.666l-28.439,28.286c-8.07-5.393-17.136-7.592-27.195-6.598
9
+ C374.257,379.935,365.67,384.009,358.518,391.161z M363.375,539.438v-86.063h86.063L363.375,539.438z"/>
10
+ </svg>
assets/img/newsletter_editor/block-icons/spacer.svg ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="239.062 263.438 153 284.25" enable-background="new 239.062 263.438 153 284.25" xml:space="preserve">
3
+ <path d="M315.563,263.438l76.5,76.538h-153L315.563,263.438z M315.563,547.688l-76.5-76.537h153L315.563,547.688z"/>
4
+ </svg>
assets/img/newsletter_editor/block-icons/text.svg ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="143.342 252.486 325.183 286.798" enable-background="new 143.342 252.486 325.183 286.798" xml:space="preserve">
3
+ <path d="M337.154,398.353h-70.667l23.409-59.823c5.202-13.12,9.983-26.622,13.445-41.788h0.86
4
+ c2.161,15.166,6.503,29.089,11.265,41.788L337.154,398.353z M372.708,497.496h-24.71v41.788h120.526v-41.788h-24.289
5
+ l-100.139-245.01h-69.806l-106.66,245.01h-24.289v41.788h112.723v-41.788h-29.051l21.688-54.907H353.2L372.708,497.496z"/>
6
+ </svg>
assets/img/newsletter_editor/block-tools/move-horizontal.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="1.5 91.5 609 609" enable-background="new 1.5 91.5 609 609" xml:space="preserve">
3
+ <circle class="mailpoet_tool_icon_foreground" fill="#AA3333" cx="306" cy="396.5" r="269.5"/>
4
+ <path d="M306,91.5C137.829,91.5,1.5,227.829,1.5,396S137.829,700.5,306,700.5S610.5,564.171,610.5,396S474.171,91.5,306,91.5z
5
+ M134.688,453.103c-31.521,0-57.104-25.579-57.104-57.103c0-31.522,25.583-57.104,57.104-57.104s57.104,25.583,57.104,57.104
6
+ C191.792,427.521,166.21,453.103,134.688,453.103z M306,453.103c-31.521,0-57.104-25.579-57.104-57.103
7
+ c0-31.522,25.583-57.104,57.104-57.104c31.521,0,57.103,25.583,57.103,57.104C363.103,427.521,337.521,453.103,306,453.103z
8
+ M477.311,453.103c-31.521,0-57.104-25.579-57.104-57.103c0-31.522,25.582-57.104,57.104-57.104
9
+ c31.522,0,57.104,25.583,57.104,57.104C534.415,427.521,508.832,453.103,477.311,453.103z"/>
10
+ </svg>
assets/img/newsletter_editor/block-tools/move-without-bg.svg ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 4 16" enable-background="new 0 0 4 16" xml:space="preserve">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2,0c1.104,0,2,0.896,2,2S3.104,4,2,4S0,3.104,0,2S0.896,0,2,0z"/>
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2,6c1.104,0,2,0.896,2,2s-0.896,2-2,2S0,9.104,0,8S0.896,6,2,6z"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2,12c1.104,0,2,0.896,2,2s-0.896,2-2,2s-2-0.896-2-2S0.896,12,2,12z"/>
5
+ </svg>
assets/img/newsletter_editor/block-tools/move.svg ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="1.5 91.5 609 609" enable-background="new 1.5 91.5 609 609" xml:space="preserve">
3
+ <circle class="mailpoet_tool_icon_foreground" fill="#AA3333" cx="306.5" cy="396" r="269.5"/>
4
+ <path d="M1.5,396c0,168.171,136.329,304.5,304.5,304.5S610.5,564.171,610.5,396S474.171,91.5,306,91.5S1.5,227.829,1.5,396z
5
+ M363.103,567.313c0,31.521-25.579,57.104-57.103,57.104c-31.522,0-57.104-25.583-57.104-57.104
6
+ c0-31.521,25.583-57.104,57.104-57.104C337.521,510.208,363.103,535.79,363.103,567.313z M363.103,396
7
+ c0,31.521-25.579,57.104-57.103,57.104c-31.522,0-57.104-25.583-57.104-57.104s25.583-57.103,57.104-57.103
8
+ C337.521,338.897,363.103,364.479,363.103,396z M363.103,224.689c0,31.521-25.579,57.104-57.103,57.104
9
+ c-31.522,0-57.104-25.582-57.104-57.104c0-31.522,25.583-57.104,57.104-57.104C337.521,167.585,363.103,193.168,363.103,224.689z"/>
10
+ </svg>
assets/img/newsletter_editor/block-tools/settings-column.svg ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ width="612px" height="612px" viewBox="-3.14 90 612 612" enable-background="new -3.14 90 612 612" xml:space="preserve">
3
+ <circle class="mailpoet_tool_icon_foreground" fill="#AA3333" cx="302.86" cy="396.5" r="269.5"/>
4
+ <g id="Layer_1_1_">
5
+ <g>
6
+ <path d="M302.86,327.403c-37.957,0-68.598,30.641-68.598,68.598s30.641,68.598,68.598,68.598
7
+ c37.958,0,68.598-30.641,68.598-68.598S340.817,327.403,302.86,327.403z"/>
8
+ <path d="M302.86,90c-168.999,0-306,137-306,306c0,168.999,137.001,306,306,306c169,0,306-137.003,306-306
9
+ C608.86,227.002,471.859,90,302.86,90z M497.219,430.298h-49.848c-3.888,16.006-10.062,30.87-18.521,44.132l35.214,35.213
10
+ l-48.018,48.019l-35.214-35.214c-13.261,8.229-28.125,14.404-43.672,18.062v49.851h-68.598v-49.851
11
+ c-15.549-3.657-30.411-9.833-43.672-18.062l-35.213,35.214l-48.478-48.477l35.213-35.213
12
+ c-8.232-13.263-14.405-28.126-18.064-43.674H108.5v-67.91h49.619c3.659-16.006,10.061-30.869,18.293-44.36l-35.213-35.213
13
+ l48.017-48.018l35.213,35.214c13.262-8.46,28.354-14.635,44.131-18.522v-49.848h68.598v49.848
14
+ c15.546,3.659,30.411,9.834,43.671,18.064l35.214-35.213l48.475,48.475l-35.213,35.213c8.231,13.491,14.636,28.354,18.293,44.36
15
+ h49.619L497.219,430.298L497.219,430.298z"/>
16
+ </g>
17
+ </g>
18
+ </svg>
assets/img/newsletter_editor/block-tools/settings-without-bg.svg ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16.018 16.014" enable-background="new 0 0 16.018 16.014" xml:space="preserve">
2
+ <path d="M16.018,9.185c0,0.157-0.126,0.344-0.292,0.375l-1.93,0.292c-0.114,0.334-0.24,0.647-0.406,0.95
3
+ c0.354,0.51,0.729,0.969,1.116,1.438c0.063,0.073,0.104,0.167,0.104,0.26s-0.031,0.167-0.094,0.24
4
+ c-0.25,0.333-1.658,1.866-2.012,1.866c-0.094,0-0.188-0.042-0.271-0.094l-1.439-1.125c-0.303,0.156-0.625,0.292-0.95,0.396
5
+ c-0.073,0.636-0.135,1.314-0.301,1.939c-0.042,0.167-0.188,0.292-0.376,0.292H6.851c-0.188,0-0.354-0.135-0.375-0.313l-0.292-1.918
6
+ c-0.323-0.104-0.636-0.229-0.938-0.385l-1.471,1.115c-0.073,0.063-0.166,0.094-0.261,0.094c-0.093,0-0.188-0.042-0.261-0.115
7
+ c-0.552-0.5-1.282-1.146-1.72-1.751C1.48,12.667,1.46,12.584,1.46,12.5c0-0.094,0.031-0.167,0.083-0.24
8
+ c0.355-0.479,0.74-0.938,1.095-1.428C2.461,10.499,2.315,10.154,2.21,9.8L0.302,9.519C0.125,9.487,0,9.321,0,9.143V6.829
9
+ c0-0.157,0.125-0.345,0.281-0.376l1.939-0.292c0.104-0.333,0.24-0.647,0.407-0.959c-0.354-0.501-0.729-0.97-1.116-1.439
10
+ C1.449,3.69,1.408,3.607,1.408,3.513c0-0.093,0.042-0.167,0.094-0.239C1.752,2.93,3.16,1.407,3.514,1.407
11
+ c0.095,0,0.188,0.042,0.271,0.104l1.439,1.115C5.527,2.471,5.85,2.335,6.173,2.231c0.073-0.636,0.135-1.314,0.302-1.939
12
+ C6.517,0.125,6.663,0,6.851,0h2.315c0.188,0,0.354,0.135,0.376,0.313l0.292,1.918c0.323,0.104,0.636,0.229,0.938,0.385l1.481-1.115
13
+ c0.063-0.063,0.156-0.094,0.25-0.094s0.188,0.042,0.261,0.104c0.553,0.51,1.283,1.157,1.721,1.772
14
+ c0.052,0.063,0.073,0.146,0.073,0.229c0,0.094-0.031,0.167-0.083,0.24c-0.355,0.479-0.741,0.938-1.096,1.428
15
+ c0.177,0.333,0.323,0.678,0.428,1.022l1.908,0.292c0.177,0.031,0.303,0.198,0.303,0.375V9.185z M8.008,5.338
16
+ c-1.47,0-2.669,1.199-2.669,2.669s1.2,2.669,2.669,2.669c1.47,0,2.67-1.199,2.67-2.669S9.479,5.338,8.008,5.338z"/>
17
+ </svg>
assets/img/newsletter_editor/block-tools/settings.svg ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ width="612px" height="612px" viewBox="-3.14 90 612 612" enable-background="new -3.14 90 612 612" xml:space="preserve">
3
+ <circle class="mailpoet_tool_icon_foreground" fill="#AA3333" cx="302.86" cy="396.5" r="269.5"/>
4
+ <g id="Layer_1_1_">
5
+ <g>
6
+ <path d="M302.86,327.403c-37.957,0-68.598,30.641-68.598,68.598s30.641,68.598,68.598,68.598
7
+ c37.958,0,68.598-30.641,68.598-68.598S340.817,327.403,302.86,327.403z"/>
8
+ <path d="M302.86,90c-168.999,0-306,137-306,306c0,168.999,137.001,306,306,306c169,0,306-137.003,306-306
9
+ C608.86,227.002,471.859,90,302.86,90z M497.219,430.298h-49.848c-3.888,16.006-10.062,30.87-18.521,44.132l35.214,35.213
10
+ l-48.018,48.019l-35.214-35.214c-13.261,8.229-28.125,14.404-43.672,18.062v49.851h-68.598v-49.851
11
+ c-15.549-3.657-30.411-9.833-43.672-18.062l-35.213,35.214l-48.478-48.477l35.213-35.213
12
+ c-8.232-13.263-14.405-28.126-18.064-43.674H108.5v-67.91h49.619c3.659-16.006,10.061-30.869,18.293-44.36l-35.213-35.213
13
+ l48.017-48.018l35.213,35.214c13.262-8.46,28.354-14.635,44.131-18.522v-49.848h68.598v49.848
14
+ c15.546,3.659,30.411,9.834,43.671,18.064l35.214-35.213l48.475,48.475l-35.213,35.213c8.231,13.491,14.636,28.354,18.293,44.36
15
+ h49.619L497.219,430.298L497.219,430.298z"/>
16
+ </g>
17
+ </g>
18
+ </svg>
assets/img/newsletter_editor/block-tools/trash-without-bg.svg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 15 16" enable-background="new 0 0 15 16" xml:space="preserve">
2
+ <path d="M14.991,3.666c0,0.187-0.149,0.332-0.34,0.332h-1.022v9.853c0,1.143-0.767,2.121-1.704,2.121H3.066
3
+ c-0.937,0-1.704-0.936-1.704-2.079V3.998H0.341C0.149,3.998,0,3.853,0,3.666V3c0-0.187,0.149-0.333,0.341-0.333h3.29l0.745-1.735
4
+ c0.214-0.509,0.853-0.925,1.417-0.925h3.407c0.564,0,1.203,0.416,1.416,0.925l0.745,1.735h3.29c0.191,0,0.34,0.146,0.34,0.333V3.666
5
+ z M5.452,5.661c0-0.187-0.149-0.333-0.341-0.333H4.429c-0.191,0-0.34,0.146-0.34,0.333v7.316c0,0.188,0.149,0.333,0.34,0.333h0.682
6
+ c0.191,0,0.341-0.146,0.341-0.333V5.661z M9.88,2.667L9.369,1.452C9.337,1.41,9.242,1.348,9.188,1.337H5.813
7
+ C5.75,1.348,5.664,1.41,5.632,1.452L5.111,2.667H9.88z M8.177,5.661c0-0.187-0.149-0.333-0.341-0.333H7.155
8
+ c-0.191,0-0.341,0.146-0.341,0.333v7.316c0,0.188,0.149,0.333,0.341,0.333h0.682c0.191,0,0.341-0.146,0.341-0.333V5.661z
9
+ M10.903,5.661c0-0.187-0.149-0.333-0.341-0.333H9.88c-0.191,0-0.34,0.146-0.34,0.333v7.316c0,0.188,0.149,0.333,0.34,0.333h0.682
10
+ c0.191,0,0.341-0.146,0.341-0.333V5.661z"/>
11
+ <rect id="_x3C_Slice_x3E_" fill="none" width="15" height="16"/>
12
+ </svg>
assets/img/newsletter_editor/block-tools/trash.svg ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg class="mailpoet_tool_icon" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ width="611.631px" height="611.632px" viewBox="0 93.684 611.631 611.632" enable-background="new 0 93.684 611.631 611.632"
3
+ xml:space="preserve">
4
+ <circle class="mailpoet_tool_icon_foreground" fill="#AA3333" cx="306" cy="403.5" r="269.5"/>
5
+ <rect id="_x3C_Slice_x3E_" y="69.6" fill="none" width="612" height="652.8"/>
6
+ <g>
7
+ <path d="M314.959,324.106h-18.286c-5.128,0-9.156,3.92-9.156,8.942v196.446c0,5.049,4,8.939,9.156,8.939h18.313
8
+ c5.128,0,9.154-3.92,9.154-8.939V333.048h-0.025C324.115,328.026,320.114,324.106,314.959,324.106z"/>
9
+ <path d="M241.789,324.106h-18.313c-5.128,0-9.129,3.92-9.129,8.942v196.446c0,5.049,4.001,8.939,9.129,8.939h18.313
10
+ c5.129,0,9.156-3.92,9.156-8.939V333.048C250.945,328.026,246.944,324.106,241.789,324.106z"/>
11
+ <path d="M305.816,93.684C136.918,93.684,0,230.602,0,399.5c0,168.896,136.918,305.816,305.816,305.816
12
+ c168.896,0,305.815-136.919,305.815-305.816C611.633,230.602,474.714,93.684,305.816,93.684z M507.082,279.479
13
+ c0,5.021-4,8.915-9.129,8.915h-27.442v264.569c0,30.691-20.595,56.951-45.755,56.951H186.877c-25.16,0-45.755-25.133-45.755-55.824
14
+ V288.394h-27.416c-5.155,0-9.156-3.894-9.156-8.915v-17.883c0-5.021,4.001-8.942,9.156-8.942h88.342l20.004-46.587
15
+ c5.746-13.667,22.904-24.837,38.049-24.837h91.483c15.145,0,32.302,11.17,38.021,24.837l20.005,46.587h88.342
16
+ c5.129,0,9.129,3.92,9.129,8.942L507.082,279.479L507.082,279.479z"/>
17
+ <path d="M356.123,220.029c-0.859-1.128-3.41-2.792-4.861-3.088h-90.624c-1.691,0.295-4,1.96-4.86,3.088l-13.99,32.625h128.055
18
+ L356.123,220.029z"/>
19
+ <path d="M388.156,324.106h-18.313c-5.129,0-9.129,3.92-9.129,8.942v196.446c0,5.049,4,8.939,9.129,8.939h18.313
20
+ c5.129,0,9.157-3.92,9.157-8.939V333.048C397.313,328.026,393.313,324.106,388.156,324.106z"/>
21
+ </g>
22
+ </svg>
assets/img/newsletter_editor/image-missing.png ADDED
Binary file
assets/img/newsletter_editor/image-missing.svg ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="96.191px" height="83.052px" viewBox="178.5 368.448 96.191 83.052" enable-background="new 178.5 368.448 96.191 83.052"
6
+ xml:space="preserve">
7
+ <g id="Layer_2">
8
+ </g>
9
+ <g id="Layer_1">
10
+ <polygon fill="none" points="206.548,426.416 206.548,405.566 202.318,403.02 202.318,430.646 248.198,430.646 241.175,426.416
11
+ "/>
12
+ <path fill="none" d="M202.318,392.581v0.82l50.753,30.561v-31.381H202.318z M240.383,413.728c-2.312,0-4.299-0.831-5.963-2.495
13
+ c-1.665-1.664-2.496-3.649-2.496-5.964c0-2.312,0.831-4.299,2.496-5.963c1.664-1.663,3.651-2.495,5.963-2.495
14
+ s4.299,0.83,5.963,2.495c1.665,1.664,2.496,3.651,2.496,5.963c0,2.314-0.831,4.3-2.496,5.964
15
+ C244.682,412.896,242.694,413.728,240.383,413.728z"/>
16
+ <polygon fill="#AAAAAA" points="202.318,392.581 253.071,392.581 253.071,423.962 257.301,426.508 257.301,388.352
17
+ 198.089,388.352 198.089,390.854 202.318,393.401 "/>
18
+ <polygon fill="#AAAAAA" points="241.175,426.416 206.548,405.566 206.548,426.416 "/>
19
+ <path fill="#AAAAAA" d="M246.346,399.306c-1.664-1.665-3.651-2.495-5.963-2.495s-4.299,0.832-5.963,2.495
20
+ c-1.665,1.664-2.496,3.651-2.496,5.963c0,2.314,0.831,4.3,2.496,5.964c1.664,1.664,3.651,2.495,5.963,2.495
21
+ s4.299-0.831,5.963-2.495c1.665-1.664,2.496-3.649,2.496-5.964C248.842,402.957,248.011,400.97,246.346,399.306z"/>
22
+ <polygon fill="#AAAAAA" points="202.318,430.646 202.318,403.02 198.089,400.473 198.089,401.04 198.089,434.875 244.612,434.875
23
+ 248.842,434.875 255.223,434.875 248.198,430.646 "/>
24
+ <path fill="#AAAAAA" d="M266.745,434.095c-0.552,0.917-1.743,1.214-2.66,0.661l-77.229-46.503c-0.917-0.553-1.213-1.744-0.66-2.661
25
+ l1.844-3.104c0.553-0.917,1.744-1.213,2.661-0.661l77.229,46.504c0.917,0.553,1.212,1.743,0.66,2.661L266.745,434.095z"/>
26
+ </g>
27
+ </svg>
assets/img/newsletter_editor/layout-icons/1-column.svg ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="86.063 85.506 459 612" enable-background="new 86.063 85.506 459 612" xml:space="preserve">
3
+ <path d="M525.938,85.506h-420.75c-10.557,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.568,19.125,19.125,19.125h420.75
4
+ c10.558,0,19.125-8.568,19.125-19.125v-573.75C545.063,94.074,536.494,85.506,525.938,85.506z"/>
5
+ </svg>
assets/img/newsletter_editor/layout-icons/2-column.svg ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="86.063 85.506 440.854 612" enable-background="new 86.063 85.506 440.854 612" xml:space="preserve">
3
+ <path d="M264.938,85.506h-159.75c-10.557,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.568,19.125,19.125,19.125h159.75
4
+ c10.557,0,19.125-8.568,19.125-19.125v-573.75C284.062,94.074,275.494,85.506,264.938,85.506z"/>
5
+ <path d="M507.792,85.506h-160.75c-10.558,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.567,19.125,19.125,19.125h160.75
6
+ c10.557,0,19.125-8.568,19.125-19.125v-573.75C526.917,94.074,518.349,85.506,507.792,85.506z"/>
7
+ </svg>
assets/img/newsletter_editor/layout-icons/3-column.svg ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ viewBox="86.063 85.506 439.937 612" enable-background="new 86.063 85.506 439.937 612" xml:space="preserve">
3
+ <path d="M192.938,85.506h-87.75c-10.557,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.568,19.125,19.125,19.125h87.75
4
+ c10.557,0,19.125-8.568,19.125-19.125v-573.75C212.062,94.074,203.494,85.506,192.938,85.506z"/>
5
+ <path d="M349.875,85.506h-87.75c-10.557,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.568,19.125,19.125,19.125h87.75
6
+ c10.557,0,19.125-8.568,19.125-19.125v-573.75C369,94.074,360.432,85.506,349.875,85.506z"/>
7
+ <path d="M506.875,85.506h-87.75c-10.557,0-19.125,8.568-19.125,19.125v573.75c0,10.557,8.568,19.125,19.125,19.125h87.75
8
+ c10.557,0,19.125-8.568,19.125-19.125v-573.75C526,94.074,517.432,85.506,506.875,85.506z"/>
9
+ </svg>
assets/img/newsletter_editor/social-icons/01-social/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/01-social/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/02-grey/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/03-circles/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/04-full-flat-roundrect/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/05-full-gradient-square/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/06-full-symbol-color/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/07-full-symbol-black/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/08-full-symbol-grey/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/09-line-roundrect/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Email.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Facebook.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Google-Plus.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Instagram.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/LinkedIn.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Pinterest.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Twitter.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Website.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/10-line-square/Youtube.png ADDED
Binary file
assets/img/newsletter_editor/social-icons/custom.png ADDED
Binary file
assets/img/post_notifications_template/ALC-widget-icon.png ADDED
Binary file
assets/img/post_notifications_template/settings-icon-highlight.png ADDED
Binary file
assets/img/preview_magnifying_glass.svg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="47.002px" height="38.003px" viewBox="0 0 47.002 38.003" enable-background="new 0 0 47.002 38.003" xml:space="preserve">
6
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#565656" d="M46.328,36.365c-1.188,1.725-3.553,2.158-5.273,0.962L25.479,26.52
7
+ c-1.104-0.763-1.674-2.007-1.631-3.257c-2.006,2.157-4.642,3.606-7.594,4.145c-3.626,0.663-7.288-0.13-10.311-2.227
8
+ c-3.024-2.098-5.054-5.253-5.714-8.887c-0.661-3.636,0.127-7.31,2.221-10.344c4.325-6.264,12.927-7.834,19.177-3.5
9
+ c5.672,3.938,7.486,11.412,4.537,17.443c1.152-0.486,2.519-0.392,3.627,0.377l15.58,10.808C47.09,32.274,47.52,34.641,46.328,36.365
10
+ z M23.235,12.09c-0.459-2.534-1.874-4.734-3.982-6.196C14.897,2.87,8.896,3.963,5.878,8.331c-3.014,4.373-1.922,10.388,2.435,13.408
11
+ c4.356,3.025,10.356,1.932,13.374-2.438C23.146,17.187,23.696,14.625,23.235,12.09z"/>
12
+ </svg>
assets/img/sample_templates/coffee/coffee-grain.jpg ADDED
Binary file
assets/img/sample_templates/coffee/header-v2.jpg ADDED
Binary file
assets/img/sample_templates/coffee/map-v2.jpg ADDED
Binary file
assets/img/sample_templates/coffee/sandwich.jpg ADDED
Binary file
assets/img/sample_templates/discount/bicycle-header2.png ADDED
Binary file
assets/img/sample_templates/discount/bicycle-header3.png ADDED
Binary file
assets/img/sample_templates/discount/orange-bicycle.jpg ADDED
Binary file
assets/img/sample_templates/discount/red-icycle.jpg ADDED
Binary file
assets/img/sample_templates/restaurant/boyga-1329911-639x852.jpg ADDED
Binary file
assets/img/sample_templates/restaurant/burger.jpg ADDED
Binary file
assets/img/sample_templates/restaurant/header.jpg ADDED
Binary file
assets/img/sample_templates/restaurant/macaroni-w-salad-1323787.jpg ADDED
Binary file
assets/img/sample_templates/travel/gallery1.jpg ADDED
Binary file
assets/img/sample_templates/travel/gallery2.jpg ADDED
Binary file
assets/img/sample_templates/travel/gallery3.jpg ADDED
Binary file
assets/img/sample_templates/travel/gallery4.jpg ADDED
Binary file
assets/img/sample_templates/travel/glow-worms.jpg ADDED
Binary file
assets/img/sample_templates/travel/header.png ADDED
Binary file
assets/img/sample_templates/travel/holiday-park.jpg ADDED
Binary file
assets/img/sample_templates/travel/luge.jpg ADDED
Binary file
assets/img/welcome_template/beacon.png ADDED
Binary file
assets/img/welcome_template/mailpoet-logo.png ADDED
Binary file
assets/js/admin.js ADDED
@@ -0,0 +1,62362 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ webpackJsonp([0],[
2
+ /* 0 */
3
+ /***/ function(module, exports, __webpack_require__) {
4
+
5
+ __webpack_require__(1);
6
+ __webpack_require__(394);
7
+ __webpack_require__(414);
8
+ __webpack_require__(417);
9
+ __webpack_require__(419);
10
+ __webpack_require__(422);
11
+ __webpack_require__(426);
12
+ module.exports = __webpack_require__(427);
13
+
14
+
15
+ /***/ },
16
+ /* 1 */
17
+ /***/ function(module, exports, __webpack_require__) {
18
+
19
+ 'use strict';
20
+
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
22
+
23
+ var _react = __webpack_require__(2);
24
+
25
+ var _react2 = _interopRequireDefault(_react);
26
+
27
+ var _reactDom = __webpack_require__(35);
28
+
29
+ var _reactDom2 = _interopRequireDefault(_reactDom);
30
+
31
+ var _reactRouter = __webpack_require__(173);
32
+
33
+ var _history = __webpack_require__(229);
34
+
35
+ var _subscribersListJsx = __webpack_require__(258);
36
+
37
+ var _subscribersListJsx2 = _interopRequireDefault(_subscribersListJsx);
38
+
39
+ var _subscribersFormJsx = __webpack_require__(273);
40
+
41
+ var _subscribersFormJsx2 = _interopRequireDefault(_subscribersFormJsx);
42
+
43
+ var history = (0, _reactRouter.useRouterHistory)(_history.createHashHistory)({ queryKey: false });
44
+
45
+ var App = _react2['default'].createClass({
46
+ displayName: 'App',
47
+
48
+ render: function render() {
49
+ return this.props.children;
50
+ }
51
+ });
52
+
53
+ var container = document.getElementById('subscribers_container');
54
+
55
+ if (container) {
56
+ _reactDom2['default'].render(_react2['default'].createElement(
57
+ _reactRouter.Router,
58
+ { history: history },
59
+ _react2['default'].createElement(
60
+ _reactRouter.Route,
61
+ { path: '/', component: App },
62
+ _react2['default'].createElement(_reactRouter.IndexRoute, { component: _subscribersListJsx2['default'] }),
63
+ _react2['default'].createElement(_reactRouter.Route, { path: 'new', component: _subscribersFormJsx2['default'] }),
64
+ _react2['default'].createElement(_reactRouter.Route, { path: 'edit/:id', component: _subscribersFormJsx2['default'] }),
65
+ _react2['default'].createElement(_reactRouter.Route, { path: '*', component: _subscribersListJsx2['default'] })
66
+ )
67
+ ), container);
68
+ }
69
+
70
+ /***/ },
71
+ /* 2 */
72
+ /***/ function(module, exports, __webpack_require__) {
73
+
74
+ 'use strict';
75
+
76
+ module.exports = __webpack_require__(3);
77
+
78
+
79
+ /***/ },
80
+ /* 3 */
81
+ /***/ function(module, exports, __webpack_require__) {
82
+
83
+ /* WEBPACK VAR INJECTION */(function(process) {/**
84
+ * Copyright 2013-present, Facebook, Inc.
85
+ * All rights reserved.
86
+ *
87
+ * This source code is licensed under the BSD-style license found in the
88
+ * LICENSE file in the root directory of this source tree. An additional grant
89
+ * of patent rights can be found in the PATENTS file in the same directory.
90
+ *
91
+ * @providesModule React
92
+ */
93
+
94
+ 'use strict';
95
+
96
+ var _assign = __webpack_require__(5);
97
+
98
+ var ReactChildren = __webpack_require__(6);
99
+ var ReactComponent = __webpack_require__(18);
100
+ var ReactPureComponent = __webpack_require__(21);
101
+ var ReactClass = __webpack_require__(22);
102
+ var ReactDOMFactories = __webpack_require__(27);
103
+ var ReactElement = __webpack_require__(10);
104
+ var ReactPropTypes = __webpack_require__(32);
105
+ var ReactVersion = __webpack_require__(33);
106
+
107
+ var onlyChild = __webpack_require__(34);
108
+ var warning = __webpack_require__(12);
109
+
110
+ var createElement = ReactElement.createElement;
111
+ var createFactory = ReactElement.createFactory;
112
+ var cloneElement = ReactElement.cloneElement;
113
+
114
+ if (process.env.NODE_ENV !== 'production') {
115
+ var ReactElementValidator = __webpack_require__(28);
116
+ createElement = ReactElementValidator.createElement;
117
+ createFactory = ReactElementValidator.createFactory;
118
+ cloneElement = ReactElementValidator.cloneElement;
119
+ }
120
+
121
+ var __spread = _assign;
122
+
123
+ if (process.env.NODE_ENV !== 'production') {
124
+ var warned = false;
125
+ __spread = function () {
126
+ process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;
127
+ warned = true;
128
+ return _assign.apply(null, arguments);
129
+ };
130
+ }
131
+
132
+ var React = {
133
+
134
+ // Modern
135
+
136
+ Children: {
137
+ map: ReactChildren.map,
138
+ forEach: ReactChildren.forEach,
139
+ count: ReactChildren.count,
140
+ toArray: ReactChildren.toArray,
141
+ only: onlyChild
142
+ },
143
+
144
+ Component: ReactComponent,
145
+ PureComponent: ReactPureComponent,
146
+
147
+ createElement: createElement,
148
+ cloneElement: cloneElement,
149
+ isValidElement: ReactElement.isValidElement,
150
+
151
+ // Classic
152
+
153
+ PropTypes: ReactPropTypes,
154
+ createClass: ReactClass.createClass,
155
+ createFactory: createFactory,
156
+ createMixin: function (mixin) {
157
+ // Currently a noop. Will be used to validate and trace mixins.
158
+ return mixin;
159
+ },
160
+
161
+ // This looks DOM specific but these are actually isomorphic helpers
162
+ // since they are just generating DOM strings.
163
+ DOM: ReactDOMFactories,
164
+
165
+ version: ReactVersion,
166
+
167
+ // Deprecated hook for JSX spread, don't use this for anything.
168
+ __spread: __spread
169
+ };
170
+
171
+ module.exports = React;
172
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
173
+
174
+ /***/ },
175
+ /* 4 */
176
+ /***/ function(module, exports) {
177
+
178
+ // shim for using process in browser
179
+ var process = module.exports = {};
180
+
181
+ // cached from whatever global is present so that test runners that stub it
182
+ // don't break things. But we need to wrap it in a try catch in case it is
183
+ // wrapped in strict mode code which doesn't define any globals. It's inside a
184
+ // function because try/catches deoptimize in certain engines.
185
+
186
+ var cachedSetTimeout;
187
+ var cachedClearTimeout;
188
+
189
+ function defaultSetTimout() {
190
+ throw new Error('setTimeout has not been defined');
191
+ }
192
+ function defaultClearTimeout () {
193
+ throw new Error('clearTimeout has not been defined');
194
+ }
195
+ (function () {
196
+ try {
197
+ if (typeof setTimeout === 'function') {
198
+ cachedSetTimeout = setTimeout;
199
+ } else {
200
+ cachedSetTimeout = defaultSetTimout;
201
+ }
202
+ } catch (e) {
203
+ cachedSetTimeout = defaultSetTimout;
204
+ }
205
+ try {
206
+ if (typeof clearTimeout === 'function') {
207
+ cachedClearTimeout = clearTimeout;
208
+ } else {
209
+ cachedClearTimeout = defaultClearTimeout;
210
+ }
211
+ } catch (e) {
212
+ cachedClearTimeout = defaultClearTimeout;
213
+ }
214
+ } ())
215
+ function runTimeout(fun) {
216
+ if (cachedSetTimeout === setTimeout) {
217
+ //normal enviroments in sane situations
218
+ return setTimeout(fun, 0);
219
+ }
220
+ // if setTimeout wasn't available but was latter defined
221
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
222
+ cachedSetTimeout = setTimeout;
223
+ return setTimeout(fun, 0);
224
+ }
225
+ try {
226
+ // when when somebody has screwed with setTimeout but no I.E. maddness
227
+ return cachedSetTimeout(fun, 0);
228
+ } catch(e){
229
+ try {
230
+ // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
231
+ return cachedSetTimeout.call(null, fun, 0);
232
+ } catch(e){
233
+ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
234
+ return cachedSetTimeout.call(this, fun, 0);
235
+ }
236
+ }
237
+
238
+
239
+ }
240
+ function runClearTimeout(marker) {
241
+ if (cachedClearTimeout === clearTimeout) {
242
+ //normal enviroments in sane situations
243
+ return clearTimeout(marker);
244
+ }
245
+ // if clearTimeout wasn't available but was latter defined
246
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
247
+ cachedClearTimeout = clearTimeout;
248
+ return clearTimeout(marker);
249
+ }
250
+ try {
251
+ // when when somebody has screwed with setTimeout but no I.E. maddness
252
+ return cachedClearTimeout(marker);
253
+ } catch (e){
254
+ try {
255
+ // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
256
+ return cachedClearTimeout.call(null, marker);
257
+ } catch (e){
258
+ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
259
+ // Some versions of I.E. have different rules for clearTimeout vs setTimeout
260
+ return cachedClearTimeout.call(this, marker);
261
+ }
262
+ }
263
+
264
+
265
+
266
+ }
267
+ var queue = [];
268
+ var draining = false;
269
+ var currentQueue;
270
+ var queueIndex = -1;
271
+
272
+ function cleanUpNextTick() {
273
+ if (!draining || !currentQueue) {
274
+ return;
275
+ }
276
+ draining = false;
277
+ if (currentQueue.length) {
278
+ queue = currentQueue.concat(queue);
279
+ } else {
280
+ queueIndex = -1;
281
+ }
282
+ if (queue.length) {
283
+ drainQueue();
284
+ }
285
+ }
286
+
287
+ function drainQueue() {
288
+ if (draining) {
289
+ return;
290
+ }
291
+ var timeout = runTimeout(cleanUpNextTick);
292
+ draining = true;
293
+
294
+ var len = queue.length;
295
+ while(len) {
296
+ currentQueue = queue;
297
+ queue = [];
298
+ while (++queueIndex < len) {
299
+ if (currentQueue) {
300
+ currentQueue[queueIndex].run();
301
+ }
302
+ }
303
+ queueIndex = -1;
304
+ len = queue.length;
305
+ }
306
+ currentQueue = null;
307
+ draining = false;
308
+ runClearTimeout(timeout);
309
+ }
310
+
311
+ process.nextTick = function (fun) {
312
+ var args = new Array(arguments.length - 1);
313
+ if (arguments.length > 1) {
314
+ for (var i = 1; i < arguments.length; i++) {
315
+ args[i - 1] = arguments[i];
316
+ }
317
+ }
318
+ queue.push(new Item(fun, args));
319
+ if (queue.length === 1 && !draining) {
320
+ runTimeout(drainQueue);
321
+ }
322
+ };
323
+
324
+ // v8 likes predictible objects
325
+ function Item(fun, array) {
326
+ this.fun = fun;
327
+ this.array = array;
328
+ }
329
+ Item.prototype.run = function () {
330
+ this.fun.apply(null, this.array);
331
+ };
332
+ process.title = 'browser';
333
+ process.browser = true;
334
+ process.env = {};
335
+ process.argv = [];
336
+ process.version = ''; // empty string to avoid regexp issues
337
+ process.versions = {};
338
+
339
+ function noop() {}
340
+
341
+ process.on = noop;
342
+ process.addListener = noop;
343
+ process.once = noop;
344
+ process.off = noop;
345
+ process.removeListener = noop;
346
+ process.removeAllListeners = noop;
347
+ process.emit = noop;
348
+
349
+ process.binding = function (name) {
350
+ throw new Error('process.binding is not supported');
351
+ };
352
+
353
+ process.cwd = function () { return '/' };
354
+ process.chdir = function (dir) {
355
+ throw new Error('process.chdir is not supported');
356
+ };
357
+ process.umask = function() { return 0; };
358
+
359
+
360
+ /***/ },
361
+ /* 5 */
362
+ /***/ function(module, exports) {
363
+
364
+ 'use strict';
365
+ /* eslint-disable no-unused-vars */
366
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
367
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
368
+
369
+ function toObject(val) {
370
+ if (val === null || val === undefined) {
371
+ throw new TypeError('Object.assign cannot be called with null or undefined');
372
+ }
373
+
374
+ return Object(val);
375
+ }
376
+
377
+ function shouldUseNative() {
378
+ try {
379
+ if (!Object.assign) {
380
+ return false;
381
+ }
382
+
383
+ // Detect buggy property enumeration order in older V8 versions.
384
+
385
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
386
+ var test1 = new String('abc'); // eslint-disable-line
387
+ test1[5] = 'de';
388
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
389
+ return false;
390
+ }
391
+
392
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
393
+ var test2 = {};
394
+ for (var i = 0; i < 10; i++) {
395
+ test2['_' + String.fromCharCode(i)] = i;
396
+ }
397
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
398
+ return test2[n];
399
+ });
400
+ if (order2.join('') !== '0123456789') {
401
+ return false;
402
+ }
403
+
404
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
405
+ var test3 = {};
406
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
407
+ test3[letter] = letter;
408
+ });
409
+ if (Object.keys(Object.assign({}, test3)).join('') !==
410
+ 'abcdefghijklmnopqrst') {
411
+ return false;
412
+ }
413
+
414
+ return true;
415
+ } catch (e) {
416
+ // We don't expect any of the above to throw, but better to be safe.
417
+ return false;
418
+ }
419
+ }
420
+
421
+ module.exports = shouldUseNative() ? Object.assign : function (target, source) {
422
+ var from;
423
+ var to = toObject(target);
424
+ var symbols;
425
+
426
+ for (var s = 1; s < arguments.length; s++) {
427
+ from = Object(arguments[s]);
428
+
429
+ for (var key in from) {
430
+ if (hasOwnProperty.call(from, key)) {
431
+ to[key] = from[key];
432
+ }
433
+ }
434
+
435
+ if (Object.getOwnPropertySymbols) {
436
+ symbols = Object.getOwnPropertySymbols(from);
437
+ for (var i = 0; i < symbols.length; i++) {
438
+ if (propIsEnumerable.call(from, symbols[i])) {
439
+ to[symbols[i]] = from[symbols[i]];
440
+ }
441
+ }
442
+ }
443
+ }
444
+
445
+ return to;
446
+ };
447
+
448
+
449
+ /***/ },
450
+ /* 6 */
451
+ /***/ function(module, exports, __webpack_require__) {
452
+
453
+ /**
454
+ * Copyright 2013-present, Facebook, Inc.
455
+ * All rights reserved.
456
+ *
457
+ * This source code is licensed under the BSD-style license found in the
458
+ * LICENSE file in the root directory of this source tree. An additional grant
459
+ * of patent rights can be found in the PATENTS file in the same directory.
460
+ *
461
+ * @providesModule ReactChildren
462
+ */
463
+
464
+ 'use strict';
465
+
466
+ var PooledClass = __webpack_require__(7);
467
+ var ReactElement = __webpack_require__(10);
468
+
469
+ var emptyFunction = __webpack_require__(13);
470
+ var traverseAllChildren = __webpack_require__(15);
471
+
472
+ var twoArgumentPooler = PooledClass.twoArgumentPooler;
473
+ var fourArgumentPooler = PooledClass.fourArgumentPooler;
474
+
475
+ var userProvidedKeyEscapeRegex = /\/+/g;
476
+ function escapeUserProvidedKey(text) {
477
+ return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
478
+ }
479
+
480
+ /**
481
+ * PooledClass representing the bookkeeping associated with performing a child
482
+ * traversal. Allows avoiding binding callbacks.
483
+ *
484
+ * @constructor ForEachBookKeeping
485
+ * @param {!function} forEachFunction Function to perform traversal with.
486
+ * @param {?*} forEachContext Context to perform context with.
487
+ */
488
+ function ForEachBookKeeping(forEachFunction, forEachContext) {
489
+ this.func = forEachFunction;
490
+ this.context = forEachContext;
491
+ this.count = 0;
492
+ }
493
+ ForEachBookKeeping.prototype.destructor = function () {
494
+ this.func = null;
495
+ this.context = null;
496
+ this.count = 0;
497
+ };
498
+ PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);
499
+
500
+ function forEachSingleChild(bookKeeping, child, name) {
501
+ var func = bookKeeping.func;
502
+ var context = bookKeeping.context;
503
+
504
+ func.call(context, child, bookKeeping.count++);
505
+ }
506
+
507
+ /**
508
+ * Iterates through children that are typically specified as `props.children`.
509
+ *
510
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach
511
+ *
512
+ * The provided forEachFunc(child, index) will be called for each
513
+ * leaf child.
514
+ *
515
+ * @param {?*} children Children tree container.
516
+ * @param {function(*, int)} forEachFunc
517
+ * @param {*} forEachContext Context for forEachContext.
518
+ */
519
+ function forEachChildren(children, forEachFunc, forEachContext) {
520
+ if (children == null) {
521
+ return children;
522
+ }
523
+ var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
524
+ traverseAllChildren(children, forEachSingleChild, traverseContext);
525
+ ForEachBookKeeping.release(traverseContext);
526
+ }
527
+
528
+ /**
529
+ * PooledClass representing the bookkeeping associated with performing a child
530
+ * mapping. Allows avoiding binding callbacks.
531
+ *
532
+ * @constructor MapBookKeeping
533
+ * @param {!*} mapResult Object containing the ordered map of results.
534
+ * @param {!function} mapFunction Function to perform mapping with.
535
+ * @param {?*} mapContext Context to perform mapping with.
536
+ */
537
+ function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
538
+ this.result = mapResult;
539
+ this.keyPrefix = keyPrefix;
540
+ this.func = mapFunction;
541
+ this.context = mapContext;
542
+ this.count = 0;
543
+ }
544
+ MapBookKeeping.prototype.destructor = function () {
545
+ this.result = null;
546
+ this.keyPrefix = null;
547
+ this.func = null;
548
+ this.context = null;
549
+ this.count = 0;
550
+ };
551
+ PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);
552
+
553
+ function mapSingleChildIntoContext(bookKeeping, child, childKey) {
554
+ var result = bookKeeping.result;
555
+ var keyPrefix = bookKeeping.keyPrefix;
556
+ var func = bookKeeping.func;
557
+ var context = bookKeeping.context;
558
+
559
+
560
+ var mappedChild = func.call(context, child, bookKeeping.count++);
561
+ if (Array.isArray(mappedChild)) {
562
+ mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
563
+ } else if (mappedChild != null) {
564
+ if (ReactElement.isValidElement(mappedChild)) {
565
+ mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,
566
+ // Keep both the (mapped) and old keys if they differ, just as
567
+ // traverseAllChildren used to do for objects as children
568
+ keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
569
+ }
570
+ result.push(mappedChild);
571
+ }
572
+ }
573
+
574
+ function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
575
+ var escapedPrefix = '';
576
+ if (prefix != null) {
577
+ escapedPrefix = escapeUserProvidedKey(prefix) + '/';
578
+ }
579
+ var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);
580
+ traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
581
+ MapBookKeeping.release(traverseContext);
582
+ }
583
+
584
+ /**
585
+ * Maps children that are typically specified as `props.children`.
586
+ *
587
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map
588
+ *
589
+ * The provided mapFunction(child, key, index) will be called for each
590
+ * leaf child.
591
+ *
592
+ * @param {?*} children Children tree container.
593
+ * @param {function(*, int)} func The map function.
594
+ * @param {*} context Context for mapFunction.
595
+ * @return {object} Object containing the ordered map of results.
596
+ */
597
+ function mapChildren(children, func, context) {
598
+ if (children == null) {
599
+ return children;
600
+ }
601
+ var result = [];
602
+ mapIntoWithKeyPrefixInternal(children, result, null, func, context);
603
+ return result;
604
+ }
605
+
606
+ function forEachSingleChildDummy(traverseContext, child, name) {
607
+ return null;
608
+ }
609
+
610
+ /**
611
+ * Count the number of children that are typically specified as
612
+ * `props.children`.
613
+ *
614
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count
615
+ *
616
+ * @param {?*} children Children tree container.
617
+ * @return {number} The number of children.
618
+ */
619
+ function countChildren(children, context) {
620
+ return traverseAllChildren(children, forEachSingleChildDummy, null);
621
+ }
622
+
623
+ /**
624
+ * Flatten a children object (typically specified as `props.children`) and
625
+ * return an array with appropriately re-keyed children.
626
+ *
627
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray
628
+ */
629
+ function toArray(children) {
630
+ var result = [];
631
+ mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
632
+ return result;
633
+ }
634
+
635
+ var ReactChildren = {
636
+ forEach: forEachChildren,
637
+ map: mapChildren,
638
+ mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,
639
+ count: countChildren,
640
+ toArray: toArray
641
+ };
642
+
643
+ module.exports = ReactChildren;
644
+
645
+ /***/ },
646
+ /* 7 */
647
+ /***/ function(module, exports, __webpack_require__) {
648
+
649
+ /* WEBPACK VAR INJECTION */(function(process) {/**
650
+ * Copyright 2013-present, Facebook, Inc.
651
+ * All rights reserved.
652
+ *
653
+ * This source code is licensed under the BSD-style license found in the
654
+ * LICENSE file in the root directory of this source tree. An additional grant
655
+ * of patent rights can be found in the PATENTS file in the same directory.
656
+ *
657
+ * @providesModule PooledClass
658
+ */
659
+
660
+ 'use strict';
661
+
662
+ var _prodInvariant = __webpack_require__(8);
663
+
664
+ var invariant = __webpack_require__(9);
665
+
666
+ /**
667
+ * Static poolers. Several custom versions for each potential number of
668
+ * arguments. A completely generic pooler is easy to implement, but would
669
+ * require accessing the `arguments` object. In each of these, `this` refers to
670
+ * the Class itself, not an instance. If any others are needed, simply add them
671
+ * here, or in their own files.
672
+ */
673
+ var oneArgumentPooler = function (copyFieldsFrom) {
674
+ var Klass = this;
675
+ if (Klass.instancePool.length) {
676
+ var instance = Klass.instancePool.pop();
677
+ Klass.call(instance, copyFieldsFrom);
678
+ return instance;
679
+ } else {
680
+ return new Klass(copyFieldsFrom);
681
+ }
682
+ };
683
+
684
+ var twoArgumentPooler = function (a1, a2) {
685
+ var Klass = this;
686
+ if (Klass.instancePool.length) {
687
+ var instance = Klass.instancePool.pop();
688
+ Klass.call(instance, a1, a2);
689
+ return instance;
690
+ } else {
691
+ return new Klass(a1, a2);
692
+ }
693
+ };
694
+
695
+ var threeArgumentPooler = function (a1, a2, a3) {
696
+ var Klass = this;
697
+ if (Klass.instancePool.length) {
698
+ var instance = Klass.instancePool.pop();
699
+ Klass.call(instance, a1, a2, a3);
700
+ return instance;
701
+ } else {
702
+ return new Klass(a1, a2, a3);
703
+ }
704
+ };
705
+
706
+ var fourArgumentPooler = function (a1, a2, a3, a4) {
707
+ var Klass = this;
708
+ if (Klass.instancePool.length) {
709
+ var instance = Klass.instancePool.pop();
710
+ Klass.call(instance, a1, a2, a3, a4);
711
+ return instance;
712
+ } else {
713
+ return new Klass(a1, a2, a3, a4);
714
+ }
715
+ };
716
+
717
+ var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
718
+ var Klass = this;
719
+ if (Klass.instancePool.length) {
720
+ var instance = Klass.instancePool.pop();
721
+ Klass.call(instance, a1, a2, a3, a4, a5);
722
+ return instance;
723
+ } else {
724
+ return new Klass(a1, a2, a3, a4, a5);
725
+ }
726
+ };
727
+
728
+ var standardReleaser = function (instance) {
729
+ var Klass = this;
730
+ !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
731
+ instance.destructor();
732
+ if (Klass.instancePool.length < Klass.poolSize) {
733
+ Klass.instancePool.push(instance);
734
+ }
735
+ };
736
+
737
+ var DEFAULT_POOL_SIZE = 10;
738
+ var DEFAULT_POOLER = oneArgumentPooler;
739
+
740
+ /**
741
+ * Augments `CopyConstructor` to be a poolable class, augmenting only the class
742
+ * itself (statically) not adding any prototypical fields. Any CopyConstructor
743
+ * you give this may have a `poolSize` property, and will look for a
744
+ * prototypical `destructor` on instances.
745
+ *
746
+ * @param {Function} CopyConstructor Constructor that can be used to reset.
747
+ * @param {Function} pooler Customizable pooler.
748
+ */
749
+ var addPoolingTo = function (CopyConstructor, pooler) {
750
+ var NewKlass = CopyConstructor;
751
+ NewKlass.instancePool = [];
752
+ NewKlass.getPooled = pooler || DEFAULT_POOLER;
753
+ if (!NewKlass.poolSize) {
754
+ NewKlass.poolSize = DEFAULT_POOL_SIZE;
755
+ }
756
+ NewKlass.release = standardReleaser;
757
+ return NewKlass;
758
+ };
759
+
760
+ var PooledClass = {
761
+ addPoolingTo: addPoolingTo,
762
+ oneArgumentPooler: oneArgumentPooler,
763
+ twoArgumentPooler: twoArgumentPooler,
764
+ threeArgumentPooler: threeArgumentPooler,
765
+ fourArgumentPooler: fourArgumentPooler,
766
+ fiveArgumentPooler: fiveArgumentPooler
767
+ };
768
+
769
+ module.exports = PooledClass;
770
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
771
+
772
+ /***/ },
773
+ /* 8 */
774
+ /***/ function(module, exports) {
775
+
776
+ /**
777
+ * Copyright (c) 2013-present, Facebook, Inc.
778
+ * All rights reserved.
779
+ *
780
+ * This source code is licensed under the BSD-style license found in the
781
+ * LICENSE file in the root directory of this source tree. An additional grant
782
+ * of patent rights can be found in the PATENTS file in the same directory.
783
+ *
784
+ * @providesModule reactProdInvariant
785
+ *
786
+ */
787
+ 'use strict';
788
+
789
+ /**
790
+ * WARNING: DO NOT manually require this module.
791
+ * This is a replacement for `invariant(...)` used by the error code system
792
+ * and will _only_ be required by the corresponding babel pass.
793
+ * It always throws.
794
+ */
795
+
796
+ function reactProdInvariant(code) {
797
+ var argCount = arguments.length - 1;
798
+
799
+ var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;
800
+
801
+ for (var argIdx = 0; argIdx < argCount; argIdx++) {
802
+ message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);
803
+ }
804
+
805
+ message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';
806
+
807
+ var error = new Error(message);
808
+ error.name = 'Invariant Violation';
809
+ error.framesToPop = 1; // we don't care about reactProdInvariant's own frame
810
+
811
+ throw error;
812
+ }
813
+
814
+ module.exports = reactProdInvariant;
815
+
816
+ /***/ },
817
+ /* 9 */
818
+ /***/ function(module, exports, __webpack_require__) {
819
+
820
+ /* WEBPACK VAR INJECTION */(function(process) {/**
821
+ * Copyright (c) 2013-present, Facebook, Inc.
822
+ * All rights reserved.
823
+ *
824
+ * This source code is licensed under the BSD-style license found in the
825
+ * LICENSE file in the root directory of this source tree. An additional grant
826
+ * of patent rights can be found in the PATENTS file in the same directory.
827
+ *
828
+ */
829
+
830
+ 'use strict';
831
+
832
+ /**
833
+ * Use invariant() to assert state which your program assumes to be true.
834
+ *
835
+ * Provide sprintf-style format (only %s is supported) and arguments
836
+ * to provide information about what broke and what you were
837
+ * expecting.
838
+ *
839
+ * The invariant message will be stripped in production, but the invariant
840
+ * will remain to ensure logic does not differ in production.
841
+ */
842
+
843
+ function invariant(condition, format, a, b, c, d, e, f) {
844
+ if (process.env.NODE_ENV !== 'production') {
845
+ if (format === undefined) {
846
+ throw new Error('invariant requires an error message argument');
847
+ }
848
+ }
849
+
850
+ if (!condition) {
851
+ var error;
852
+ if (format === undefined) {
853
+ error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
854
+ } else {
855
+ var args = [a, b, c, d, e, f];
856
+ var argIndex = 0;
857
+ error = new Error(format.replace(/%s/g, function () {
858
+ return args[argIndex++];
859
+ }));
860
+ error.name = 'Invariant Violation';
861
+ }
862
+
863
+ error.framesToPop = 1; // we don't care about invariant's own frame
864
+ throw error;
865
+ }
866
+ }
867
+
868
+ module.exports = invariant;
869
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
870
+
871
+ /***/ },
872
+ /* 10 */
873
+ /***/ function(module, exports, __webpack_require__) {
874
+
875
+ /* WEBPACK VAR INJECTION */(function(process) {/**
876
+ * Copyright 2014-present, Facebook, Inc.
877
+ * All rights reserved.
878
+ *
879
+ * This source code is licensed under the BSD-style license found in the
880
+ * LICENSE file in the root directory of this source tree. An additional grant
881
+ * of patent rights can be found in the PATENTS file in the same directory.
882
+ *
883
+ * @providesModule ReactElement
884
+ */
885
+
886
+ 'use strict';
887
+
888
+ var _assign = __webpack_require__(5);
889
+
890
+ var ReactCurrentOwner = __webpack_require__(11);
891
+
892
+ var warning = __webpack_require__(12);
893
+ var canDefineProperty = __webpack_require__(14);
894
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
895
+
896
+ // The Symbol used to tag the ReactElement type. If there is no native Symbol
897
+ // nor polyfill, then a plain number is used for performance.
898
+ var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;
899
+
900
+ var RESERVED_PROPS = {
901
+ key: true,
902
+ ref: true,
903
+ __self: true,
904
+ __source: true
905
+ };
906
+
907
+ var specialPropKeyWarningShown, specialPropRefWarningShown;
908
+
909
+ function hasValidRef(config) {
910
+ if (process.env.NODE_ENV !== 'production') {
911
+ if (hasOwnProperty.call(config, 'ref')) {
912
+ var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
913
+ if (getter && getter.isReactWarning) {
914
+ return false;
915
+ }
916
+ }
917
+ }
918
+ return config.ref !== undefined;
919
+ }
920
+
921
+ function hasValidKey(config) {
922
+ if (process.env.NODE_ENV !== 'production') {
923
+ if (hasOwnProperty.call(config, 'key')) {
924
+ var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
925
+ if (getter && getter.isReactWarning) {
926
+ return false;
927
+ }
928
+ }
929
+ }
930
+ return config.key !== undefined;
931
+ }
932
+
933
+ function defineKeyPropWarningGetter(props, displayName) {
934
+ var warnAboutAccessingKey = function () {
935
+ if (!specialPropKeyWarningShown) {
936
+ specialPropKeyWarningShown = true;
937
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
938
+ }
939
+ };
940
+ warnAboutAccessingKey.isReactWarning = true;
941
+ Object.defineProperty(props, 'key', {
942
+ get: warnAboutAccessingKey,
943
+ configurable: true
944
+ });
945
+ }
946
+
947
+ function defineRefPropWarningGetter(props, displayName) {
948
+ var warnAboutAccessingRef = function () {
949
+ if (!specialPropRefWarningShown) {
950
+ specialPropRefWarningShown = true;
951
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
952
+ }
953
+ };
954
+ warnAboutAccessingRef.isReactWarning = true;
955
+ Object.defineProperty(props, 'ref', {
956
+ get: warnAboutAccessingRef,
957
+ configurable: true
958
+ });
959
+ }
960
+
961
+ /**
962
+ * Factory method to create a new React element. This no longer adheres to
963
+ * the class pattern, so do not use new to call it. Also, no instanceof check
964
+ * will work. Instead test $$typeof field against Symbol.for('react.element') to check
965
+ * if something is a React Element.
966
+ *
967
+ * @param {*} type
968
+ * @param {*} key
969
+ * @param {string|object} ref
970
+ * @param {*} self A *temporary* helper to detect places where `this` is
971
+ * different from the `owner` when React.createElement is called, so that we
972
+ * can warn. We want to get rid of owner and replace string `ref`s with arrow
973
+ * functions, and as long as `this` and owner are the same, there will be no
974
+ * change in behavior.
975
+ * @param {*} source An annotation object (added by a transpiler or otherwise)
976
+ * indicating filename, line number, and/or other information.
977
+ * @param {*} owner
978
+ * @param {*} props
979
+ * @internal
980
+ */
981
+ var ReactElement = function (type, key, ref, self, source, owner, props) {
982
+ var element = {
983
+ // This tag allow us to uniquely identify this as a React Element
984
+ $$typeof: REACT_ELEMENT_TYPE,
985
+
986
+ // Built-in properties that belong on the element
987
+ type: type,
988
+ key: key,
989
+ ref: ref,
990
+ props: props,
991
+
992
+ // Record the component responsible for creating this element.
993
+ _owner: owner
994
+ };
995
+
996
+ if (process.env.NODE_ENV !== 'production') {
997
+ // The validation flag is currently mutative. We put it on
998
+ // an external backing store so that we can freeze the whole object.
999
+ // This can be replaced with a WeakMap once they are implemented in
1000
+ // commonly used development environments.
1001
+ element._store = {};
1002
+ var shadowChildren = Array.isArray(props.children) ? props.children.slice(0) : props.children;
1003
+
1004
+ // To make comparing ReactElements easier for testing purposes, we make
1005
+ // the validation flag non-enumerable (where possible, which should
1006
+ // include every environment we run tests in), so the test framework
1007
+ // ignores it.
1008
+ if (canDefineProperty) {
1009
+ Object.defineProperty(element._store, 'validated', {
1010
+ configurable: false,
1011
+ enumerable: false,
1012
+ writable: true,
1013
+ value: false
1014
+ });
1015
+ // self and source are DEV only properties.
1016
+ Object.defineProperty(element, '_self', {
1017
+ configurable: false,
1018
+ enumerable: false,
1019
+ writable: false,
1020
+ value: self
1021
+ });
1022
+ Object.defineProperty(element, '_shadowChildren', {
1023
+ configurable: false,
1024
+ enumerable: false,
1025
+ writable: false,
1026
+ value: shadowChildren
1027
+ });
1028
+ // Two elements created in two different places should be considered
1029
+ // equal for testing purposes and therefore we hide it from enumeration.
1030
+ Object.defineProperty(element, '_source', {
1031
+ configurable: false,
1032
+ enumerable: false,
1033
+ writable: false,
1034
+ value: source
1035
+ });
1036
+ } else {
1037
+ element._store.validated = false;
1038
+ element._self = self;
1039
+ element._shadowChildren = shadowChildren;
1040
+ element._source = source;
1041
+ }
1042
+ if (Object.freeze) {
1043
+ Object.freeze(element.props);
1044
+ Object.freeze(element);
1045
+ }
1046
+ }
1047
+
1048
+ return element;
1049
+ };
1050
+
1051
+ /**
1052
+ * Create and return a new ReactElement of the given type.
1053
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement
1054
+ */
1055
+ ReactElement.createElement = function (type, config, children) {
1056
+ var propName;
1057
+
1058
+ // Reserved names are extracted
1059
+ var props = {};
1060
+
1061
+ var key = null;
1062
+ var ref = null;
1063
+ var self = null;
1064
+ var source = null;
1065
+
1066
+ if (config != null) {
1067
+ if (hasValidRef(config)) {
1068
+ ref = config.ref;
1069
+ }
1070
+ if (hasValidKey(config)) {
1071
+ key = '' + config.key;
1072
+ }
1073
+
1074
+ self = config.__self === undefined ? null : config.__self;
1075
+ source = config.__source === undefined ? null : config.__source;
1076
+ // Remaining properties are added to a new props object
1077
+ for (propName in config) {
1078
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
1079
+ props[propName] = config[propName];
1080
+ }
1081
+ }
1082
+ }
1083
+
1084
+ // Children can be more than one argument, and those are transferred onto
1085
+ // the newly allocated props object.
1086
+ var childrenLength = arguments.length - 2;
1087
+ if (childrenLength === 1) {
1088
+ props.children = children;
1089
+ } else if (childrenLength > 1) {
1090
+ var childArray = Array(childrenLength);
1091
+ for (var i = 0; i < childrenLength; i++) {
1092
+ childArray[i] = arguments[i + 2];
1093
+ }
1094
+ props.children = childArray;
1095
+ }
1096
+
1097
+ // Resolve default props
1098
+ if (type && type.defaultProps) {
1099
+ var defaultProps = type.defaultProps;
1100
+ for (propName in defaultProps) {
1101
+ if (props[propName] === undefined) {
1102
+ props[propName] = defaultProps[propName];
1103
+ }
1104
+ }
1105
+ }
1106
+ if (process.env.NODE_ENV !== 'production') {
1107
+ if (key || ref) {
1108
+ if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
1109
+ var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
1110
+ if (key) {
1111
+ defineKeyPropWarningGetter(props, displayName);
1112
+ }
1113
+ if (ref) {
1114
+ defineRefPropWarningGetter(props, displayName);
1115
+ }
1116
+ }
1117
+ }
1118
+ }
1119
+ return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
1120
+ };
1121
+
1122
+ /**
1123
+ * Return a function that produces ReactElements of a given type.
1124
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory
1125
+ */
1126
+ ReactElement.createFactory = function (type) {
1127
+ var factory = ReactElement.createElement.bind(null, type);
1128
+ // Expose the type on the factory and the prototype so that it can be
1129
+ // easily accessed on elements. E.g. `<Foo />.type === Foo`.
1130
+ // This should not be named `constructor` since this may not be the function
1131
+ // that created the element, and it may not even be a constructor.
1132
+ // Legacy hook TODO: Warn if this is accessed
1133
+ factory.type = type;
1134
+ return factory;
1135
+ };
1136
+
1137
+ ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
1138
+ var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
1139
+
1140
+ return newElement;
1141
+ };
1142
+
1143
+ /**
1144
+ * Clone and return a new ReactElement using element as the starting point.
1145
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement
1146
+ */
1147
+ ReactElement.cloneElement = function (element, config, children) {
1148
+ var propName;
1149
+
1150
+ // Original props are copied
1151
+ var props = _assign({}, element.props);
1152
+
1153
+ // Reserved names are extracted
1154
+ var key = element.key;
1155
+ var ref = element.ref;
1156
+ // Self is preserved since the owner is preserved.
1157
+ var self = element._self;
1158
+ // Source is preserved since cloneElement is unlikely to be targeted by a
1159
+ // transpiler, and the original source is probably a better indicator of the
1160
+ // true owner.
1161
+ var source = element._source;
1162
+
1163
+ // Owner will be preserved, unless ref is overridden
1164
+ var owner = element._owner;
1165
+
1166
+ if (config != null) {
1167
+ if (hasValidRef(config)) {
1168
+ // Silently steal the ref from the parent.
1169
+ ref = config.ref;
1170
+ owner = ReactCurrentOwner.current;
1171
+ }
1172
+ if (hasValidKey(config)) {
1173
+ key = '' + config.key;
1174
+ }
1175
+
1176
+ // Remaining properties override existing props
1177
+ var defaultProps;
1178
+ if (element.type && element.type.defaultProps) {
1179
+ defaultProps = element.type.defaultProps;
1180
+ }
1181
+ for (propName in config) {
1182
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
1183
+ if (config[propName] === undefined && defaultProps !== undefined) {
1184
+ // Resolve default props
1185
+ props[propName] = defaultProps[propName];
1186
+ } else {
1187
+ props[propName] = config[propName];
1188
+ }
1189
+ }
1190
+ }
1191
+ }
1192
+
1193
+ // Children can be more than one argument, and those are transferred onto
1194
+ // the newly allocated props object.
1195
+ var childrenLength = arguments.length - 2;
1196
+ if (childrenLength === 1) {
1197
+ props.children = children;
1198
+ } else if (childrenLength > 1) {
1199
+ var childArray = Array(childrenLength);
1200
+ for (var i = 0; i < childrenLength; i++) {
1201
+ childArray[i] = arguments[i + 2];
1202
+ }
1203
+ props.children = childArray;
1204
+ }
1205
+
1206
+ return ReactElement(element.type, key, ref, self, source, owner, props);
1207
+ };
1208
+
1209
+ /**
1210
+ * Verifies the object is a ReactElement.
1211
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement
1212
+ * @param {?object} object
1213
+ * @return {boolean} True if `object` is a valid component.
1214
+ * @final
1215
+ */
1216
+ ReactElement.isValidElement = function (object) {
1217
+ return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
1218
+ };
1219
+
1220
+ ReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;
1221
+
1222
+ module.exports = ReactElement;
1223
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1224
+
1225
+ /***/ },
1226
+ /* 11 */
1227
+ /***/ function(module, exports) {
1228
+
1229
+ /**
1230
+ * Copyright 2013-present, Facebook, Inc.
1231
+ * All rights reserved.
1232
+ *
1233
+ * This source code is licensed under the BSD-style license found in the
1234
+ * LICENSE file in the root directory of this source tree. An additional grant
1235
+ * of patent rights can be found in the PATENTS file in the same directory.
1236
+ *
1237
+ * @providesModule ReactCurrentOwner
1238
+ */
1239
+
1240
+ 'use strict';
1241
+
1242
+ /**
1243
+ * Keeps track of the current owner.
1244
+ *
1245
+ * The current owner is the component who should own any components that are
1246
+ * currently being constructed.
1247
+ */
1248
+
1249
+ var ReactCurrentOwner = {
1250
+
1251
+ /**
1252
+ * @internal
1253
+ * @type {ReactComponent}
1254
+ */
1255
+ current: null
1256
+
1257
+ };
1258
+
1259
+ module.exports = ReactCurrentOwner;
1260
+
1261
+ /***/ },
1262
+ /* 12 */
1263
+ /***/ function(module, exports, __webpack_require__) {
1264
+
1265
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1266
+ * Copyright 2014-2015, Facebook, Inc.
1267
+ * All rights reserved.
1268
+ *
1269
+ * This source code is licensed under the BSD-style license found in the
1270
+ * LICENSE file in the root directory of this source tree. An additional grant
1271
+ * of patent rights can be found in the PATENTS file in the same directory.
1272
+ *
1273
+ */
1274
+
1275
+ 'use strict';
1276
+
1277
+ var emptyFunction = __webpack_require__(13);
1278
+
1279
+ /**
1280
+ * Similar to invariant but only logs a warning if the condition is not met.
1281
+ * This can be used to log issues in development environments in critical
1282
+ * paths. Removing the logging code for production environments will keep the
1283
+ * same logic and follow the same code paths.
1284
+ */
1285
+
1286
+ var warning = emptyFunction;
1287
+
1288
+ if (process.env.NODE_ENV !== 'production') {
1289
+ (function () {
1290
+ var printWarning = function printWarning(format) {
1291
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1292
+ args[_key - 1] = arguments[_key];
1293
+ }
1294
+
1295
+ var argIndex = 0;
1296
+ var message = 'Warning: ' + format.replace(/%s/g, function () {
1297
+ return args[argIndex++];
1298
+ });
1299
+ if (typeof console !== 'undefined') {
1300
+ console.error(message);
1301
+ }
1302
+ try {
1303
+ // --- Welcome to debugging React ---
1304
+ // This error was thrown as a convenience so that you can use this stack
1305
+ // to find the callsite that caused this warning to fire.
1306
+ throw new Error(message);
1307
+ } catch (x) {}
1308
+ };
1309
+
1310
+ warning = function warning(condition, format) {
1311
+ if (format === undefined) {
1312
+ throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
1313
+ }
1314
+
1315
+ if (format.indexOf('Failed Composite propType: ') === 0) {
1316
+ return; // Ignore CompositeComponent proptype check.
1317
+ }
1318
+
1319
+ if (!condition) {
1320
+ for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
1321
+ args[_key2 - 2] = arguments[_key2];
1322
+ }
1323
+
1324
+ printWarning.apply(undefined, [format].concat(args));
1325
+ }
1326
+ };
1327
+ })();
1328
+ }
1329
+
1330
+ module.exports = warning;
1331
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1332
+
1333
+ /***/ },
1334
+ /* 13 */
1335
+ /***/ function(module, exports) {
1336
+
1337
+ "use strict";
1338
+
1339
+ /**
1340
+ * Copyright (c) 2013-present, Facebook, Inc.
1341
+ * All rights reserved.
1342
+ *
1343
+ * This source code is licensed under the BSD-style license found in the
1344
+ * LICENSE file in the root directory of this source tree. An additional grant
1345
+ * of patent rights can be found in the PATENTS file in the same directory.
1346
+ *
1347
+ *
1348
+ */
1349
+
1350
+ function makeEmptyFunction(arg) {
1351
+ return function () {
1352
+ return arg;
1353
+ };
1354
+ }
1355
+
1356
+ /**
1357
+ * This function accepts and discards inputs; it has no side effects. This is
1358
+ * primarily useful idiomatically for overridable function endpoints which
1359
+ * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
1360
+ */
1361
+ var emptyFunction = function emptyFunction() {};
1362
+
1363
+ emptyFunction.thatReturns = makeEmptyFunction;
1364
+ emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
1365
+ emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
1366
+ emptyFunction.thatReturnsNull = makeEmptyFunction(null);
1367
+ emptyFunction.thatReturnsThis = function () {
1368
+ return this;
1369
+ };
1370
+ emptyFunction.thatReturnsArgument = function (arg) {
1371
+ return arg;
1372
+ };
1373
+
1374
+ module.exports = emptyFunction;
1375
+
1376
+ /***/ },
1377
+ /* 14 */
1378
+ /***/ function(module, exports, __webpack_require__) {
1379
+
1380
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1381
+ * Copyright 2013-present, Facebook, Inc.
1382
+ * All rights reserved.
1383
+ *
1384
+ * This source code is licensed under the BSD-style license found in the
1385
+ * LICENSE file in the root directory of this source tree. An additional grant
1386
+ * of patent rights can be found in the PATENTS file in the same directory.
1387
+ *
1388
+ * @providesModule canDefineProperty
1389
+ */
1390
+
1391
+ 'use strict';
1392
+
1393
+ var canDefineProperty = false;
1394
+ if (process.env.NODE_ENV !== 'production') {
1395
+ try {
1396
+ Object.defineProperty({}, 'x', { get: function () {} });
1397
+ canDefineProperty = true;
1398
+ } catch (x) {
1399
+ // IE will fail on defineProperty
1400
+ }
1401
+ }
1402
+
1403
+ module.exports = canDefineProperty;
1404
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1405
+
1406
+ /***/ },
1407
+ /* 15 */
1408
+ /***/ function(module, exports, __webpack_require__) {
1409
+
1410
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1411
+ * Copyright 2013-present, Facebook, Inc.
1412
+ * All rights reserved.
1413
+ *
1414
+ * This source code is licensed under the BSD-style license found in the
1415
+ * LICENSE file in the root directory of this source tree. An additional grant
1416
+ * of patent rights can be found in the PATENTS file in the same directory.
1417
+ *
1418
+ * @providesModule traverseAllChildren
1419
+ */
1420
+
1421
+ 'use strict';
1422
+
1423
+ var _prodInvariant = __webpack_require__(8);
1424
+
1425
+ var ReactCurrentOwner = __webpack_require__(11);
1426
+ var ReactElement = __webpack_require__(10);
1427
+
1428
+ var getIteratorFn = __webpack_require__(16);
1429
+ var invariant = __webpack_require__(9);
1430
+ var KeyEscapeUtils = __webpack_require__(17);
1431
+ var warning = __webpack_require__(12);
1432
+
1433
+ var SEPARATOR = '.';
1434
+ var SUBSEPARATOR = ':';
1435
+
1436
+ /**
1437
+ * TODO: Test that a single child and an array with one item have the same key
1438
+ * pattern.
1439
+ */
1440
+
1441
+ var didWarnAboutMaps = false;
1442
+
1443
+ /**
1444
+ * Generate a key string that identifies a component within a set.
1445
+ *
1446
+ * @param {*} component A component that could contain a manual key.
1447
+ * @param {number} index Index that is used if a manual key is not provided.
1448
+ * @return {string}
1449
+ */
1450
+ function getComponentKey(component, index) {
1451
+ // Do some typechecking here since we call this blindly. We want to ensure
1452
+ // that we don't block potential future ES APIs.
1453
+ if (component && typeof component === 'object' && component.key != null) {
1454
+ // Explicit key
1455
+ return KeyEscapeUtils.escape(component.key);
1456
+ }
1457
+ // Implicit key determined by the index in the set
1458
+ return index.toString(36);
1459
+ }
1460
+
1461
+ /**
1462
+ * @param {?*} children Children tree container.
1463
+ * @param {!string} nameSoFar Name of the key path so far.
1464
+ * @param {!function} callback Callback to invoke with each child found.
1465
+ * @param {?*} traverseContext Used to pass information throughout the traversal
1466
+ * process.
1467
+ * @return {!number} The number of children in this subtree.
1468
+ */
1469
+ function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
1470
+ var type = typeof children;
1471
+
1472
+ if (type === 'undefined' || type === 'boolean') {
1473
+ // All of the above are perceived as null.
1474
+ children = null;
1475
+ }
1476
+
1477
+ if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
1478
+ callback(traverseContext, children,
1479
+ // If it's the only child, treat the name as if it was wrapped in an array
1480
+ // so that it's consistent if the number of children grows.
1481
+ nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
1482
+ return 1;
1483
+ }
1484
+
1485
+ var child;
1486
+ var nextName;
1487
+ var subtreeCount = 0; // Count of children found in the current subtree.
1488
+ var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
1489
+
1490
+ if (Array.isArray(children)) {
1491
+ for (var i = 0; i < children.length; i++) {
1492
+ child = children[i];
1493
+ nextName = nextNamePrefix + getComponentKey(child, i);
1494
+ subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
1495
+ }
1496
+ } else {
1497
+ var iteratorFn = getIteratorFn(children);
1498
+ if (iteratorFn) {
1499
+ var iterator = iteratorFn.call(children);
1500
+ var step;
1501
+ if (iteratorFn !== children.entries) {
1502
+ var ii = 0;
1503
+ while (!(step = iterator.next()).done) {
1504
+ child = step.value;
1505
+ nextName = nextNamePrefix + getComponentKey(child, ii++);
1506
+ subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
1507
+ }
1508
+ } else {
1509
+ if (process.env.NODE_ENV !== 'production') {
1510
+ var mapsAsChildrenAddendum = '';
1511
+ if (ReactCurrentOwner.current) {
1512
+ var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();
1513
+ if (mapsAsChildrenOwnerName) {
1514
+ mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';
1515
+ }
1516
+ }
1517
+ process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;
1518
+ didWarnAboutMaps = true;
1519
+ }
1520
+ // Iterator will provide entry [k,v] tuples rather than values.
1521
+ while (!(step = iterator.next()).done) {
1522
+ var entry = step.value;
1523
+ if (entry) {
1524
+ child = entry[1];
1525
+ nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
1526
+ subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
1527
+ }
1528
+ }
1529
+ }
1530
+ } else if (type === 'object') {
1531
+ var addendum = '';
1532
+ if (process.env.NODE_ENV !== 'production') {
1533
+ addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';
1534
+ if (children._isReactElement) {
1535
+ addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';
1536
+ }
1537
+ if (ReactCurrentOwner.current) {
1538
+ var name = ReactCurrentOwner.current.getName();
1539
+ if (name) {
1540
+ addendum += ' Check the render method of `' + name + '`.';
1541
+ }
1542
+ }
1543
+ }
1544
+ var childrenString = String(children);
1545
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;
1546
+ }
1547
+ }
1548
+
1549
+ return subtreeCount;
1550
+ }
1551
+
1552
+ /**
1553
+ * Traverses children that are typically specified as `props.children`, but
1554
+ * might also be specified through attributes:
1555
+ *
1556
+ * - `traverseAllChildren(this.props.children, ...)`
1557
+ * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
1558
+ *
1559
+ * The `traverseContext` is an optional argument that is passed through the
1560
+ * entire traversal. It can be used to store accumulations or anything else that
1561
+ * the callback might find relevant.
1562
+ *
1563
+ * @param {?*} children Children tree object.
1564
+ * @param {!function} callback To invoke upon traversing each child.
1565
+ * @param {?*} traverseContext Context for traversal.
1566
+ * @return {!number} The number of children in this subtree.
1567
+ */
1568
+ function traverseAllChildren(children, callback, traverseContext) {
1569
+ if (children == null) {
1570
+ return 0;
1571
+ }
1572
+
1573
+ return traverseAllChildrenImpl(children, '', callback, traverseContext);
1574
+ }
1575
+
1576
+ module.exports = traverseAllChildren;
1577
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1578
+
1579
+ /***/ },
1580
+ /* 16 */
1581
+ /***/ function(module, exports) {
1582
+
1583
+ /**
1584
+ * Copyright 2013-present, Facebook, Inc.
1585
+ * All rights reserved.
1586
+ *
1587
+ * This source code is licensed under the BSD-style license found in the
1588
+ * LICENSE file in the root directory of this source tree. An additional grant
1589
+ * of patent rights can be found in the PATENTS file in the same directory.
1590
+ *
1591
+ * @providesModule getIteratorFn
1592
+ *
1593
+ */
1594
+
1595
+ 'use strict';
1596
+
1597
+ /* global Symbol */
1598
+
1599
+ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
1600
+ var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
1601
+
1602
+ /**
1603
+ * Returns the iterator method function contained on the iterable object.
1604
+ *
1605
+ * Be sure to invoke the function with the iterable as context:
1606
+ *
1607
+ * var iteratorFn = getIteratorFn(myIterable);
1608
+ * if (iteratorFn) {
1609
+ * var iterator = iteratorFn.call(myIterable);
1610
+ * ...
1611
+ * }
1612
+ *
1613
+ * @param {?object} maybeIterable
1614
+ * @return {?function}
1615
+ */
1616
+ function getIteratorFn(maybeIterable) {
1617
+ var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
1618
+ if (typeof iteratorFn === 'function') {
1619
+ return iteratorFn;
1620
+ }
1621
+ }
1622
+
1623
+ module.exports = getIteratorFn;
1624
+
1625
+ /***/ },
1626
+ /* 17 */
1627
+ /***/ function(module, exports) {
1628
+
1629
+ /**
1630
+ * Copyright 2013-present, Facebook, Inc.
1631
+ * All rights reserved.
1632
+ *
1633
+ * This source code is licensed under the BSD-style license found in the
1634
+ * LICENSE file in the root directory of this source tree. An additional grant
1635
+ * of patent rights can be found in the PATENTS file in the same directory.
1636
+ *
1637
+ * @providesModule KeyEscapeUtils
1638
+ *
1639
+ */
1640
+
1641
+ 'use strict';
1642
+
1643
+ /**
1644
+ * Escape and wrap key so it is safe to use as a reactid
1645
+ *
1646
+ * @param {string} key to be escaped.
1647
+ * @return {string} the escaped key.
1648
+ */
1649
+
1650
+ function escape(key) {
1651
+ var escapeRegex = /[=:]/g;
1652
+ var escaperLookup = {
1653
+ '=': '=0',
1654
+ ':': '=2'
1655
+ };
1656
+ var escapedString = ('' + key).replace(escapeRegex, function (match) {
1657
+ return escaperLookup[match];
1658
+ });
1659
+
1660
+ return '$' + escapedString;
1661
+ }
1662
+
1663
+ /**
1664
+ * Unescape and unwrap key for human-readable display
1665
+ *
1666
+ * @param {string} key to unescape.
1667
+ * @return {string} the unescaped key.
1668
+ */
1669
+ function unescape(key) {
1670
+ var unescapeRegex = /(=0|=2)/g;
1671
+ var unescaperLookup = {
1672
+ '=0': '=',
1673
+ '=2': ':'
1674
+ };
1675
+ var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);
1676
+
1677
+ return ('' + keySubstring).replace(unescapeRegex, function (match) {
1678
+ return unescaperLookup[match];
1679
+ });
1680
+ }
1681
+
1682
+ var KeyEscapeUtils = {
1683
+ escape: escape,
1684
+ unescape: unescape
1685
+ };
1686
+
1687
+ module.exports = KeyEscapeUtils;
1688
+
1689
+ /***/ },
1690
+ /* 18 */
1691
+ /***/ function(module, exports, __webpack_require__) {
1692
+
1693
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1694
+ * Copyright 2013-present, Facebook, Inc.
1695
+ * All rights reserved.
1696
+ *
1697
+ * This source code is licensed under the BSD-style license found in the
1698
+ * LICENSE file in the root directory of this source tree. An additional grant
1699
+ * of patent rights can be found in the PATENTS file in the same directory.
1700
+ *
1701
+ * @providesModule ReactComponent
1702
+ */
1703
+
1704
+ 'use strict';
1705
+
1706
+ var _prodInvariant = __webpack_require__(8);
1707
+
1708
+ var ReactNoopUpdateQueue = __webpack_require__(19);
1709
+
1710
+ var canDefineProperty = __webpack_require__(14);
1711
+ var emptyObject = __webpack_require__(20);
1712
+ var invariant = __webpack_require__(9);
1713
+ var warning = __webpack_require__(12);
1714
+
1715
+ /**
1716
+ * Base class helpers for the updating state of a component.
1717
+ */
1718
+ function ReactComponent(props, context, updater) {
1719
+ this.props = props;
1720
+ this.context = context;
1721
+ this.refs = emptyObject;
1722
+ // We initialize the default updater but the real one gets injected by the
1723
+ // renderer.
1724
+ this.updater = updater || ReactNoopUpdateQueue;
1725
+ }
1726
+
1727
+ ReactComponent.prototype.isReactComponent = {};
1728
+
1729
+ /**
1730
+ * Sets a subset of the state. Always use this to mutate
1731
+ * state. You should treat `this.state` as immutable.
1732
+ *
1733
+ * There is no guarantee that `this.state` will be immediately updated, so
1734
+ * accessing `this.state` after calling this method may return the old value.
1735
+ *
1736
+ * There is no guarantee that calls to `setState` will run synchronously,
1737
+ * as they may eventually be batched together. You can provide an optional
1738
+ * callback that will be executed when the call to setState is actually
1739
+ * completed.
1740
+ *
1741
+ * When a function is provided to setState, it will be called at some point in
1742
+ * the future (not synchronously). It will be called with the up to date
1743
+ * component arguments (state, props, context). These values can be different
1744
+ * from this.* because your function may be called after receiveProps but before
1745
+ * shouldComponentUpdate, and this new state, props, and context will not yet be
1746
+ * assigned to this.
1747
+ *
1748
+ * @param {object|function} partialState Next partial state or function to
1749
+ * produce next partial state to be merged with current state.
1750
+ * @param {?function} callback Called after state is updated.
1751
+ * @final
1752
+ * @protected
1753
+ */
1754
+ ReactComponent.prototype.setState = function (partialState, callback) {
1755
+ !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;
1756
+ this.updater.enqueueSetState(this, partialState);
1757
+ if (callback) {
1758
+ this.updater.enqueueCallback(this, callback, 'setState');
1759
+ }
1760
+ };
1761
+
1762
+ /**
1763
+ * Forces an update. This should only be invoked when it is known with
1764
+ * certainty that we are **not** in a DOM transaction.
1765
+ *
1766
+ * You may want to call this when you know that some deeper aspect of the
1767
+ * component's state has changed but `setState` was not called.
1768
+ *
1769
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
1770
+ * `componentWillUpdate` and `componentDidUpdate`.
1771
+ *
1772
+ * @param {?function} callback Called after update is complete.
1773
+ * @final
1774
+ * @protected
1775
+ */
1776
+ ReactComponent.prototype.forceUpdate = function (callback) {
1777
+ this.updater.enqueueForceUpdate(this);
1778
+ if (callback) {
1779
+ this.updater.enqueueCallback(this, callback, 'forceUpdate');
1780
+ }
1781
+ };
1782
+
1783
+ /**
1784
+ * Deprecated APIs. These APIs used to exist on classic React classes but since
1785
+ * we would like to deprecate them, we're not going to move them over to this
1786
+ * modern base class. Instead, we define a getter that warns if it's accessed.
1787
+ */
1788
+ if (process.env.NODE_ENV !== 'production') {
1789
+ var deprecatedAPIs = {
1790
+ isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
1791
+ replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
1792
+ };
1793
+ var defineDeprecationWarning = function (methodName, info) {
1794
+ if (canDefineProperty) {
1795
+ Object.defineProperty(ReactComponent.prototype, methodName, {
1796
+ get: function () {
1797
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;
1798
+ return undefined;
1799
+ }
1800
+ });
1801
+ }
1802
+ };
1803
+ for (var fnName in deprecatedAPIs) {
1804
+ if (deprecatedAPIs.hasOwnProperty(fnName)) {
1805
+ defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
1806
+ }
1807
+ }
1808
+ }
1809
+
1810
+ module.exports = ReactComponent;
1811
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1812
+
1813
+ /***/ },
1814
+ /* 19 */
1815
+ /***/ function(module, exports, __webpack_require__) {
1816
+
1817
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1818
+ * Copyright 2015-present, Facebook, Inc.
1819
+ * All rights reserved.
1820
+ *
1821
+ * This source code is licensed under the BSD-style license found in the
1822
+ * LICENSE file in the root directory of this source tree. An additional grant
1823
+ * of patent rights can be found in the PATENTS file in the same directory.
1824
+ *
1825
+ * @providesModule ReactNoopUpdateQueue
1826
+ */
1827
+
1828
+ 'use strict';
1829
+
1830
+ var warning = __webpack_require__(12);
1831
+
1832
+ function warnNoop(publicInstance, callerName) {
1833
+ if (process.env.NODE_ENV !== 'production') {
1834
+ var constructor = publicInstance.constructor;
1835
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
1836
+ }
1837
+ }
1838
+
1839
+ /**
1840
+ * This is the abstract API for an update queue.
1841
+ */
1842
+ var ReactNoopUpdateQueue = {
1843
+
1844
+ /**
1845
+ * Checks whether or not this composite component is mounted.
1846
+ * @param {ReactClass} publicInstance The instance we want to test.
1847
+ * @return {boolean} True if mounted, false otherwise.
1848
+ * @protected
1849
+ * @final
1850
+ */
1851
+ isMounted: function (publicInstance) {
1852
+ return false;
1853
+ },
1854
+
1855
+ /**
1856
+ * Enqueue a callback that will be executed after all the pending updates
1857
+ * have processed.
1858
+ *
1859
+ * @param {ReactClass} publicInstance The instance to use as `this` context.
1860
+ * @param {?function} callback Called after state is updated.
1861
+ * @internal
1862
+ */
1863
+ enqueueCallback: function (publicInstance, callback) {},
1864
+
1865
+ /**
1866
+ * Forces an update. This should only be invoked when it is known with
1867
+ * certainty that we are **not** in a DOM transaction.
1868
+ *
1869
+ * You may want to call this when you know that some deeper aspect of the
1870
+ * component's state has changed but `setState` was not called.
1871
+ *
1872
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
1873
+ * `componentWillUpdate` and `componentDidUpdate`.
1874
+ *
1875
+ * @param {ReactClass} publicInstance The instance that should rerender.
1876
+ * @internal
1877
+ */
1878
+ enqueueForceUpdate: function (publicInstance) {
1879
+ warnNoop(publicInstance, 'forceUpdate');
1880
+ },
1881
+
1882
+ /**
1883
+ * Replaces all of the state. Always use this or `setState` to mutate state.
1884
+ * You should treat `this.state` as immutable.
1885
+ *
1886
+ * There is no guarantee that `this.state` will be immediately updated, so
1887
+ * accessing `this.state` after calling this method may return the old value.
1888
+ *
1889
+ * @param {ReactClass} publicInstance The instance that should rerender.
1890
+ * @param {object} completeState Next state.
1891
+ * @internal
1892
+ */
1893
+ enqueueReplaceState: function (publicInstance, completeState) {
1894
+ warnNoop(publicInstance, 'replaceState');
1895
+ },
1896
+
1897
+ /**
1898
+ * Sets a subset of the state. This only exists because _pendingState is
1899
+ * internal. This provides a merging strategy that is not available to deep
1900
+ * properties which is confusing. TODO: Expose pendingState or don't use it
1901
+ * during the merge.
1902
+ *
1903
+ * @param {ReactClass} publicInstance The instance that should rerender.
1904
+ * @param {object} partialState Next partial state to be merged with state.
1905
+ * @internal
1906
+ */
1907
+ enqueueSetState: function (publicInstance, partialState) {
1908
+ warnNoop(publicInstance, 'setState');
1909
+ }
1910
+ };
1911
+
1912
+ module.exports = ReactNoopUpdateQueue;
1913
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1914
+
1915
+ /***/ },
1916
+ /* 20 */
1917
+ /***/ function(module, exports, __webpack_require__) {
1918
+
1919
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1920
+ * Copyright (c) 2013-present, Facebook, Inc.
1921
+ * All rights reserved.
1922
+ *
1923
+ * This source code is licensed under the BSD-style license found in the
1924
+ * LICENSE file in the root directory of this source tree. An additional grant
1925
+ * of patent rights can be found in the PATENTS file in the same directory.
1926
+ *
1927
+ */
1928
+
1929
+ 'use strict';
1930
+
1931
+ var emptyObject = {};
1932
+
1933
+ if (process.env.NODE_ENV !== 'production') {
1934
+ Object.freeze(emptyObject);
1935
+ }
1936
+
1937
+ module.exports = emptyObject;
1938
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
1939
+
1940
+ /***/ },
1941
+ /* 21 */
1942
+ /***/ function(module, exports, __webpack_require__) {
1943
+
1944
+ /**
1945
+ * Copyright 2013-present, Facebook, Inc.
1946
+ * All rights reserved.
1947
+ *
1948
+ * This source code is licensed under the BSD-style license found in the
1949
+ * LICENSE file in the root directory of this source tree. An additional grant
1950
+ * of patent rights can be found in the PATENTS file in the same directory.
1951
+ *
1952
+ * @providesModule ReactPureComponent
1953
+ */
1954
+
1955
+ 'use strict';
1956
+
1957
+ var _assign = __webpack_require__(5);
1958
+
1959
+ var ReactComponent = __webpack_require__(18);
1960
+ var ReactNoopUpdateQueue = __webpack_require__(19);
1961
+
1962
+ var emptyObject = __webpack_require__(20);
1963
+
1964
+ /**
1965
+ * Base class helpers for the updating state of a component.
1966
+ */
1967
+ function ReactPureComponent(props, context, updater) {
1968
+ // Duplicated from ReactComponent.
1969
+ this.props = props;
1970
+ this.context = context;
1971
+ this.refs = emptyObject;
1972
+ // We initialize the default updater but the real one gets injected by the
1973
+ // renderer.
1974
+ this.updater = updater || ReactNoopUpdateQueue;
1975
+ }
1976
+
1977
+ function ComponentDummy() {}
1978
+ ComponentDummy.prototype = ReactComponent.prototype;
1979
+ ReactPureComponent.prototype = new ComponentDummy();
1980
+ ReactPureComponent.prototype.constructor = ReactPureComponent;
1981
+ // Avoid an extra prototype jump for these methods.
1982
+ _assign(ReactPureComponent.prototype, ReactComponent.prototype);
1983
+ ReactPureComponent.prototype.isPureReactComponent = true;
1984
+
1985
+ module.exports = ReactPureComponent;
1986
+
1987
+ /***/ },
1988
+ /* 22 */
1989
+ /***/ function(module, exports, __webpack_require__) {
1990
+
1991
+ /* WEBPACK VAR INJECTION */(function(process) {/**
1992
+ * Copyright 2013-present, Facebook, Inc.
1993
+ * All rights reserved.
1994
+ *
1995
+ * This source code is licensed under the BSD-style license found in the
1996
+ * LICENSE file in the root directory of this source tree. An additional grant
1997
+ * of patent rights can be found in the PATENTS file in the same directory.
1998
+ *
1999
+ * @providesModule ReactClass
2000
+ */
2001
+
2002
+ 'use strict';
2003
+
2004
+ var _prodInvariant = __webpack_require__(8),
2005
+ _assign = __webpack_require__(5);
2006
+
2007
+ var ReactComponent = __webpack_require__(18);
2008
+ var ReactElement = __webpack_require__(10);
2009
+ var ReactPropTypeLocations = __webpack_require__(23);
2010
+ var ReactPropTypeLocationNames = __webpack_require__(25);
2011
+ var ReactNoopUpdateQueue = __webpack_require__(19);
2012
+
2013
+ var emptyObject = __webpack_require__(20);
2014
+ var invariant = __webpack_require__(9);
2015
+ var keyMirror = __webpack_require__(24);
2016
+ var keyOf = __webpack_require__(26);
2017
+ var warning = __webpack_require__(12);
2018
+
2019
+ var MIXINS_KEY = keyOf({ mixins: null });
2020
+
2021
+ /**
2022
+ * Policies that describe methods in `ReactClassInterface`.
2023
+ */
2024
+ var SpecPolicy = keyMirror({
2025
+ /**
2026
+ * These methods may be defined only once by the class specification or mixin.
2027
+ */
2028
+ DEFINE_ONCE: null,
2029
+ /**
2030
+ * These methods may be defined by both the class specification and mixins.
2031
+ * Subsequent definitions will be chained. These methods must return void.
2032
+ */
2033
+ DEFINE_MANY: null,
2034
+ /**
2035
+ * These methods are overriding the base class.
2036
+ */
2037
+ OVERRIDE_BASE: null,
2038
+ /**
2039
+ * These methods are similar to DEFINE_MANY, except we assume they return
2040
+ * objects. We try to merge the keys of the return values of all the mixed in
2041
+ * functions. If there is a key conflict we throw.
2042
+ */
2043
+ DEFINE_MANY_MERGED: null
2044
+ });
2045
+
2046
+ var injectedMixins = [];
2047
+
2048
+ /**
2049
+ * Composite components are higher-level components that compose other composite
2050
+ * or host components.
2051
+ *
2052
+ * To create a new type of `ReactClass`, pass a specification of
2053
+ * your new class to `React.createClass`. The only requirement of your class
2054
+ * specification is that you implement a `render` method.
2055
+ *
2056
+ * var MyComponent = React.createClass({
2057
+ * render: function() {
2058
+ * return <div>Hello World</div>;
2059
+ * }
2060
+ * });
2061
+ *
2062
+ * The class specification supports a specific protocol of methods that have
2063
+ * special meaning (e.g. `render`). See `ReactClassInterface` for
2064
+ * more the comprehensive protocol. Any other properties and methods in the
2065
+ * class specification will be available on the prototype.
2066
+ *
2067
+ * @interface ReactClassInterface
2068
+ * @internal
2069
+ */
2070
+ var ReactClassInterface = {
2071
+
2072
+ /**
2073
+ * An array of Mixin objects to include when defining your component.
2074
+ *
2075
+ * @type {array}
2076
+ * @optional
2077
+ */
2078
+ mixins: SpecPolicy.DEFINE_MANY,
2079
+
2080
+ /**
2081
+ * An object containing properties and methods that should be defined on
2082
+ * the component's constructor instead of its prototype (static methods).
2083
+ *
2084
+ * @type {object}
2085
+ * @optional
2086
+ */
2087
+ statics: SpecPolicy.DEFINE_MANY,
2088
+
2089
+ /**
2090
+ * Definition of prop types for this component.
2091
+ *
2092
+ * @type {object}
2093
+ * @optional
2094
+ */
2095
+ propTypes: SpecPolicy.DEFINE_MANY,
2096
+
2097
+ /**
2098
+ * Definition of context types for this component.
2099
+ *
2100
+ * @type {object}
2101
+ * @optional
2102
+ */
2103
+ contextTypes: SpecPolicy.DEFINE_MANY,
2104
+
2105
+ /**
2106
+ * Definition of context types this component sets for its children.
2107
+ *
2108
+ * @type {object}
2109
+ * @optional
2110
+ */
2111
+ childContextTypes: SpecPolicy.DEFINE_MANY,
2112
+
2113
+ // ==== Definition methods ====
2114
+
2115
+ /**
2116
+ * Invoked when the component is mounted. Values in the mapping will be set on
2117
+ * `this.props` if that prop is not specified (i.e. using an `in` check).
2118
+ *
2119
+ * This method is invoked before `getInitialState` and therefore cannot rely
2120
+ * on `this.state` or use `this.setState`.
2121
+ *
2122
+ * @return {object}
2123
+ * @optional
2124
+ */
2125
+ getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,
2126
+
2127
+ /**
2128
+ * Invoked once before the component is mounted. The return value will be used
2129
+ * as the initial value of `this.state`.
2130
+ *
2131
+ * getInitialState: function() {
2132
+ * return {
2133
+ * isOn: false,
2134
+ * fooBaz: new BazFoo()
2135
+ * }
2136
+ * }
2137
+ *
2138
+ * @return {object}
2139
+ * @optional
2140
+ */
2141
+ getInitialState: SpecPolicy.DEFINE_MANY_MERGED,
2142
+
2143
+ /**
2144
+ * @return {object}
2145
+ * @optional
2146
+ */
2147
+ getChildContext: SpecPolicy.DEFINE_MANY_MERGED,
2148
+
2149
+ /**
2150
+ * Uses props from `this.props` and state from `this.state` to render the
2151
+ * structure of the component.
2152
+ *
2153
+ * No guarantees are made about when or how often this method is invoked, so
2154
+ * it must not have side effects.
2155
+ *
2156
+ * render: function() {
2157
+ * var name = this.props.name;
2158
+ * return <div>Hello, {name}!</div>;
2159
+ * }
2160
+ *
2161
+ * @return {ReactComponent}
2162
+ * @nosideeffects
2163
+ * @required
2164
+ */
2165
+ render: SpecPolicy.DEFINE_ONCE,
2166
+
2167
+ // ==== Delegate methods ====
2168
+
2169
+ /**
2170
+ * Invoked when the component is initially created and about to be mounted.
2171
+ * This may have side effects, but any external subscriptions or data created
2172
+ * by this method must be cleaned up in `componentWillUnmount`.
2173
+ *
2174
+ * @optional
2175
+ */
2176
+ componentWillMount: SpecPolicy.DEFINE_MANY,
2177
+
2178
+ /**
2179
+ * Invoked when the component has been mounted and has a DOM representation.
2180
+ * However, there is no guarantee that the DOM node is in the document.
2181
+ *
2182
+ * Use this as an opportunity to operate on the DOM when the component has
2183
+ * been mounted (initialized and rendered) for the first time.
2184
+ *
2185
+ * @param {DOMElement} rootNode DOM element representing the component.
2186
+ * @optional
2187
+ */
2188
+ componentDidMount: SpecPolicy.DEFINE_MANY,
2189
+
2190
+ /**
2191
+ * Invoked before the component receives new props.
2192
+ *
2193
+ * Use this as an opportunity to react to a prop transition by updating the
2194
+ * state using `this.setState`. Current props are accessed via `this.props`.
2195
+ *
2196
+ * componentWillReceiveProps: function(nextProps, nextContext) {
2197
+ * this.setState({
2198
+ * likesIncreasing: nextProps.likeCount > this.props.likeCount
2199
+ * });
2200
+ * }
2201
+ *
2202
+ * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
2203
+ * transition may cause a state change, but the opposite is not true. If you
2204
+ * need it, you are probably looking for `componentWillUpdate`.
2205
+ *
2206
+ * @param {object} nextProps
2207
+ * @optional
2208
+ */
2209
+ componentWillReceiveProps: SpecPolicy.DEFINE_MANY,
2210
+
2211
+ /**
2212
+ * Invoked while deciding if the component should be updated as a result of
2213
+ * receiving new props, state and/or context.
2214
+ *
2215
+ * Use this as an opportunity to `return false` when you're certain that the
2216
+ * transition to the new props/state/context will not require a component
2217
+ * update.
2218
+ *
2219
+ * shouldComponentUpdate: function(nextProps, nextState, nextContext) {
2220
+ * return !equal(nextProps, this.props) ||
2221
+ * !equal(nextState, this.state) ||
2222
+ * !equal(nextContext, this.context);
2223
+ * }
2224
+ *
2225
+ * @param {object} nextProps
2226
+ * @param {?object} nextState
2227
+ * @param {?object} nextContext
2228
+ * @return {boolean} True if the component should update.
2229
+ * @optional
2230
+ */
2231
+ shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,
2232
+
2233
+ /**
2234
+ * Invoked when the component is about to update due to a transition from
2235
+ * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
2236
+ * and `nextContext`.
2237
+ *
2238
+ * Use this as an opportunity to perform preparation before an update occurs.
2239
+ *
2240
+ * NOTE: You **cannot** use `this.setState()` in this method.
2241
+ *
2242
+ * @param {object} nextProps
2243
+ * @param {?object} nextState
2244
+ * @param {?object} nextContext
2245
+ * @param {ReactReconcileTransaction} transaction
2246
+ * @optional
2247
+ */
2248
+ componentWillUpdate: SpecPolicy.DEFINE_MANY,
2249
+
2250
+ /**
2251
+ * Invoked when the component's DOM representation has been updated.
2252
+ *
2253
+ * Use this as an opportunity to operate on the DOM when the component has
2254
+ * been updated.
2255
+ *
2256
+ * @param {object} prevProps
2257
+ * @param {?object} prevState
2258
+ * @param {?object} prevContext
2259
+ * @param {DOMElement} rootNode DOM element representing the component.
2260
+ * @optional
2261
+ */
2262
+ componentDidUpdate: SpecPolicy.DEFINE_MANY,
2263
+
2264
+ /**
2265
+ * Invoked when the component is about to be removed from its parent and have
2266
+ * its DOM representation destroyed.
2267
+ *
2268
+ * Use this as an opportunity to deallocate any external resources.
2269
+ *
2270
+ * NOTE: There is no `componentDidUnmount` since your component will have been
2271
+ * destroyed by that point.
2272
+ *
2273
+ * @optional
2274
+ */
2275
+ componentWillUnmount: SpecPolicy.DEFINE_MANY,
2276
+
2277
+ // ==== Advanced methods ====
2278
+
2279
+ /**
2280
+ * Updates the component's currently mounted DOM representation.
2281
+ *
2282
+ * By default, this implements React's rendering and reconciliation algorithm.
2283
+ * Sophisticated clients may wish to override this.
2284
+ *
2285
+ * @param {ReactReconcileTransaction} transaction
2286
+ * @internal
2287
+ * @overridable
2288
+ */
2289
+ updateComponent: SpecPolicy.OVERRIDE_BASE
2290
+
2291
+ };
2292
+
2293
+ /**
2294
+ * Mapping from class specification keys to special processing functions.
2295
+ *
2296
+ * Although these are declared like instance properties in the specification
2297
+ * when defining classes using `React.createClass`, they are actually static
2298
+ * and are accessible on the constructor instead of the prototype. Despite
2299
+ * being static, they must be defined outside of the "statics" key under
2300
+ * which all other static methods are defined.
2301
+ */
2302
+ var RESERVED_SPEC_KEYS = {
2303
+ displayName: function (Constructor, displayName) {
2304
+ Constructor.displayName = displayName;
2305
+ },
2306
+ mixins: function (Constructor, mixins) {
2307
+ if (mixins) {
2308
+ for (var i = 0; i < mixins.length; i++) {
2309
+ mixSpecIntoComponent(Constructor, mixins[i]);
2310
+ }
2311
+ }
2312
+ },
2313
+ childContextTypes: function (Constructor, childContextTypes) {
2314
+ if (process.env.NODE_ENV !== 'production') {
2315
+ validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);
2316
+ }
2317
+ Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);
2318
+ },
2319
+ contextTypes: function (Constructor, contextTypes) {
2320
+ if (process.env.NODE_ENV !== 'production') {
2321
+ validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);
2322
+ }
2323
+ Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);
2324
+ },
2325
+ /**
2326
+ * Special case getDefaultProps which should move into statics but requires
2327
+ * automatic merging.
2328
+ */
2329
+ getDefaultProps: function (Constructor, getDefaultProps) {
2330
+ if (Constructor.getDefaultProps) {
2331
+ Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
2332
+ } else {
2333
+ Constructor.getDefaultProps = getDefaultProps;
2334
+ }
2335
+ },
2336
+ propTypes: function (Constructor, propTypes) {
2337
+ if (process.env.NODE_ENV !== 'production') {
2338
+ validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);
2339
+ }
2340
+ Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);
2341
+ },
2342
+ statics: function (Constructor, statics) {
2343
+ mixStaticSpecIntoComponent(Constructor, statics);
2344
+ },
2345
+ autobind: function () {} };
2346
+
2347
+ // noop
2348
+ function validateTypeDef(Constructor, typeDef, location) {
2349
+ for (var propName in typeDef) {
2350
+ if (typeDef.hasOwnProperty(propName)) {
2351
+ // use a warning instead of an invariant so components
2352
+ // don't show up in prod but only in __DEV__
2353
+ process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;
2354
+ }
2355
+ }
2356
+ }
2357
+
2358
+ function validateMethodOverride(isAlreadyDefined, name) {
2359
+ var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
2360
+
2361
+ // Disallow overriding of base class methods unless explicitly allowed.
2362
+ if (ReactClassMixin.hasOwnProperty(name)) {
2363
+ !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;
2364
+ }
2365
+
2366
+ // Disallow defining methods more than once unless explicitly allowed.
2367
+ if (isAlreadyDefined) {
2368
+ !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;
2369
+ }
2370
+ }
2371
+
2372
+ /**
2373
+ * Mixin helper which handles policy validation and reserved
2374
+ * specification keys when building React classes.
2375
+ */
2376
+ function mixSpecIntoComponent(Constructor, spec) {
2377
+ if (!spec) {
2378
+ if (process.env.NODE_ENV !== 'production') {
2379
+ var typeofSpec = typeof spec;
2380
+ var isMixinValid = typeofSpec === 'object' && spec !== null;
2381
+
2382
+ process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;
2383
+ }
2384
+
2385
+ return;
2386
+ }
2387
+
2388
+ !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;
2389
+ !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;
2390
+
2391
+ var proto = Constructor.prototype;
2392
+ var autoBindPairs = proto.__reactAutoBindPairs;
2393
+
2394
+ // By handling mixins before any other properties, we ensure the same
2395
+ // chaining order is applied to methods with DEFINE_MANY policy, whether
2396
+ // mixins are listed before or after these methods in the spec.
2397
+ if (spec.hasOwnProperty(MIXINS_KEY)) {
2398
+ RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
2399
+ }
2400
+
2401
+ for (var name in spec) {
2402
+ if (!spec.hasOwnProperty(name)) {
2403
+ continue;
2404
+ }
2405
+
2406
+ if (name === MIXINS_KEY) {
2407
+ // We have already handled mixins in a special case above.
2408
+ continue;
2409
+ }
2410
+
2411
+ var property = spec[name];
2412
+ var isAlreadyDefined = proto.hasOwnProperty(name);
2413
+ validateMethodOverride(isAlreadyDefined, name);
2414
+
2415
+ if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
2416
+ RESERVED_SPEC_KEYS[name](Constructor, property);
2417
+ } else {
2418
+ // Setup methods on prototype:
2419
+ // The following member methods should not be automatically bound:
2420
+ // 1. Expected ReactClass methods (in the "interface").
2421
+ // 2. Overridden methods (that were mixed in).
2422
+ var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
2423
+ var isFunction = typeof property === 'function';
2424
+ var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
2425
+
2426
+ if (shouldAutoBind) {
2427
+ autoBindPairs.push(name, property);
2428
+ proto[name] = property;
2429
+ } else {
2430
+ if (isAlreadyDefined) {
2431
+ var specPolicy = ReactClassInterface[name];
2432
+
2433
+ // These cases should already be caught by validateMethodOverride.
2434
+ !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;
2435
+
2436
+ // For methods which are defined more than once, call the existing
2437
+ // methods before calling the new property, merging if appropriate.
2438
+ if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
2439
+ proto[name] = createMergedResultFunction(proto[name], property);
2440
+ } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
2441
+ proto[name] = createChainedFunction(proto[name], property);
2442
+ }
2443
+ } else {
2444
+ proto[name] = property;
2445
+ if (process.env.NODE_ENV !== 'production') {
2446
+ // Add verbose displayName to the function, which helps when looking
2447
+ // at profiling tools.
2448
+ if (typeof property === 'function' && spec.displayName) {
2449
+ proto[name].displayName = spec.displayName + '_' + name;
2450
+ }
2451
+ }
2452
+ }
2453
+ }
2454
+ }
2455
+ }
2456
+ }
2457
+
2458
+ function mixStaticSpecIntoComponent(Constructor, statics) {
2459
+ if (!statics) {
2460
+ return;
2461
+ }
2462
+ for (var name in statics) {
2463
+ var property = statics[name];
2464
+ if (!statics.hasOwnProperty(name)) {
2465
+ continue;
2466
+ }
2467
+
2468
+ var isReserved = name in RESERVED_SPEC_KEYS;
2469
+ !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;
2470
+
2471
+ var isInherited = name in Constructor;
2472
+ !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;
2473
+ Constructor[name] = property;
2474
+ }
2475
+ }
2476
+
2477
+ /**
2478
+ * Merge two objects, but throw if both contain the same key.
2479
+ *
2480
+ * @param {object} one The first object, which is mutated.
2481
+ * @param {object} two The second object
2482
+ * @return {object} one after it has been mutated to contain everything in two.
2483
+ */
2484
+ function mergeIntoWithNoDuplicateKeys(one, two) {
2485
+ !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;
2486
+
2487
+ for (var key in two) {
2488
+ if (two.hasOwnProperty(key)) {
2489
+ !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;
2490
+ one[key] = two[key];
2491
+ }
2492
+ }
2493
+ return one;
2494
+ }
2495
+
2496
+ /**
2497
+ * Creates a function that invokes two functions and merges their return values.
2498
+ *
2499
+ * @param {function} one Function to invoke first.
2500
+ * @param {function} two Function to invoke second.
2501
+ * @return {function} Function that invokes the two argument functions.
2502
+ * @private
2503
+ */
2504
+ function createMergedResultFunction(one, two) {
2505
+ return function mergedResult() {
2506
+ var a = one.apply(this, arguments);
2507
+ var b = two.apply(this, arguments);
2508
+ if (a == null) {
2509
+ return b;
2510
+ } else if (b == null) {
2511
+ return a;
2512
+ }
2513
+ var c = {};
2514
+ mergeIntoWithNoDuplicateKeys(c, a);
2515
+ mergeIntoWithNoDuplicateKeys(c, b);
2516
+ return c;
2517
+ };
2518
+ }
2519
+
2520
+ /**
2521
+ * Creates a function that invokes two functions and ignores their return vales.
2522
+ *
2523
+ * @param {function} one Function to invoke first.
2524
+ * @param {function} two Function to invoke second.
2525
+ * @return {function} Function that invokes the two argument functions.
2526
+ * @private
2527
+ */
2528
+ function createChainedFunction(one, two) {
2529
+ return function chainedFunction() {
2530
+ one.apply(this, arguments);
2531
+ two.apply(this, arguments);
2532
+ };
2533
+ }
2534
+
2535
+ /**
2536
+ * Binds a method to the component.
2537
+ *
2538
+ * @param {object} component Component whose method is going to be bound.
2539
+ * @param {function} method Method to be bound.
2540
+ * @return {function} The bound method.
2541
+ */
2542
+ function bindAutoBindMethod(component, method) {
2543
+ var boundMethod = method.bind(component);
2544
+ if (process.env.NODE_ENV !== 'production') {
2545
+ boundMethod.__reactBoundContext = component;
2546
+ boundMethod.__reactBoundMethod = method;
2547
+ boundMethod.__reactBoundArguments = null;
2548
+ var componentName = component.constructor.displayName;
2549
+ var _bind = boundMethod.bind;
2550
+ boundMethod.bind = function (newThis) {
2551
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
2552
+ args[_key - 1] = arguments[_key];
2553
+ }
2554
+
2555
+ // User is trying to bind() an autobound method; we effectively will
2556
+ // ignore the value of "this" that the user is trying to use, so
2557
+ // let's warn.
2558
+ if (newThis !== component && newThis !== null) {
2559
+ process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;
2560
+ } else if (!args.length) {
2561
+ process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;
2562
+ return boundMethod;
2563
+ }
2564
+ var reboundMethod = _bind.apply(boundMethod, arguments);
2565
+ reboundMethod.__reactBoundContext = component;
2566
+ reboundMethod.__reactBoundMethod = method;
2567
+ reboundMethod.__reactBoundArguments = args;
2568
+ return reboundMethod;
2569
+ };
2570
+ }
2571
+ return boundMethod;
2572
+ }
2573
+
2574
+ /**
2575
+ * Binds all auto-bound methods in a component.
2576
+ *
2577
+ * @param {object} component Component whose method is going to be bound.
2578
+ */
2579
+ function bindAutoBindMethods(component) {
2580
+ var pairs = component.__reactAutoBindPairs;
2581
+ for (var i = 0; i < pairs.length; i += 2) {
2582
+ var autoBindKey = pairs[i];
2583
+ var method = pairs[i + 1];
2584
+ component[autoBindKey] = bindAutoBindMethod(component, method);
2585
+ }
2586
+ }
2587
+
2588
+ /**
2589
+ * Add more to the ReactClass base class. These are all legacy features and
2590
+ * therefore not already part of the modern ReactComponent.
2591
+ */
2592
+ var ReactClassMixin = {
2593
+
2594
+ /**
2595
+ * TODO: This will be deprecated because state should always keep a consistent
2596
+ * type signature and the only use case for this, is to avoid that.
2597
+ */
2598
+ replaceState: function (newState, callback) {
2599
+ this.updater.enqueueReplaceState(this, newState);
2600
+ if (callback) {
2601
+ this.updater.enqueueCallback(this, callback, 'replaceState');
2602
+ }
2603
+ },
2604
+
2605
+ /**
2606
+ * Checks whether or not this composite component is mounted.
2607
+ * @return {boolean} True if mounted, false otherwise.
2608
+ * @protected
2609
+ * @final
2610
+ */
2611
+ isMounted: function () {
2612
+ return this.updater.isMounted(this);
2613
+ }
2614
+ };
2615
+
2616
+ var ReactClassComponent = function () {};
2617
+ _assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
2618
+
2619
+ /**
2620
+ * Module for creating composite components.
2621
+ *
2622
+ * @class ReactClass
2623
+ */
2624
+ var ReactClass = {
2625
+
2626
+ /**
2627
+ * Creates a composite component class given a class specification.
2628
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
2629
+ *
2630
+ * @param {object} spec Class specification (which must define `render`).
2631
+ * @return {function} Component constructor function.
2632
+ * @public
2633
+ */
2634
+ createClass: function (spec) {
2635
+ var Constructor = function (props, context, updater) {
2636
+ // This constructor gets overridden by mocks. The argument is used
2637
+ // by mocks to assert on what gets mounted.
2638
+
2639
+ if (process.env.NODE_ENV !== 'production') {
2640
+ process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;
2641
+ }
2642
+
2643
+ // Wire up auto-binding
2644
+ if (this.__reactAutoBindPairs.length) {
2645
+ bindAutoBindMethods(this);
2646
+ }
2647
+
2648
+ this.props = props;
2649
+ this.context = context;
2650
+ this.refs = emptyObject;
2651
+ this.updater = updater || ReactNoopUpdateQueue;
2652
+
2653
+ this.state = null;
2654
+
2655
+ // ReactClasses doesn't have constructors. Instead, they use the
2656
+ // getInitialState and componentWillMount methods for initialization.
2657
+
2658
+ var initialState = this.getInitialState ? this.getInitialState() : null;
2659
+ if (process.env.NODE_ENV !== 'production') {
2660
+ // We allow auto-mocks to proceed as if they're returning null.
2661
+ if (initialState === undefined && this.getInitialState._isMockFunction) {
2662
+ // This is probably bad practice. Consider warning here and
2663
+ // deprecating this convenience.
2664
+ initialState = null;
2665
+ }
2666
+ }
2667
+ !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;
2668
+
2669
+ this.state = initialState;
2670
+ };
2671
+ Constructor.prototype = new ReactClassComponent();
2672
+ Constructor.prototype.constructor = Constructor;
2673
+ Constructor.prototype.__reactAutoBindPairs = [];
2674
+
2675
+ injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
2676
+
2677
+ mixSpecIntoComponent(Constructor, spec);
2678
+
2679
+ // Initialize the defaultProps property after all mixins have been merged.
2680
+ if (Constructor.getDefaultProps) {
2681
+ Constructor.defaultProps = Constructor.getDefaultProps();
2682
+ }
2683
+
2684
+ if (process.env.NODE_ENV !== 'production') {
2685
+ // This is a tag to indicate that the use of these method names is ok,
2686
+ // since it's used with createClass. If it's not, then it's likely a
2687
+ // mistake so we'll warn you to use the static property, property
2688
+ // initializer or constructor respectively.
2689
+ if (Constructor.getDefaultProps) {
2690
+ Constructor.getDefaultProps.isReactClassApproved = {};
2691
+ }
2692
+ if (Constructor.prototype.getInitialState) {
2693
+ Constructor.prototype.getInitialState.isReactClassApproved = {};
2694
+ }
2695
+ }
2696
+
2697
+ !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;
2698
+
2699
+ if (process.env.NODE_ENV !== 'production') {
2700
+ process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
2701
+ process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;
2702
+ }
2703
+
2704
+ // Reduce time spent doing lookups by setting these on the prototype.
2705
+ for (var methodName in ReactClassInterface) {
2706
+ if (!Constructor.prototype[methodName]) {
2707
+ Constructor.prototype[methodName] = null;
2708
+ }
2709
+ }
2710
+
2711
+ return Constructor;
2712
+ },
2713
+
2714
+ injection: {
2715
+ injectMixin: function (mixin) {
2716
+ injectedMixins.push(mixin);
2717
+ }
2718
+ }
2719
+
2720
+ };
2721
+
2722
+ module.exports = ReactClass;
2723
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
2724
+
2725
+ /***/ },
2726
+ /* 23 */
2727
+ /***/ function(module, exports, __webpack_require__) {
2728
+
2729
+ /**
2730
+ * Copyright 2013-present, Facebook, Inc.
2731
+ * All rights reserved.
2732
+ *
2733
+ * This source code is licensed under the BSD-style license found in the
2734
+ * LICENSE file in the root directory of this source tree. An additional grant
2735
+ * of patent rights can be found in the PATENTS file in the same directory.
2736
+ *
2737
+ * @providesModule ReactPropTypeLocations
2738
+ */
2739
+
2740
+ 'use strict';
2741
+
2742
+ var keyMirror = __webpack_require__(24);
2743
+
2744
+ var ReactPropTypeLocations = keyMirror({
2745
+ prop: null,
2746
+ context: null,
2747
+ childContext: null
2748
+ });
2749
+
2750
+ module.exports = ReactPropTypeLocations;
2751
+
2752
+ /***/ },
2753
+ /* 24 */
2754
+ /***/ function(module, exports, __webpack_require__) {
2755
+
2756
+ /* WEBPACK VAR INJECTION */(function(process) {/**
2757
+ * Copyright (c) 2013-present, Facebook, Inc.
2758
+ * All rights reserved.
2759
+ *
2760
+ * This source code is licensed under the BSD-style license found in the
2761
+ * LICENSE file in the root directory of this source tree. An additional grant
2762
+ * of patent rights can be found in the PATENTS file in the same directory.
2763
+ *
2764
+ * @typechecks static-only
2765
+ */
2766
+
2767
+ 'use strict';
2768
+
2769
+ var invariant = __webpack_require__(9);
2770
+
2771
+ /**
2772
+ * Constructs an enumeration with keys equal to their value.
2773
+ *
2774
+ * For example:
2775
+ *
2776
+ * var COLORS = keyMirror({blue: null, red: null});
2777
+ * var myColor = COLORS.blue;
2778
+ * var isColorValid = !!COLORS[myColor];
2779
+ *
2780
+ * The last line could not be performed if the values of the generated enum were
2781
+ * not equal to their keys.
2782
+ *
2783
+ * Input: {key1: val1, key2: val2}
2784
+ * Output: {key1: key1, key2: key2}
2785
+ *
2786
+ * @param {object} obj
2787
+ * @return {object}
2788
+ */
2789
+ var keyMirror = function keyMirror(obj) {
2790
+ var ret = {};
2791
+ var key;
2792
+ !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;
2793
+ for (key in obj) {
2794
+ if (!obj.hasOwnProperty(key)) {
2795
+ continue;
2796
+ }
2797
+ ret[key] = key;
2798
+ }
2799
+ return ret;
2800
+ };
2801
+
2802
+ module.exports = keyMirror;
2803
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
2804
+
2805
+ /***/ },
2806
+ /* 25 */
2807
+ /***/ function(module, exports, __webpack_require__) {
2808
+
2809
+ /* WEBPACK VAR INJECTION */(function(process) {/**
2810
+ * Copyright 2013-present, Facebook, Inc.
2811
+ * All rights reserved.
2812
+ *
2813
+ * This source code is licensed under the BSD-style license found in the
2814
+ * LICENSE file in the root directory of this source tree. An additional grant
2815
+ * of patent rights can be found in the PATENTS file in the same directory.
2816
+ *
2817
+ * @providesModule ReactPropTypeLocationNames
2818
+ */
2819
+
2820
+ 'use strict';
2821
+
2822
+ var ReactPropTypeLocationNames = {};
2823
+
2824
+ if (process.env.NODE_ENV !== 'production') {
2825
+ ReactPropTypeLocationNames = {
2826
+ prop: 'prop',
2827
+ context: 'context',
2828
+ childContext: 'child context'
2829
+ };
2830
+ }
2831
+
2832
+ module.exports = ReactPropTypeLocationNames;
2833
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
2834
+
2835
+ /***/ },
2836
+ /* 26 */
2837
+ /***/ function(module, exports) {
2838
+
2839
+ "use strict";
2840
+
2841
+ /**
2842
+ * Copyright (c) 2013-present, Facebook, Inc.
2843
+ * All rights reserved.
2844
+ *
2845
+ * This source code is licensed under the BSD-style license found in the
2846
+ * LICENSE file in the root directory of this source tree. An additional grant
2847
+ * of patent rights can be found in the PATENTS file in the same directory.
2848
+ *
2849
+ */
2850
+
2851
+ /**
2852
+ * Allows extraction of a minified key. Let's the build system minify keys
2853
+ * without losing the ability to dynamically use key strings as values
2854
+ * themselves. Pass in an object with a single key/val pair and it will return
2855
+ * you the string key of that single record. Suppose you want to grab the
2856
+ * value for a key 'className' inside of an object. Key/val minification may
2857
+ * have aliased that key to be 'xa12'. keyOf({className: null}) will return
2858
+ * 'xa12' in that case. Resolve keys you want to use once at startup time, then
2859
+ * reuse those resolutions.
2860
+ */
2861
+ var keyOf = function keyOf(oneKeyObj) {
2862
+ var key;
2863
+ for (key in oneKeyObj) {
2864
+ if (!oneKeyObj.hasOwnProperty(key)) {
2865
+ continue;
2866
+ }
2867
+ return key;
2868
+ }
2869
+ return null;
2870
+ };
2871
+
2872
+ module.exports = keyOf;
2873
+
2874
+ /***/ },
2875
+ /* 27 */
2876
+ /***/ function(module, exports, __webpack_require__) {
2877
+
2878
+ /* WEBPACK VAR INJECTION */(function(process) {/**
2879
+ * Copyright 2013-present, Facebook, Inc.
2880
+ * All rights reserved.
2881
+ *
2882
+ * This source code is licensed under the BSD-style license found in the
2883
+ * LICENSE file in the root directory of this source tree. An additional grant
2884
+ * of patent rights can be found in the PATENTS file in the same directory.
2885
+ *
2886
+ * @providesModule ReactDOMFactories
2887
+ */
2888
+
2889
+ 'use strict';
2890
+
2891
+ var ReactElement = __webpack_require__(10);
2892
+
2893
+ /**
2894
+ * Create a factory that creates HTML tag elements.
2895
+ *
2896
+ * @private
2897
+ */
2898
+ var createDOMFactory = ReactElement.createFactory;
2899
+ if (process.env.NODE_ENV !== 'production') {
2900
+ var ReactElementValidator = __webpack_require__(28);
2901
+ createDOMFactory = ReactElementValidator.createFactory;
2902
+ }
2903
+
2904
+ /**
2905
+ * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
2906
+ * This is also accessible via `React.DOM`.
2907
+ *
2908
+ * @public
2909
+ */
2910
+ var ReactDOMFactories = {
2911
+ a: createDOMFactory('a'),
2912
+ abbr: createDOMFactory('abbr'),
2913
+ address: createDOMFactory('address'),
2914
+ area: createDOMFactory('area'),
2915
+ article: createDOMFactory('article'),
2916
+ aside: createDOMFactory('aside'),
2917
+ audio: createDOMFactory('audio'),
2918
+ b: createDOMFactory('b'),
2919
+ base: createDOMFactory('base'),
2920
+ bdi: createDOMFactory('bdi'),
2921
+ bdo: createDOMFactory('bdo'),
2922
+ big: createDOMFactory('big'),
2923
+ blockquote: createDOMFactory('blockquote'),
2924
+ body: createDOMFactory('body'),
2925
+ br: createDOMFactory('br'),
2926
+ button: createDOMFactory('button'),
2927
+ canvas: createDOMFactory('canvas'),
2928
+ caption: createDOMFactory('caption'),
2929
+ cite: createDOMFactory('cite'),
2930
+ code: createDOMFactory('code'),
2931
+ col: createDOMFactory('col'),
2932
+ colgroup: createDOMFactory('colgroup'),
2933
+ data: createDOMFactory('data'),
2934
+ datalist: createDOMFactory('datalist'),
2935
+ dd: createDOMFactory('dd'),
2936
+ del: createDOMFactory('del'),
2937
+ details: createDOMFactory('details'),
2938
+ dfn: createDOMFactory('dfn'),
2939
+ dialog: createDOMFactory('dialog'),
2940
+ div: createDOMFactory('div'),
2941
+ dl: createDOMFactory('dl'),
2942
+ dt: createDOMFactory('dt'),
2943
+ em: createDOMFactory('em'),
2944
+ embed: createDOMFactory('embed'),
2945
+ fieldset: createDOMFactory('fieldset'),
2946
+ figcaption: createDOMFactory('figcaption'),
2947
+ figure: createDOMFactory('figure'),
2948
+ footer: createDOMFactory('footer'),
2949
+ form: createDOMFactory('form'),
2950
+ h1: createDOMFactory('h1'),
2951
+ h2: createDOMFactory('h2'),
2952
+ h3: createDOMFactory('h3'),
2953
+ h4: createDOMFactory('h4'),
2954
+ h5: createDOMFactory('h5'),
2955
+ h6: createDOMFactory('h6'),
2956
+ head: createDOMFactory('head'),
2957
+ header: createDOMFactory('header'),
2958
+ hgroup: createDOMFactory('hgroup'),
2959
+ hr: createDOMFactory('hr'),
2960
+ html: createDOMFactory('html'),
2961
+ i: createDOMFactory('i'),
2962
+ iframe: createDOMFactory('iframe'),
2963
+ img: createDOMFactory('img'),
2964
+ input: createDOMFactory('input'),
2965
+ ins: createDOMFactory('ins'),
2966
+ kbd: createDOMFactory('kbd'),
2967
+ keygen: createDOMFactory('keygen'),
2968
+ label: createDOMFactory('label'),
2969
+ legend: createDOMFactory('legend'),
2970
+ li: createDOMFactory('li'),
2971
+ link: createDOMFactory('link'),
2972
+ main: createDOMFactory('main'),
2973
+ map: createDOMFactory('map'),
2974
+ mark: createDOMFactory('mark'),
2975
+ menu: createDOMFactory('menu'),
2976
+ menuitem: createDOMFactory('menuitem'),
2977
+ meta: createDOMFactory('meta'),
2978
+ meter: createDOMFactory('meter'),
2979
+ nav: createDOMFactory('nav'),
2980
+ noscript: createDOMFactory('noscript'),
2981
+ object: createDOMFactory('object'),
2982
+ ol: createDOMFactory('ol'),
2983
+ optgroup: createDOMFactory('optgroup'),
2984
+ option: createDOMFactory('option'),
2985
+ output: createDOMFactory('output'),
2986
+ p: createDOMFactory('p'),
2987
+ param: createDOMFactory('param'),
2988
+ picture: createDOMFactory('picture'),
2989
+ pre: createDOMFactory('pre'),
2990
+ progress: createDOMFactory('progress'),
2991
+ q: createDOMFactory('q'),
2992
+ rp: createDOMFactory('rp'),
2993
+ rt: createDOMFactory('rt'),
2994
+ ruby: createDOMFactory('ruby'),
2995
+ s: createDOMFactory('s'),
2996
+ samp: createDOMFactory('samp'),
2997
+ script: createDOMFactory('script'),
2998
+ section: createDOMFactory('section'),
2999
+ select: createDOMFactory('select'),
3000
+ small: createDOMFactory('small'),
3001
+ source: createDOMFactory('source'),
3002
+ span: createDOMFactory('span'),
3003
+ strong: createDOMFactory('strong'),
3004
+ style: createDOMFactory('style'),
3005
+ sub: createDOMFactory('sub'),
3006
+ summary: createDOMFactory('summary'),
3007
+ sup: createDOMFactory('sup'),
3008
+ table: createDOMFactory('table'),
3009
+ tbody: createDOMFactory('tbody'),
3010
+ td: createDOMFactory('td'),
3011
+ textarea: createDOMFactory('textarea'),
3012
+ tfoot: createDOMFactory('tfoot'),
3013
+ th: createDOMFactory('th'),
3014
+ thead: createDOMFactory('thead'),
3015
+ time: createDOMFactory('time'),
3016
+ title: createDOMFactory('title'),
3017
+ tr: createDOMFactory('tr'),
3018
+ track: createDOMFactory('track'),
3019
+ u: createDOMFactory('u'),
3020
+ ul: createDOMFactory('ul'),
3021
+ 'var': createDOMFactory('var'),
3022
+ video: createDOMFactory('video'),
3023
+ wbr: createDOMFactory('wbr'),
3024
+
3025
+ // SVG
3026
+ circle: createDOMFactory('circle'),
3027
+ clipPath: createDOMFactory('clipPath'),
3028
+ defs: createDOMFactory('defs'),
3029
+ ellipse: createDOMFactory('ellipse'),
3030
+ g: createDOMFactory('g'),
3031
+ image: createDOMFactory('image'),
3032
+ line: createDOMFactory('line'),
3033
+ linearGradient: createDOMFactory('linearGradient'),
3034
+ mask: createDOMFactory('mask'),
3035
+ path: createDOMFactory('path'),
3036
+ pattern: createDOMFactory('pattern'),
3037
+ polygon: createDOMFactory('polygon'),
3038
+ polyline: createDOMFactory('polyline'),
3039
+ radialGradient: createDOMFactory('radialGradient'),
3040
+ rect: createDOMFactory('rect'),
3041
+ stop: createDOMFactory('stop'),
3042
+ svg: createDOMFactory('svg'),
3043
+ text: createDOMFactory('text'),
3044
+ tspan: createDOMFactory('tspan')
3045
+ };
3046
+
3047
+ module.exports = ReactDOMFactories;
3048
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
3049
+
3050
+ /***/ },
3051
+ /* 28 */
3052
+ /***/ function(module, exports, __webpack_require__) {
3053
+
3054
+ /* WEBPACK VAR INJECTION */(function(process) {/**
3055
+ * Copyright 2014-present, Facebook, Inc.
3056
+ * All rights reserved.
3057
+ *
3058
+ * This source code is licensed under the BSD-style license found in the
3059
+ * LICENSE file in the root directory of this source tree. An additional grant
3060
+ * of patent rights can be found in the PATENTS file in the same directory.
3061
+ *
3062
+ * @providesModule ReactElementValidator
3063
+ */
3064
+
3065
+ /**
3066
+ * ReactElementValidator provides a wrapper around a element factory
3067
+ * which validates the props passed to the element. This is intended to be
3068
+ * used only in DEV and could be replaced by a static type checker for languages
3069
+ * that support it.
3070
+ */
3071
+
3072
+ 'use strict';
3073
+
3074
+ var ReactCurrentOwner = __webpack_require__(11);
3075
+ var ReactComponentTreeHook = __webpack_require__(29);
3076
+ var ReactElement = __webpack_require__(10);
3077
+ var ReactPropTypeLocations = __webpack_require__(23);
3078
+
3079
+ var checkReactTypeSpec = __webpack_require__(30);
3080
+
3081
+ var canDefineProperty = __webpack_require__(14);
3082
+ var getIteratorFn = __webpack_require__(16);
3083
+ var warning = __webpack_require__(12);
3084
+
3085
+ function getDeclarationErrorAddendum() {
3086
+ if (ReactCurrentOwner.current) {
3087
+ var name = ReactCurrentOwner.current.getName();
3088
+ if (name) {
3089
+ return ' Check the render method of `' + name + '`.';
3090
+ }
3091
+ }
3092
+ return '';
3093
+ }
3094
+
3095
+ /**
3096
+ * Warn if there's no key explicitly set on dynamic arrays of children or
3097
+ * object keys are not valid. This allows us to keep track of children between
3098
+ * updates.
3099
+ */
3100
+ var ownerHasKeyUseWarning = {};
3101
+
3102
+ function getCurrentComponentErrorInfo(parentType) {
3103
+ var info = getDeclarationErrorAddendum();
3104
+
3105
+ if (!info) {
3106
+ var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
3107
+ if (parentName) {
3108
+ info = ' Check the top-level render call using <' + parentName + '>.';
3109
+ }
3110
+ }
3111
+ return info;
3112
+ }
3113
+
3114
+ /**
3115
+ * Warn if the element doesn't have an explicit key assigned to it.
3116
+ * This element is in an array. The array could grow and shrink or be
3117
+ * reordered. All children that haven't already been validated are required to
3118
+ * have a "key" property assigned to it. Error statuses are cached so a warning
3119
+ * will only be shown once.
3120
+ *
3121
+ * @internal
3122
+ * @param {ReactElement} element Element that requires a key.
3123
+ * @param {*} parentType element's parent's type.
3124
+ */
3125
+ function validateExplicitKey(element, parentType) {
3126
+ if (!element._store || element._store.validated || element.key != null) {
3127
+ return;
3128
+ }
3129
+ element._store.validated = true;
3130
+
3131
+ var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});
3132
+
3133
+ var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
3134
+ if (memoizer[currentComponentErrorInfo]) {
3135
+ return;
3136
+ }
3137
+ memoizer[currentComponentErrorInfo] = true;
3138
+
3139
+ // Usually the current owner is the offender, but if it accepts children as a
3140
+ // property, it may be the creator of the child that's responsible for
3141
+ // assigning it a key.
3142
+ var childOwner = '';
3143
+ if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
3144
+ // Give the component that originally created this child.
3145
+ childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
3146
+ }
3147
+
3148
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;
3149
+ }
3150
+
3151
+ /**
3152
+ * Ensure that every element either is passed in a static location, in an
3153
+ * array with an explicit keys property defined, or in an object literal
3154
+ * with valid key property.
3155
+ *
3156
+ * @internal
3157
+ * @param {ReactNode} node Statically passed child of any type.
3158
+ * @param {*} parentType node's parent's type.
3159
+ */
3160
+ function validateChildKeys(node, parentType) {
3161
+ if (typeof node !== 'object') {
3162
+ return;
3163
+ }
3164
+ if (Array.isArray(node)) {
3165
+ for (var i = 0; i < node.length; i++) {
3166
+ var child = node[i];
3167
+ if (ReactElement.isValidElement(child)) {
3168
+ validateExplicitKey(child, parentType);
3169
+ }
3170
+ }
3171
+ } else if (ReactElement.isValidElement(node)) {
3172
+ // This element was passed in a valid location.
3173
+ if (node._store) {
3174
+ node._store.validated = true;
3175
+ }
3176
+ } else if (node) {
3177
+ var iteratorFn = getIteratorFn(node);
3178
+ // Entry iterators provide implicit keys.
3179
+ if (iteratorFn) {
3180
+ if (iteratorFn !== node.entries) {
3181
+ var iterator = iteratorFn.call(node);
3182
+ var step;
3183
+ while (!(step = iterator.next()).done) {
3184
+ if (ReactElement.isValidElement(step.value)) {
3185
+ validateExplicitKey(step.value, parentType);
3186
+ }
3187
+ }
3188
+ }
3189
+ }
3190
+ }
3191
+ }
3192
+
3193
+ /**
3194
+ * Given an element, validate that its props follow the propTypes definition,
3195
+ * provided by the type.
3196
+ *
3197
+ * @param {ReactElement} element
3198
+ */
3199
+ function validatePropTypes(element) {
3200
+ var componentClass = element.type;
3201
+ if (typeof componentClass !== 'function') {
3202
+ return;
3203
+ }
3204
+ var name = componentClass.displayName || componentClass.name;
3205
+ if (componentClass.propTypes) {
3206
+ checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);
3207
+ }
3208
+ if (typeof componentClass.getDefaultProps === 'function') {
3209
+ process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;
3210
+ }
3211
+ }
3212
+
3213
+ var ReactElementValidator = {
3214
+
3215
+ createElement: function (type, props, children) {
3216
+ var validType = typeof type === 'string' || typeof type === 'function';
3217
+ // We warn in this case but don't throw. We expect the element creation to
3218
+ // succeed and there will likely be errors in render.
3219
+ if (!validType) {
3220
+ process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;
3221
+ }
3222
+
3223
+ var element = ReactElement.createElement.apply(this, arguments);
3224
+
3225
+ // The result can be nullish if a mock or a custom function is used.
3226
+ // TODO: Drop this when these are no longer allowed as the type argument.
3227
+ if (element == null) {
3228
+ return element;
3229
+ }
3230
+
3231
+ // Skip key warning if the type isn't valid since our key validation logic
3232
+ // doesn't expect a non-string/function type and can throw confusing errors.
3233
+ // We don't want exception behavior to differ between dev and prod.
3234
+ // (Rendering will throw with a helpful message and as soon as the type is
3235
+ // fixed, the key warnings will appear.)
3236
+ if (validType) {
3237
+ for (var i = 2; i < arguments.length; i++) {
3238
+ validateChildKeys(arguments[i], type);
3239
+ }
3240
+ }
3241
+
3242
+ validatePropTypes(element);
3243
+
3244
+ return element;
3245
+ },
3246
+
3247
+ createFactory: function (type) {
3248
+ var validatedFactory = ReactElementValidator.createElement.bind(null, type);
3249
+ // Legacy hook TODO: Warn if this is accessed
3250
+ validatedFactory.type = type;
3251
+
3252
+ if (process.env.NODE_ENV !== 'production') {
3253
+ if (canDefineProperty) {
3254
+ Object.defineProperty(validatedFactory, 'type', {
3255
+ enumerable: false,
3256
+ get: function () {
3257
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;
3258
+ Object.defineProperty(this, 'type', {
3259
+ value: type
3260
+ });
3261
+ return type;
3262
+ }
3263
+ });
3264
+ }
3265
+ }
3266
+
3267
+ return validatedFactory;
3268
+ },
3269
+
3270
+ cloneElement: function (element, props, children) {
3271
+ var newElement = ReactElement.cloneElement.apply(this, arguments);
3272
+ for (var i = 2; i < arguments.length; i++) {
3273
+ validateChildKeys(arguments[i], newElement.type);
3274
+ }
3275
+ validatePropTypes(newElement);
3276
+ return newElement;
3277
+ }
3278
+
3279
+ };
3280
+
3281
+ module.exports = ReactElementValidator;
3282
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
3283
+
3284
+ /***/ },
3285
+ /* 29 */
3286
+ /***/ function(module, exports, __webpack_require__) {
3287
+
3288
+ /* WEBPACK VAR INJECTION */(function(process) {/**
3289
+ * Copyright 2016-present, Facebook, Inc.
3290
+ * All rights reserved.
3291
+ *
3292
+ * This source code is licensed under the BSD-style license found in the
3293
+ * LICENSE file in the root directory of this source tree. An additional grant
3294
+ * of patent rights can be found in the PATENTS file in the same directory.
3295
+ *
3296
+ * @providesModule ReactComponentTreeHook
3297
+ */
3298
+
3299
+ 'use strict';
3300
+
3301
+ var _prodInvariant = __webpack_require__(8);
3302
+
3303
+ var ReactCurrentOwner = __webpack_require__(11);
3304
+
3305
+ var invariant = __webpack_require__(9);
3306
+ var warning = __webpack_require__(12);
3307
+
3308
+ function isNative(fn) {
3309
+ // Based on isNative() from Lodash
3310
+ var funcToString = Function.prototype.toString;
3311
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
3312
+ var reIsNative = RegExp('^' + funcToString
3313
+ // Take an example native function source for comparison
3314
+ .call(hasOwnProperty)
3315
+ // Strip regex characters so we can use it for regex
3316
+ .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
3317
+ // Remove hasOwnProperty from the template to make it generic
3318
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
3319
+ try {
3320
+ var source = funcToString.call(fn);
3321
+ return reIsNative.test(source);
3322
+ } catch (err) {
3323
+ return false;
3324
+ }
3325
+ }
3326
+
3327
+ var canUseCollections =
3328
+ // Array.from
3329
+ typeof Array.from === 'function' &&
3330
+ // Map
3331
+ typeof Map === 'function' && isNative(Map) &&
3332
+ // Map.prototype.keys
3333
+ Map.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&
3334
+ // Set
3335
+ typeof Set === 'function' && isNative(Set) &&
3336
+ // Set.prototype.keys
3337
+ Set.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);
3338
+
3339
+ var itemMap;
3340
+ var rootIDSet;
3341
+
3342
+ var itemByKey;
3343
+ var rootByKey;
3344
+
3345
+ if (canUseCollections) {
3346
+ itemMap = new Map();
3347
+ rootIDSet = new Set();
3348
+ } else {
3349
+ itemByKey = {};
3350
+ rootByKey = {};
3351
+ }
3352
+
3353
+ var unmountedIDs = [];
3354
+
3355
+ // Use non-numeric keys to prevent V8 performance issues:
3356
+ // https://github.com/facebook/react/pull/7232
3357
+ function getKeyFromID(id) {
3358
+ return '.' + id;
3359
+ }
3360
+ function getIDFromKey(key) {
3361
+ return parseInt(key.substr(1), 10);
3362
+ }
3363
+
3364
+ function get(id) {
3365
+ if (canUseCollections) {
3366
+ return itemMap.get(id);
3367
+ } else {
3368
+ var key = getKeyFromID(id);
3369
+ return itemByKey[key];
3370
+ }
3371
+ }
3372
+
3373
+ function remove(id) {
3374
+ if (canUseCollections) {
3375
+ itemMap['delete'](id);
3376
+ } else {
3377
+ var key = getKeyFromID(id);
3378
+ delete itemByKey[key];
3379
+ }
3380
+ }
3381
+
3382
+ function create(id, element, parentID) {
3383
+ var item = {
3384
+ element: element,
3385
+ parentID: parentID,
3386
+ text: null,
3387
+ childIDs: [],
3388
+ isMounted: false,
3389
+ updateCount: 0
3390
+ };
3391
+
3392
+ if (canUseCollections) {
3393
+ itemMap.set(id, item);
3394
+ } else {
3395
+ var key = getKeyFromID(id);
3396
+ itemByKey[key] = item;
3397
+ }
3398
+ }
3399
+
3400
+ function addRoot(id) {
3401
+ if (canUseCollections) {
3402
+ rootIDSet.add(id);
3403
+ } else {
3404
+ var key = getKeyFromID(id);
3405
+ rootByKey[key] = true;
3406
+ }
3407
+ }
3408
+
3409
+ function removeRoot(id) {
3410
+ if (canUseCollections) {
3411
+ rootIDSet['delete'](id);
3412
+ } else {
3413
+ var key = getKeyFromID(id);
3414
+ delete rootByKey[key];
3415
+ }
3416
+ }
3417
+
3418
+ function getRegisteredIDs() {
3419
+ if (canUseCollections) {
3420
+ return Array.from(itemMap.keys());
3421
+ } else {
3422
+ return Object.keys(itemByKey).map(getIDFromKey);
3423
+ }
3424
+ }
3425
+
3426
+ function getRootIDs() {
3427
+ if (canUseCollections) {
3428
+ return Array.from(rootIDSet.keys());
3429
+ } else {
3430
+ return Object.keys(rootByKey).map(getIDFromKey);
3431
+ }
3432
+ }
3433
+
3434
+ function purgeDeep(id) {
3435
+ var item = get(id);
3436
+ if (item) {
3437
+ var childIDs = item.childIDs;
3438
+
3439
+ remove(id);
3440
+ childIDs.forEach(purgeDeep);
3441
+ }
3442
+ }
3443
+
3444
+ function describeComponentFrame(name, source, ownerName) {
3445
+ return '\n in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
3446
+ }
3447
+
3448
+ function getDisplayName(element) {
3449
+ if (element == null) {
3450
+ return '#empty';
3451
+ } else if (typeof element === 'string' || typeof element === 'number') {
3452
+ return '#text';
3453
+ } else if (typeof element.type === 'string') {
3454
+ return element.type;
3455
+ } else {
3456
+ return element.type.displayName || element.type.name || 'Unknown';
3457
+ }
3458
+ }
3459
+
3460
+ function describeID(id) {
3461
+ var name = ReactComponentTreeHook.getDisplayName(id);
3462
+ var element = ReactComponentTreeHook.getElement(id);
3463
+ var ownerID = ReactComponentTreeHook.getOwnerID(id);
3464
+ var ownerName;
3465
+ if (ownerID) {
3466
+ ownerName = ReactComponentTreeHook.getDisplayName(ownerID);
3467
+ }
3468
+ process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;
3469
+ return describeComponentFrame(name, element && element._source, ownerName);
3470
+ }
3471
+
3472
+ var ReactComponentTreeHook = {
3473
+ onSetChildren: function (id, nextChildIDs) {
3474
+ var item = get(id);
3475
+ item.childIDs = nextChildIDs;
3476
+
3477
+ for (var i = 0; i < nextChildIDs.length; i++) {
3478
+ var nextChildID = nextChildIDs[i];
3479
+ var nextChild = get(nextChildID);
3480
+ !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;
3481
+ !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;
3482
+ !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;
3483
+ if (nextChild.parentID == null) {
3484
+ nextChild.parentID = id;
3485
+ // TODO: This shouldn't be necessary but mounting a new root during in
3486
+ // componentWillMount currently causes not-yet-mounted components to
3487
+ // be purged from our tree data so their parent ID is missing.
3488
+ }
3489
+ !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;
3490
+ }
3491
+ },
3492
+ onBeforeMountComponent: function (id, element, parentID) {
3493
+ create(id, element, parentID);
3494
+ },
3495
+ onBeforeUpdateComponent: function (id, element) {
3496
+ var item = get(id);
3497
+ if (!item || !item.isMounted) {
3498
+ // We may end up here as a result of setState() in componentWillUnmount().
3499
+ // In this case, ignore the element.
3500
+ return;
3501
+ }
3502
+ item.element = element;
3503
+ },
3504
+ onMountComponent: function (id) {
3505
+ var item = get(id);
3506
+ item.isMounted = true;
3507
+ var isRoot = item.parentID === 0;
3508
+ if (isRoot) {
3509
+ addRoot(id);
3510
+ }
3511
+ },
3512
+ onUpdateComponent: function (id) {
3513
+ var item = get(id);
3514
+ if (!item || !item.isMounted) {
3515
+ // We may end up here as a result of setState() in componentWillUnmount().
3516
+ // In this case, ignore the element.
3517
+ return;
3518
+ }
3519
+ item.updateCount++;
3520
+ },
3521
+ onUnmountComponent: function (id) {
3522
+ var item = get(id);
3523
+ if (item) {
3524
+ // We need to check if it exists.
3525
+ // `item` might not exist if it is inside an error boundary, and a sibling
3526
+ // error boundary child threw while mounting. Then this instance never
3527
+ // got a chance to mount, but it still gets an unmounting event during
3528
+ // the error boundary cleanup.
3529
+ item.isMounted = false;
3530
+ var isRoot = item.parentID === 0;
3531
+ if (isRoot) {
3532
+ removeRoot(id);
3533
+ }
3534
+ }
3535
+ unmountedIDs.push(id);
3536
+ },
3537
+ purgeUnmountedComponents: function () {
3538
+ if (ReactComponentTreeHook._preventPurging) {
3539
+ // Should only be used for testing.
3540
+ return;
3541
+ }
3542
+
3543
+ for (var i = 0; i < unmountedIDs.length; i++) {
3544
+ var id = unmountedIDs[i];
3545
+ purgeDeep(id);
3546
+ }
3547
+ unmountedIDs.length = 0;
3548
+ },
3549
+ isMounted: function (id) {
3550
+ var item = get(id);
3551
+ return item ? item.isMounted : false;
3552
+ },
3553
+ getCurrentStackAddendum: function (topElement) {
3554
+ var info = '';
3555
+ if (topElement) {
3556
+ var type = topElement.type;
3557
+ var name = typeof type === 'function' ? type.displayName || type.name : type;
3558
+ var owner = topElement._owner;
3559
+ info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());
3560
+ }
3561
+
3562
+ var currentOwner = ReactCurrentOwner.current;
3563
+ var id = currentOwner && currentOwner._debugID;
3564
+
3565
+ info += ReactComponentTreeHook.getStackAddendumByID(id);
3566
+ return info;
3567
+ },
3568
+ getStackAddendumByID: function (id) {
3569
+ var info = '';
3570
+ while (id) {
3571
+ info += describeID(id);
3572
+ id = ReactComponentTreeHook.getParentID(id);
3573
+ }
3574
+ return info;
3575
+ },
3576
+ getChildIDs: function (id) {
3577
+ var item = get(id);
3578
+ return item ? item.childIDs : [];
3579
+ },
3580
+ getDisplayName: function (id) {
3581
+ var element = ReactComponentTreeHook.getElement(id);
3582
+ if (!element) {
3583
+ return null;
3584
+ }
3585
+ return getDisplayName(element);
3586
+ },
3587
+ getElement: function (id) {
3588
+ var item = get(id);
3589
+ return item ? item.element : null;
3590
+ },
3591
+ getOwnerID: function (id) {
3592
+ var element = ReactComponentTreeHook.getElement(id);
3593
+ if (!element || !element._owner) {
3594
+ return null;
3595
+ }
3596
+ return element._owner._debugID;
3597
+ },
3598
+ getParentID: function (id) {
3599
+ var item = get(id);
3600
+ return item ? item.parentID : null;
3601
+ },
3602
+ getSource: function (id) {
3603
+ var item = get(id);
3604
+ var element = item ? item.element : null;
3605
+ var source = element != null ? element._source : null;
3606
+ return source;
3607
+ },
3608
+ getText: function (id) {
3609
+ var element = ReactComponentTreeHook.getElement(id);
3610
+ if (typeof element === 'string') {
3611
+ return element;
3612
+ } else if (typeof element === 'number') {
3613
+ return '' + element;
3614
+ } else {
3615
+ return null;
3616
+ }
3617
+ },
3618
+ getUpdateCount: function (id) {
3619
+ var item = get(id);
3620
+ return item ? item.updateCount : 0;
3621
+ },
3622
+
3623
+
3624
+ getRegisteredIDs: getRegisteredIDs,
3625
+
3626
+ getRootIDs: getRootIDs
3627
+ };
3628
+
3629
+ module.exports = ReactComponentTreeHook;
3630
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
3631
+
3632
+ /***/ },
3633
+ /* 30 */
3634
+ /***/ function(module, exports, __webpack_require__) {
3635
+
3636
+ /* WEBPACK VAR INJECTION */(function(process) {/**
3637
+ * Copyright 2013-present, Facebook, Inc.
3638
+ * All rights reserved.
3639
+ *
3640
+ * This source code is licensed under the BSD-style license found in the
3641
+ * LICENSE file in the root directory of this source tree. An additional grant
3642
+ * of patent rights can be found in the PATENTS file in the same directory.
3643
+ *
3644
+ * @providesModule checkReactTypeSpec
3645
+ */
3646
+
3647
+ 'use strict';
3648
+
3649
+ var _prodInvariant = __webpack_require__(8);
3650
+
3651
+ var ReactPropTypeLocationNames = __webpack_require__(25);
3652
+ var ReactPropTypesSecret = __webpack_require__(31);
3653
+
3654
+ var invariant = __webpack_require__(9);
3655
+ var warning = __webpack_require__(12);
3656
+
3657
+ var ReactComponentTreeHook;
3658
+
3659
+ if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
3660
+ // Temporary hack.
3661
+ // Inline requires don't work well with Jest:
3662
+ // https://github.com/facebook/react/issues/7240
3663
+ // Remove the inline requires when we don't need them anymore:
3664
+ // https://github.com/facebook/react/pull/7178
3665
+ ReactComponentTreeHook = __webpack_require__(29);
3666
+ }
3667
+
3668
+ var loggedTypeFailures = {};
3669
+
3670
+ /**
3671
+ * Assert that the values match with the type specs.
3672
+ * Error messages are memorized and will only be shown once.
3673
+ *
3674
+ * @param {object} typeSpecs Map of name to a ReactPropType
3675
+ * @param {object} values Runtime values that need to be type-checked
3676
+ * @param {string} location e.g. "prop", "context", "child context"
3677
+ * @param {string} componentName Name of the component for error messages.
3678
+ * @param {?object} element The React element that is being type-checked
3679
+ * @param {?number} debugID The React component instance that is being type-checked
3680
+ * @private
3681
+ */
3682
+ function checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {
3683
+ for (var typeSpecName in typeSpecs) {
3684
+ if (typeSpecs.hasOwnProperty(typeSpecName)) {
3685
+ var error;
3686
+ // Prop type validation may throw. In case they do, we don't want to
3687
+ // fail the render phase where it didn't fail before. So we log it.
3688
+ // After these have been cleaned up, we'll let them throw.
3689
+ try {
3690
+ // This is intentionally an invariant that gets caught. It's the same
3691
+ // behavior as without this statement except with a better message.
3692
+ !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;
3693
+ error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
3694
+ } catch (ex) {
3695
+ error = ex;
3696
+ }
3697
+ process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;
3698
+ if (error instanceof Error && !(error.message in loggedTypeFailures)) {
3699
+ // Only monitor this failure once because there tends to be a lot of the
3700
+ // same error.
3701
+ loggedTypeFailures[error.message] = true;
3702
+
3703
+ var componentStackInfo = '';
3704
+
3705
+ if (process.env.NODE_ENV !== 'production') {
3706
+ if (!ReactComponentTreeHook) {
3707
+ ReactComponentTreeHook = __webpack_require__(29);
3708
+ }
3709
+ if (debugID !== null) {
3710
+ componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);
3711
+ } else if (element !== null) {
3712
+ componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);
3713
+ }
3714
+ }
3715
+
3716
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;
3717
+ }
3718
+ }
3719
+ }
3720
+ }
3721
+
3722
+ module.exports = checkReactTypeSpec;
3723
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
3724
+
3725
+ /***/ },
3726
+ /* 31 */
3727
+ /***/ function(module, exports) {
3728
+
3729
+ /**
3730
+ * Copyright 2013-present, Facebook, Inc.
3731
+ * All rights reserved.
3732
+ *
3733
+ * This source code is licensed under the BSD-style license found in the
3734
+ * LICENSE file in the root directory of this source tree. An additional grant
3735
+ * of patent rights can be found in the PATENTS file in the same directory.
3736
+ *
3737
+ * @providesModule ReactPropTypesSecret
3738
+ */
3739
+
3740
+ 'use strict';
3741
+
3742
+ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
3743
+
3744
+ module.exports = ReactPropTypesSecret;
3745
+
3746
+ /***/ },
3747
+ /* 32 */
3748
+ /***/ function(module, exports, __webpack_require__) {
3749
+
3750
+ /* WEBPACK VAR INJECTION */(function(process) {/**
3751
+ * Copyright 2013-present, Facebook, Inc.
3752
+ * All rights reserved.
3753
+ *
3754
+ * This source code is licensed under the BSD-style license found in the
3755
+ * LICENSE file in the root directory of this source tree. An additional grant
3756
+ * of patent rights can be found in the PATENTS file in the same directory.
3757
+ *
3758
+ * @providesModule ReactPropTypes
3759
+ */
3760
+
3761
+ 'use strict';
3762
+
3763
+ var ReactElement = __webpack_require__(10);
3764
+ var ReactPropTypeLocationNames = __webpack_require__(25);
3765
+ var ReactPropTypesSecret = __webpack_require__(31);
3766
+
3767
+ var emptyFunction = __webpack_require__(13);
3768
+ var getIteratorFn = __webpack_require__(16);
3769
+ var warning = __webpack_require__(12);
3770
+
3771
+ /**
3772
+ * Collection of methods that allow declaration and validation of props that are
3773
+ * supplied to React components. Example usage:
3774
+ *
3775
+ * var Props = require('ReactPropTypes');
3776
+ * var MyArticle = React.createClass({
3777
+ * propTypes: {
3778
+ * // An optional string prop named "description".
3779
+ * description: Props.string,
3780
+ *
3781
+ * // A required enum prop named "category".
3782
+ * category: Props.oneOf(['News','Photos']).isRequired,
3783
+ *
3784
+ * // A prop named "dialog" that requires an instance of Dialog.
3785
+ * dialog: Props.instanceOf(Dialog).isRequired
3786
+ * },
3787
+ * render: function() { ... }
3788
+ * });
3789
+ *
3790
+ * A more formal specification of how these methods are used:
3791
+ *
3792
+ * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
3793
+ * decl := ReactPropTypes.{type}(.isRequired)?
3794
+ *
3795
+ * Each and every declaration produces a function with the same signature. This
3796
+ * allows the creation of custom validation functions. For example:
3797
+ *
3798
+ * var MyLink = React.createClass({
3799
+ * propTypes: {
3800
+ * // An optional string or URI prop named "href".
3801
+ * href: function(props, propName, componentName) {
3802
+ * var propValue = props[propName];
3803
+ * if (propValue != null && typeof propValue !== 'string' &&
3804
+ * !(propValue instanceof URI)) {
3805
+ * return new Error(
3806
+ * 'Expected a string or an URI for ' + propName + ' in ' +
3807
+ * componentName
3808
+ * );
3809
+ * }
3810
+ * }
3811
+ * },
3812
+ * render: function() {...}
3813
+ * });
3814
+ *
3815
+ * @internal
3816
+ */
3817
+
3818
+ var ANONYMOUS = '<<anonymous>>';
3819
+
3820
+ var ReactPropTypes = {
3821
+ array: createPrimitiveTypeChecker('array'),
3822
+ bool: createPrimitiveTypeChecker('boolean'),
3823
+ func: createPrimitiveTypeChecker('function'),
3824
+ number: createPrimitiveTypeChecker('number'),
3825
+ object: createPrimitiveTypeChecker('object'),
3826
+ string: createPrimitiveTypeChecker('string'),
3827
+ symbol: createPrimitiveTypeChecker('symbol'),
3828
+
3829
+ any: createAnyTypeChecker(),
3830
+ arrayOf: createArrayOfTypeChecker,
3831
+ element: createElementTypeChecker(),
3832
+ instanceOf: createInstanceTypeChecker,
3833
+ node: createNodeChecker(),
3834
+ objectOf: createObjectOfTypeChecker,
3835
+ oneOf: createEnumTypeChecker,
3836
+ oneOfType: createUnionTypeChecker,
3837
+ shape: createShapeTypeChecker
3838
+ };
3839
+
3840
+ /**
3841
+ * inlined Object.is polyfill to avoid requiring consumers ship their own
3842
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
3843
+ */
3844
+ /*eslint-disable no-self-compare*/
3845
+ function is(x, y) {
3846
+ // SameValue algorithm
3847
+ if (x === y) {
3848
+ // Steps 1-5, 7-10
3849
+ // Steps 6.b-6.e: +0 != -0
3850
+ return x !== 0 || 1 / x === 1 / y;
3851
+ } else {
3852
+ // Step 6.a: NaN == NaN
3853
+ return x !== x && y !== y;
3854
+ }
3855
+ }
3856
+ /*eslint-enable no-self-compare*/
3857
+
3858
+ /**
3859
+ * We use an Error-like object for backward compatibility as people may call
3860
+ * PropTypes directly and inspect their output. However we don't use real
3861
+ * Errors anymore. We don't inspect their stack anyway, and creating them
3862
+ * is prohibitively expensive if they are created too often, such as what
3863
+ * happens in oneOfType() for any type before the one that matched.
3864
+ */
3865
+ function PropTypeError(message) {
3866
+ this.message = message;
3867
+ this.stack = '';
3868
+ }
3869
+ // Make `instanceof Error` still work for returned errors.
3870
+ PropTypeError.prototype = Error.prototype;
3871
+
3872
+ function createChainableTypeChecker(validate) {
3873
+ if (process.env.NODE_ENV !== 'production') {
3874
+ var manualPropTypeCallCache = {};
3875
+ }
3876
+ function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
3877
+ componentName = componentName || ANONYMOUS;
3878
+ propFullName = propFullName || propName;
3879
+ if (process.env.NODE_ENV !== 'production') {
3880
+ if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {
3881
+ var cacheKey = componentName + ':' + propName;
3882
+ if (!manualPropTypeCallCache[cacheKey]) {
3883
+ process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;
3884
+ manualPropTypeCallCache[cacheKey] = true;
3885
+ }
3886
+ }
3887
+ }
3888
+ if (props[propName] == null) {
3889
+ var locationName = ReactPropTypeLocationNames[location];
3890
+ if (isRequired) {
3891
+ return new PropTypeError('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
3892
+ }
3893
+ return null;
3894
+ } else {
3895
+ return validate(props, propName, componentName, location, propFullName);
3896
+ }
3897
+ }
3898
+
3899
+ var chainedCheckType = checkType.bind(null, false);
3900
+ chainedCheckType.isRequired = checkType.bind(null, true);
3901
+
3902
+ return chainedCheckType;
3903
+ }
3904
+
3905
+ function createPrimitiveTypeChecker(expectedType) {
3906
+ function validate(props, propName, componentName, location, propFullName, secret) {
3907
+ var propValue = props[propName];
3908
+ var propType = getPropType(propValue);
3909
+ if (propType !== expectedType) {
3910
+ var locationName = ReactPropTypeLocationNames[location];
3911
+ // `propValue` being instance of, say, date/regexp, pass the 'object'
3912
+ // check, but we can offer a more precise error message here rather than
3913
+ // 'of type `object`'.
3914
+ var preciseType = getPreciseType(propValue);
3915
+
3916
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
3917
+ }
3918
+ return null;
3919
+ }
3920
+ return createChainableTypeChecker(validate);
3921
+ }
3922
+
3923
+ function createAnyTypeChecker() {
3924
+ return createChainableTypeChecker(emptyFunction.thatReturns(null));
3925
+ }
3926
+
3927
+ function createArrayOfTypeChecker(typeChecker) {
3928
+ function validate(props, propName, componentName, location, propFullName) {
3929
+ if (typeof typeChecker !== 'function') {
3930
+ return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
3931
+ }
3932
+ var propValue = props[propName];
3933
+ if (!Array.isArray(propValue)) {
3934
+ var locationName = ReactPropTypeLocationNames[location];
3935
+ var propType = getPropType(propValue);
3936
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
3937
+ }
3938
+ for (var i = 0; i < propValue.length; i++) {
3939
+ var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
3940
+ if (error instanceof Error) {
3941
+ return error;
3942
+ }
3943
+ }
3944
+ return null;
3945
+ }
3946
+ return createChainableTypeChecker(validate);
3947
+ }
3948
+
3949
+ function createElementTypeChecker() {
3950
+ function validate(props, propName, componentName, location, propFullName) {
3951
+ var propValue = props[propName];
3952
+ if (!ReactElement.isValidElement(propValue)) {
3953
+ var locationName = ReactPropTypeLocationNames[location];
3954
+ var propType = getPropType(propValue);
3955
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
3956
+ }
3957
+ return null;
3958
+ }
3959
+ return createChainableTypeChecker(validate);
3960
+ }
3961
+
3962
+ function createInstanceTypeChecker(expectedClass) {
3963
+ function validate(props, propName, componentName, location, propFullName) {
3964
+ if (!(props[propName] instanceof expectedClass)) {
3965
+ var locationName = ReactPropTypeLocationNames[location];
3966
+ var expectedClassName = expectedClass.name || ANONYMOUS;
3967
+ var actualClassName = getClassName(props[propName]);
3968
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
3969
+ }
3970
+ return null;
3971
+ }
3972
+ return createChainableTypeChecker(validate);
3973
+ }
3974
+
3975
+ function createEnumTypeChecker(expectedValues) {
3976
+ if (!Array.isArray(expectedValues)) {
3977
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;
3978
+ return emptyFunction.thatReturnsNull;
3979
+ }
3980
+
3981
+ function validate(props, propName, componentName, location, propFullName) {
3982
+ var propValue = props[propName];
3983
+ for (var i = 0; i < expectedValues.length; i++) {
3984
+ if (is(propValue, expectedValues[i])) {
3985
+ return null;
3986
+ }
3987
+ }
3988
+
3989
+ var locationName = ReactPropTypeLocationNames[location];
3990
+ var valuesString = JSON.stringify(expectedValues);
3991
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
3992
+ }
3993
+ return createChainableTypeChecker(validate);
3994
+ }
3995
+
3996
+ function createObjectOfTypeChecker(typeChecker) {
3997
+ function validate(props, propName, componentName, location, propFullName) {
3998
+ if (typeof typeChecker !== 'function') {
3999
+ return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
4000
+ }
4001
+ var propValue = props[propName];
4002
+ var propType = getPropType(propValue);
4003
+ if (propType !== 'object') {
4004
+ var locationName = ReactPropTypeLocationNames[location];
4005
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
4006
+ }
4007
+ for (var key in propValue) {
4008
+ if (propValue.hasOwnProperty(key)) {
4009
+ var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
4010
+ if (error instanceof Error) {
4011
+ return error;
4012
+ }
4013
+ }
4014
+ }
4015
+ return null;
4016
+ }
4017
+ return createChainableTypeChecker(validate);
4018
+ }
4019
+
4020
+ function createUnionTypeChecker(arrayOfTypeCheckers) {
4021
+ if (!Array.isArray(arrayOfTypeCheckers)) {
4022
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
4023
+ return emptyFunction.thatReturnsNull;
4024
+ }
4025
+
4026
+ function validate(props, propName, componentName, location, propFullName) {
4027
+ for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
4028
+ var checker = arrayOfTypeCheckers[i];
4029
+ if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
4030
+ return null;
4031
+ }
4032
+ }
4033
+
4034
+ var locationName = ReactPropTypeLocationNames[location];
4035
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
4036
+ }
4037
+ return createChainableTypeChecker(validate);
4038
+ }
4039
+
4040
+ function createNodeChecker() {
4041
+ function validate(props, propName, componentName, location, propFullName) {
4042
+ if (!isNode(props[propName])) {
4043
+ var locationName = ReactPropTypeLocationNames[location];
4044
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
4045
+ }
4046
+ return null;
4047
+ }
4048
+ return createChainableTypeChecker(validate);
4049
+ }
4050
+
4051
+ function createShapeTypeChecker(shapeTypes) {
4052
+ function validate(props, propName, componentName, location, propFullName) {
4053
+ var propValue = props[propName];
4054
+ var propType = getPropType(propValue);
4055
+ if (propType !== 'object') {
4056
+ var locationName = ReactPropTypeLocationNames[location];
4057
+ return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
4058
+ }
4059
+ for (var key in shapeTypes) {
4060
+ var checker = shapeTypes[key];
4061
+ if (!checker) {
4062
+ continue;
4063
+ }
4064
+ var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
4065
+ if (error) {
4066
+ return error;
4067
+ }
4068
+ }
4069
+ return null;
4070
+ }
4071
+ return createChainableTypeChecker(validate);
4072
+ }
4073
+
4074
+ function isNode(propValue) {
4075
+ switch (typeof propValue) {
4076
+ case 'number':
4077
+ case 'string':
4078
+ case 'undefined':
4079
+ return true;
4080
+ case 'boolean':
4081
+ return !propValue;
4082
+ case 'object':
4083
+ if (Array.isArray(propValue)) {
4084
+ return propValue.every(isNode);
4085
+ }
4086
+ if (propValue === null || ReactElement.isValidElement(propValue)) {
4087
+ return true;
4088
+ }
4089
+
4090
+ var iteratorFn = getIteratorFn(propValue);
4091
+ if (iteratorFn) {
4092
+ var iterator = iteratorFn.call(propValue);
4093
+ var step;
4094
+ if (iteratorFn !== propValue.entries) {
4095
+ while (!(step = iterator.next()).done) {
4096
+ if (!isNode(step.value)) {
4097
+ return false;
4098
+ }
4099
+ }
4100
+ } else {
4101
+ // Iterator will provide entry [k,v] tuples rather than values.
4102
+ while (!(step = iterator.next()).done) {
4103
+ var entry = step.value;
4104
+ if (entry) {
4105
+ if (!isNode(entry[1])) {
4106
+ return false;
4107
+ }
4108
+ }
4109
+ }
4110
+ }
4111
+ } else {
4112
+ return false;
4113
+ }
4114
+
4115
+ return true;
4116
+ default:
4117
+ return false;
4118
+ }
4119
+ }
4120
+
4121
+ function isSymbol(propType, propValue) {
4122
+ // Native Symbol.
4123
+ if (propType === 'symbol') {
4124
+ return true;
4125
+ }
4126
+
4127
+ // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
4128
+ if (propValue['@@toStringTag'] === 'Symbol') {
4129
+ return true;
4130
+ }
4131
+
4132
+ // Fallback for non-spec compliant Symbols which are polyfilled.
4133
+ if (typeof Symbol === 'function' && propValue instanceof Symbol) {
4134
+ return true;
4135
+ }
4136
+
4137
+ return false;
4138
+ }
4139
+
4140
+ // Equivalent of `typeof` but with special handling for array and regexp.
4141
+ function getPropType(propValue) {
4142
+ var propType = typeof propValue;
4143
+ if (Array.isArray(propValue)) {
4144
+ return 'array';
4145
+ }
4146
+ if (propValue instanceof RegExp) {
4147
+ // Old webkits (at least until Android 4.0) return 'function' rather than
4148
+ // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
4149
+ // passes PropTypes.object.
4150
+ return 'object';
4151
+ }
4152
+ if (isSymbol(propType, propValue)) {
4153
+ return 'symbol';
4154
+ }
4155
+ return propType;
4156
+ }
4157
+
4158
+ // This handles more types than `getPropType`. Only used for error messages.
4159
+ // See `createPrimitiveTypeChecker`.
4160
+ function getPreciseType(propValue) {
4161
+ var propType = getPropType(propValue);
4162
+ if (propType === 'object') {
4163
+ if (propValue instanceof Date) {
4164
+ return 'date';
4165
+ } else if (propValue instanceof RegExp) {
4166
+ return 'regexp';
4167
+ }
4168
+ }
4169
+ return propType;
4170
+ }
4171
+
4172
+ // Returns class name of the object, if any.
4173
+ function getClassName(propValue) {
4174
+ if (!propValue.constructor || !propValue.constructor.name) {
4175
+ return ANONYMOUS;
4176
+ }
4177
+ return propValue.constructor.name;
4178
+ }
4179
+
4180
+ module.exports = ReactPropTypes;
4181
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
4182
+
4183
+ /***/ },
4184
+ /* 33 */
4185
+ /***/ function(module, exports) {
4186
+
4187
+ /**
4188
+ * Copyright 2013-present, Facebook, Inc.
4189
+ * All rights reserved.
4190
+ *
4191
+ * This source code is licensed under the BSD-style license found in the
4192
+ * LICENSE file in the root directory of this source tree. An additional grant
4193
+ * of patent rights can be found in the PATENTS file in the same directory.
4194
+ *
4195
+ * @providesModule ReactVersion
4196
+ */
4197
+
4198
+ 'use strict';
4199
+
4200
+ module.exports = '15.3.2';
4201
+
4202
+ /***/ },
4203
+ /* 34 */
4204
+ /***/ function(module, exports, __webpack_require__) {
4205
+
4206
+ /* WEBPACK VAR INJECTION */(function(process) {/**
4207
+ * Copyright 2013-present, Facebook, Inc.
4208
+ * All rights reserved.
4209
+ *
4210
+ * This source code is licensed under the BSD-style license found in the
4211
+ * LICENSE file in the root directory of this source tree. An additional grant
4212
+ * of patent rights can be found in the PATENTS file in the same directory.
4213
+ *
4214
+ * @providesModule onlyChild
4215
+ */
4216
+ 'use strict';
4217
+
4218
+ var _prodInvariant = __webpack_require__(8);
4219
+
4220
+ var ReactElement = __webpack_require__(10);
4221
+
4222
+ var invariant = __webpack_require__(9);
4223
+
4224
+ /**
4225
+ * Returns the first child in a collection of children and verifies that there
4226
+ * is only one child in the collection.
4227
+ *
4228
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only
4229
+ *
4230
+ * The current implementation of this function assumes that a single child gets
4231
+ * passed without a wrapper, but the purpose of this helper function is to
4232
+ * abstract away the particular structure of children.
4233
+ *
4234
+ * @param {?object} children Child collection structure.
4235
+ * @return {ReactElement} The first and only `ReactElement` contained in the
4236
+ * structure.
4237
+ */
4238
+ function onlyChild(children) {
4239
+ !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;
4240
+ return children;
4241
+ }
4242
+
4243
+ module.exports = onlyChild;
4244
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
4245
+
4246
+ /***/ },
4247
+ /* 35 */
4248
+ /***/ function(module, exports, __webpack_require__) {
4249
+
4250
+ 'use strict';
4251
+
4252
+ module.exports = __webpack_require__(36);
4253
+
4254
+
4255
+ /***/ },
4256
+ /* 36 */
4257
+ /***/ function(module, exports, __webpack_require__) {
4258
+
4259
+ /* WEBPACK VAR INJECTION */(function(process) {/**
4260
+ * Copyright 2013-present, Facebook, Inc.
4261
+ * All rights reserved.
4262
+ *
4263
+ * This source code is licensed under the BSD-style license found in the
4264
+ * LICENSE file in the root directory of this source tree. An additional grant
4265
+ * of patent rights can be found in the PATENTS file in the same directory.
4266
+ *
4267
+ * @providesModule ReactDOM
4268
+ */
4269
+
4270
+ /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/
4271
+
4272
+ 'use strict';
4273
+
4274
+ var ReactDOMComponentTree = __webpack_require__(37);
4275
+ var ReactDefaultInjection = __webpack_require__(40);
4276
+ var ReactMount = __webpack_require__(163);
4277
+ var ReactReconciler = __webpack_require__(60);
4278
+ var ReactUpdates = __webpack_require__(57);
4279
+ var ReactVersion = __webpack_require__(33);
4280
+
4281
+ var findDOMNode = __webpack_require__(168);
4282
+ var getHostComponentFromComposite = __webpack_require__(169);
4283
+ var renderSubtreeIntoContainer = __webpack_require__(170);
4284
+ var warning = __webpack_require__(12);
4285
+
4286
+ ReactDefaultInjection.inject();
4287
+
4288
+ var ReactDOM = {
4289
+ findDOMNode: findDOMNode,
4290
+ render: ReactMount.render,
4291
+ unmountComponentAtNode: ReactMount.unmountComponentAtNode,
4292
+ version: ReactVersion,
4293
+
4294
+ /* eslint-disable camelcase */
4295
+ unstable_batchedUpdates: ReactUpdates.batchedUpdates,
4296
+ unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer
4297
+ };
4298
+
4299
+ // Inject the runtime into a devtools global hook regardless of browser.
4300
+ // Allows for debugging when the hook is injected on the page.
4301
+ /* eslint-enable camelcase */
4302
+ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
4303
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
4304
+ ComponentTree: {
4305
+ getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,
4306
+ getNodeFromInstance: function (inst) {
4307
+ // inst is an internal instance (but could be a composite)
4308
+ if (inst._renderedComponent) {
4309
+ inst = getHostComponentFromComposite(inst);
4310
+ }
4311
+ if (inst) {
4312
+ return ReactDOMComponentTree.getNodeFromInstance(inst);
4313
+ } else {
4314
+ return null;
4315
+ }
4316
+ }
4317
+ },
4318
+ Mount: ReactMount,
4319
+ Reconciler: ReactReconciler
4320
+ });
4321
+ }
4322
+
4323
+ if (process.env.NODE_ENV !== 'production') {
4324
+ var ExecutionEnvironment = __webpack_require__(50);
4325
+ if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
4326
+
4327
+ // First check if devtools is not installed
4328
+ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
4329
+ // If we're in Chrome or Firefox, provide a download link if not installed.
4330
+ if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
4331
+ // Firefox does not have the issue with devtools loaded over file://
4332
+ var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;
4333
+ console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');
4334
+ }
4335
+ }
4336
+
4337
+ var testFunc = function testFn() {};
4338
+ process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;
4339
+
4340
+ // If we're in IE8, check to see if we are in compatibility mode and provide
4341
+ // information on preventing compatibility mode
4342
+ var ieCompatibilityMode = document.documentMode && document.documentMode < 8;
4343
+
4344
+ process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : void 0;
4345
+
4346
+ var expectedFeatures = [
4347
+ // shims
4348
+ Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];
4349
+
4350
+ for (var i = 0; i < expectedFeatures.length; i++) {
4351
+ if (!expectedFeatures[i]) {
4352
+ process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;
4353
+ break;
4354
+ }
4355
+ }
4356
+ }
4357
+ }
4358
+
4359
+ if (process.env.NODE_ENV !== 'production') {
4360
+ var ReactInstrumentation = __webpack_require__(63);
4361
+ var ReactDOMUnknownPropertyHook = __webpack_require__(171);
4362
+ var ReactDOMNullInputValuePropHook = __webpack_require__(172);
4363
+
4364
+ ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook);
4365
+ ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook);
4366
+ }
4367
+
4368
+ module.exports = ReactDOM;
4369
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
4370
+
4371
+ /***/ },
4372
+ /* 37 */
4373
+ /***/ function(module, exports, __webpack_require__) {
4374
+
4375
+ /* WEBPACK VAR INJECTION */(function(process) {/**
4376
+ * Copyright 2013-present, Facebook, Inc.
4377
+ * All rights reserved.
4378
+ *
4379
+ * This source code is licensed under the BSD-style license found in the
4380
+ * LICENSE file in the root directory of this source tree. An additional grant
4381
+ * of patent rights can be found in the PATENTS file in the same directory.
4382
+ *
4383
+ * @providesModule ReactDOMComponentTree
4384
+ */
4385
+
4386
+ 'use strict';
4387
+
4388
+ var _prodInvariant = __webpack_require__(8);
4389
+
4390
+ var DOMProperty = __webpack_require__(38);
4391
+ var ReactDOMComponentFlags = __webpack_require__(39);
4392
+
4393
+ var invariant = __webpack_require__(9);
4394
+
4395
+ var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
4396
+ var Flags = ReactDOMComponentFlags;
4397
+
4398
+ var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
4399
+
4400
+ /**
4401
+ * Drill down (through composites and empty components) until we get a host or
4402
+ * host text component.
4403
+ *
4404
+ * This is pretty polymorphic but unavoidable with the current structure we have
4405
+ * for `_renderedChildren`.
4406
+ */
4407
+ function getRenderedHostOrTextFromComponent(component) {
4408
+ var rendered;
4409
+ while (rendered = component._renderedComponent) {
4410
+ component = rendered;
4411
+ }
4412
+ return component;
4413
+ }
4414
+
4415
+ /**
4416
+ * Populate `_hostNode` on the rendered host/text component with the given
4417
+ * DOM node. The passed `inst` can be a composite.
4418
+ */
4419
+ function precacheNode(inst, node) {
4420
+ var hostInst = getRenderedHostOrTextFromComponent(inst);
4421
+ hostInst._hostNode = node;
4422
+ node[internalInstanceKey] = hostInst;
4423
+ }
4424
+
4425
+ function uncacheNode(inst) {
4426
+ var node = inst._hostNode;
4427
+ if (node) {
4428
+ delete node[internalInstanceKey];
4429
+ inst._hostNode = null;
4430
+ }
4431
+ }
4432
+
4433
+ /**
4434
+ * Populate `_hostNode` on each child of `inst`, assuming that the children
4435
+ * match up with the DOM (element) children of `node`.
4436
+ *
4437
+ * We cache entire levels at once to avoid an n^2 problem where we access the
4438
+ * children of a node sequentially and have to walk from the start to our target
4439
+ * node every time.
4440
+ *
4441
+ * Since we update `_renderedChildren` and the actual DOM at (slightly)
4442
+ * different times, we could race here and see a newer `_renderedChildren` than
4443
+ * the DOM nodes we see. To avoid this, ReactMultiChild calls
4444
+ * `prepareToManageChildren` before we change `_renderedChildren`, at which
4445
+ * time the container's child nodes are always cached (until it unmounts).
4446
+ */
4447
+ function precacheChildNodes(inst, node) {
4448
+ if (inst._flags & Flags.hasCachedChildNodes) {
4449
+ return;
4450
+ }
4451
+ var children = inst._renderedChildren;
4452
+ var childNode = node.firstChild;
4453
+ outer: for (var name in children) {
4454
+ if (!children.hasOwnProperty(name)) {
4455
+ continue;
4456
+ }
4457
+ var childInst = children[name];
4458
+ var childID = getRenderedHostOrTextFromComponent(childInst)._domID;
4459
+ if (childID === 0) {
4460
+ // We're currently unmounting this child in ReactMultiChild; skip it.
4461
+ continue;
4462
+ }
4463
+ // We assume the child nodes are in the same order as the child instances.
4464
+ for (; childNode !== null; childNode = childNode.nextSibling) {
4465
+ if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {
4466
+ precacheNode(childInst, childNode);
4467
+ continue outer;
4468
+ }
4469
+ }
4470
+ // We reached the end of the DOM children without finding an ID match.
4471
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;
4472
+ }
4473
+ inst._flags |= Flags.hasCachedChildNodes;
4474
+ }
4475
+
4476
+ /**
4477
+ * Given a DOM node, return the closest ReactDOMComponent or
4478
+ * ReactDOMTextComponent instance ancestor.
4479
+ */
4480
+ function getClosestInstanceFromNode(node) {
4481
+ if (node[internalInstanceKey]) {
4482
+ return node[internalInstanceKey];
4483
+ }
4484
+
4485
+ // Walk up the tree until we find an ancestor whose instance we have cached.
4486
+ var parents = [];
4487
+ while (!node[internalInstanceKey]) {
4488
+ parents.push(node);
4489
+ if (node.parentNode) {
4490
+ node = node.parentNode;
4491
+ } else {
4492
+ // Top of the tree. This node must not be part of a React tree (or is
4493
+ // unmounted, potentially).
4494
+ return null;
4495
+ }
4496
+ }
4497
+
4498
+ var closest;
4499
+ var inst;
4500
+ for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {
4501
+ closest = inst;
4502
+ if (parents.length) {
4503
+ precacheChildNodes(inst, node);
4504
+ }
4505
+ }
4506
+
4507
+ return closest;
4508
+ }
4509
+
4510
+ /**
4511
+ * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
4512
+ * instance, or null if the node was not rendered by this React.
4513
+ */
4514
+ function getInstanceFromNode(node) {
4515
+ var inst = getClosestInstanceFromNode(node);
4516
+ if (inst != null && inst._hostNode === node) {
4517
+ return inst;
4518
+ } else {
4519
+ return null;
4520
+ }
4521
+ }
4522
+
4523
+ /**
4524
+ * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
4525
+ * DOM node.
4526
+ */
4527
+ function getNodeFromInstance(inst) {
4528
+ // Without this first invariant, passing a non-DOM-component triggers the next
4529
+ // invariant for a missing parent, which is super confusing.
4530
+ !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
4531
+
4532
+ if (inst._hostNode) {
4533
+ return inst._hostNode;
4534
+ }
4535
+
4536
+ // Walk up the tree until we find an ancestor whose DOM node we have cached.
4537
+ var parents = [];
4538
+ while (!inst._hostNode) {
4539
+ parents.push(inst);
4540
+ !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;
4541
+ inst = inst._hostParent;
4542
+ }
4543
+
4544
+ // Now parents contains each ancestor that does *not* have a cached native
4545
+ // node, and `inst` is the deepest ancestor that does.
4546
+ for (; parents.length; inst = parents.pop()) {
4547
+ precacheChildNodes(inst, inst._hostNode);
4548
+ }
4549
+
4550
+ return inst._hostNode;
4551
+ }
4552
+
4553
+ var ReactDOMComponentTree = {
4554
+ getClosestInstanceFromNode: getClosestInstanceFromNode,
4555
+ getInstanceFromNode: getInstanceFromNode,
4556
+ getNodeFromInstance: getNodeFromInstance,
4557
+ precacheChildNodes: precacheChildNodes,
4558
+ precacheNode: precacheNode,
4559
+ uncacheNode: uncacheNode
4560
+ };
4561
+
4562
+ module.exports = ReactDOMComponentTree;
4563
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
4564
+
4565
+ /***/ },
4566
+ /* 38 */
4567
+ /***/ function(module, exports, __webpack_require__) {
4568
+
4569
+ /* WEBPACK VAR INJECTION */(function(process) {/**
4570
+ * Copyright 2013-present, Facebook, Inc.
4571
+ * All rights reserved.
4572
+ *
4573
+ * This source code is licensed under the BSD-style license found in the
4574
+ * LICENSE file in the root directory of this source tree. An additional grant
4575
+ * of patent rights can be found in the PATENTS file in the same directory.
4576
+ *
4577
+ * @providesModule DOMProperty
4578
+ */
4579
+
4580
+ 'use strict';
4581
+
4582
+ var _prodInvariant = __webpack_require__(8);
4583
+
4584
+ var invariant = __webpack_require__(9);
4585
+
4586
+ function checkMask(value, bitmask) {
4587
+ return (value & bitmask) === bitmask;
4588
+ }
4589
+
4590
+ var DOMPropertyInjection = {
4591
+ /**
4592
+ * Mapping from normalized, camelcased property names to a configuration that
4593
+ * specifies how the associated DOM property should be accessed or rendered.
4594
+ */
4595
+ MUST_USE_PROPERTY: 0x1,
4596
+ HAS_BOOLEAN_VALUE: 0x4,
4597
+ HAS_NUMERIC_VALUE: 0x8,
4598
+ HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,
4599
+ HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,
4600
+
4601
+ /**
4602
+ * Inject some specialized knowledge about the DOM. This takes a config object
4603
+ * with the following properties:
4604
+ *
4605
+ * isCustomAttribute: function that given an attribute name will return true
4606
+ * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
4607
+ * attributes where it's impossible to enumerate all of the possible
4608
+ * attribute names,
4609
+ *
4610
+ * Properties: object mapping DOM property name to one of the
4611
+ * DOMPropertyInjection constants or null. If your attribute isn't in here,
4612
+ * it won't get written to the DOM.
4613
+ *
4614
+ * DOMAttributeNames: object mapping React attribute name to the DOM
4615
+ * attribute name. Attribute names not specified use the **lowercase**
4616
+ * normalized name.
4617
+ *
4618
+ * DOMAttributeNamespaces: object mapping React attribute name to the DOM
4619
+ * attribute namespace URL. (Attribute names not specified use no namespace.)
4620
+ *
4621
+ * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
4622
+ * Property names not specified use the normalized name.
4623
+ *
4624
+ * DOMMutationMethods: Properties that require special mutation methods. If
4625
+ * `value` is undefined, the mutation method should unset the property.
4626
+ *
4627
+ * @param {object} domPropertyConfig the config as described above.
4628
+ */
4629
+ injectDOMPropertyConfig: function (domPropertyConfig) {
4630
+ var Injection = DOMPropertyInjection;
4631
+ var Properties = domPropertyConfig.Properties || {};
4632
+ var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};
4633
+ var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
4634
+ var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
4635
+ var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
4636
+
4637
+ if (domPropertyConfig.isCustomAttribute) {
4638
+ DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
4639
+ }
4640
+
4641
+ for (var propName in Properties) {
4642
+ !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property \'%s\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;
4643
+
4644
+ var lowerCased = propName.toLowerCase();
4645
+ var propConfig = Properties[propName];
4646
+
4647
+ var propertyInfo = {
4648
+ attributeName: lowerCased,
4649
+ attributeNamespace: null,
4650
+ propertyName: propName,
4651
+ mutationMethod: null,
4652
+
4653
+ mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),
4654
+ hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),
4655
+ hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),
4656
+ hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),
4657
+ hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
4658
+ };
4659
+ !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;
4660
+
4661
+ if (process.env.NODE_ENV !== 'production') {
4662
+ DOMProperty.getPossibleStandardName[lowerCased] = propName;
4663
+ }
4664
+
4665
+ if (DOMAttributeNames.hasOwnProperty(propName)) {
4666
+ var attributeName = DOMAttributeNames[propName];
4667
+ propertyInfo.attributeName = attributeName;
4668
+ if (process.env.NODE_ENV !== 'production') {
4669
+ DOMProperty.getPossibleStandardName[attributeName] = propName;
4670
+ }
4671
+ }
4672
+
4673
+ if (DOMAttributeNamespaces.hasOwnProperty(propName)) {
4674
+ propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];
4675
+ }
4676
+
4677
+ if (DOMPropertyNames.hasOwnProperty(propName)) {
4678
+ propertyInfo.propertyName = DOMPropertyNames[propName];
4679
+ }
4680
+
4681
+ if (DOMMutationMethods.hasOwnProperty(propName)) {
4682
+ propertyInfo.mutationMethod = DOMMutationMethods[propName];
4683
+ }
4684
+
4685
+ DOMProperty.properties[propName] = propertyInfo;
4686
+ }
4687
+ }
4688
+ };
4689
+
4690
+ /* eslint-disable max-len */
4691
+ var ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
4692
+ /* eslint-enable max-len */
4693
+
4694
+ /**
4695
+ * DOMProperty exports lookup objects that can be used like functions:
4696
+ *
4697
+ * > DOMProperty.isValid['id']
4698
+ * true
4699
+ * > DOMProperty.isValid['foobar']
4700
+ * undefined
4701
+ *
4702
+ * Although this may be confusing, it performs better in general.
4703
+ *
4704
+ * @see http://jsperf.com/key-exists
4705
+ * @see http://jsperf.com/key-missing
4706
+ */
4707
+ var DOMProperty = {
4708
+
4709
+ ID_ATTRIBUTE_NAME: 'data-reactid',
4710
+ ROOT_ATTRIBUTE_NAME: 'data-reactroot',
4711
+
4712
+ ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
4713
+ ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
4714
+
4715
+ /**
4716
+ * Map from property "standard name" to an object with info about how to set
4717
+ * the property in the DOM. Each object contains:
4718
+ *
4719
+ * attributeName:
4720
+ * Used when rendering markup or with `*Attribute()`.
4721
+ * attributeNamespace
4722
+ * propertyName:
4723
+ * Used on DOM node instances. (This includes properties that mutate due to
4724
+ * external factors.)
4725
+ * mutationMethod:
4726
+ * If non-null, used instead of the property or `setAttribute()` after
4727
+ * initial render.
4728
+ * mustUseProperty:
4729
+ * Whether the property must be accessed and mutated as an object property.
4730
+ * hasBooleanValue:
4731
+ * Whether the property should be removed when set to a falsey value.
4732
+ * hasNumericValue:
4733
+ * Whether the property must be numeric or parse as a numeric and should be
4734
+ * removed when set to a falsey value.
4735
+ * hasPositiveNumericValue:
4736
+ * Whether the property must be positive numeric or parse as a positive
4737
+ * numeric and should be removed when set to a falsey value.
4738
+ * hasOverloadedBooleanValue:
4739
+ * Whether the property can be used as a flag as well as with a value.
4740
+ * Removed when strictly equal to false; present without a value when
4741
+ * strictly equal to true; present with a value otherwise.
4742
+ */
4743
+ properties: {},
4744
+
4745
+ /**
4746
+ * Mapping from lowercase property names to the properly cased version, used
4747
+ * to warn in the case of missing properties. Available only in __DEV__.
4748
+ * @type {Object}
4749
+ */
4750
+ getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,
4751
+
4752
+ /**
4753
+ * All of the isCustomAttribute() functions that have been injected.
4754
+ */
4755
+ _isCustomAttributeFunctions: [],
4756
+
4757
+ /**
4758
+ * Checks whether a property name is a custom attribute.
4759
+ * @method
4760
+ */
4761
+ isCustomAttribute: function (attributeName) {
4762
+ for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
4763
+ var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
4764
+ if (isCustomAttributeFn(attributeName)) {
4765
+ return true;
4766
+ }
4767
+ }
4768
+ return false;
4769
+ },
4770
+
4771
+ injection: DOMPropertyInjection
4772
+ };
4773
+
4774
+ module.exports = DOMProperty;
4775
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
4776
+
4777
+ /***/ },
4778
+ /* 39 */
4779
+ /***/ function(module, exports) {
4780
+
4781
+ /**
4782
+ * Copyright 2015-present, Facebook, Inc.
4783
+ * All rights reserved.
4784
+ *
4785
+ * This source code is licensed under the BSD-style license found in the
4786
+ * LICENSE file in the root directory of this source tree. An additional grant
4787
+ * of patent rights can be found in the PATENTS file in the same directory.
4788
+ *
4789
+ * @providesModule ReactDOMComponentFlags
4790
+ */
4791
+
4792
+ 'use strict';
4793
+
4794
+ var ReactDOMComponentFlags = {
4795
+ hasCachedChildNodes: 1 << 0
4796
+ };
4797
+
4798
+ module.exports = ReactDOMComponentFlags;
4799
+
4800
+ /***/ },
4801
+ /* 40 */
4802
+ /***/ function(module, exports, __webpack_require__) {
4803
+
4804
+ /**
4805
+ * Copyright 2013-present, Facebook, Inc.
4806
+ * All rights reserved.
4807
+ *
4808
+ * This source code is licensed under the BSD-style license found in the
4809
+ * LICENSE file in the root directory of this source tree. An additional grant
4810
+ * of patent rights can be found in the PATENTS file in the same directory.
4811
+ *
4812
+ * @providesModule ReactDefaultInjection
4813
+ */
4814
+
4815
+ 'use strict';
4816
+
4817
+ var BeforeInputEventPlugin = __webpack_require__(41);
4818
+ var ChangeEventPlugin = __webpack_require__(56);
4819
+ var DefaultEventPluginOrder = __webpack_require__(74);
4820
+ var EnterLeaveEventPlugin = __webpack_require__(75);
4821
+ var HTMLDOMPropertyConfig = __webpack_require__(80);
4822
+ var ReactComponentBrowserEnvironment = __webpack_require__(81);
4823
+ var ReactDOMComponent = __webpack_require__(95);
4824
+ var ReactDOMComponentTree = __webpack_require__(37);
4825
+ var ReactDOMEmptyComponent = __webpack_require__(134);
4826
+ var ReactDOMTreeTraversal = __webpack_require__(135);
4827
+ var ReactDOMTextComponent = __webpack_require__(136);
4828
+ var ReactDefaultBatchingStrategy = __webpack_require__(137);
4829
+ var ReactEventListener = __webpack_require__(138);
4830
+ var ReactInjection = __webpack_require__(141);
4831
+ var ReactReconcileTransaction = __webpack_require__(142);
4832
+ var SVGDOMPropertyConfig = __webpack_require__(150);
4833
+ var SelectEventPlugin = __webpack_require__(151);
4834
+ var SimpleEventPlugin = __webpack_require__(152);
4835
+
4836
+ var alreadyInjected = false;
4837
+
4838
+ function inject() {
4839
+ if (alreadyInjected) {
4840
+ // TODO: This is currently true because these injections are shared between
4841
+ // the client and the server package. They should be built independently
4842
+ // and not share any injection state. Then this problem will be solved.
4843
+ return;
4844
+ }
4845
+ alreadyInjected = true;
4846
+
4847
+ ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);
4848
+
4849
+ /**
4850
+ * Inject modules for resolving DOM hierarchy and plugin ordering.
4851
+ */
4852
+ ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
4853
+ ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);
4854
+ ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);
4855
+
4856
+ /**
4857
+ * Some important event plugins included by default (without having to require
4858
+ * them).
4859
+ */
4860
+ ReactInjection.EventPluginHub.injectEventPluginsByName({
4861
+ SimpleEventPlugin: SimpleEventPlugin,
4862
+ EnterLeaveEventPlugin: EnterLeaveEventPlugin,
4863
+ ChangeEventPlugin: ChangeEventPlugin,
4864
+ SelectEventPlugin: SelectEventPlugin,
4865
+ BeforeInputEventPlugin: BeforeInputEventPlugin
4866
+ });
4867
+
4868
+ ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);
4869
+
4870
+ ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);
4871
+
4872
+ ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
4873
+ ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
4874
+
4875
+ ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {
4876
+ return new ReactDOMEmptyComponent(instantiate);
4877
+ });
4878
+
4879
+ ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
4880
+ ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
4881
+
4882
+ ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
4883
+ }
4884
+
4885
+ module.exports = {
4886
+ inject: inject
4887
+ };
4888
+
4889
+ /***/ },
4890
+ /* 41 */
4891
+ /***/ function(module, exports, __webpack_require__) {
4892
+
4893
+ /**
4894
+ * Copyright 2013-present Facebook, Inc.
4895
+ * All rights reserved.
4896
+ *
4897
+ * This source code is licensed under the BSD-style license found in the
4898
+ * LICENSE file in the root directory of this source tree. An additional grant
4899
+ * of patent rights can be found in the PATENTS file in the same directory.
4900
+ *
4901
+ * @providesModule BeforeInputEventPlugin
4902
+ */
4903
+
4904
+ 'use strict';
4905
+
4906
+ var EventConstants = __webpack_require__(42);
4907
+ var EventPropagators = __webpack_require__(43);
4908
+ var ExecutionEnvironment = __webpack_require__(50);
4909
+ var FallbackCompositionState = __webpack_require__(51);
4910
+ var SyntheticCompositionEvent = __webpack_require__(53);
4911
+ var SyntheticInputEvent = __webpack_require__(55);
4912
+
4913
+ var keyOf = __webpack_require__(26);
4914
+
4915
+ var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
4916
+ var START_KEYCODE = 229;
4917
+
4918
+ var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;
4919
+
4920
+ var documentMode = null;
4921
+ if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
4922
+ documentMode = document.documentMode;
4923
+ }
4924
+
4925
+ // Webkit offers a very useful `textInput` event that can be used to
4926
+ // directly represent `beforeInput`. The IE `textinput` event is not as
4927
+ // useful, so we don't use it.
4928
+ var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();
4929
+
4930
+ // In IE9+, we have access to composition events, but the data supplied
4931
+ // by the native compositionend event may be incorrect. Japanese ideographic
4932
+ // spaces, for instance (\u3000) are not recorded correctly.
4933
+ var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
4934
+
4935
+ /**
4936
+ * Opera <= 12 includes TextEvent in window, but does not fire
4937
+ * text input events. Rely on keypress instead.
4938
+ */
4939
+ function isPresto() {
4940
+ var opera = window.opera;
4941
+ return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
4942
+ }
4943
+
4944
+ var SPACEBAR_CODE = 32;
4945
+ var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
4946
+
4947
+ var topLevelTypes = EventConstants.topLevelTypes;
4948
+
4949
+ // Events and their corresponding property names.
4950
+ var eventTypes = {
4951
+ beforeInput: {
4952
+ phasedRegistrationNames: {
4953
+ bubbled: keyOf({ onBeforeInput: null }),
4954
+ captured: keyOf({ onBeforeInputCapture: null })
4955
+ },
4956
+ dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
4957
+ },
4958
+ compositionEnd: {
4959
+ phasedRegistrationNames: {
4960
+ bubbled: keyOf({ onCompositionEnd: null }),
4961
+ captured: keyOf({ onCompositionEndCapture: null })
4962
+ },
4963
+ dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
4964
+ },
4965
+ compositionStart: {
4966
+ phasedRegistrationNames: {
4967
+ bubbled: keyOf({ onCompositionStart: null }),
4968
+ captured: keyOf({ onCompositionStartCapture: null })
4969
+ },
4970
+ dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
4971
+ },
4972
+ compositionUpdate: {
4973
+ phasedRegistrationNames: {
4974
+ bubbled: keyOf({ onCompositionUpdate: null }),
4975
+ captured: keyOf({ onCompositionUpdateCapture: null })
4976
+ },
4977
+ dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
4978
+ }
4979
+ };
4980
+
4981
+ // Track whether we've ever handled a keypress on the space key.
4982
+ var hasSpaceKeypress = false;
4983
+
4984
+ /**
4985
+ * Return whether a native keypress event is assumed to be a command.
4986
+ * This is required because Firefox fires `keypress` events for key commands
4987
+ * (cut, copy, select-all, etc.) even though no character is inserted.
4988
+ */
4989
+ function isKeypressCommand(nativeEvent) {
4990
+ return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
4991
+ // ctrlKey && altKey is equivalent to AltGr, and is not a command.
4992
+ !(nativeEvent.ctrlKey && nativeEvent.altKey);
4993
+ }
4994
+
4995
+ /**
4996
+ * Translate native top level events into event types.
4997
+ *
4998
+ * @param {string} topLevelType
4999
+ * @return {object}
5000
+ */
5001
+ function getCompositionEventType(topLevelType) {
5002
+ switch (topLevelType) {
5003
+ case topLevelTypes.topCompositionStart:
5004
+ return eventTypes.compositionStart;
5005
+ case topLevelTypes.topCompositionEnd:
5006
+ return eventTypes.compositionEnd;
5007
+ case topLevelTypes.topCompositionUpdate:
5008
+ return eventTypes.compositionUpdate;
5009
+ }
5010
+ }
5011
+
5012
+ /**
5013
+ * Does our fallback best-guess model think this event signifies that
5014
+ * composition has begun?
5015
+ *
5016
+ * @param {string} topLevelType
5017
+ * @param {object} nativeEvent
5018
+ * @return {boolean}
5019
+ */
5020
+ function isFallbackCompositionStart(topLevelType, nativeEvent) {
5021
+ return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
5022
+ }
5023
+
5024
+ /**
5025
+ * Does our fallback mode think that this event is the end of composition?
5026
+ *
5027
+ * @param {string} topLevelType
5028
+ * @param {object} nativeEvent
5029
+ * @return {boolean}
5030
+ */
5031
+ function isFallbackCompositionEnd(topLevelType, nativeEvent) {
5032
+ switch (topLevelType) {
5033
+ case topLevelTypes.topKeyUp:
5034
+ // Command keys insert or clear IME input.
5035
+ return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
5036
+ case topLevelTypes.topKeyDown:
5037
+ // Expect IME keyCode on each keydown. If we get any other
5038
+ // code we must have exited earlier.
5039
+ return nativeEvent.keyCode !== START_KEYCODE;
5040
+ case topLevelTypes.topKeyPress:
5041
+ case topLevelTypes.topMouseDown:
5042
+ case topLevelTypes.topBlur:
5043
+ // Events are not possible without cancelling IME.
5044
+ return true;
5045
+ default:
5046
+ return false;
5047
+ }
5048
+ }
5049
+
5050
+ /**
5051
+ * Google Input Tools provides composition data via a CustomEvent,
5052
+ * with the `data` property populated in the `detail` object. If this
5053
+ * is available on the event object, use it. If not, this is a plain
5054
+ * composition event and we have nothing special to extract.
5055
+ *
5056
+ * @param {object} nativeEvent
5057
+ * @return {?string}
5058
+ */
5059
+ function getDataFromCustomEvent(nativeEvent) {
5060
+ var detail = nativeEvent.detail;
5061
+ if (typeof detail === 'object' && 'data' in detail) {
5062
+ return detail.data;
5063
+ }
5064
+ return null;
5065
+ }
5066
+
5067
+ // Track the current IME composition fallback object, if any.
5068
+ var currentComposition = null;
5069
+
5070
+ /**
5071
+ * @return {?object} A SyntheticCompositionEvent.
5072
+ */
5073
+ function extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
5074
+ var eventType;
5075
+ var fallbackData;
5076
+
5077
+ if (canUseCompositionEvent) {
5078
+ eventType = getCompositionEventType(topLevelType);
5079
+ } else if (!currentComposition) {
5080
+ if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
5081
+ eventType = eventTypes.compositionStart;
5082
+ }
5083
+ } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
5084
+ eventType = eventTypes.compositionEnd;
5085
+ }
5086
+
5087
+ if (!eventType) {
5088
+ return null;
5089
+ }
5090
+
5091
+ if (useFallbackCompositionData) {
5092
+ // The current composition is stored statically and must not be
5093
+ // overwritten while composition continues.
5094
+ if (!currentComposition && eventType === eventTypes.compositionStart) {
5095
+ currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);
5096
+ } else if (eventType === eventTypes.compositionEnd) {
5097
+ if (currentComposition) {
5098
+ fallbackData = currentComposition.getData();
5099
+ }
5100
+ }
5101
+ }
5102
+
5103
+ var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);
5104
+
5105
+ if (fallbackData) {
5106
+ // Inject data generated from fallback path into the synthetic event.
5107
+ // This matches the property of native CompositionEventInterface.
5108
+ event.data = fallbackData;
5109
+ } else {
5110
+ var customData = getDataFromCustomEvent(nativeEvent);
5111
+ if (customData !== null) {
5112
+ event.data = customData;
5113
+ }
5114
+ }
5115
+
5116
+ EventPropagators.accumulateTwoPhaseDispatches(event);
5117
+ return event;
5118
+ }
5119
+
5120
+ /**
5121
+ * @param {string} topLevelType Record from `EventConstants`.
5122
+ * @param {object} nativeEvent Native browser event.
5123
+ * @return {?string} The string corresponding to this `beforeInput` event.
5124
+ */
5125
+ function getNativeBeforeInputChars(topLevelType, nativeEvent) {
5126
+ switch (topLevelType) {
5127
+ case topLevelTypes.topCompositionEnd:
5128
+ return getDataFromCustomEvent(nativeEvent);
5129
+ case topLevelTypes.topKeyPress:
5130
+ /**
5131
+ * If native `textInput` events are available, our goal is to make
5132
+ * use of them. However, there is a special case: the spacebar key.
5133
+ * In Webkit, preventing default on a spacebar `textInput` event
5134
+ * cancels character insertion, but it *also* causes the browser
5135
+ * to fall back to its default spacebar behavior of scrolling the
5136
+ * page.
5137
+ *
5138
+ * Tracking at:
5139
+ * https://code.google.com/p/chromium/issues/detail?id=355103
5140
+ *
5141
+ * To avoid this issue, use the keypress event as if no `textInput`
5142
+ * event is available.
5143
+ */
5144
+ var which = nativeEvent.which;
5145
+ if (which !== SPACEBAR_CODE) {
5146
+ return null;
5147
+ }
5148
+
5149
+ hasSpaceKeypress = true;
5150
+ return SPACEBAR_CHAR;
5151
+
5152
+ case topLevelTypes.topTextInput:
5153
+ // Record the characters to be added to the DOM.
5154
+ var chars = nativeEvent.data;
5155
+
5156
+ // If it's a spacebar character, assume that we have already handled
5157
+ // it at the keypress level and bail immediately. Android Chrome
5158
+ // doesn't give us keycodes, so we need to blacklist it.
5159
+ if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
5160
+ return null;
5161
+ }
5162
+
5163
+ return chars;
5164
+
5165
+ default:
5166
+ // For other native event types, do nothing.
5167
+ return null;
5168
+ }
5169
+ }
5170
+
5171
+ /**
5172
+ * For browsers that do not provide the `textInput` event, extract the
5173
+ * appropriate string to use for SyntheticInputEvent.
5174
+ *
5175
+ * @param {string} topLevelType Record from `EventConstants`.
5176
+ * @param {object} nativeEvent Native browser event.
5177
+ * @return {?string} The fallback string for this `beforeInput` event.
5178
+ */
5179
+ function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
5180
+ // If we are currently composing (IME) and using a fallback to do so,
5181
+ // try to extract the composed characters from the fallback object.
5182
+ // If composition event is available, we extract a string only at
5183
+ // compositionevent, otherwise extract it at fallback events.
5184
+ if (currentComposition) {
5185
+ if (topLevelType === topLevelTypes.topCompositionEnd || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {
5186
+ var chars = currentComposition.getData();
5187
+ FallbackCompositionState.release(currentComposition);
5188
+ currentComposition = null;
5189
+ return chars;
5190
+ }
5191
+ return null;
5192
+ }
5193
+
5194
+ switch (topLevelType) {
5195
+ case topLevelTypes.topPaste:
5196
+ // If a paste event occurs after a keypress, throw out the input
5197
+ // chars. Paste events should not lead to BeforeInput events.
5198
+ return null;
5199
+ case topLevelTypes.topKeyPress:
5200
+ /**
5201
+ * As of v27, Firefox may fire keypress events even when no character
5202
+ * will be inserted. A few possibilities:
5203
+ *
5204
+ * - `which` is `0`. Arrow keys, Esc key, etc.
5205
+ *
5206
+ * - `which` is the pressed key code, but no char is available.
5207
+ * Ex: 'AltGr + d` in Polish. There is no modified character for
5208
+ * this key combination and no character is inserted into the
5209
+ * document, but FF fires the keypress for char code `100` anyway.
5210
+ * No `input` event will occur.
5211
+ *
5212
+ * - `which` is the pressed key code, but a command combination is
5213
+ * being used. Ex: `Cmd+C`. No character is inserted, and no
5214
+ * `input` event will occur.
5215
+ */
5216
+ if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
5217
+ return String.fromCharCode(nativeEvent.which);
5218
+ }
5219
+ return null;
5220
+ case topLevelTypes.topCompositionEnd:
5221
+ return useFallbackCompositionData ? null : nativeEvent.data;
5222
+ default:
5223
+ return null;
5224
+ }
5225
+ }
5226
+
5227
+ /**
5228
+ * Extract a SyntheticInputEvent for `beforeInput`, based on either native
5229
+ * `textInput` or fallback behavior.
5230
+ *
5231
+ * @return {?object} A SyntheticInputEvent.
5232
+ */
5233
+ function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
5234
+ var chars;
5235
+
5236
+ if (canUseTextInputEvent) {
5237
+ chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
5238
+ } else {
5239
+ chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
5240
+ }
5241
+
5242
+ // If no characters are being inserted, no BeforeInput event should
5243
+ // be fired.
5244
+ if (!chars) {
5245
+ return null;
5246
+ }
5247
+
5248
+ var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);
5249
+
5250
+ event.data = chars;
5251
+ EventPropagators.accumulateTwoPhaseDispatches(event);
5252
+ return event;
5253
+ }
5254
+
5255
+ /**
5256
+ * Create an `onBeforeInput` event to match
5257
+ * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
5258
+ *
5259
+ * This event plugin is based on the native `textInput` event
5260
+ * available in Chrome, Safari, Opera, and IE. This event fires after
5261
+ * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
5262
+ *
5263
+ * `beforeInput` is spec'd but not implemented in any browsers, and
5264
+ * the `input` event does not provide any useful information about what has
5265
+ * actually been added, contrary to the spec. Thus, `textInput` is the best
5266
+ * available event to identify the characters that have actually been inserted
5267
+ * into the target node.
5268
+ *
5269
+ * This plugin is also responsible for emitting `composition` events, thus
5270
+ * allowing us to share composition fallback code for both `beforeInput` and
5271
+ * `composition` event types.
5272
+ */
5273
+ var BeforeInputEventPlugin = {
5274
+
5275
+ eventTypes: eventTypes,
5276
+
5277
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
5278
+ return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];
5279
+ }
5280
+ };
5281
+
5282
+ module.exports = BeforeInputEventPlugin;
5283
+
5284
+ /***/ },
5285
+ /* 42 */
5286
+ /***/ function(module, exports, __webpack_require__) {
5287
+
5288
+ /**
5289
+ * Copyright 2013-present, Facebook, Inc.
5290
+ * All rights reserved.
5291
+ *
5292
+ * This source code is licensed under the BSD-style license found in the
5293
+ * LICENSE file in the root directory of this source tree. An additional grant
5294
+ * of patent rights can be found in the PATENTS file in the same directory.
5295
+ *
5296
+ * @providesModule EventConstants
5297
+ */
5298
+
5299
+ 'use strict';
5300
+
5301
+ var keyMirror = __webpack_require__(24);
5302
+
5303
+ var PropagationPhases = keyMirror({ bubbled: null, captured: null });
5304
+
5305
+ /**
5306
+ * Types of raw signals from the browser caught at the top level.
5307
+ */
5308
+ var topLevelTypes = keyMirror({
5309
+ topAbort: null,
5310
+ topAnimationEnd: null,
5311
+ topAnimationIteration: null,
5312
+ topAnimationStart: null,
5313
+ topBlur: null,
5314
+ topCanPlay: null,
5315
+ topCanPlayThrough: null,
5316
+ topChange: null,
5317
+ topClick: null,
5318
+ topCompositionEnd: null,
5319
+ topCompositionStart: null,
5320
+ topCompositionUpdate: null,
5321
+ topContextMenu: null,
5322
+ topCopy: null,
5323
+ topCut: null,
5324
+ topDoubleClick: null,
5325
+ topDrag: null,
5326
+ topDragEnd: null,
5327
+ topDragEnter: null,
5328
+ topDragExit: null,
5329
+ topDragLeave: null,
5330
+ topDragOver: null,
5331
+ topDragStart: null,
5332
+ topDrop: null,
5333
+ topDurationChange: null,
5334
+ topEmptied: null,
5335
+ topEncrypted: null,
5336
+ topEnded: null,
5337
+ topError: null,
5338
+ topFocus: null,
5339
+ topInput: null,
5340
+ topInvalid: null,
5341
+ topKeyDown: null,
5342
+ topKeyPress: null,
5343
+ topKeyUp: null,
5344
+ topLoad: null,
5345
+ topLoadedData: null,
5346
+ topLoadedMetadata: null,
5347
+ topLoadStart: null,
5348
+ topMouseDown: null,
5349
+ topMouseMove: null,
5350
+ topMouseOut: null,
5351
+ topMouseOver: null,
5352
+ topMouseUp: null,
5353
+ topPaste: null,
5354
+ topPause: null,
5355
+ topPlay: null,
5356
+ topPlaying: null,
5357
+ topProgress: null,
5358
+ topRateChange: null,
5359
+ topReset: null,
5360
+ topScroll: null,
5361
+ topSeeked: null,
5362
+ topSeeking: null,
5363
+ topSelectionChange: null,
5364
+ topStalled: null,
5365
+ topSubmit: null,
5366
+ topSuspend: null,
5367
+ topTextInput: null,
5368
+ topTimeUpdate: null,
5369
+ topTouchCancel: null,
5370
+ topTouchEnd: null,
5371
+ topTouchMove: null,
5372
+ topTouchStart: null,
5373
+ topTransitionEnd: null,
5374
+ topVolumeChange: null,
5375
+ topWaiting: null,
5376
+ topWheel: null
5377
+ });
5378
+
5379
+ var EventConstants = {
5380
+ topLevelTypes: topLevelTypes,
5381
+ PropagationPhases: PropagationPhases
5382
+ };
5383
+
5384
+ module.exports = EventConstants;
5385
+
5386
+ /***/ },
5387
+ /* 43 */
5388
+ /***/ function(module, exports, __webpack_require__) {
5389
+
5390
+ /* WEBPACK VAR INJECTION */(function(process) {/**
5391
+ * Copyright 2013-present, Facebook, Inc.
5392
+ * All rights reserved.
5393
+ *
5394
+ * This source code is licensed under the BSD-style license found in the
5395
+ * LICENSE file in the root directory of this source tree. An additional grant
5396
+ * of patent rights can be found in the PATENTS file in the same directory.
5397
+ *
5398
+ * @providesModule EventPropagators
5399
+ */
5400
+
5401
+ 'use strict';
5402
+
5403
+ var EventConstants = __webpack_require__(42);
5404
+ var EventPluginHub = __webpack_require__(44);
5405
+ var EventPluginUtils = __webpack_require__(46);
5406
+
5407
+ var accumulateInto = __webpack_require__(48);
5408
+ var forEachAccumulated = __webpack_require__(49);
5409
+ var warning = __webpack_require__(12);
5410
+
5411
+ var PropagationPhases = EventConstants.PropagationPhases;
5412
+ var getListener = EventPluginHub.getListener;
5413
+
5414
+ /**
5415
+ * Some event types have a notion of different registration names for different
5416
+ * "phases" of propagation. This finds listeners by a given phase.
5417
+ */
5418
+ function listenerAtPhase(inst, event, propagationPhase) {
5419
+ var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
5420
+ return getListener(inst, registrationName);
5421
+ }
5422
+
5423
+ /**
5424
+ * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
5425
+ * here, allows us to not have to bind or create functions for each event.
5426
+ * Mutating the event's members allows us to not have to create a wrapping
5427
+ * "dispatch" object that pairs the event with the listener.
5428
+ */
5429
+ function accumulateDirectionalDispatches(inst, upwards, event) {
5430
+ if (process.env.NODE_ENV !== 'production') {
5431
+ process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;
5432
+ }
5433
+ var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
5434
+ var listener = listenerAtPhase(inst, event, phase);
5435
+ if (listener) {
5436
+ event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
5437
+ event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
5438
+ }
5439
+ }
5440
+
5441
+ /**
5442
+ * Collect dispatches (must be entirely collected before dispatching - see unit
5443
+ * tests). Lazily allocate the array to conserve memory. We must loop through
5444
+ * each event and perform the traversal for each one. We cannot perform a
5445
+ * single traversal for the entire collection of events because each event may
5446
+ * have a different target.
5447
+ */
5448
+ function accumulateTwoPhaseDispatchesSingle(event) {
5449
+ if (event && event.dispatchConfig.phasedRegistrationNames) {
5450
+ EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);
5451
+ }
5452
+ }
5453
+
5454
+ /**
5455
+ * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.
5456
+ */
5457
+ function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
5458
+ if (event && event.dispatchConfig.phasedRegistrationNames) {
5459
+ var targetInst = event._targetInst;
5460
+ var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;
5461
+ EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);
5462
+ }
5463
+ }
5464
+
5465
+ /**
5466
+ * Accumulates without regard to direction, does not look for phased
5467
+ * registration names. Same as `accumulateDirectDispatchesSingle` but without
5468
+ * requiring that the `dispatchMarker` be the same as the dispatched ID.
5469
+ */
5470
+ function accumulateDispatches(inst, ignoredDirection, event) {
5471
+ if (event && event.dispatchConfig.registrationName) {
5472
+ var registrationName = event.dispatchConfig.registrationName;
5473
+ var listener = getListener(inst, registrationName);
5474
+ if (listener) {
5475
+ event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
5476
+ event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);
5477
+ }
5478
+ }
5479
+ }
5480
+
5481
+ /**
5482
+ * Accumulates dispatches on an `SyntheticEvent`, but only for the
5483
+ * `dispatchMarker`.
5484
+ * @param {SyntheticEvent} event
5485
+ */
5486
+ function accumulateDirectDispatchesSingle(event) {
5487
+ if (event && event.dispatchConfig.registrationName) {
5488
+ accumulateDispatches(event._targetInst, null, event);
5489
+ }
5490
+ }
5491
+
5492
+ function accumulateTwoPhaseDispatches(events) {
5493
+ forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
5494
+ }
5495
+
5496
+ function accumulateTwoPhaseDispatchesSkipTarget(events) {
5497
+ forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);
5498
+ }
5499
+
5500
+ function accumulateEnterLeaveDispatches(leave, enter, from, to) {
5501
+ EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);
5502
+ }
5503
+
5504
+ function accumulateDirectDispatches(events) {
5505
+ forEachAccumulated(events, accumulateDirectDispatchesSingle);
5506
+ }
5507
+
5508
+ /**
5509
+ * A small set of propagation patterns, each of which will accept a small amount
5510
+ * of information, and generate a set of "dispatch ready event objects" - which
5511
+ * are sets of events that have already been annotated with a set of dispatched
5512
+ * listener functions/ids. The API is designed this way to discourage these
5513
+ * propagation strategies from actually executing the dispatches, since we
5514
+ * always want to collect the entire set of dispatches before executing event a
5515
+ * single one.
5516
+ *
5517
+ * @constructor EventPropagators
5518
+ */
5519
+ var EventPropagators = {
5520
+ accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
5521
+ accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,
5522
+ accumulateDirectDispatches: accumulateDirectDispatches,
5523
+ accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
5524
+ };
5525
+
5526
+ module.exports = EventPropagators;
5527
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
5528
+
5529
+ /***/ },
5530
+ /* 44 */
5531
+ /***/ function(module, exports, __webpack_require__) {
5532
+
5533
+ /* WEBPACK VAR INJECTION */(function(process) {/**
5534
+ * Copyright 2013-present, Facebook, Inc.
5535
+ * All rights reserved.
5536
+ *
5537
+ * This source code is licensed under the BSD-style license found in the
5538
+ * LICENSE file in the root directory of this source tree. An additional grant
5539
+ * of patent rights can be found in the PATENTS file in the same directory.
5540
+ *
5541
+ * @providesModule EventPluginHub
5542
+ */
5543
+
5544
+ 'use strict';
5545
+
5546
+ var _prodInvariant = __webpack_require__(8);
5547
+
5548
+ var EventPluginRegistry = __webpack_require__(45);
5549
+ var EventPluginUtils = __webpack_require__(46);
5550
+ var ReactErrorUtils = __webpack_require__(47);
5551
+
5552
+ var accumulateInto = __webpack_require__(48);
5553
+ var forEachAccumulated = __webpack_require__(49);
5554
+ var invariant = __webpack_require__(9);
5555
+
5556
+ /**
5557
+ * Internal store for event listeners
5558
+ */
5559
+ var listenerBank = {};
5560
+
5561
+ /**
5562
+ * Internal queue of events that have accumulated their dispatches and are
5563
+ * waiting to have their dispatches executed.
5564
+ */
5565
+ var eventQueue = null;
5566
+
5567
+ /**
5568
+ * Dispatches an event and releases it back into the pool, unless persistent.
5569
+ *
5570
+ * @param {?object} event Synthetic event to be dispatched.
5571
+ * @param {boolean} simulated If the event is simulated (changes exn behavior)
5572
+ * @private
5573
+ */
5574
+ var executeDispatchesAndRelease = function (event, simulated) {
5575
+ if (event) {
5576
+ EventPluginUtils.executeDispatchesInOrder(event, simulated);
5577
+
5578
+ if (!event.isPersistent()) {
5579
+ event.constructor.release(event);
5580
+ }
5581
+ }
5582
+ };
5583
+ var executeDispatchesAndReleaseSimulated = function (e) {
5584
+ return executeDispatchesAndRelease(e, true);
5585
+ };
5586
+ var executeDispatchesAndReleaseTopLevel = function (e) {
5587
+ return executeDispatchesAndRelease(e, false);
5588
+ };
5589
+
5590
+ var getDictionaryKey = function (inst) {
5591
+ // Prevents V8 performance issue:
5592
+ // https://github.com/facebook/react/pull/7232
5593
+ return '.' + inst._rootNodeID;
5594
+ };
5595
+
5596
+ /**
5597
+ * This is a unified interface for event plugins to be installed and configured.
5598
+ *
5599
+ * Event plugins can implement the following properties:
5600
+ *
5601
+ * `extractEvents` {function(string, DOMEventTarget, string, object): *}
5602
+ * Required. When a top-level event is fired, this method is expected to
5603
+ * extract synthetic events that will in turn be queued and dispatched.
5604
+ *
5605
+ * `eventTypes` {object}
5606
+ * Optional, plugins that fire events must publish a mapping of registration
5607
+ * names that are used to register listeners. Values of this mapping must
5608
+ * be objects that contain `registrationName` or `phasedRegistrationNames`.
5609
+ *
5610
+ * `executeDispatch` {function(object, function, string)}
5611
+ * Optional, allows plugins to override how an event gets dispatched. By
5612
+ * default, the listener is simply invoked.
5613
+ *
5614
+ * Each plugin that is injected into `EventsPluginHub` is immediately operable.
5615
+ *
5616
+ * @public
5617
+ */
5618
+ var EventPluginHub = {
5619
+
5620
+ /**
5621
+ * Methods for injecting dependencies.
5622
+ */
5623
+ injection: {
5624
+
5625
+ /**
5626
+ * @param {array} InjectedEventPluginOrder
5627
+ * @public
5628
+ */
5629
+ injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,
5630
+
5631
+ /**
5632
+ * @param {object} injectedNamesToPlugins Map from names to plugin modules.
5633
+ */
5634
+ injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName
5635
+
5636
+ },
5637
+
5638
+ /**
5639
+ * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.
5640
+ *
5641
+ * @param {object} inst The instance, which is the source of events.
5642
+ * @param {string} registrationName Name of listener (e.g. `onClick`).
5643
+ * @param {function} listener The callback to store.
5644
+ */
5645
+ putListener: function (inst, registrationName, listener) {
5646
+ !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;
5647
+
5648
+ var key = getDictionaryKey(inst);
5649
+ var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
5650
+ bankForRegistrationName[key] = listener;
5651
+
5652
+ var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
5653
+ if (PluginModule && PluginModule.didPutListener) {
5654
+ PluginModule.didPutListener(inst, registrationName, listener);
5655
+ }
5656
+ },
5657
+
5658
+ /**
5659
+ * @param {object} inst The instance, which is the source of events.
5660
+ * @param {string} registrationName Name of listener (e.g. `onClick`).
5661
+ * @return {?function} The stored callback.
5662
+ */
5663
+ getListener: function (inst, registrationName) {
5664
+ var bankForRegistrationName = listenerBank[registrationName];
5665
+ var key = getDictionaryKey(inst);
5666
+ return bankForRegistrationName && bankForRegistrationName[key];
5667
+ },
5668
+
5669
+ /**
5670
+ * Deletes a listener from the registration bank.
5671
+ *
5672
+ * @param {object} inst The instance, which is the source of events.
5673
+ * @param {string} registrationName Name of listener (e.g. `onClick`).
5674
+ */
5675
+ deleteListener: function (inst, registrationName) {
5676
+ var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
5677
+ if (PluginModule && PluginModule.willDeleteListener) {
5678
+ PluginModule.willDeleteListener(inst, registrationName);
5679
+ }
5680
+
5681
+ var bankForRegistrationName = listenerBank[registrationName];
5682
+ // TODO: This should never be null -- when is it?
5683
+ if (bankForRegistrationName) {
5684
+ var key = getDictionaryKey(inst);
5685
+ delete bankForRegistrationName[key];
5686
+ }
5687
+ },
5688
+
5689
+ /**
5690
+ * Deletes all listeners for the DOM element with the supplied ID.
5691
+ *
5692
+ * @param {object} inst The instance, which is the source of events.
5693
+ */
5694
+ deleteAllListeners: function (inst) {
5695
+ var key = getDictionaryKey(inst);
5696
+ for (var registrationName in listenerBank) {
5697
+ if (!listenerBank.hasOwnProperty(registrationName)) {
5698
+ continue;
5699
+ }
5700
+
5701
+ if (!listenerBank[registrationName][key]) {
5702
+ continue;
5703
+ }
5704
+
5705
+ var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];
5706
+ if (PluginModule && PluginModule.willDeleteListener) {
5707
+ PluginModule.willDeleteListener(inst, registrationName);
5708
+ }
5709
+
5710
+ delete listenerBank[registrationName][key];
5711
+ }
5712
+ },
5713
+
5714
+ /**
5715
+ * Allows registered plugins an opportunity to extract events from top-level
5716
+ * native browser events.
5717
+ *
5718
+ * @return {*} An accumulation of synthetic events.
5719
+ * @internal
5720
+ */
5721
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
5722
+ var events;
5723
+ var plugins = EventPluginRegistry.plugins;
5724
+ for (var i = 0; i < plugins.length; i++) {
5725
+ // Not every plugin in the ordering may be loaded at runtime.
5726
+ var possiblePlugin = plugins[i];
5727
+ if (possiblePlugin) {
5728
+ var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
5729
+ if (extractedEvents) {
5730
+ events = accumulateInto(events, extractedEvents);
5731
+ }
5732
+ }
5733
+ }
5734
+ return events;
5735
+ },
5736
+
5737
+ /**
5738
+ * Enqueues a synthetic event that should be dispatched when
5739
+ * `processEventQueue` is invoked.
5740
+ *
5741
+ * @param {*} events An accumulation of synthetic events.
5742
+ * @internal
5743
+ */
5744
+ enqueueEvents: function (events) {
5745
+ if (events) {
5746
+ eventQueue = accumulateInto(eventQueue, events);
5747
+ }
5748
+ },
5749
+
5750
+ /**
5751
+ * Dispatches all synthetic events on the event queue.
5752
+ *
5753
+ * @internal
5754
+ */
5755
+ processEventQueue: function (simulated) {
5756
+ // Set `eventQueue` to null before processing it so that we can tell if more
5757
+ // events get enqueued while processing.
5758
+ var processingEventQueue = eventQueue;
5759
+ eventQueue = null;
5760
+ if (simulated) {
5761
+ forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);
5762
+ } else {
5763
+ forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
5764
+ }
5765
+ !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;
5766
+ // This would be a good time to rethrow if any of the event handlers threw.
5767
+ ReactErrorUtils.rethrowCaughtError();
5768
+ },
5769
+
5770
+ /**
5771
+ * These are needed for tests only. Do not use!
5772
+ */
5773
+ __purge: function () {
5774
+ listenerBank = {};
5775
+ },
5776
+
5777
+ __getListenerBank: function () {
5778
+ return listenerBank;
5779
+ }
5780
+
5781
+ };
5782
+
5783
+ module.exports = EventPluginHub;
5784
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
5785
+
5786
+ /***/ },
5787
+ /* 45 */
5788
+ /***/ function(module, exports, __webpack_require__) {
5789
+
5790
+ /* WEBPACK VAR INJECTION */(function(process) {/**
5791
+ * Copyright 2013-present, Facebook, Inc.
5792
+ * All rights reserved.
5793
+ *
5794
+ * This source code is licensed under the BSD-style license found in the
5795
+ * LICENSE file in the root directory of this source tree. An additional grant
5796
+ * of patent rights can be found in the PATENTS file in the same directory.
5797
+ *
5798
+ * @providesModule EventPluginRegistry
5799
+ */
5800
+
5801
+ 'use strict';
5802
+
5803
+ var _prodInvariant = __webpack_require__(8);
5804
+
5805
+ var invariant = __webpack_require__(9);
5806
+
5807
+ /**
5808
+ * Injectable ordering of event plugins.
5809
+ */
5810
+ var EventPluginOrder = null;
5811
+
5812
+ /**
5813
+ * Injectable mapping from names to event plugin modules.
5814
+ */
5815
+ var namesToPlugins = {};
5816
+
5817
+ /**
5818
+ * Recomputes the plugin list using the injected plugins and plugin ordering.
5819
+ *
5820
+ * @private
5821
+ */
5822
+ function recomputePluginOrdering() {
5823
+ if (!EventPluginOrder) {
5824
+ // Wait until an `EventPluginOrder` is injected.
5825
+ return;
5826
+ }
5827
+ for (var pluginName in namesToPlugins) {
5828
+ var PluginModule = namesToPlugins[pluginName];
5829
+ var pluginIndex = EventPluginOrder.indexOf(pluginName);
5830
+ !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;
5831
+ if (EventPluginRegistry.plugins[pluginIndex]) {
5832
+ continue;
5833
+ }
5834
+ !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;
5835
+ EventPluginRegistry.plugins[pluginIndex] = PluginModule;
5836
+ var publishedEvents = PluginModule.eventTypes;
5837
+ for (var eventName in publishedEvents) {
5838
+ !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;
5839
+ }
5840
+ }
5841
+ }
5842
+
5843
+ /**
5844
+ * Publishes an event so that it can be dispatched by the supplied plugin.
5845
+ *
5846
+ * @param {object} dispatchConfig Dispatch configuration for the event.
5847
+ * @param {object} PluginModule Plugin publishing the event.
5848
+ * @return {boolean} True if the event was successfully published.
5849
+ * @private
5850
+ */
5851
+ function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
5852
+ !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;
5853
+ EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
5854
+
5855
+ var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
5856
+ if (phasedRegistrationNames) {
5857
+ for (var phaseName in phasedRegistrationNames) {
5858
+ if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
5859
+ var phasedRegistrationName = phasedRegistrationNames[phaseName];
5860
+ publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
5861
+ }
5862
+ }
5863
+ return true;
5864
+ } else if (dispatchConfig.registrationName) {
5865
+ publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
5866
+ return true;
5867
+ }
5868
+ return false;
5869
+ }
5870
+
5871
+ /**
5872
+ * Publishes a registration name that is used to identify dispatched events and
5873
+ * can be used with `EventPluginHub.putListener` to register listeners.
5874
+ *
5875
+ * @param {string} registrationName Registration name to add.
5876
+ * @param {object} PluginModule Plugin publishing the event.
5877
+ * @private
5878
+ */
5879
+ function publishRegistrationName(registrationName, PluginModule, eventName) {
5880
+ !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;
5881
+ EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
5882
+ EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
5883
+
5884
+ if (process.env.NODE_ENV !== 'production') {
5885
+ var lowerCasedName = registrationName.toLowerCase();
5886
+ EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
5887
+
5888
+ if (registrationName === 'onDoubleClick') {
5889
+ EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
5890
+ }
5891
+ }
5892
+ }
5893
+
5894
+ /**
5895
+ * Registers plugins so that they can extract and dispatch events.
5896
+ *
5897
+ * @see {EventPluginHub}
5898
+ */
5899
+ var EventPluginRegistry = {
5900
+
5901
+ /**
5902
+ * Ordered list of injected plugins.
5903
+ */
5904
+ plugins: [],
5905
+
5906
+ /**
5907
+ * Mapping from event name to dispatch config
5908
+ */
5909
+ eventNameDispatchConfigs: {},
5910
+
5911
+ /**
5912
+ * Mapping from registration name to plugin module
5913
+ */
5914
+ registrationNameModules: {},
5915
+
5916
+ /**
5917
+ * Mapping from registration name to event name
5918
+ */
5919
+ registrationNameDependencies: {},
5920
+
5921
+ /**
5922
+ * Mapping from lowercase registration names to the properly cased version,
5923
+ * used to warn in the case of missing event handlers. Available
5924
+ * only in __DEV__.
5925
+ * @type {Object}
5926
+ */
5927
+ possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,
5928
+
5929
+ /**
5930
+ * Injects an ordering of plugins (by plugin name). This allows the ordering
5931
+ * to be decoupled from injection of the actual plugins so that ordering is
5932
+ * always deterministic regardless of packaging, on-the-fly injection, etc.
5933
+ *
5934
+ * @param {array} InjectedEventPluginOrder
5935
+ * @internal
5936
+ * @see {EventPluginHub.injection.injectEventPluginOrder}
5937
+ */
5938
+ injectEventPluginOrder: function (InjectedEventPluginOrder) {
5939
+ !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;
5940
+ // Clone the ordering so it cannot be dynamically mutated.
5941
+ EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
5942
+ recomputePluginOrdering();
5943
+ },
5944
+
5945
+ /**
5946
+ * Injects plugins to be used by `EventPluginHub`. The plugin names must be
5947
+ * in the ordering injected by `injectEventPluginOrder`.
5948
+ *
5949
+ * Plugins can be injected as part of page initialization or on-the-fly.
5950
+ *
5951
+ * @param {object} injectedNamesToPlugins Map from names to plugin modules.
5952
+ * @internal
5953
+ * @see {EventPluginHub.injection.injectEventPluginsByName}
5954
+ */
5955
+ injectEventPluginsByName: function (injectedNamesToPlugins) {
5956
+ var isOrderingDirty = false;
5957
+ for (var pluginName in injectedNamesToPlugins) {
5958
+ if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
5959
+ continue;
5960
+ }
5961
+ var PluginModule = injectedNamesToPlugins[pluginName];
5962
+ if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
5963
+ !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;
5964
+ namesToPlugins[pluginName] = PluginModule;
5965
+ isOrderingDirty = true;
5966
+ }
5967
+ }
5968
+ if (isOrderingDirty) {
5969
+ recomputePluginOrdering();
5970
+ }
5971
+ },
5972
+
5973
+ /**
5974
+ * Looks up the plugin for the supplied event.
5975
+ *
5976
+ * @param {object} event A synthetic event.
5977
+ * @return {?object} The plugin that created the supplied event.
5978
+ * @internal
5979
+ */
5980
+ getPluginModuleForEvent: function (event) {
5981
+ var dispatchConfig = event.dispatchConfig;
5982
+ if (dispatchConfig.registrationName) {
5983
+ return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
5984
+ }
5985
+ for (var phase in dispatchConfig.phasedRegistrationNames) {
5986
+ if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
5987
+ continue;
5988
+ }
5989
+ var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
5990
+ if (PluginModule) {
5991
+ return PluginModule;
5992
+ }
5993
+ }
5994
+ return null;
5995
+ },
5996
+
5997
+ /**
5998
+ * Exposed for unit testing.
5999
+ * @private
6000
+ */
6001
+ _resetEventPlugins: function () {
6002
+ EventPluginOrder = null;
6003
+ for (var pluginName in namesToPlugins) {
6004
+ if (namesToPlugins.hasOwnProperty(pluginName)) {
6005
+ delete namesToPlugins[pluginName];
6006
+ }
6007
+ }
6008
+ EventPluginRegistry.plugins.length = 0;
6009
+
6010
+ var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
6011
+ for (var eventName in eventNameDispatchConfigs) {
6012
+ if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
6013
+ delete eventNameDispatchConfigs[eventName];
6014
+ }
6015
+ }
6016
+
6017
+ var registrationNameModules = EventPluginRegistry.registrationNameModules;
6018
+ for (var registrationName in registrationNameModules) {
6019
+ if (registrationNameModules.hasOwnProperty(registrationName)) {
6020
+ delete registrationNameModules[registrationName];
6021
+ }
6022
+ }
6023
+
6024
+ if (process.env.NODE_ENV !== 'production') {
6025
+ var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;
6026
+ for (var lowerCasedName in possibleRegistrationNames) {
6027
+ if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {
6028
+ delete possibleRegistrationNames[lowerCasedName];
6029
+ }
6030
+ }
6031
+ }
6032
+ }
6033
+
6034
+ };
6035
+
6036
+ module.exports = EventPluginRegistry;
6037
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
6038
+
6039
+ /***/ },
6040
+ /* 46 */
6041
+ /***/ function(module, exports, __webpack_require__) {
6042
+
6043
+ /* WEBPACK VAR INJECTION */(function(process) {/**
6044
+ * Copyright 2013-present, Facebook, Inc.
6045
+ * All rights reserved.
6046
+ *
6047
+ * This source code is licensed under the BSD-style license found in the
6048
+ * LICENSE file in the root directory of this source tree. An additional grant
6049
+ * of patent rights can be found in the PATENTS file in the same directory.
6050
+ *
6051
+ * @providesModule EventPluginUtils
6052
+ */
6053
+
6054
+ 'use strict';
6055
+
6056
+ var _prodInvariant = __webpack_require__(8);
6057
+
6058
+ var EventConstants = __webpack_require__(42);
6059
+ var ReactErrorUtils = __webpack_require__(47);
6060
+
6061
+ var invariant = __webpack_require__(9);
6062
+ var warning = __webpack_require__(12);
6063
+
6064
+ /**
6065
+ * Injected dependencies:
6066
+ */
6067
+
6068
+ /**
6069
+ * - `ComponentTree`: [required] Module that can convert between React instances
6070
+ * and actual node references.
6071
+ */
6072
+ var ComponentTree;
6073
+ var TreeTraversal;
6074
+ var injection = {
6075
+ injectComponentTree: function (Injected) {
6076
+ ComponentTree = Injected;
6077
+ if (process.env.NODE_ENV !== 'production') {
6078
+ process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;
6079
+ }
6080
+ },
6081
+ injectTreeTraversal: function (Injected) {
6082
+ TreeTraversal = Injected;
6083
+ if (process.env.NODE_ENV !== 'production') {
6084
+ process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;
6085
+ }
6086
+ }
6087
+ };
6088
+
6089
+ var topLevelTypes = EventConstants.topLevelTypes;
6090
+
6091
+ function isEndish(topLevelType) {
6092
+ return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
6093
+ }
6094
+
6095
+ function isMoveish(topLevelType) {
6096
+ return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
6097
+ }
6098
+ function isStartish(topLevelType) {
6099
+ return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
6100
+ }
6101
+
6102
+ var validateEventDispatches;
6103
+ if (process.env.NODE_ENV !== 'production') {
6104
+ validateEventDispatches = function (event) {
6105
+ var dispatchListeners = event._dispatchListeners;
6106
+ var dispatchInstances = event._dispatchInstances;
6107
+
6108
+ var listenersIsArr = Array.isArray(dispatchListeners);
6109
+ var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;
6110
+
6111
+ var instancesIsArr = Array.isArray(dispatchInstances);
6112
+ var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;
6113
+
6114
+ process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;
6115
+ };
6116
+ }
6117
+
6118
+ /**
6119
+ * Dispatch the event to the listener.
6120
+ * @param {SyntheticEvent} event SyntheticEvent to handle
6121
+ * @param {boolean} simulated If the event is simulated (changes exn behavior)
6122
+ * @param {function} listener Application-level callback
6123
+ * @param {*} inst Internal component instance
6124
+ */
6125
+ function executeDispatch(event, simulated, listener, inst) {
6126
+ var type = event.type || 'unknown-event';
6127
+ event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);
6128
+ if (simulated) {
6129
+ ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);
6130
+ } else {
6131
+ ReactErrorUtils.invokeGuardedCallback(type, listener, event);
6132
+ }
6133
+ event.currentTarget = null;
6134
+ }
6135
+
6136
+ /**
6137
+ * Standard/simple iteration through an event's collected dispatches.
6138
+ */
6139
+ function executeDispatchesInOrder(event, simulated) {
6140
+ var dispatchListeners = event._dispatchListeners;
6141
+ var dispatchInstances = event._dispatchInstances;
6142
+ if (process.env.NODE_ENV !== 'production') {
6143
+ validateEventDispatches(event);
6144
+ }
6145
+ if (Array.isArray(dispatchListeners)) {
6146
+ for (var i = 0; i < dispatchListeners.length; i++) {
6147
+ if (event.isPropagationStopped()) {
6148
+ break;
6149
+ }
6150
+ // Listeners and Instances are two parallel arrays that are always in sync.
6151
+ executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);
6152
+ }
6153
+ } else if (dispatchListeners) {
6154
+ executeDispatch(event, simulated, dispatchListeners, dispatchInstances);
6155
+ }
6156
+ event._dispatchListeners = null;
6157
+ event._dispatchInstances = null;
6158
+ }
6159
+
6160
+ /**
6161
+ * Standard/simple iteration through an event's collected dispatches, but stops
6162
+ * at the first dispatch execution returning true, and returns that id.
6163
+ *
6164
+ * @return {?string} id of the first dispatch execution who's listener returns
6165
+ * true, or null if no listener returned true.
6166
+ */
6167
+ function executeDispatchesInOrderStopAtTrueImpl(event) {
6168
+ var dispatchListeners = event._dispatchListeners;
6169
+ var dispatchInstances = event._dispatchInstances;
6170
+ if (process.env.NODE_ENV !== 'production') {
6171
+ validateEventDispatches(event);
6172
+ }
6173
+ if (Array.isArray(dispatchListeners)) {
6174
+ for (var i = 0; i < dispatchListeners.length; i++) {
6175
+ if (event.isPropagationStopped()) {
6176
+ break;
6177
+ }
6178
+ // Listeners and Instances are two parallel arrays that are always in sync.
6179
+ if (dispatchListeners[i](event, dispatchInstances[i])) {
6180
+ return dispatchInstances[i];
6181
+ }
6182
+ }
6183
+ } else if (dispatchListeners) {
6184
+ if (dispatchListeners(event, dispatchInstances)) {
6185
+ return dispatchInstances;
6186
+ }
6187
+ }
6188
+ return null;
6189
+ }
6190
+
6191
+ /**
6192
+ * @see executeDispatchesInOrderStopAtTrueImpl
6193
+ */
6194
+ function executeDispatchesInOrderStopAtTrue(event) {
6195
+ var ret = executeDispatchesInOrderStopAtTrueImpl(event);
6196
+ event._dispatchInstances = null;
6197
+ event._dispatchListeners = null;
6198
+ return ret;
6199
+ }
6200
+
6201
+ /**
6202
+ * Execution of a "direct" dispatch - there must be at most one dispatch
6203
+ * accumulated on the event or it is considered an error. It doesn't really make
6204
+ * sense for an event with multiple dispatches (bubbled) to keep track of the
6205
+ * return values at each dispatch execution, but it does tend to make sense when
6206
+ * dealing with "direct" dispatches.
6207
+ *
6208
+ * @return {*} The return value of executing the single dispatch.
6209
+ */
6210
+ function executeDirectDispatch(event) {
6211
+ if (process.env.NODE_ENV !== 'production') {
6212
+ validateEventDispatches(event);
6213
+ }
6214
+ var dispatchListener = event._dispatchListeners;
6215
+ var dispatchInstance = event._dispatchInstances;
6216
+ !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;
6217
+ event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
6218
+ var res = dispatchListener ? dispatchListener(event) : null;
6219
+ event.currentTarget = null;
6220
+ event._dispatchListeners = null;
6221
+ event._dispatchInstances = null;
6222
+ return res;
6223
+ }
6224
+
6225
+ /**
6226
+ * @param {SyntheticEvent} event
6227
+ * @return {boolean} True iff number of dispatches accumulated is greater than 0.
6228
+ */
6229
+ function hasDispatches(event) {
6230
+ return !!event._dispatchListeners;
6231
+ }
6232
+
6233
+ /**
6234
+ * General utilities that are useful in creating custom Event Plugins.
6235
+ */
6236
+ var EventPluginUtils = {
6237
+ isEndish: isEndish,
6238
+ isMoveish: isMoveish,
6239
+ isStartish: isStartish,
6240
+
6241
+ executeDirectDispatch: executeDirectDispatch,
6242
+ executeDispatchesInOrder: executeDispatchesInOrder,
6243
+ executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
6244
+ hasDispatches: hasDispatches,
6245
+
6246
+ getInstanceFromNode: function (node) {
6247
+ return ComponentTree.getInstanceFromNode(node);
6248
+ },
6249
+ getNodeFromInstance: function (node) {
6250
+ return ComponentTree.getNodeFromInstance(node);
6251
+ },
6252
+ isAncestor: function (a, b) {
6253
+ return TreeTraversal.isAncestor(a, b);
6254
+ },
6255
+ getLowestCommonAncestor: function (a, b) {
6256
+ return TreeTraversal.getLowestCommonAncestor(a, b);
6257
+ },
6258
+ getParentInstance: function (inst) {
6259
+ return TreeTraversal.getParentInstance(inst);
6260
+ },
6261
+ traverseTwoPhase: function (target, fn, arg) {
6262
+ return TreeTraversal.traverseTwoPhase(target, fn, arg);
6263
+ },
6264
+ traverseEnterLeave: function (from, to, fn, argFrom, argTo) {
6265
+ return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);
6266
+ },
6267
+
6268
+ injection: injection
6269
+ };
6270
+
6271
+ module.exports = EventPluginUtils;
6272
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
6273
+
6274
+ /***/ },
6275
+ /* 47 */
6276
+ /***/ function(module, exports, __webpack_require__) {
6277
+
6278
+ /* WEBPACK VAR INJECTION */(function(process) {/**
6279
+ * Copyright 2013-present, Facebook, Inc.
6280
+ * All rights reserved.
6281
+ *
6282
+ * This source code is licensed under the BSD-style license found in the
6283
+ * LICENSE file in the root directory of this source tree. An additional grant
6284
+ * of patent rights can be found in the PATENTS file in the same directory.
6285
+ *
6286
+ * @providesModule ReactErrorUtils
6287
+ */
6288
+
6289
+ 'use strict';
6290
+
6291
+ var caughtError = null;
6292
+
6293
+ /**
6294
+ * Call a function while guarding against errors that happens within it.
6295
+ *
6296
+ * @param {?String} name of the guard to use for logging or debugging
6297
+ * @param {Function} func The function to invoke
6298
+ * @param {*} a First argument
6299
+ * @param {*} b Second argument
6300
+ */
6301
+ function invokeGuardedCallback(name, func, a, b) {
6302
+ try {
6303
+ return func(a, b);
6304
+ } catch (x) {
6305
+ if (caughtError === null) {
6306
+ caughtError = x;
6307
+ }
6308
+ return undefined;
6309
+ }
6310
+ }
6311
+
6312
+ var ReactErrorUtils = {
6313
+ invokeGuardedCallback: invokeGuardedCallback,
6314
+
6315
+ /**
6316
+ * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event
6317
+ * handler are sure to be rethrown by rethrowCaughtError.
6318
+ */
6319
+ invokeGuardedCallbackWithCatch: invokeGuardedCallback,
6320
+
6321
+ /**
6322
+ * During execution of guarded functions we will capture the first error which
6323
+ * we will rethrow to be handled by the top level error handler.
6324
+ */
6325
+ rethrowCaughtError: function () {
6326
+ if (caughtError) {
6327
+ var error = caughtError;
6328
+ caughtError = null;
6329
+ throw error;
6330
+ }
6331
+ }
6332
+ };
6333
+
6334
+ if (process.env.NODE_ENV !== 'production') {
6335
+ /**
6336
+ * To help development we can get better devtools integration by simulating a
6337
+ * real browser event.
6338
+ */
6339
+ if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
6340
+ var fakeNode = document.createElement('react');
6341
+ ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
6342
+ var boundFunc = func.bind(null, a, b);
6343
+ var evtType = 'react-' + name;
6344
+ fakeNode.addEventListener(evtType, boundFunc, false);
6345
+ var evt = document.createEvent('Event');
6346
+ evt.initEvent(evtType, false, false);
6347
+ fakeNode.dispatchEvent(evt);
6348
+ fakeNode.removeEventListener(evtType, boundFunc, false);
6349
+ };
6350
+ }
6351
+ }
6352
+
6353
+ module.exports = ReactErrorUtils;
6354
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
6355
+
6356
+ /***/ },
6357
+ /* 48 */
6358
+ /***/ function(module, exports, __webpack_require__) {
6359
+
6360
+ /* WEBPACK VAR INJECTION */(function(process) {/**
6361
+ * Copyright 2014-present, Facebook, Inc.
6362
+ * All rights reserved.
6363
+ *
6364
+ * This source code is licensed under the BSD-style license found in the
6365
+ * LICENSE file in the root directory of this source tree. An additional grant
6366
+ * of patent rights can be found in the PATENTS file in the same directory.
6367
+ *
6368
+ * @providesModule accumulateInto
6369
+ *
6370
+ */
6371
+
6372
+ 'use strict';
6373
+
6374
+ var _prodInvariant = __webpack_require__(8);
6375
+
6376
+ var invariant = __webpack_require__(9);
6377
+
6378
+ /**
6379
+ * Accumulates items that must not be null or undefined into the first one. This
6380
+ * is used to conserve memory by avoiding array allocations, and thus sacrifices
6381
+ * API cleanness. Since `current` can be null before being passed in and not
6382
+ * null after this function, make sure to assign it back to `current`:
6383
+ *
6384
+ * `a = accumulateInto(a, b);`
6385
+ *
6386
+ * This API should be sparingly used. Try `accumulate` for something cleaner.
6387
+ *
6388
+ * @return {*|array<*>} An accumulation of items.
6389
+ */
6390
+
6391
+ function accumulateInto(current, next) {
6392
+ !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;
6393
+
6394
+ if (current == null) {
6395
+ return next;
6396
+ }
6397
+
6398
+ // Both are not empty. Warning: Never call x.concat(y) when you are not
6399
+ // certain that x is an Array (x could be a string with concat method).
6400
+ if (Array.isArray(current)) {
6401
+ if (Array.isArray(next)) {
6402
+ current.push.apply(current, next);
6403
+ return current;
6404
+ }
6405
+ current.push(next);
6406
+ return current;
6407
+ }
6408
+
6409
+ if (Array.isArray(next)) {
6410
+ // A bit too dangerous to mutate `next`.
6411
+ return [current].concat(next);
6412
+ }
6413
+
6414
+ return [current, next];
6415
+ }
6416
+
6417
+ module.exports = accumulateInto;
6418
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
6419
+
6420
+ /***/ },
6421
+ /* 49 */
6422
+ /***/ function(module, exports) {
6423
+
6424
+ /**
6425
+ * Copyright 2013-present, Facebook, Inc.
6426
+ * All rights reserved.
6427
+ *
6428
+ * This source code is licensed under the BSD-style license found in the
6429
+ * LICENSE file in the root directory of this source tree. An additional grant
6430
+ * of patent rights can be found in the PATENTS file in the same directory.
6431
+ *
6432
+ * @providesModule forEachAccumulated
6433
+ *
6434
+ */
6435
+
6436
+ 'use strict';
6437
+
6438
+ /**
6439
+ * @param {array} arr an "accumulation" of items which is either an Array or
6440
+ * a single item. Useful when paired with the `accumulate` module. This is a
6441
+ * simple utility that allows us to reason about a collection of items, but
6442
+ * handling the case when there is exactly one item (and we do not need to
6443
+ * allocate an array).
6444
+ */
6445
+
6446
+ function forEachAccumulated(arr, cb, scope) {
6447
+ if (Array.isArray(arr)) {
6448
+ arr.forEach(cb, scope);
6449
+ } else if (arr) {
6450
+ cb.call(scope, arr);
6451
+ }
6452
+ }
6453
+
6454
+ module.exports = forEachAccumulated;
6455
+
6456
+ /***/ },
6457
+ /* 50 */
6458
+ /***/ function(module, exports) {
6459
+
6460
+ /**
6461
+ * Copyright (c) 2013-present, Facebook, Inc.
6462
+ * All rights reserved.
6463
+ *
6464
+ * This source code is licensed under the BSD-style license found in the
6465
+ * LICENSE file in the root directory of this source tree. An additional grant
6466
+ * of patent rights can be found in the PATENTS file in the same directory.
6467
+ *
6468
+ */
6469
+
6470
+ 'use strict';
6471
+
6472
+ var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
6473
+
6474
+ /**
6475
+ * Simple, lightweight module assisting with the detection and context of
6476
+ * Worker. Helps avoid circular dependencies and allows code to reason about
6477
+ * whether or not they are in a Worker, even if they never include the main
6478
+ * `ReactWorker` dependency.
6479
+ */
6480
+ var ExecutionEnvironment = {
6481
+
6482
+ canUseDOM: canUseDOM,
6483
+
6484
+ canUseWorkers: typeof Worker !== 'undefined',
6485
+
6486
+ canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),
6487
+
6488
+ canUseViewport: canUseDOM && !!window.screen,
6489
+
6490
+ isInWorker: !canUseDOM // For now, this is true - might change in the future.
6491
+
6492
+ };
6493
+
6494
+ module.exports = ExecutionEnvironment;
6495
+
6496
+ /***/ },
6497
+ /* 51 */
6498
+ /***/ function(module, exports, __webpack_require__) {
6499
+
6500
+ /**
6501
+ * Copyright 2013-present, Facebook, Inc.
6502
+ * All rights reserved.
6503
+ *
6504
+ * This source code is licensed under the BSD-style license found in the
6505
+ * LICENSE file in the root directory of this source tree. An additional grant
6506
+ * of patent rights can be found in the PATENTS file in the same directory.
6507
+ *
6508
+ * @providesModule FallbackCompositionState
6509
+ */
6510
+
6511
+ 'use strict';
6512
+
6513
+ var _assign = __webpack_require__(5);
6514
+
6515
+ var PooledClass = __webpack_require__(7);
6516
+
6517
+ var getTextContentAccessor = __webpack_require__(52);
6518
+
6519
+ /**
6520
+ * This helper class stores information about text content of a target node,
6521
+ * allowing comparison of content before and after a given event.
6522
+ *
6523
+ * Identify the node where selection currently begins, then observe
6524
+ * both its text content and its current position in the DOM. Since the
6525
+ * browser may natively replace the target node during composition, we can
6526
+ * use its position to find its replacement.
6527
+ *
6528
+ * @param {DOMEventTarget} root
6529
+ */
6530
+ function FallbackCompositionState(root) {
6531
+ this._root = root;
6532
+ this._startText = this.getText();
6533
+ this._fallbackText = null;
6534
+ }
6535
+
6536
+ _assign(FallbackCompositionState.prototype, {
6537
+ destructor: function () {
6538
+ this._root = null;
6539
+ this._startText = null;
6540
+ this._fallbackText = null;
6541
+ },
6542
+
6543
+ /**
6544
+ * Get current text of input.
6545
+ *
6546
+ * @return {string}
6547
+ */
6548
+ getText: function () {
6549
+ if ('value' in this._root) {
6550
+ return this._root.value;
6551
+ }
6552
+ return this._root[getTextContentAccessor()];
6553
+ },
6554
+
6555
+ /**
6556
+ * Determine the differing substring between the initially stored
6557
+ * text content and the current content.
6558
+ *
6559
+ * @return {string}
6560
+ */
6561
+ getData: function () {
6562
+ if (this._fallbackText) {
6563
+ return this._fallbackText;
6564
+ }
6565
+
6566
+ var start;
6567
+ var startValue = this._startText;
6568
+ var startLength = startValue.length;
6569
+ var end;
6570
+ var endValue = this.getText();
6571
+ var endLength = endValue.length;
6572
+
6573
+ for (start = 0; start < startLength; start++) {
6574
+ if (startValue[start] !== endValue[start]) {
6575
+ break;
6576
+ }
6577
+ }
6578
+
6579
+ var minEnd = startLength - start;
6580
+ for (end = 1; end <= minEnd; end++) {
6581
+ if (startValue[startLength - end] !== endValue[endLength - end]) {
6582
+ break;
6583
+ }
6584
+ }
6585
+
6586
+ var sliceTail = end > 1 ? 1 - end : undefined;
6587
+ this._fallbackText = endValue.slice(start, sliceTail);
6588
+ return this._fallbackText;
6589
+ }
6590
+ });
6591
+
6592
+ PooledClass.addPoolingTo(FallbackCompositionState);
6593
+
6594
+ module.exports = FallbackCompositionState;
6595
+
6596
+ /***/ },
6597
+ /* 52 */
6598
+ /***/ function(module, exports, __webpack_require__) {
6599
+
6600
+ /**
6601
+ * Copyright 2013-present, Facebook, Inc.
6602
+ * All rights reserved.
6603
+ *
6604
+ * This source code is licensed under the BSD-style license found in the
6605
+ * LICENSE file in the root directory of this source tree. An additional grant
6606
+ * of patent rights can be found in the PATENTS file in the same directory.
6607
+ *
6608
+ * @providesModule getTextContentAccessor
6609
+ */
6610
+
6611
+ 'use strict';
6612
+
6613
+ var ExecutionEnvironment = __webpack_require__(50);
6614
+
6615
+ var contentKey = null;
6616
+
6617
+ /**
6618
+ * Gets the key used to access text content on a DOM node.
6619
+ *
6620
+ * @return {?string} Key used to access text content.
6621
+ * @internal
6622
+ */
6623
+ function getTextContentAccessor() {
6624
+ if (!contentKey && ExecutionEnvironment.canUseDOM) {
6625
+ // Prefer textContent to innerText because many browsers support both but
6626
+ // SVG <text> elements don't support innerText even when <div> does.
6627
+ contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
6628
+ }
6629
+ return contentKey;
6630
+ }
6631
+
6632
+ module.exports = getTextContentAccessor;
6633
+
6634
+ /***/ },
6635
+ /* 53 */
6636
+ /***/ function(module, exports, __webpack_require__) {
6637
+
6638
+ /**
6639
+ * Copyright 2013-present, Facebook, Inc.
6640
+ * All rights reserved.
6641
+ *
6642
+ * This source code is licensed under the BSD-style license found in the
6643
+ * LICENSE file in the root directory of this source tree. An additional grant
6644
+ * of patent rights can be found in the PATENTS file in the same directory.
6645
+ *
6646
+ * @providesModule SyntheticCompositionEvent
6647
+ */
6648
+
6649
+ 'use strict';
6650
+
6651
+ var SyntheticEvent = __webpack_require__(54);
6652
+
6653
+ /**
6654
+ * @interface Event
6655
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
6656
+ */
6657
+ var CompositionEventInterface = {
6658
+ data: null
6659
+ };
6660
+
6661
+ /**
6662
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
6663
+ * @param {string} dispatchMarker Marker identifying the event target.
6664
+ * @param {object} nativeEvent Native browser event.
6665
+ * @extends {SyntheticUIEvent}
6666
+ */
6667
+ function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
6668
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
6669
+ }
6670
+
6671
+ SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);
6672
+
6673
+ module.exports = SyntheticCompositionEvent;
6674
+
6675
+ /***/ },
6676
+ /* 54 */
6677
+ /***/ function(module, exports, __webpack_require__) {
6678
+
6679
+ /* WEBPACK VAR INJECTION */(function(process) {/**
6680
+ * Copyright 2013-present, Facebook, Inc.
6681
+ * All rights reserved.
6682
+ *
6683
+ * This source code is licensed under the BSD-style license found in the
6684
+ * LICENSE file in the root directory of this source tree. An additional grant
6685
+ * of patent rights can be found in the PATENTS file in the same directory.
6686
+ *
6687
+ * @providesModule SyntheticEvent
6688
+ */
6689
+
6690
+ 'use strict';
6691
+
6692
+ var _assign = __webpack_require__(5);
6693
+
6694
+ var PooledClass = __webpack_require__(7);
6695
+
6696
+ var emptyFunction = __webpack_require__(13);
6697
+ var warning = __webpack_require__(12);
6698
+
6699
+ var didWarnForAddedNewProperty = false;
6700
+ var isProxySupported = typeof Proxy === 'function';
6701
+
6702
+ var shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];
6703
+
6704
+ /**
6705
+ * @interface Event
6706
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
6707
+ */
6708
+ var EventInterface = {
6709
+ type: null,
6710
+ target: null,
6711
+ // currentTarget is set when dispatching; no use in copying it here
6712
+ currentTarget: emptyFunction.thatReturnsNull,
6713
+ eventPhase: null,
6714
+ bubbles: null,
6715
+ cancelable: null,
6716
+ timeStamp: function (event) {
6717
+ return event.timeStamp || Date.now();
6718
+ },
6719
+ defaultPrevented: null,
6720
+ isTrusted: null
6721
+ };
6722
+
6723
+ /**
6724
+ * Synthetic events are dispatched by event plugins, typically in response to a
6725
+ * top-level event delegation handler.
6726
+ *
6727
+ * These systems should generally use pooling to reduce the frequency of garbage
6728
+ * collection. The system should check `isPersistent` to determine whether the
6729
+ * event should be released into the pool after being dispatched. Users that
6730
+ * need a persisted event should invoke `persist`.
6731
+ *
6732
+ * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
6733
+ * normalizing browser quirks. Subclasses do not necessarily have to implement a
6734
+ * DOM interface; custom application-specific events can also subclass this.
6735
+ *
6736
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
6737
+ * @param {*} targetInst Marker identifying the event target.
6738
+ * @param {object} nativeEvent Native browser event.
6739
+ * @param {DOMEventTarget} nativeEventTarget Target node.
6740
+ */
6741
+ function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {
6742
+ if (process.env.NODE_ENV !== 'production') {
6743
+ // these have a getter/setter for warnings
6744
+ delete this.nativeEvent;
6745
+ delete this.preventDefault;
6746
+ delete this.stopPropagation;
6747
+ }
6748
+
6749
+ this.dispatchConfig = dispatchConfig;
6750
+ this._targetInst = targetInst;
6751
+ this.nativeEvent = nativeEvent;
6752
+
6753
+ var Interface = this.constructor.Interface;
6754
+ for (var propName in Interface) {
6755
+ if (!Interface.hasOwnProperty(propName)) {
6756
+ continue;
6757
+ }
6758
+ if (process.env.NODE_ENV !== 'production') {
6759
+ delete this[propName]; // this has a getter/setter for warnings
6760
+ }
6761
+ var normalize = Interface[propName];
6762
+ if (normalize) {
6763
+ this[propName] = normalize(nativeEvent);
6764
+ } else {
6765
+ if (propName === 'target') {
6766
+ this.target = nativeEventTarget;
6767
+ } else {
6768
+ this[propName] = nativeEvent[propName];
6769
+ }
6770
+ }
6771
+ }
6772
+
6773
+ var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
6774
+ if (defaultPrevented) {
6775
+ this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
6776
+ } else {
6777
+ this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
6778
+ }
6779
+ this.isPropagationStopped = emptyFunction.thatReturnsFalse;
6780
+ return this;
6781
+ }
6782
+
6783
+ _assign(SyntheticEvent.prototype, {
6784
+
6785
+ preventDefault: function () {
6786
+ this.defaultPrevented = true;
6787
+ var event = this.nativeEvent;
6788
+ if (!event) {
6789
+ return;
6790
+ }
6791
+
6792
+ if (event.preventDefault) {
6793
+ event.preventDefault();
6794
+ } else if (typeof event.returnValue !== 'unknown') {
6795
+ // eslint-disable-line valid-typeof
6796
+ event.returnValue = false;
6797
+ }
6798
+ this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
6799
+ },
6800
+
6801
+ stopPropagation: function () {
6802
+ var event = this.nativeEvent;
6803
+ if (!event) {
6804
+ return;
6805
+ }
6806
+
6807
+ if (event.stopPropagation) {
6808
+ event.stopPropagation();
6809
+ } else if (typeof event.cancelBubble !== 'unknown') {
6810
+ // eslint-disable-line valid-typeof
6811
+ // The ChangeEventPlugin registers a "propertychange" event for
6812
+ // IE. This event does not support bubbling or cancelling, and
6813
+ // any references to cancelBubble throw "Member not found". A
6814
+ // typeof check of "unknown" circumvents this issue (and is also
6815
+ // IE specific).
6816
+ event.cancelBubble = true;
6817
+ }
6818
+
6819
+ this.isPropagationStopped = emptyFunction.thatReturnsTrue;
6820
+ },
6821
+
6822
+ /**
6823
+ * We release all dispatched `SyntheticEvent`s after each event loop, adding
6824
+ * them back into the pool. This allows a way to hold onto a reference that
6825
+ * won't be added back into the pool.
6826
+ */
6827
+ persist: function () {
6828
+ this.isPersistent = emptyFunction.thatReturnsTrue;
6829
+ },
6830
+
6831
+ /**
6832
+ * Checks if this event should be released back into the pool.
6833
+ *
6834
+ * @return {boolean} True if this should not be released, false otherwise.
6835
+ */
6836
+ isPersistent: emptyFunction.thatReturnsFalse,
6837
+
6838
+ /**
6839
+ * `PooledClass` looks for `destructor` on each instance it releases.
6840
+ */
6841
+ destructor: function () {
6842
+ var Interface = this.constructor.Interface;
6843
+ for (var propName in Interface) {
6844
+ if (process.env.NODE_ENV !== 'production') {
6845
+ Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));
6846
+ } else {
6847
+ this[propName] = null;
6848
+ }
6849
+ }
6850
+ for (var i = 0; i < shouldBeReleasedProperties.length; i++) {
6851
+ this[shouldBeReleasedProperties[i]] = null;
6852
+ }
6853
+ if (process.env.NODE_ENV !== 'production') {
6854
+ Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));
6855
+ Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));
6856
+ Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));
6857
+ }
6858
+ }
6859
+
6860
+ });
6861
+
6862
+ SyntheticEvent.Interface = EventInterface;
6863
+
6864
+ if (process.env.NODE_ENV !== 'production') {
6865
+ if (isProxySupported) {
6866
+ /*eslint-disable no-func-assign */
6867
+ SyntheticEvent = new Proxy(SyntheticEvent, {
6868
+ construct: function (target, args) {
6869
+ return this.apply(target, Object.create(target.prototype), args);
6870
+ },
6871
+ apply: function (constructor, that, args) {
6872
+ return new Proxy(constructor.apply(that, args), {
6873
+ set: function (target, prop, value) {
6874
+ if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {
6875
+ process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;
6876
+ didWarnForAddedNewProperty = true;
6877
+ }
6878
+ target[prop] = value;
6879
+ return true;
6880
+ }
6881
+ });
6882
+ }
6883
+ });
6884
+ /*eslint-enable no-func-assign */
6885
+ }
6886
+ }
6887
+ /**
6888
+ * Helper to reduce boilerplate when creating subclasses.
6889
+ *
6890
+ * @param {function} Class
6891
+ * @param {?object} Interface
6892
+ */
6893
+ SyntheticEvent.augmentClass = function (Class, Interface) {
6894
+ var Super = this;
6895
+
6896
+ var E = function () {};
6897
+ E.prototype = Super.prototype;
6898
+ var prototype = new E();
6899
+
6900
+ _assign(prototype, Class.prototype);
6901
+ Class.prototype = prototype;
6902
+ Class.prototype.constructor = Class;
6903
+
6904
+ Class.Interface = _assign({}, Super.Interface, Interface);
6905
+ Class.augmentClass = Super.augmentClass;
6906
+
6907
+ PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);
6908
+ };
6909
+
6910
+ PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);
6911
+
6912
+ module.exports = SyntheticEvent;
6913
+
6914
+ /**
6915
+ * Helper to nullify syntheticEvent instance properties when destructing
6916
+ *
6917
+ * @param {object} SyntheticEvent
6918
+ * @param {String} propName
6919
+ * @return {object} defineProperty object
6920
+ */
6921
+ function getPooledWarningPropertyDefinition(propName, getVal) {
6922
+ var isFunction = typeof getVal === 'function';
6923
+ return {
6924
+ configurable: true,
6925
+ set: set,
6926
+ get: get
6927
+ };
6928
+
6929
+ function set(val) {
6930
+ var action = isFunction ? 'setting the method' : 'setting the property';
6931
+ warn(action, 'This is effectively a no-op');
6932
+ return val;
6933
+ }
6934
+
6935
+ function get() {
6936
+ var action = isFunction ? 'accessing the method' : 'accessing the property';
6937
+ var result = isFunction ? 'This is a no-op function' : 'This is set to null';
6938
+ warn(action, result);
6939
+ return getVal;
6940
+ }
6941
+
6942
+ function warn(action, result) {
6943
+ var warningCondition = false;
6944
+ process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\'re seeing this, ' + 'you\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;
6945
+ }
6946
+ }
6947
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
6948
+
6949
+ /***/ },
6950
+ /* 55 */
6951
+ /***/ function(module, exports, __webpack_require__) {
6952
+
6953
+ /**
6954
+ * Copyright 2013-present, Facebook, Inc.
6955
+ * All rights reserved.
6956
+ *
6957
+ * This source code is licensed under the BSD-style license found in the
6958
+ * LICENSE file in the root directory of this source tree. An additional grant
6959
+ * of patent rights can be found in the PATENTS file in the same directory.
6960
+ *
6961
+ * @providesModule SyntheticInputEvent
6962
+ */
6963
+
6964
+ 'use strict';
6965
+
6966
+ var SyntheticEvent = __webpack_require__(54);
6967
+
6968
+ /**
6969
+ * @interface Event
6970
+ * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
6971
+ * /#events-inputevents
6972
+ */
6973
+ var InputEventInterface = {
6974
+ data: null
6975
+ };
6976
+
6977
+ /**
6978
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
6979
+ * @param {string} dispatchMarker Marker identifying the event target.
6980
+ * @param {object} nativeEvent Native browser event.
6981
+ * @extends {SyntheticUIEvent}
6982
+ */
6983
+ function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
6984
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
6985
+ }
6986
+
6987
+ SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);
6988
+
6989
+ module.exports = SyntheticInputEvent;
6990
+
6991
+ /***/ },
6992
+ /* 56 */
6993
+ /***/ function(module, exports, __webpack_require__) {
6994
+
6995
+ /**
6996
+ * Copyright 2013-present, Facebook, Inc.
6997
+ * All rights reserved.
6998
+ *
6999
+ * This source code is licensed under the BSD-style license found in the
7000
+ * LICENSE file in the root directory of this source tree. An additional grant
7001
+ * of patent rights can be found in the PATENTS file in the same directory.
7002
+ *
7003
+ * @providesModule ChangeEventPlugin
7004
+ */
7005
+
7006
+ 'use strict';
7007
+
7008
+ var EventConstants = __webpack_require__(42);
7009
+ var EventPluginHub = __webpack_require__(44);
7010
+ var EventPropagators = __webpack_require__(43);
7011
+ var ExecutionEnvironment = __webpack_require__(50);
7012
+ var ReactDOMComponentTree = __webpack_require__(37);
7013
+ var ReactUpdates = __webpack_require__(57);
7014
+ var SyntheticEvent = __webpack_require__(54);
7015
+
7016
+ var getEventTarget = __webpack_require__(71);
7017
+ var isEventSupported = __webpack_require__(72);
7018
+ var isTextInputElement = __webpack_require__(73);
7019
+ var keyOf = __webpack_require__(26);
7020
+
7021
+ var topLevelTypes = EventConstants.topLevelTypes;
7022
+
7023
+ var eventTypes = {
7024
+ change: {
7025
+ phasedRegistrationNames: {
7026
+ bubbled: keyOf({ onChange: null }),
7027
+ captured: keyOf({ onChangeCapture: null })
7028
+ },
7029
+ dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
7030
+ }
7031
+ };
7032
+
7033
+ /**
7034
+ * For IE shims
7035
+ */
7036
+ var activeElement = null;
7037
+ var activeElementInst = null;
7038
+ var activeElementValue = null;
7039
+ var activeElementValueProp = null;
7040
+
7041
+ /**
7042
+ * SECTION: handle `change` event
7043
+ */
7044
+ function shouldUseChangeEvent(elem) {
7045
+ var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
7046
+ return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
7047
+ }
7048
+
7049
+ var doesChangeEventBubble = false;
7050
+ if (ExecutionEnvironment.canUseDOM) {
7051
+ // See `handleChange` comment below
7052
+ doesChangeEventBubble = isEventSupported('change') && (!document.documentMode || document.documentMode > 8);
7053
+ }
7054
+
7055
+ function manualDispatchChangeEvent(nativeEvent) {
7056
+ var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));
7057
+ EventPropagators.accumulateTwoPhaseDispatches(event);
7058
+
7059
+ // If change and propertychange bubbled, we'd just bind to it like all the
7060
+ // other events and have it go through ReactBrowserEventEmitter. Since it
7061
+ // doesn't, we manually listen for the events and so we have to enqueue and
7062
+ // process the abstract event manually.
7063
+ //
7064
+ // Batching is necessary here in order to ensure that all event handlers run
7065
+ // before the next rerender (including event handlers attached to ancestor
7066
+ // elements instead of directly on the input). Without this, controlled
7067
+ // components don't work properly in conjunction with event bubbling because
7068
+ // the component is rerendered and the value reverted before all the event
7069
+ // handlers can run. See https://github.com/facebook/react/issues/708.
7070
+ ReactUpdates.batchedUpdates(runEventInBatch, event);
7071
+ }
7072
+
7073
+ function runEventInBatch(event) {
7074
+ EventPluginHub.enqueueEvents(event);
7075
+ EventPluginHub.processEventQueue(false);
7076
+ }
7077
+
7078
+ function startWatchingForChangeEventIE8(target, targetInst) {
7079
+ activeElement = target;
7080
+ activeElementInst = targetInst;
7081
+ activeElement.attachEvent('onchange', manualDispatchChangeEvent);
7082
+ }
7083
+
7084
+ function stopWatchingForChangeEventIE8() {
7085
+ if (!activeElement) {
7086
+ return;
7087
+ }
7088
+ activeElement.detachEvent('onchange', manualDispatchChangeEvent);
7089
+ activeElement = null;
7090
+ activeElementInst = null;
7091
+ }
7092
+
7093
+ function getTargetInstForChangeEvent(topLevelType, targetInst) {
7094
+ if (topLevelType === topLevelTypes.topChange) {
7095
+ return targetInst;
7096
+ }
7097
+ }
7098
+ function handleEventsForChangeEventIE8(topLevelType, target, targetInst) {
7099
+ if (topLevelType === topLevelTypes.topFocus) {
7100
+ // stopWatching() should be a noop here but we call it just in case we
7101
+ // missed a blur event somehow.
7102
+ stopWatchingForChangeEventIE8();
7103
+ startWatchingForChangeEventIE8(target, targetInst);
7104
+ } else if (topLevelType === topLevelTypes.topBlur) {
7105
+ stopWatchingForChangeEventIE8();
7106
+ }
7107
+ }
7108
+
7109
+ /**
7110
+ * SECTION: handle `input` event
7111
+ */
7112
+ var isInputEventSupported = false;
7113
+ if (ExecutionEnvironment.canUseDOM) {
7114
+ // IE9 claims to support the input event but fails to trigger it when
7115
+ // deleting text, so we ignore its input events.
7116
+ // IE10+ fire input events to often, such when a placeholder
7117
+ // changes or when an input with a placeholder is focused.
7118
+ isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 11);
7119
+ }
7120
+
7121
+ /**
7122
+ * (For IE <=11) Replacement getter/setter for the `value` property that gets
7123
+ * set on the active element.
7124
+ */
7125
+ var newValueProp = {
7126
+ get: function () {
7127
+ return activeElementValueProp.get.call(this);
7128
+ },
7129
+ set: function (val) {
7130
+ // Cast to a string so we can do equality checks.
7131
+ activeElementValue = '' + val;
7132
+ activeElementValueProp.set.call(this, val);
7133
+ }
7134
+ };
7135
+
7136
+ /**
7137
+ * (For IE <=11) Starts tracking propertychange events on the passed-in element
7138
+ * and override the value property so that we can distinguish user events from
7139
+ * value changes in JS.
7140
+ */
7141
+ function startWatchingForValueChange(target, targetInst) {
7142
+ activeElement = target;
7143
+ activeElementInst = targetInst;
7144
+ activeElementValue = target.value;
7145
+ activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');
7146
+
7147
+ // Not guarded in a canDefineProperty check: IE8 supports defineProperty only
7148
+ // on DOM elements
7149
+ Object.defineProperty(activeElement, 'value', newValueProp);
7150
+ if (activeElement.attachEvent) {
7151
+ activeElement.attachEvent('onpropertychange', handlePropertyChange);
7152
+ } else {
7153
+ activeElement.addEventListener('propertychange', handlePropertyChange, false);
7154
+ }
7155
+ }
7156
+
7157
+ /**
7158
+ * (For IE <=11) Removes the event listeners from the currently-tracked element,
7159
+ * if any exists.
7160
+ */
7161
+ function stopWatchingForValueChange() {
7162
+ if (!activeElement) {
7163
+ return;
7164
+ }
7165
+
7166
+ // delete restores the original property definition
7167
+ delete activeElement.value;
7168
+
7169
+ if (activeElement.detachEvent) {
7170
+ activeElement.detachEvent('onpropertychange', handlePropertyChange);
7171
+ } else {
7172
+ activeElement.removeEventListener('propertychange', handlePropertyChange, false);
7173
+ }
7174
+
7175
+ activeElement = null;
7176
+ activeElementInst = null;
7177
+ activeElementValue = null;
7178
+ activeElementValueProp = null;
7179
+ }
7180
+
7181
+ /**
7182
+ * (For IE <=11) Handles a propertychange event, sending a `change` event if
7183
+ * the value of the active element has changed.
7184
+ */
7185
+ function handlePropertyChange(nativeEvent) {
7186
+ if (nativeEvent.propertyName !== 'value') {
7187
+ return;
7188
+ }
7189
+ var value = nativeEvent.srcElement.value;
7190
+ if (value === activeElementValue) {
7191
+ return;
7192
+ }
7193
+ activeElementValue = value;
7194
+
7195
+ manualDispatchChangeEvent(nativeEvent);
7196
+ }
7197
+
7198
+ /**
7199
+ * If a `change` event should be fired, returns the target's ID.
7200
+ */
7201
+ function getTargetInstForInputEvent(topLevelType, targetInst) {
7202
+ if (topLevelType === topLevelTypes.topInput) {
7203
+ // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
7204
+ // what we want so fall through here and trigger an abstract event
7205
+ return targetInst;
7206
+ }
7207
+ }
7208
+
7209
+ function handleEventsForInputEventIE(topLevelType, target, targetInst) {
7210
+ if (topLevelType === topLevelTypes.topFocus) {
7211
+ // In IE8, we can capture almost all .value changes by adding a
7212
+ // propertychange handler and looking for events with propertyName
7213
+ // equal to 'value'
7214
+ // In IE9-11, propertychange fires for most input events but is buggy and
7215
+ // doesn't fire when text is deleted, but conveniently, selectionchange
7216
+ // appears to fire in all of the remaining cases so we catch those and
7217
+ // forward the event if the value has changed
7218
+ // In either case, we don't want to call the event handler if the value
7219
+ // is changed from JS so we redefine a setter for `.value` that updates
7220
+ // our activeElementValue variable, allowing us to ignore those changes
7221
+ //
7222
+ // stopWatching() should be a noop here but we call it just in case we
7223
+ // missed a blur event somehow.
7224
+ stopWatchingForValueChange();
7225
+ startWatchingForValueChange(target, targetInst);
7226
+ } else if (topLevelType === topLevelTypes.topBlur) {
7227
+ stopWatchingForValueChange();
7228
+ }
7229
+ }
7230
+
7231
+ // For IE8 and IE9.
7232
+ function getTargetInstForInputEventIE(topLevelType, targetInst) {
7233
+ if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
7234
+ // On the selectionchange event, the target is just document which isn't
7235
+ // helpful for us so just check activeElement instead.
7236
+ //
7237
+ // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
7238
+ // propertychange on the first input event after setting `value` from a
7239
+ // script and fires only keydown, keypress, keyup. Catching keyup usually
7240
+ // gets it and catching keydown lets us fire an event for the first
7241
+ // keystroke if user does a key repeat (it'll be a little delayed: right
7242
+ // before the second keystroke). Other input methods (e.g., paste) seem to
7243
+ // fire selectionchange normally.
7244
+ if (activeElement && activeElement.value !== activeElementValue) {
7245
+ activeElementValue = activeElement.value;
7246
+ return activeElementInst;
7247
+ }
7248
+ }
7249
+ }
7250
+
7251
+ /**
7252
+ * SECTION: handle `click` event
7253
+ */
7254
+ function shouldUseClickEvent(elem) {
7255
+ // Use the `click` event to detect changes to checkbox and radio inputs.
7256
+ // This approach works across all browsers, whereas `change` does not fire
7257
+ // until `blur` in IE8.
7258
+ return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
7259
+ }
7260
+
7261
+ function getTargetInstForClickEvent(topLevelType, targetInst) {
7262
+ if (topLevelType === topLevelTypes.topClick) {
7263
+ return targetInst;
7264
+ }
7265
+ }
7266
+
7267
+ /**
7268
+ * This plugin creates an `onChange` event that normalizes change events
7269
+ * across form elements. This event fires at a time when it's possible to
7270
+ * change the element's value without seeing a flicker.
7271
+ *
7272
+ * Supported elements are:
7273
+ * - input (see `isTextInputElement`)
7274
+ * - textarea
7275
+ * - select
7276
+ */
7277
+ var ChangeEventPlugin = {
7278
+
7279
+ eventTypes: eventTypes,
7280
+
7281
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
7282
+ var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
7283
+
7284
+ var getTargetInstFunc, handleEventFunc;
7285
+ if (shouldUseChangeEvent(targetNode)) {
7286
+ if (doesChangeEventBubble) {
7287
+ getTargetInstFunc = getTargetInstForChangeEvent;
7288
+ } else {
7289
+ handleEventFunc = handleEventsForChangeEventIE8;
7290
+ }
7291
+ } else if (isTextInputElement(targetNode)) {
7292
+ if (isInputEventSupported) {
7293
+ getTargetInstFunc = getTargetInstForInputEvent;
7294
+ } else {
7295
+ getTargetInstFunc = getTargetInstForInputEventIE;
7296
+ handleEventFunc = handleEventsForInputEventIE;
7297
+ }
7298
+ } else if (shouldUseClickEvent(targetNode)) {
7299
+ getTargetInstFunc = getTargetInstForClickEvent;
7300
+ }
7301
+
7302
+ if (getTargetInstFunc) {
7303
+ var inst = getTargetInstFunc(topLevelType, targetInst);
7304
+ if (inst) {
7305
+ var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);
7306
+ event.type = 'change';
7307
+ EventPropagators.accumulateTwoPhaseDispatches(event);
7308
+ return event;
7309
+ }
7310
+ }
7311
+
7312
+ if (handleEventFunc) {
7313
+ handleEventFunc(topLevelType, targetNode, targetInst);
7314
+ }
7315
+ }
7316
+
7317
+ };
7318
+
7319
+ module.exports = ChangeEventPlugin;
7320
+
7321
+ /***/ },
7322
+ /* 57 */
7323
+ /***/ function(module, exports, __webpack_require__) {
7324
+
7325
+ /* WEBPACK VAR INJECTION */(function(process) {/**
7326
+ * Copyright 2013-present, Facebook, Inc.
7327
+ * All rights reserved.
7328
+ *
7329
+ * This source code is licensed under the BSD-style license found in the
7330
+ * LICENSE file in the root directory of this source tree. An additional grant
7331
+ * of patent rights can be found in the PATENTS file in the same directory.
7332
+ *
7333
+ * @providesModule ReactUpdates
7334
+ */
7335
+
7336
+ 'use strict';
7337
+
7338
+ var _prodInvariant = __webpack_require__(8),
7339
+ _assign = __webpack_require__(5);
7340
+
7341
+ var CallbackQueue = __webpack_require__(58);
7342
+ var PooledClass = __webpack_require__(7);
7343
+ var ReactFeatureFlags = __webpack_require__(59);
7344
+ var ReactReconciler = __webpack_require__(60);
7345
+ var Transaction = __webpack_require__(70);
7346
+
7347
+ var invariant = __webpack_require__(9);
7348
+
7349
+ var dirtyComponents = [];
7350
+ var updateBatchNumber = 0;
7351
+ var asapCallbackQueue = CallbackQueue.getPooled();
7352
+ var asapEnqueued = false;
7353
+
7354
+ var batchingStrategy = null;
7355
+
7356
+ function ensureInjected() {
7357
+ !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;
7358
+ }
7359
+
7360
+ var NESTED_UPDATES = {
7361
+ initialize: function () {
7362
+ this.dirtyComponentsLength = dirtyComponents.length;
7363
+ },
7364
+ close: function () {
7365
+ if (this.dirtyComponentsLength !== dirtyComponents.length) {
7366
+ // Additional updates were enqueued by componentDidUpdate handlers or
7367
+ // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
7368
+ // these new updates so that if A's componentDidUpdate calls setState on
7369
+ // B, B will update before the callback A's updater provided when calling
7370
+ // setState.
7371
+ dirtyComponents.splice(0, this.dirtyComponentsLength);
7372
+ flushBatchedUpdates();
7373
+ } else {
7374
+ dirtyComponents.length = 0;
7375
+ }
7376
+ }
7377
+ };
7378
+
7379
+ var UPDATE_QUEUEING = {
7380
+ initialize: function () {
7381
+ this.callbackQueue.reset();
7382
+ },
7383
+ close: function () {
7384
+ this.callbackQueue.notifyAll();
7385
+ }
7386
+ };
7387
+
7388
+ var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];
7389
+
7390
+ function ReactUpdatesFlushTransaction() {
7391
+ this.reinitializeTransaction();
7392
+ this.dirtyComponentsLength = null;
7393
+ this.callbackQueue = CallbackQueue.getPooled();
7394
+ this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(
7395
+ /* useCreateElement */true);
7396
+ }
7397
+
7398
+ _assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
7399
+ getTransactionWrappers: function () {
7400
+ return TRANSACTION_WRAPPERS;
7401
+ },
7402
+
7403
+ destructor: function () {
7404
+ this.dirtyComponentsLength = null;
7405
+ CallbackQueue.release(this.callbackQueue);
7406
+ this.callbackQueue = null;
7407
+ ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
7408
+ this.reconcileTransaction = null;
7409
+ },
7410
+
7411
+ perform: function (method, scope, a) {
7412
+ // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
7413
+ // with this transaction's wrappers around it.
7414
+ return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
7415
+ }
7416
+ });
7417
+
7418
+ PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);
7419
+
7420
+ function batchedUpdates(callback, a, b, c, d, e) {
7421
+ ensureInjected();
7422
+ batchingStrategy.batchedUpdates(callback, a, b, c, d, e);
7423
+ }
7424
+
7425
+ /**
7426
+ * Array comparator for ReactComponents by mount ordering.
7427
+ *
7428
+ * @param {ReactComponent} c1 first component you're comparing
7429
+ * @param {ReactComponent} c2 second component you're comparing
7430
+ * @return {number} Return value usable by Array.prototype.sort().
7431
+ */
7432
+ function mountOrderComparator(c1, c2) {
7433
+ return c1._mountOrder - c2._mountOrder;
7434
+ }
7435
+
7436
+ function runBatchedUpdates(transaction) {
7437
+ var len = transaction.dirtyComponentsLength;
7438
+ !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;
7439
+
7440
+ // Since reconciling a component higher in the owner hierarchy usually (not
7441
+ // always -- see shouldComponentUpdate()) will reconcile children, reconcile
7442
+ // them before their children by sorting the array.
7443
+ dirtyComponents.sort(mountOrderComparator);
7444
+
7445
+ // Any updates enqueued while reconciling must be performed after this entire
7446
+ // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and
7447
+ // C, B could update twice in a single batch if C's render enqueues an update
7448
+ // to B (since B would have already updated, we should skip it, and the only
7449
+ // way we can know to do so is by checking the batch counter).
7450
+ updateBatchNumber++;
7451
+
7452
+ for (var i = 0; i < len; i++) {
7453
+ // If a component is unmounted before pending changes apply, it will still
7454
+ // be here, but we assume that it has cleared its _pendingCallbacks and
7455
+ // that performUpdateIfNecessary is a noop.
7456
+ var component = dirtyComponents[i];
7457
+
7458
+ // If performUpdateIfNecessary happens to enqueue any new updates, we
7459
+ // shouldn't execute the callbacks until the next render happens, so
7460
+ // stash the callbacks first
7461
+ var callbacks = component._pendingCallbacks;
7462
+ component._pendingCallbacks = null;
7463
+
7464
+ var markerName;
7465
+ if (ReactFeatureFlags.logTopLevelRenders) {
7466
+ var namedComponent = component;
7467
+ // Duck type TopLevelWrapper. This is probably always true.
7468
+ if (component._currentElement.props === component._renderedComponent._currentElement) {
7469
+ namedComponent = component._renderedComponent;
7470
+ }
7471
+ markerName = 'React update: ' + namedComponent.getName();
7472
+ console.time(markerName);
7473
+ }
7474
+
7475
+ ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);
7476
+
7477
+ if (markerName) {
7478
+ console.timeEnd(markerName);
7479
+ }
7480
+
7481
+ if (callbacks) {
7482
+ for (var j = 0; j < callbacks.length; j++) {
7483
+ transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
7484
+ }
7485
+ }
7486
+ }
7487
+ }
7488
+
7489
+ var flushBatchedUpdates = function () {
7490
+ // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
7491
+ // array and perform any updates enqueued by mount-ready handlers (i.e.,
7492
+ // componentDidUpdate) but we need to check here too in order to catch
7493
+ // updates enqueued by setState callbacks and asap calls.
7494
+ while (dirtyComponents.length || asapEnqueued) {
7495
+ if (dirtyComponents.length) {
7496
+ var transaction = ReactUpdatesFlushTransaction.getPooled();
7497
+ transaction.perform(runBatchedUpdates, null, transaction);
7498
+ ReactUpdatesFlushTransaction.release(transaction);
7499
+ }
7500
+
7501
+ if (asapEnqueued) {
7502
+ asapEnqueued = false;
7503
+ var queue = asapCallbackQueue;
7504
+ asapCallbackQueue = CallbackQueue.getPooled();
7505
+ queue.notifyAll();
7506
+ CallbackQueue.release(queue);
7507
+ }
7508
+ }
7509
+ };
7510
+
7511
+ /**
7512
+ * Mark a component as needing a rerender, adding an optional callback to a
7513
+ * list of functions which will be executed once the rerender occurs.
7514
+ */
7515
+ function enqueueUpdate(component) {
7516
+ ensureInjected();
7517
+
7518
+ // Various parts of our code (such as ReactCompositeComponent's
7519
+ // _renderValidatedComponent) assume that calls to render aren't nested;
7520
+ // verify that that's the case. (This is called by each top-level update
7521
+ // function, like setState, forceUpdate, etc.; creation and
7522
+ // destruction of top-level components is guarded in ReactMount.)
7523
+
7524
+ if (!batchingStrategy.isBatchingUpdates) {
7525
+ batchingStrategy.batchedUpdates(enqueueUpdate, component);
7526
+ return;
7527
+ }
7528
+
7529
+ dirtyComponents.push(component);
7530
+ if (component._updateBatchNumber == null) {
7531
+ component._updateBatchNumber = updateBatchNumber + 1;
7532
+ }
7533
+ }
7534
+
7535
+ /**
7536
+ * Enqueue a callback to be run at the end of the current batching cycle. Throws
7537
+ * if no updates are currently being performed.
7538
+ */
7539
+ function asap(callback, context) {
7540
+ !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;
7541
+ asapCallbackQueue.enqueue(callback, context);
7542
+ asapEnqueued = true;
7543
+ }
7544
+
7545
+ var ReactUpdatesInjection = {
7546
+ injectReconcileTransaction: function (ReconcileTransaction) {
7547
+ !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;
7548
+ ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
7549
+ },
7550
+
7551
+ injectBatchingStrategy: function (_batchingStrategy) {
7552
+ !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;
7553
+ !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;
7554
+ !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;
7555
+ batchingStrategy = _batchingStrategy;
7556
+ }
7557
+ };
7558
+
7559
+ var ReactUpdates = {
7560
+ /**
7561
+ * React references `ReactReconcileTransaction` using this property in order
7562
+ * to allow dependency injection.
7563
+ *
7564
+ * @internal
7565
+ */
7566
+ ReactReconcileTransaction: null,
7567
+
7568
+ batchedUpdates: batchedUpdates,
7569
+ enqueueUpdate: enqueueUpdate,
7570
+ flushBatchedUpdates: flushBatchedUpdates,
7571
+ injection: ReactUpdatesInjection,
7572
+ asap: asap
7573
+ };
7574
+
7575
+ module.exports = ReactUpdates;
7576
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
7577
+
7578
+ /***/ },
7579
+ /* 58 */
7580
+ /***/ function(module, exports, __webpack_require__) {
7581
+
7582
+ /* WEBPACK VAR INJECTION */(function(process) {/**
7583
+ * Copyright 2013-present, Facebook, Inc.
7584
+ * All rights reserved.
7585
+ *
7586
+ * This source code is licensed under the BSD-style license found in the
7587
+ * LICENSE file in the root directory of this source tree. An additional grant
7588
+ * of patent rights can be found in the PATENTS file in the same directory.
7589
+ *
7590
+ * @providesModule CallbackQueue
7591
+ */
7592
+
7593
+ 'use strict';
7594
+
7595
+ var _prodInvariant = __webpack_require__(8),
7596
+ _assign = __webpack_require__(5);
7597
+
7598
+ var PooledClass = __webpack_require__(7);
7599
+
7600
+ var invariant = __webpack_require__(9);
7601
+
7602
+ /**
7603
+ * A specialized pseudo-event module to help keep track of components waiting to
7604
+ * be notified when their DOM representations are available for use.
7605
+ *
7606
+ * This implements `PooledClass`, so you should never need to instantiate this.
7607
+ * Instead, use `CallbackQueue.getPooled()`.
7608
+ *
7609
+ * @class ReactMountReady
7610
+ * @implements PooledClass
7611
+ * @internal
7612
+ */
7613
+ function CallbackQueue() {
7614
+ this._callbacks = null;
7615
+ this._contexts = null;
7616
+ }
7617
+
7618
+ _assign(CallbackQueue.prototype, {
7619
+
7620
+ /**
7621
+ * Enqueues a callback to be invoked when `notifyAll` is invoked.
7622
+ *
7623
+ * @param {function} callback Invoked when `notifyAll` is invoked.
7624
+ * @param {?object} context Context to call `callback` with.
7625
+ * @internal
7626
+ */
7627
+ enqueue: function (callback, context) {
7628
+ this._callbacks = this._callbacks || [];
7629
+ this._contexts = this._contexts || [];
7630
+ this._callbacks.push(callback);
7631
+ this._contexts.push(context);
7632
+ },
7633
+
7634
+ /**
7635
+ * Invokes all enqueued callbacks and clears the queue. This is invoked after
7636
+ * the DOM representation of a component has been created or updated.
7637
+ *
7638
+ * @internal
7639
+ */
7640
+ notifyAll: function () {
7641
+ var callbacks = this._callbacks;
7642
+ var contexts = this._contexts;
7643
+ if (callbacks) {
7644
+ !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
7645
+ this._callbacks = null;
7646
+ this._contexts = null;
7647
+ for (var i = 0; i < callbacks.length; i++) {
7648
+ callbacks[i].call(contexts[i]);
7649
+ }
7650
+ callbacks.length = 0;
7651
+ contexts.length = 0;
7652
+ }
7653
+ },
7654
+
7655
+ checkpoint: function () {
7656
+ return this._callbacks ? this._callbacks.length : 0;
7657
+ },
7658
+
7659
+ rollback: function (len) {
7660
+ if (this._callbacks) {
7661
+ this._callbacks.length = len;
7662
+ this._contexts.length = len;
7663
+ }
7664
+ },
7665
+
7666
+ /**
7667
+ * Resets the internal queue.
7668
+ *
7669
+ * @internal
7670
+ */
7671
+ reset: function () {
7672
+ this._callbacks = null;
7673
+ this._contexts = null;
7674
+ },
7675
+
7676
+ /**
7677
+ * `PooledClass` looks for this.
7678
+ */
7679
+ destructor: function () {
7680
+ this.reset();
7681
+ }
7682
+
7683
+ });
7684
+
7685
+ PooledClass.addPoolingTo(CallbackQueue);
7686
+
7687
+ module.exports = CallbackQueue;
7688
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
7689
+
7690
+ /***/ },
7691
+ /* 59 */
7692
+ /***/ function(module, exports) {
7693
+
7694
+ /**
7695
+ * Copyright 2013-present, Facebook, Inc.
7696
+ * All rights reserved.
7697
+ *
7698
+ * This source code is licensed under the BSD-style license found in the
7699
+ * LICENSE file in the root directory of this source tree. An additional grant
7700
+ * of patent rights can be found in the PATENTS file in the same directory.
7701
+ *
7702
+ * @providesModule ReactFeatureFlags
7703
+ *
7704
+ */
7705
+
7706
+ 'use strict';
7707
+
7708
+ var ReactFeatureFlags = {
7709
+ // When true, call console.time() before and .timeEnd() after each top-level
7710
+ // render (both initial renders and updates). Useful when looking at prod-mode
7711
+ // timeline profiles in Chrome, for example.
7712
+ logTopLevelRenders: false
7713
+ };
7714
+
7715
+ module.exports = ReactFeatureFlags;
7716
+
7717
+ /***/ },
7718
+ /* 60 */
7719
+ /***/ function(module, exports, __webpack_require__) {
7720
+
7721
+ /* WEBPACK VAR INJECTION */(function(process) {/**
7722
+ * Copyright 2013-present, Facebook, Inc.
7723
+ * All rights reserved.
7724
+ *
7725
+ * This source code is licensed under the BSD-style license found in the
7726
+ * LICENSE file in the root directory of this source tree. An additional grant
7727
+ * of patent rights can be found in the PATENTS file in the same directory.
7728
+ *
7729
+ * @providesModule ReactReconciler
7730
+ */
7731
+
7732
+ 'use strict';
7733
+
7734
+ var ReactRef = __webpack_require__(61);
7735
+ var ReactInstrumentation = __webpack_require__(63);
7736
+
7737
+ var warning = __webpack_require__(12);
7738
+
7739
+ /**
7740
+ * Helper to call ReactRef.attachRefs with this composite component, split out
7741
+ * to avoid allocations in the transaction mount-ready queue.
7742
+ */
7743
+ function attachRefs() {
7744
+ ReactRef.attachRefs(this, this._currentElement);
7745
+ }
7746
+
7747
+ var ReactReconciler = {
7748
+
7749
+ /**
7750
+ * Initializes the component, renders markup, and registers event listeners.
7751
+ *
7752
+ * @param {ReactComponent} internalInstance
7753
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
7754
+ * @param {?object} the containing host component instance
7755
+ * @param {?object} info about the host container
7756
+ * @return {?string} Rendered markup to be inserted into the DOM.
7757
+ * @final
7758
+ * @internal
7759
+ */
7760
+ mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots
7761
+ ) {
7762
+ if (process.env.NODE_ENV !== 'production') {
7763
+ if (internalInstance._debugID !== 0) {
7764
+ ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);
7765
+ }
7766
+ }
7767
+ var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);
7768
+ if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
7769
+ transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
7770
+ }
7771
+ if (process.env.NODE_ENV !== 'production') {
7772
+ if (internalInstance._debugID !== 0) {
7773
+ ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);
7774
+ }
7775
+ }
7776
+ return markup;
7777
+ },
7778
+
7779
+ /**
7780
+ * Returns a value that can be passed to
7781
+ * ReactComponentEnvironment.replaceNodeWithMarkup.
7782
+ */
7783
+ getHostNode: function (internalInstance) {
7784
+ return internalInstance.getHostNode();
7785
+ },
7786
+
7787
+ /**
7788
+ * Releases any resources allocated by `mountComponent`.
7789
+ *
7790
+ * @final
7791
+ * @internal
7792
+ */
7793
+ unmountComponent: function (internalInstance, safely) {
7794
+ if (process.env.NODE_ENV !== 'production') {
7795
+ if (internalInstance._debugID !== 0) {
7796
+ ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);
7797
+ }
7798
+ }
7799
+ ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
7800
+ internalInstance.unmountComponent(safely);
7801
+ if (process.env.NODE_ENV !== 'production') {
7802
+ if (internalInstance._debugID !== 0) {
7803
+ ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);
7804
+ }
7805
+ }
7806
+ },
7807
+
7808
+ /**
7809
+ * Update a component using a new element.
7810
+ *
7811
+ * @param {ReactComponent} internalInstance
7812
+ * @param {ReactElement} nextElement
7813
+ * @param {ReactReconcileTransaction} transaction
7814
+ * @param {object} context
7815
+ * @internal
7816
+ */
7817
+ receiveComponent: function (internalInstance, nextElement, transaction, context) {
7818
+ var prevElement = internalInstance._currentElement;
7819
+
7820
+ if (nextElement === prevElement && context === internalInstance._context) {
7821
+ // Since elements are immutable after the owner is rendered,
7822
+ // we can do a cheap identity compare here to determine if this is a
7823
+ // superfluous reconcile. It's possible for state to be mutable but such
7824
+ // change should trigger an update of the owner which would recreate
7825
+ // the element. We explicitly check for the existence of an owner since
7826
+ // it's possible for an element created outside a composite to be
7827
+ // deeply mutated and reused.
7828
+
7829
+ // TODO: Bailing out early is just a perf optimization right?
7830
+ // TODO: Removing the return statement should affect correctness?
7831
+ return;
7832
+ }
7833
+
7834
+ if (process.env.NODE_ENV !== 'production') {
7835
+ if (internalInstance._debugID !== 0) {
7836
+ ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);
7837
+ }
7838
+ }
7839
+
7840
+ var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
7841
+
7842
+ if (refsChanged) {
7843
+ ReactRef.detachRefs(internalInstance, prevElement);
7844
+ }
7845
+
7846
+ internalInstance.receiveComponent(nextElement, transaction, context);
7847
+
7848
+ if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {
7849
+ transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
7850
+ }
7851
+
7852
+ if (process.env.NODE_ENV !== 'production') {
7853
+ if (internalInstance._debugID !== 0) {
7854
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
7855
+ }
7856
+ }
7857
+ },
7858
+
7859
+ /**
7860
+ * Flush any dirty changes in a component.
7861
+ *
7862
+ * @param {ReactComponent} internalInstance
7863
+ * @param {ReactReconcileTransaction} transaction
7864
+ * @internal
7865
+ */
7866
+ performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {
7867
+ if (internalInstance._updateBatchNumber !== updateBatchNumber) {
7868
+ // The component's enqueued batch number should always be the current
7869
+ // batch or the following one.
7870
+ process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;
7871
+ return;
7872
+ }
7873
+ if (process.env.NODE_ENV !== 'production') {
7874
+ if (internalInstance._debugID !== 0) {
7875
+ ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);
7876
+ }
7877
+ }
7878
+ internalInstance.performUpdateIfNecessary(transaction);
7879
+ if (process.env.NODE_ENV !== 'production') {
7880
+ if (internalInstance._debugID !== 0) {
7881
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
7882
+ }
7883
+ }
7884
+ }
7885
+
7886
+ };
7887
+
7888
+ module.exports = ReactReconciler;
7889
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
7890
+
7891
+ /***/ },
7892
+ /* 61 */
7893
+ /***/ function(module, exports, __webpack_require__) {
7894
+
7895
+ /**
7896
+ * Copyright 2013-present, Facebook, Inc.
7897
+ * All rights reserved.
7898
+ *
7899
+ * This source code is licensed under the BSD-style license found in the
7900
+ * LICENSE file in the root directory of this source tree. An additional grant
7901
+ * of patent rights can be found in the PATENTS file in the same directory.
7902
+ *
7903
+ * @providesModule ReactRef
7904
+ */
7905
+
7906
+ 'use strict';
7907
+
7908
+ var ReactOwner = __webpack_require__(62);
7909
+
7910
+ var ReactRef = {};
7911
+
7912
+ function attachRef(ref, component, owner) {
7913
+ if (typeof ref === 'function') {
7914
+ ref(component.getPublicInstance());
7915
+ } else {
7916
+ // Legacy ref
7917
+ ReactOwner.addComponentAsRefTo(component, ref, owner);
7918
+ }
7919
+ }
7920
+
7921
+ function detachRef(ref, component, owner) {
7922
+ if (typeof ref === 'function') {
7923
+ ref(null);
7924
+ } else {
7925
+ // Legacy ref
7926
+ ReactOwner.removeComponentAsRefFrom(component, ref, owner);
7927
+ }
7928
+ }
7929
+
7930
+ ReactRef.attachRefs = function (instance, element) {
7931
+ if (element === null || element === false) {
7932
+ return;
7933
+ }
7934
+ var ref = element.ref;
7935
+ if (ref != null) {
7936
+ attachRef(ref, instance, element._owner);
7937
+ }
7938
+ };
7939
+
7940
+ ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
7941
+ // If either the owner or a `ref` has changed, make sure the newest owner
7942
+ // has stored a reference to `this`, and the previous owner (if different)
7943
+ // has forgotten the reference to `this`. We use the element instead
7944
+ // of the public this.props because the post processing cannot determine
7945
+ // a ref. The ref conceptually lives on the element.
7946
+
7947
+ // TODO: Should this even be possible? The owner cannot change because
7948
+ // it's forbidden by shouldUpdateReactComponent. The ref can change
7949
+ // if you swap the keys of but not the refs. Reconsider where this check
7950
+ // is made. It probably belongs where the key checking and
7951
+ // instantiateReactComponent is done.
7952
+
7953
+ var prevEmpty = prevElement === null || prevElement === false;
7954
+ var nextEmpty = nextElement === null || nextElement === false;
7955
+
7956
+ return (
7957
+ // This has a few false positives w/r/t empty components.
7958
+ prevEmpty || nextEmpty || nextElement.ref !== prevElement.ref ||
7959
+ // If owner changes but we have an unchanged function ref, don't update refs
7960
+ typeof nextElement.ref === 'string' && nextElement._owner !== prevElement._owner
7961
+ );
7962
+ };
7963
+
7964
+ ReactRef.detachRefs = function (instance, element) {
7965
+ if (element === null || element === false) {
7966
+ return;
7967
+ }
7968
+ var ref = element.ref;
7969
+ if (ref != null) {
7970
+ detachRef(ref, instance, element._owner);
7971
+ }
7972
+ };
7973
+
7974
+ module.exports = ReactRef;
7975
+
7976
+ /***/ },
7977
+ /* 62 */
7978
+ /***/ function(module, exports, __webpack_require__) {
7979
+
7980
+ /* WEBPACK VAR INJECTION */(function(process) {/**
7981
+ * Copyright 2013-present, Facebook, Inc.
7982
+ * All rights reserved.
7983
+ *
7984
+ * This source code is licensed under the BSD-style license found in the
7985
+ * LICENSE file in the root directory of this source tree. An additional grant
7986
+ * of patent rights can be found in the PATENTS file in the same directory.
7987
+ *
7988
+ * @providesModule ReactOwner
7989
+ */
7990
+
7991
+ 'use strict';
7992
+
7993
+ var _prodInvariant = __webpack_require__(8);
7994
+
7995
+ var invariant = __webpack_require__(9);
7996
+
7997
+ /**
7998
+ * ReactOwners are capable of storing references to owned components.
7999
+ *
8000
+ * All components are capable of //being// referenced by owner components, but
8001
+ * only ReactOwner components are capable of //referencing// owned components.
8002
+ * The named reference is known as a "ref".
8003
+ *
8004
+ * Refs are available when mounted and updated during reconciliation.
8005
+ *
8006
+ * var MyComponent = React.createClass({
8007
+ * render: function() {
8008
+ * return (
8009
+ * <div onClick={this.handleClick}>
8010
+ * <CustomComponent ref="custom" />
8011
+ * </div>
8012
+ * );
8013
+ * },
8014
+ * handleClick: function() {
8015
+ * this.refs.custom.handleClick();
8016
+ * },
8017
+ * componentDidMount: function() {
8018
+ * this.refs.custom.initialize();
8019
+ * }
8020
+ * });
8021
+ *
8022
+ * Refs should rarely be used. When refs are used, they should only be done to
8023
+ * control data that is not handled by React's data flow.
8024
+ *
8025
+ * @class ReactOwner
8026
+ */
8027
+ var ReactOwner = {
8028
+
8029
+ /**
8030
+ * @param {?object} object
8031
+ * @return {boolean} True if `object` is a valid owner.
8032
+ * @final
8033
+ */
8034
+ isValidOwner: function (object) {
8035
+ return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
8036
+ },
8037
+
8038
+ /**
8039
+ * Adds a component by ref to an owner component.
8040
+ *
8041
+ * @param {ReactComponent} component Component to reference.
8042
+ * @param {string} ref Name by which to refer to the component.
8043
+ * @param {ReactOwner} owner Component on which to record the ref.
8044
+ * @final
8045
+ * @internal
8046
+ */
8047
+ addComponentAsRefTo: function (component, ref, owner) {
8048
+ !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;
8049
+ owner.attachRef(ref, component);
8050
+ },
8051
+
8052
+ /**
8053
+ * Removes a component by ref from an owner component.
8054
+ *
8055
+ * @param {ReactComponent} component Component to dereference.
8056
+ * @param {string} ref Name of the ref to remove.
8057
+ * @param {ReactOwner} owner Component on which the ref is recorded.
8058
+ * @final
8059
+ * @internal
8060
+ */
8061
+ removeComponentAsRefFrom: function (component, ref, owner) {
8062
+ !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;
8063
+ var ownerPublicInstance = owner.getPublicInstance();
8064
+ // Check that `component`'s owner is still alive and that `component` is still the current ref
8065
+ // because we do not want to detach the ref if another component stole it.
8066
+ if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {
8067
+ owner.detachRef(ref);
8068
+ }
8069
+ }
8070
+
8071
+ };
8072
+
8073
+ module.exports = ReactOwner;
8074
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8075
+
8076
+ /***/ },
8077
+ /* 63 */
8078
+ /***/ function(module, exports, __webpack_require__) {
8079
+
8080
+ /* WEBPACK VAR INJECTION */(function(process) {/**
8081
+ * Copyright 2016-present, Facebook, Inc.
8082
+ * All rights reserved.
8083
+ *
8084
+ * This source code is licensed under the BSD-style license found in the
8085
+ * LICENSE file in the root directory of this source tree. An additional grant
8086
+ * of patent rights can be found in the PATENTS file in the same directory.
8087
+ *
8088
+ * @providesModule ReactInstrumentation
8089
+ */
8090
+
8091
+ 'use strict';
8092
+
8093
+ var debugTool = null;
8094
+
8095
+ if (process.env.NODE_ENV !== 'production') {
8096
+ var ReactDebugTool = __webpack_require__(64);
8097
+ debugTool = ReactDebugTool;
8098
+ }
8099
+
8100
+ module.exports = { debugTool: debugTool };
8101
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8102
+
8103
+ /***/ },
8104
+ /* 64 */
8105
+ /***/ function(module, exports, __webpack_require__) {
8106
+
8107
+ /* WEBPACK VAR INJECTION */(function(process) {/**
8108
+ * Copyright 2016-present, Facebook, Inc.
8109
+ * All rights reserved.
8110
+ *
8111
+ * This source code is licensed under the BSD-style license found in the
8112
+ * LICENSE file in the root directory of this source tree. An additional grant
8113
+ * of patent rights can be found in the PATENTS file in the same directory.
8114
+ *
8115
+ * @providesModule ReactDebugTool
8116
+ */
8117
+
8118
+ 'use strict';
8119
+
8120
+ var ReactInvalidSetStateWarningHook = __webpack_require__(65);
8121
+ var ReactHostOperationHistoryHook = __webpack_require__(66);
8122
+ var ReactComponentTreeHook = __webpack_require__(29);
8123
+ var ReactChildrenMutationWarningHook = __webpack_require__(67);
8124
+ var ExecutionEnvironment = __webpack_require__(50);
8125
+
8126
+ var performanceNow = __webpack_require__(68);
8127
+ var warning = __webpack_require__(12);
8128
+
8129
+ var hooks = [];
8130
+ var didHookThrowForEvent = {};
8131
+
8132
+ function callHook(event, fn, context, arg1, arg2, arg3, arg4, arg5) {
8133
+ try {
8134
+ fn.call(context, arg1, arg2, arg3, arg4, arg5);
8135
+ } catch (e) {
8136
+ process.env.NODE_ENV !== 'production' ? warning(didHookThrowForEvent[event], 'Exception thrown by hook while handling %s: %s', event, e + '\n' + e.stack) : void 0;
8137
+ didHookThrowForEvent[event] = true;
8138
+ }
8139
+ }
8140
+
8141
+ function emitEvent(event, arg1, arg2, arg3, arg4, arg5) {
8142
+ for (var i = 0; i < hooks.length; i++) {
8143
+ var hook = hooks[i];
8144
+ var fn = hook[event];
8145
+ if (fn) {
8146
+ callHook(event, fn, hook, arg1, arg2, arg3, arg4, arg5);
8147
+ }
8148
+ }
8149
+ }
8150
+
8151
+ var isProfiling = false;
8152
+ var flushHistory = [];
8153
+ var lifeCycleTimerStack = [];
8154
+ var currentFlushNesting = 0;
8155
+ var currentFlushMeasurements = null;
8156
+ var currentFlushStartTime = null;
8157
+ var currentTimerDebugID = null;
8158
+ var currentTimerStartTime = null;
8159
+ var currentTimerNestedFlushDuration = null;
8160
+ var currentTimerType = null;
8161
+
8162
+ var lifeCycleTimerHasWarned = false;
8163
+
8164
+ function clearHistory() {
8165
+ ReactComponentTreeHook.purgeUnmountedComponents();
8166
+ ReactHostOperationHistoryHook.clearHistory();
8167
+ }
8168
+
8169
+ function getTreeSnapshot(registeredIDs) {
8170
+ return registeredIDs.reduce(function (tree, id) {
8171
+ var ownerID = ReactComponentTreeHook.getOwnerID(id);
8172
+ var parentID = ReactComponentTreeHook.getParentID(id);
8173
+ tree[id] = {
8174
+ displayName: ReactComponentTreeHook.getDisplayName(id),
8175
+ text: ReactComponentTreeHook.getText(id),
8176
+ updateCount: ReactComponentTreeHook.getUpdateCount(id),
8177
+ childIDs: ReactComponentTreeHook.getChildIDs(id),
8178
+ // Text nodes don't have owners but this is close enough.
8179
+ ownerID: ownerID || ReactComponentTreeHook.getOwnerID(parentID),
8180
+ parentID: parentID
8181
+ };
8182
+ return tree;
8183
+ }, {});
8184
+ }
8185
+
8186
+ function resetMeasurements() {
8187
+ var previousStartTime = currentFlushStartTime;
8188
+ var previousMeasurements = currentFlushMeasurements || [];
8189
+ var previousOperations = ReactHostOperationHistoryHook.getHistory();
8190
+
8191
+ if (currentFlushNesting === 0) {
8192
+ currentFlushStartTime = null;
8193
+ currentFlushMeasurements = null;
8194
+ clearHistory();
8195
+ return;
8196
+ }
8197
+
8198
+ if (previousMeasurements.length || previousOperations.length) {
8199
+ var registeredIDs = ReactComponentTreeHook.getRegisteredIDs();
8200
+ flushHistory.push({
8201
+ duration: performanceNow() - previousStartTime,
8202
+ measurements: previousMeasurements || [],
8203
+ operations: previousOperations || [],
8204
+ treeSnapshot: getTreeSnapshot(registeredIDs)
8205
+ });
8206
+ }
8207
+
8208
+ clearHistory();
8209
+ currentFlushStartTime = performanceNow();
8210
+ currentFlushMeasurements = [];
8211
+ }
8212
+
8213
+ function checkDebugID(debugID) {
8214
+ var allowRoot = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
8215
+
8216
+ if (allowRoot && debugID === 0) {
8217
+ return;
8218
+ }
8219
+ if (!debugID) {
8220
+ process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDebugTool: debugID may not be empty.') : void 0;
8221
+ }
8222
+ }
8223
+
8224
+ function beginLifeCycleTimer(debugID, timerType) {
8225
+ if (currentFlushNesting === 0) {
8226
+ return;
8227
+ }
8228
+ if (currentTimerType && !lifeCycleTimerHasWarned) {
8229
+ process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
8230
+ lifeCycleTimerHasWarned = true;
8231
+ }
8232
+ currentTimerStartTime = performanceNow();
8233
+ currentTimerNestedFlushDuration = 0;
8234
+ currentTimerDebugID = debugID;
8235
+ currentTimerType = timerType;
8236
+ }
8237
+
8238
+ function endLifeCycleTimer(debugID, timerType) {
8239
+ if (currentFlushNesting === 0) {
8240
+ return;
8241
+ }
8242
+ if (currentTimerType !== timerType && !lifeCycleTimerHasWarned) {
8243
+ process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
8244
+ lifeCycleTimerHasWarned = true;
8245
+ }
8246
+ if (isProfiling) {
8247
+ currentFlushMeasurements.push({
8248
+ timerType: timerType,
8249
+ instanceID: debugID,
8250
+ duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration
8251
+ });
8252
+ }
8253
+ currentTimerStartTime = null;
8254
+ currentTimerNestedFlushDuration = null;
8255
+ currentTimerDebugID = null;
8256
+ currentTimerType = null;
8257
+ }
8258
+
8259
+ function pauseCurrentLifeCycleTimer() {
8260
+ var currentTimer = {
8261
+ startTime: currentTimerStartTime,
8262
+ nestedFlushStartTime: performanceNow(),
8263
+ debugID: currentTimerDebugID,
8264
+ timerType: currentTimerType
8265
+ };
8266
+ lifeCycleTimerStack.push(currentTimer);
8267
+ currentTimerStartTime = null;
8268
+ currentTimerNestedFlushDuration = null;
8269
+ currentTimerDebugID = null;
8270
+ currentTimerType = null;
8271
+ }
8272
+
8273
+ function resumeCurrentLifeCycleTimer() {
8274
+ var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();
8275
+
8276
+ var startTime = _lifeCycleTimerStack$.startTime;
8277
+ var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;
8278
+ var debugID = _lifeCycleTimerStack$.debugID;
8279
+ var timerType = _lifeCycleTimerStack$.timerType;
8280
+
8281
+ var nestedFlushDuration = performanceNow() - nestedFlushStartTime;
8282
+ currentTimerStartTime = startTime;
8283
+ currentTimerNestedFlushDuration += nestedFlushDuration;
8284
+ currentTimerDebugID = debugID;
8285
+ currentTimerType = timerType;
8286
+ }
8287
+
8288
+ var ReactDebugTool = {
8289
+ addHook: function (hook) {
8290
+ hooks.push(hook);
8291
+ },
8292
+ removeHook: function (hook) {
8293
+ for (var i = 0; i < hooks.length; i++) {
8294
+ if (hooks[i] === hook) {
8295
+ hooks.splice(i, 1);
8296
+ i--;
8297
+ }
8298
+ }
8299
+ },
8300
+ isProfiling: function () {
8301
+ return isProfiling;
8302
+ },
8303
+ beginProfiling: function () {
8304
+ if (isProfiling) {
8305
+ return;
8306
+ }
8307
+
8308
+ isProfiling = true;
8309
+ flushHistory.length = 0;
8310
+ resetMeasurements();
8311
+ ReactDebugTool.addHook(ReactHostOperationHistoryHook);
8312
+ },
8313
+ endProfiling: function () {
8314
+ if (!isProfiling) {
8315
+ return;
8316
+ }
8317
+
8318
+ isProfiling = false;
8319
+ resetMeasurements();
8320
+ ReactDebugTool.removeHook(ReactHostOperationHistoryHook);
8321
+ },
8322
+ getFlushHistory: function () {
8323
+ return flushHistory;
8324
+ },
8325
+ onBeginFlush: function () {
8326
+ currentFlushNesting++;
8327
+ resetMeasurements();
8328
+ pauseCurrentLifeCycleTimer();
8329
+ emitEvent('onBeginFlush');
8330
+ },
8331
+ onEndFlush: function () {
8332
+ resetMeasurements();
8333
+ currentFlushNesting--;
8334
+ resumeCurrentLifeCycleTimer();
8335
+ emitEvent('onEndFlush');
8336
+ },
8337
+ onBeginLifeCycleTimer: function (debugID, timerType) {
8338
+ checkDebugID(debugID);
8339
+ emitEvent('onBeginLifeCycleTimer', debugID, timerType);
8340
+ beginLifeCycleTimer(debugID, timerType);
8341
+ },
8342
+ onEndLifeCycleTimer: function (debugID, timerType) {
8343
+ checkDebugID(debugID);
8344
+ endLifeCycleTimer(debugID, timerType);
8345
+ emitEvent('onEndLifeCycleTimer', debugID, timerType);
8346
+ },
8347
+ onBeginProcessingChildContext: function () {
8348
+ emitEvent('onBeginProcessingChildContext');
8349
+ },
8350
+ onEndProcessingChildContext: function () {
8351
+ emitEvent('onEndProcessingChildContext');
8352
+ },
8353
+ onHostOperation: function (debugID, type, payload) {
8354
+ checkDebugID(debugID);
8355
+ emitEvent('onHostOperation', debugID, type, payload);
8356
+ },
8357
+ onSetState: function () {
8358
+ emitEvent('onSetState');
8359
+ },
8360
+ onSetChildren: function (debugID, childDebugIDs) {
8361
+ checkDebugID(debugID);
8362
+ childDebugIDs.forEach(checkDebugID);
8363
+ emitEvent('onSetChildren', debugID, childDebugIDs);
8364
+ },
8365
+ onBeforeMountComponent: function (debugID, element, parentDebugID) {
8366
+ checkDebugID(debugID);
8367
+ checkDebugID(parentDebugID, true);
8368
+ emitEvent('onBeforeMountComponent', debugID, element, parentDebugID);
8369
+ },
8370
+ onMountComponent: function (debugID) {
8371
+ checkDebugID(debugID);
8372
+ emitEvent('onMountComponent', debugID);
8373
+ },
8374
+ onBeforeUpdateComponent: function (debugID, element) {
8375
+ checkDebugID(debugID);
8376
+ emitEvent('onBeforeUpdateComponent', debugID, element);
8377
+ },
8378
+ onUpdateComponent: function (debugID) {
8379
+ checkDebugID(debugID);
8380
+ emitEvent('onUpdateComponent', debugID);
8381
+ },
8382
+ onBeforeUnmountComponent: function (debugID) {
8383
+ checkDebugID(debugID);
8384
+ emitEvent('onBeforeUnmountComponent', debugID);
8385
+ },
8386
+ onUnmountComponent: function (debugID) {
8387
+ checkDebugID(debugID);
8388
+ emitEvent('onUnmountComponent', debugID);
8389
+ },
8390
+ onTestEvent: function () {
8391
+ emitEvent('onTestEvent');
8392
+ }
8393
+ };
8394
+
8395
+ // TODO remove these when RN/www gets updated
8396
+ ReactDebugTool.addDevtool = ReactDebugTool.addHook;
8397
+ ReactDebugTool.removeDevtool = ReactDebugTool.removeHook;
8398
+
8399
+ ReactDebugTool.addHook(ReactInvalidSetStateWarningHook);
8400
+ ReactDebugTool.addHook(ReactComponentTreeHook);
8401
+ ReactDebugTool.addHook(ReactChildrenMutationWarningHook);
8402
+ var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
8403
+ if (/[?&]react_perf\b/.test(url)) {
8404
+ ReactDebugTool.beginProfiling();
8405
+ }
8406
+
8407
+ module.exports = ReactDebugTool;
8408
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8409
+
8410
+ /***/ },
8411
+ /* 65 */
8412
+ /***/ function(module, exports, __webpack_require__) {
8413
+
8414
+ /* WEBPACK VAR INJECTION */(function(process) {/**
8415
+ * Copyright 2016-present, Facebook, Inc.
8416
+ * All rights reserved.
8417
+ *
8418
+ * This source code is licensed under the BSD-style license found in the
8419
+ * LICENSE file in the root directory of this source tree. An additional grant
8420
+ * of patent rights can be found in the PATENTS file in the same directory.
8421
+ *
8422
+ * @providesModule ReactInvalidSetStateWarningHook
8423
+ */
8424
+
8425
+ 'use strict';
8426
+
8427
+ var warning = __webpack_require__(12);
8428
+
8429
+ if (process.env.NODE_ENV !== 'production') {
8430
+ var processingChildContext = false;
8431
+
8432
+ var warnInvalidSetState = function () {
8433
+ process.env.NODE_ENV !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;
8434
+ };
8435
+ }
8436
+
8437
+ var ReactInvalidSetStateWarningHook = {
8438
+ onBeginProcessingChildContext: function () {
8439
+ processingChildContext = true;
8440
+ },
8441
+ onEndProcessingChildContext: function () {
8442
+ processingChildContext = false;
8443
+ },
8444
+ onSetState: function () {
8445
+ warnInvalidSetState();
8446
+ }
8447
+ };
8448
+
8449
+ module.exports = ReactInvalidSetStateWarningHook;
8450
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8451
+
8452
+ /***/ },
8453
+ /* 66 */
8454
+ /***/ function(module, exports) {
8455
+
8456
+ /**
8457
+ * Copyright 2016-present, Facebook, Inc.
8458
+ * All rights reserved.
8459
+ *
8460
+ * This source code is licensed under the BSD-style license found in the
8461
+ * LICENSE file in the root directory of this source tree. An additional grant
8462
+ * of patent rights can be found in the PATENTS file in the same directory.
8463
+ *
8464
+ * @providesModule ReactHostOperationHistoryHook
8465
+ */
8466
+
8467
+ 'use strict';
8468
+
8469
+ var history = [];
8470
+
8471
+ var ReactHostOperationHistoryHook = {
8472
+ onHostOperation: function (debugID, type, payload) {
8473
+ history.push({
8474
+ instanceID: debugID,
8475
+ type: type,
8476
+ payload: payload
8477
+ });
8478
+ },
8479
+ clearHistory: function () {
8480
+ if (ReactHostOperationHistoryHook._preventClearing) {
8481
+ // Should only be used for tests.
8482
+ return;
8483
+ }
8484
+
8485
+ history = [];
8486
+ },
8487
+ getHistory: function () {
8488
+ return history;
8489
+ }
8490
+ };
8491
+
8492
+ module.exports = ReactHostOperationHistoryHook;
8493
+
8494
+ /***/ },
8495
+ /* 67 */
8496
+ /***/ function(module, exports, __webpack_require__) {
8497
+
8498
+ /* WEBPACK VAR INJECTION */(function(process) {/**
8499
+ * Copyright 2013-present, Facebook, Inc.
8500
+ * All rights reserved.
8501
+ *
8502
+ * This source code is licensed under the BSD-style license found in the
8503
+ * LICENSE file in the root directory of this source tree. An additional grant
8504
+ * of patent rights can be found in the PATENTS file in the same directory.
8505
+ *
8506
+ * @providesModule ReactChildrenMutationWarningHook
8507
+ */
8508
+
8509
+ 'use strict';
8510
+
8511
+ var ReactComponentTreeHook = __webpack_require__(29);
8512
+
8513
+ var warning = __webpack_require__(12);
8514
+
8515
+ function handleElement(debugID, element) {
8516
+ if (element == null) {
8517
+ return;
8518
+ }
8519
+ if (element._shadowChildren === undefined) {
8520
+ return;
8521
+ }
8522
+ if (element._shadowChildren === element.props.children) {
8523
+ return;
8524
+ }
8525
+ var isMutated = false;
8526
+ if (Array.isArray(element._shadowChildren)) {
8527
+ if (element._shadowChildren.length === element.props.children.length) {
8528
+ for (var i = 0; i < element._shadowChildren.length; i++) {
8529
+ if (element._shadowChildren[i] !== element.props.children[i]) {
8530
+ isMutated = true;
8531
+ }
8532
+ }
8533
+ } else {
8534
+ isMutated = true;
8535
+ }
8536
+ }
8537
+ if (!Array.isArray(element._shadowChildren) || isMutated) {
8538
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Component\'s children should not be mutated.%s', ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
8539
+ }
8540
+ }
8541
+
8542
+ var ReactChildrenMutationWarningHook = {
8543
+ onMountComponent: function (debugID) {
8544
+ handleElement(debugID, ReactComponentTreeHook.getElement(debugID));
8545
+ },
8546
+ onUpdateComponent: function (debugID) {
8547
+ handleElement(debugID, ReactComponentTreeHook.getElement(debugID));
8548
+ }
8549
+ };
8550
+
8551
+ module.exports = ReactChildrenMutationWarningHook;
8552
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8553
+
8554
+ /***/ },
8555
+ /* 68 */
8556
+ /***/ function(module, exports, __webpack_require__) {
8557
+
8558
+ 'use strict';
8559
+
8560
+ /**
8561
+ * Copyright (c) 2013-present, Facebook, Inc.
8562
+ * All rights reserved.
8563
+ *
8564
+ * This source code is licensed under the BSD-style license found in the
8565
+ * LICENSE file in the root directory of this source tree. An additional grant
8566
+ * of patent rights can be found in the PATENTS file in the same directory.
8567
+ *
8568
+ * @typechecks
8569
+ */
8570
+
8571
+ var performance = __webpack_require__(69);
8572
+
8573
+ var performanceNow;
8574
+
8575
+ /**
8576
+ * Detect if we can use `window.performance.now()` and gracefully fallback to
8577
+ * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
8578
+ * because of Facebook's testing infrastructure.
8579
+ */
8580
+ if (performance.now) {
8581
+ performanceNow = function performanceNow() {
8582
+ return performance.now();
8583
+ };
8584
+ } else {
8585
+ performanceNow = function performanceNow() {
8586
+ return Date.now();
8587
+ };
8588
+ }
8589
+
8590
+ module.exports = performanceNow;
8591
+
8592
+ /***/ },
8593
+ /* 69 */
8594
+ /***/ function(module, exports, __webpack_require__) {
8595
+
8596
+ /**
8597
+ * Copyright (c) 2013-present, Facebook, Inc.
8598
+ * All rights reserved.
8599
+ *
8600
+ * This source code is licensed under the BSD-style license found in the
8601
+ * LICENSE file in the root directory of this source tree. An additional grant
8602
+ * of patent rights can be found in the PATENTS file in the same directory.
8603
+ *
8604
+ * @typechecks
8605
+ */
8606
+
8607
+ 'use strict';
8608
+
8609
+ var ExecutionEnvironment = __webpack_require__(50);
8610
+
8611
+ var performance;
8612
+
8613
+ if (ExecutionEnvironment.canUseDOM) {
8614
+ performance = window.performance || window.msPerformance || window.webkitPerformance;
8615
+ }
8616
+
8617
+ module.exports = performance || {};
8618
+
8619
+ /***/ },
8620
+ /* 70 */
8621
+ /***/ function(module, exports, __webpack_require__) {
8622
+
8623
+ /* WEBPACK VAR INJECTION */(function(process) {/**
8624
+ * Copyright 2013-present, Facebook, Inc.
8625
+ * All rights reserved.
8626
+ *
8627
+ * This source code is licensed under the BSD-style license found in the
8628
+ * LICENSE file in the root directory of this source tree. An additional grant
8629
+ * of patent rights can be found in the PATENTS file in the same directory.
8630
+ *
8631
+ * @providesModule Transaction
8632
+ */
8633
+
8634
+ 'use strict';
8635
+
8636
+ var _prodInvariant = __webpack_require__(8);
8637
+
8638
+ var invariant = __webpack_require__(9);
8639
+
8640
+ /**
8641
+ * `Transaction` creates a black box that is able to wrap any method such that
8642
+ * certain invariants are maintained before and after the method is invoked
8643
+ * (Even if an exception is thrown while invoking the wrapped method). Whoever
8644
+ * instantiates a transaction can provide enforcers of the invariants at
8645
+ * creation time. The `Transaction` class itself will supply one additional
8646
+ * automatic invariant for you - the invariant that any transaction instance
8647
+ * should not be run while it is already being run. You would typically create a
8648
+ * single instance of a `Transaction` for reuse multiple times, that potentially
8649
+ * is used to wrap several different methods. Wrappers are extremely simple -
8650
+ * they only require implementing two methods.
8651
+ *
8652
+ * <pre>
8653
+ * wrappers (injected at creation time)
8654
+ * + +
8655
+ * | |
8656
+ * +-----------------|--------|--------------+
8657
+ * | v | |
8658
+ * | +---------------+ | |
8659
+ * | +--| wrapper1 |---|----+ |
8660
+ * | | +---------------+ v | |
8661
+ * | | +-------------+ | |
8662
+ * | | +----| wrapper2 |--------+ |
8663
+ * | | | +-------------+ | | |
8664
+ * | | | | | |
8665
+ * | v v v v | wrapper
8666
+ * | +---+ +---+ +---------+ +---+ +---+ | invariants
8667
+ * perform(anyMethod) | | | | | | | | | | | | maintained
8668
+ * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
8669
+ * | | | | | | | | | | | |
8670
+ * | | | | | | | | | | | |
8671
+ * | | | | | | | | | | | |
8672
+ * | +---+ +---+ +---------+ +---+ +---+ |
8673
+ * | initialize close |
8674
+ * +-----------------------------------------+
8675
+ * </pre>
8676
+ *
8677
+ * Use cases:
8678
+ * - Preserving the input selection ranges before/after reconciliation.
8679
+ * Restoring selection even in the event of an unexpected error.
8680
+ * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
8681
+ * while guaranteeing that afterwards, the event system is reactivated.
8682
+ * - Flushing a queue of collected DOM mutations to the main UI thread after a
8683
+ * reconciliation takes place in a worker thread.
8684
+ * - Invoking any collected `componentDidUpdate` callbacks after rendering new
8685
+ * content.
8686
+ * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
8687
+ * to preserve the `scrollTop` (an automatic scroll aware DOM).
8688
+ * - (Future use case): Layout calculations before and after DOM updates.
8689
+ *
8690
+ * Transactional plugin API:
8691
+ * - A module that has an `initialize` method that returns any precomputation.
8692
+ * - and a `close` method that accepts the precomputation. `close` is invoked
8693
+ * when the wrapped process is completed, or has failed.
8694
+ *
8695
+ * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
8696
+ * that implement `initialize` and `close`.
8697
+ * @return {Transaction} Single transaction for reuse in thread.
8698
+ *
8699
+ * @class Transaction
8700
+ */
8701
+ var Mixin = {
8702
+ /**
8703
+ * Sets up this instance so that it is prepared for collecting metrics. Does
8704
+ * so such that this setup method may be used on an instance that is already
8705
+ * initialized, in a way that does not consume additional memory upon reuse.
8706
+ * That can be useful if you decide to make your subclass of this mixin a
8707
+ * "PooledClass".
8708
+ */
8709
+ reinitializeTransaction: function () {
8710
+ this.transactionWrappers = this.getTransactionWrappers();
8711
+ if (this.wrapperInitData) {
8712
+ this.wrapperInitData.length = 0;
8713
+ } else {
8714
+ this.wrapperInitData = [];
8715
+ }
8716
+ this._isInTransaction = false;
8717
+ },
8718
+
8719
+ _isInTransaction: false,
8720
+
8721
+ /**
8722
+ * @abstract
8723
+ * @return {Array<TransactionWrapper>} Array of transaction wrappers.
8724
+ */
8725
+ getTransactionWrappers: null,
8726
+
8727
+ isInTransaction: function () {
8728
+ return !!this._isInTransaction;
8729
+ },
8730
+
8731
+ /**
8732
+ * Executes the function within a safety window. Use this for the top level
8733
+ * methods that result in large amounts of computation/mutations that would
8734
+ * need to be safety checked. The optional arguments helps prevent the need
8735
+ * to bind in many cases.
8736
+ *
8737
+ * @param {function} method Member of scope to call.
8738
+ * @param {Object} scope Scope to invoke from.
8739
+ * @param {Object?=} a Argument to pass to the method.
8740
+ * @param {Object?=} b Argument to pass to the method.
8741
+ * @param {Object?=} c Argument to pass to the method.
8742
+ * @param {Object?=} d Argument to pass to the method.
8743
+ * @param {Object?=} e Argument to pass to the method.
8744
+ * @param {Object?=} f Argument to pass to the method.
8745
+ *
8746
+ * @return {*} Return value from `method`.
8747
+ */
8748
+ perform: function (method, scope, a, b, c, d, e, f) {
8749
+ !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;
8750
+ var errorThrown;
8751
+ var ret;
8752
+ try {
8753
+ this._isInTransaction = true;
8754
+ // Catching errors makes debugging more difficult, so we start with
8755
+ // errorThrown set to true before setting it to false after calling
8756
+ // close -- if it's still set to true in the finally block, it means
8757
+ // one of these calls threw.
8758
+ errorThrown = true;
8759
+ this.initializeAll(0);
8760
+ ret = method.call(scope, a, b, c, d, e, f);
8761
+ errorThrown = false;
8762
+ } finally {
8763
+ try {
8764
+ if (errorThrown) {
8765
+ // If `method` throws, prefer to show that stack trace over any thrown
8766
+ // by invoking `closeAll`.
8767
+ try {
8768
+ this.closeAll(0);
8769
+ } catch (err) {}
8770
+ } else {
8771
+ // Since `method` didn't throw, we don't want to silence the exception
8772
+ // here.
8773
+ this.closeAll(0);
8774
+ }
8775
+ } finally {
8776
+ this._isInTransaction = false;
8777
+ }
8778
+ }
8779
+ return ret;
8780
+ },
8781
+
8782
+ initializeAll: function (startIndex) {
8783
+ var transactionWrappers = this.transactionWrappers;
8784
+ for (var i = startIndex; i < transactionWrappers.length; i++) {
8785
+ var wrapper = transactionWrappers[i];
8786
+ try {
8787
+ // Catching errors makes debugging more difficult, so we start with the
8788
+ // OBSERVED_ERROR state before overwriting it with the real return value
8789
+ // of initialize -- if it's still set to OBSERVED_ERROR in the finally
8790
+ // block, it means wrapper.initialize threw.
8791
+ this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
8792
+ this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
8793
+ } finally {
8794
+ if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
8795
+ // The initializer for wrapper i threw an error; initialize the
8796
+ // remaining wrappers but silence any exceptions from them to ensure
8797
+ // that the first error is the one to bubble up.
8798
+ try {
8799
+ this.initializeAll(i + 1);
8800
+ } catch (err) {}
8801
+ }
8802
+ }
8803
+ }
8804
+ },
8805
+
8806
+ /**
8807
+ * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
8808
+ * them the respective return values of `this.transactionWrappers.init[i]`
8809
+ * (`close`rs that correspond to initializers that failed will not be
8810
+ * invoked).
8811
+ */
8812
+ closeAll: function (startIndex) {
8813
+ !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;
8814
+ var transactionWrappers = this.transactionWrappers;
8815
+ for (var i = startIndex; i < transactionWrappers.length; i++) {
8816
+ var wrapper = transactionWrappers[i];
8817
+ var initData = this.wrapperInitData[i];
8818
+ var errorThrown;
8819
+ try {
8820
+ // Catching errors makes debugging more difficult, so we start with
8821
+ // errorThrown set to true before setting it to false after calling
8822
+ // close -- if it's still set to true in the finally block, it means
8823
+ // wrapper.close threw.
8824
+ errorThrown = true;
8825
+ if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
8826
+ wrapper.close.call(this, initData);
8827
+ }
8828
+ errorThrown = false;
8829
+ } finally {
8830
+ if (errorThrown) {
8831
+ // The closer for wrapper i threw an error; close the remaining
8832
+ // wrappers but silence any exceptions from them to ensure that the
8833
+ // first error is the one to bubble up.
8834
+ try {
8835
+ this.closeAll(i + 1);
8836
+ } catch (e) {}
8837
+ }
8838
+ }
8839
+ }
8840
+ this.wrapperInitData.length = 0;
8841
+ }
8842
+ };
8843
+
8844
+ var Transaction = {
8845
+
8846
+ Mixin: Mixin,
8847
+
8848
+ /**
8849
+ * Token to look for to determine if an error occurred.
8850
+ */
8851
+ OBSERVED_ERROR: {}
8852
+
8853
+ };
8854
+
8855
+ module.exports = Transaction;
8856
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
8857
+
8858
+ /***/ },
8859
+ /* 71 */
8860
+ /***/ function(module, exports) {
8861
+
8862
+ /**
8863
+ * Copyright 2013-present, Facebook, Inc.
8864
+ * All rights reserved.
8865
+ *
8866
+ * This source code is licensed under the BSD-style license found in the
8867
+ * LICENSE file in the root directory of this source tree. An additional grant
8868
+ * of patent rights can be found in the PATENTS file in the same directory.
8869
+ *
8870
+ * @providesModule getEventTarget
8871
+ */
8872
+
8873
+ 'use strict';
8874
+
8875
+ /**
8876
+ * Gets the target node from a native browser event by accounting for
8877
+ * inconsistencies in browser DOM APIs.
8878
+ *
8879
+ * @param {object} nativeEvent Native browser event.
8880
+ * @return {DOMEventTarget} Target node.
8881
+ */
8882
+
8883
+ function getEventTarget(nativeEvent) {
8884
+ var target = nativeEvent.target || nativeEvent.srcElement || window;
8885
+
8886
+ // Normalize SVG <use> element events #4963
8887
+ if (target.correspondingUseElement) {
8888
+ target = target.correspondingUseElement;
8889
+ }
8890
+
8891
+ // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
8892
+ // @see http://www.quirksmode.org/js/events_properties.html
8893
+ return target.nodeType === 3 ? target.parentNode : target;
8894
+ }
8895
+
8896
+ module.exports = getEventTarget;
8897
+
8898
+ /***/ },
8899
+ /* 72 */
8900
+ /***/ function(module, exports, __webpack_require__) {
8901
+
8902
+ /**
8903
+ * Copyright 2013-present, Facebook, Inc.
8904
+ * All rights reserved.
8905
+ *
8906
+ * This source code is licensed under the BSD-style license found in the
8907
+ * LICENSE file in the root directory of this source tree. An additional grant
8908
+ * of patent rights can be found in the PATENTS file in the same directory.
8909
+ *
8910
+ * @providesModule isEventSupported
8911
+ */
8912
+
8913
+ 'use strict';
8914
+
8915
+ var ExecutionEnvironment = __webpack_require__(50);
8916
+
8917
+ var useHasFeature;
8918
+ if (ExecutionEnvironment.canUseDOM) {
8919
+ useHasFeature = document.implementation && document.implementation.hasFeature &&
8920
+ // always returns true in newer browsers as per the standard.
8921
+ // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
8922
+ document.implementation.hasFeature('', '') !== true;
8923
+ }
8924
+
8925
+ /**
8926
+ * Checks if an event is supported in the current execution environment.
8927
+ *
8928
+ * NOTE: This will not work correctly for non-generic events such as `change`,
8929
+ * `reset`, `load`, `error`, and `select`.
8930
+ *
8931
+ * Borrows from Modernizr.
8932
+ *
8933
+ * @param {string} eventNameSuffix Event name, e.g. "click".
8934
+ * @param {?boolean} capture Check if the capture phase is supported.
8935
+ * @return {boolean} True if the event is supported.
8936
+ * @internal
8937
+ * @license Modernizr 3.0.0pre (Custom Build) | MIT
8938
+ */
8939
+ function isEventSupported(eventNameSuffix, capture) {
8940
+ if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
8941
+ return false;
8942
+ }
8943
+
8944
+ var eventName = 'on' + eventNameSuffix;
8945
+ var isSupported = eventName in document;
8946
+
8947
+ if (!isSupported) {
8948
+ var element = document.createElement('div');
8949
+ element.setAttribute(eventName, 'return;');
8950
+ isSupported = typeof element[eventName] === 'function';
8951
+ }
8952
+
8953
+ if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
8954
+ // This is the only way to test support for the `wheel` event in IE9+.
8955
+ isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
8956
+ }
8957
+
8958
+ return isSupported;
8959
+ }
8960
+
8961
+ module.exports = isEventSupported;
8962
+
8963
+ /***/ },
8964
+ /* 73 */
8965
+ /***/ function(module, exports) {
8966
+
8967
+ /**
8968
+ * Copyright 2013-present, Facebook, Inc.
8969
+ * All rights reserved.
8970
+ *
8971
+ * This source code is licensed under the BSD-style license found in the
8972
+ * LICENSE file in the root directory of this source tree. An additional grant
8973
+ * of patent rights can be found in the PATENTS file in the same directory.
8974
+ *
8975
+ * @providesModule isTextInputElement
8976
+ *
8977
+ */
8978
+
8979
+ 'use strict';
8980
+
8981
+ /**
8982
+ * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
8983
+ */
8984
+
8985
+ var supportedInputTypes = {
8986
+ 'color': true,
8987
+ 'date': true,
8988
+ 'datetime': true,
8989
+ 'datetime-local': true,
8990
+ 'email': true,
8991
+ 'month': true,
8992
+ 'number': true,
8993
+ 'password': true,
8994
+ 'range': true,
8995
+ 'search': true,
8996
+ 'tel': true,
8997
+ 'text': true,
8998
+ 'time': true,
8999
+ 'url': true,
9000
+ 'week': true
9001
+ };
9002
+
9003
+ function isTextInputElement(elem) {
9004
+ var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
9005
+
9006
+ if (nodeName === 'input') {
9007
+ return !!supportedInputTypes[elem.type];
9008
+ }
9009
+
9010
+ if (nodeName === 'textarea') {
9011
+ return true;
9012
+ }
9013
+
9014
+ return false;
9015
+ }
9016
+
9017
+ module.exports = isTextInputElement;
9018
+
9019
+ /***/ },
9020
+ /* 74 */
9021
+ /***/ function(module, exports, __webpack_require__) {
9022
+
9023
+ /**
9024
+ * Copyright 2013-present, Facebook, Inc.
9025
+ * All rights reserved.
9026
+ *
9027
+ * This source code is licensed under the BSD-style license found in the
9028
+ * LICENSE file in the root directory of this source tree. An additional grant
9029
+ * of patent rights can be found in the PATENTS file in the same directory.
9030
+ *
9031
+ * @providesModule DefaultEventPluginOrder
9032
+ */
9033
+
9034
+ 'use strict';
9035
+
9036
+ var keyOf = __webpack_require__(26);
9037
+
9038
+ /**
9039
+ * Module that is injectable into `EventPluginHub`, that specifies a
9040
+ * deterministic ordering of `EventPlugin`s. A convenient way to reason about
9041
+ * plugins, without having to package every one of them. This is better than
9042
+ * having plugins be ordered in the same order that they are injected because
9043
+ * that ordering would be influenced by the packaging order.
9044
+ * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
9045
+ * preventing default on events is convenient in `SimpleEventPlugin` handlers.
9046
+ */
9047
+ var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
9048
+
9049
+ module.exports = DefaultEventPluginOrder;
9050
+
9051
+ /***/ },
9052
+ /* 75 */
9053
+ /***/ function(module, exports, __webpack_require__) {
9054
+
9055
+ /**
9056
+ * Copyright 2013-present, Facebook, Inc.
9057
+ * All rights reserved.
9058
+ *
9059
+ * This source code is licensed under the BSD-style license found in the
9060
+ * LICENSE file in the root directory of this source tree. An additional grant
9061
+ * of patent rights can be found in the PATENTS file in the same directory.
9062
+ *
9063
+ * @providesModule EnterLeaveEventPlugin
9064
+ */
9065
+
9066
+ 'use strict';
9067
+
9068
+ var EventConstants = __webpack_require__(42);
9069
+ var EventPropagators = __webpack_require__(43);
9070
+ var ReactDOMComponentTree = __webpack_require__(37);
9071
+ var SyntheticMouseEvent = __webpack_require__(76);
9072
+
9073
+ var keyOf = __webpack_require__(26);
9074
+
9075
+ var topLevelTypes = EventConstants.topLevelTypes;
9076
+
9077
+ var eventTypes = {
9078
+ mouseEnter: {
9079
+ registrationName: keyOf({ onMouseEnter: null }),
9080
+ dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
9081
+ },
9082
+ mouseLeave: {
9083
+ registrationName: keyOf({ onMouseLeave: null }),
9084
+ dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
9085
+ }
9086
+ };
9087
+
9088
+ var EnterLeaveEventPlugin = {
9089
+
9090
+ eventTypes: eventTypes,
9091
+
9092
+ /**
9093
+ * For almost every interaction we care about, there will be both a top-level
9094
+ * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
9095
+ * we do not extract duplicate events. However, moving the mouse into the
9096
+ * browser from outside will not fire a `mouseout` event. In this case, we use
9097
+ * the `mouseover` top-level event.
9098
+ */
9099
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
9100
+ if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
9101
+ return null;
9102
+ }
9103
+ if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
9104
+ // Must not be a mouse in or mouse out - ignoring.
9105
+ return null;
9106
+ }
9107
+
9108
+ var win;
9109
+ if (nativeEventTarget.window === nativeEventTarget) {
9110
+ // `nativeEventTarget` is probably a window object.
9111
+ win = nativeEventTarget;
9112
+ } else {
9113
+ // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
9114
+ var doc = nativeEventTarget.ownerDocument;
9115
+ if (doc) {
9116
+ win = doc.defaultView || doc.parentWindow;
9117
+ } else {
9118
+ win = window;
9119
+ }
9120
+ }
9121
+
9122
+ var from;
9123
+ var to;
9124
+ if (topLevelType === topLevelTypes.topMouseOut) {
9125
+ from = targetInst;
9126
+ var related = nativeEvent.relatedTarget || nativeEvent.toElement;
9127
+ to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;
9128
+ } else {
9129
+ // Moving to a node from outside the window.
9130
+ from = null;
9131
+ to = targetInst;
9132
+ }
9133
+
9134
+ if (from === to) {
9135
+ // Nothing pertains to our managed components.
9136
+ return null;
9137
+ }
9138
+
9139
+ var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);
9140
+ var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);
9141
+
9142
+ var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);
9143
+ leave.type = 'mouseleave';
9144
+ leave.target = fromNode;
9145
+ leave.relatedTarget = toNode;
9146
+
9147
+ var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);
9148
+ enter.type = 'mouseenter';
9149
+ enter.target = toNode;
9150
+ enter.relatedTarget = fromNode;
9151
+
9152
+ EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);
9153
+
9154
+ return [leave, enter];
9155
+ }
9156
+
9157
+ };
9158
+
9159
+ module.exports = EnterLeaveEventPlugin;
9160
+
9161
+ /***/ },
9162
+ /* 76 */
9163
+ /***/ function(module, exports, __webpack_require__) {
9164
+
9165
+ /**
9166
+ * Copyright 2013-present, Facebook, Inc.
9167
+ * All rights reserved.
9168
+ *
9169
+ * This source code is licensed under the BSD-style license found in the
9170
+ * LICENSE file in the root directory of this source tree. An additional grant
9171
+ * of patent rights can be found in the PATENTS file in the same directory.
9172
+ *
9173
+ * @providesModule SyntheticMouseEvent
9174
+ */
9175
+
9176
+ 'use strict';
9177
+
9178
+ var SyntheticUIEvent = __webpack_require__(77);
9179
+ var ViewportMetrics = __webpack_require__(78);
9180
+
9181
+ var getEventModifierState = __webpack_require__(79);
9182
+
9183
+ /**
9184
+ * @interface MouseEvent
9185
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
9186
+ */
9187
+ var MouseEventInterface = {
9188
+ screenX: null,
9189
+ screenY: null,
9190
+ clientX: null,
9191
+ clientY: null,
9192
+ ctrlKey: null,
9193
+ shiftKey: null,
9194
+ altKey: null,
9195
+ metaKey: null,
9196
+ getModifierState: getEventModifierState,
9197
+ button: function (event) {
9198
+ // Webkit, Firefox, IE9+
9199
+ // which: 1 2 3
9200
+ // button: 0 1 2 (standard)
9201
+ var button = event.button;
9202
+ if ('which' in event) {
9203
+ return button;
9204
+ }
9205
+ // IE<9
9206
+ // which: undefined
9207
+ // button: 0 0 0
9208
+ // button: 1 4 2 (onmouseup)
9209
+ return button === 2 ? 2 : button === 4 ? 1 : 0;
9210
+ },
9211
+ buttons: null,
9212
+ relatedTarget: function (event) {
9213
+ return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
9214
+ },
9215
+ // "Proprietary" Interface.
9216
+ pageX: function (event) {
9217
+ return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
9218
+ },
9219
+ pageY: function (event) {
9220
+ return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
9221
+ }
9222
+ };
9223
+
9224
+ /**
9225
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
9226
+ * @param {string} dispatchMarker Marker identifying the event target.
9227
+ * @param {object} nativeEvent Native browser event.
9228
+ * @extends {SyntheticUIEvent}
9229
+ */
9230
+ function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
9231
+ return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
9232
+ }
9233
+
9234
+ SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
9235
+
9236
+ module.exports = SyntheticMouseEvent;
9237
+
9238
+ /***/ },
9239
+ /* 77 */
9240
+ /***/ function(module, exports, __webpack_require__) {
9241
+
9242
+ /**
9243
+ * Copyright 2013-present, Facebook, Inc.
9244
+ * All rights reserved.
9245
+ *
9246
+ * This source code is licensed under the BSD-style license found in the
9247
+ * LICENSE file in the root directory of this source tree. An additional grant
9248
+ * of patent rights can be found in the PATENTS file in the same directory.
9249
+ *
9250
+ * @providesModule SyntheticUIEvent
9251
+ */
9252
+
9253
+ 'use strict';
9254
+
9255
+ var SyntheticEvent = __webpack_require__(54);
9256
+
9257
+ var getEventTarget = __webpack_require__(71);
9258
+
9259
+ /**
9260
+ * @interface UIEvent
9261
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
9262
+ */
9263
+ var UIEventInterface = {
9264
+ view: function (event) {
9265
+ if (event.view) {
9266
+ return event.view;
9267
+ }
9268
+
9269
+ var target = getEventTarget(event);
9270
+ if (target.window === target) {
9271
+ // target is a window object
9272
+ return target;
9273
+ }
9274
+
9275
+ var doc = target.ownerDocument;
9276
+ // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
9277
+ if (doc) {
9278
+ return doc.defaultView || doc.parentWindow;
9279
+ } else {
9280
+ return window;
9281
+ }
9282
+ },
9283
+ detail: function (event) {
9284
+ return event.detail || 0;
9285
+ }
9286
+ };
9287
+
9288
+ /**
9289
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
9290
+ * @param {string} dispatchMarker Marker identifying the event target.
9291
+ * @param {object} nativeEvent Native browser event.
9292
+ * @extends {SyntheticEvent}
9293
+ */
9294
+ function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
9295
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
9296
+ }
9297
+
9298
+ SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
9299
+
9300
+ module.exports = SyntheticUIEvent;
9301
+
9302
+ /***/ },
9303
+ /* 78 */
9304
+ /***/ function(module, exports) {
9305
+
9306
+ /**
9307
+ * Copyright 2013-present, Facebook, Inc.
9308
+ * All rights reserved.
9309
+ *
9310
+ * This source code is licensed under the BSD-style license found in the
9311
+ * LICENSE file in the root directory of this source tree. An additional grant
9312
+ * of patent rights can be found in the PATENTS file in the same directory.
9313
+ *
9314
+ * @providesModule ViewportMetrics
9315
+ */
9316
+
9317
+ 'use strict';
9318
+
9319
+ var ViewportMetrics = {
9320
+
9321
+ currentScrollLeft: 0,
9322
+
9323
+ currentScrollTop: 0,
9324
+
9325
+ refreshScrollValues: function (scrollPosition) {
9326
+ ViewportMetrics.currentScrollLeft = scrollPosition.x;
9327
+ ViewportMetrics.currentScrollTop = scrollPosition.y;
9328
+ }
9329
+
9330
+ };
9331
+
9332
+ module.exports = ViewportMetrics;
9333
+
9334
+ /***/ },
9335
+ /* 79 */
9336
+ /***/ function(module, exports) {
9337
+
9338
+ /**
9339
+ * Copyright 2013-present, Facebook, Inc.
9340
+ * All rights reserved.
9341
+ *
9342
+ * This source code is licensed under the BSD-style license found in the
9343
+ * LICENSE file in the root directory of this source tree. An additional grant
9344
+ * of patent rights can be found in the PATENTS file in the same directory.
9345
+ *
9346
+ * @providesModule getEventModifierState
9347
+ */
9348
+
9349
+ 'use strict';
9350
+
9351
+ /**
9352
+ * Translation from modifier key to the associated property in the event.
9353
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
9354
+ */
9355
+
9356
+ var modifierKeyToProp = {
9357
+ 'Alt': 'altKey',
9358
+ 'Control': 'ctrlKey',
9359
+ 'Meta': 'metaKey',
9360
+ 'Shift': 'shiftKey'
9361
+ };
9362
+
9363
+ // IE8 does not implement getModifierState so we simply map it to the only
9364
+ // modifier keys exposed by the event itself, does not support Lock-keys.
9365
+ // Currently, all major browsers except Chrome seems to support Lock-keys.
9366
+ function modifierStateGetter(keyArg) {
9367
+ var syntheticEvent = this;
9368
+ var nativeEvent = syntheticEvent.nativeEvent;
9369
+ if (nativeEvent.getModifierState) {
9370
+ return nativeEvent.getModifierState(keyArg);
9371
+ }
9372
+ var keyProp = modifierKeyToProp[keyArg];
9373
+ return keyProp ? !!nativeEvent[keyProp] : false;
9374
+ }
9375
+
9376
+ function getEventModifierState(nativeEvent) {
9377
+ return modifierStateGetter;
9378
+ }
9379
+
9380
+ module.exports = getEventModifierState;
9381
+
9382
+ /***/ },
9383
+ /* 80 */
9384
+ /***/ function(module, exports, __webpack_require__) {
9385
+
9386
+ /**
9387
+ * Copyright 2013-present, Facebook, Inc.
9388
+ * All rights reserved.
9389
+ *
9390
+ * This source code is licensed under the BSD-style license found in the
9391
+ * LICENSE file in the root directory of this source tree. An additional grant
9392
+ * of patent rights can be found in the PATENTS file in the same directory.
9393
+ *
9394
+ * @providesModule HTMLDOMPropertyConfig
9395
+ */
9396
+
9397
+ 'use strict';
9398
+
9399
+ var DOMProperty = __webpack_require__(38);
9400
+
9401
+ var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
9402
+ var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
9403
+ var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
9404
+ var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
9405
+ var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
9406
+
9407
+ var HTMLDOMPropertyConfig = {
9408
+ isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),
9409
+ Properties: {
9410
+ /**
9411
+ * Standard Properties
9412
+ */
9413
+ accept: 0,
9414
+ acceptCharset: 0,
9415
+ accessKey: 0,
9416
+ action: 0,
9417
+ allowFullScreen: HAS_BOOLEAN_VALUE,
9418
+ allowTransparency: 0,
9419
+ alt: 0,
9420
+ // specifies target context for links with `preload` type
9421
+ as: 0,
9422
+ async: HAS_BOOLEAN_VALUE,
9423
+ autoComplete: 0,
9424
+ // autoFocus is polyfilled/normalized by AutoFocusUtils
9425
+ // autoFocus: HAS_BOOLEAN_VALUE,
9426
+ autoPlay: HAS_BOOLEAN_VALUE,
9427
+ capture: HAS_BOOLEAN_VALUE,
9428
+ cellPadding: 0,
9429
+ cellSpacing: 0,
9430
+ charSet: 0,
9431
+ challenge: 0,
9432
+ checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
9433
+ cite: 0,
9434
+ classID: 0,
9435
+ className: 0,
9436
+ cols: HAS_POSITIVE_NUMERIC_VALUE,
9437
+ colSpan: 0,
9438
+ content: 0,
9439
+ contentEditable: 0,
9440
+ contextMenu: 0,
9441
+ controls: HAS_BOOLEAN_VALUE,
9442
+ coords: 0,
9443
+ crossOrigin: 0,
9444
+ data: 0, // For `<object />` acts as `src`.
9445
+ dateTime: 0,
9446
+ 'default': HAS_BOOLEAN_VALUE,
9447
+ defer: HAS_BOOLEAN_VALUE,
9448
+ dir: 0,
9449
+ disabled: HAS_BOOLEAN_VALUE,
9450
+ download: HAS_OVERLOADED_BOOLEAN_VALUE,
9451
+ draggable: 0,
9452
+ encType: 0,
9453
+ form: 0,
9454
+ formAction: 0,
9455
+ formEncType: 0,
9456
+ formMethod: 0,
9457
+ formNoValidate: HAS_BOOLEAN_VALUE,
9458
+ formTarget: 0,
9459
+ frameBorder: 0,
9460
+ headers: 0,
9461
+ height: 0,
9462
+ hidden: HAS_BOOLEAN_VALUE,
9463
+ high: 0,
9464
+ href: 0,
9465
+ hrefLang: 0,
9466
+ htmlFor: 0,
9467
+ httpEquiv: 0,
9468
+ icon: 0,
9469
+ id: 0,
9470
+ inputMode: 0,
9471
+ integrity: 0,
9472
+ is: 0,
9473
+ keyParams: 0,
9474
+ keyType: 0,
9475
+ kind: 0,
9476
+ label: 0,
9477
+ lang: 0,
9478
+ list: 0,
9479
+ loop: HAS_BOOLEAN_VALUE,
9480
+ low: 0,
9481
+ manifest: 0,
9482
+ marginHeight: 0,
9483
+ marginWidth: 0,
9484
+ max: 0,
9485
+ maxLength: 0,
9486
+ media: 0,
9487
+ mediaGroup: 0,
9488
+ method: 0,
9489
+ min: 0,
9490
+ minLength: 0,
9491
+ // Caution; `option.selected` is not updated if `select.multiple` is
9492
+ // disabled with `removeAttribute`.
9493
+ multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
9494
+ muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
9495
+ name: 0,
9496
+ nonce: 0,
9497
+ noValidate: HAS_BOOLEAN_VALUE,
9498
+ open: HAS_BOOLEAN_VALUE,
9499
+ optimum: 0,
9500
+ pattern: 0,
9501
+ placeholder: 0,
9502
+ playsInline: HAS_BOOLEAN_VALUE,
9503
+ poster: 0,
9504
+ preload: 0,
9505
+ profile: 0,
9506
+ radioGroup: 0,
9507
+ readOnly: HAS_BOOLEAN_VALUE,
9508
+ referrerPolicy: 0,
9509
+ rel: 0,
9510
+ required: HAS_BOOLEAN_VALUE,
9511
+ reversed: HAS_BOOLEAN_VALUE,
9512
+ role: 0,
9513
+ rows: HAS_POSITIVE_NUMERIC_VALUE,
9514
+ rowSpan: HAS_NUMERIC_VALUE,
9515
+ sandbox: 0,
9516
+ scope: 0,
9517
+ scoped: HAS_BOOLEAN_VALUE,
9518
+ scrolling: 0,
9519
+ seamless: HAS_BOOLEAN_VALUE,
9520
+ selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
9521
+ shape: 0,
9522
+ size: HAS_POSITIVE_NUMERIC_VALUE,
9523
+ sizes: 0,
9524
+ span: HAS_POSITIVE_NUMERIC_VALUE,
9525
+ spellCheck: 0,
9526
+ src: 0,
9527
+ srcDoc: 0,
9528
+ srcLang: 0,
9529
+ srcSet: 0,
9530
+ start: HAS_NUMERIC_VALUE,
9531
+ step: 0,
9532
+ style: 0,
9533
+ summary: 0,
9534
+ tabIndex: 0,
9535
+ target: 0,
9536
+ title: 0,
9537
+ // Setting .type throws on non-<input> tags
9538
+ type: 0,
9539
+ useMap: 0,
9540
+ value: 0,
9541
+ width: 0,
9542
+ wmode: 0,
9543
+ wrap: 0,
9544
+
9545
+ /**
9546
+ * RDFa Properties
9547
+ */
9548
+ about: 0,
9549
+ datatype: 0,
9550
+ inlist: 0,
9551
+ prefix: 0,
9552
+ // property is also supported for OpenGraph in meta tags.
9553
+ property: 0,
9554
+ resource: 0,
9555
+ 'typeof': 0,
9556
+ vocab: 0,
9557
+
9558
+ /**
9559
+ * Non-standard Properties
9560
+ */
9561
+ // autoCapitalize and autoCorrect are supported in Mobile Safari for
9562
+ // keyboard hints.
9563
+ autoCapitalize: 0,
9564
+ autoCorrect: 0,
9565
+ // autoSave allows WebKit/Blink to persist values of input fields on page reloads
9566
+ autoSave: 0,
9567
+ // color is for Safari mask-icon link
9568
+ color: 0,
9569
+ // itemProp, itemScope, itemType are for
9570
+ // Microdata support. See http://schema.org/docs/gs.html
9571
+ itemProp: 0,
9572
+ itemScope: HAS_BOOLEAN_VALUE,
9573
+ itemType: 0,
9574
+ // itemID and itemRef are for Microdata support as well but
9575
+ // only specified in the WHATWG spec document. See
9576
+ // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
9577
+ itemID: 0,
9578
+ itemRef: 0,
9579
+ // results show looking glass icon and recent searches on input
9580
+ // search fields in WebKit/Blink
9581
+ results: 0,
9582
+ // IE-only attribute that specifies security restrictions on an iframe
9583
+ // as an alternative to the sandbox attribute on IE<10
9584
+ security: 0,
9585
+ // IE-only attribute that controls focus behavior
9586
+ unselectable: 0
9587
+ },
9588
+ DOMAttributeNames: {
9589
+ acceptCharset: 'accept-charset',
9590
+ className: 'class',
9591
+ htmlFor: 'for',
9592
+ httpEquiv: 'http-equiv'
9593
+ },
9594
+ DOMPropertyNames: {}
9595
+ };
9596
+
9597
+ module.exports = HTMLDOMPropertyConfig;
9598
+
9599
+ /***/ },
9600
+ /* 81 */
9601
+ /***/ function(module, exports, __webpack_require__) {
9602
+
9603
+ /**
9604
+ * Copyright 2013-present, Facebook, Inc.
9605
+ * All rights reserved.
9606
+ *
9607
+ * This source code is licensed under the BSD-style license found in the
9608
+ * LICENSE file in the root directory of this source tree. An additional grant
9609
+ * of patent rights can be found in the PATENTS file in the same directory.
9610
+ *
9611
+ * @providesModule ReactComponentBrowserEnvironment
9612
+ */
9613
+
9614
+ 'use strict';
9615
+
9616
+ var DOMChildrenOperations = __webpack_require__(82);
9617
+ var ReactDOMIDOperations = __webpack_require__(94);
9618
+
9619
+ /**
9620
+ * Abstracts away all functionality of the reconciler that requires knowledge of
9621
+ * the browser context. TODO: These callers should be refactored to avoid the
9622
+ * need for this injection.
9623
+ */
9624
+ var ReactComponentBrowserEnvironment = {
9625
+
9626
+ processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,
9627
+
9628
+ replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup
9629
+
9630
+ };
9631
+
9632
+ module.exports = ReactComponentBrowserEnvironment;
9633
+
9634
+ /***/ },
9635
+ /* 82 */
9636
+ /***/ function(module, exports, __webpack_require__) {
9637
+
9638
+ /* WEBPACK VAR INJECTION */(function(process) {/**
9639
+ * Copyright 2013-present, Facebook, Inc.
9640
+ * All rights reserved.
9641
+ *
9642
+ * This source code is licensed under the BSD-style license found in the
9643
+ * LICENSE file in the root directory of this source tree. An additional grant
9644
+ * of patent rights can be found in the PATENTS file in the same directory.
9645
+ *
9646
+ * @providesModule DOMChildrenOperations
9647
+ */
9648
+
9649
+ 'use strict';
9650
+
9651
+ var DOMLazyTree = __webpack_require__(83);
9652
+ var Danger = __webpack_require__(89);
9653
+ var ReactMultiChildUpdateTypes = __webpack_require__(93);
9654
+ var ReactDOMComponentTree = __webpack_require__(37);
9655
+ var ReactInstrumentation = __webpack_require__(63);
9656
+
9657
+ var createMicrosoftUnsafeLocalFunction = __webpack_require__(86);
9658
+ var setInnerHTML = __webpack_require__(85);
9659
+ var setTextContent = __webpack_require__(87);
9660
+
9661
+ function getNodeAfter(parentNode, node) {
9662
+ // Special case for text components, which return [open, close] comments
9663
+ // from getHostNode.
9664
+ if (Array.isArray(node)) {
9665
+ node = node[1];
9666
+ }
9667
+ return node ? node.nextSibling : parentNode.firstChild;
9668
+ }
9669
+
9670
+ /**
9671
+ * Inserts `childNode` as a child of `parentNode` at the `index`.
9672
+ *
9673
+ * @param {DOMElement} parentNode Parent node in which to insert.
9674
+ * @param {DOMElement} childNode Child node to insert.
9675
+ * @param {number} index Index at which to insert the child.
9676
+ * @internal
9677
+ */
9678
+ var insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {
9679
+ // We rely exclusively on `insertBefore(node, null)` instead of also using
9680
+ // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so
9681
+ // we are careful to use `null`.)
9682
+ parentNode.insertBefore(childNode, referenceNode);
9683
+ });
9684
+
9685
+ function insertLazyTreeChildAt(parentNode, childTree, referenceNode) {
9686
+ DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);
9687
+ }
9688
+
9689
+ function moveChild(parentNode, childNode, referenceNode) {
9690
+ if (Array.isArray(childNode)) {
9691
+ moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);
9692
+ } else {
9693
+ insertChildAt(parentNode, childNode, referenceNode);
9694
+ }
9695
+ }
9696
+
9697
+ function removeChild(parentNode, childNode) {
9698
+ if (Array.isArray(childNode)) {
9699
+ var closingComment = childNode[1];
9700
+ childNode = childNode[0];
9701
+ removeDelimitedText(parentNode, childNode, closingComment);
9702
+ parentNode.removeChild(closingComment);
9703
+ }
9704
+ parentNode.removeChild(childNode);
9705
+ }
9706
+
9707
+ function moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {
9708
+ var node = openingComment;
9709
+ while (true) {
9710
+ var nextNode = node.nextSibling;
9711
+ insertChildAt(parentNode, node, referenceNode);
9712
+ if (node === closingComment) {
9713
+ break;
9714
+ }
9715
+ node = nextNode;
9716
+ }
9717
+ }
9718
+
9719
+ function removeDelimitedText(parentNode, startNode, closingComment) {
9720
+ while (true) {
9721
+ var node = startNode.nextSibling;
9722
+ if (node === closingComment) {
9723
+ // The closing comment is removed by ReactMultiChild.
9724
+ break;
9725
+ } else {
9726
+ parentNode.removeChild(node);
9727
+ }
9728
+ }
9729
+ }
9730
+
9731
+ function replaceDelimitedText(openingComment, closingComment, stringText) {
9732
+ var parentNode = openingComment.parentNode;
9733
+ var nodeAfterComment = openingComment.nextSibling;
9734
+ if (nodeAfterComment === closingComment) {
9735
+ // There are no text nodes between the opening and closing comments; insert
9736
+ // a new one if stringText isn't empty.
9737
+ if (stringText) {
9738
+ insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);
9739
+ }
9740
+ } else {
9741
+ if (stringText) {
9742
+ // Set the text content of the first node after the opening comment, and
9743
+ // remove all following nodes up until the closing comment.
9744
+ setTextContent(nodeAfterComment, stringText);
9745
+ removeDelimitedText(parentNode, nodeAfterComment, closingComment);
9746
+ } else {
9747
+ removeDelimitedText(parentNode, openingComment, closingComment);
9748
+ }
9749
+ }
9750
+
9751
+ if (process.env.NODE_ENV !== 'production') {
9752
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
9753
+ }
9754
+ }
9755
+
9756
+ var dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;
9757
+ if (process.env.NODE_ENV !== 'production') {
9758
+ dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
9759
+ Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
9760
+ if (prevInstance._debugID !== 0) {
9761
+ ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());
9762
+ } else {
9763
+ var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);
9764
+ if (nextInstance._debugID !== 0) {
9765
+ ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());
9766
+ }
9767
+ }
9768
+ };
9769
+ }
9770
+
9771
+ /**
9772
+ * Operations for updating with DOM children.
9773
+ */
9774
+ var DOMChildrenOperations = {
9775
+
9776
+ dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,
9777
+
9778
+ replaceDelimitedText: replaceDelimitedText,
9779
+
9780
+ /**
9781
+ * Updates a component's children by processing a series of updates. The
9782
+ * update configurations are each expected to have a `parentNode` property.
9783
+ *
9784
+ * @param {array<object>} updates List of update configurations.
9785
+ * @internal
9786
+ */
9787
+ processUpdates: function (parentNode, updates) {
9788
+ if (process.env.NODE_ENV !== 'production') {
9789
+ var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;
9790
+ }
9791
+
9792
+ for (var k = 0; k < updates.length; k++) {
9793
+ var update = updates[k];
9794
+ switch (update.type) {
9795
+ case ReactMultiChildUpdateTypes.INSERT_MARKUP:
9796
+ insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
9797
+ if (process.env.NODE_ENV !== 'production') {
9798
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
9799
+ }
9800
+ break;
9801
+ case ReactMultiChildUpdateTypes.MOVE_EXISTING:
9802
+ moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
9803
+ if (process.env.NODE_ENV !== 'production') {
9804
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
9805
+ }
9806
+ break;
9807
+ case ReactMultiChildUpdateTypes.SET_MARKUP:
9808
+ setInnerHTML(parentNode, update.content);
9809
+ if (process.env.NODE_ENV !== 'production') {
9810
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());
9811
+ }
9812
+ break;
9813
+ case ReactMultiChildUpdateTypes.TEXT_CONTENT:
9814
+ setTextContent(parentNode, update.content);
9815
+ if (process.env.NODE_ENV !== 'production') {
9816
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());
9817
+ }
9818
+ break;
9819
+ case ReactMultiChildUpdateTypes.REMOVE_NODE:
9820
+ removeChild(parentNode, update.fromNode);
9821
+ if (process.env.NODE_ENV !== 'production') {
9822
+ ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
9823
+ }
9824
+ break;
9825
+ }
9826
+ }
9827
+ }
9828
+
9829
+ };
9830
+
9831
+ module.exports = DOMChildrenOperations;
9832
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
9833
+
9834
+ /***/ },
9835
+ /* 83 */
9836
+ /***/ function(module, exports, __webpack_require__) {
9837
+
9838
+ /**
9839
+ * Copyright 2015-present, Facebook, Inc.
9840
+ * All rights reserved.
9841
+ *
9842
+ * This source code is licensed under the BSD-style license found in the
9843
+ * LICENSE file in the root directory of this source tree. An additional grant
9844
+ * of patent rights can be found in the PATENTS file in the same directory.
9845
+ *
9846
+ * @providesModule DOMLazyTree
9847
+ */
9848
+
9849
+ 'use strict';
9850
+
9851
+ var DOMNamespaces = __webpack_require__(84);
9852
+ var setInnerHTML = __webpack_require__(85);
9853
+
9854
+ var createMicrosoftUnsafeLocalFunction = __webpack_require__(86);
9855
+ var setTextContent = __webpack_require__(87);
9856
+
9857
+ var ELEMENT_NODE_TYPE = 1;
9858
+ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
9859
+
9860
+ /**
9861
+ * In IE (8-11) and Edge, appending nodes with no children is dramatically
9862
+ * faster than appending a full subtree, so we essentially queue up the
9863
+ * .appendChild calls here and apply them so each node is added to its parent
9864
+ * before any children are added.
9865
+ *
9866
+ * In other browsers, doing so is slower or neutral compared to the other order
9867
+ * (in Firefox, twice as slow) so we only do this inversion in IE.
9868
+ *
9869
+ * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.
9870
+ */
9871
+ var enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\bEdge\/\d/.test(navigator.userAgent);
9872
+
9873
+ function insertTreeChildren(tree) {
9874
+ if (!enableLazy) {
9875
+ return;
9876
+ }
9877
+ var node = tree.node;
9878
+ var children = tree.children;
9879
+ if (children.length) {
9880
+ for (var i = 0; i < children.length; i++) {
9881
+ insertTreeBefore(node, children[i], null);
9882
+ }
9883
+ } else if (tree.html != null) {
9884
+ setInnerHTML(node, tree.html);
9885
+ } else if (tree.text != null) {
9886
+ setTextContent(node, tree.text);
9887
+ }
9888
+ }
9889
+
9890
+ var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {
9891
+ // DocumentFragments aren't actually part of the DOM after insertion so
9892
+ // appending children won't update the DOM. We need to ensure the fragment
9893
+ // is properly populated first, breaking out of our lazy approach for just
9894
+ // this level. Also, some <object> plugins (like Flash Player) will read
9895
+ // <param> nodes immediately upon insertion into the DOM, so <object>
9896
+ // must also be populated prior to insertion into the DOM.
9897
+ if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {
9898
+ insertTreeChildren(tree);
9899
+ parentNode.insertBefore(tree.node, referenceNode);
9900
+ } else {
9901
+ parentNode.insertBefore(tree.node, referenceNode);
9902
+ insertTreeChildren(tree);
9903
+ }
9904
+ });
9905
+
9906
+ function replaceChildWithTree(oldNode, newTree) {
9907
+ oldNode.parentNode.replaceChild(newTree.node, oldNode);
9908
+ insertTreeChildren(newTree);
9909
+ }
9910
+
9911
+ function queueChild(parentTree, childTree) {
9912
+ if (enableLazy) {
9913
+ parentTree.children.push(childTree);
9914
+ } else {
9915
+ parentTree.node.appendChild(childTree.node);
9916
+ }
9917
+ }
9918
+
9919
+ function queueHTML(tree, html) {
9920
+ if (enableLazy) {
9921
+ tree.html = html;
9922
+ } else {
9923
+ setInnerHTML(tree.node, html);
9924
+ }
9925
+ }
9926
+
9927
+ function queueText(tree, text) {
9928
+ if (enableLazy) {
9929
+ tree.text = text;
9930
+ } else {
9931
+ setTextContent(tree.node, text);
9932
+ }
9933
+ }
9934
+
9935
+ function toString() {
9936
+ return this.node.nodeName;
9937
+ }
9938
+
9939
+ function DOMLazyTree(node) {
9940
+ return {
9941
+ node: node,
9942
+ children: [],
9943
+ html: null,
9944
+ text: null,
9945
+ toString: toString
9946
+ };
9947
+ }
9948
+
9949
+ DOMLazyTree.insertTreeBefore = insertTreeBefore;
9950
+ DOMLazyTree.replaceChildWithTree = replaceChildWithTree;
9951
+ DOMLazyTree.queueChild = queueChild;
9952
+ DOMLazyTree.queueHTML = queueHTML;
9953
+ DOMLazyTree.queueText = queueText;
9954
+
9955
+ module.exports = DOMLazyTree;
9956
+
9957
+ /***/ },
9958
+ /* 84 */
9959
+ /***/ function(module, exports) {
9960
+
9961
+ /**
9962
+ * Copyright 2013-present, Facebook, Inc.
9963
+ * All rights reserved.
9964
+ *
9965
+ * This source code is licensed under the BSD-style license found in the
9966
+ * LICENSE file in the root directory of this source tree. An additional grant
9967
+ * of patent rights can be found in the PATENTS file in the same directory.
9968
+ *
9969
+ * @providesModule DOMNamespaces
9970
+ */
9971
+
9972
+ 'use strict';
9973
+
9974
+ var DOMNamespaces = {
9975
+ html: 'http://www.w3.org/1999/xhtml',
9976
+ mathml: 'http://www.w3.org/1998/Math/MathML',
9977
+ svg: 'http://www.w3.org/2000/svg'
9978
+ };
9979
+
9980
+ module.exports = DOMNamespaces;
9981
+
9982
+ /***/ },
9983
+ /* 85 */
9984
+ /***/ function(module, exports, __webpack_require__) {
9985
+
9986
+ /**
9987
+ * Copyright 2013-present, Facebook, Inc.
9988
+ * All rights reserved.
9989
+ *
9990
+ * This source code is licensed under the BSD-style license found in the
9991
+ * LICENSE file in the root directory of this source tree. An additional grant
9992
+ * of patent rights can be found in the PATENTS file in the same directory.
9993
+ *
9994
+ * @providesModule setInnerHTML
9995
+ */
9996
+
9997
+ 'use strict';
9998
+
9999
+ var ExecutionEnvironment = __webpack_require__(50);
10000
+ var DOMNamespaces = __webpack_require__(84);
10001
+
10002
+ var WHITESPACE_TEST = /^[ \r\n\t\f]/;
10003
+ var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
10004
+
10005
+ var createMicrosoftUnsafeLocalFunction = __webpack_require__(86);
10006
+
10007
+ // SVG temp container for IE lacking innerHTML
10008
+ var reusableSVGContainer;
10009
+
10010
+ /**
10011
+ * Set the innerHTML property of a node, ensuring that whitespace is preserved
10012
+ * even in IE8.
10013
+ *
10014
+ * @param {DOMElement} node
10015
+ * @param {string} html
10016
+ * @internal
10017
+ */
10018
+ var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
10019
+ // IE does not have innerHTML for SVG nodes, so instead we inject the
10020
+ // new markup in a temp node and then move the child nodes across into
10021
+ // the target node
10022
+ if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {
10023
+ reusableSVGContainer = reusableSVGContainer || document.createElement('div');
10024
+ reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';
10025
+ var svgNode = reusableSVGContainer.firstChild;
10026
+ while (svgNode.firstChild) {
10027
+ node.appendChild(svgNode.firstChild);
10028
+ }
10029
+ } else {
10030
+ node.innerHTML = html;
10031
+ }
10032
+ });
10033
+
10034
+ if (ExecutionEnvironment.canUseDOM) {
10035
+ // IE8: When updating a just created node with innerHTML only leading
10036
+ // whitespace is removed. When updating an existing node with innerHTML
10037
+ // whitespace in root TextNodes is also collapsed.
10038
+ // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
10039
+
10040
+ // Feature detection; only IE8 is known to behave improperly like this.
10041
+ var testElement = document.createElement('div');
10042
+ testElement.innerHTML = ' ';
10043
+ if (testElement.innerHTML === '') {
10044
+ setInnerHTML = function (node, html) {
10045
+ // Magic theory: IE8 supposedly differentiates between added and updated
10046
+ // nodes when processing innerHTML, innerHTML on updated nodes suffers
10047
+ // from worse whitespace behavior. Re-adding a node like this triggers
10048
+ // the initial and more favorable whitespace behavior.
10049
+ // TODO: What to do on a detached node?
10050
+ if (node.parentNode) {
10051
+ node.parentNode.replaceChild(node, node);
10052
+ }
10053
+
10054
+ // We also implement a workaround for non-visible tags disappearing into
10055
+ // thin air on IE8, this only happens if there is no visible text
10056
+ // in-front of the non-visible tags. Piggyback on the whitespace fix
10057
+ // and simply check if any non-visible tags appear in the source.
10058
+ if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
10059
+ // Recover leading whitespace by temporarily prepending any character.
10060
+ // \uFEFF has the potential advantage of being zero-width/invisible.
10061
+ // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode
10062
+ // in hopes that this is preserved even if "\uFEFF" is transformed to
10063
+ // the actual Unicode character (by Babel, for example).
10064
+ // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216
10065
+ node.innerHTML = String.fromCharCode(0xFEFF) + html;
10066
+
10067
+ // deleteData leaves an empty `TextNode` which offsets the index of all
10068
+ // children. Definitely want to avoid this.
10069
+ var textNode = node.firstChild;
10070
+ if (textNode.data.length === 1) {
10071
+ node.removeChild(textNode);
10072
+ } else {
10073
+ textNode.deleteData(0, 1);
10074
+ }
10075
+ } else {
10076
+ node.innerHTML = html;
10077
+ }
10078
+ };
10079
+ }
10080
+ testElement = null;
10081
+ }
10082
+
10083
+ module.exports = setInnerHTML;
10084
+
10085
+ /***/ },
10086
+ /* 86 */
10087
+ /***/ function(module, exports) {
10088
+
10089
+ /**
10090
+ * Copyright 2013-present, Facebook, Inc.
10091
+ * All rights reserved.
10092
+ *
10093
+ * This source code is licensed under the BSD-style license found in the
10094
+ * LICENSE file in the root directory of this source tree. An additional grant
10095
+ * of patent rights can be found in the PATENTS file in the same directory.
10096
+ *
10097
+ * @providesModule createMicrosoftUnsafeLocalFunction
10098
+ */
10099
+
10100
+ /* globals MSApp */
10101
+
10102
+ 'use strict';
10103
+
10104
+ /**
10105
+ * Create a function which has 'unsafe' privileges (required by windows8 apps)
10106
+ */
10107
+
10108
+ var createMicrosoftUnsafeLocalFunction = function (func) {
10109
+ if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
10110
+ return function (arg0, arg1, arg2, arg3) {
10111
+ MSApp.execUnsafeLocalFunction(function () {
10112
+ return func(arg0, arg1, arg2, arg3);
10113
+ });
10114
+ };
10115
+ } else {
10116
+ return func;
10117
+ }
10118
+ };
10119
+
10120
+ module.exports = createMicrosoftUnsafeLocalFunction;
10121
+
10122
+ /***/ },
10123
+ /* 87 */
10124
+ /***/ function(module, exports, __webpack_require__) {
10125
+
10126
+ /**
10127
+ * Copyright 2013-present, Facebook, Inc.
10128
+ * All rights reserved.
10129
+ *
10130
+ * This source code is licensed under the BSD-style license found in the
10131
+ * LICENSE file in the root directory of this source tree. An additional grant
10132
+ * of patent rights can be found in the PATENTS file in the same directory.
10133
+ *
10134
+ * @providesModule setTextContent
10135
+ */
10136
+
10137
+ 'use strict';
10138
+
10139
+ var ExecutionEnvironment = __webpack_require__(50);
10140
+ var escapeTextContentForBrowser = __webpack_require__(88);
10141
+ var setInnerHTML = __webpack_require__(85);
10142
+
10143
+ /**
10144
+ * Set the textContent property of a node, ensuring that whitespace is preserved
10145
+ * even in IE8. innerText is a poor substitute for textContent and, among many
10146
+ * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
10147
+ * as it should.
10148
+ *
10149
+ * @param {DOMElement} node
10150
+ * @param {string} text
10151
+ * @internal
10152
+ */
10153
+ var setTextContent = function (node, text) {
10154
+ if (text) {
10155
+ var firstChild = node.firstChild;
10156
+
10157
+ if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {
10158
+ firstChild.nodeValue = text;
10159
+ return;
10160
+ }
10161
+ }
10162
+ node.textContent = text;
10163
+ };
10164
+
10165
+ if (ExecutionEnvironment.canUseDOM) {
10166
+ if (!('textContent' in document.documentElement)) {
10167
+ setTextContent = function (node, text) {
10168
+ setInnerHTML(node, escapeTextContentForBrowser(text));
10169
+ };
10170
+ }
10171
+ }
10172
+
10173
+ module.exports = setTextContent;
10174
+
10175
+ /***/ },
10176
+ /* 88 */
10177
+ /***/ function(module, exports) {
10178
+
10179
+ /**
10180
+ * Copyright 2016-present, Facebook, Inc.
10181
+ * All rights reserved.
10182
+ *
10183
+ * This source code is licensed under the BSD-style license found in the
10184
+ * LICENSE file in the root directory of this source tree. An additional grant
10185
+ * of patent rights can be found in the PATENTS file in the same directory.
10186
+ *
10187
+ * Based on the escape-html library, which is used under the MIT License below:
10188
+ *
10189
+ * Copyright (c) 2012-2013 TJ Holowaychuk
10190
+ * Copyright (c) 2015 Andreas Lubbe
10191
+ * Copyright (c) 2015 Tiancheng "Timothy" Gu
10192
+ *
10193
+ * Permission is hereby granted, free of charge, to any person obtaining
10194
+ * a copy of this software and associated documentation files (the
10195
+ * 'Software'), to deal in the Software without restriction, including
10196
+ * without limitation the rights to use, copy, modify, merge, publish,
10197
+ * distribute, sublicense, and/or sell copies of the Software, and to
10198
+ * permit persons to whom the Software is furnished to do so, subject to
10199
+ * the following conditions:
10200
+ *
10201
+ * The above copyright notice and this permission notice shall be
10202
+ * included in all copies or substantial portions of the Software.
10203
+ *
10204
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
10205
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10206
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
10207
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
10208
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10209
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
10210
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10211
+ *
10212
+ * @providesModule escapeTextContentForBrowser
10213
+ */
10214
+
10215
+ 'use strict';
10216
+
10217
+ // code copied and modified from escape-html
10218
+ /**
10219
+ * Module variables.
10220
+ * @private
10221
+ */
10222
+
10223
+ var matchHtmlRegExp = /["'&<>]/;
10224
+
10225
+ /**
10226
+ * Escape special characters in the given string of html.
10227
+ *
10228
+ * @param {string} string The string to escape for inserting into HTML
10229
+ * @return {string}
10230
+ * @public
10231
+ */
10232
+
10233
+ function escapeHtml(string) {
10234
+ var str = '' + string;
10235
+ var match = matchHtmlRegExp.exec(str);
10236
+
10237
+ if (!match) {
10238
+ return str;
10239
+ }
10240
+
10241
+ var escape;
10242
+ var html = '';
10243
+ var index = 0;
10244
+ var lastIndex = 0;
10245
+
10246
+ for (index = match.index; index < str.length; index++) {
10247
+ switch (str.charCodeAt(index)) {
10248
+ case 34:
10249
+ // "
10250
+ escape = '&quot;';
10251
+ break;
10252
+ case 38:
10253
+ // &
10254
+ escape = '&amp;';
10255
+ break;
10256
+ case 39:
10257
+ // '
10258
+ escape = '&#x27;'; // modified from escape-html; used to be '&#39'
10259
+ break;
10260
+ case 60:
10261
+ // <
10262
+ escape = '&lt;';
10263
+ break;
10264
+ case 62:
10265
+ // >
10266
+ escape = '&gt;';
10267
+ break;
10268
+ default:
10269
+ continue;
10270
+ }
10271
+
10272
+ if (lastIndex !== index) {
10273
+ html += str.substring(lastIndex, index);
10274
+ }
10275
+
10276
+ lastIndex = index + 1;
10277
+ html += escape;
10278
+ }
10279
+
10280
+ return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
10281
+ }
10282
+ // end code copied and modified from escape-html
10283
+
10284
+
10285
+ /**
10286
+ * Escapes text to prevent scripting attacks.
10287
+ *
10288
+ * @param {*} text Text value to escape.
10289
+ * @return {string} An escaped string.
10290
+ */
10291
+ function escapeTextContentForBrowser(text) {
10292
+ if (typeof text === 'boolean' || typeof text === 'number') {
10293
+ // this shortcircuit helps perf for types that we know will never have
10294
+ // special characters, especially given that this function is used often
10295
+ // for numeric dom ids.
10296
+ return '' + text;
10297
+ }
10298
+ return escapeHtml(text);
10299
+ }
10300
+
10301
+ module.exports = escapeTextContentForBrowser;
10302
+
10303
+ /***/ },
10304
+ /* 89 */
10305
+ /***/ function(module, exports, __webpack_require__) {
10306
+
10307
+ /* WEBPACK VAR INJECTION */(function(process) {/**
10308
+ * Copyright 2013-present, Facebook, Inc.
10309
+ * All rights reserved.
10310
+ *
10311
+ * This source code is licensed under the BSD-style license found in the
10312
+ * LICENSE file in the root directory of this source tree. An additional grant
10313
+ * of patent rights can be found in the PATENTS file in the same directory.
10314
+ *
10315
+ * @providesModule Danger
10316
+ */
10317
+
10318
+ 'use strict';
10319
+
10320
+ var _prodInvariant = __webpack_require__(8);
10321
+
10322
+ var DOMLazyTree = __webpack_require__(83);
10323
+ var ExecutionEnvironment = __webpack_require__(50);
10324
+
10325
+ var createNodesFromMarkup = __webpack_require__(90);
10326
+ var emptyFunction = __webpack_require__(13);
10327
+ var invariant = __webpack_require__(9);
10328
+
10329
+ var Danger = {
10330
+
10331
+ /**
10332
+ * Replaces a node with a string of markup at its current position within its
10333
+ * parent. The markup must render into a single root node.
10334
+ *
10335
+ * @param {DOMElement} oldChild Child node to replace.
10336
+ * @param {string} markup Markup to render in place of the child node.
10337
+ * @internal
10338
+ */
10339
+ dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
10340
+ !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;
10341
+ !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;
10342
+ !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;
10343
+
10344
+ if (typeof markup === 'string') {
10345
+ var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
10346
+ oldChild.parentNode.replaceChild(newChild, oldChild);
10347
+ } else {
10348
+ DOMLazyTree.replaceChildWithTree(oldChild, markup);
10349
+ }
10350
+ }
10351
+
10352
+ };
10353
+
10354
+ module.exports = Danger;
10355
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
10356
+
10357
+ /***/ },
10358
+ /* 90 */
10359
+ /***/ function(module, exports, __webpack_require__) {
10360
+
10361
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
10362
+
10363
+ /**
10364
+ * Copyright (c) 2013-present, Facebook, Inc.
10365
+ * All rights reserved.
10366
+ *
10367
+ * This source code is licensed under the BSD-style license found in the
10368
+ * LICENSE file in the root directory of this source tree. An additional grant
10369
+ * of patent rights can be found in the PATENTS file in the same directory.
10370
+ *
10371
+ * @typechecks
10372
+ */
10373
+
10374
+ /*eslint-disable fb-www/unsafe-html*/
10375
+
10376
+ var ExecutionEnvironment = __webpack_require__(50);
10377
+
10378
+ var createArrayFromMixed = __webpack_require__(91);
10379
+ var getMarkupWrap = __webpack_require__(92);
10380
+ var invariant = __webpack_require__(9);
10381
+
10382
+ /**
10383
+ * Dummy container used to render all markup.
10384
+ */
10385
+ var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
10386
+
10387
+ /**
10388
+ * Pattern used by `getNodeName`.
10389
+ */
10390
+ var nodeNamePattern = /^\s*<(\w+)/;
10391
+
10392
+ /**
10393
+ * Extracts the `nodeName` of the first element in a string of markup.
10394
+ *
10395
+ * @param {string} markup String of markup.
10396
+ * @return {?string} Node name of the supplied markup.
10397
+ */
10398
+ function getNodeName(markup) {
10399
+ var nodeNameMatch = markup.match(nodeNamePattern);
10400
+ return nodeNameMatch && nodeNameMatch[1].toLowerCase();
10401
+ }
10402
+
10403
+ /**
10404
+ * Creates an array containing the nodes rendered from the supplied markup. The
10405
+ * optionally supplied `handleScript` function will be invoked once for each
10406
+ * <script> element that is rendered. If no `handleScript` function is supplied,
10407
+ * an exception is thrown if any <script> elements are rendered.
10408
+ *
10409
+ * @param {string} markup A string of valid HTML markup.
10410
+ * @param {?function} handleScript Invoked once for each rendered <script>.
10411
+ * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
10412
+ */
10413
+ function createNodesFromMarkup(markup, handleScript) {
10414
+ var node = dummyNode;
10415
+ !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;
10416
+ var nodeName = getNodeName(markup);
10417
+
10418
+ var wrap = nodeName && getMarkupWrap(nodeName);
10419
+ if (wrap) {
10420
+ node.innerHTML = wrap[1] + markup + wrap[2];
10421
+
10422
+ var wrapDepth = wrap[0];
10423
+ while (wrapDepth--) {
10424
+ node = node.lastChild;
10425
+ }
10426
+ } else {
10427
+ node.innerHTML = markup;
10428
+ }
10429
+
10430
+ var scripts = node.getElementsByTagName('script');
10431
+ if (scripts.length) {
10432
+ !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;
10433
+ createArrayFromMixed(scripts).forEach(handleScript);
10434
+ }
10435
+
10436
+ var nodes = Array.from(node.childNodes);
10437
+ while (node.lastChild) {
10438
+ node.removeChild(node.lastChild);
10439
+ }
10440
+ return nodes;
10441
+ }
10442
+
10443
+ module.exports = createNodesFromMarkup;
10444
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
10445
+
10446
+ /***/ },
10447
+ /* 91 */
10448
+ /***/ function(module, exports, __webpack_require__) {
10449
+
10450
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
10451
+
10452
+ /**
10453
+ * Copyright (c) 2013-present, Facebook, Inc.
10454
+ * All rights reserved.
10455
+ *
10456
+ * This source code is licensed under the BSD-style license found in the
10457
+ * LICENSE file in the root directory of this source tree. An additional grant
10458
+ * of patent rights can be found in the PATENTS file in the same directory.
10459
+ *
10460
+ * @typechecks
10461
+ */
10462
+
10463
+ var invariant = __webpack_require__(9);
10464
+
10465
+ /**
10466
+ * Convert array-like objects to arrays.
10467
+ *
10468
+ * This API assumes the caller knows the contents of the data type. For less
10469
+ * well defined inputs use createArrayFromMixed.
10470
+ *
10471
+ * @param {object|function|filelist} obj
10472
+ * @return {array}
10473
+ */
10474
+ function toArray(obj) {
10475
+ var length = obj.length;
10476
+
10477
+ // Some browsers builtin objects can report typeof 'function' (e.g. NodeList
10478
+ // in old versions of Safari).
10479
+ !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;
10480
+
10481
+ !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;
10482
+
10483
+ !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;
10484
+
10485
+ !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;
10486
+
10487
+ // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
10488
+ // without method will throw during the slice call and skip straight to the
10489
+ // fallback.
10490
+ if (obj.hasOwnProperty) {
10491
+ try {
10492
+ return Array.prototype.slice.call(obj);
10493
+ } catch (e) {
10494
+ // IE < 9 does not support Array#slice on collections objects
10495
+ }
10496
+ }
10497
+
10498
+ // Fall back to copying key by key. This assumes all keys have a value,
10499
+ // so will not preserve sparsely populated inputs.
10500
+ var ret = Array(length);
10501
+ for (var ii = 0; ii < length; ii++) {
10502
+ ret[ii] = obj[ii];
10503
+ }
10504
+ return ret;
10505
+ }
10506
+
10507
+ /**
10508
+ * Perform a heuristic test to determine if an object is "array-like".
10509
+ *
10510
+ * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
10511
+ * Joshu replied: "Mu."
10512
+ *
10513
+ * This function determines if its argument has "array nature": it returns
10514
+ * true if the argument is an actual array, an `arguments' object, or an
10515
+ * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
10516
+ *
10517
+ * It will return false for other array-like objects like Filelist.
10518
+ *
10519
+ * @param {*} obj
10520
+ * @return {boolean}
10521
+ */
10522
+ function hasArrayNature(obj) {
10523
+ return (
10524
+ // not null/false
10525
+ !!obj && (
10526
+ // arrays are objects, NodeLists are functions in Safari
10527
+ typeof obj == 'object' || typeof obj == 'function') &&
10528
+ // quacks like an array
10529
+ 'length' in obj &&
10530
+ // not window
10531
+ !('setInterval' in obj) &&
10532
+ // no DOM node should be considered an array-like
10533
+ // a 'select' element has 'length' and 'item' properties on IE8
10534
+ typeof obj.nodeType != 'number' && (
10535
+ // a real array
10536
+ Array.isArray(obj) ||
10537
+ // arguments
10538
+ 'callee' in obj ||
10539
+ // HTMLCollection/NodeList
10540
+ 'item' in obj)
10541
+ );
10542
+ }
10543
+
10544
+ /**
10545
+ * Ensure that the argument is an array by wrapping it in an array if it is not.
10546
+ * Creates a copy of the argument if it is already an array.
10547
+ *
10548
+ * This is mostly useful idiomatically:
10549
+ *
10550
+ * var createArrayFromMixed = require('createArrayFromMixed');
10551
+ *
10552
+ * function takesOneOrMoreThings(things) {
10553
+ * things = createArrayFromMixed(things);
10554
+ * ...
10555
+ * }
10556
+ *
10557
+ * This allows you to treat `things' as an array, but accept scalars in the API.
10558
+ *
10559
+ * If you need to convert an array-like object, like `arguments`, into an array
10560
+ * use toArray instead.
10561
+ *
10562
+ * @param {*} obj
10563
+ * @return {array}
10564
+ */
10565
+ function createArrayFromMixed(obj) {
10566
+ if (!hasArrayNature(obj)) {
10567
+ return [obj];
10568
+ } else if (Array.isArray(obj)) {
10569
+ return obj.slice();
10570
+ } else {
10571
+ return toArray(obj);
10572
+ }
10573
+ }
10574
+
10575
+ module.exports = createArrayFromMixed;
10576
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
10577
+
10578
+ /***/ },
10579
+ /* 92 */
10580
+ /***/ function(module, exports, __webpack_require__) {
10581
+
10582
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
10583
+
10584
+ /**
10585
+ * Copyright (c) 2013-present, Facebook, Inc.
10586
+ * All rights reserved.
10587
+ *
10588
+ * This source code is licensed under the BSD-style license found in the
10589
+ * LICENSE file in the root directory of this source tree. An additional grant
10590
+ * of patent rights can be found in the PATENTS file in the same directory.
10591
+ *
10592
+ */
10593
+
10594
+ /*eslint-disable fb-www/unsafe-html */
10595
+
10596
+ var ExecutionEnvironment = __webpack_require__(50);
10597
+
10598
+ var invariant = __webpack_require__(9);
10599
+
10600
+ /**
10601
+ * Dummy container used to detect which wraps are necessary.
10602
+ */
10603
+ var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
10604
+
10605
+ /**
10606
+ * Some browsers cannot use `innerHTML` to render certain elements standalone,
10607
+ * so we wrap them, render the wrapped nodes, then extract the desired node.
10608
+ *
10609
+ * In IE8, certain elements cannot render alone, so wrap all elements ('*').
10610
+ */
10611
+
10612
+ var shouldWrap = {};
10613
+
10614
+ var selectWrap = [1, '<select multiple="true">', '</select>'];
10615
+ var tableWrap = [1, '<table>', '</table>'];
10616
+ var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
10617
+
10618
+ var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>'];
10619
+
10620
+ var markupWrap = {
10621
+ '*': [1, '?<div>', '</div>'],
10622
+
10623
+ 'area': [1, '<map>', '</map>'],
10624
+ 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
10625
+ 'legend': [1, '<fieldset>', '</fieldset>'],
10626
+ 'param': [1, '<object>', '</object>'],
10627
+ 'tr': [2, '<table><tbody>', '</tbody></table>'],
10628
+
10629
+ 'optgroup': selectWrap,
10630
+ 'option': selectWrap,
10631
+
10632
+ 'caption': tableWrap,
10633
+ 'colgroup': tableWrap,
10634
+ 'tbody': tableWrap,
10635
+ 'tfoot': tableWrap,
10636
+ 'thead': tableWrap,
10637
+
10638
+ 'td': trWrap,
10639
+ 'th': trWrap
10640
+ };
10641
+
10642
+ // Initialize the SVG elements since we know they'll always need to be wrapped
10643
+ // consistently. If they are created inside a <div> they will be initialized in
10644
+ // the wrong namespace (and will not display).
10645
+ var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];
10646
+ svgElements.forEach(function (nodeName) {
10647
+ markupWrap[nodeName] = svgWrap;
10648
+ shouldWrap[nodeName] = true;
10649
+ });
10650
+
10651
+ /**
10652
+ * Gets the markup wrap configuration for the supplied `nodeName`.
10653
+ *
10654
+ * NOTE: This lazily detects which wraps are necessary for the current browser.
10655
+ *
10656
+ * @param {string} nodeName Lowercase `nodeName`.
10657
+ * @return {?array} Markup wrap configuration, if applicable.
10658
+ */
10659
+ function getMarkupWrap(nodeName) {
10660
+ !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;
10661
+ if (!markupWrap.hasOwnProperty(nodeName)) {
10662
+ nodeName = '*';
10663
+ }
10664
+ if (!shouldWrap.hasOwnProperty(nodeName)) {
10665
+ if (nodeName === '*') {
10666
+ dummyNode.innerHTML = '<link />';
10667
+ } else {
10668
+ dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
10669
+ }
10670
+ shouldWrap[nodeName] = !dummyNode.firstChild;
10671
+ }
10672
+ return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
10673
+ }
10674
+
10675
+ module.exports = getMarkupWrap;
10676
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
10677
+
10678
+ /***/ },
10679
+ /* 93 */
10680
+ /***/ function(module, exports, __webpack_require__) {
10681
+
10682
+ /**
10683
+ * Copyright 2013-present, Facebook, Inc.
10684
+ * All rights reserved.
10685
+ *
10686
+ * This source code is licensed under the BSD-style license found in the
10687
+ * LICENSE file in the root directory of this source tree. An additional grant
10688
+ * of patent rights can be found in the PATENTS file in the same directory.
10689
+ *
10690
+ * @providesModule ReactMultiChildUpdateTypes
10691
+ */
10692
+
10693
+ 'use strict';
10694
+
10695
+ var keyMirror = __webpack_require__(24);
10696
+
10697
+ /**
10698
+ * When a component's children are updated, a series of update configuration
10699
+ * objects are created in order to batch and serialize the required changes.
10700
+ *
10701
+ * Enumerates all the possible types of update configurations.
10702
+ *
10703
+ * @internal
10704
+ */
10705
+ var ReactMultiChildUpdateTypes = keyMirror({
10706
+ INSERT_MARKUP: null,
10707
+ MOVE_EXISTING: null,
10708
+ REMOVE_NODE: null,
10709
+ SET_MARKUP: null,
10710
+ TEXT_CONTENT: null
10711
+ });
10712
+
10713
+ module.exports = ReactMultiChildUpdateTypes;
10714
+
10715
+ /***/ },
10716
+ /* 94 */
10717
+ /***/ function(module, exports, __webpack_require__) {
10718
+
10719
+ /**
10720
+ * Copyright 2013-present, Facebook, Inc.
10721
+ * All rights reserved.
10722
+ *
10723
+ * This source code is licensed under the BSD-style license found in the
10724
+ * LICENSE file in the root directory of this source tree. An additional grant
10725
+ * of patent rights can be found in the PATENTS file in the same directory.
10726
+ *
10727
+ * @providesModule ReactDOMIDOperations
10728
+ */
10729
+
10730
+ 'use strict';
10731
+
10732
+ var DOMChildrenOperations = __webpack_require__(82);
10733
+ var ReactDOMComponentTree = __webpack_require__(37);
10734
+
10735
+ /**
10736
+ * Operations used to process updates to DOM nodes.
10737
+ */
10738
+ var ReactDOMIDOperations = {
10739
+
10740
+ /**
10741
+ * Updates a component's children by processing a series of updates.
10742
+ *
10743
+ * @param {array<object>} updates List of update configurations.
10744
+ * @internal
10745
+ */
10746
+ dangerouslyProcessChildrenUpdates: function (parentInst, updates) {
10747
+ var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);
10748
+ DOMChildrenOperations.processUpdates(node, updates);
10749
+ }
10750
+ };
10751
+
10752
+ module.exports = ReactDOMIDOperations;
10753
+
10754
+ /***/ },
10755
+ /* 95 */
10756
+ /***/ function(module, exports, __webpack_require__) {
10757
+
10758
+ /* WEBPACK VAR INJECTION */(function(process) {/**
10759
+ * Copyright 2013-present, Facebook, Inc.
10760
+ * All rights reserved.
10761
+ *
10762
+ * This source code is licensed under the BSD-style license found in the
10763
+ * LICENSE file in the root directory of this source tree. An additional grant
10764
+ * of patent rights can be found in the PATENTS file in the same directory.
10765
+ *
10766
+ * @providesModule ReactDOMComponent
10767
+ */
10768
+
10769
+ /* global hasOwnProperty:true */
10770
+
10771
+ 'use strict';
10772
+
10773
+ var _prodInvariant = __webpack_require__(8),
10774
+ _assign = __webpack_require__(5);
10775
+
10776
+ var AutoFocusUtils = __webpack_require__(96);
10777
+ var CSSPropertyOperations = __webpack_require__(98);
10778
+ var DOMLazyTree = __webpack_require__(83);
10779
+ var DOMNamespaces = __webpack_require__(84);
10780
+ var DOMProperty = __webpack_require__(38);
10781
+ var DOMPropertyOperations = __webpack_require__(106);
10782
+ var EventConstants = __webpack_require__(42);
10783
+ var EventPluginHub = __webpack_require__(44);
10784
+ var EventPluginRegistry = __webpack_require__(45);
10785
+ var ReactBrowserEventEmitter = __webpack_require__(108);
10786
+ var ReactDOMButton = __webpack_require__(111);
10787
+ var ReactDOMComponentFlags = __webpack_require__(39);
10788
+ var ReactDOMComponentTree = __webpack_require__(37);
10789
+ var ReactDOMInput = __webpack_require__(113);
10790
+ var ReactDOMOption = __webpack_require__(115);
10791
+ var ReactDOMSelect = __webpack_require__(116);
10792
+ var ReactDOMTextarea = __webpack_require__(117);
10793
+ var ReactInstrumentation = __webpack_require__(63);
10794
+ var ReactMultiChild = __webpack_require__(118);
10795
+ var ReactServerRenderingTransaction = __webpack_require__(130);
10796
+
10797
+ var emptyFunction = __webpack_require__(13);
10798
+ var escapeTextContentForBrowser = __webpack_require__(88);
10799
+ var invariant = __webpack_require__(9);
10800
+ var isEventSupported = __webpack_require__(72);
10801
+ var keyOf = __webpack_require__(26);
10802
+ var shallowEqual = __webpack_require__(125);
10803
+ var validateDOMNesting = __webpack_require__(133);
10804
+ var warning = __webpack_require__(12);
10805
+
10806
+ var Flags = ReactDOMComponentFlags;
10807
+ var deleteListener = EventPluginHub.deleteListener;
10808
+ var getNode = ReactDOMComponentTree.getNodeFromInstance;
10809
+ var listenTo = ReactBrowserEventEmitter.listenTo;
10810
+ var registrationNameModules = EventPluginRegistry.registrationNameModules;
10811
+
10812
+ // For quickly matching children type, to test if can be treated as content.
10813
+ var CONTENT_TYPES = { 'string': true, 'number': true };
10814
+
10815
+ var STYLE = keyOf({ style: null });
10816
+ var HTML = keyOf({ __html: null });
10817
+ var RESERVED_PROPS = {
10818
+ children: null,
10819
+ dangerouslySetInnerHTML: null,
10820
+ suppressContentEditableWarning: null
10821
+ };
10822
+
10823
+ // Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
10824
+ var DOC_FRAGMENT_TYPE = 11;
10825
+
10826
+ function getDeclarationErrorAddendum(internalInstance) {
10827
+ if (internalInstance) {
10828
+ var owner = internalInstance._currentElement._owner || null;
10829
+ if (owner) {
10830
+ var name = owner.getName();
10831
+ if (name) {
10832
+ return ' This DOM node was rendered by `' + name + '`.';
10833
+ }
10834
+ }
10835
+ }
10836
+ return '';
10837
+ }
10838
+
10839
+ function friendlyStringify(obj) {
10840
+ if (typeof obj === 'object') {
10841
+ if (Array.isArray(obj)) {
10842
+ return '[' + obj.map(friendlyStringify).join(', ') + ']';
10843
+ } else {
10844
+ var pairs = [];
10845
+ for (var key in obj) {
10846
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
10847
+ var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key);
10848
+ pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));
10849
+ }
10850
+ }
10851
+ return '{' + pairs.join(', ') + '}';
10852
+ }
10853
+ } else if (typeof obj === 'string') {
10854
+ return JSON.stringify(obj);
10855
+ } else if (typeof obj === 'function') {
10856
+ return '[function object]';
10857
+ }
10858
+ // Differs from JSON.stringify in that undefined because undefined and that
10859
+ // inf and nan don't become null
10860
+ return String(obj);
10861
+ }
10862
+
10863
+ var styleMutationWarning = {};
10864
+
10865
+ function checkAndWarnForMutatedStyle(style1, style2, component) {
10866
+ if (style1 == null || style2 == null) {
10867
+ return;
10868
+ }
10869
+ if (shallowEqual(style1, style2)) {
10870
+ return;
10871
+ }
10872
+
10873
+ var componentName = component._tag;
10874
+ var owner = component._currentElement._owner;
10875
+ var ownerName;
10876
+ if (owner) {
10877
+ ownerName = owner.getName();
10878
+ }
10879
+
10880
+ var hash = ownerName + '|' + componentName;
10881
+
10882
+ if (styleMutationWarning.hasOwnProperty(hash)) {
10883
+ return;
10884
+ }
10885
+
10886
+ styleMutationWarning[hash] = true;
10887
+
10888
+ process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;
10889
+ }
10890
+
10891
+ /**
10892
+ * @param {object} component
10893
+ * @param {?object} props
10894
+ */
10895
+ function assertValidProps(component, props) {
10896
+ if (!props) {
10897
+ return;
10898
+ }
10899
+ // Note the use of `==` which checks for null or undefined.
10900
+ if (voidElementTags[component._tag]) {
10901
+ !(props.children == null && props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;
10902
+ }
10903
+ if (props.dangerouslySetInnerHTML != null) {
10904
+ !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;
10905
+ !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;
10906
+ }
10907
+ if (process.env.NODE_ENV !== 'production') {
10908
+ process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;
10909
+ process.env.NODE_ENV !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;
10910
+ process.env.NODE_ENV !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;
10911
+ }
10912
+ !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;
10913
+ }
10914
+
10915
+ function enqueuePutListener(inst, registrationName, listener, transaction) {
10916
+ if (transaction instanceof ReactServerRenderingTransaction) {
10917
+ return;
10918
+ }
10919
+ if (process.env.NODE_ENV !== 'production') {
10920
+ // IE8 has no API for event capturing and the `onScroll` event doesn't
10921
+ // bubble.
10922
+ process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : void 0;
10923
+ }
10924
+ var containerInfo = inst._hostContainerInfo;
10925
+ var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
10926
+ var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
10927
+ listenTo(registrationName, doc);
10928
+ transaction.getReactMountReady().enqueue(putListener, {
10929
+ inst: inst,
10930
+ registrationName: registrationName,
10931
+ listener: listener
10932
+ });
10933
+ }
10934
+
10935
+ function putListener() {
10936
+ var listenerToPut = this;
10937
+ EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);
10938
+ }
10939
+
10940
+ function inputPostMount() {
10941
+ var inst = this;
10942
+ ReactDOMInput.postMountWrapper(inst);
10943
+ }
10944
+
10945
+ function textareaPostMount() {
10946
+ var inst = this;
10947
+ ReactDOMTextarea.postMountWrapper(inst);
10948
+ }
10949
+
10950
+ function optionPostMount() {
10951
+ var inst = this;
10952
+ ReactDOMOption.postMountWrapper(inst);
10953
+ }
10954
+
10955
+ var setAndValidateContentChildDev = emptyFunction;
10956
+ if (process.env.NODE_ENV !== 'production') {
10957
+ setAndValidateContentChildDev = function (content) {
10958
+ var hasExistingContent = this._contentDebugID != null;
10959
+ var debugID = this._debugID;
10960
+ // This ID represents the inlined child that has no backing instance:
10961
+ var contentDebugID = -debugID;
10962
+
10963
+ if (content == null) {
10964
+ if (hasExistingContent) {
10965
+ ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
10966
+ }
10967
+ this._contentDebugID = null;
10968
+ return;
10969
+ }
10970
+
10971
+ validateDOMNesting(null, String(content), this, this._ancestorInfo);
10972
+ this._contentDebugID = contentDebugID;
10973
+ if (hasExistingContent) {
10974
+ ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);
10975
+ ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);
10976
+ } else {
10977
+ ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content, debugID);
10978
+ ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
10979
+ ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
10980
+ }
10981
+ };
10982
+ }
10983
+
10984
+ // There are so many media events, it makes sense to just
10985
+ // maintain a list rather than create a `trapBubbledEvent` for each
10986
+ var mediaEvents = {
10987
+ topAbort: 'abort',
10988
+ topCanPlay: 'canplay',
10989
+ topCanPlayThrough: 'canplaythrough',
10990
+ topDurationChange: 'durationchange',
10991
+ topEmptied: 'emptied',
10992
+ topEncrypted: 'encrypted',
10993
+ topEnded: 'ended',
10994
+ topError: 'error',
10995
+ topLoadedData: 'loadeddata',
10996
+ topLoadedMetadata: 'loadedmetadata',
10997
+ topLoadStart: 'loadstart',
10998
+ topPause: 'pause',
10999
+ topPlay: 'play',
11000
+ topPlaying: 'playing',
11001
+ topProgress: 'progress',
11002
+ topRateChange: 'ratechange',
11003
+ topSeeked: 'seeked',
11004
+ topSeeking: 'seeking',
11005
+ topStalled: 'stalled',
11006
+ topSuspend: 'suspend',
11007
+ topTimeUpdate: 'timeupdate',
11008
+ topVolumeChange: 'volumechange',
11009
+ topWaiting: 'waiting'
11010
+ };
11011
+
11012
+ function trapBubbledEventsLocal() {
11013
+ var inst = this;
11014
+ // If a component renders to null or if another component fatals and causes
11015
+ // the state of the tree to be corrupted, `node` here can be null.
11016
+ !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;
11017
+ var node = getNode(inst);
11018
+ !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;
11019
+
11020
+ switch (inst._tag) {
11021
+ case 'iframe':
11022
+ case 'object':
11023
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
11024
+ break;
11025
+ case 'video':
11026
+ case 'audio':
11027
+
11028
+ inst._wrapperState.listeners = [];
11029
+ // Create listener for each media event
11030
+ for (var event in mediaEvents) {
11031
+ if (mediaEvents.hasOwnProperty(event)) {
11032
+ inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
11033
+ }
11034
+ }
11035
+ break;
11036
+ case 'source':
11037
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];
11038
+ break;
11039
+ case 'img':
11040
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
11041
+ break;
11042
+ case 'form':
11043
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];
11044
+ break;
11045
+ case 'input':
11046
+ case 'select':
11047
+ case 'textarea':
11048
+ inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topInvalid, 'invalid', node)];
11049
+ break;
11050
+ }
11051
+ }
11052
+
11053
+ function postUpdateSelectWrapper() {
11054
+ ReactDOMSelect.postUpdateWrapper(this);
11055
+ }
11056
+
11057
+ // For HTML, certain tags should omit their close tag. We keep a whitelist for
11058
+ // those special-case tags.
11059
+
11060
+ var omittedCloseTags = {
11061
+ 'area': true,
11062
+ 'base': true,
11063
+ 'br': true,
11064
+ 'col': true,
11065
+ 'embed': true,
11066
+ 'hr': true,
11067
+ 'img': true,
11068
+ 'input': true,
11069
+ 'keygen': true,
11070
+ 'link': true,
11071
+ 'meta': true,
11072
+ 'param': true,
11073
+ 'source': true,
11074
+ 'track': true,
11075
+ 'wbr': true
11076
+ };
11077
+
11078
+ // NOTE: menuitem's close tag should be omitted, but that causes problems.
11079
+ var newlineEatingTags = {
11080
+ 'listing': true,
11081
+ 'pre': true,
11082
+ 'textarea': true
11083
+ };
11084
+
11085
+ // For HTML, certain tags cannot have children. This has the same purpose as
11086
+ // `omittedCloseTags` except that `menuitem` should still have its closing tag.
11087
+
11088
+ var voidElementTags = _assign({
11089
+ 'menuitem': true
11090
+ }, omittedCloseTags);
11091
+
11092
+ // We accept any tag to be rendered but since this gets injected into arbitrary
11093
+ // HTML, we want to make sure that it's a safe tag.
11094
+ // http://www.w3.org/TR/REC-xml/#NT-Name
11095
+
11096
+ var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
11097
+ var validatedTagCache = {};
11098
+ var hasOwnProperty = {}.hasOwnProperty;
11099
+
11100
+ function validateDangerousTag(tag) {
11101
+ if (!hasOwnProperty.call(validatedTagCache, tag)) {
11102
+ !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;
11103
+ validatedTagCache[tag] = true;
11104
+ }
11105
+ }
11106
+
11107
+ function isCustomComponent(tagName, props) {
11108
+ return tagName.indexOf('-') >= 0 || props.is != null;
11109
+ }
11110
+
11111
+ var globalIdCounter = 1;
11112
+
11113
+ /**
11114
+ * Creates a new React class that is idempotent and capable of containing other
11115
+ * React components. It accepts event listeners and DOM properties that are
11116
+ * valid according to `DOMProperty`.
11117
+ *
11118
+ * - Event listeners: `onClick`, `onMouseDown`, etc.
11119
+ * - DOM properties: `className`, `name`, `title`, etc.
11120
+ *
11121
+ * The `style` property functions differently from the DOM API. It accepts an
11122
+ * object mapping of style properties to values.
11123
+ *
11124
+ * @constructor ReactDOMComponent
11125
+ * @extends ReactMultiChild
11126
+ */
11127
+ function ReactDOMComponent(element) {
11128
+ var tag = element.type;
11129
+ validateDangerousTag(tag);
11130
+ this._currentElement = element;
11131
+ this._tag = tag.toLowerCase();
11132
+ this._namespaceURI = null;
11133
+ this._renderedChildren = null;
11134
+ this._previousStyle = null;
11135
+ this._previousStyleCopy = null;
11136
+ this._hostNode = null;
11137
+ this._hostParent = null;
11138
+ this._rootNodeID = 0;
11139
+ this._domID = 0;
11140
+ this._hostContainerInfo = null;
11141
+ this._wrapperState = null;
11142
+ this._topLevelWrapper = null;
11143
+ this._flags = 0;
11144
+ if (process.env.NODE_ENV !== 'production') {
11145
+ this._ancestorInfo = null;
11146
+ setAndValidateContentChildDev.call(this, null);
11147
+ }
11148
+ }
11149
+
11150
+ ReactDOMComponent.displayName = 'ReactDOMComponent';
11151
+
11152
+ ReactDOMComponent.Mixin = {
11153
+
11154
+ /**
11155
+ * Generates root tag markup then recurses. This method has side effects and
11156
+ * is not idempotent.
11157
+ *
11158
+ * @internal
11159
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
11160
+ * @param {?ReactDOMComponent} the parent component instance
11161
+ * @param {?object} info about the host container
11162
+ * @param {object} context
11163
+ * @return {string} The computed markup.
11164
+ */
11165
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
11166
+ this._rootNodeID = globalIdCounter++;
11167
+ this._domID = hostContainerInfo._idCounter++;
11168
+ this._hostParent = hostParent;
11169
+ this._hostContainerInfo = hostContainerInfo;
11170
+
11171
+ var props = this._currentElement.props;
11172
+
11173
+ switch (this._tag) {
11174
+ case 'audio':
11175
+ case 'form':
11176
+ case 'iframe':
11177
+ case 'img':
11178
+ case 'link':
11179
+ case 'object':
11180
+ case 'source':
11181
+ case 'video':
11182
+ this._wrapperState = {
11183
+ listeners: null
11184
+ };
11185
+ transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
11186
+ break;
11187
+ case 'button':
11188
+ props = ReactDOMButton.getHostProps(this, props, hostParent);
11189
+ break;
11190
+ case 'input':
11191
+ ReactDOMInput.mountWrapper(this, props, hostParent);
11192
+ props = ReactDOMInput.getHostProps(this, props);
11193
+ transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
11194
+ break;
11195
+ case 'option':
11196
+ ReactDOMOption.mountWrapper(this, props, hostParent);
11197
+ props = ReactDOMOption.getHostProps(this, props);
11198
+ break;
11199
+ case 'select':
11200
+ ReactDOMSelect.mountWrapper(this, props, hostParent);
11201
+ props = ReactDOMSelect.getHostProps(this, props);
11202
+ transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
11203
+ break;
11204
+ case 'textarea':
11205
+ ReactDOMTextarea.mountWrapper(this, props, hostParent);
11206
+ props = ReactDOMTextarea.getHostProps(this, props);
11207
+ transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
11208
+ break;
11209
+ }
11210
+
11211
+ assertValidProps(this, props);
11212
+
11213
+ // We create tags in the namespace of their parent container, except HTML
11214
+ // tags get no namespace.
11215
+ var namespaceURI;
11216
+ var parentTag;
11217
+ if (hostParent != null) {
11218
+ namespaceURI = hostParent._namespaceURI;
11219
+ parentTag = hostParent._tag;
11220
+ } else if (hostContainerInfo._tag) {
11221
+ namespaceURI = hostContainerInfo._namespaceURI;
11222
+ parentTag = hostContainerInfo._tag;
11223
+ }
11224
+ if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {
11225
+ namespaceURI = DOMNamespaces.html;
11226
+ }
11227
+ if (namespaceURI === DOMNamespaces.html) {
11228
+ if (this._tag === 'svg') {
11229
+ namespaceURI = DOMNamespaces.svg;
11230
+ } else if (this._tag === 'math') {
11231
+ namespaceURI = DOMNamespaces.mathml;
11232
+ }
11233
+ }
11234
+ this._namespaceURI = namespaceURI;
11235
+
11236
+ if (process.env.NODE_ENV !== 'production') {
11237
+ var parentInfo;
11238
+ if (hostParent != null) {
11239
+ parentInfo = hostParent._ancestorInfo;
11240
+ } else if (hostContainerInfo._tag) {
11241
+ parentInfo = hostContainerInfo._ancestorInfo;
11242
+ }
11243
+ if (parentInfo) {
11244
+ // parentInfo should always be present except for the top-level
11245
+ // component when server rendering
11246
+ validateDOMNesting(this._tag, null, this, parentInfo);
11247
+ }
11248
+ this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);
11249
+ }
11250
+
11251
+ var mountImage;
11252
+ if (transaction.useCreateElement) {
11253
+ var ownerDocument = hostContainerInfo._ownerDocument;
11254
+ var el;
11255
+ if (namespaceURI === DOMNamespaces.html) {
11256
+ if (this._tag === 'script') {
11257
+ // Create the script via .innerHTML so its "parser-inserted" flag is
11258
+ // set to true and it does not execute
11259
+ var div = ownerDocument.createElement('div');
11260
+ var type = this._currentElement.type;
11261
+ div.innerHTML = '<' + type + '></' + type + '>';
11262
+ el = div.removeChild(div.firstChild);
11263
+ } else if (props.is) {
11264
+ el = ownerDocument.createElement(this._currentElement.type, props.is);
11265
+ } else {
11266
+ // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.
11267
+ // See discussion in https://github.com/facebook/react/pull/6896
11268
+ // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
11269
+ el = ownerDocument.createElement(this._currentElement.type);
11270
+ }
11271
+ } else {
11272
+ el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
11273
+ }
11274
+ ReactDOMComponentTree.precacheNode(this, el);
11275
+ this._flags |= Flags.hasCachedChildNodes;
11276
+ if (!this._hostParent) {
11277
+ DOMPropertyOperations.setAttributeForRoot(el);
11278
+ }
11279
+ this._updateDOMProperties(null, props, transaction);
11280
+ var lazyTree = DOMLazyTree(el);
11281
+ this._createInitialChildren(transaction, props, context, lazyTree);
11282
+ mountImage = lazyTree;
11283
+ } else {
11284
+ var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);
11285
+ var tagContent = this._createContentMarkup(transaction, props, context);
11286
+ if (!tagContent && omittedCloseTags[this._tag]) {
11287
+ mountImage = tagOpen + '/>';
11288
+ } else {
11289
+ mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';
11290
+ }
11291
+ }
11292
+
11293
+ switch (this._tag) {
11294
+ case 'input':
11295
+ transaction.getReactMountReady().enqueue(inputPostMount, this);
11296
+ if (props.autoFocus) {
11297
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
11298
+ }
11299
+ break;
11300
+ case 'textarea':
11301
+ transaction.getReactMountReady().enqueue(textareaPostMount, this);
11302
+ if (props.autoFocus) {
11303
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
11304
+ }
11305
+ break;
11306
+ case 'select':
11307
+ if (props.autoFocus) {
11308
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
11309
+ }
11310
+ break;
11311
+ case 'button':
11312
+ if (props.autoFocus) {
11313
+ transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
11314
+ }
11315
+ break;
11316
+ case 'option':
11317
+ transaction.getReactMountReady().enqueue(optionPostMount, this);
11318
+ break;
11319
+ }
11320
+
11321
+ return mountImage;
11322
+ },
11323
+
11324
+ /**
11325
+ * Creates markup for the open tag and all attributes.
11326
+ *
11327
+ * This method has side effects because events get registered.
11328
+ *
11329
+ * Iterating over object properties is faster than iterating over arrays.
11330
+ * @see http://jsperf.com/obj-vs-arr-iteration
11331
+ *
11332
+ * @private
11333
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
11334
+ * @param {object} props
11335
+ * @return {string} Markup of opening tag.
11336
+ */
11337
+ _createOpenTagMarkupAndPutListeners: function (transaction, props) {
11338
+ var ret = '<' + this._currentElement.type;
11339
+
11340
+ for (var propKey in props) {
11341
+ if (!props.hasOwnProperty(propKey)) {
11342
+ continue;
11343
+ }
11344
+ var propValue = props[propKey];
11345
+ if (propValue == null) {
11346
+ continue;
11347
+ }
11348
+ if (registrationNameModules.hasOwnProperty(propKey)) {
11349
+ if (propValue) {
11350
+ enqueuePutListener(this, propKey, propValue, transaction);
11351
+ }
11352
+ } else {
11353
+ if (propKey === STYLE) {
11354
+ if (propValue) {
11355
+ if (process.env.NODE_ENV !== 'production') {
11356
+ // See `_updateDOMProperties`. style block
11357
+ this._previousStyle = propValue;
11358
+ }
11359
+ propValue = this._previousStyleCopy = _assign({}, props.style);
11360
+ }
11361
+ propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);
11362
+ }
11363
+ var markup = null;
11364
+ if (this._tag != null && isCustomComponent(this._tag, props)) {
11365
+ if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
11366
+ markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
11367
+ }
11368
+ } else {
11369
+ markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
11370
+ }
11371
+ if (markup) {
11372
+ ret += ' ' + markup;
11373
+ }
11374
+ }
11375
+ }
11376
+
11377
+ // For static pages, no need to put React ID and checksum. Saves lots of
11378
+ // bytes.
11379
+ if (transaction.renderToStaticMarkup) {
11380
+ return ret;
11381
+ }
11382
+
11383
+ if (!this._hostParent) {
11384
+ ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
11385
+ }
11386
+ ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
11387
+ return ret;
11388
+ },
11389
+
11390
+ /**
11391
+ * Creates markup for the content between the tags.
11392
+ *
11393
+ * @private
11394
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
11395
+ * @param {object} props
11396
+ * @param {object} context
11397
+ * @return {string} Content markup.
11398
+ */
11399
+ _createContentMarkup: function (transaction, props, context) {
11400
+ var ret = '';
11401
+
11402
+ // Intentional use of != to avoid catching zero/false.
11403
+ var innerHTML = props.dangerouslySetInnerHTML;
11404
+ if (innerHTML != null) {
11405
+ if (innerHTML.__html != null) {
11406
+ ret = innerHTML.__html;
11407
+ }
11408
+ } else {
11409
+ var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
11410
+ var childrenToUse = contentToUse != null ? null : props.children;
11411
+ if (contentToUse != null) {
11412
+ // TODO: Validate that text is allowed as a child of this node
11413
+ ret = escapeTextContentForBrowser(contentToUse);
11414
+ if (process.env.NODE_ENV !== 'production') {
11415
+ setAndValidateContentChildDev.call(this, contentToUse);
11416
+ }
11417
+ } else if (childrenToUse != null) {
11418
+ var mountImages = this.mountChildren(childrenToUse, transaction, context);
11419
+ ret = mountImages.join('');
11420
+ }
11421
+ }
11422
+ if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') {
11423
+ // text/html ignores the first character in these tags if it's a newline
11424
+ // Prefer to break application/xml over text/html (for now) by adding
11425
+ // a newline specifically to get eaten by the parser. (Alternately for
11426
+ // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
11427
+ // \r is normalized out by HTMLTextAreaElement#value.)
11428
+ // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
11429
+ // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
11430
+ // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
11431
+ // See: Parsing of "textarea" "listing" and "pre" elements
11432
+ // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
11433
+ return '\n' + ret;
11434
+ } else {
11435
+ return ret;
11436
+ }
11437
+ },
11438
+
11439
+ _createInitialChildren: function (transaction, props, context, lazyTree) {
11440
+ // Intentional use of != to avoid catching zero/false.
11441
+ var innerHTML = props.dangerouslySetInnerHTML;
11442
+ if (innerHTML != null) {
11443
+ if (innerHTML.__html != null) {
11444
+ DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);
11445
+ }
11446
+ } else {
11447
+ var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
11448
+ var childrenToUse = contentToUse != null ? null : props.children;
11449
+ if (contentToUse != null) {
11450
+ // TODO: Validate that text is allowed as a child of this node
11451
+ if (process.env.NODE_ENV !== 'production') {
11452
+ setAndValidateContentChildDev.call(this, contentToUse);
11453
+ }
11454
+ DOMLazyTree.queueText(lazyTree, contentToUse);
11455
+ } else if (childrenToUse != null) {
11456
+ var mountImages = this.mountChildren(childrenToUse, transaction, context);
11457
+ for (var i = 0; i < mountImages.length; i++) {
11458
+ DOMLazyTree.queueChild(lazyTree, mountImages[i]);
11459
+ }
11460
+ }
11461
+ }
11462
+ },
11463
+
11464
+ /**
11465
+ * Receives a next element and updates the component.
11466
+ *
11467
+ * @internal
11468
+ * @param {ReactElement} nextElement
11469
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
11470
+ * @param {object} context
11471
+ */
11472
+ receiveComponent: function (nextElement, transaction, context) {
11473
+ var prevElement = this._currentElement;
11474
+ this._currentElement = nextElement;
11475
+ this.updateComponent(transaction, prevElement, nextElement, context);
11476
+ },
11477
+
11478
+ /**
11479
+ * Updates a DOM component after it has already been allocated and
11480
+ * attached to the DOM. Reconciles the root DOM node, then recurses.
11481
+ *
11482
+ * @param {ReactReconcileTransaction} transaction
11483
+ * @param {ReactElement} prevElement
11484
+ * @param {ReactElement} nextElement
11485
+ * @internal
11486
+ * @overridable
11487
+ */
11488
+ updateComponent: function (transaction, prevElement, nextElement, context) {
11489
+ var lastProps = prevElement.props;
11490
+ var nextProps = this._currentElement.props;
11491
+
11492
+ switch (this._tag) {
11493
+ case 'button':
11494
+ lastProps = ReactDOMButton.getHostProps(this, lastProps);
11495
+ nextProps = ReactDOMButton.getHostProps(this, nextProps);
11496
+ break;
11497
+ case 'input':
11498
+ lastProps = ReactDOMInput.getHostProps(this, lastProps);
11499
+ nextProps = ReactDOMInput.getHostProps(this, nextProps);
11500
+ break;
11501
+ case 'option':
11502
+ lastProps = ReactDOMOption.getHostProps(this, lastProps);
11503
+ nextProps = ReactDOMOption.getHostProps(this, nextProps);
11504
+ break;
11505
+ case 'select':
11506
+ lastProps = ReactDOMSelect.getHostProps(this, lastProps);
11507
+ nextProps = ReactDOMSelect.getHostProps(this, nextProps);
11508
+ break;
11509
+ case 'textarea':
11510
+ lastProps = ReactDOMTextarea.getHostProps(this, lastProps);
11511
+ nextProps = ReactDOMTextarea.getHostProps(this, nextProps);
11512
+ break;
11513
+ }
11514
+
11515
+ assertValidProps(this, nextProps);
11516
+ this._updateDOMProperties(lastProps, nextProps, transaction);
11517
+ this._updateDOMChildren(lastProps, nextProps, transaction, context);
11518
+
11519
+ switch (this._tag) {
11520
+ case 'input':
11521
+ // Update the wrapper around inputs *after* updating props. This has to
11522
+ // happen after `_updateDOMProperties`. Otherwise HTML5 input validations
11523
+ // raise warnings and prevent the new value from being assigned.
11524
+ ReactDOMInput.updateWrapper(this);
11525
+ break;
11526
+ case 'textarea':
11527
+ ReactDOMTextarea.updateWrapper(this);
11528
+ break;
11529
+ case 'select':
11530
+ // <select> value update needs to occur after <option> children
11531
+ // reconciliation
11532
+ transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);
11533
+ break;
11534
+ }
11535
+ },
11536
+
11537
+ /**
11538
+ * Reconciles the properties by detecting differences in property values and
11539
+ * updating the DOM as necessary. This function is probably the single most
11540
+ * critical path for performance optimization.
11541
+ *
11542
+ * TODO: Benchmark whether checking for changed values in memory actually
11543
+ * improves performance (especially statically positioned elements).
11544
+ * TODO: Benchmark the effects of putting this at the top since 99% of props
11545
+ * do not change for a given reconciliation.
11546
+ * TODO: Benchmark areas that can be improved with caching.
11547
+ *
11548
+ * @private
11549
+ * @param {object} lastProps
11550
+ * @param {object} nextProps
11551
+ * @param {?DOMElement} node
11552
+ */
11553
+ _updateDOMProperties: function (lastProps, nextProps, transaction) {
11554
+ var propKey;
11555
+ var styleName;
11556
+ var styleUpdates;
11557
+ for (propKey in lastProps) {
11558
+ if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
11559
+ continue;
11560
+ }
11561
+ if (propKey === STYLE) {
11562
+ var lastStyle = this._previousStyleCopy;
11563
+ for (styleName in lastStyle) {
11564
+ if (lastStyle.hasOwnProperty(styleName)) {
11565
+ styleUpdates = styleUpdates || {};
11566
+ styleUpdates[styleName] = '';
11567
+ }
11568
+ }
11569
+ this._previousStyleCopy = null;
11570
+ } else if (registrationNameModules.hasOwnProperty(propKey)) {
11571
+ if (lastProps[propKey]) {
11572
+ // Only call deleteListener if there was a listener previously or
11573
+ // else willDeleteListener gets called when there wasn't actually a
11574
+ // listener (e.g., onClick={null})
11575
+ deleteListener(this, propKey);
11576
+ }
11577
+ } else if (isCustomComponent(this._tag, lastProps)) {
11578
+ if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
11579
+ DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);
11580
+ }
11581
+ } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
11582
+ DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);
11583
+ }
11584
+ }
11585
+ for (propKey in nextProps) {
11586
+ var nextProp = nextProps[propKey];
11587
+ var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;
11588
+ if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
11589
+ continue;
11590
+ }
11591
+ if (propKey === STYLE) {
11592
+ if (nextProp) {
11593
+ if (process.env.NODE_ENV !== 'production') {
11594
+ checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);
11595
+ this._previousStyle = nextProp;
11596
+ }
11597
+ nextProp = this._previousStyleCopy = _assign({}, nextProp);
11598
+ } else {
11599
+ this._previousStyleCopy = null;
11600
+ }
11601
+ if (lastProp) {
11602
+ // Unset styles on `lastProp` but not on `nextProp`.
11603
+ for (styleName in lastProp) {
11604
+ if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
11605
+ styleUpdates = styleUpdates || {};
11606
+ styleUpdates[styleName] = '';
11607
+ }
11608
+ }
11609
+ // Update styles that changed since `lastProp`.
11610
+ for (styleName in nextProp) {
11611
+ if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
11612
+ styleUpdates = styleUpdates || {};
11613
+ styleUpdates[styleName] = nextProp[styleName];
11614
+ }
11615
+ }
11616
+ } else {
11617
+ // Relies on `updateStylesByID` not mutating `styleUpdates`.
11618
+ styleUpdates = nextProp;
11619
+ }
11620
+ } else if (registrationNameModules.hasOwnProperty(propKey)) {
11621
+ if (nextProp) {
11622
+ enqueuePutListener(this, propKey, nextProp, transaction);
11623
+ } else if (lastProp) {
11624
+ deleteListener(this, propKey);
11625
+ }
11626
+ } else if (isCustomComponent(this._tag, nextProps)) {
11627
+ if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
11628
+ DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);
11629
+ }
11630
+ } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
11631
+ var node = getNode(this);
11632
+ // If we're updating to null or undefined, we should remove the property
11633
+ // from the DOM node instead of inadvertently setting to a string. This
11634
+ // brings us in line with the same behavior we have on initial render.
11635
+ if (nextProp != null) {
11636
+ DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);
11637
+ } else {
11638
+ DOMPropertyOperations.deleteValueForProperty(node, propKey);
11639
+ }
11640
+ }
11641
+ }
11642
+ if (styleUpdates) {
11643
+ CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);
11644
+ }
11645
+ },
11646
+
11647
+ /**
11648
+ * Reconciles the children with the various properties that affect the
11649
+ * children content.
11650
+ *
11651
+ * @param {object} lastProps
11652
+ * @param {object} nextProps
11653
+ * @param {ReactReconcileTransaction} transaction
11654
+ * @param {object} context
11655
+ */
11656
+ _updateDOMChildren: function (lastProps, nextProps, transaction, context) {
11657
+ var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
11658
+ var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;
11659
+
11660
+ var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
11661
+ var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;
11662
+
11663
+ // Note the use of `!=` which checks for null or undefined.
11664
+ var lastChildren = lastContent != null ? null : lastProps.children;
11665
+ var nextChildren = nextContent != null ? null : nextProps.children;
11666
+
11667
+ // If we're switching from children to content/html or vice versa, remove
11668
+ // the old content
11669
+ var lastHasContentOrHtml = lastContent != null || lastHtml != null;
11670
+ var nextHasContentOrHtml = nextContent != null || nextHtml != null;
11671
+ if (lastChildren != null && nextChildren == null) {
11672
+ this.updateChildren(null, transaction, context);
11673
+ } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
11674
+ this.updateTextContent('');
11675
+ if (process.env.NODE_ENV !== 'production') {
11676
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
11677
+ }
11678
+ }
11679
+
11680
+ if (nextContent != null) {
11681
+ if (lastContent !== nextContent) {
11682
+ this.updateTextContent('' + nextContent);
11683
+ if (process.env.NODE_ENV !== 'production') {
11684
+ setAndValidateContentChildDev.call(this, nextContent);
11685
+ }
11686
+ }
11687
+ } else if (nextHtml != null) {
11688
+ if (lastHtml !== nextHtml) {
11689
+ this.updateMarkup('' + nextHtml);
11690
+ }
11691
+ if (process.env.NODE_ENV !== 'production') {
11692
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
11693
+ }
11694
+ } else if (nextChildren != null) {
11695
+ if (process.env.NODE_ENV !== 'production') {
11696
+ setAndValidateContentChildDev.call(this, null);
11697
+ }
11698
+
11699
+ this.updateChildren(nextChildren, transaction, context);
11700
+ }
11701
+ },
11702
+
11703
+ getHostNode: function () {
11704
+ return getNode(this);
11705
+ },
11706
+
11707
+ /**
11708
+ * Destroys all event registrations for this instance. Does not remove from
11709
+ * the DOM. That must be done by the parent.
11710
+ *
11711
+ * @internal
11712
+ */
11713
+ unmountComponent: function (safely) {
11714
+ switch (this._tag) {
11715
+ case 'audio':
11716
+ case 'form':
11717
+ case 'iframe':
11718
+ case 'img':
11719
+ case 'link':
11720
+ case 'object':
11721
+ case 'source':
11722
+ case 'video':
11723
+ var listeners = this._wrapperState.listeners;
11724
+ if (listeners) {
11725
+ for (var i = 0; i < listeners.length; i++) {
11726
+ listeners[i].remove();
11727
+ }
11728
+ }
11729
+ break;
11730
+ case 'html':
11731
+ case 'head':
11732
+ case 'body':
11733
+ /**
11734
+ * Components like <html> <head> and <body> can't be removed or added
11735
+ * easily in a cross-browser way, however it's valuable to be able to
11736
+ * take advantage of React's reconciliation for styling and <title>
11737
+ * management. So we just document it and throw in dangerous cases.
11738
+ */
11739
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;
11740
+ break;
11741
+ }
11742
+
11743
+ this.unmountChildren(safely);
11744
+ ReactDOMComponentTree.uncacheNode(this);
11745
+ EventPluginHub.deleteAllListeners(this);
11746
+ this._rootNodeID = 0;
11747
+ this._domID = 0;
11748
+ this._wrapperState = null;
11749
+
11750
+ if (process.env.NODE_ENV !== 'production') {
11751
+ setAndValidateContentChildDev.call(this, null);
11752
+ }
11753
+ },
11754
+
11755
+ getPublicInstance: function () {
11756
+ return getNode(this);
11757
+ }
11758
+
11759
+ };
11760
+
11761
+ _assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
11762
+
11763
+ module.exports = ReactDOMComponent;
11764
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
11765
+
11766
+ /***/ },
11767
+ /* 96 */
11768
+ /***/ function(module, exports, __webpack_require__) {
11769
+
11770
+ /**
11771
+ * Copyright 2013-present, Facebook, Inc.
11772
+ * All rights reserved.
11773
+ *
11774
+ * This source code is licensed under the BSD-style license found in the
11775
+ * LICENSE file in the root directory of this source tree. An additional grant
11776
+ * of patent rights can be found in the PATENTS file in the same directory.
11777
+ *
11778
+ * @providesModule AutoFocusUtils
11779
+ */
11780
+
11781
+ 'use strict';
11782
+
11783
+ var ReactDOMComponentTree = __webpack_require__(37);
11784
+
11785
+ var focusNode = __webpack_require__(97);
11786
+
11787
+ var AutoFocusUtils = {
11788
+ focusDOMComponent: function () {
11789
+ focusNode(ReactDOMComponentTree.getNodeFromInstance(this));
11790
+ }
11791
+ };
11792
+
11793
+ module.exports = AutoFocusUtils;
11794
+
11795
+ /***/ },
11796
+ /* 97 */
11797
+ /***/ function(module, exports) {
11798
+
11799
+ /**
11800
+ * Copyright (c) 2013-present, Facebook, Inc.
11801
+ * All rights reserved.
11802
+ *
11803
+ * This source code is licensed under the BSD-style license found in the
11804
+ * LICENSE file in the root directory of this source tree. An additional grant
11805
+ * of patent rights can be found in the PATENTS file in the same directory.
11806
+ *
11807
+ */
11808
+
11809
+ 'use strict';
11810
+
11811
+ /**
11812
+ * @param {DOMElement} node input/textarea to focus
11813
+ */
11814
+
11815
+ function focusNode(node) {
11816
+ // IE8 can throw "Can't move focus to the control because it is invisible,
11817
+ // not enabled, or of a type that does not accept the focus." for all kinds of
11818
+ // reasons that are too expensive and fragile to test.
11819
+ try {
11820
+ node.focus();
11821
+ } catch (e) {}
11822
+ }
11823
+
11824
+ module.exports = focusNode;
11825
+
11826
+ /***/ },
11827
+ /* 98 */
11828
+ /***/ function(module, exports, __webpack_require__) {
11829
+
11830
+ /* WEBPACK VAR INJECTION */(function(process) {/**
11831
+ * Copyright 2013-present, Facebook, Inc.
11832
+ * All rights reserved.
11833
+ *
11834
+ * This source code is licensed under the BSD-style license found in the
11835
+ * LICENSE file in the root directory of this source tree. An additional grant
11836
+ * of patent rights can be found in the PATENTS file in the same directory.
11837
+ *
11838
+ * @providesModule CSSPropertyOperations
11839
+ */
11840
+
11841
+ 'use strict';
11842
+
11843
+ var CSSProperty = __webpack_require__(99);
11844
+ var ExecutionEnvironment = __webpack_require__(50);
11845
+ var ReactInstrumentation = __webpack_require__(63);
11846
+
11847
+ var camelizeStyleName = __webpack_require__(100);
11848
+ var dangerousStyleValue = __webpack_require__(102);
11849
+ var hyphenateStyleName = __webpack_require__(103);
11850
+ var memoizeStringOnly = __webpack_require__(105);
11851
+ var warning = __webpack_require__(12);
11852
+
11853
+ var processStyleName = memoizeStringOnly(function (styleName) {
11854
+ return hyphenateStyleName(styleName);
11855
+ });
11856
+
11857
+ var hasShorthandPropertyBug = false;
11858
+ var styleFloatAccessor = 'cssFloat';
11859
+ if (ExecutionEnvironment.canUseDOM) {
11860
+ var tempStyle = document.createElement('div').style;
11861
+ try {
11862
+ // IE8 throws "Invalid argument." if resetting shorthand style properties.
11863
+ tempStyle.font = '';
11864
+ } catch (e) {
11865
+ hasShorthandPropertyBug = true;
11866
+ }
11867
+ // IE8 only supports accessing cssFloat (standard) as styleFloat
11868
+ if (document.documentElement.style.cssFloat === undefined) {
11869
+ styleFloatAccessor = 'styleFloat';
11870
+ }
11871
+ }
11872
+
11873
+ if (process.env.NODE_ENV !== 'production') {
11874
+ // 'msTransform' is correct, but the other prefixes should be capitalized
11875
+ var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
11876
+
11877
+ // style values shouldn't contain a semicolon
11878
+ var badStyleValueWithSemicolonPattern = /;\s*$/;
11879
+
11880
+ var warnedStyleNames = {};
11881
+ var warnedStyleValues = {};
11882
+ var warnedForNaNValue = false;
11883
+
11884
+ var warnHyphenatedStyleName = function (name, owner) {
11885
+ if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
11886
+ return;
11887
+ }
11888
+
11889
+ warnedStyleNames[name] = true;
11890
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;
11891
+ };
11892
+
11893
+ var warnBadVendoredStyleName = function (name, owner) {
11894
+ if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
11895
+ return;
11896
+ }
11897
+
11898
+ warnedStyleNames[name] = true;
11899
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;
11900
+ };
11901
+
11902
+ var warnStyleValueWithSemicolon = function (name, value, owner) {
11903
+ if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
11904
+ return;
11905
+ }
11906
+
11907
+ warnedStyleValues[value] = true;
11908
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon.%s ' + 'Try "%s: %s" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;
11909
+ };
11910
+
11911
+ var warnStyleValueIsNaN = function (name, value, owner) {
11912
+ if (warnedForNaNValue) {
11913
+ return;
11914
+ }
11915
+
11916
+ warnedForNaNValue = true;
11917
+ process.env.NODE_ENV !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;
11918
+ };
11919
+
11920
+ var checkRenderMessage = function (owner) {
11921
+ if (owner) {
11922
+ var name = owner.getName();
11923
+ if (name) {
11924
+ return ' Check the render method of `' + name + '`.';
11925
+ }
11926
+ }
11927
+ return '';
11928
+ };
11929
+
11930
+ /**
11931
+ * @param {string} name
11932
+ * @param {*} value
11933
+ * @param {ReactDOMComponent} component
11934
+ */
11935
+ var warnValidStyle = function (name, value, component) {
11936
+ var owner;
11937
+ if (component) {
11938
+ owner = component._currentElement._owner;
11939
+ }
11940
+ if (name.indexOf('-') > -1) {
11941
+ warnHyphenatedStyleName(name, owner);
11942
+ } else if (badVendoredStyleNamePattern.test(name)) {
11943
+ warnBadVendoredStyleName(name, owner);
11944
+ } else if (badStyleValueWithSemicolonPattern.test(value)) {
11945
+ warnStyleValueWithSemicolon(name, value, owner);
11946
+ }
11947
+
11948
+ if (typeof value === 'number' && isNaN(value)) {
11949
+ warnStyleValueIsNaN(name, value, owner);
11950
+ }
11951
+ };
11952
+ }
11953
+
11954
+ /**
11955
+ * Operations for dealing with CSS properties.
11956
+ */
11957
+ var CSSPropertyOperations = {
11958
+
11959
+ /**
11960
+ * Serializes a mapping of style properties for use as inline styles:
11961
+ *
11962
+ * > createMarkupForStyles({width: '200px', height: 0})
11963
+ * "width:200px;height:0;"
11964
+ *
11965
+ * Undefined values are ignored so that declarative programming is easier.
11966
+ * The result should be HTML-escaped before insertion into the DOM.
11967
+ *
11968
+ * @param {object} styles
11969
+ * @param {ReactDOMComponent} component
11970
+ * @return {?string}
11971
+ */
11972
+ createMarkupForStyles: function (styles, component) {
11973
+ var serialized = '';
11974
+ for (var styleName in styles) {
11975
+ if (!styles.hasOwnProperty(styleName)) {
11976
+ continue;
11977
+ }
11978
+ var styleValue = styles[styleName];
11979
+ if (process.env.NODE_ENV !== 'production') {
11980
+ warnValidStyle(styleName, styleValue, component);
11981
+ }
11982
+ if (styleValue != null) {
11983
+ serialized += processStyleName(styleName) + ':';
11984
+ serialized += dangerousStyleValue(styleName, styleValue, component) + ';';
11985
+ }
11986
+ }
11987
+ return serialized || null;
11988
+ },
11989
+
11990
+ /**
11991
+ * Sets the value for multiple styles on a node. If a value is specified as
11992
+ * '' (empty string), the corresponding style property will be unset.
11993
+ *
11994
+ * @param {DOMElement} node
11995
+ * @param {object} styles
11996
+ * @param {ReactDOMComponent} component
11997
+ */
11998
+ setValueForStyles: function (node, styles, component) {
11999
+ if (process.env.NODE_ENV !== 'production') {
12000
+ ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);
12001
+ }
12002
+
12003
+ var style = node.style;
12004
+ for (var styleName in styles) {
12005
+ if (!styles.hasOwnProperty(styleName)) {
12006
+ continue;
12007
+ }
12008
+ if (process.env.NODE_ENV !== 'production') {
12009
+ warnValidStyle(styleName, styles[styleName], component);
12010
+ }
12011
+ var styleValue = dangerousStyleValue(styleName, styles[styleName], component);
12012
+ if (styleName === 'float' || styleName === 'cssFloat') {
12013
+ styleName = styleFloatAccessor;
12014
+ }
12015
+ if (styleValue) {
12016
+ style[styleName] = styleValue;
12017
+ } else {
12018
+ var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];
12019
+ if (expansion) {
12020
+ // Shorthand property that IE8 won't like unsetting, so unset each
12021
+ // component to placate it
12022
+ for (var individualStyleName in expansion) {
12023
+ style[individualStyleName] = '';
12024
+ }
12025
+ } else {
12026
+ style[styleName] = '';
12027
+ }
12028
+ }
12029
+ }
12030
+ }
12031
+
12032
+ };
12033
+
12034
+ module.exports = CSSPropertyOperations;
12035
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
12036
+
12037
+ /***/ },
12038
+ /* 99 */
12039
+ /***/ function(module, exports) {
12040
+
12041
+ /**
12042
+ * Copyright 2013-present, Facebook, Inc.
12043
+ * All rights reserved.
12044
+ *
12045
+ * This source code is licensed under the BSD-style license found in the
12046
+ * LICENSE file in the root directory of this source tree. An additional grant
12047
+ * of patent rights can be found in the PATENTS file in the same directory.
12048
+ *
12049
+ * @providesModule CSSProperty
12050
+ */
12051
+
12052
+ 'use strict';
12053
+
12054
+ /**
12055
+ * CSS properties which accept numbers but are not in units of "px".
12056
+ */
12057
+
12058
+ var isUnitlessNumber = {
12059
+ animationIterationCount: true,
12060
+ borderImageOutset: true,
12061
+ borderImageSlice: true,
12062
+ borderImageWidth: true,
12063
+ boxFlex: true,
12064
+ boxFlexGroup: true,
12065
+ boxOrdinalGroup: true,
12066
+ columnCount: true,
12067
+ flex: true,
12068
+ flexGrow: true,
12069
+ flexPositive: true,
12070
+ flexShrink: true,
12071
+ flexNegative: true,
12072
+ flexOrder: true,
12073
+ gridRow: true,
12074
+ gridColumn: true,
12075
+ fontWeight: true,
12076
+ lineClamp: true,
12077
+ lineHeight: true,
12078
+ opacity: true,
12079
+ order: true,
12080
+ orphans: true,
12081
+ tabSize: true,
12082
+ widows: true,
12083
+ zIndex: true,
12084
+ zoom: true,
12085
+
12086
+ // SVG-related properties
12087
+ fillOpacity: true,
12088
+ floodOpacity: true,
12089
+ stopOpacity: true,
12090
+ strokeDasharray: true,
12091
+ strokeDashoffset: true,
12092
+ strokeMiterlimit: true,
12093
+ strokeOpacity: true,
12094
+ strokeWidth: true
12095
+ };
12096
+
12097
+ /**
12098
+ * @param {string} prefix vendor-specific prefix, eg: Webkit
12099
+ * @param {string} key style name, eg: transitionDuration
12100
+ * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
12101
+ * WebkitTransitionDuration
12102
+ */
12103
+ function prefixKey(prefix, key) {
12104
+ return prefix + key.charAt(0).toUpperCase() + key.substring(1);
12105
+ }
12106
+
12107
+ /**
12108
+ * Support style names that may come passed in prefixed by adding permutations
12109
+ * of vendor prefixes.
12110
+ */
12111
+ var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
12112
+
12113
+ // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
12114
+ // infinite loop, because it iterates over the newly added props too.
12115
+ Object.keys(isUnitlessNumber).forEach(function (prop) {
12116
+ prefixes.forEach(function (prefix) {
12117
+ isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
12118
+ });
12119
+ });
12120
+
12121
+ /**
12122
+ * Most style properties can be unset by doing .style[prop] = '' but IE8
12123
+ * doesn't like doing that with shorthand properties so for the properties that
12124
+ * IE8 breaks on, which are listed here, we instead unset each of the
12125
+ * individual properties. See http://bugs.jquery.com/ticket/12385.
12126
+ * The 4-value 'clock' properties like margin, padding, border-width seem to
12127
+ * behave without any problems. Curiously, list-style works too without any
12128
+ * special prodding.
12129
+ */
12130
+ var shorthandPropertyExpansions = {
12131
+ background: {
12132
+ backgroundAttachment: true,
12133
+ backgroundColor: true,
12134
+ backgroundImage: true,
12135
+ backgroundPositionX: true,
12136
+ backgroundPositionY: true,
12137
+ backgroundRepeat: true
12138
+ },
12139
+ backgroundPosition: {
12140
+ backgroundPositionX: true,
12141
+ backgroundPositionY: true
12142
+ },
12143
+ border: {
12144
+ borderWidth: true,
12145
+ borderStyle: true,
12146
+ borderColor: true
12147
+ },
12148
+ borderBottom: {
12149
+ borderBottomWidth: true,
12150
+ borderBottomStyle: true,
12151
+ borderBottomColor: true
12152
+ },
12153
+ borderLeft: {
12154
+ borderLeftWidth: true,
12155
+ borderLeftStyle: true,
12156
+ borderLeftColor: true
12157
+ },
12158
+ borderRight: {
12159
+ borderRightWidth: true,
12160
+ borderRightStyle: true,
12161
+ borderRightColor: true
12162
+ },
12163
+ borderTop: {
12164
+ borderTopWidth: true,
12165
+ borderTopStyle: true,
12166
+ borderTopColor: true
12167
+ },
12168
+ font: {
12169
+ fontStyle: true,
12170
+ fontVariant: true,
12171
+ fontWeight: true,
12172
+ fontSize: true,
12173
+ lineHeight: true,
12174
+ fontFamily: true
12175
+ },
12176
+ outline: {
12177
+ outlineWidth: true,
12178
+ outlineStyle: true,
12179
+ outlineColor: true
12180
+ }
12181
+ };
12182
+
12183
+ var CSSProperty = {
12184
+ isUnitlessNumber: isUnitlessNumber,
12185
+ shorthandPropertyExpansions: shorthandPropertyExpansions
12186
+ };
12187
+
12188
+ module.exports = CSSProperty;
12189
+
12190
+ /***/ },
12191
+ /* 100 */
12192
+ /***/ function(module, exports, __webpack_require__) {
12193
+
12194
+ /**
12195
+ * Copyright (c) 2013-present, Facebook, Inc.
12196
+ * All rights reserved.
12197
+ *
12198
+ * This source code is licensed under the BSD-style license found in the
12199
+ * LICENSE file in the root directory of this source tree. An additional grant
12200
+ * of patent rights can be found in the PATENTS file in the same directory.
12201
+ *
12202
+ * @typechecks
12203
+ */
12204
+
12205
+ 'use strict';
12206
+
12207
+ var camelize = __webpack_require__(101);
12208
+
12209
+ var msPattern = /^-ms-/;
12210
+
12211
+ /**
12212
+ * Camelcases a hyphenated CSS property name, for example:
12213
+ *
12214
+ * > camelizeStyleName('background-color')
12215
+ * < "backgroundColor"
12216
+ * > camelizeStyleName('-moz-transition')
12217
+ * < "MozTransition"
12218
+ * > camelizeStyleName('-ms-transition')
12219
+ * < "msTransition"
12220
+ *
12221
+ * As Andi Smith suggests
12222
+ * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
12223
+ * is converted to lowercase `ms`.
12224
+ *
12225
+ * @param {string} string
12226
+ * @return {string}
12227
+ */
12228
+ function camelizeStyleName(string) {
12229
+ return camelize(string.replace(msPattern, 'ms-'));
12230
+ }
12231
+
12232
+ module.exports = camelizeStyleName;
12233
+
12234
+ /***/ },
12235
+ /* 101 */
12236
+ /***/ function(module, exports) {
12237
+
12238
+ "use strict";
12239
+
12240
+ /**
12241
+ * Copyright (c) 2013-present, Facebook, Inc.
12242
+ * All rights reserved.
12243
+ *
12244
+ * This source code is licensed under the BSD-style license found in the
12245
+ * LICENSE file in the root directory of this source tree. An additional grant
12246
+ * of patent rights can be found in the PATENTS file in the same directory.
12247
+ *
12248
+ * @typechecks
12249
+ */
12250
+
12251
+ var _hyphenPattern = /-(.)/g;
12252
+
12253
+ /**
12254
+ * Camelcases a hyphenated string, for example:
12255
+ *
12256
+ * > camelize('background-color')
12257
+ * < "backgroundColor"
12258
+ *
12259
+ * @param {string} string
12260
+ * @return {string}
12261
+ */
12262
+ function camelize(string) {
12263
+ return string.replace(_hyphenPattern, function (_, character) {
12264
+ return character.toUpperCase();
12265
+ });
12266
+ }
12267
+
12268
+ module.exports = camelize;
12269
+
12270
+ /***/ },
12271
+ /* 102 */
12272
+ /***/ function(module, exports, __webpack_require__) {
12273
+
12274
+ /* WEBPACK VAR INJECTION */(function(process) {/**
12275
+ * Copyright 2013-present, Facebook, Inc.
12276
+ * All rights reserved.
12277
+ *
12278
+ * This source code is licensed under the BSD-style license found in the
12279
+ * LICENSE file in the root directory of this source tree. An additional grant
12280
+ * of patent rights can be found in the PATENTS file in the same directory.
12281
+ *
12282
+ * @providesModule dangerousStyleValue
12283
+ */
12284
+
12285
+ 'use strict';
12286
+
12287
+ var CSSProperty = __webpack_require__(99);
12288
+ var warning = __webpack_require__(12);
12289
+
12290
+ var isUnitlessNumber = CSSProperty.isUnitlessNumber;
12291
+ var styleWarnings = {};
12292
+
12293
+ /**
12294
+ * Convert a value into the proper css writable value. The style name `name`
12295
+ * should be logical (no hyphens), as specified
12296
+ * in `CSSProperty.isUnitlessNumber`.
12297
+ *
12298
+ * @param {string} name CSS property name such as `topMargin`.
12299
+ * @param {*} value CSS property value such as `10px`.
12300
+ * @param {ReactDOMComponent} component
12301
+ * @return {string} Normalized style value with dimensions applied.
12302
+ */
12303
+ function dangerousStyleValue(name, value, component) {
12304
+ // Note that we've removed escapeTextForBrowser() calls here since the
12305
+ // whole string will be escaped when the attribute is injected into
12306
+ // the markup. If you provide unsafe user data here they can inject
12307
+ // arbitrary CSS which may be problematic (I couldn't repro this):
12308
+ // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
12309
+ // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
12310
+ // This is not an XSS hole but instead a potential CSS injection issue
12311
+ // which has lead to a greater discussion about how we're going to
12312
+ // trust URLs moving forward. See #2115901
12313
+
12314
+ var isEmpty = value == null || typeof value === 'boolean' || value === '';
12315
+ if (isEmpty) {
12316
+ return '';
12317
+ }
12318
+
12319
+ var isNonNumeric = isNaN(value);
12320
+ if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
12321
+ return '' + value; // cast to string
12322
+ }
12323
+
12324
+ if (typeof value === 'string') {
12325
+ if (process.env.NODE_ENV !== 'production') {
12326
+ // Allow '0' to pass through without warning. 0 is already special and
12327
+ // doesn't require units, so we don't need to warn about it.
12328
+ if (component && value !== '0') {
12329
+ var owner = component._currentElement._owner;
12330
+ var ownerName = owner ? owner.getName() : null;
12331
+ if (ownerName && !styleWarnings[ownerName]) {
12332
+ styleWarnings[ownerName] = {};
12333
+ }
12334
+ var warned = false;
12335
+ if (ownerName) {
12336
+ var warnings = styleWarnings[ownerName];
12337
+ warned = warnings[name];
12338
+ if (!warned) {
12339
+ warnings[name] = true;
12340
+ }
12341
+ }
12342
+ if (!warned) {
12343
+ process.env.NODE_ENV !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;
12344
+ }
12345
+ }
12346
+ }
12347
+ value = value.trim();
12348
+ }
12349
+ return value + 'px';
12350
+ }
12351
+
12352
+ module.exports = dangerousStyleValue;
12353
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
12354
+
12355
+ /***/ },
12356
+ /* 103 */
12357
+ /***/ function(module, exports, __webpack_require__) {
12358
+
12359
+ /**
12360
+ * Copyright (c) 2013-present, Facebook, Inc.
12361
+ * All rights reserved.
12362
+ *
12363
+ * This source code is licensed under the BSD-style license found in the
12364
+ * LICENSE file in the root directory of this source tree. An additional grant
12365
+ * of patent rights can be found in the PATENTS file in the same directory.
12366
+ *
12367
+ * @typechecks
12368
+ */
12369
+
12370
+ 'use strict';
12371
+
12372
+ var hyphenate = __webpack_require__(104);
12373
+
12374
+ var msPattern = /^ms-/;
12375
+
12376
+ /**
12377
+ * Hyphenates a camelcased CSS property name, for example:
12378
+ *
12379
+ * > hyphenateStyleName('backgroundColor')
12380
+ * < "background-color"
12381
+ * > hyphenateStyleName('MozTransition')
12382
+ * < "-moz-transition"
12383
+ * > hyphenateStyleName('msTransition')
12384
+ * < "-ms-transition"
12385
+ *
12386
+ * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
12387
+ * is converted to `-ms-`.
12388
+ *
12389
+ * @param {string} string
12390
+ * @return {string}
12391
+ */
12392
+ function hyphenateStyleName(string) {
12393
+ return hyphenate(string).replace(msPattern, '-ms-');
12394
+ }
12395
+
12396
+ module.exports = hyphenateStyleName;
12397
+
12398
+ /***/ },
12399
+ /* 104 */
12400
+ /***/ function(module, exports) {
12401
+
12402
+ 'use strict';
12403
+
12404
+ /**
12405
+ * Copyright (c) 2013-present, Facebook, Inc.
12406
+ * All rights reserved.
12407
+ *
12408
+ * This source code is licensed under the BSD-style license found in the
12409
+ * LICENSE file in the root directory of this source tree. An additional grant
12410
+ * of patent rights can be found in the PATENTS file in the same directory.
12411
+ *
12412
+ * @typechecks
12413
+ */
12414
+
12415
+ var _uppercasePattern = /([A-Z])/g;
12416
+
12417
+ /**
12418
+ * Hyphenates a camelcased string, for example:
12419
+ *
12420
+ * > hyphenate('backgroundColor')
12421
+ * < "background-color"
12422
+ *
12423
+ * For CSS style names, use `hyphenateStyleName` instead which works properly
12424
+ * with all vendor prefixes, including `ms`.
12425
+ *
12426
+ * @param {string} string
12427
+ * @return {string}
12428
+ */
12429
+ function hyphenate(string) {
12430
+ return string.replace(_uppercasePattern, '-$1').toLowerCase();
12431
+ }
12432
+
12433
+ module.exports = hyphenate;
12434
+
12435
+ /***/ },
12436
+ /* 105 */
12437
+ /***/ function(module, exports) {
12438
+
12439
+ /**
12440
+ * Copyright (c) 2013-present, Facebook, Inc.
12441
+ * All rights reserved.
12442
+ *
12443
+ * This source code is licensed under the BSD-style license found in the
12444
+ * LICENSE file in the root directory of this source tree. An additional grant
12445
+ * of patent rights can be found in the PATENTS file in the same directory.
12446
+ *
12447
+ *
12448
+ * @typechecks static-only
12449
+ */
12450
+
12451
+ 'use strict';
12452
+
12453
+ /**
12454
+ * Memoizes the return value of a function that accepts one string argument.
12455
+ */
12456
+
12457
+ function memoizeStringOnly(callback) {
12458
+ var cache = {};
12459
+ return function (string) {
12460
+ if (!cache.hasOwnProperty(string)) {
12461
+ cache[string] = callback.call(this, string);
12462
+ }
12463
+ return cache[string];
12464
+ };
12465
+ }
12466
+
12467
+ module.exports = memoizeStringOnly;
12468
+
12469
+ /***/ },
12470
+ /* 106 */
12471
+ /***/ function(module, exports, __webpack_require__) {
12472
+
12473
+ /* WEBPACK VAR INJECTION */(function(process) {/**
12474
+ * Copyright 2013-present, Facebook, Inc.
12475
+ * All rights reserved.
12476
+ *
12477
+ * This source code is licensed under the BSD-style license found in the
12478
+ * LICENSE file in the root directory of this source tree. An additional grant
12479
+ * of patent rights can be found in the PATENTS file in the same directory.
12480
+ *
12481
+ * @providesModule DOMPropertyOperations
12482
+ */
12483
+
12484
+ 'use strict';
12485
+
12486
+ var DOMProperty = __webpack_require__(38);
12487
+ var ReactDOMComponentTree = __webpack_require__(37);
12488
+ var ReactInstrumentation = __webpack_require__(63);
12489
+
12490
+ var quoteAttributeValueForBrowser = __webpack_require__(107);
12491
+ var warning = __webpack_require__(12);
12492
+
12493
+ var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
12494
+ var illegalAttributeNameCache = {};
12495
+ var validatedAttributeNameCache = {};
12496
+
12497
+ function isAttributeNameSafe(attributeName) {
12498
+ if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {
12499
+ return true;
12500
+ }
12501
+ if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {
12502
+ return false;
12503
+ }
12504
+ if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
12505
+ validatedAttributeNameCache[attributeName] = true;
12506
+ return true;
12507
+ }
12508
+ illegalAttributeNameCache[attributeName] = true;
12509
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;
12510
+ return false;
12511
+ }
12512
+
12513
+ function shouldIgnoreValue(propertyInfo, value) {
12514
+ return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;
12515
+ }
12516
+
12517
+ /**
12518
+ * Operations for dealing with DOM properties.
12519
+ */
12520
+ var DOMPropertyOperations = {
12521
+
12522
+ /**
12523
+ * Creates markup for the ID property.
12524
+ *
12525
+ * @param {string} id Unescaped ID.
12526
+ * @return {string} Markup string.
12527
+ */
12528
+ createMarkupForID: function (id) {
12529
+ return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
12530
+ },
12531
+
12532
+ setAttributeForID: function (node, id) {
12533
+ node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);
12534
+ },
12535
+
12536
+ createMarkupForRoot: function () {
12537
+ return DOMProperty.ROOT_ATTRIBUTE_NAME + '=""';
12538
+ },
12539
+
12540
+ setAttributeForRoot: function (node) {
12541
+ node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');
12542
+ },
12543
+
12544
+ /**
12545
+ * Creates markup for a property.
12546
+ *
12547
+ * @param {string} name
12548
+ * @param {*} value
12549
+ * @return {?string} Markup string, or null if the property was invalid.
12550
+ */
12551
+ createMarkupForProperty: function (name, value) {
12552
+ var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
12553
+ if (propertyInfo) {
12554
+ if (shouldIgnoreValue(propertyInfo, value)) {
12555
+ return '';
12556
+ }
12557
+ var attributeName = propertyInfo.attributeName;
12558
+ if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
12559
+ return attributeName + '=""';
12560
+ }
12561
+ return attributeName + '=' + quoteAttributeValueForBrowser(value);
12562
+ } else if (DOMProperty.isCustomAttribute(name)) {
12563
+ if (value == null) {
12564
+ return '';
12565
+ }
12566
+ return name + '=' + quoteAttributeValueForBrowser(value);
12567
+ }
12568
+ return null;
12569
+ },
12570
+
12571
+ /**
12572
+ * Creates markup for a custom property.
12573
+ *
12574
+ * @param {string} name
12575
+ * @param {*} value
12576
+ * @return {string} Markup string, or empty string if the property was invalid.
12577
+ */
12578
+ createMarkupForCustomAttribute: function (name, value) {
12579
+ if (!isAttributeNameSafe(name) || value == null) {
12580
+ return '';
12581
+ }
12582
+ return name + '=' + quoteAttributeValueForBrowser(value);
12583
+ },
12584
+
12585
+ /**
12586
+ * Sets the value for a property on a node.
12587
+ *
12588
+ * @param {DOMElement} node
12589
+ * @param {string} name
12590
+ * @param {*} value
12591
+ */
12592
+ setValueForProperty: function (node, name, value) {
12593
+ var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
12594
+ if (propertyInfo) {
12595
+ var mutationMethod = propertyInfo.mutationMethod;
12596
+ if (mutationMethod) {
12597
+ mutationMethod(node, value);
12598
+ } else if (shouldIgnoreValue(propertyInfo, value)) {
12599
+ this.deleteValueForProperty(node, name);
12600
+ return;
12601
+ } else if (propertyInfo.mustUseProperty) {
12602
+ // Contrary to `setAttribute`, object properties are properly
12603
+ // `toString`ed by IE8/9.
12604
+ node[propertyInfo.propertyName] = value;
12605
+ } else {
12606
+ var attributeName = propertyInfo.attributeName;
12607
+ var namespace = propertyInfo.attributeNamespace;
12608
+ // `setAttribute` with objects becomes only `[object]` in IE8/9,
12609
+ // ('' + value) makes it output the correct toString()-value.
12610
+ if (namespace) {
12611
+ node.setAttributeNS(namespace, attributeName, '' + value);
12612
+ } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
12613
+ node.setAttribute(attributeName, '');
12614
+ } else {
12615
+ node.setAttribute(attributeName, '' + value);
12616
+ }
12617
+ }
12618
+ } else if (DOMProperty.isCustomAttribute(name)) {
12619
+ DOMPropertyOperations.setValueForAttribute(node, name, value);
12620
+ return;
12621
+ }
12622
+
12623
+ if (process.env.NODE_ENV !== 'production') {
12624
+ var payload = {};
12625
+ payload[name] = value;
12626
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
12627
+ }
12628
+ },
12629
+
12630
+ setValueForAttribute: function (node, name, value) {
12631
+ if (!isAttributeNameSafe(name)) {
12632
+ return;
12633
+ }
12634
+ if (value == null) {
12635
+ node.removeAttribute(name);
12636
+ } else {
12637
+ node.setAttribute(name, '' + value);
12638
+ }
12639
+
12640
+ if (process.env.NODE_ENV !== 'production') {
12641
+ var payload = {};
12642
+ payload[name] = value;
12643
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
12644
+ }
12645
+ },
12646
+
12647
+ /**
12648
+ * Deletes an attributes from a node.
12649
+ *
12650
+ * @param {DOMElement} node
12651
+ * @param {string} name
12652
+ */
12653
+ deleteValueForAttribute: function (node, name) {
12654
+ node.removeAttribute(name);
12655
+ if (process.env.NODE_ENV !== 'production') {
12656
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
12657
+ }
12658
+ },
12659
+
12660
+ /**
12661
+ * Deletes the value for a property on a node.
12662
+ *
12663
+ * @param {DOMElement} node
12664
+ * @param {string} name
12665
+ */
12666
+ deleteValueForProperty: function (node, name) {
12667
+ var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
12668
+ if (propertyInfo) {
12669
+ var mutationMethod = propertyInfo.mutationMethod;
12670
+ if (mutationMethod) {
12671
+ mutationMethod(node, undefined);
12672
+ } else if (propertyInfo.mustUseProperty) {
12673
+ var propName = propertyInfo.propertyName;
12674
+ if (propertyInfo.hasBooleanValue) {
12675
+ node[propName] = false;
12676
+ } else {
12677
+ node[propName] = '';
12678
+ }
12679
+ } else {
12680
+ node.removeAttribute(propertyInfo.attributeName);
12681
+ }
12682
+ } else if (DOMProperty.isCustomAttribute(name)) {
12683
+ node.removeAttribute(name);
12684
+ }
12685
+
12686
+ if (process.env.NODE_ENV !== 'production') {
12687
+ ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
12688
+ }
12689
+ }
12690
+
12691
+ };
12692
+
12693
+ module.exports = DOMPropertyOperations;
12694
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
12695
+
12696
+ /***/ },
12697
+ /* 107 */
12698
+ /***/ function(module, exports, __webpack_require__) {
12699
+
12700
+ /**
12701
+ * Copyright 2013-present, Facebook, Inc.
12702
+ * All rights reserved.
12703
+ *
12704
+ * This source code is licensed under the BSD-style license found in the
12705
+ * LICENSE file in the root directory of this source tree. An additional grant
12706
+ * of patent rights can be found in the PATENTS file in the same directory.
12707
+ *
12708
+ * @providesModule quoteAttributeValueForBrowser
12709
+ */
12710
+
12711
+ 'use strict';
12712
+
12713
+ var escapeTextContentForBrowser = __webpack_require__(88);
12714
+
12715
+ /**
12716
+ * Escapes attribute value to prevent scripting attacks.
12717
+ *
12718
+ * @param {*} value Value to escape.
12719
+ * @return {string} An escaped string.
12720
+ */
12721
+ function quoteAttributeValueForBrowser(value) {
12722
+ return '"' + escapeTextContentForBrowser(value) + '"';
12723
+ }
12724
+
12725
+ module.exports = quoteAttributeValueForBrowser;
12726
+
12727
+ /***/ },
12728
+ /* 108 */
12729
+ /***/ function(module, exports, __webpack_require__) {
12730
+
12731
+ /**
12732
+ * Copyright 2013-present, Facebook, Inc.
12733
+ * All rights reserved.
12734
+ *
12735
+ * This source code is licensed under the BSD-style license found in the
12736
+ * LICENSE file in the root directory of this source tree. An additional grant
12737
+ * of patent rights can be found in the PATENTS file in the same directory.
12738
+ *
12739
+ * @providesModule ReactBrowserEventEmitter
12740
+ */
12741
+
12742
+ 'use strict';
12743
+
12744
+ var _assign = __webpack_require__(5);
12745
+
12746
+ var EventConstants = __webpack_require__(42);
12747
+ var EventPluginRegistry = __webpack_require__(45);
12748
+ var ReactEventEmitterMixin = __webpack_require__(109);
12749
+ var ViewportMetrics = __webpack_require__(78);
12750
+
12751
+ var getVendorPrefixedEventName = __webpack_require__(110);
12752
+ var isEventSupported = __webpack_require__(72);
12753
+
12754
+ /**
12755
+ * Summary of `ReactBrowserEventEmitter` event handling:
12756
+ *
12757
+ * - Top-level delegation is used to trap most native browser events. This
12758
+ * may only occur in the main thread and is the responsibility of
12759
+ * ReactEventListener, which is injected and can therefore support pluggable
12760
+ * event sources. This is the only work that occurs in the main thread.
12761
+ *
12762
+ * - We normalize and de-duplicate events to account for browser quirks. This
12763
+ * may be done in the worker thread.
12764
+ *
12765
+ * - Forward these native events (with the associated top-level type used to
12766
+ * trap it) to `EventPluginHub`, which in turn will ask plugins if they want
12767
+ * to extract any synthetic events.
12768
+ *
12769
+ * - The `EventPluginHub` will then process each event by annotating them with
12770
+ * "dispatches", a sequence of listeners and IDs that care about that event.
12771
+ *
12772
+ * - The `EventPluginHub` then dispatches the events.
12773
+ *
12774
+ * Overview of React and the event system:
12775
+ *
12776
+ * +------------+ .
12777
+ * | DOM | .
12778
+ * +------------+ .
12779
+ * | .
12780
+ * v .
12781
+ * +------------+ .
12782
+ * | ReactEvent | .
12783
+ * | Listener | .
12784
+ * +------------+ . +-----------+
12785
+ * | . +--------+|SimpleEvent|
12786
+ * | . | |Plugin |
12787
+ * +-----|------+ . v +-----------+
12788
+ * | | | . +--------------+ +------------+
12789
+ * | +-----------.--->|EventPluginHub| | Event |
12790
+ * | | . | | +-----------+ | Propagators|
12791
+ * | ReactEvent | . | | |TapEvent | |------------|
12792
+ * | Emitter | . | |<---+|Plugin | |other plugin|
12793
+ * | | . | | +-----------+ | utilities |
12794
+ * | +-----------.--->| | +------------+
12795
+ * | | | . +--------------+
12796
+ * +-----|------+ . ^ +-----------+
12797
+ * | . | |Enter/Leave|
12798
+ * + . +-------+|Plugin |
12799
+ * +-------------+ . +-----------+
12800
+ * | application | .
12801
+ * |-------------| .
12802
+ * | | .
12803
+ * | | .
12804
+ * +-------------+ .
12805
+ * .
12806
+ * React Core . General Purpose Event Plugin System
12807
+ */
12808
+
12809
+ var hasEventPageXY;
12810
+ var alreadyListeningTo = {};
12811
+ var isMonitoringScrollValue = false;
12812
+ var reactTopListenersCounter = 0;
12813
+
12814
+ // For events like 'submit' which don't consistently bubble (which we trap at a
12815
+ // lower node than `document`), binding at `document` would cause duplicate
12816
+ // events so we don't include them here
12817
+ var topEventMapping = {
12818
+ topAbort: 'abort',
12819
+ topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',
12820
+ topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',
12821
+ topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',
12822
+ topBlur: 'blur',
12823
+ topCanPlay: 'canplay',
12824
+ topCanPlayThrough: 'canplaythrough',
12825
+ topChange: 'change',
12826
+ topClick: 'click',
12827
+ topCompositionEnd: 'compositionend',
12828
+ topCompositionStart: 'compositionstart',
12829
+ topCompositionUpdate: 'compositionupdate',
12830
+ topContextMenu: 'contextmenu',
12831
+ topCopy: 'copy',
12832
+ topCut: 'cut',
12833
+ topDoubleClick: 'dblclick',
12834
+ topDrag: 'drag',
12835
+ topDragEnd: 'dragend',
12836
+ topDragEnter: 'dragenter',
12837
+ topDragExit: 'dragexit',
12838
+ topDragLeave: 'dragleave',
12839
+ topDragOver: 'dragover',
12840
+ topDragStart: 'dragstart',
12841
+ topDrop: 'drop',
12842
+ topDurationChange: 'durationchange',
12843
+ topEmptied: 'emptied',
12844
+ topEncrypted: 'encrypted',
12845
+ topEnded: 'ended',
12846
+ topError: 'error',
12847
+ topFocus: 'focus',
12848
+ topInput: 'input',
12849
+ topKeyDown: 'keydown',
12850
+ topKeyPress: 'keypress',
12851
+ topKeyUp: 'keyup',
12852
+ topLoadedData: 'loadeddata',
12853
+ topLoadedMetadata: 'loadedmetadata',
12854
+ topLoadStart: 'loadstart',
12855
+ topMouseDown: 'mousedown',
12856
+ topMouseMove: 'mousemove',
12857
+ topMouseOut: 'mouseout',
12858
+ topMouseOver: 'mouseover',
12859
+ topMouseUp: 'mouseup',
12860
+ topPaste: 'paste',
12861
+ topPause: 'pause',
12862
+ topPlay: 'play',
12863
+ topPlaying: 'playing',
12864
+ topProgress: 'progress',
12865
+ topRateChange: 'ratechange',
12866
+ topScroll: 'scroll',
12867
+ topSeeked: 'seeked',
12868
+ topSeeking: 'seeking',
12869
+ topSelectionChange: 'selectionchange',
12870
+ topStalled: 'stalled',
12871
+ topSuspend: 'suspend',
12872
+ topTextInput: 'textInput',
12873
+ topTimeUpdate: 'timeupdate',
12874
+ topTouchCancel: 'touchcancel',
12875
+ topTouchEnd: 'touchend',
12876
+ topTouchMove: 'touchmove',
12877
+ topTouchStart: 'touchstart',
12878
+ topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',
12879
+ topVolumeChange: 'volumechange',
12880
+ topWaiting: 'waiting',
12881
+ topWheel: 'wheel'
12882
+ };
12883
+
12884
+ /**
12885
+ * To ensure no conflicts with other potential React instances on the page
12886
+ */
12887
+ var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);
12888
+
12889
+ function getListeningForDocument(mountAt) {
12890
+ // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
12891
+ // directly.
12892
+ if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
12893
+ mountAt[topListenersIDKey] = reactTopListenersCounter++;
12894
+ alreadyListeningTo[mountAt[topListenersIDKey]] = {};
12895
+ }
12896
+ return alreadyListeningTo[mountAt[topListenersIDKey]];
12897
+ }
12898
+
12899
+ /**
12900
+ * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
12901
+ * example:
12902
+ *
12903
+ * EventPluginHub.putListener('myID', 'onClick', myFunction);
12904
+ *
12905
+ * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
12906
+ *
12907
+ * @internal
12908
+ */
12909
+ var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
12910
+
12911
+ /**
12912
+ * Injectable event backend
12913
+ */
12914
+ ReactEventListener: null,
12915
+
12916
+ injection: {
12917
+ /**
12918
+ * @param {object} ReactEventListener
12919
+ */
12920
+ injectReactEventListener: function (ReactEventListener) {
12921
+ ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
12922
+ ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
12923
+ }
12924
+ },
12925
+
12926
+ /**
12927
+ * Sets whether or not any created callbacks should be enabled.
12928
+ *
12929
+ * @param {boolean} enabled True if callbacks should be enabled.
12930
+ */
12931
+ setEnabled: function (enabled) {
12932
+ if (ReactBrowserEventEmitter.ReactEventListener) {
12933
+ ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
12934
+ }
12935
+ },
12936
+
12937
+ /**
12938
+ * @return {boolean} True if callbacks are enabled.
12939
+ */
12940
+ isEnabled: function () {
12941
+ return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
12942
+ },
12943
+
12944
+ /**
12945
+ * We listen for bubbled touch events on the document object.
12946
+ *
12947
+ * Firefox v8.01 (and possibly others) exhibited strange behavior when
12948
+ * mounting `onmousemove` events at some node that was not the document
12949
+ * element. The symptoms were that if your mouse is not moving over something
12950
+ * contained within that mount point (for example on the background) the
12951
+ * top-level listeners for `onmousemove` won't be called. However, if you
12952
+ * register the `mousemove` on the document object, then it will of course
12953
+ * catch all `mousemove`s. This along with iOS quirks, justifies restricting
12954
+ * top-level listeners to the document object only, at least for these
12955
+ * movement types of events and possibly all events.
12956
+ *
12957
+ * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
12958
+ *
12959
+ * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
12960
+ * they bubble to document.
12961
+ *
12962
+ * @param {string} registrationName Name of listener (e.g. `onClick`).
12963
+ * @param {object} contentDocumentHandle Document which owns the container
12964
+ */
12965
+ listenTo: function (registrationName, contentDocumentHandle) {
12966
+ var mountAt = contentDocumentHandle;
12967
+ var isListening = getListeningForDocument(mountAt);
12968
+ var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];
12969
+
12970
+ var topLevelTypes = EventConstants.topLevelTypes;
12971
+ for (var i = 0; i < dependencies.length; i++) {
12972
+ var dependency = dependencies[i];
12973
+ if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
12974
+ if (dependency === topLevelTypes.topWheel) {
12975
+ if (isEventSupported('wheel')) {
12976
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
12977
+ } else if (isEventSupported('mousewheel')) {
12978
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
12979
+ } else {
12980
+ // Firefox needs to capture a different mouse scroll event.
12981
+ // @see http://www.quirksmode.org/dom/events/tests/scroll.html
12982
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
12983
+ }
12984
+ } else if (dependency === topLevelTypes.topScroll) {
12985
+
12986
+ if (isEventSupported('scroll', true)) {
12987
+ ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
12988
+ } else {
12989
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
12990
+ }
12991
+ } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {
12992
+
12993
+ if (isEventSupported('focus', true)) {
12994
+ ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
12995
+ ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
12996
+ } else if (isEventSupported('focusin')) {
12997
+ // IE has `focusin` and `focusout` events which bubble.
12998
+ // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
12999
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
13000
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
13001
+ }
13002
+
13003
+ // to make sure blur and focus event listeners are only attached once
13004
+ isListening[topLevelTypes.topBlur] = true;
13005
+ isListening[topLevelTypes.topFocus] = true;
13006
+ } else if (topEventMapping.hasOwnProperty(dependency)) {
13007
+ ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
13008
+ }
13009
+
13010
+ isListening[dependency] = true;
13011
+ }
13012
+ }
13013
+ },
13014
+
13015
+ trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
13016
+ return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
13017
+ },
13018
+
13019
+ trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
13020
+ return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
13021
+ },
13022
+
13023
+ /**
13024
+ * Protect against document.createEvent() returning null
13025
+ * Some popup blocker extensions appear to do this:
13026
+ * https://github.com/facebook/react/issues/6887
13027
+ */
13028
+ supportsEventPageXY: function () {
13029
+ if (!document.createEvent) {
13030
+ return false;
13031
+ }
13032
+ var ev = document.createEvent('MouseEvent');
13033
+ return ev != null && 'pageX' in ev;
13034
+ },
13035
+
13036
+ /**
13037
+ * Listens to window scroll and resize events. We cache scroll values so that
13038
+ * application code can access them without triggering reflows.
13039
+ *
13040
+ * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when
13041
+ * pageX/pageY isn't supported (legacy browsers).
13042
+ *
13043
+ * NOTE: Scroll events do not bubble.
13044
+ *
13045
+ * @see http://www.quirksmode.org/dom/events/scroll.html
13046
+ */
13047
+ ensureScrollValueMonitoring: function () {
13048
+ if (hasEventPageXY === undefined) {
13049
+ hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();
13050
+ }
13051
+ if (!hasEventPageXY && !isMonitoringScrollValue) {
13052
+ var refresh = ViewportMetrics.refreshScrollValues;
13053
+ ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
13054
+ isMonitoringScrollValue = true;
13055
+ }
13056
+ }
13057
+
13058
+ });
13059
+
13060
+ module.exports = ReactBrowserEventEmitter;
13061
+
13062
+ /***/ },
13063
+ /* 109 */
13064
+ /***/ function(module, exports, __webpack_require__) {
13065
+
13066
+ /**
13067
+ * Copyright 2013-present, Facebook, Inc.
13068
+ * All rights reserved.
13069
+ *
13070
+ * This source code is licensed under the BSD-style license found in the
13071
+ * LICENSE file in the root directory of this source tree. An additional grant
13072
+ * of patent rights can be found in the PATENTS file in the same directory.
13073
+ *
13074
+ * @providesModule ReactEventEmitterMixin
13075
+ */
13076
+
13077
+ 'use strict';
13078
+
13079
+ var EventPluginHub = __webpack_require__(44);
13080
+
13081
+ function runEventQueueInBatch(events) {
13082
+ EventPluginHub.enqueueEvents(events);
13083
+ EventPluginHub.processEventQueue(false);
13084
+ }
13085
+
13086
+ var ReactEventEmitterMixin = {
13087
+
13088
+ /**
13089
+ * Streams a fired top-level event to `EventPluginHub` where plugins have the
13090
+ * opportunity to create `ReactEvent`s to be dispatched.
13091
+ */
13092
+ handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
13093
+ var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);
13094
+ runEventQueueInBatch(events);
13095
+ }
13096
+ };
13097
+
13098
+ module.exports = ReactEventEmitterMixin;
13099
+
13100
+ /***/ },
13101
+ /* 110 */
13102
+ /***/ function(module, exports, __webpack_require__) {
13103
+
13104
+ /**
13105
+ * Copyright 2013-present, Facebook, Inc.
13106
+ * All rights reserved.
13107
+ *
13108
+ * This source code is licensed under the BSD-style license found in the
13109
+ * LICENSE file in the root directory of this source tree. An additional grant
13110
+ * of patent rights can be found in the PATENTS file in the same directory.
13111
+ *
13112
+ * @providesModule getVendorPrefixedEventName
13113
+ */
13114
+
13115
+ 'use strict';
13116
+
13117
+ var ExecutionEnvironment = __webpack_require__(50);
13118
+
13119
+ /**
13120
+ * Generate a mapping of standard vendor prefixes using the defined style property and event name.
13121
+ *
13122
+ * @param {string} styleProp
13123
+ * @param {string} eventName
13124
+ * @returns {object}
13125
+ */
13126
+ function makePrefixMap(styleProp, eventName) {
13127
+ var prefixes = {};
13128
+
13129
+ prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
13130
+ prefixes['Webkit' + styleProp] = 'webkit' + eventName;
13131
+ prefixes['Moz' + styleProp] = 'moz' + eventName;
13132
+ prefixes['ms' + styleProp] = 'MS' + eventName;
13133
+ prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();
13134
+
13135
+ return prefixes;
13136
+ }
13137
+
13138
+ /**
13139
+ * A list of event names to a configurable list of vendor prefixes.
13140
+ */
13141
+ var vendorPrefixes = {
13142
+ animationend: makePrefixMap('Animation', 'AnimationEnd'),
13143
+ animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
13144
+ animationstart: makePrefixMap('Animation', 'AnimationStart'),
13145
+ transitionend: makePrefixMap('Transition', 'TransitionEnd')
13146
+ };
13147
+
13148
+ /**
13149
+ * Event names that have already been detected and prefixed (if applicable).
13150
+ */
13151
+ var prefixedEventNames = {};
13152
+
13153
+ /**
13154
+ * Element to check for prefixes on.
13155
+ */
13156
+ var style = {};
13157
+
13158
+ /**
13159
+ * Bootstrap if a DOM exists.
13160
+ */
13161
+ if (ExecutionEnvironment.canUseDOM) {
13162
+ style = document.createElement('div').style;
13163
+
13164
+ // On some platforms, in particular some releases of Android 4.x,
13165
+ // the un-prefixed "animation" and "transition" properties are defined on the
13166
+ // style object but the events that fire will still be prefixed, so we need
13167
+ // to check if the un-prefixed events are usable, and if not remove them from the map.
13168
+ if (!('AnimationEvent' in window)) {
13169
+ delete vendorPrefixes.animationend.animation;
13170
+ delete vendorPrefixes.animationiteration.animation;
13171
+ delete vendorPrefixes.animationstart.animation;
13172
+ }
13173
+
13174
+ // Same as above
13175
+ if (!('TransitionEvent' in window)) {
13176
+ delete vendorPrefixes.transitionend.transition;
13177
+ }
13178
+ }
13179
+
13180
+ /**
13181
+ * Attempts to determine the correct vendor prefixed event name.
13182
+ *
13183
+ * @param {string} eventName
13184
+ * @returns {string}
13185
+ */
13186
+ function getVendorPrefixedEventName(eventName) {
13187
+ if (prefixedEventNames[eventName]) {
13188
+ return prefixedEventNames[eventName];
13189
+ } else if (!vendorPrefixes[eventName]) {
13190
+ return eventName;
13191
+ }
13192
+
13193
+ var prefixMap = vendorPrefixes[eventName];
13194
+
13195
+ for (var styleProp in prefixMap) {
13196
+ if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
13197
+ return prefixedEventNames[eventName] = prefixMap[styleProp];
13198
+ }
13199
+ }
13200
+
13201
+ return '';
13202
+ }
13203
+
13204
+ module.exports = getVendorPrefixedEventName;
13205
+
13206
+ /***/ },
13207
+ /* 111 */
13208
+ /***/ function(module, exports, __webpack_require__) {
13209
+
13210
+ /**
13211
+ * Copyright 2013-present, Facebook, Inc.
13212
+ * All rights reserved.
13213
+ *
13214
+ * This source code is licensed under the BSD-style license found in the
13215
+ * LICENSE file in the root directory of this source tree. An additional grant
13216
+ * of patent rights can be found in the PATENTS file in the same directory.
13217
+ *
13218
+ * @providesModule ReactDOMButton
13219
+ */
13220
+
13221
+ 'use strict';
13222
+
13223
+ var DisabledInputUtils = __webpack_require__(112);
13224
+
13225
+ /**
13226
+ * Implements a <button> host component that does not receive mouse events
13227
+ * when `disabled` is set.
13228
+ */
13229
+ var ReactDOMButton = {
13230
+ getHostProps: DisabledInputUtils.getHostProps
13231
+ };
13232
+
13233
+ module.exports = ReactDOMButton;
13234
+
13235
+ /***/ },
13236
+ /* 112 */
13237
+ /***/ function(module, exports) {
13238
+
13239
+ /**
13240
+ * Copyright 2013-present, Facebook, Inc.
13241
+ * All rights reserved.
13242
+ *
13243
+ * This source code is licensed under the BSD-style license found in the
13244
+ * LICENSE file in the root directory of this source tree. An additional grant
13245
+ * of patent rights can be found in the PATENTS file in the same directory.
13246
+ *
13247
+ * @providesModule DisabledInputUtils
13248
+ */
13249
+
13250
+ 'use strict';
13251
+
13252
+ var disableableMouseListenerNames = {
13253
+ onClick: true,
13254
+ onDoubleClick: true,
13255
+ onMouseDown: true,
13256
+ onMouseMove: true,
13257
+ onMouseUp: true,
13258
+
13259
+ onClickCapture: true,
13260
+ onDoubleClickCapture: true,
13261
+ onMouseDownCapture: true,
13262
+ onMouseMoveCapture: true,
13263
+ onMouseUpCapture: true
13264
+ };
13265
+
13266
+ /**
13267
+ * Implements a host component that does not receive mouse events
13268
+ * when `disabled` is set.
13269
+ */
13270
+ var DisabledInputUtils = {
13271
+ getHostProps: function (inst, props) {
13272
+ if (!props.disabled) {
13273
+ return props;
13274
+ }
13275
+
13276
+ // Copy the props, except the mouse listeners
13277
+ var hostProps = {};
13278
+ for (var key in props) {
13279
+ if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {
13280
+ hostProps[key] = props[key];
13281
+ }
13282
+ }
13283
+
13284
+ return hostProps;
13285
+ }
13286
+ };
13287
+
13288
+ module.exports = DisabledInputUtils;
13289
+
13290
+ /***/ },
13291
+ /* 113 */
13292
+ /***/ function(module, exports, __webpack_require__) {
13293
+
13294
+ /* WEBPACK VAR INJECTION */(function(process) {/**
13295
+ * Copyright 2013-present, Facebook, Inc.
13296
+ * All rights reserved.
13297
+ *
13298
+ * This source code is licensed under the BSD-style license found in the
13299
+ * LICENSE file in the root directory of this source tree. An additional grant
13300
+ * of patent rights can be found in the PATENTS file in the same directory.
13301
+ *
13302
+ * @providesModule ReactDOMInput
13303
+ */
13304
+
13305
+ 'use strict';
13306
+
13307
+ var _prodInvariant = __webpack_require__(8),
13308
+ _assign = __webpack_require__(5);
13309
+
13310
+ var DisabledInputUtils = __webpack_require__(112);
13311
+ var DOMPropertyOperations = __webpack_require__(106);
13312
+ var LinkedValueUtils = __webpack_require__(114);
13313
+ var ReactDOMComponentTree = __webpack_require__(37);
13314
+ var ReactUpdates = __webpack_require__(57);
13315
+
13316
+ var invariant = __webpack_require__(9);
13317
+ var warning = __webpack_require__(12);
13318
+
13319
+ var didWarnValueLink = false;
13320
+ var didWarnCheckedLink = false;
13321
+ var didWarnValueDefaultValue = false;
13322
+ var didWarnCheckedDefaultChecked = false;
13323
+ var didWarnControlledToUncontrolled = false;
13324
+ var didWarnUncontrolledToControlled = false;
13325
+
13326
+ function forceUpdateIfMounted() {
13327
+ if (this._rootNodeID) {
13328
+ // DOM component is still mounted; update
13329
+ ReactDOMInput.updateWrapper(this);
13330
+ }
13331
+ }
13332
+
13333
+ function isControlled(props) {
13334
+ var usesChecked = props.type === 'checkbox' || props.type === 'radio';
13335
+ return usesChecked ? props.checked != null : props.value != null;
13336
+ }
13337
+
13338
+ /**
13339
+ * Implements an <input> host component that allows setting these optional
13340
+ * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
13341
+ *
13342
+ * If `checked` or `value` are not supplied (or null/undefined), user actions
13343
+ * that affect the checked state or value will trigger updates to the element.
13344
+ *
13345
+ * If they are supplied (and not null/undefined), the rendered element will not
13346
+ * trigger updates to the element. Instead, the props must change in order for
13347
+ * the rendered element to be updated.
13348
+ *
13349
+ * The rendered element will be initialized as unchecked (or `defaultChecked`)
13350
+ * with an empty value (or `defaultValue`).
13351
+ *
13352
+ * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
13353
+ */
13354
+ var ReactDOMInput = {
13355
+ getHostProps: function (inst, props) {
13356
+ var value = LinkedValueUtils.getValue(props);
13357
+ var checked = LinkedValueUtils.getChecked(props);
13358
+
13359
+ var hostProps = _assign({
13360
+ // Make sure we set .type before any other properties (setting .value
13361
+ // before .type means .value is lost in IE11 and below)
13362
+ type: undefined,
13363
+ // Make sure we set .step before .value (setting .value before .step
13364
+ // means .value is rounded on mount, based upon step precision)
13365
+ step: undefined,
13366
+ // Make sure we set .min & .max before .value (to ensure proper order
13367
+ // in corner cases such as min or max deriving from value, e.g. Issue #7170)
13368
+ min: undefined,
13369
+ max: undefined
13370
+ }, DisabledInputUtils.getHostProps(inst, props), {
13371
+ defaultChecked: undefined,
13372
+ defaultValue: undefined,
13373
+ value: value != null ? value : inst._wrapperState.initialValue,
13374
+ checked: checked != null ? checked : inst._wrapperState.initialChecked,
13375
+ onChange: inst._wrapperState.onChange
13376
+ });
13377
+
13378
+ return hostProps;
13379
+ },
13380
+
13381
+ mountWrapper: function (inst, props) {
13382
+ if (process.env.NODE_ENV !== 'production') {
13383
+ LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
13384
+
13385
+ var owner = inst._currentElement._owner;
13386
+
13387
+ if (props.valueLink !== undefined && !didWarnValueLink) {
13388
+ process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
13389
+ didWarnValueLink = true;
13390
+ }
13391
+ if (props.checkedLink !== undefined && !didWarnCheckedLink) {
13392
+ process.env.NODE_ENV !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
13393
+ didWarnCheckedLink = true;
13394
+ }
13395
+ if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
13396
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
13397
+ didWarnCheckedDefaultChecked = true;
13398
+ }
13399
+ if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
13400
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
13401
+ didWarnValueDefaultValue = true;
13402
+ }
13403
+ }
13404
+
13405
+ var defaultValue = props.defaultValue;
13406
+ inst._wrapperState = {
13407
+ initialChecked: props.checked != null ? props.checked : props.defaultChecked,
13408
+ initialValue: props.value != null ? props.value : defaultValue,
13409
+ listeners: null,
13410
+ onChange: _handleChange.bind(inst)
13411
+ };
13412
+
13413
+ if (process.env.NODE_ENV !== 'production') {
13414
+ inst._wrapperState.controlled = isControlled(props);
13415
+ }
13416
+ },
13417
+
13418
+ updateWrapper: function (inst) {
13419
+ var props = inst._currentElement.props;
13420
+
13421
+ if (process.env.NODE_ENV !== 'production') {
13422
+ var controlled = isControlled(props);
13423
+ var owner = inst._currentElement._owner;
13424
+
13425
+ if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
13426
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
13427
+ didWarnUncontrolledToControlled = true;
13428
+ }
13429
+ if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
13430
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
13431
+ didWarnControlledToUncontrolled = true;
13432
+ }
13433
+ }
13434
+
13435
+ // TODO: Shouldn't this be getChecked(props)?
13436
+ var checked = props.checked;
13437
+ if (checked != null) {
13438
+ DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);
13439
+ }
13440
+
13441
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
13442
+ var value = LinkedValueUtils.getValue(props);
13443
+ if (value != null) {
13444
+
13445
+ // Cast `value` to a string to ensure the value is set correctly. While
13446
+ // browsers typically do this as necessary, jsdom doesn't.
13447
+ var newValue = '' + value;
13448
+
13449
+ // To avoid side effects (such as losing text selection), only set value if changed
13450
+ if (newValue !== node.value) {
13451
+ node.value = newValue;
13452
+ }
13453
+ } else {
13454
+ if (props.value == null && props.defaultValue != null) {
13455
+ node.defaultValue = '' + props.defaultValue;
13456
+ }
13457
+ if (props.checked == null && props.defaultChecked != null) {
13458
+ node.defaultChecked = !!props.defaultChecked;
13459
+ }
13460
+ }
13461
+ },
13462
+
13463
+ postMountWrapper: function (inst) {
13464
+ var props = inst._currentElement.props;
13465
+
13466
+ // This is in postMount because we need access to the DOM node, which is not
13467
+ // available until after the component has mounted.
13468
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
13469
+
13470
+ // Detach value from defaultValue. We won't do anything if we're working on
13471
+ // submit or reset inputs as those values & defaultValues are linked. They
13472
+ // are not resetable nodes so this operation doesn't matter and actually
13473
+ // removes browser-default values (eg "Submit Query") when no value is
13474
+ // provided.
13475
+
13476
+ switch (props.type) {
13477
+ case 'submit':
13478
+ case 'reset':
13479
+ break;
13480
+ case 'color':
13481
+ case 'date':
13482
+ case 'datetime':
13483
+ case 'datetime-local':
13484
+ case 'month':
13485
+ case 'time':
13486
+ case 'week':
13487
+ // This fixes the no-show issue on iOS Safari and Android Chrome:
13488
+ // https://github.com/facebook/react/issues/7233
13489
+ node.value = '';
13490
+ node.value = node.defaultValue;
13491
+ break;
13492
+ default:
13493
+ node.value = node.value;
13494
+ break;
13495
+ }
13496
+
13497
+ // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
13498
+ // this is needed to work around a chrome bug where setting defaultChecked
13499
+ // will sometimes influence the value of checked (even after detachment).
13500
+ // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
13501
+ // We need to temporarily unset name to avoid disrupting radio button groups.
13502
+ var name = node.name;
13503
+ if (name !== '') {
13504
+ node.name = '';
13505
+ }
13506
+ node.defaultChecked = !node.defaultChecked;
13507
+ node.defaultChecked = !node.defaultChecked;
13508
+ if (name !== '') {
13509
+ node.name = name;
13510
+ }
13511
+ }
13512
+ };
13513
+
13514
+ function _handleChange(event) {
13515
+ var props = this._currentElement.props;
13516
+
13517
+ var returnValue = LinkedValueUtils.executeOnChange(props, event);
13518
+
13519
+ // Here we use asap to wait until all updates have propagated, which
13520
+ // is important when using controlled components within layers:
13521
+ // https://github.com/facebook/react/issues/1698
13522
+ ReactUpdates.asap(forceUpdateIfMounted, this);
13523
+
13524
+ var name = props.name;
13525
+ if (props.type === 'radio' && name != null) {
13526
+ var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);
13527
+ var queryRoot = rootNode;
13528
+
13529
+ while (queryRoot.parentNode) {
13530
+ queryRoot = queryRoot.parentNode;
13531
+ }
13532
+
13533
+ // If `rootNode.form` was non-null, then we could try `form.elements`,
13534
+ // but that sometimes behaves strangely in IE8. We could also try using
13535
+ // `form.getElementsByName`, but that will only return direct children
13536
+ // and won't include inputs that use the HTML5 `form=` attribute. Since
13537
+ // the input might not even be in a form, let's just use the global
13538
+ // `querySelectorAll` to ensure we don't miss anything.
13539
+ var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
13540
+
13541
+ for (var i = 0; i < group.length; i++) {
13542
+ var otherNode = group[i];
13543
+ if (otherNode === rootNode || otherNode.form !== rootNode.form) {
13544
+ continue;
13545
+ }
13546
+ // This will throw if radio buttons rendered by different copies of React
13547
+ // and the same name are rendered into the same form (same as #1939).
13548
+ // That's probably okay; we don't support it just as we don't support
13549
+ // mixing React radio buttons with non-React ones.
13550
+ var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);
13551
+ !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;
13552
+ // If this is a controlled radio button group, forcing the input that
13553
+ // was previously checked to update will cause it to be come re-checked
13554
+ // as appropriate.
13555
+ ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
13556
+ }
13557
+ }
13558
+
13559
+ return returnValue;
13560
+ }
13561
+
13562
+ module.exports = ReactDOMInput;
13563
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
13564
+
13565
+ /***/ },
13566
+ /* 114 */
13567
+ /***/ function(module, exports, __webpack_require__) {
13568
+
13569
+ /* WEBPACK VAR INJECTION */(function(process) {/**
13570
+ * Copyright 2013-present, Facebook, Inc.
13571
+ * All rights reserved.
13572
+ *
13573
+ * This source code is licensed under the BSD-style license found in the
13574
+ * LICENSE file in the root directory of this source tree. An additional grant
13575
+ * of patent rights can be found in the PATENTS file in the same directory.
13576
+ *
13577
+ * @providesModule LinkedValueUtils
13578
+ */
13579
+
13580
+ 'use strict';
13581
+
13582
+ var _prodInvariant = __webpack_require__(8);
13583
+
13584
+ var ReactPropTypes = __webpack_require__(32);
13585
+ var ReactPropTypeLocations = __webpack_require__(23);
13586
+ var ReactPropTypesSecret = __webpack_require__(31);
13587
+
13588
+ var invariant = __webpack_require__(9);
13589
+ var warning = __webpack_require__(12);
13590
+
13591
+ var hasReadOnlyValue = {
13592
+ 'button': true,
13593
+ 'checkbox': true,
13594
+ 'image': true,
13595
+ 'hidden': true,
13596
+ 'radio': true,
13597
+ 'reset': true,
13598
+ 'submit': true
13599
+ };
13600
+
13601
+ function _assertSingleLink(inputProps) {
13602
+ !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;
13603
+ }
13604
+ function _assertValueLink(inputProps) {
13605
+ _assertSingleLink(inputProps);
13606
+ !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\'t want to use valueLink.') : _prodInvariant('88') : void 0;
13607
+ }
13608
+
13609
+ function _assertCheckedLink(inputProps) {
13610
+ _assertSingleLink(inputProps);
13611
+ !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\'t want to use checkedLink') : _prodInvariant('89') : void 0;
13612
+ }
13613
+
13614
+ var propTypes = {
13615
+ value: function (props, propName, componentName) {
13616
+ if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
13617
+ return null;
13618
+ }
13619
+ return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
13620
+ },
13621
+ checked: function (props, propName, componentName) {
13622
+ if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
13623
+ return null;
13624
+ }
13625
+ return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
13626
+ },
13627
+ onChange: ReactPropTypes.func
13628
+ };
13629
+
13630
+ var loggedTypeFailures = {};
13631
+ function getDeclarationErrorAddendum(owner) {
13632
+ if (owner) {
13633
+ var name = owner.getName();
13634
+ if (name) {
13635
+ return ' Check the render method of `' + name + '`.';
13636
+ }
13637
+ }
13638
+ return '';
13639
+ }
13640
+
13641
+ /**
13642
+ * Provide a linked `value` attribute for controlled forms. You should not use
13643
+ * this outside of the ReactDOM controlled form components.
13644
+ */
13645
+ var LinkedValueUtils = {
13646
+ checkPropTypes: function (tagName, props, owner) {
13647
+ for (var propName in propTypes) {
13648
+ if (propTypes.hasOwnProperty(propName)) {
13649
+ var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop, null, ReactPropTypesSecret);
13650
+ }
13651
+ if (error instanceof Error && !(error.message in loggedTypeFailures)) {
13652
+ // Only monitor this failure once because there tends to be a lot of the
13653
+ // same error.
13654
+ loggedTypeFailures[error.message] = true;
13655
+
13656
+ var addendum = getDeclarationErrorAddendum(owner);
13657
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;
13658
+ }
13659
+ }
13660
+ },
13661
+
13662
+ /**
13663
+ * @param {object} inputProps Props for form component
13664
+ * @return {*} current value of the input either from value prop or link.
13665
+ */
13666
+ getValue: function (inputProps) {
13667
+ if (inputProps.valueLink) {
13668
+ _assertValueLink(inputProps);
13669
+ return inputProps.valueLink.value;
13670
+ }
13671
+ return inputProps.value;
13672
+ },
13673
+
13674
+ /**
13675
+ * @param {object} inputProps Props for form component
13676
+ * @return {*} current checked status of the input either from checked prop
13677
+ * or link.
13678
+ */
13679
+ getChecked: function (inputProps) {
13680
+ if (inputProps.checkedLink) {
13681
+ _assertCheckedLink(inputProps);
13682
+ return inputProps.checkedLink.value;
13683
+ }
13684
+ return inputProps.checked;
13685
+ },
13686
+
13687
+ /**
13688
+ * @param {object} inputProps Props for form component
13689
+ * @param {SyntheticEvent} event change event to handle
13690
+ */
13691
+ executeOnChange: function (inputProps, event) {
13692
+ if (inputProps.valueLink) {
13693
+ _assertValueLink(inputProps);
13694
+ return inputProps.valueLink.requestChange(event.target.value);
13695
+ } else if (inputProps.checkedLink) {
13696
+ _assertCheckedLink(inputProps);
13697
+ return inputProps.checkedLink.requestChange(event.target.checked);
13698
+ } else if (inputProps.onChange) {
13699
+ return inputProps.onChange.call(undefined, event);
13700
+ }
13701
+ }
13702
+ };
13703
+
13704
+ module.exports = LinkedValueUtils;
13705
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
13706
+
13707
+ /***/ },
13708
+ /* 115 */
13709
+ /***/ function(module, exports, __webpack_require__) {
13710
+
13711
+ /* WEBPACK VAR INJECTION */(function(process) {/**
13712
+ * Copyright 2013-present, Facebook, Inc.
13713
+ * All rights reserved.
13714
+ *
13715
+ * This source code is licensed under the BSD-style license found in the
13716
+ * LICENSE file in the root directory of this source tree. An additional grant
13717
+ * of patent rights can be found in the PATENTS file in the same directory.
13718
+ *
13719
+ * @providesModule ReactDOMOption
13720
+ */
13721
+
13722
+ 'use strict';
13723
+
13724
+ var _assign = __webpack_require__(5);
13725
+
13726
+ var ReactChildren = __webpack_require__(6);
13727
+ var ReactDOMComponentTree = __webpack_require__(37);
13728
+ var ReactDOMSelect = __webpack_require__(116);
13729
+
13730
+ var warning = __webpack_require__(12);
13731
+ var didWarnInvalidOptionChildren = false;
13732
+
13733
+ function flattenChildren(children) {
13734
+ var content = '';
13735
+
13736
+ // Flatten children and warn if they aren't strings or numbers;
13737
+ // invalid types are ignored.
13738
+ ReactChildren.forEach(children, function (child) {
13739
+ if (child == null) {
13740
+ return;
13741
+ }
13742
+ if (typeof child === 'string' || typeof child === 'number') {
13743
+ content += child;
13744
+ } else if (!didWarnInvalidOptionChildren) {
13745
+ didWarnInvalidOptionChildren = true;
13746
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
13747
+ }
13748
+ });
13749
+
13750
+ return content;
13751
+ }
13752
+
13753
+ /**
13754
+ * Implements an <option> host component that warns when `selected` is set.
13755
+ */
13756
+ var ReactDOMOption = {
13757
+ mountWrapper: function (inst, props, hostParent) {
13758
+ // TODO (yungsters): Remove support for `selected` in <option>.
13759
+ if (process.env.NODE_ENV !== 'production') {
13760
+ process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;
13761
+ }
13762
+
13763
+ // Look up whether this option is 'selected'
13764
+ var selectValue = null;
13765
+ if (hostParent != null) {
13766
+ var selectParent = hostParent;
13767
+
13768
+ if (selectParent._tag === 'optgroup') {
13769
+ selectParent = selectParent._hostParent;
13770
+ }
13771
+
13772
+ if (selectParent != null && selectParent._tag === 'select') {
13773
+ selectValue = ReactDOMSelect.getSelectValueContext(selectParent);
13774
+ }
13775
+ }
13776
+
13777
+ // If the value is null (e.g., no specified value or after initial mount)
13778
+ // or missing (e.g., for <datalist>), we don't change props.selected
13779
+ var selected = null;
13780
+ if (selectValue != null) {
13781
+ var value;
13782
+ if (props.value != null) {
13783
+ value = props.value + '';
13784
+ } else {
13785
+ value = flattenChildren(props.children);
13786
+ }
13787
+ selected = false;
13788
+ if (Array.isArray(selectValue)) {
13789
+ // multiple
13790
+ for (var i = 0; i < selectValue.length; i++) {
13791
+ if ('' + selectValue[i] === value) {
13792
+ selected = true;
13793
+ break;
13794
+ }
13795
+ }
13796
+ } else {
13797
+ selected = '' + selectValue === value;
13798
+ }
13799
+ }
13800
+
13801
+ inst._wrapperState = { selected: selected };
13802
+ },
13803
+
13804
+ postMountWrapper: function (inst) {
13805
+ // value="" should make a value attribute (#6219)
13806
+ var props = inst._currentElement.props;
13807
+ if (props.value != null) {
13808
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
13809
+ node.setAttribute('value', props.value);
13810
+ }
13811
+ },
13812
+
13813
+ getHostProps: function (inst, props) {
13814
+ var hostProps = _assign({ selected: undefined, children: undefined }, props);
13815
+
13816
+ // Read state only from initial mount because <select> updates value
13817
+ // manually; we need the initial state only for server rendering
13818
+ if (inst._wrapperState.selected != null) {
13819
+ hostProps.selected = inst._wrapperState.selected;
13820
+ }
13821
+
13822
+ var content = flattenChildren(props.children);
13823
+
13824
+ if (content) {
13825
+ hostProps.children = content;
13826
+ }
13827
+
13828
+ return hostProps;
13829
+ }
13830
+
13831
+ };
13832
+
13833
+ module.exports = ReactDOMOption;
13834
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
13835
+
13836
+ /***/ },
13837
+ /* 116 */
13838
+ /***/ function(module, exports, __webpack_require__) {
13839
+
13840
+ /* WEBPACK VAR INJECTION */(function(process) {/**
13841
+ * Copyright 2013-present, Facebook, Inc.
13842
+ * All rights reserved.
13843
+ *
13844
+ * This source code is licensed under the BSD-style license found in the
13845
+ * LICENSE file in the root directory of this source tree. An additional grant
13846
+ * of patent rights can be found in the PATENTS file in the same directory.
13847
+ *
13848
+ * @providesModule ReactDOMSelect
13849
+ */
13850
+
13851
+ 'use strict';
13852
+
13853
+ var _assign = __webpack_require__(5);
13854
+
13855
+ var DisabledInputUtils = __webpack_require__(112);
13856
+ var LinkedValueUtils = __webpack_require__(114);
13857
+ var ReactDOMComponentTree = __webpack_require__(37);
13858
+ var ReactUpdates = __webpack_require__(57);
13859
+
13860
+ var warning = __webpack_require__(12);
13861
+
13862
+ var didWarnValueLink = false;
13863
+ var didWarnValueDefaultValue = false;
13864
+
13865
+ function updateOptionsIfPendingUpdateAndMounted() {
13866
+ if (this._rootNodeID && this._wrapperState.pendingUpdate) {
13867
+ this._wrapperState.pendingUpdate = false;
13868
+
13869
+ var props = this._currentElement.props;
13870
+ var value = LinkedValueUtils.getValue(props);
13871
+
13872
+ if (value != null) {
13873
+ updateOptions(this, Boolean(props.multiple), value);
13874
+ }
13875
+ }
13876
+ }
13877
+
13878
+ function getDeclarationErrorAddendum(owner) {
13879
+ if (owner) {
13880
+ var name = owner.getName();
13881
+ if (name) {
13882
+ return ' Check the render method of `' + name + '`.';
13883
+ }
13884
+ }
13885
+ return '';
13886
+ }
13887
+
13888
+ var valuePropNames = ['value', 'defaultValue'];
13889
+
13890
+ /**
13891
+ * Validation function for `value` and `defaultValue`.
13892
+ * @private
13893
+ */
13894
+ function checkSelectPropTypes(inst, props) {
13895
+ var owner = inst._currentElement._owner;
13896
+ LinkedValueUtils.checkPropTypes('select', props, owner);
13897
+
13898
+ if (props.valueLink !== undefined && !didWarnValueLink) {
13899
+ process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;
13900
+ didWarnValueLink = true;
13901
+ }
13902
+
13903
+ for (var i = 0; i < valuePropNames.length; i++) {
13904
+ var propName = valuePropNames[i];
13905
+ if (props[propName] == null) {
13906
+ continue;
13907
+ }
13908
+ var isArray = Array.isArray(props[propName]);
13909
+ if (props.multiple && !isArray) {
13910
+ process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
13911
+ } else if (!props.multiple && isArray) {
13912
+ process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;
13913
+ }
13914
+ }
13915
+ }
13916
+
13917
+ /**
13918
+ * @param {ReactDOMComponent} inst
13919
+ * @param {boolean} multiple
13920
+ * @param {*} propValue A stringable (with `multiple`, a list of stringables).
13921
+ * @private
13922
+ */
13923
+ function updateOptions(inst, multiple, propValue) {
13924
+ var selectedValue, i;
13925
+ var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;
13926
+
13927
+ if (multiple) {
13928
+ selectedValue = {};
13929
+ for (i = 0; i < propValue.length; i++) {
13930
+ selectedValue['' + propValue[i]] = true;
13931
+ }
13932
+ for (i = 0; i < options.length; i++) {
13933
+ var selected = selectedValue.hasOwnProperty(options[i].value);
13934
+ if (options[i].selected !== selected) {
13935
+ options[i].selected = selected;
13936
+ }
13937
+ }
13938
+ } else {
13939
+ // Do not set `select.value` as exact behavior isn't consistent across all
13940
+ // browsers for all cases.
13941
+ selectedValue = '' + propValue;
13942
+ for (i = 0; i < options.length; i++) {
13943
+ if (options[i].value === selectedValue) {
13944
+ options[i].selected = true;
13945
+ return;
13946
+ }
13947
+ }
13948
+ if (options.length) {
13949
+ options[0].selected = true;
13950
+ }
13951
+ }
13952
+ }
13953
+
13954
+ /**
13955
+ * Implements a <select> host component that allows optionally setting the
13956
+ * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
13957
+ * stringable. If `multiple` is true, the prop must be an array of stringables.
13958
+ *
13959
+ * If `value` is not supplied (or null/undefined), user actions that change the
13960
+ * selected option will trigger updates to the rendered options.
13961
+ *
13962
+ * If it is supplied (and not null/undefined), the rendered options will not
13963
+ * update in response to user actions. Instead, the `value` prop must change in
13964
+ * order for the rendered options to update.
13965
+ *
13966
+ * If `defaultValue` is provided, any options with the supplied values will be
13967
+ * selected.
13968
+ */
13969
+ var ReactDOMSelect = {
13970
+ getHostProps: function (inst, props) {
13971
+ return _assign({}, DisabledInputUtils.getHostProps(inst, props), {
13972
+ onChange: inst._wrapperState.onChange,
13973
+ value: undefined
13974
+ });
13975
+ },
13976
+
13977
+ mountWrapper: function (inst, props) {
13978
+ if (process.env.NODE_ENV !== 'production') {
13979
+ checkSelectPropTypes(inst, props);
13980
+ }
13981
+
13982
+ var value = LinkedValueUtils.getValue(props);
13983
+ inst._wrapperState = {
13984
+ pendingUpdate: false,
13985
+ initialValue: value != null ? value : props.defaultValue,
13986
+ listeners: null,
13987
+ onChange: _handleChange.bind(inst),
13988
+ wasMultiple: Boolean(props.multiple)
13989
+ };
13990
+
13991
+ if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
13992
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
13993
+ didWarnValueDefaultValue = true;
13994
+ }
13995
+ },
13996
+
13997
+ getSelectValueContext: function (inst) {
13998
+ // ReactDOMOption looks at this initial value so the initial generated
13999
+ // markup has correct `selected` attributes
14000
+ return inst._wrapperState.initialValue;
14001
+ },
14002
+
14003
+ postUpdateWrapper: function (inst) {
14004
+ var props = inst._currentElement.props;
14005
+
14006
+ // After the initial mount, we control selected-ness manually so don't pass
14007
+ // this value down
14008
+ inst._wrapperState.initialValue = undefined;
14009
+
14010
+ var wasMultiple = inst._wrapperState.wasMultiple;
14011
+ inst._wrapperState.wasMultiple = Boolean(props.multiple);
14012
+
14013
+ var value = LinkedValueUtils.getValue(props);
14014
+ if (value != null) {
14015
+ inst._wrapperState.pendingUpdate = false;
14016
+ updateOptions(inst, Boolean(props.multiple), value);
14017
+ } else if (wasMultiple !== Boolean(props.multiple)) {
14018
+ // For simplicity, reapply `defaultValue` if `multiple` is toggled.
14019
+ if (props.defaultValue != null) {
14020
+ updateOptions(inst, Boolean(props.multiple), props.defaultValue);
14021
+ } else {
14022
+ // Revert the select back to its default unselected state.
14023
+ updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');
14024
+ }
14025
+ }
14026
+ }
14027
+ };
14028
+
14029
+ function _handleChange(event) {
14030
+ var props = this._currentElement.props;
14031
+ var returnValue = LinkedValueUtils.executeOnChange(props, event);
14032
+
14033
+ if (this._rootNodeID) {
14034
+ this._wrapperState.pendingUpdate = true;
14035
+ }
14036
+ ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
14037
+ return returnValue;
14038
+ }
14039
+
14040
+ module.exports = ReactDOMSelect;
14041
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
14042
+
14043
+ /***/ },
14044
+ /* 117 */
14045
+ /***/ function(module, exports, __webpack_require__) {
14046
+
14047
+ /* WEBPACK VAR INJECTION */(function(process) {/**
14048
+ * Copyright 2013-present, Facebook, Inc.
14049
+ * All rights reserved.
14050
+ *
14051
+ * This source code is licensed under the BSD-style license found in the
14052
+ * LICENSE file in the root directory of this source tree. An additional grant
14053
+ * of patent rights can be found in the PATENTS file in the same directory.
14054
+ *
14055
+ * @providesModule ReactDOMTextarea
14056
+ */
14057
+
14058
+ 'use strict';
14059
+
14060
+ var _prodInvariant = __webpack_require__(8),
14061
+ _assign = __webpack_require__(5);
14062
+
14063
+ var DisabledInputUtils = __webpack_require__(112);
14064
+ var LinkedValueUtils = __webpack_require__(114);
14065
+ var ReactDOMComponentTree = __webpack_require__(37);
14066
+ var ReactUpdates = __webpack_require__(57);
14067
+
14068
+ var invariant = __webpack_require__(9);
14069
+ var warning = __webpack_require__(12);
14070
+
14071
+ var didWarnValueLink = false;
14072
+ var didWarnValDefaultVal = false;
14073
+
14074
+ function forceUpdateIfMounted() {
14075
+ if (this._rootNodeID) {
14076
+ // DOM component is still mounted; update
14077
+ ReactDOMTextarea.updateWrapper(this);
14078
+ }
14079
+ }
14080
+
14081
+ /**
14082
+ * Implements a <textarea> host component that allows setting `value`, and
14083
+ * `defaultValue`. This differs from the traditional DOM API because value is
14084
+ * usually set as PCDATA children.
14085
+ *
14086
+ * If `value` is not supplied (or null/undefined), user actions that affect the
14087
+ * value will trigger updates to the element.
14088
+ *
14089
+ * If `value` is supplied (and not null/undefined), the rendered element will
14090
+ * not trigger updates to the element. Instead, the `value` prop must change in
14091
+ * order for the rendered element to be updated.
14092
+ *
14093
+ * The rendered element will be initialized with an empty value, the prop
14094
+ * `defaultValue` if specified, or the children content (deprecated).
14095
+ */
14096
+ var ReactDOMTextarea = {
14097
+ getHostProps: function (inst, props) {
14098
+ !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;
14099
+
14100
+ // Always set children to the same thing. In IE9, the selection range will
14101
+ // get reset if `textContent` is mutated. We could add a check in setTextContent
14102
+ // to only set the value if/when the value differs from the node value (which would
14103
+ // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.
14104
+ // The value can be a boolean or object so that's why it's forced to be a string.
14105
+ var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {
14106
+ value: undefined,
14107
+ defaultValue: undefined,
14108
+ children: '' + inst._wrapperState.initialValue,
14109
+ onChange: inst._wrapperState.onChange
14110
+ });
14111
+
14112
+ return hostProps;
14113
+ },
14114
+
14115
+ mountWrapper: function (inst, props) {
14116
+ if (process.env.NODE_ENV !== 'production') {
14117
+ LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);
14118
+ if (props.valueLink !== undefined && !didWarnValueLink) {
14119
+ process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;
14120
+ didWarnValueLink = true;
14121
+ }
14122
+ if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
14123
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
14124
+ didWarnValDefaultVal = true;
14125
+ }
14126
+ }
14127
+
14128
+ var value = LinkedValueUtils.getValue(props);
14129
+ var initialValue = value;
14130
+
14131
+ // Only bother fetching default value if we're going to use it
14132
+ if (value == null) {
14133
+ var defaultValue = props.defaultValue;
14134
+ // TODO (yungsters): Remove support for children content in <textarea>.
14135
+ var children = props.children;
14136
+ if (children != null) {
14137
+ if (process.env.NODE_ENV !== 'production') {
14138
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
14139
+ }
14140
+ !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;
14141
+ if (Array.isArray(children)) {
14142
+ !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;
14143
+ children = children[0];
14144
+ }
14145
+
14146
+ defaultValue = '' + children;
14147
+ }
14148
+ if (defaultValue == null) {
14149
+ defaultValue = '';
14150
+ }
14151
+ initialValue = defaultValue;
14152
+ }
14153
+
14154
+ inst._wrapperState = {
14155
+ initialValue: '' + initialValue,
14156
+ listeners: null,
14157
+ onChange: _handleChange.bind(inst)
14158
+ };
14159
+ },
14160
+
14161
+ updateWrapper: function (inst) {
14162
+ var props = inst._currentElement.props;
14163
+
14164
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
14165
+ var value = LinkedValueUtils.getValue(props);
14166
+ if (value != null) {
14167
+ // Cast `value` to a string to ensure the value is set correctly. While
14168
+ // browsers typically do this as necessary, jsdom doesn't.
14169
+ var newValue = '' + value;
14170
+
14171
+ // To avoid side effects (such as losing text selection), only set value if changed
14172
+ if (newValue !== node.value) {
14173
+ node.value = newValue;
14174
+ }
14175
+ if (props.defaultValue == null) {
14176
+ node.defaultValue = newValue;
14177
+ }
14178
+ }
14179
+ if (props.defaultValue != null) {
14180
+ node.defaultValue = props.defaultValue;
14181
+ }
14182
+ },
14183
+
14184
+ postMountWrapper: function (inst) {
14185
+ // This is in postMount because we need access to the DOM node, which is not
14186
+ // available until after the component has mounted.
14187
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
14188
+
14189
+ // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
14190
+ node.value = node.textContent; // Detach value from defaultValue
14191
+ }
14192
+ };
14193
+
14194
+ function _handleChange(event) {
14195
+ var props = this._currentElement.props;
14196
+ var returnValue = LinkedValueUtils.executeOnChange(props, event);
14197
+ ReactUpdates.asap(forceUpdateIfMounted, this);
14198
+ return returnValue;
14199
+ }
14200
+
14201
+ module.exports = ReactDOMTextarea;
14202
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
14203
+
14204
+ /***/ },
14205
+ /* 118 */
14206
+ /***/ function(module, exports, __webpack_require__) {
14207
+
14208
+ /* WEBPACK VAR INJECTION */(function(process) {/**
14209
+ * Copyright 2013-present, Facebook, Inc.
14210
+ * All rights reserved.
14211
+ *
14212
+ * This source code is licensed under the BSD-style license found in the
14213
+ * LICENSE file in the root directory of this source tree. An additional grant
14214
+ * of patent rights can be found in the PATENTS file in the same directory.
14215
+ *
14216
+ * @providesModule ReactMultiChild
14217
+ */
14218
+
14219
+ 'use strict';
14220
+
14221
+ var _prodInvariant = __webpack_require__(8);
14222
+
14223
+ var ReactComponentEnvironment = __webpack_require__(119);
14224
+ var ReactInstanceMap = __webpack_require__(120);
14225
+ var ReactInstrumentation = __webpack_require__(63);
14226
+ var ReactMultiChildUpdateTypes = __webpack_require__(93);
14227
+
14228
+ var ReactCurrentOwner = __webpack_require__(11);
14229
+ var ReactReconciler = __webpack_require__(60);
14230
+ var ReactChildReconciler = __webpack_require__(121);
14231
+
14232
+ var emptyFunction = __webpack_require__(13);
14233
+ var flattenChildren = __webpack_require__(129);
14234
+ var invariant = __webpack_require__(9);
14235
+
14236
+ /**
14237
+ * Make an update for markup to be rendered and inserted at a supplied index.
14238
+ *
14239
+ * @param {string} markup Markup that renders into an element.
14240
+ * @param {number} toIndex Destination index.
14241
+ * @private
14242
+ */
14243
+ function makeInsertMarkup(markup, afterNode, toIndex) {
14244
+ // NOTE: Null values reduce hidden classes.
14245
+ return {
14246
+ type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
14247
+ content: markup,
14248
+ fromIndex: null,
14249
+ fromNode: null,
14250
+ toIndex: toIndex,
14251
+ afterNode: afterNode
14252
+ };
14253
+ }
14254
+
14255
+ /**
14256
+ * Make an update for moving an existing element to another index.
14257
+ *
14258
+ * @param {number} fromIndex Source index of the existing element.
14259
+ * @param {number} toIndex Destination index of the element.
14260
+ * @private
14261
+ */
14262
+ function makeMove(child, afterNode, toIndex) {
14263
+ // NOTE: Null values reduce hidden classes.
14264
+ return {
14265
+ type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
14266
+ content: null,
14267
+ fromIndex: child._mountIndex,
14268
+ fromNode: ReactReconciler.getHostNode(child),
14269
+ toIndex: toIndex,
14270
+ afterNode: afterNode
14271
+ };
14272
+ }
14273
+
14274
+ /**
14275
+ * Make an update for removing an element at an index.
14276
+ *
14277
+ * @param {number} fromIndex Index of the element to remove.
14278
+ * @private
14279
+ */
14280
+ function makeRemove(child, node) {
14281
+ // NOTE: Null values reduce hidden classes.
14282
+ return {
14283
+ type: ReactMultiChildUpdateTypes.REMOVE_NODE,
14284
+ content: null,
14285
+ fromIndex: child._mountIndex,
14286
+ fromNode: node,
14287
+ toIndex: null,
14288
+ afterNode: null
14289
+ };
14290
+ }
14291
+
14292
+ /**
14293
+ * Make an update for setting the markup of a node.
14294
+ *
14295
+ * @param {string} markup Markup that renders into an element.
14296
+ * @private
14297
+ */
14298
+ function makeSetMarkup(markup) {
14299
+ // NOTE: Null values reduce hidden classes.
14300
+ return {
14301
+ type: ReactMultiChildUpdateTypes.SET_MARKUP,
14302
+ content: markup,
14303
+ fromIndex: null,
14304
+ fromNode: null,
14305
+ toIndex: null,
14306
+ afterNode: null
14307
+ };
14308
+ }
14309
+
14310
+ /**
14311
+ * Make an update for setting the text content.
14312
+ *
14313
+ * @param {string} textContent Text content to set.
14314
+ * @private
14315
+ */
14316
+ function makeTextContent(textContent) {
14317
+ // NOTE: Null values reduce hidden classes.
14318
+ return {
14319
+ type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
14320
+ content: textContent,
14321
+ fromIndex: null,
14322
+ fromNode: null,
14323
+ toIndex: null,
14324
+ afterNode: null
14325
+ };
14326
+ }
14327
+
14328
+ /**
14329
+ * Push an update, if any, onto the queue. Creates a new queue if none is
14330
+ * passed and always returns the queue. Mutative.
14331
+ */
14332
+ function enqueue(queue, update) {
14333
+ if (update) {
14334
+ queue = queue || [];
14335
+ queue.push(update);
14336
+ }
14337
+ return queue;
14338
+ }
14339
+
14340
+ /**
14341
+ * Processes any enqueued updates.
14342
+ *
14343
+ * @private
14344
+ */
14345
+ function processQueue(inst, updateQueue) {
14346
+ ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
14347
+ }
14348
+
14349
+ var setChildrenForInstrumentation = emptyFunction;
14350
+ if (process.env.NODE_ENV !== 'production') {
14351
+ var getDebugID = function (inst) {
14352
+ if (!inst._debugID) {
14353
+ // Check for ART-like instances. TODO: This is silly/gross.
14354
+ var internal;
14355
+ if (internal = ReactInstanceMap.get(inst)) {
14356
+ inst = internal;
14357
+ }
14358
+ }
14359
+ return inst._debugID;
14360
+ };
14361
+ setChildrenForInstrumentation = function (children) {
14362
+ var debugID = getDebugID(this);
14363
+ // TODO: React Native empty components are also multichild.
14364
+ // This means they still get into this method but don't have _debugID.
14365
+ if (debugID !== 0) {
14366
+ ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {
14367
+ return children[key]._debugID;
14368
+ }) : []);
14369
+ }
14370
+ };
14371
+ }
14372
+
14373
+ /**
14374
+ * ReactMultiChild are capable of reconciling multiple children.
14375
+ *
14376
+ * @class ReactMultiChild
14377
+ * @internal
14378
+ */
14379
+ var ReactMultiChild = {
14380
+
14381
+ /**
14382
+ * Provides common functionality for components that must reconcile multiple
14383
+ * children. This is used by `ReactDOMComponent` to mount, update, and
14384
+ * unmount child components.
14385
+ *
14386
+ * @lends {ReactMultiChild.prototype}
14387
+ */
14388
+ Mixin: {
14389
+
14390
+ _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {
14391
+ if (process.env.NODE_ENV !== 'production') {
14392
+ var selfDebugID = getDebugID(this);
14393
+ if (this._currentElement) {
14394
+ try {
14395
+ ReactCurrentOwner.current = this._currentElement._owner;
14396
+ return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, selfDebugID);
14397
+ } finally {
14398
+ ReactCurrentOwner.current = null;
14399
+ }
14400
+ }
14401
+ }
14402
+ return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
14403
+ },
14404
+
14405
+ _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {
14406
+ var nextChildren;
14407
+ var selfDebugID = 0;
14408
+ if (process.env.NODE_ENV !== 'production') {
14409
+ selfDebugID = getDebugID(this);
14410
+ if (this._currentElement) {
14411
+ try {
14412
+ ReactCurrentOwner.current = this._currentElement._owner;
14413
+ nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);
14414
+ } finally {
14415
+ ReactCurrentOwner.current = null;
14416
+ }
14417
+ ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);
14418
+ return nextChildren;
14419
+ }
14420
+ }
14421
+ nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);
14422
+ ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);
14423
+ return nextChildren;
14424
+ },
14425
+
14426
+ /**
14427
+ * Generates a "mount image" for each of the supplied children. In the case
14428
+ * of `ReactDOMComponent`, a mount image is a string of markup.
14429
+ *
14430
+ * @param {?object} nestedChildren Nested child maps.
14431
+ * @return {array} An array of mounted representations.
14432
+ * @internal
14433
+ */
14434
+ mountChildren: function (nestedChildren, transaction, context) {
14435
+ var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
14436
+ this._renderedChildren = children;
14437
+
14438
+ var mountImages = [];
14439
+ var index = 0;
14440
+ for (var name in children) {
14441
+ if (children.hasOwnProperty(name)) {
14442
+ var child = children[name];
14443
+ var selfDebugID = 0;
14444
+ if (process.env.NODE_ENV !== 'production') {
14445
+ selfDebugID = getDebugID(this);
14446
+ }
14447
+ var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context, selfDebugID);
14448
+ child._mountIndex = index++;
14449
+ mountImages.push(mountImage);
14450
+ }
14451
+ }
14452
+
14453
+ if (process.env.NODE_ENV !== 'production') {
14454
+ setChildrenForInstrumentation.call(this, children);
14455
+ }
14456
+
14457
+ return mountImages;
14458
+ },
14459
+
14460
+ /**
14461
+ * Replaces any rendered children with a text content string.
14462
+ *
14463
+ * @param {string} nextContent String of content.
14464
+ * @internal
14465
+ */
14466
+ updateTextContent: function (nextContent) {
14467
+ var prevChildren = this._renderedChildren;
14468
+ // Remove any rendered children.
14469
+ ReactChildReconciler.unmountChildren(prevChildren, false);
14470
+ for (var name in prevChildren) {
14471
+ if (prevChildren.hasOwnProperty(name)) {
14472
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
14473
+ }
14474
+ }
14475
+ // Set new text content.
14476
+ var updates = [makeTextContent(nextContent)];
14477
+ processQueue(this, updates);
14478
+ },
14479
+
14480
+ /**
14481
+ * Replaces any rendered children with a markup string.
14482
+ *
14483
+ * @param {string} nextMarkup String of markup.
14484
+ * @internal
14485
+ */
14486
+ updateMarkup: function (nextMarkup) {
14487
+ var prevChildren = this._renderedChildren;
14488
+ // Remove any rendered children.
14489
+ ReactChildReconciler.unmountChildren(prevChildren, false);
14490
+ for (var name in prevChildren) {
14491
+ if (prevChildren.hasOwnProperty(name)) {
14492
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
14493
+ }
14494
+ }
14495
+ var updates = [makeSetMarkup(nextMarkup)];
14496
+ processQueue(this, updates);
14497
+ },
14498
+
14499
+ /**
14500
+ * Updates the rendered children with new children.
14501
+ *
14502
+ * @param {?object} nextNestedChildrenElements Nested child element maps.
14503
+ * @param {ReactReconcileTransaction} transaction
14504
+ * @internal
14505
+ */
14506
+ updateChildren: function (nextNestedChildrenElements, transaction, context) {
14507
+ // Hook used by React ART
14508
+ this._updateChildren(nextNestedChildrenElements, transaction, context);
14509
+ },
14510
+
14511
+ /**
14512
+ * @param {?object} nextNestedChildrenElements Nested child element maps.
14513
+ * @param {ReactReconcileTransaction} transaction
14514
+ * @final
14515
+ * @protected
14516
+ */
14517
+ _updateChildren: function (nextNestedChildrenElements, transaction, context) {
14518
+ var prevChildren = this._renderedChildren;
14519
+ var removedNodes = {};
14520
+ var mountImages = [];
14521
+ var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);
14522
+ if (!nextChildren && !prevChildren) {
14523
+ return;
14524
+ }
14525
+ var updates = null;
14526
+ var name;
14527
+ // `nextIndex` will increment for each child in `nextChildren`, but
14528
+ // `lastIndex` will be the last index visited in `prevChildren`.
14529
+ var nextIndex = 0;
14530
+ var lastIndex = 0;
14531
+ // `nextMountIndex` will increment for each newly mounted child.
14532
+ var nextMountIndex = 0;
14533
+ var lastPlacedNode = null;
14534
+ for (name in nextChildren) {
14535
+ if (!nextChildren.hasOwnProperty(name)) {
14536
+ continue;
14537
+ }
14538
+ var prevChild = prevChildren && prevChildren[name];
14539
+ var nextChild = nextChildren[name];
14540
+ if (prevChild === nextChild) {
14541
+ updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));
14542
+ lastIndex = Math.max(prevChild._mountIndex, lastIndex);
14543
+ prevChild._mountIndex = nextIndex;
14544
+ } else {
14545
+ if (prevChild) {
14546
+ // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
14547
+ lastIndex = Math.max(prevChild._mountIndex, lastIndex);
14548
+ // The `removedNodes` loop below will actually remove the child.
14549
+ }
14550
+ // The child must be instantiated before it's mounted.
14551
+ updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));
14552
+ nextMountIndex++;
14553
+ }
14554
+ nextIndex++;
14555
+ lastPlacedNode = ReactReconciler.getHostNode(nextChild);
14556
+ }
14557
+ // Remove children that are no longer present.
14558
+ for (name in removedNodes) {
14559
+ if (removedNodes.hasOwnProperty(name)) {
14560
+ updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));
14561
+ }
14562
+ }
14563
+ if (updates) {
14564
+ processQueue(this, updates);
14565
+ }
14566
+ this._renderedChildren = nextChildren;
14567
+
14568
+ if (process.env.NODE_ENV !== 'production') {
14569
+ setChildrenForInstrumentation.call(this, nextChildren);
14570
+ }
14571
+ },
14572
+
14573
+ /**
14574
+ * Unmounts all rendered children. This should be used to clean up children
14575
+ * when this component is unmounted. It does not actually perform any
14576
+ * backend operations.
14577
+ *
14578
+ * @internal
14579
+ */
14580
+ unmountChildren: function (safely) {
14581
+ var renderedChildren = this._renderedChildren;
14582
+ ReactChildReconciler.unmountChildren(renderedChildren, safely);
14583
+ this._renderedChildren = null;
14584
+ },
14585
+
14586
+ /**
14587
+ * Moves a child component to the supplied index.
14588
+ *
14589
+ * @param {ReactComponent} child Component to move.
14590
+ * @param {number} toIndex Destination index of the element.
14591
+ * @param {number} lastIndex Last index visited of the siblings of `child`.
14592
+ * @protected
14593
+ */
14594
+ moveChild: function (child, afterNode, toIndex, lastIndex) {
14595
+ // If the index of `child` is less than `lastIndex`, then it needs to
14596
+ // be moved. Otherwise, we do not need to move it because a child will be
14597
+ // inserted or moved before `child`.
14598
+ if (child._mountIndex < lastIndex) {
14599
+ return makeMove(child, afterNode, toIndex);
14600
+ }
14601
+ },
14602
+
14603
+ /**
14604
+ * Creates a child component.
14605
+ *
14606
+ * @param {ReactComponent} child Component to create.
14607
+ * @param {string} mountImage Markup to insert.
14608
+ * @protected
14609
+ */
14610
+ createChild: function (child, afterNode, mountImage) {
14611
+ return makeInsertMarkup(mountImage, afterNode, child._mountIndex);
14612
+ },
14613
+
14614
+ /**
14615
+ * Removes a child component.
14616
+ *
14617
+ * @param {ReactComponent} child Child to remove.
14618
+ * @protected
14619
+ */
14620
+ removeChild: function (child, node) {
14621
+ return makeRemove(child, node);
14622
+ },
14623
+
14624
+ /**
14625
+ * Mounts a child with the supplied name.
14626
+ *
14627
+ * NOTE: This is part of `updateChildren` and is here for readability.
14628
+ *
14629
+ * @param {ReactComponent} child Component to mount.
14630
+ * @param {string} name Name of the child.
14631
+ * @param {number} index Index at which to insert the child.
14632
+ * @param {ReactReconcileTransaction} transaction
14633
+ * @private
14634
+ */
14635
+ _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {
14636
+ child._mountIndex = index;
14637
+ return this.createChild(child, afterNode, mountImage);
14638
+ },
14639
+
14640
+ /**
14641
+ * Unmounts a rendered child.
14642
+ *
14643
+ * NOTE: This is part of `updateChildren` and is here for readability.
14644
+ *
14645
+ * @param {ReactComponent} child Component to unmount.
14646
+ * @private
14647
+ */
14648
+ _unmountChild: function (child, node) {
14649
+ var update = this.removeChild(child, node);
14650
+ child._mountIndex = null;
14651
+ return update;
14652
+ }
14653
+
14654
+ }
14655
+
14656
+ };
14657
+
14658
+ module.exports = ReactMultiChild;
14659
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
14660
+
14661
+ /***/ },
14662
+ /* 119 */
14663
+ /***/ function(module, exports, __webpack_require__) {
14664
+
14665
+ /* WEBPACK VAR INJECTION */(function(process) {/**
14666
+ * Copyright 2014-present, Facebook, Inc.
14667
+ * All rights reserved.
14668
+ *
14669
+ * This source code is licensed under the BSD-style license found in the
14670
+ * LICENSE file in the root directory of this source tree. An additional grant
14671
+ * of patent rights can be found in the PATENTS file in the same directory.
14672
+ *
14673
+ * @providesModule ReactComponentEnvironment
14674
+ */
14675
+
14676
+ 'use strict';
14677
+
14678
+ var _prodInvariant = __webpack_require__(8);
14679
+
14680
+ var invariant = __webpack_require__(9);
14681
+
14682
+ var injected = false;
14683
+
14684
+ var ReactComponentEnvironment = {
14685
+
14686
+ /**
14687
+ * Optionally injectable hook for swapping out mount images in the middle of
14688
+ * the tree.
14689
+ */
14690
+ replaceNodeWithMarkup: null,
14691
+
14692
+ /**
14693
+ * Optionally injectable hook for processing a queue of child updates. Will
14694
+ * later move into MultiChildComponents.
14695
+ */
14696
+ processChildrenUpdates: null,
14697
+
14698
+ injection: {
14699
+ injectEnvironment: function (environment) {
14700
+ !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;
14701
+ ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;
14702
+ ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
14703
+ injected = true;
14704
+ }
14705
+ }
14706
+
14707
+ };
14708
+
14709
+ module.exports = ReactComponentEnvironment;
14710
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
14711
+
14712
+ /***/ },
14713
+ /* 120 */
14714
+ /***/ function(module, exports) {
14715
+
14716
+ /**
14717
+ * Copyright 2013-present, Facebook, Inc.
14718
+ * All rights reserved.
14719
+ *
14720
+ * This source code is licensed under the BSD-style license found in the
14721
+ * LICENSE file in the root directory of this source tree. An additional grant
14722
+ * of patent rights can be found in the PATENTS file in the same directory.
14723
+ *
14724
+ * @providesModule ReactInstanceMap
14725
+ */
14726
+
14727
+ 'use strict';
14728
+
14729
+ /**
14730
+ * `ReactInstanceMap` maintains a mapping from a public facing stateful
14731
+ * instance (key) and the internal representation (value). This allows public
14732
+ * methods to accept the user facing instance as an argument and map them back
14733
+ * to internal methods.
14734
+ */
14735
+
14736
+ // TODO: Replace this with ES6: var ReactInstanceMap = new Map();
14737
+
14738
+ var ReactInstanceMap = {
14739
+
14740
+ /**
14741
+ * This API should be called `delete` but we'd have to make sure to always
14742
+ * transform these to strings for IE support. When this transform is fully
14743
+ * supported we can rename it.
14744
+ */
14745
+ remove: function (key) {
14746
+ key._reactInternalInstance = undefined;
14747
+ },
14748
+
14749
+ get: function (key) {
14750
+ return key._reactInternalInstance;
14751
+ },
14752
+
14753
+ has: function (key) {
14754
+ return key._reactInternalInstance !== undefined;
14755
+ },
14756
+
14757
+ set: function (key, value) {
14758
+ key._reactInternalInstance = value;
14759
+ }
14760
+
14761
+ };
14762
+
14763
+ module.exports = ReactInstanceMap;
14764
+
14765
+ /***/ },
14766
+ /* 121 */
14767
+ /***/ function(module, exports, __webpack_require__) {
14768
+
14769
+ /* WEBPACK VAR INJECTION */(function(process) {/**
14770
+ * Copyright 2014-present, Facebook, Inc.
14771
+ * All rights reserved.
14772
+ *
14773
+ * This source code is licensed under the BSD-style license found in the
14774
+ * LICENSE file in the root directory of this source tree. An additional grant
14775
+ * of patent rights can be found in the PATENTS file in the same directory.
14776
+ *
14777
+ * @providesModule ReactChildReconciler
14778
+ */
14779
+
14780
+ 'use strict';
14781
+
14782
+ var ReactReconciler = __webpack_require__(60);
14783
+
14784
+ var instantiateReactComponent = __webpack_require__(122);
14785
+ var KeyEscapeUtils = __webpack_require__(17);
14786
+ var shouldUpdateReactComponent = __webpack_require__(126);
14787
+ var traverseAllChildren = __webpack_require__(15);
14788
+ var warning = __webpack_require__(12);
14789
+
14790
+ var ReactComponentTreeHook;
14791
+
14792
+ if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
14793
+ // Temporary hack.
14794
+ // Inline requires don't work well with Jest:
14795
+ // https://github.com/facebook/react/issues/7240
14796
+ // Remove the inline requires when we don't need them anymore:
14797
+ // https://github.com/facebook/react/pull/7178
14798
+ ReactComponentTreeHook = __webpack_require__(29);
14799
+ }
14800
+
14801
+ function instantiateChild(childInstances, child, name, selfDebugID) {
14802
+ // We found a component instance.
14803
+ var keyUnique = childInstances[name] === undefined;
14804
+ if (process.env.NODE_ENV !== 'production') {
14805
+ if (!ReactComponentTreeHook) {
14806
+ ReactComponentTreeHook = __webpack_require__(29);
14807
+ }
14808
+ if (!keyUnique) {
14809
+ process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
14810
+ }
14811
+ }
14812
+ if (child != null && keyUnique) {
14813
+ childInstances[name] = instantiateReactComponent(child, true);
14814
+ }
14815
+ }
14816
+
14817
+ /**
14818
+ * ReactChildReconciler provides helpers for initializing or updating a set of
14819
+ * children. Its output is suitable for passing it onto ReactMultiChild which
14820
+ * does diffed reordering and insertion.
14821
+ */
14822
+ var ReactChildReconciler = {
14823
+ /**
14824
+ * Generates a "mount image" for each of the supplied children. In the case
14825
+ * of `ReactDOMComponent`, a mount image is a string of markup.
14826
+ *
14827
+ * @param {?object} nestedChildNodes Nested child maps.
14828
+ * @return {?object} A set of child instances.
14829
+ * @internal
14830
+ */
14831
+ instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // 0 in production and for roots
14832
+ ) {
14833
+ if (nestedChildNodes == null) {
14834
+ return null;
14835
+ }
14836
+ var childInstances = {};
14837
+
14838
+ if (process.env.NODE_ENV !== 'production') {
14839
+ traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {
14840
+ return instantiateChild(childInsts, child, name, selfDebugID);
14841
+ }, childInstances);
14842
+ } else {
14843
+ traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
14844
+ }
14845
+ return childInstances;
14846
+ },
14847
+
14848
+ /**
14849
+ * Updates the rendered children and returns a new set of children.
14850
+ *
14851
+ * @param {?object} prevChildren Previously initialized set of children.
14852
+ * @param {?object} nextChildren Flat child element maps.
14853
+ * @param {ReactReconcileTransaction} transaction
14854
+ * @param {object} context
14855
+ * @return {?object} A new set of child instances.
14856
+ * @internal
14857
+ */
14858
+ updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID // 0 in production and for roots
14859
+ ) {
14860
+ // We currently don't have a way to track moves here but if we use iterators
14861
+ // instead of for..in we can zip the iterators and check if an item has
14862
+ // moved.
14863
+ // TODO: If nothing has changed, return the prevChildren object so that we
14864
+ // can quickly bailout if nothing has changed.
14865
+ if (!nextChildren && !prevChildren) {
14866
+ return;
14867
+ }
14868
+ var name;
14869
+ var prevChild;
14870
+ for (name in nextChildren) {
14871
+ if (!nextChildren.hasOwnProperty(name)) {
14872
+ continue;
14873
+ }
14874
+ prevChild = prevChildren && prevChildren[name];
14875
+ var prevElement = prevChild && prevChild._currentElement;
14876
+ var nextElement = nextChildren[name];
14877
+ if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {
14878
+ ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);
14879
+ nextChildren[name] = prevChild;
14880
+ } else {
14881
+ if (prevChild) {
14882
+ removedNodes[name] = ReactReconciler.getHostNode(prevChild);
14883
+ ReactReconciler.unmountComponent(prevChild, false);
14884
+ }
14885
+ // The child must be instantiated before it's mounted.
14886
+ var nextChildInstance = instantiateReactComponent(nextElement, true);
14887
+ nextChildren[name] = nextChildInstance;
14888
+ // Creating mount image now ensures refs are resolved in right order
14889
+ // (see https://github.com/facebook/react/pull/7101 for explanation).
14890
+ var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID);
14891
+ mountImages.push(nextChildMountImage);
14892
+ }
14893
+ }
14894
+ // Unmount children that are no longer present.
14895
+ for (name in prevChildren) {
14896
+ if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
14897
+ prevChild = prevChildren[name];
14898
+ removedNodes[name] = ReactReconciler.getHostNode(prevChild);
14899
+ ReactReconciler.unmountComponent(prevChild, false);
14900
+ }
14901
+ }
14902
+ },
14903
+
14904
+ /**
14905
+ * Unmounts all rendered children. This should be used to clean up children
14906
+ * when this component is unmounted.
14907
+ *
14908
+ * @param {?object} renderedChildren Previously initialized set of children.
14909
+ * @internal
14910
+ */
14911
+ unmountChildren: function (renderedChildren, safely) {
14912
+ for (var name in renderedChildren) {
14913
+ if (renderedChildren.hasOwnProperty(name)) {
14914
+ var renderedChild = renderedChildren[name];
14915
+ ReactReconciler.unmountComponent(renderedChild, safely);
14916
+ }
14917
+ }
14918
+ }
14919
+
14920
+ };
14921
+
14922
+ module.exports = ReactChildReconciler;
14923
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
14924
+
14925
+ /***/ },
14926
+ /* 122 */
14927
+ /***/ function(module, exports, __webpack_require__) {
14928
+
14929
+ /* WEBPACK VAR INJECTION */(function(process) {/**
14930
+ * Copyright 2013-present, Facebook, Inc.
14931
+ * All rights reserved.
14932
+ *
14933
+ * This source code is licensed under the BSD-style license found in the
14934
+ * LICENSE file in the root directory of this source tree. An additional grant
14935
+ * of patent rights can be found in the PATENTS file in the same directory.
14936
+ *
14937
+ * @providesModule instantiateReactComponent
14938
+ */
14939
+
14940
+ 'use strict';
14941
+
14942
+ var _prodInvariant = __webpack_require__(8),
14943
+ _assign = __webpack_require__(5);
14944
+
14945
+ var ReactCompositeComponent = __webpack_require__(123);
14946
+ var ReactEmptyComponent = __webpack_require__(127);
14947
+ var ReactHostComponent = __webpack_require__(128);
14948
+
14949
+ var invariant = __webpack_require__(9);
14950
+ var warning = __webpack_require__(12);
14951
+
14952
+ // To avoid a cyclic dependency, we create the final class in this module
14953
+ var ReactCompositeComponentWrapper = function (element) {
14954
+ this.construct(element);
14955
+ };
14956
+ _assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
14957
+ _instantiateReactComponent: instantiateReactComponent
14958
+ });
14959
+
14960
+ function getDeclarationErrorAddendum(owner) {
14961
+ if (owner) {
14962
+ var name = owner.getName();
14963
+ if (name) {
14964
+ return ' Check the render method of `' + name + '`.';
14965
+ }
14966
+ }
14967
+ return '';
14968
+ }
14969
+
14970
+ /**
14971
+ * Check if the type reference is a known internal type. I.e. not a user
14972
+ * provided composite type.
14973
+ *
14974
+ * @param {function} type
14975
+ * @return {boolean} Returns true if this is a valid internal type.
14976
+ */
14977
+ function isInternalComponentType(type) {
14978
+ return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
14979
+ }
14980
+
14981
+ var nextDebugID = 1;
14982
+
14983
+ /**
14984
+ * Given a ReactNode, create an instance that will actually be mounted.
14985
+ *
14986
+ * @param {ReactNode} node
14987
+ * @param {boolean} shouldHaveDebugID
14988
+ * @return {object} A new instance of the element's constructor.
14989
+ * @protected
14990
+ */
14991
+ function instantiateReactComponent(node, shouldHaveDebugID) {
14992
+ var instance;
14993
+
14994
+ if (node === null || node === false) {
14995
+ instance = ReactEmptyComponent.create(instantiateReactComponent);
14996
+ } else if (typeof node === 'object') {
14997
+ var element = node;
14998
+ !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
14999
+
15000
+ // Special case string values
15001
+ if (typeof element.type === 'string') {
15002
+ instance = ReactHostComponent.createInternalComponent(element);
15003
+ } else if (isInternalComponentType(element.type)) {
15004
+ // This is temporarily available for custom components that are not string
15005
+ // representations. I.e. ART. Once those are updated to use the string
15006
+ // representation, we can drop this code path.
15007
+ instance = new element.type(element);
15008
+
15009
+ // We renamed this. Allow the old name for compat. :(
15010
+ if (!instance.getHostNode) {
15011
+ instance.getHostNode = instance.getNativeNode;
15012
+ }
15013
+ } else {
15014
+ instance = new ReactCompositeComponentWrapper(element);
15015
+ }
15016
+ } else if (typeof node === 'string' || typeof node === 'number') {
15017
+ instance = ReactHostComponent.createInstanceForText(node);
15018
+ } else {
15019
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;
15020
+ }
15021
+
15022
+ if (process.env.NODE_ENV !== 'production') {
15023
+ process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
15024
+ }
15025
+
15026
+ // These two fields are used by the DOM and ART diffing algorithms
15027
+ // respectively. Instead of using expandos on components, we should be
15028
+ // storing the state needed by the diffing algorithms elsewhere.
15029
+ instance._mountIndex = 0;
15030
+ instance._mountImage = null;
15031
+
15032
+ if (process.env.NODE_ENV !== 'production') {
15033
+ instance._debugID = shouldHaveDebugID ? nextDebugID++ : 0;
15034
+ }
15035
+
15036
+ // Internal instances should fully constructed at this point, so they should
15037
+ // not get any new fields added to them at this point.
15038
+ if (process.env.NODE_ENV !== 'production') {
15039
+ if (Object.preventExtensions) {
15040
+ Object.preventExtensions(instance);
15041
+ }
15042
+ }
15043
+
15044
+ return instance;
15045
+ }
15046
+
15047
+ module.exports = instantiateReactComponent;
15048
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
15049
+
15050
+ /***/ },
15051
+ /* 123 */
15052
+ /***/ function(module, exports, __webpack_require__) {
15053
+
15054
+ /* WEBPACK VAR INJECTION */(function(process) {/**
15055
+ * Copyright 2013-present, Facebook, Inc.
15056
+ * All rights reserved.
15057
+ *
15058
+ * This source code is licensed under the BSD-style license found in the
15059
+ * LICENSE file in the root directory of this source tree. An additional grant
15060
+ * of patent rights can be found in the PATENTS file in the same directory.
15061
+ *
15062
+ * @providesModule ReactCompositeComponent
15063
+ */
15064
+
15065
+ 'use strict';
15066
+
15067
+ var _prodInvariant = __webpack_require__(8),
15068
+ _assign = __webpack_require__(5);
15069
+
15070
+ var ReactComponentEnvironment = __webpack_require__(119);
15071
+ var ReactCurrentOwner = __webpack_require__(11);
15072
+ var ReactElement = __webpack_require__(10);
15073
+ var ReactErrorUtils = __webpack_require__(47);
15074
+ var ReactInstanceMap = __webpack_require__(120);
15075
+ var ReactInstrumentation = __webpack_require__(63);
15076
+ var ReactNodeTypes = __webpack_require__(124);
15077
+ var ReactPropTypeLocations = __webpack_require__(23);
15078
+ var ReactReconciler = __webpack_require__(60);
15079
+
15080
+ var checkReactTypeSpec = __webpack_require__(30);
15081
+ var emptyObject = __webpack_require__(20);
15082
+ var invariant = __webpack_require__(9);
15083
+ var shallowEqual = __webpack_require__(125);
15084
+ var shouldUpdateReactComponent = __webpack_require__(126);
15085
+ var warning = __webpack_require__(12);
15086
+
15087
+ var CompositeTypes = {
15088
+ ImpureClass: 0,
15089
+ PureClass: 1,
15090
+ StatelessFunctional: 2
15091
+ };
15092
+
15093
+ function StatelessComponent(Component) {}
15094
+ StatelessComponent.prototype.render = function () {
15095
+ var Component = ReactInstanceMap.get(this)._currentElement.type;
15096
+ var element = Component(this.props, this.context, this.updater);
15097
+ warnIfInvalidElement(Component, element);
15098
+ return element;
15099
+ };
15100
+
15101
+ function warnIfInvalidElement(Component, element) {
15102
+ if (process.env.NODE_ENV !== 'production') {
15103
+ process.env.NODE_ENV !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;
15104
+ process.env.NODE_ENV !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;
15105
+ }
15106
+ }
15107
+
15108
+ function shouldConstruct(Component) {
15109
+ return !!(Component.prototype && Component.prototype.isReactComponent);
15110
+ }
15111
+
15112
+ function isPureComponent(Component) {
15113
+ return !!(Component.prototype && Component.prototype.isPureReactComponent);
15114
+ }
15115
+
15116
+ // Separated into a function to contain deoptimizations caused by try/finally.
15117
+ function measureLifeCyclePerf(fn, debugID, timerType) {
15118
+ if (debugID === 0) {
15119
+ // Top-level wrappers (see ReactMount) and empty components (see
15120
+ // ReactDOMEmptyComponent) are invisible to hooks and devtools.
15121
+ // Both are implementation details that should go away in the future.
15122
+ return fn();
15123
+ }
15124
+
15125
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(debugID, timerType);
15126
+ try {
15127
+ return fn();
15128
+ } finally {
15129
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(debugID, timerType);
15130
+ }
15131
+ }
15132
+
15133
+ /**
15134
+ * ------------------ The Life-Cycle of a Composite Component ------------------
15135
+ *
15136
+ * - constructor: Initialization of state. The instance is now retained.
15137
+ * - componentWillMount
15138
+ * - render
15139
+ * - [children's constructors]
15140
+ * - [children's componentWillMount and render]
15141
+ * - [children's componentDidMount]
15142
+ * - componentDidMount
15143
+ *
15144
+ * Update Phases:
15145
+ * - componentWillReceiveProps (only called if parent updated)
15146
+ * - shouldComponentUpdate
15147
+ * - componentWillUpdate
15148
+ * - render
15149
+ * - [children's constructors or receive props phases]
15150
+ * - componentDidUpdate
15151
+ *
15152
+ * - componentWillUnmount
15153
+ * - [children's componentWillUnmount]
15154
+ * - [children destroyed]
15155
+ * - (destroyed): The instance is now blank, released by React and ready for GC.
15156
+ *
15157
+ * -----------------------------------------------------------------------------
15158
+ */
15159
+
15160
+ /**
15161
+ * An incrementing ID assigned to each component when it is mounted. This is
15162
+ * used to enforce the order in which `ReactUpdates` updates dirty components.
15163
+ *
15164
+ * @private
15165
+ */
15166
+ var nextMountID = 1;
15167
+
15168
+ /**
15169
+ * @lends {ReactCompositeComponent.prototype}
15170
+ */
15171
+ var ReactCompositeComponentMixin = {
15172
+
15173
+ /**
15174
+ * Base constructor for all composite component.
15175
+ *
15176
+ * @param {ReactElement} element
15177
+ * @final
15178
+ * @internal
15179
+ */
15180
+ construct: function (element) {
15181
+ this._currentElement = element;
15182
+ this._rootNodeID = 0;
15183
+ this._compositeType = null;
15184
+ this._instance = null;
15185
+ this._hostParent = null;
15186
+ this._hostContainerInfo = null;
15187
+
15188
+ // See ReactUpdateQueue
15189
+ this._updateBatchNumber = null;
15190
+ this._pendingElement = null;
15191
+ this._pendingStateQueue = null;
15192
+ this._pendingReplaceState = false;
15193
+ this._pendingForceUpdate = false;
15194
+
15195
+ this._renderedNodeType = null;
15196
+ this._renderedComponent = null;
15197
+ this._context = null;
15198
+ this._mountOrder = 0;
15199
+ this._topLevelWrapper = null;
15200
+
15201
+ // See ReactUpdates and ReactUpdateQueue.
15202
+ this._pendingCallbacks = null;
15203
+
15204
+ // ComponentWillUnmount shall only be called once
15205
+ this._calledComponentWillUnmount = false;
15206
+
15207
+ if (process.env.NODE_ENV !== 'production') {
15208
+ this._warnedAboutRefsInRender = false;
15209
+ }
15210
+ },
15211
+
15212
+ /**
15213
+ * Initializes the component, renders markup, and registers event listeners.
15214
+ *
15215
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
15216
+ * @param {?object} hostParent
15217
+ * @param {?object} hostContainerInfo
15218
+ * @param {?object} context
15219
+ * @return {?string} Rendered markup to be inserted into the DOM.
15220
+ * @final
15221
+ * @internal
15222
+ */
15223
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
15224
+ var _this = this;
15225
+
15226
+ this._context = context;
15227
+ this._mountOrder = nextMountID++;
15228
+ this._hostParent = hostParent;
15229
+ this._hostContainerInfo = hostContainerInfo;
15230
+
15231
+ var publicProps = this._currentElement.props;
15232
+ var publicContext = this._processContext(context);
15233
+
15234
+ var Component = this._currentElement.type;
15235
+
15236
+ var updateQueue = transaction.getUpdateQueue();
15237
+
15238
+ // Initialize the public class
15239
+ var doConstruct = shouldConstruct(Component);
15240
+ var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);
15241
+ var renderedElement;
15242
+
15243
+ // Support functional components
15244
+ if (!doConstruct && (inst == null || inst.render == null)) {
15245
+ renderedElement = inst;
15246
+ warnIfInvalidElement(Component, renderedElement);
15247
+ !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;
15248
+ inst = new StatelessComponent(Component);
15249
+ this._compositeType = CompositeTypes.StatelessFunctional;
15250
+ } else {
15251
+ if (isPureComponent(Component)) {
15252
+ this._compositeType = CompositeTypes.PureClass;
15253
+ } else {
15254
+ this._compositeType = CompositeTypes.ImpureClass;
15255
+ }
15256
+ }
15257
+
15258
+ if (process.env.NODE_ENV !== 'production') {
15259
+ // This will throw later in _renderValidatedComponent, but add an early
15260
+ // warning now to help debugging
15261
+ if (inst.render == null) {
15262
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;
15263
+ }
15264
+
15265
+ var propsMutated = inst.props !== publicProps;
15266
+ var componentName = Component.displayName || Component.name || 'Component';
15267
+
15268
+ process.env.NODE_ENV !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\'s constructor was passed.', componentName, componentName) : void 0;
15269
+ }
15270
+
15271
+ // These should be set up in the constructor, but as a convenience for
15272
+ // simpler class abstractions, we set them up after the fact.
15273
+ inst.props = publicProps;
15274
+ inst.context = publicContext;
15275
+ inst.refs = emptyObject;
15276
+ inst.updater = updateQueue;
15277
+
15278
+ this._instance = inst;
15279
+
15280
+ // Store a reference from the instance back to the internal representation
15281
+ ReactInstanceMap.set(inst, this);
15282
+
15283
+ if (process.env.NODE_ENV !== 'production') {
15284
+ // Since plain JS classes are defined without any special initialization
15285
+ // logic, we can not catch common errors early. Therefore, we have to
15286
+ // catch them here, at initialization time, instead.
15287
+ process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
15288
+ process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
15289
+ process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
15290
+ process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
15291
+ process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;
15292
+ process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;
15293
+ process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;
15294
+ }
15295
+
15296
+ var initialState = inst.state;
15297
+ if (initialState === undefined) {
15298
+ inst.state = initialState = null;
15299
+ }
15300
+ !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;
15301
+
15302
+ this._pendingStateQueue = null;
15303
+ this._pendingReplaceState = false;
15304
+ this._pendingForceUpdate = false;
15305
+
15306
+ var markup;
15307
+ if (inst.unstable_handleError) {
15308
+ markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);
15309
+ } else {
15310
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
15311
+ }
15312
+
15313
+ if (inst.componentDidMount) {
15314
+ if (process.env.NODE_ENV !== 'production') {
15315
+ transaction.getReactMountReady().enqueue(function () {
15316
+ measureLifeCyclePerf(function () {
15317
+ return inst.componentDidMount();
15318
+ }, _this._debugID, 'componentDidMount');
15319
+ });
15320
+ } else {
15321
+ transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
15322
+ }
15323
+ }
15324
+
15325
+ return markup;
15326
+ },
15327
+
15328
+ _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {
15329
+ if (process.env.NODE_ENV !== 'production') {
15330
+ ReactCurrentOwner.current = this;
15331
+ try {
15332
+ return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
15333
+ } finally {
15334
+ ReactCurrentOwner.current = null;
15335
+ }
15336
+ } else {
15337
+ return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);
15338
+ }
15339
+ },
15340
+
15341
+ _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {
15342
+ var Component = this._currentElement.type;
15343
+
15344
+ if (doConstruct) {
15345
+ if (process.env.NODE_ENV !== 'production') {
15346
+ return measureLifeCyclePerf(function () {
15347
+ return new Component(publicProps, publicContext, updateQueue);
15348
+ }, this._debugID, 'ctor');
15349
+ } else {
15350
+ return new Component(publicProps, publicContext, updateQueue);
15351
+ }
15352
+ }
15353
+
15354
+ // This can still be an instance in case of factory components
15355
+ // but we'll count this as time spent rendering as the more common case.
15356
+ if (process.env.NODE_ENV !== 'production') {
15357
+ return measureLifeCyclePerf(function () {
15358
+ return Component(publicProps, publicContext, updateQueue);
15359
+ }, this._debugID, 'render');
15360
+ } else {
15361
+ return Component(publicProps, publicContext, updateQueue);
15362
+ }
15363
+ },
15364
+
15365
+ performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
15366
+ var markup;
15367
+ var checkpoint = transaction.checkpoint();
15368
+ try {
15369
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
15370
+ } catch (e) {
15371
+ // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint
15372
+ transaction.rollback(checkpoint);
15373
+ this._instance.unstable_handleError(e);
15374
+ if (this._pendingStateQueue) {
15375
+ this._instance.state = this._processPendingState(this._instance.props, this._instance.context);
15376
+ }
15377
+ checkpoint = transaction.checkpoint();
15378
+
15379
+ this._renderedComponent.unmountComponent(true);
15380
+ transaction.rollback(checkpoint);
15381
+
15382
+ // Try again - we've informed the component about the error, so they can render an error message this time.
15383
+ // If this throws again, the error will bubble up (and can be caught by a higher error boundary).
15384
+ markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
15385
+ }
15386
+ return markup;
15387
+ },
15388
+
15389
+ performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
15390
+ var inst = this._instance;
15391
+
15392
+ var debugID = 0;
15393
+ if (process.env.NODE_ENV !== 'production') {
15394
+ debugID = this._debugID;
15395
+ }
15396
+
15397
+ if (inst.componentWillMount) {
15398
+ if (process.env.NODE_ENV !== 'production') {
15399
+ measureLifeCyclePerf(function () {
15400
+ return inst.componentWillMount();
15401
+ }, debugID, 'componentWillMount');
15402
+ } else {
15403
+ inst.componentWillMount();
15404
+ }
15405
+ // When mounting, calls to `setState` by `componentWillMount` will set
15406
+ // `this._pendingStateQueue` without triggering a re-render.
15407
+ if (this._pendingStateQueue) {
15408
+ inst.state = this._processPendingState(inst.props, inst.context);
15409
+ }
15410
+ }
15411
+
15412
+ // If not a stateless component, we now render
15413
+ if (renderedElement === undefined) {
15414
+ renderedElement = this._renderValidatedComponent();
15415
+ }
15416
+
15417
+ var nodeType = ReactNodeTypes.getType(renderedElement);
15418
+ this._renderedNodeType = nodeType;
15419
+ var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
15420
+ );
15421
+ this._renderedComponent = child;
15422
+
15423
+ var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context), debugID);
15424
+
15425
+ if (process.env.NODE_ENV !== 'production') {
15426
+ if (debugID !== 0) {
15427
+ var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];
15428
+ ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);
15429
+ }
15430
+ }
15431
+
15432
+ return markup;
15433
+ },
15434
+
15435
+ getHostNode: function () {
15436
+ return ReactReconciler.getHostNode(this._renderedComponent);
15437
+ },
15438
+
15439
+ /**
15440
+ * Releases any resources allocated by `mountComponent`.
15441
+ *
15442
+ * @final
15443
+ * @internal
15444
+ */
15445
+ unmountComponent: function (safely) {
15446
+ if (!this._renderedComponent) {
15447
+ return;
15448
+ }
15449
+
15450
+ var inst = this._instance;
15451
+
15452
+ if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {
15453
+ inst._calledComponentWillUnmount = true;
15454
+
15455
+ if (safely) {
15456
+ var name = this.getName() + '.componentWillUnmount()';
15457
+ ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));
15458
+ } else {
15459
+ if (process.env.NODE_ENV !== 'production') {
15460
+ measureLifeCyclePerf(function () {
15461
+ return inst.componentWillUnmount();
15462
+ }, this._debugID, 'componentWillUnmount');
15463
+ } else {
15464
+ inst.componentWillUnmount();
15465
+ }
15466
+ }
15467
+ }
15468
+
15469
+ if (this._renderedComponent) {
15470
+ ReactReconciler.unmountComponent(this._renderedComponent, safely);
15471
+ this._renderedNodeType = null;
15472
+ this._renderedComponent = null;
15473
+ this._instance = null;
15474
+ }
15475
+
15476
+ // Reset pending fields
15477
+ // Even if this component is scheduled for another update in ReactUpdates,
15478
+ // it would still be ignored because these fields are reset.
15479
+ this._pendingStateQueue = null;
15480
+ this._pendingReplaceState = false;
15481
+ this._pendingForceUpdate = false;
15482
+ this._pendingCallbacks = null;
15483
+ this._pendingElement = null;
15484
+
15485
+ // These fields do not really need to be reset since this object is no
15486
+ // longer accessible.
15487
+ this._context = null;
15488
+ this._rootNodeID = 0;
15489
+ this._topLevelWrapper = null;
15490
+
15491
+ // Delete the reference from the instance to this internal representation
15492
+ // which allow the internals to be properly cleaned up even if the user
15493
+ // leaks a reference to the public instance.
15494
+ ReactInstanceMap.remove(inst);
15495
+
15496
+ // Some existing components rely on inst.props even after they've been
15497
+ // destroyed (in event handlers).
15498
+ // TODO: inst.props = null;
15499
+ // TODO: inst.state = null;
15500
+ // TODO: inst.context = null;
15501
+ },
15502
+
15503
+ /**
15504
+ * Filters the context object to only contain keys specified in
15505
+ * `contextTypes`
15506
+ *
15507
+ * @param {object} context
15508
+ * @return {?object}
15509
+ * @private
15510
+ */
15511
+ _maskContext: function (context) {
15512
+ var Component = this._currentElement.type;
15513
+ var contextTypes = Component.contextTypes;
15514
+ if (!contextTypes) {
15515
+ return emptyObject;
15516
+ }
15517
+ var maskedContext = {};
15518
+ for (var contextName in contextTypes) {
15519
+ maskedContext[contextName] = context[contextName];
15520
+ }
15521
+ return maskedContext;
15522
+ },
15523
+
15524
+ /**
15525
+ * Filters the context object to only contain keys specified in
15526
+ * `contextTypes`, and asserts that they are valid.
15527
+ *
15528
+ * @param {object} context
15529
+ * @return {?object}
15530
+ * @private
15531
+ */
15532
+ _processContext: function (context) {
15533
+ var maskedContext = this._maskContext(context);
15534
+ if (process.env.NODE_ENV !== 'production') {
15535
+ var Component = this._currentElement.type;
15536
+ if (Component.contextTypes) {
15537
+ this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
15538
+ }
15539
+ }
15540
+ return maskedContext;
15541
+ },
15542
+
15543
+ /**
15544
+ * @param {object} currentContext
15545
+ * @return {object}
15546
+ * @private
15547
+ */
15548
+ _processChildContext: function (currentContext) {
15549
+ var Component = this._currentElement.type;
15550
+ var inst = this._instance;
15551
+ var childContext;
15552
+
15553
+ if (inst.getChildContext) {
15554
+ if (process.env.NODE_ENV !== 'production') {
15555
+ ReactInstrumentation.debugTool.onBeginProcessingChildContext();
15556
+ try {
15557
+ childContext = inst.getChildContext();
15558
+ } finally {
15559
+ ReactInstrumentation.debugTool.onEndProcessingChildContext();
15560
+ }
15561
+ } else {
15562
+ childContext = inst.getChildContext();
15563
+ }
15564
+ }
15565
+
15566
+ if (childContext) {
15567
+ !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;
15568
+ if (process.env.NODE_ENV !== 'production') {
15569
+ this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
15570
+ }
15571
+ for (var name in childContext) {
15572
+ !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;
15573
+ }
15574
+ return _assign({}, currentContext, childContext);
15575
+ }
15576
+ return currentContext;
15577
+ },
15578
+
15579
+ /**
15580
+ * Assert that the context types are valid
15581
+ *
15582
+ * @param {object} typeSpecs Map of context field to a ReactPropType
15583
+ * @param {object} values Runtime values that need to be type-checked
15584
+ * @param {string} location e.g. "prop", "context", "child context"
15585
+ * @private
15586
+ */
15587
+ _checkContextTypes: function (typeSpecs, values, location) {
15588
+ checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);
15589
+ },
15590
+
15591
+ receiveComponent: function (nextElement, transaction, nextContext) {
15592
+ var prevElement = this._currentElement;
15593
+ var prevContext = this._context;
15594
+
15595
+ this._pendingElement = null;
15596
+
15597
+ this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
15598
+ },
15599
+
15600
+ /**
15601
+ * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
15602
+ * is set, update the component.
15603
+ *
15604
+ * @param {ReactReconcileTransaction} transaction
15605
+ * @internal
15606
+ */
15607
+ performUpdateIfNecessary: function (transaction) {
15608
+ if (this._pendingElement != null) {
15609
+ ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);
15610
+ } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
15611
+ this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
15612
+ } else {
15613
+ this._updateBatchNumber = null;
15614
+ }
15615
+ },
15616
+
15617
+ /**
15618
+ * Perform an update to a mounted component. The componentWillReceiveProps and
15619
+ * shouldComponentUpdate methods are called, then (assuming the update isn't
15620
+ * skipped) the remaining update lifecycle methods are called and the DOM
15621
+ * representation is updated.
15622
+ *
15623
+ * By default, this implements React's rendering and reconciliation algorithm.
15624
+ * Sophisticated clients may wish to override this.
15625
+ *
15626
+ * @param {ReactReconcileTransaction} transaction
15627
+ * @param {ReactElement} prevParentElement
15628
+ * @param {ReactElement} nextParentElement
15629
+ * @internal
15630
+ * @overridable
15631
+ */
15632
+ updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
15633
+ var inst = this._instance;
15634
+ !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;
15635
+
15636
+ var willReceive = false;
15637
+ var nextContext;
15638
+
15639
+ // Determine if the context has changed or not
15640
+ if (this._context === nextUnmaskedContext) {
15641
+ nextContext = inst.context;
15642
+ } else {
15643
+ nextContext = this._processContext(nextUnmaskedContext);
15644
+ willReceive = true;
15645
+ }
15646
+
15647
+ var prevProps = prevParentElement.props;
15648
+ var nextProps = nextParentElement.props;
15649
+
15650
+ // Not a simple state update but a props update
15651
+ if (prevParentElement !== nextParentElement) {
15652
+ willReceive = true;
15653
+ }
15654
+
15655
+ // An update here will schedule an update but immediately set
15656
+ // _pendingStateQueue which will ensure that any state updates gets
15657
+ // immediately reconciled instead of waiting for the next batch.
15658
+ if (willReceive && inst.componentWillReceiveProps) {
15659
+ if (process.env.NODE_ENV !== 'production') {
15660
+ measureLifeCyclePerf(function () {
15661
+ return inst.componentWillReceiveProps(nextProps, nextContext);
15662
+ }, this._debugID, 'componentWillReceiveProps');
15663
+ } else {
15664
+ inst.componentWillReceiveProps(nextProps, nextContext);
15665
+ }
15666
+ }
15667
+
15668
+ var nextState = this._processPendingState(nextProps, nextContext);
15669
+ var shouldUpdate = true;
15670
+
15671
+ if (!this._pendingForceUpdate) {
15672
+ if (inst.shouldComponentUpdate) {
15673
+ if (process.env.NODE_ENV !== 'production') {
15674
+ shouldUpdate = measureLifeCyclePerf(function () {
15675
+ return inst.shouldComponentUpdate(nextProps, nextState, nextContext);
15676
+ }, this._debugID, 'shouldComponentUpdate');
15677
+ } else {
15678
+ shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);
15679
+ }
15680
+ } else {
15681
+ if (this._compositeType === CompositeTypes.PureClass) {
15682
+ shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);
15683
+ }
15684
+ }
15685
+ }
15686
+
15687
+ if (process.env.NODE_ENV !== 'production') {
15688
+ process.env.NODE_ENV !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;
15689
+ }
15690
+
15691
+ this._updateBatchNumber = null;
15692
+ if (shouldUpdate) {
15693
+ this._pendingForceUpdate = false;
15694
+ // Will set `this.props`, `this.state` and `this.context`.
15695
+ this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
15696
+ } else {
15697
+ // If it's determined that a component should not update, we still want
15698
+ // to set props and state but we shortcut the rest of the update.
15699
+ this._currentElement = nextParentElement;
15700
+ this._context = nextUnmaskedContext;
15701
+ inst.props = nextProps;
15702
+ inst.state = nextState;
15703
+ inst.context = nextContext;
15704
+ }
15705
+ },
15706
+
15707
+ _processPendingState: function (props, context) {
15708
+ var inst = this._instance;
15709
+ var queue = this._pendingStateQueue;
15710
+ var replace = this._pendingReplaceState;
15711
+ this._pendingReplaceState = false;
15712
+ this._pendingStateQueue = null;
15713
+
15714
+ if (!queue) {
15715
+ return inst.state;
15716
+ }
15717
+
15718
+ if (replace && queue.length === 1) {
15719
+ return queue[0];
15720
+ }
15721
+
15722
+ var nextState = _assign({}, replace ? queue[0] : inst.state);
15723
+ for (var i = replace ? 1 : 0; i < queue.length; i++) {
15724
+ var partial = queue[i];
15725
+ _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
15726
+ }
15727
+
15728
+ return nextState;
15729
+ },
15730
+
15731
+ /**
15732
+ * Merges new props and state, notifies delegate methods of update and
15733
+ * performs update.
15734
+ *
15735
+ * @param {ReactElement} nextElement Next element
15736
+ * @param {object} nextProps Next public object to set as properties.
15737
+ * @param {?object} nextState Next object to set as state.
15738
+ * @param {?object} nextContext Next public object to set as context.
15739
+ * @param {ReactReconcileTransaction} transaction
15740
+ * @param {?object} unmaskedContext
15741
+ * @private
15742
+ */
15743
+ _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
15744
+ var _this2 = this;
15745
+
15746
+ var inst = this._instance;
15747
+
15748
+ var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);
15749
+ var prevProps;
15750
+ var prevState;
15751
+ var prevContext;
15752
+ if (hasComponentDidUpdate) {
15753
+ prevProps = inst.props;
15754
+ prevState = inst.state;
15755
+ prevContext = inst.context;
15756
+ }
15757
+
15758
+ if (inst.componentWillUpdate) {
15759
+ if (process.env.NODE_ENV !== 'production') {
15760
+ measureLifeCyclePerf(function () {
15761
+ return inst.componentWillUpdate(nextProps, nextState, nextContext);
15762
+ }, this._debugID, 'componentWillUpdate');
15763
+ } else {
15764
+ inst.componentWillUpdate(nextProps, nextState, nextContext);
15765
+ }
15766
+ }
15767
+
15768
+ this._currentElement = nextElement;
15769
+ this._context = unmaskedContext;
15770
+ inst.props = nextProps;
15771
+ inst.state = nextState;
15772
+ inst.context = nextContext;
15773
+
15774
+ this._updateRenderedComponent(transaction, unmaskedContext);
15775
+
15776
+ if (hasComponentDidUpdate) {
15777
+ if (process.env.NODE_ENV !== 'production') {
15778
+ transaction.getReactMountReady().enqueue(function () {
15779
+ measureLifeCyclePerf(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), _this2._debugID, 'componentDidUpdate');
15780
+ });
15781
+ } else {
15782
+ transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
15783
+ }
15784
+ }
15785
+ },
15786
+
15787
+ /**
15788
+ * Call the component's `render` method and update the DOM accordingly.
15789
+ *
15790
+ * @param {ReactReconcileTransaction} transaction
15791
+ * @internal
15792
+ */
15793
+ _updateRenderedComponent: function (transaction, context) {
15794
+ var prevComponentInstance = this._renderedComponent;
15795
+ var prevRenderedElement = prevComponentInstance._currentElement;
15796
+ var nextRenderedElement = this._renderValidatedComponent();
15797
+
15798
+ var debugID = 0;
15799
+ if (process.env.NODE_ENV !== 'production') {
15800
+ debugID = this._debugID;
15801
+ }
15802
+
15803
+ if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
15804
+ ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
15805
+ } else {
15806
+ var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);
15807
+ ReactReconciler.unmountComponent(prevComponentInstance, false);
15808
+
15809
+ var nodeType = ReactNodeTypes.getType(nextRenderedElement);
15810
+ this._renderedNodeType = nodeType;
15811
+ var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */
15812
+ );
15813
+ this._renderedComponent = child;
15814
+
15815
+ var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), debugID);
15816
+
15817
+ if (process.env.NODE_ENV !== 'production') {
15818
+ if (debugID !== 0) {
15819
+ var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];
15820
+ ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);
15821
+ }
15822
+ }
15823
+
15824
+ this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
15825
+ }
15826
+ },
15827
+
15828
+ /**
15829
+ * Overridden in shallow rendering.
15830
+ *
15831
+ * @protected
15832
+ */
15833
+ _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {
15834
+ ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);
15835
+ },
15836
+
15837
+ /**
15838
+ * @protected
15839
+ */
15840
+ _renderValidatedComponentWithoutOwnerOrContext: function () {
15841
+ var inst = this._instance;
15842
+ var renderedComponent;
15843
+
15844
+ if (process.env.NODE_ENV !== 'production') {
15845
+ renderedComponent = measureLifeCyclePerf(function () {
15846
+ return inst.render();
15847
+ }, this._debugID, 'render');
15848
+ } else {
15849
+ renderedComponent = inst.render();
15850
+ }
15851
+
15852
+ if (process.env.NODE_ENV !== 'production') {
15853
+ // We allow auto-mocks to proceed as if they're returning null.
15854
+ if (renderedComponent === undefined && inst.render._isMockFunction) {
15855
+ // This is probably bad practice. Consider warning here and
15856
+ // deprecating this convenience.
15857
+ renderedComponent = null;
15858
+ }
15859
+ }
15860
+
15861
+ return renderedComponent;
15862
+ },
15863
+
15864
+ /**
15865
+ * @private
15866
+ */
15867
+ _renderValidatedComponent: function () {
15868
+ var renderedComponent;
15869
+ if (process.env.NODE_ENV !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {
15870
+ ReactCurrentOwner.current = this;
15871
+ try {
15872
+ renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
15873
+ } finally {
15874
+ ReactCurrentOwner.current = null;
15875
+ }
15876
+ } else {
15877
+ renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
15878
+ }
15879
+ !(
15880
+ // TODO: An `isValidNode` function would probably be more appropriate
15881
+ renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;
15882
+
15883
+ return renderedComponent;
15884
+ },
15885
+
15886
+ /**
15887
+ * Lazily allocates the refs object and stores `component` as `ref`.
15888
+ *
15889
+ * @param {string} ref Reference name.
15890
+ * @param {component} component Component to store as `ref`.
15891
+ * @final
15892
+ * @private
15893
+ */
15894
+ attachRef: function (ref, component) {
15895
+ var inst = this.getPublicInstance();
15896
+ !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;
15897
+ var publicComponentInstance = component.getPublicInstance();
15898
+ if (process.env.NODE_ENV !== 'production') {
15899
+ var componentName = component && component.getName ? component.getName() : 'a component';
15900
+ process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null || component._compositeType !== CompositeTypes.StatelessFunctional, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;
15901
+ }
15902
+ var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
15903
+ refs[ref] = publicComponentInstance;
15904
+ },
15905
+
15906
+ /**
15907
+ * Detaches a reference name.
15908
+ *
15909
+ * @param {string} ref Name to dereference.
15910
+ * @final
15911
+ * @private
15912
+ */
15913
+ detachRef: function (ref) {
15914
+ var refs = this.getPublicInstance().refs;
15915
+ delete refs[ref];
15916
+ },
15917
+
15918
+ /**
15919
+ * Get a text description of the component that can be used to identify it
15920
+ * in error messages.
15921
+ * @return {string} The name or null.
15922
+ * @internal
15923
+ */
15924
+ getName: function () {
15925
+ var type = this._currentElement.type;
15926
+ var constructor = this._instance && this._instance.constructor;
15927
+ return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
15928
+ },
15929
+
15930
+ /**
15931
+ * Get the publicly accessible representation of this component - i.e. what
15932
+ * is exposed by refs and returned by render. Can be null for stateless
15933
+ * components.
15934
+ *
15935
+ * @return {ReactComponent} the public component instance.
15936
+ * @internal
15937
+ */
15938
+ getPublicInstance: function () {
15939
+ var inst = this._instance;
15940
+ if (this._compositeType === CompositeTypes.StatelessFunctional) {
15941
+ return null;
15942
+ }
15943
+ return inst;
15944
+ },
15945
+
15946
+ // Stub
15947
+ _instantiateReactComponent: null
15948
+
15949
+ };
15950
+
15951
+ var ReactCompositeComponent = {
15952
+
15953
+ Mixin: ReactCompositeComponentMixin
15954
+
15955
+ };
15956
+
15957
+ module.exports = ReactCompositeComponent;
15958
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
15959
+
15960
+ /***/ },
15961
+ /* 124 */
15962
+ /***/ function(module, exports, __webpack_require__) {
15963
+
15964
+ /* WEBPACK VAR INJECTION */(function(process) {/**
15965
+ * Copyright 2013-present, Facebook, Inc.
15966
+ * All rights reserved.
15967
+ *
15968
+ * This source code is licensed under the BSD-style license found in the
15969
+ * LICENSE file in the root directory of this source tree. An additional grant
15970
+ * of patent rights can be found in the PATENTS file in the same directory.
15971
+ *
15972
+ * @providesModule ReactNodeTypes
15973
+ *
15974
+ */
15975
+
15976
+ 'use strict';
15977
+
15978
+ var _prodInvariant = __webpack_require__(8);
15979
+
15980
+ var ReactElement = __webpack_require__(10);
15981
+
15982
+ var invariant = __webpack_require__(9);
15983
+
15984
+ var ReactNodeTypes = {
15985
+ HOST: 0,
15986
+ COMPOSITE: 1,
15987
+ EMPTY: 2,
15988
+
15989
+ getType: function (node) {
15990
+ if (node === null || node === false) {
15991
+ return ReactNodeTypes.EMPTY;
15992
+ } else if (ReactElement.isValidElement(node)) {
15993
+ if (typeof node.type === 'function') {
15994
+ return ReactNodeTypes.COMPOSITE;
15995
+ } else {
15996
+ return ReactNodeTypes.HOST;
15997
+ }
15998
+ }
15999
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;
16000
+ }
16001
+ };
16002
+
16003
+ module.exports = ReactNodeTypes;
16004
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16005
+
16006
+ /***/ },
16007
+ /* 125 */
16008
+ /***/ function(module, exports) {
16009
+
16010
+ /**
16011
+ * Copyright (c) 2013-present, Facebook, Inc.
16012
+ * All rights reserved.
16013
+ *
16014
+ * This source code is licensed under the BSD-style license found in the
16015
+ * LICENSE file in the root directory of this source tree. An additional grant
16016
+ * of patent rights can be found in the PATENTS file in the same directory.
16017
+ *
16018
+ * @typechecks
16019
+ *
16020
+ */
16021
+
16022
+ /*eslint-disable no-self-compare */
16023
+
16024
+ 'use strict';
16025
+
16026
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
16027
+
16028
+ /**
16029
+ * inlined Object.is polyfill to avoid requiring consumers ship their own
16030
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
16031
+ */
16032
+ function is(x, y) {
16033
+ // SameValue algorithm
16034
+ if (x === y) {
16035
+ // Steps 1-5, 7-10
16036
+ // Steps 6.b-6.e: +0 != -0
16037
+ // Added the nonzero y check to make Flow happy, but it is redundant
16038
+ return x !== 0 || y !== 0 || 1 / x === 1 / y;
16039
+ } else {
16040
+ // Step 6.a: NaN == NaN
16041
+ return x !== x && y !== y;
16042
+ }
16043
+ }
16044
+
16045
+ /**
16046
+ * Performs equality by iterating through keys on an object and returning false
16047
+ * when any key has values which are not strictly equal between the arguments.
16048
+ * Returns true when the values of all keys are strictly equal.
16049
+ */
16050
+ function shallowEqual(objA, objB) {
16051
+ if (is(objA, objB)) {
16052
+ return true;
16053
+ }
16054
+
16055
+ if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
16056
+ return false;
16057
+ }
16058
+
16059
+ var keysA = Object.keys(objA);
16060
+ var keysB = Object.keys(objB);
16061
+
16062
+ if (keysA.length !== keysB.length) {
16063
+ return false;
16064
+ }
16065
+
16066
+ // Test for A's keys different from B.
16067
+ for (var i = 0; i < keysA.length; i++) {
16068
+ if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
16069
+ return false;
16070
+ }
16071
+ }
16072
+
16073
+ return true;
16074
+ }
16075
+
16076
+ module.exports = shallowEqual;
16077
+
16078
+ /***/ },
16079
+ /* 126 */
16080
+ /***/ function(module, exports) {
16081
+
16082
+ /**
16083
+ * Copyright 2013-present, Facebook, Inc.
16084
+ * All rights reserved.
16085
+ *
16086
+ * This source code is licensed under the BSD-style license found in the
16087
+ * LICENSE file in the root directory of this source tree. An additional grant
16088
+ * of patent rights can be found in the PATENTS file in the same directory.
16089
+ *
16090
+ * @providesModule shouldUpdateReactComponent
16091
+ */
16092
+
16093
+ 'use strict';
16094
+
16095
+ /**
16096
+ * Given a `prevElement` and `nextElement`, determines if the existing
16097
+ * instance should be updated as opposed to being destroyed or replaced by a new
16098
+ * instance. Both arguments are elements. This ensures that this logic can
16099
+ * operate on stateless trees without any backing instance.
16100
+ *
16101
+ * @param {?object} prevElement
16102
+ * @param {?object} nextElement
16103
+ * @return {boolean} True if the existing instance should be updated.
16104
+ * @protected
16105
+ */
16106
+
16107
+ function shouldUpdateReactComponent(prevElement, nextElement) {
16108
+ var prevEmpty = prevElement === null || prevElement === false;
16109
+ var nextEmpty = nextElement === null || nextElement === false;
16110
+ if (prevEmpty || nextEmpty) {
16111
+ return prevEmpty === nextEmpty;
16112
+ }
16113
+
16114
+ var prevType = typeof prevElement;
16115
+ var nextType = typeof nextElement;
16116
+ if (prevType === 'string' || prevType === 'number') {
16117
+ return nextType === 'string' || nextType === 'number';
16118
+ } else {
16119
+ return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
16120
+ }
16121
+ }
16122
+
16123
+ module.exports = shouldUpdateReactComponent;
16124
+
16125
+ /***/ },
16126
+ /* 127 */
16127
+ /***/ function(module, exports) {
16128
+
16129
+ /**
16130
+ * Copyright 2014-present, Facebook, Inc.
16131
+ * All rights reserved.
16132
+ *
16133
+ * This source code is licensed under the BSD-style license found in the
16134
+ * LICENSE file in the root directory of this source tree. An additional grant
16135
+ * of patent rights can be found in the PATENTS file in the same directory.
16136
+ *
16137
+ * @providesModule ReactEmptyComponent
16138
+ */
16139
+
16140
+ 'use strict';
16141
+
16142
+ var emptyComponentFactory;
16143
+
16144
+ var ReactEmptyComponentInjection = {
16145
+ injectEmptyComponentFactory: function (factory) {
16146
+ emptyComponentFactory = factory;
16147
+ }
16148
+ };
16149
+
16150
+ var ReactEmptyComponent = {
16151
+ create: function (instantiate) {
16152
+ return emptyComponentFactory(instantiate);
16153
+ }
16154
+ };
16155
+
16156
+ ReactEmptyComponent.injection = ReactEmptyComponentInjection;
16157
+
16158
+ module.exports = ReactEmptyComponent;
16159
+
16160
+ /***/ },
16161
+ /* 128 */
16162
+ /***/ function(module, exports, __webpack_require__) {
16163
+
16164
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16165
+ * Copyright 2014-present, Facebook, Inc.
16166
+ * All rights reserved.
16167
+ *
16168
+ * This source code is licensed under the BSD-style license found in the
16169
+ * LICENSE file in the root directory of this source tree. An additional grant
16170
+ * of patent rights can be found in the PATENTS file in the same directory.
16171
+ *
16172
+ * @providesModule ReactHostComponent
16173
+ */
16174
+
16175
+ 'use strict';
16176
+
16177
+ var _prodInvariant = __webpack_require__(8),
16178
+ _assign = __webpack_require__(5);
16179
+
16180
+ var invariant = __webpack_require__(9);
16181
+
16182
+ var genericComponentClass = null;
16183
+ // This registry keeps track of wrapper classes around host tags.
16184
+ var tagToComponentClass = {};
16185
+ var textComponentClass = null;
16186
+
16187
+ var ReactHostComponentInjection = {
16188
+ // This accepts a class that receives the tag string. This is a catch all
16189
+ // that can render any kind of tag.
16190
+ injectGenericComponentClass: function (componentClass) {
16191
+ genericComponentClass = componentClass;
16192
+ },
16193
+ // This accepts a text component class that takes the text string to be
16194
+ // rendered as props.
16195
+ injectTextComponentClass: function (componentClass) {
16196
+ textComponentClass = componentClass;
16197
+ },
16198
+ // This accepts a keyed object with classes as values. Each key represents a
16199
+ // tag. That particular tag will use this class instead of the generic one.
16200
+ injectComponentClasses: function (componentClasses) {
16201
+ _assign(tagToComponentClass, componentClasses);
16202
+ }
16203
+ };
16204
+
16205
+ /**
16206
+ * Get a host internal component class for a specific tag.
16207
+ *
16208
+ * @param {ReactElement} element The element to create.
16209
+ * @return {function} The internal class constructor function.
16210
+ */
16211
+ function createInternalComponent(element) {
16212
+ !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
16213
+ return new genericComponentClass(element);
16214
+ }
16215
+
16216
+ /**
16217
+ * @param {ReactText} text
16218
+ * @return {ReactComponent}
16219
+ */
16220
+ function createInstanceForText(text) {
16221
+ return new textComponentClass(text);
16222
+ }
16223
+
16224
+ /**
16225
+ * @param {ReactComponent} component
16226
+ * @return {boolean}
16227
+ */
16228
+ function isTextComponent(component) {
16229
+ return component instanceof textComponentClass;
16230
+ }
16231
+
16232
+ var ReactHostComponent = {
16233
+ createInternalComponent: createInternalComponent,
16234
+ createInstanceForText: createInstanceForText,
16235
+ isTextComponent: isTextComponent,
16236
+ injection: ReactHostComponentInjection
16237
+ };
16238
+
16239
+ module.exports = ReactHostComponent;
16240
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16241
+
16242
+ /***/ },
16243
+ /* 129 */
16244
+ /***/ function(module, exports, __webpack_require__) {
16245
+
16246
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16247
+ * Copyright 2013-present, Facebook, Inc.
16248
+ * All rights reserved.
16249
+ *
16250
+ * This source code is licensed under the BSD-style license found in the
16251
+ * LICENSE file in the root directory of this source tree. An additional grant
16252
+ * of patent rights can be found in the PATENTS file in the same directory.
16253
+ *
16254
+ * @providesModule flattenChildren
16255
+ *
16256
+ */
16257
+
16258
+ 'use strict';
16259
+
16260
+ var KeyEscapeUtils = __webpack_require__(17);
16261
+ var traverseAllChildren = __webpack_require__(15);
16262
+ var warning = __webpack_require__(12);
16263
+
16264
+ var ReactComponentTreeHook;
16265
+
16266
+ if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
16267
+ // Temporary hack.
16268
+ // Inline requires don't work well with Jest:
16269
+ // https://github.com/facebook/react/issues/7240
16270
+ // Remove the inline requires when we don't need them anymore:
16271
+ // https://github.com/facebook/react/pull/7178
16272
+ ReactComponentTreeHook = __webpack_require__(29);
16273
+ }
16274
+
16275
+ /**
16276
+ * @param {function} traverseContext Context passed through traversal.
16277
+ * @param {?ReactComponent} child React child component.
16278
+ * @param {!string} name String name of key path to child.
16279
+ * @param {number=} selfDebugID Optional debugID of the current internal instance.
16280
+ */
16281
+ function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {
16282
+ // We found a component instance.
16283
+ if (traverseContext && typeof traverseContext === 'object') {
16284
+ var result = traverseContext;
16285
+ var keyUnique = result[name] === undefined;
16286
+ if (process.env.NODE_ENV !== 'production') {
16287
+ if (!ReactComponentTreeHook) {
16288
+ ReactComponentTreeHook = __webpack_require__(29);
16289
+ }
16290
+ if (!keyUnique) {
16291
+ process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
16292
+ }
16293
+ }
16294
+ if (keyUnique && child != null) {
16295
+ result[name] = child;
16296
+ }
16297
+ }
16298
+ }
16299
+
16300
+ /**
16301
+ * Flattens children that are typically specified as `props.children`. Any null
16302
+ * children will not be included in the resulting object.
16303
+ * @return {!object} flattened children keyed by name.
16304
+ */
16305
+ function flattenChildren(children, selfDebugID) {
16306
+ if (children == null) {
16307
+ return children;
16308
+ }
16309
+ var result = {};
16310
+
16311
+ if (process.env.NODE_ENV !== 'production') {
16312
+ traverseAllChildren(children, function (traverseContext, child, name) {
16313
+ return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);
16314
+ }, result);
16315
+ } else {
16316
+ traverseAllChildren(children, flattenSingleChildIntoContext, result);
16317
+ }
16318
+ return result;
16319
+ }
16320
+
16321
+ module.exports = flattenChildren;
16322
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16323
+
16324
+ /***/ },
16325
+ /* 130 */
16326
+ /***/ function(module, exports, __webpack_require__) {
16327
+
16328
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16329
+ * Copyright 2014-present, Facebook, Inc.
16330
+ * All rights reserved.
16331
+ *
16332
+ * This source code is licensed under the BSD-style license found in the
16333
+ * LICENSE file in the root directory of this source tree. An additional grant
16334
+ * of patent rights can be found in the PATENTS file in the same directory.
16335
+ *
16336
+ * @providesModule ReactServerRenderingTransaction
16337
+ */
16338
+
16339
+ 'use strict';
16340
+
16341
+ var _assign = __webpack_require__(5);
16342
+
16343
+ var PooledClass = __webpack_require__(7);
16344
+ var Transaction = __webpack_require__(70);
16345
+ var ReactInstrumentation = __webpack_require__(63);
16346
+ var ReactServerUpdateQueue = __webpack_require__(131);
16347
+
16348
+ /**
16349
+ * Executed within the scope of the `Transaction` instance. Consider these as
16350
+ * being member methods, but with an implied ordering while being isolated from
16351
+ * each other.
16352
+ */
16353
+ var TRANSACTION_WRAPPERS = [];
16354
+
16355
+ if (process.env.NODE_ENV !== 'production') {
16356
+ TRANSACTION_WRAPPERS.push({
16357
+ initialize: ReactInstrumentation.debugTool.onBeginFlush,
16358
+ close: ReactInstrumentation.debugTool.onEndFlush
16359
+ });
16360
+ }
16361
+
16362
+ var noopCallbackQueue = {
16363
+ enqueue: function () {}
16364
+ };
16365
+
16366
+ /**
16367
+ * @class ReactServerRenderingTransaction
16368
+ * @param {boolean} renderToStaticMarkup
16369
+ */
16370
+ function ReactServerRenderingTransaction(renderToStaticMarkup) {
16371
+ this.reinitializeTransaction();
16372
+ this.renderToStaticMarkup = renderToStaticMarkup;
16373
+ this.useCreateElement = false;
16374
+ this.updateQueue = new ReactServerUpdateQueue(this);
16375
+ }
16376
+
16377
+ var Mixin = {
16378
+ /**
16379
+ * @see Transaction
16380
+ * @abstract
16381
+ * @final
16382
+ * @return {array} Empty list of operation wrap procedures.
16383
+ */
16384
+ getTransactionWrappers: function () {
16385
+ return TRANSACTION_WRAPPERS;
16386
+ },
16387
+
16388
+ /**
16389
+ * @return {object} The queue to collect `onDOMReady` callbacks with.
16390
+ */
16391
+ getReactMountReady: function () {
16392
+ return noopCallbackQueue;
16393
+ },
16394
+
16395
+ /**
16396
+ * @return {object} The queue to collect React async events.
16397
+ */
16398
+ getUpdateQueue: function () {
16399
+ return this.updateQueue;
16400
+ },
16401
+
16402
+ /**
16403
+ * `PooledClass` looks for this, and will invoke this before allowing this
16404
+ * instance to be reused.
16405
+ */
16406
+ destructor: function () {},
16407
+
16408
+ checkpoint: function () {},
16409
+
16410
+ rollback: function () {}
16411
+ };
16412
+
16413
+ _assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
16414
+
16415
+ PooledClass.addPoolingTo(ReactServerRenderingTransaction);
16416
+
16417
+ module.exports = ReactServerRenderingTransaction;
16418
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16419
+
16420
+ /***/ },
16421
+ /* 131 */
16422
+ /***/ function(module, exports, __webpack_require__) {
16423
+
16424
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16425
+ * Copyright 2015-present, Facebook, Inc.
16426
+ * All rights reserved.
16427
+ *
16428
+ * This source code is licensed under the BSD-style license found in the
16429
+ * LICENSE file in the root directory of this source tree. An additional grant
16430
+ * of patent rights can be found in the PATENTS file in the same directory.
16431
+ *
16432
+ * @providesModule ReactServerUpdateQueue
16433
+ *
16434
+ */
16435
+
16436
+ 'use strict';
16437
+
16438
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
16439
+
16440
+ var ReactUpdateQueue = __webpack_require__(132);
16441
+ var Transaction = __webpack_require__(70);
16442
+ var warning = __webpack_require__(12);
16443
+
16444
+ function warnNoop(publicInstance, callerName) {
16445
+ if (process.env.NODE_ENV !== 'production') {
16446
+ var constructor = publicInstance.constructor;
16447
+ process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;
16448
+ }
16449
+ }
16450
+
16451
+ /**
16452
+ * This is the update queue used for server rendering.
16453
+ * It delegates to ReactUpdateQueue while server rendering is in progress and
16454
+ * switches to ReactNoopUpdateQueue after the transaction has completed.
16455
+ * @class ReactServerUpdateQueue
16456
+ * @param {Transaction} transaction
16457
+ */
16458
+
16459
+ var ReactServerUpdateQueue = function () {
16460
+ /* :: transaction: Transaction; */
16461
+
16462
+ function ReactServerUpdateQueue(transaction) {
16463
+ _classCallCheck(this, ReactServerUpdateQueue);
16464
+
16465
+ this.transaction = transaction;
16466
+ }
16467
+
16468
+ /**
16469
+ * Checks whether or not this composite component is mounted.
16470
+ * @param {ReactClass} publicInstance The instance we want to test.
16471
+ * @return {boolean} True if mounted, false otherwise.
16472
+ * @protected
16473
+ * @final
16474
+ */
16475
+
16476
+
16477
+ ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {
16478
+ return false;
16479
+ };
16480
+
16481
+ /**
16482
+ * Enqueue a callback that will be executed after all the pending updates
16483
+ * have processed.
16484
+ *
16485
+ * @param {ReactClass} publicInstance The instance to use as `this` context.
16486
+ * @param {?function} callback Called after state is updated.
16487
+ * @internal
16488
+ */
16489
+
16490
+
16491
+ ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {
16492
+ if (this.transaction.isInTransaction()) {
16493
+ ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);
16494
+ }
16495
+ };
16496
+
16497
+ /**
16498
+ * Forces an update. This should only be invoked when it is known with
16499
+ * certainty that we are **not** in a DOM transaction.
16500
+ *
16501
+ * You may want to call this when you know that some deeper aspect of the
16502
+ * component's state has changed but `setState` was not called.
16503
+ *
16504
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
16505
+ * `componentWillUpdate` and `componentDidUpdate`.
16506
+ *
16507
+ * @param {ReactClass} publicInstance The instance that should rerender.
16508
+ * @internal
16509
+ */
16510
+
16511
+
16512
+ ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {
16513
+ if (this.transaction.isInTransaction()) {
16514
+ ReactUpdateQueue.enqueueForceUpdate(publicInstance);
16515
+ } else {
16516
+ warnNoop(publicInstance, 'forceUpdate');
16517
+ }
16518
+ };
16519
+
16520
+ /**
16521
+ * Replaces all of the state. Always use this or `setState` to mutate state.
16522
+ * You should treat `this.state` as immutable.
16523
+ *
16524
+ * There is no guarantee that `this.state` will be immediately updated, so
16525
+ * accessing `this.state` after calling this method may return the old value.
16526
+ *
16527
+ * @param {ReactClass} publicInstance The instance that should rerender.
16528
+ * @param {object|function} completeState Next state.
16529
+ * @internal
16530
+ */
16531
+
16532
+
16533
+ ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {
16534
+ if (this.transaction.isInTransaction()) {
16535
+ ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);
16536
+ } else {
16537
+ warnNoop(publicInstance, 'replaceState');
16538
+ }
16539
+ };
16540
+
16541
+ /**
16542
+ * Sets a subset of the state. This only exists because _pendingState is
16543
+ * internal. This provides a merging strategy that is not available to deep
16544
+ * properties which is confusing. TODO: Expose pendingState or don't use it
16545
+ * during the merge.
16546
+ *
16547
+ * @param {ReactClass} publicInstance The instance that should rerender.
16548
+ * @param {object|function} partialState Next partial state to be merged with state.
16549
+ * @internal
16550
+ */
16551
+
16552
+
16553
+ ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {
16554
+ if (this.transaction.isInTransaction()) {
16555
+ ReactUpdateQueue.enqueueSetState(publicInstance, partialState);
16556
+ } else {
16557
+ warnNoop(publicInstance, 'setState');
16558
+ }
16559
+ };
16560
+
16561
+ return ReactServerUpdateQueue;
16562
+ }();
16563
+
16564
+ module.exports = ReactServerUpdateQueue;
16565
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16566
+
16567
+ /***/ },
16568
+ /* 132 */
16569
+ /***/ function(module, exports, __webpack_require__) {
16570
+
16571
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16572
+ * Copyright 2015-present, Facebook, Inc.
16573
+ * All rights reserved.
16574
+ *
16575
+ * This source code is licensed under the BSD-style license found in the
16576
+ * LICENSE file in the root directory of this source tree. An additional grant
16577
+ * of patent rights can be found in the PATENTS file in the same directory.
16578
+ *
16579
+ * @providesModule ReactUpdateQueue
16580
+ */
16581
+
16582
+ 'use strict';
16583
+
16584
+ var _prodInvariant = __webpack_require__(8);
16585
+
16586
+ var ReactCurrentOwner = __webpack_require__(11);
16587
+ var ReactInstanceMap = __webpack_require__(120);
16588
+ var ReactInstrumentation = __webpack_require__(63);
16589
+ var ReactUpdates = __webpack_require__(57);
16590
+
16591
+ var invariant = __webpack_require__(9);
16592
+ var warning = __webpack_require__(12);
16593
+
16594
+ function enqueueUpdate(internalInstance) {
16595
+ ReactUpdates.enqueueUpdate(internalInstance);
16596
+ }
16597
+
16598
+ function formatUnexpectedArgument(arg) {
16599
+ var type = typeof arg;
16600
+ if (type !== 'object') {
16601
+ return type;
16602
+ }
16603
+ var displayName = arg.constructor && arg.constructor.name || type;
16604
+ var keys = Object.keys(arg);
16605
+ if (keys.length > 0 && keys.length < 20) {
16606
+ return displayName + ' (keys: ' + keys.join(', ') + ')';
16607
+ }
16608
+ return displayName;
16609
+ }
16610
+
16611
+ function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
16612
+ var internalInstance = ReactInstanceMap.get(publicInstance);
16613
+ if (!internalInstance) {
16614
+ if (process.env.NODE_ENV !== 'production') {
16615
+ var ctor = publicInstance.constructor;
16616
+ // Only warn when we have a callerName. Otherwise we should be silent.
16617
+ // We're probably calling from enqueueCallback. We don't want to warn
16618
+ // there because we already warned for the corresponding lifecycle method.
16619
+ process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;
16620
+ }
16621
+ return null;
16622
+ }
16623
+
16624
+ if (process.env.NODE_ENV !== 'production') {
16625
+ process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;
16626
+ }
16627
+
16628
+ return internalInstance;
16629
+ }
16630
+
16631
+ /**
16632
+ * ReactUpdateQueue allows for state updates to be scheduled into a later
16633
+ * reconciliation step.
16634
+ */
16635
+ var ReactUpdateQueue = {
16636
+
16637
+ /**
16638
+ * Checks whether or not this composite component is mounted.
16639
+ * @param {ReactClass} publicInstance The instance we want to test.
16640
+ * @return {boolean} True if mounted, false otherwise.
16641
+ * @protected
16642
+ * @final
16643
+ */
16644
+ isMounted: function (publicInstance) {
16645
+ if (process.env.NODE_ENV !== 'production') {
16646
+ var owner = ReactCurrentOwner.current;
16647
+ if (owner !== null) {
16648
+ process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
16649
+ owner._warnedAboutRefsInRender = true;
16650
+ }
16651
+ }
16652
+ var internalInstance = ReactInstanceMap.get(publicInstance);
16653
+ if (internalInstance) {
16654
+ // During componentWillMount and render this will still be null but after
16655
+ // that will always render to something. At least for now. So we can use
16656
+ // this hack.
16657
+ return !!internalInstance._renderedComponent;
16658
+ } else {
16659
+ return false;
16660
+ }
16661
+ },
16662
+
16663
+ /**
16664
+ * Enqueue a callback that will be executed after all the pending updates
16665
+ * have processed.
16666
+ *
16667
+ * @param {ReactClass} publicInstance The instance to use as `this` context.
16668
+ * @param {?function} callback Called after state is updated.
16669
+ * @param {string} callerName Name of the calling function in the public API.
16670
+ * @internal
16671
+ */
16672
+ enqueueCallback: function (publicInstance, callback, callerName) {
16673
+ ReactUpdateQueue.validateCallback(callback, callerName);
16674
+ var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
16675
+
16676
+ // Previously we would throw an error if we didn't have an internal
16677
+ // instance. Since we want to make it a no-op instead, we mirror the same
16678
+ // behavior we have in other enqueue* methods.
16679
+ // We also need to ignore callbacks in componentWillMount. See
16680
+ // enqueueUpdates.
16681
+ if (!internalInstance) {
16682
+ return null;
16683
+ }
16684
+
16685
+ if (internalInstance._pendingCallbacks) {
16686
+ internalInstance._pendingCallbacks.push(callback);
16687
+ } else {
16688
+ internalInstance._pendingCallbacks = [callback];
16689
+ }
16690
+ // TODO: The callback here is ignored when setState is called from
16691
+ // componentWillMount. Either fix it or disallow doing so completely in
16692
+ // favor of getInitialState. Alternatively, we can disallow
16693
+ // componentWillMount during server-side rendering.
16694
+ enqueueUpdate(internalInstance);
16695
+ },
16696
+
16697
+ enqueueCallbackInternal: function (internalInstance, callback) {
16698
+ if (internalInstance._pendingCallbacks) {
16699
+ internalInstance._pendingCallbacks.push(callback);
16700
+ } else {
16701
+ internalInstance._pendingCallbacks = [callback];
16702
+ }
16703
+ enqueueUpdate(internalInstance);
16704
+ },
16705
+
16706
+ /**
16707
+ * Forces an update. This should only be invoked when it is known with
16708
+ * certainty that we are **not** in a DOM transaction.
16709
+ *
16710
+ * You may want to call this when you know that some deeper aspect of the
16711
+ * component's state has changed but `setState` was not called.
16712
+ *
16713
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
16714
+ * `componentWillUpdate` and `componentDidUpdate`.
16715
+ *
16716
+ * @param {ReactClass} publicInstance The instance that should rerender.
16717
+ * @internal
16718
+ */
16719
+ enqueueForceUpdate: function (publicInstance) {
16720
+ var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');
16721
+
16722
+ if (!internalInstance) {
16723
+ return;
16724
+ }
16725
+
16726
+ internalInstance._pendingForceUpdate = true;
16727
+
16728
+ enqueueUpdate(internalInstance);
16729
+ },
16730
+
16731
+ /**
16732
+ * Replaces all of the state. Always use this or `setState` to mutate state.
16733
+ * You should treat `this.state` as immutable.
16734
+ *
16735
+ * There is no guarantee that `this.state` will be immediately updated, so
16736
+ * accessing `this.state` after calling this method may return the old value.
16737
+ *
16738
+ * @param {ReactClass} publicInstance The instance that should rerender.
16739
+ * @param {object} completeState Next state.
16740
+ * @internal
16741
+ */
16742
+ enqueueReplaceState: function (publicInstance, completeState) {
16743
+ var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');
16744
+
16745
+ if (!internalInstance) {
16746
+ return;
16747
+ }
16748
+
16749
+ internalInstance._pendingStateQueue = [completeState];
16750
+ internalInstance._pendingReplaceState = true;
16751
+
16752
+ enqueueUpdate(internalInstance);
16753
+ },
16754
+
16755
+ /**
16756
+ * Sets a subset of the state. This only exists because _pendingState is
16757
+ * internal. This provides a merging strategy that is not available to deep
16758
+ * properties which is confusing. TODO: Expose pendingState or don't use it
16759
+ * during the merge.
16760
+ *
16761
+ * @param {ReactClass} publicInstance The instance that should rerender.
16762
+ * @param {object} partialState Next partial state to be merged with state.
16763
+ * @internal
16764
+ */
16765
+ enqueueSetState: function (publicInstance, partialState) {
16766
+ if (process.env.NODE_ENV !== 'production') {
16767
+ ReactInstrumentation.debugTool.onSetState();
16768
+ process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;
16769
+ }
16770
+
16771
+ var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');
16772
+
16773
+ if (!internalInstance) {
16774
+ return;
16775
+ }
16776
+
16777
+ var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
16778
+ queue.push(partialState);
16779
+
16780
+ enqueueUpdate(internalInstance);
16781
+ },
16782
+
16783
+ enqueueElementInternal: function (internalInstance, nextElement, nextContext) {
16784
+ internalInstance._pendingElement = nextElement;
16785
+ // TODO: introduce _pendingContext instead of setting it directly.
16786
+ internalInstance._context = nextContext;
16787
+ enqueueUpdate(internalInstance);
16788
+ },
16789
+
16790
+ validateCallback: function (callback, callerName) {
16791
+ !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;
16792
+ }
16793
+
16794
+ };
16795
+
16796
+ module.exports = ReactUpdateQueue;
16797
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
16798
+
16799
+ /***/ },
16800
+ /* 133 */
16801
+ /***/ function(module, exports, __webpack_require__) {
16802
+
16803
+ /* WEBPACK VAR INJECTION */(function(process) {/**
16804
+ * Copyright 2015-present, Facebook, Inc.
16805
+ * All rights reserved.
16806
+ *
16807
+ * This source code is licensed under the BSD-style license found in the
16808
+ * LICENSE file in the root directory of this source tree. An additional grant
16809
+ * of patent rights can be found in the PATENTS file in the same directory.
16810
+ *
16811
+ * @providesModule validateDOMNesting
16812
+ */
16813
+
16814
+ 'use strict';
16815
+
16816
+ var _assign = __webpack_require__(5);
16817
+
16818
+ var emptyFunction = __webpack_require__(13);
16819
+ var warning = __webpack_require__(12);
16820
+
16821
+ var validateDOMNesting = emptyFunction;
16822
+
16823
+ if (process.env.NODE_ENV !== 'production') {
16824
+ // This validation code was written based on the HTML5 parsing spec:
16825
+ // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
16826
+ //
16827
+ // Note: this does not catch all invalid nesting, nor does it try to (as it's
16828
+ // not clear what practical benefit doing so provides); instead, we warn only
16829
+ // for cases where the parser will give a parse tree differing from what React
16830
+ // intended. For example, <b><div></div></b> is invalid but we don't warn
16831
+ // because it still parses correctly; we do warn for other cases like nested
16832
+ // <p> tags where the beginning of the second element implicitly closes the
16833
+ // first, causing a confusing mess.
16834
+
16835
+ // https://html.spec.whatwg.org/multipage/syntax.html#special
16836
+ var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];
16837
+
16838
+ // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
16839
+ var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',
16840
+
16841
+ // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
16842
+ // TODO: Distinguish by namespace here -- for <title>, including it here
16843
+ // errs on the side of fewer warnings
16844
+ 'foreignObject', 'desc', 'title'];
16845
+
16846
+ // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
16847
+ var buttonScopeTags = inScopeTags.concat(['button']);
16848
+
16849
+ // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
16850
+ var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
16851
+
16852
+ var emptyAncestorInfo = {
16853
+ current: null,
16854
+
16855
+ formTag: null,
16856
+ aTagInScope: null,
16857
+ buttonTagInScope: null,
16858
+ nobrTagInScope: null,
16859
+ pTagInButtonScope: null,
16860
+
16861
+ listItemTagAutoclosing: null,
16862
+ dlItemTagAutoclosing: null
16863
+ };
16864
+
16865
+ var updatedAncestorInfo = function (oldInfo, tag, instance) {
16866
+ var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);
16867
+ var info = { tag: tag, instance: instance };
16868
+
16869
+ if (inScopeTags.indexOf(tag) !== -1) {
16870
+ ancestorInfo.aTagInScope = null;
16871
+ ancestorInfo.buttonTagInScope = null;
16872
+ ancestorInfo.nobrTagInScope = null;
16873
+ }
16874
+ if (buttonScopeTags.indexOf(tag) !== -1) {
16875
+ ancestorInfo.pTagInButtonScope = null;
16876
+ }
16877
+
16878
+ // See rules for 'li', 'dd', 'dt' start tags in
16879
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
16880
+ if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
16881
+ ancestorInfo.listItemTagAutoclosing = null;
16882
+ ancestorInfo.dlItemTagAutoclosing = null;
16883
+ }
16884
+
16885
+ ancestorInfo.current = info;
16886
+
16887
+ if (tag === 'form') {
16888
+ ancestorInfo.formTag = info;
16889
+ }
16890
+ if (tag === 'a') {
16891
+ ancestorInfo.aTagInScope = info;
16892
+ }
16893
+ if (tag === 'button') {
16894
+ ancestorInfo.buttonTagInScope = info;
16895
+ }
16896
+ if (tag === 'nobr') {
16897
+ ancestorInfo.nobrTagInScope = info;
16898
+ }
16899
+ if (tag === 'p') {
16900
+ ancestorInfo.pTagInButtonScope = info;
16901
+ }
16902
+ if (tag === 'li') {
16903
+ ancestorInfo.listItemTagAutoclosing = info;
16904
+ }
16905
+ if (tag === 'dd' || tag === 'dt') {
16906
+ ancestorInfo.dlItemTagAutoclosing = info;
16907
+ }
16908
+
16909
+ return ancestorInfo;
16910
+ };
16911
+
16912
+ /**
16913
+ * Returns whether
16914
+ */
16915
+ var isTagValidWithParent = function (tag, parentTag) {
16916
+ // First, let's check if we're in an unusual parsing mode...
16917
+ switch (parentTag) {
16918
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
16919
+ case 'select':
16920
+ return tag === 'option' || tag === 'optgroup' || tag === '#text';
16921
+ case 'optgroup':
16922
+ return tag === 'option' || tag === '#text';
16923
+ // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
16924
+ // but
16925
+ case 'option':
16926
+ return tag === '#text';
16927
+
16928
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
16929
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
16930
+ // No special behavior since these rules fall back to "in body" mode for
16931
+ // all except special table nodes which cause bad parsing behavior anyway.
16932
+
16933
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
16934
+ case 'tr':
16935
+ return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
16936
+
16937
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
16938
+ case 'tbody':
16939
+ case 'thead':
16940
+ case 'tfoot':
16941
+ return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
16942
+
16943
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
16944
+ case 'colgroup':
16945
+ return tag === 'col' || tag === 'template';
16946
+
16947
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
16948
+ case 'table':
16949
+ return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
16950
+
16951
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
16952
+ case 'head':
16953
+ return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
16954
+
16955
+ // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
16956
+ case 'html':
16957
+ return tag === 'head' || tag === 'body';
16958
+ case '#document':
16959
+ return tag === 'html';
16960
+ }
16961
+
16962
+ // Probably in the "in body" parsing mode, so we outlaw only tag combos
16963
+ // where the parsing rules cause implicit opens or closes to be added.
16964
+ // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
16965
+ switch (tag) {
16966
+ case 'h1':
16967
+ case 'h2':
16968
+ case 'h3':
16969
+ case 'h4':
16970
+ case 'h5':
16971
+ case 'h6':
16972
+ return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
16973
+
16974
+ case 'rp':
16975
+ case 'rt':
16976
+ return impliedEndTags.indexOf(parentTag) === -1;
16977
+
16978
+ case 'body':
16979
+ case 'caption':
16980
+ case 'col':
16981
+ case 'colgroup':
16982
+ case 'frame':
16983
+ case 'head':
16984
+ case 'html':
16985
+ case 'tbody':
16986
+ case 'td':
16987
+ case 'tfoot':
16988
+ case 'th':
16989
+ case 'thead':
16990
+ case 'tr':
16991
+ // These tags are only valid with a few parents that have special child
16992
+ // parsing rules -- if we're down here, then none of those matched and
16993
+ // so we allow it only if we don't know what the parent is, as all other
16994
+ // cases are invalid.
16995
+ return parentTag == null;
16996
+ }
16997
+
16998
+ return true;
16999
+ };
17000
+
17001
+ /**
17002
+ * Returns whether
17003
+ */
17004
+ var findInvalidAncestorForTag = function (tag, ancestorInfo) {
17005
+ switch (tag) {
17006
+ case 'address':
17007
+ case 'article':
17008
+ case 'aside':
17009
+ case 'blockquote':
17010
+ case 'center':
17011
+ case 'details':
17012
+ case 'dialog':
17013
+ case 'dir':
17014
+ case 'div':
17015
+ case 'dl':
17016
+ case 'fieldset':
17017
+ case 'figcaption':
17018
+ case 'figure':
17019
+ case 'footer':
17020
+ case 'header':
17021
+ case 'hgroup':
17022
+ case 'main':
17023
+ case 'menu':
17024
+ case 'nav':
17025
+ case 'ol':
17026
+ case 'p':
17027
+ case 'section':
17028
+ case 'summary':
17029
+ case 'ul':
17030
+
17031
+ case 'pre':
17032
+ case 'listing':
17033
+
17034
+ case 'table':
17035
+
17036
+ case 'hr':
17037
+
17038
+ case 'xmp':
17039
+
17040
+ case 'h1':
17041
+ case 'h2':
17042
+ case 'h3':
17043
+ case 'h4':
17044
+ case 'h5':
17045
+ case 'h6':
17046
+ return ancestorInfo.pTagInButtonScope;
17047
+
17048
+ case 'form':
17049
+ return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
17050
+
17051
+ case 'li':
17052
+ return ancestorInfo.listItemTagAutoclosing;
17053
+
17054
+ case 'dd':
17055
+ case 'dt':
17056
+ return ancestorInfo.dlItemTagAutoclosing;
17057
+
17058
+ case 'button':
17059
+ return ancestorInfo.buttonTagInScope;
17060
+
17061
+ case 'a':
17062
+ // Spec says something about storing a list of markers, but it sounds
17063
+ // equivalent to this check.
17064
+ return ancestorInfo.aTagInScope;
17065
+
17066
+ case 'nobr':
17067
+ return ancestorInfo.nobrTagInScope;
17068
+ }
17069
+
17070
+ return null;
17071
+ };
17072
+
17073
+ /**
17074
+ * Given a ReactCompositeComponent instance, return a list of its recursive
17075
+ * owners, starting at the root and ending with the instance itself.
17076
+ */
17077
+ var findOwnerStack = function (instance) {
17078
+ if (!instance) {
17079
+ return [];
17080
+ }
17081
+
17082
+ var stack = [];
17083
+ do {
17084
+ stack.push(instance);
17085
+ } while (instance = instance._currentElement._owner);
17086
+ stack.reverse();
17087
+ return stack;
17088
+ };
17089
+
17090
+ var didWarn = {};
17091
+
17092
+ validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {
17093
+ ancestorInfo = ancestorInfo || emptyAncestorInfo;
17094
+ var parentInfo = ancestorInfo.current;
17095
+ var parentTag = parentInfo && parentInfo.tag;
17096
+
17097
+ if (childText != null) {
17098
+ process.env.NODE_ENV !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;
17099
+ childTag = '#text';
17100
+ }
17101
+
17102
+ var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
17103
+ var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
17104
+ var problematic = invalidParent || invalidAncestor;
17105
+
17106
+ if (problematic) {
17107
+ var ancestorTag = problematic.tag;
17108
+ var ancestorInstance = problematic.instance;
17109
+
17110
+ var childOwner = childInstance && childInstance._currentElement._owner;
17111
+ var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;
17112
+
17113
+ var childOwners = findOwnerStack(childOwner);
17114
+ var ancestorOwners = findOwnerStack(ancestorOwner);
17115
+
17116
+ var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
17117
+ var i;
17118
+
17119
+ var deepestCommon = -1;
17120
+ for (i = 0; i < minStackLen; i++) {
17121
+ if (childOwners[i] === ancestorOwners[i]) {
17122
+ deepestCommon = i;
17123
+ } else {
17124
+ break;
17125
+ }
17126
+ }
17127
+
17128
+ var UNKNOWN = '(unknown)';
17129
+ var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {
17130
+ return inst.getName() || UNKNOWN;
17131
+ });
17132
+ var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {
17133
+ return inst.getName() || UNKNOWN;
17134
+ });
17135
+ var ownerInfo = [].concat(
17136
+ // If the parent and child instances have a common owner ancestor, start
17137
+ // with that -- otherwise we just start with the parent's owners.
17138
+ deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,
17139
+ // If we're warning about an invalid (non-parent) ancestry, add '...'
17140
+ invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');
17141
+
17142
+ var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;
17143
+ if (didWarn[warnKey]) {
17144
+ return;
17145
+ }
17146
+ didWarn[warnKey] = true;
17147
+
17148
+ var tagDisplayName = childTag;
17149
+ var whitespaceInfo = '';
17150
+ if (childTag === '#text') {
17151
+ if (/\S/.test(childText)) {
17152
+ tagDisplayName = 'Text nodes';
17153
+ } else {
17154
+ tagDisplayName = 'Whitespace text nodes';
17155
+ whitespaceInfo = ' Make sure you don\'t have any extra whitespace between tags on ' + 'each line of your source code.';
17156
+ }
17157
+ } else {
17158
+ tagDisplayName = '<' + childTag + '>';
17159
+ }
17160
+
17161
+ if (invalidParent) {
17162
+ var info = '';
17163
+ if (ancestorTag === 'table' && childTag === 'tr') {
17164
+ info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';
17165
+ }
17166
+ process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;
17167
+ } else {
17168
+ process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;
17169
+ }
17170
+ }
17171
+ };
17172
+
17173
+ validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;
17174
+
17175
+ // For testing
17176
+ validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {
17177
+ ancestorInfo = ancestorInfo || emptyAncestorInfo;
17178
+ var parentInfo = ancestorInfo.current;
17179
+ var parentTag = parentInfo && parentInfo.tag;
17180
+ return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);
17181
+ };
17182
+ }
17183
+
17184
+ module.exports = validateDOMNesting;
17185
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
17186
+
17187
+ /***/ },
17188
+ /* 134 */
17189
+ /***/ function(module, exports, __webpack_require__) {
17190
+
17191
+ /**
17192
+ * Copyright 2014-present, Facebook, Inc.
17193
+ * All rights reserved.
17194
+ *
17195
+ * This source code is licensed under the BSD-style license found in the
17196
+ * LICENSE file in the root directory of this source tree. An additional grant
17197
+ * of patent rights can be found in the PATENTS file in the same directory.
17198
+ *
17199
+ * @providesModule ReactDOMEmptyComponent
17200
+ */
17201
+
17202
+ 'use strict';
17203
+
17204
+ var _assign = __webpack_require__(5);
17205
+
17206
+ var DOMLazyTree = __webpack_require__(83);
17207
+ var ReactDOMComponentTree = __webpack_require__(37);
17208
+
17209
+ var ReactDOMEmptyComponent = function (instantiate) {
17210
+ // ReactCompositeComponent uses this:
17211
+ this._currentElement = null;
17212
+ // ReactDOMComponentTree uses these:
17213
+ this._hostNode = null;
17214
+ this._hostParent = null;
17215
+ this._hostContainerInfo = null;
17216
+ this._domID = 0;
17217
+ };
17218
+ _assign(ReactDOMEmptyComponent.prototype, {
17219
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
17220
+ var domID = hostContainerInfo._idCounter++;
17221
+ this._domID = domID;
17222
+ this._hostParent = hostParent;
17223
+ this._hostContainerInfo = hostContainerInfo;
17224
+
17225
+ var nodeValue = ' react-empty: ' + this._domID + ' ';
17226
+ if (transaction.useCreateElement) {
17227
+ var ownerDocument = hostContainerInfo._ownerDocument;
17228
+ var node = ownerDocument.createComment(nodeValue);
17229
+ ReactDOMComponentTree.precacheNode(this, node);
17230
+ return DOMLazyTree(node);
17231
+ } else {
17232
+ if (transaction.renderToStaticMarkup) {
17233
+ // Normally we'd insert a comment node, but since this is a situation
17234
+ // where React won't take over (static pages), we can simply return
17235
+ // nothing.
17236
+ return '';
17237
+ }
17238
+ return '<!--' + nodeValue + '-->';
17239
+ }
17240
+ },
17241
+ receiveComponent: function () {},
17242
+ getHostNode: function () {
17243
+ return ReactDOMComponentTree.getNodeFromInstance(this);
17244
+ },
17245
+ unmountComponent: function () {
17246
+ ReactDOMComponentTree.uncacheNode(this);
17247
+ }
17248
+ });
17249
+
17250
+ module.exports = ReactDOMEmptyComponent;
17251
+
17252
+ /***/ },
17253
+ /* 135 */
17254
+ /***/ function(module, exports, __webpack_require__) {
17255
+
17256
+ /* WEBPACK VAR INJECTION */(function(process) {/**
17257
+ * Copyright 2015-present, Facebook, Inc.
17258
+ * All rights reserved.
17259
+ *
17260
+ * This source code is licensed under the BSD-style license found in the
17261
+ * LICENSE file in the root directory of this source tree. An additional grant
17262
+ * of patent rights can be found in the PATENTS file in the same directory.
17263
+ *
17264
+ * @providesModule ReactDOMTreeTraversal
17265
+ */
17266
+
17267
+ 'use strict';
17268
+
17269
+ var _prodInvariant = __webpack_require__(8);
17270
+
17271
+ var invariant = __webpack_require__(9);
17272
+
17273
+ /**
17274
+ * Return the lowest common ancestor of A and B, or null if they are in
17275
+ * different trees.
17276
+ */
17277
+ function getLowestCommonAncestor(instA, instB) {
17278
+ !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
17279
+ !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
17280
+
17281
+ var depthA = 0;
17282
+ for (var tempA = instA; tempA; tempA = tempA._hostParent) {
17283
+ depthA++;
17284
+ }
17285
+ var depthB = 0;
17286
+ for (var tempB = instB; tempB; tempB = tempB._hostParent) {
17287
+ depthB++;
17288
+ }
17289
+
17290
+ // If A is deeper, crawl up.
17291
+ while (depthA - depthB > 0) {
17292
+ instA = instA._hostParent;
17293
+ depthA--;
17294
+ }
17295
+
17296
+ // If B is deeper, crawl up.
17297
+ while (depthB - depthA > 0) {
17298
+ instB = instB._hostParent;
17299
+ depthB--;
17300
+ }
17301
+
17302
+ // Walk in lockstep until we find a match.
17303
+ var depth = depthA;
17304
+ while (depth--) {
17305
+ if (instA === instB) {
17306
+ return instA;
17307
+ }
17308
+ instA = instA._hostParent;
17309
+ instB = instB._hostParent;
17310
+ }
17311
+ return null;
17312
+ }
17313
+
17314
+ /**
17315
+ * Return if A is an ancestor of B.
17316
+ */
17317
+ function isAncestor(instA, instB) {
17318
+ !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
17319
+ !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
17320
+
17321
+ while (instB) {
17322
+ if (instB === instA) {
17323
+ return true;
17324
+ }
17325
+ instB = instB._hostParent;
17326
+ }
17327
+ return false;
17328
+ }
17329
+
17330
+ /**
17331
+ * Return the parent instance of the passed-in instance.
17332
+ */
17333
+ function getParentInstance(inst) {
17334
+ !('_hostNode' in inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
17335
+
17336
+ return inst._hostParent;
17337
+ }
17338
+
17339
+ /**
17340
+ * Simulates the traversal of a two-phase, capture/bubble event dispatch.
17341
+ */
17342
+ function traverseTwoPhase(inst, fn, arg) {
17343
+ var path = [];
17344
+ while (inst) {
17345
+ path.push(inst);
17346
+ inst = inst._hostParent;
17347
+ }
17348
+ var i;
17349
+ for (i = path.length; i-- > 0;) {
17350
+ fn(path[i], false, arg);
17351
+ }
17352
+ for (i = 0; i < path.length; i++) {
17353
+ fn(path[i], true, arg);
17354
+ }
17355
+ }
17356
+
17357
+ /**
17358
+ * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
17359
+ * should would receive a `mouseEnter` or `mouseLeave` event.
17360
+ *
17361
+ * Does not invoke the callback on the nearest common ancestor because nothing
17362
+ * "entered" or "left" that element.
17363
+ */
17364
+ function traverseEnterLeave(from, to, fn, argFrom, argTo) {
17365
+ var common = from && to ? getLowestCommonAncestor(from, to) : null;
17366
+ var pathFrom = [];
17367
+ while (from && from !== common) {
17368
+ pathFrom.push(from);
17369
+ from = from._hostParent;
17370
+ }
17371
+ var pathTo = [];
17372
+ while (to && to !== common) {
17373
+ pathTo.push(to);
17374
+ to = to._hostParent;
17375
+ }
17376
+ var i;
17377
+ for (i = 0; i < pathFrom.length; i++) {
17378
+ fn(pathFrom[i], true, argFrom);
17379
+ }
17380
+ for (i = pathTo.length; i-- > 0;) {
17381
+ fn(pathTo[i], false, argTo);
17382
+ }
17383
+ }
17384
+
17385
+ module.exports = {
17386
+ isAncestor: isAncestor,
17387
+ getLowestCommonAncestor: getLowestCommonAncestor,
17388
+ getParentInstance: getParentInstance,
17389
+ traverseTwoPhase: traverseTwoPhase,
17390
+ traverseEnterLeave: traverseEnterLeave
17391
+ };
17392
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
17393
+
17394
+ /***/ },
17395
+ /* 136 */
17396
+ /***/ function(module, exports, __webpack_require__) {
17397
+
17398
+ /* WEBPACK VAR INJECTION */(function(process) {/**
17399
+ * Copyright 2013-present, Facebook, Inc.
17400
+ * All rights reserved.
17401
+ *
17402
+ * This source code is licensed under the BSD-style license found in the
17403
+ * LICENSE file in the root directory of this source tree. An additional grant
17404
+ * of patent rights can be found in the PATENTS file in the same directory.
17405
+ *
17406
+ * @providesModule ReactDOMTextComponent
17407
+ */
17408
+
17409
+ 'use strict';
17410
+
17411
+ var _prodInvariant = __webpack_require__(8),
17412
+ _assign = __webpack_require__(5);
17413
+
17414
+ var DOMChildrenOperations = __webpack_require__(82);
17415
+ var DOMLazyTree = __webpack_require__(83);
17416
+ var ReactDOMComponentTree = __webpack_require__(37);
17417
+
17418
+ var escapeTextContentForBrowser = __webpack_require__(88);
17419
+ var invariant = __webpack_require__(9);
17420
+ var validateDOMNesting = __webpack_require__(133);
17421
+
17422
+ /**
17423
+ * Text nodes violate a couple assumptions that React makes about components:
17424
+ *
17425
+ * - When mounting text into the DOM, adjacent text nodes are merged.
17426
+ * - Text nodes cannot be assigned a React root ID.
17427
+ *
17428
+ * This component is used to wrap strings between comment nodes so that they
17429
+ * can undergo the same reconciliation that is applied to elements.
17430
+ *
17431
+ * TODO: Investigate representing React components in the DOM with text nodes.
17432
+ *
17433
+ * @class ReactDOMTextComponent
17434
+ * @extends ReactComponent
17435
+ * @internal
17436
+ */
17437
+ var ReactDOMTextComponent = function (text) {
17438
+ // TODO: This is really a ReactText (ReactNode), not a ReactElement
17439
+ this._currentElement = text;
17440
+ this._stringText = '' + text;
17441
+ // ReactDOMComponentTree uses these:
17442
+ this._hostNode = null;
17443
+ this._hostParent = null;
17444
+
17445
+ // Properties
17446
+ this._domID = 0;
17447
+ this._mountIndex = 0;
17448
+ this._closingComment = null;
17449
+ this._commentNodes = null;
17450
+ };
17451
+
17452
+ _assign(ReactDOMTextComponent.prototype, {
17453
+
17454
+ /**
17455
+ * Creates the markup for this text node. This node is not intended to have
17456
+ * any features besides containing text content.
17457
+ *
17458
+ * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
17459
+ * @return {string} Markup for this text node.
17460
+ * @internal
17461
+ */
17462
+ mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
17463
+ if (process.env.NODE_ENV !== 'production') {
17464
+ var parentInfo;
17465
+ if (hostParent != null) {
17466
+ parentInfo = hostParent._ancestorInfo;
17467
+ } else if (hostContainerInfo != null) {
17468
+ parentInfo = hostContainerInfo._ancestorInfo;
17469
+ }
17470
+ if (parentInfo) {
17471
+ // parentInfo should always be present except for the top-level
17472
+ // component when server rendering
17473
+ validateDOMNesting(null, this._stringText, this, parentInfo);
17474
+ }
17475
+ }
17476
+
17477
+ var domID = hostContainerInfo._idCounter++;
17478
+ var openingValue = ' react-text: ' + domID + ' ';
17479
+ var closingValue = ' /react-text ';
17480
+ this._domID = domID;
17481
+ this._hostParent = hostParent;
17482
+ if (transaction.useCreateElement) {
17483
+ var ownerDocument = hostContainerInfo._ownerDocument;
17484
+ var openingComment = ownerDocument.createComment(openingValue);
17485
+ var closingComment = ownerDocument.createComment(closingValue);
17486
+ var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());
17487
+ DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));
17488
+ if (this._stringText) {
17489
+ DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));
17490
+ }
17491
+ DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));
17492
+ ReactDOMComponentTree.precacheNode(this, openingComment);
17493
+ this._closingComment = closingComment;
17494
+ return lazyTree;
17495
+ } else {
17496
+ var escapedText = escapeTextContentForBrowser(this._stringText);
17497
+
17498
+ if (transaction.renderToStaticMarkup) {
17499
+ // Normally we'd wrap this between comment nodes for the reasons stated
17500
+ // above, but since this is a situation where React won't take over
17501
+ // (static pages), we can simply return the text as it is.
17502
+ return escapedText;
17503
+ }
17504
+
17505
+ return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';
17506
+ }
17507
+ },
17508
+
17509
+ /**
17510
+ * Updates this component by updating the text content.
17511
+ *
17512
+ * @param {ReactText} nextText The next text content
17513
+ * @param {ReactReconcileTransaction} transaction
17514
+ * @internal
17515
+ */
17516
+ receiveComponent: function (nextText, transaction) {
17517
+ if (nextText !== this._currentElement) {
17518
+ this._currentElement = nextText;
17519
+ var nextStringText = '' + nextText;
17520
+ if (nextStringText !== this._stringText) {
17521
+ // TODO: Save this as pending props and use performUpdateIfNecessary
17522
+ // and/or updateComponent to do the actual update for consistency with
17523
+ // other component types?
17524
+ this._stringText = nextStringText;
17525
+ var commentNodes = this.getHostNode();
17526
+ DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
17527
+ }
17528
+ }
17529
+ },
17530
+
17531
+ getHostNode: function () {
17532
+ var hostNode = this._commentNodes;
17533
+ if (hostNode) {
17534
+ return hostNode;
17535
+ }
17536
+ if (!this._closingComment) {
17537
+ var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);
17538
+ var node = openingComment.nextSibling;
17539
+ while (true) {
17540
+ !(node != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;
17541
+ if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
17542
+ this._closingComment = node;
17543
+ break;
17544
+ }
17545
+ node = node.nextSibling;
17546
+ }
17547
+ }
17548
+ hostNode = [this._hostNode, this._closingComment];
17549
+ this._commentNodes = hostNode;
17550
+ return hostNode;
17551
+ },
17552
+
17553
+ unmountComponent: function () {
17554
+ this._closingComment = null;
17555
+ this._commentNodes = null;
17556
+ ReactDOMComponentTree.uncacheNode(this);
17557
+ }
17558
+
17559
+ });
17560
+
17561
+ module.exports = ReactDOMTextComponent;
17562
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
17563
+
17564
+ /***/ },
17565
+ /* 137 */
17566
+ /***/ function(module, exports, __webpack_require__) {
17567
+
17568
+ /**
17569
+ * Copyright 2013-present, Facebook, Inc.
17570
+ * All rights reserved.
17571
+ *
17572
+ * This source code is licensed under the BSD-style license found in the
17573
+ * LICENSE file in the root directory of this source tree. An additional grant
17574
+ * of patent rights can be found in the PATENTS file in the same directory.
17575
+ *
17576
+ * @providesModule ReactDefaultBatchingStrategy
17577
+ */
17578
+
17579
+ 'use strict';
17580
+
17581
+ var _assign = __webpack_require__(5);
17582
+
17583
+ var ReactUpdates = __webpack_require__(57);
17584
+ var Transaction = __webpack_require__(70);
17585
+
17586
+ var emptyFunction = __webpack_require__(13);
17587
+
17588
+ var RESET_BATCHED_UPDATES = {
17589
+ initialize: emptyFunction,
17590
+ close: function () {
17591
+ ReactDefaultBatchingStrategy.isBatchingUpdates = false;
17592
+ }
17593
+ };
17594
+
17595
+ var FLUSH_BATCHED_UPDATES = {
17596
+ initialize: emptyFunction,
17597
+ close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
17598
+ };
17599
+
17600
+ var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
17601
+
17602
+ function ReactDefaultBatchingStrategyTransaction() {
17603
+ this.reinitializeTransaction();
17604
+ }
17605
+
17606
+ _assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
17607
+ getTransactionWrappers: function () {
17608
+ return TRANSACTION_WRAPPERS;
17609
+ }
17610
+ });
17611
+
17612
+ var transaction = new ReactDefaultBatchingStrategyTransaction();
17613
+
17614
+ var ReactDefaultBatchingStrategy = {
17615
+ isBatchingUpdates: false,
17616
+
17617
+ /**
17618
+ * Call the provided function in a context within which calls to `setState`
17619
+ * and friends are batched such that components aren't updated unnecessarily.
17620
+ */
17621
+ batchedUpdates: function (callback, a, b, c, d, e) {
17622
+ var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
17623
+
17624
+ ReactDefaultBatchingStrategy.isBatchingUpdates = true;
17625
+
17626
+ // The code is written this way to avoid extra allocations
17627
+ if (alreadyBatchingUpdates) {
17628
+ callback(a, b, c, d, e);
17629
+ } else {
17630
+ transaction.perform(callback, null, a, b, c, d, e);
17631
+ }
17632
+ }
17633
+ };
17634
+
17635
+ module.exports = ReactDefaultBatchingStrategy;
17636
+
17637
+ /***/ },
17638
+ /* 138 */
17639
+ /***/ function(module, exports, __webpack_require__) {
17640
+
17641
+ /**
17642
+ * Copyright 2013-present, Facebook, Inc.
17643
+ * All rights reserved.
17644
+ *
17645
+ * This source code is licensed under the BSD-style license found in the
17646
+ * LICENSE file in the root directory of this source tree. An additional grant
17647
+ * of patent rights can be found in the PATENTS file in the same directory.
17648
+ *
17649
+ * @providesModule ReactEventListener
17650
+ */
17651
+
17652
+ 'use strict';
17653
+
17654
+ var _assign = __webpack_require__(5);
17655
+
17656
+ var EventListener = __webpack_require__(139);
17657
+ var ExecutionEnvironment = __webpack_require__(50);
17658
+ var PooledClass = __webpack_require__(7);
17659
+ var ReactDOMComponentTree = __webpack_require__(37);
17660
+ var ReactUpdates = __webpack_require__(57);
17661
+
17662
+ var getEventTarget = __webpack_require__(71);
17663
+ var getUnboundedScrollPosition = __webpack_require__(140);
17664
+
17665
+ /**
17666
+ * Find the deepest React component completely containing the root of the
17667
+ * passed-in instance (for use when entire React trees are nested within each
17668
+ * other). If React trees are not nested, returns null.
17669
+ */
17670
+ function findParent(inst) {
17671
+ // TODO: It may be a good idea to cache this to prevent unnecessary DOM
17672
+ // traversal, but caching is difficult to do correctly without using a
17673
+ // mutation observer to listen for all DOM changes.
17674
+ while (inst._hostParent) {
17675
+ inst = inst._hostParent;
17676
+ }
17677
+ var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
17678
+ var container = rootNode.parentNode;
17679
+ return ReactDOMComponentTree.getClosestInstanceFromNode(container);
17680
+ }
17681
+
17682
+ // Used to store ancestor hierarchy in top level callback
17683
+ function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
17684
+ this.topLevelType = topLevelType;
17685
+ this.nativeEvent = nativeEvent;
17686
+ this.ancestors = [];
17687
+ }
17688
+ _assign(TopLevelCallbackBookKeeping.prototype, {
17689
+ destructor: function () {
17690
+ this.topLevelType = null;
17691
+ this.nativeEvent = null;
17692
+ this.ancestors.length = 0;
17693
+ }
17694
+ });
17695
+ PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);
17696
+
17697
+ function handleTopLevelImpl(bookKeeping) {
17698
+ var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);
17699
+ var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);
17700
+
17701
+ // Loop through the hierarchy, in case there's any nested components.
17702
+ // It's important that we build the array of ancestors before calling any
17703
+ // event handlers, because event handlers can modify the DOM, leading to
17704
+ // inconsistencies with ReactMount's node cache. See #1105.
17705
+ var ancestor = targetInst;
17706
+ do {
17707
+ bookKeeping.ancestors.push(ancestor);
17708
+ ancestor = ancestor && findParent(ancestor);
17709
+ } while (ancestor);
17710
+
17711
+ for (var i = 0; i < bookKeeping.ancestors.length; i++) {
17712
+ targetInst = bookKeeping.ancestors[i];
17713
+ ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));
17714
+ }
17715
+ }
17716
+
17717
+ function scrollValueMonitor(cb) {
17718
+ var scrollPosition = getUnboundedScrollPosition(window);
17719
+ cb(scrollPosition);
17720
+ }
17721
+
17722
+ var ReactEventListener = {
17723
+ _enabled: true,
17724
+ _handleTopLevel: null,
17725
+
17726
+ WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,
17727
+
17728
+ setHandleTopLevel: function (handleTopLevel) {
17729
+ ReactEventListener._handleTopLevel = handleTopLevel;
17730
+ },
17731
+
17732
+ setEnabled: function (enabled) {
17733
+ ReactEventListener._enabled = !!enabled;
17734
+ },
17735
+
17736
+ isEnabled: function () {
17737
+ return ReactEventListener._enabled;
17738
+ },
17739
+
17740
+ /**
17741
+ * Traps top-level events by using event bubbling.
17742
+ *
17743
+ * @param {string} topLevelType Record from `EventConstants`.
17744
+ * @param {string} handlerBaseName Event name (e.g. "click").
17745
+ * @param {object} handle Element on which to attach listener.
17746
+ * @return {?object} An object with a remove function which will forcefully
17747
+ * remove the listener.
17748
+ * @internal
17749
+ */
17750
+ trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {
17751
+ var element = handle;
17752
+ if (!element) {
17753
+ return null;
17754
+ }
17755
+ return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
17756
+ },
17757
+
17758
+ /**
17759
+ * Traps a top-level event by using event capturing.
17760
+ *
17761
+ * @param {string} topLevelType Record from `EventConstants`.
17762
+ * @param {string} handlerBaseName Event name (e.g. "click").
17763
+ * @param {object} handle Element on which to attach listener.
17764
+ * @return {?object} An object with a remove function which will forcefully
17765
+ * remove the listener.
17766
+ * @internal
17767
+ */
17768
+ trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {
17769
+ var element = handle;
17770
+ if (!element) {
17771
+ return null;
17772
+ }
17773
+ return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
17774
+ },
17775
+
17776
+ monitorScrollValue: function (refresh) {
17777
+ var callback = scrollValueMonitor.bind(null, refresh);
17778
+ EventListener.listen(window, 'scroll', callback);
17779
+ },
17780
+
17781
+ dispatchEvent: function (topLevelType, nativeEvent) {
17782
+ if (!ReactEventListener._enabled) {
17783
+ return;
17784
+ }
17785
+
17786
+ var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
17787
+ try {
17788
+ // Event queue being processed in the same cycle allows
17789
+ // `preventDefault`.
17790
+ ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
17791
+ } finally {
17792
+ TopLevelCallbackBookKeeping.release(bookKeeping);
17793
+ }
17794
+ }
17795
+ };
17796
+
17797
+ module.exports = ReactEventListener;
17798
+
17799
+ /***/ },
17800
+ /* 139 */
17801
+ /***/ function(module, exports, __webpack_require__) {
17802
+
17803
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
17804
+
17805
+ /**
17806
+ * Copyright (c) 2013-present, Facebook, Inc.
17807
+ *
17808
+ * Licensed under the Apache License, Version 2.0 (the "License");
17809
+ * you may not use this file except in compliance with the License.
17810
+ * You may obtain a copy of the License at
17811
+ *
17812
+ * http://www.apache.org/licenses/LICENSE-2.0
17813
+ *
17814
+ * Unless required by applicable law or agreed to in writing, software
17815
+ * distributed under the License is distributed on an "AS IS" BASIS,
17816
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17817
+ * See the License for the specific language governing permissions and
17818
+ * limitations under the License.
17819
+ *
17820
+ * @typechecks
17821
+ */
17822
+
17823
+ var emptyFunction = __webpack_require__(13);
17824
+
17825
+ /**
17826
+ * Upstream version of event listener. Does not take into account specific
17827
+ * nature of platform.
17828
+ */
17829
+ var EventListener = {
17830
+ /**
17831
+ * Listen to DOM events during the bubble phase.
17832
+ *
17833
+ * @param {DOMEventTarget} target DOM element to register listener on.
17834
+ * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
17835
+ * @param {function} callback Callback function.
17836
+ * @return {object} Object with a `remove` method.
17837
+ */
17838
+ listen: function listen(target, eventType, callback) {
17839
+ if (target.addEventListener) {
17840
+ target.addEventListener(eventType, callback, false);
17841
+ return {
17842
+ remove: function remove() {
17843
+ target.removeEventListener(eventType, callback, false);
17844
+ }
17845
+ };
17846
+ } else if (target.attachEvent) {
17847
+ target.attachEvent('on' + eventType, callback);
17848
+ return {
17849
+ remove: function remove() {
17850
+ target.detachEvent('on' + eventType, callback);
17851
+ }
17852
+ };
17853
+ }
17854
+ },
17855
+
17856
+ /**
17857
+ * Listen to DOM events during the capture phase.
17858
+ *
17859
+ * @param {DOMEventTarget} target DOM element to register listener on.
17860
+ * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
17861
+ * @param {function} callback Callback function.
17862
+ * @return {object} Object with a `remove` method.
17863
+ */
17864
+ capture: function capture(target, eventType, callback) {
17865
+ if (target.addEventListener) {
17866
+ target.addEventListener(eventType, callback, true);
17867
+ return {
17868
+ remove: function remove() {
17869
+ target.removeEventListener(eventType, callback, true);
17870
+ }
17871
+ };
17872
+ } else {
17873
+ if (process.env.NODE_ENV !== 'production') {
17874
+ console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
17875
+ }
17876
+ return {
17877
+ remove: emptyFunction
17878
+ };
17879
+ }
17880
+ },
17881
+
17882
+ registerDefault: function registerDefault() {}
17883
+ };
17884
+
17885
+ module.exports = EventListener;
17886
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
17887
+
17888
+ /***/ },
17889
+ /* 140 */
17890
+ /***/ function(module, exports) {
17891
+
17892
+ /**
17893
+ * Copyright (c) 2013-present, Facebook, Inc.
17894
+ * All rights reserved.
17895
+ *
17896
+ * This source code is licensed under the BSD-style license found in the
17897
+ * LICENSE file in the root directory of this source tree. An additional grant
17898
+ * of patent rights can be found in the PATENTS file in the same directory.
17899
+ *
17900
+ * @typechecks
17901
+ */
17902
+
17903
+ 'use strict';
17904
+
17905
+ /**
17906
+ * Gets the scroll position of the supplied element or window.
17907
+ *
17908
+ * The return values are unbounded, unlike `getScrollPosition`. This means they
17909
+ * may be negative or exceed the element boundaries (which is possible using
17910
+ * inertial scrolling).
17911
+ *
17912
+ * @param {DOMWindow|DOMElement} scrollable
17913
+ * @return {object} Map with `x` and `y` keys.
17914
+ */
17915
+
17916
+ function getUnboundedScrollPosition(scrollable) {
17917
+ if (scrollable === window) {
17918
+ return {
17919
+ x: window.pageXOffset || document.documentElement.scrollLeft,
17920
+ y: window.pageYOffset || document.documentElement.scrollTop
17921
+ };
17922
+ }
17923
+ return {
17924
+ x: scrollable.scrollLeft,
17925
+ y: scrollable.scrollTop
17926
+ };
17927
+ }
17928
+
17929
+ module.exports = getUnboundedScrollPosition;
17930
+
17931
+ /***/ },
17932
+ /* 141 */
17933
+ /***/ function(module, exports, __webpack_require__) {
17934
+
17935
+ /**
17936
+ * Copyright 2013-present, Facebook, Inc.
17937
+ * All rights reserved.
17938
+ *
17939
+ * This source code is licensed under the BSD-style license found in the
17940
+ * LICENSE file in the root directory of this source tree. An additional grant
17941
+ * of patent rights can be found in the PATENTS file in the same directory.
17942
+ *
17943
+ * @providesModule ReactInjection
17944
+ */
17945
+
17946
+ 'use strict';
17947
+
17948
+ var DOMProperty = __webpack_require__(38);
17949
+ var EventPluginHub = __webpack_require__(44);
17950
+ var EventPluginUtils = __webpack_require__(46);
17951
+ var ReactComponentEnvironment = __webpack_require__(119);
17952
+ var ReactClass = __webpack_require__(22);
17953
+ var ReactEmptyComponent = __webpack_require__(127);
17954
+ var ReactBrowserEventEmitter = __webpack_require__(108);
17955
+ var ReactHostComponent = __webpack_require__(128);
17956
+ var ReactUpdates = __webpack_require__(57);
17957
+
17958
+ var ReactInjection = {
17959
+ Component: ReactComponentEnvironment.injection,
17960
+ Class: ReactClass.injection,
17961
+ DOMProperty: DOMProperty.injection,
17962
+ EmptyComponent: ReactEmptyComponent.injection,
17963
+ EventPluginHub: EventPluginHub.injection,
17964
+ EventPluginUtils: EventPluginUtils.injection,
17965
+ EventEmitter: ReactBrowserEventEmitter.injection,
17966
+ HostComponent: ReactHostComponent.injection,
17967
+ Updates: ReactUpdates.injection
17968
+ };
17969
+
17970
+ module.exports = ReactInjection;
17971
+
17972
+ /***/ },
17973
+ /* 142 */
17974
+ /***/ function(module, exports, __webpack_require__) {
17975
+
17976
+ /* WEBPACK VAR INJECTION */(function(process) {/**
17977
+ * Copyright 2013-present, Facebook, Inc.
17978
+ * All rights reserved.
17979
+ *
17980
+ * This source code is licensed under the BSD-style license found in the
17981
+ * LICENSE file in the root directory of this source tree. An additional grant
17982
+ * of patent rights can be found in the PATENTS file in the same directory.
17983
+ *
17984
+ * @providesModule ReactReconcileTransaction
17985
+ */
17986
+
17987
+ 'use strict';
17988
+
17989
+ var _assign = __webpack_require__(5);
17990
+
17991
+ var CallbackQueue = __webpack_require__(58);
17992
+ var PooledClass = __webpack_require__(7);
17993
+ var ReactBrowserEventEmitter = __webpack_require__(108);
17994
+ var ReactInputSelection = __webpack_require__(143);
17995
+ var ReactInstrumentation = __webpack_require__(63);
17996
+ var Transaction = __webpack_require__(70);
17997
+ var ReactUpdateQueue = __webpack_require__(132);
17998
+
17999
+ /**
18000
+ * Ensures that, when possible, the selection range (currently selected text
18001
+ * input) is not disturbed by performing the transaction.
18002
+ */
18003
+ var SELECTION_RESTORATION = {
18004
+ /**
18005
+ * @return {Selection} Selection information.
18006
+ */
18007
+ initialize: ReactInputSelection.getSelectionInformation,
18008
+ /**
18009
+ * @param {Selection} sel Selection information returned from `initialize`.
18010
+ */
18011
+ close: ReactInputSelection.restoreSelection
18012
+ };
18013
+
18014
+ /**
18015
+ * Suppresses events (blur/focus) that could be inadvertently dispatched due to
18016
+ * high level DOM manipulations (like temporarily removing a text input from the
18017
+ * DOM).
18018
+ */
18019
+ var EVENT_SUPPRESSION = {
18020
+ /**
18021
+ * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
18022
+ * the reconciliation.
18023
+ */
18024
+ initialize: function () {
18025
+ var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
18026
+ ReactBrowserEventEmitter.setEnabled(false);
18027
+ return currentlyEnabled;
18028
+ },
18029
+
18030
+ /**
18031
+ * @param {boolean} previouslyEnabled Enabled status of
18032
+ * `ReactBrowserEventEmitter` before the reconciliation occurred. `close`
18033
+ * restores the previous value.
18034
+ */
18035
+ close: function (previouslyEnabled) {
18036
+ ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
18037
+ }
18038
+ };
18039
+
18040
+ /**
18041
+ * Provides a queue for collecting `componentDidMount` and
18042
+ * `componentDidUpdate` callbacks during the transaction.
18043
+ */
18044
+ var ON_DOM_READY_QUEUEING = {
18045
+ /**
18046
+ * Initializes the internal `onDOMReady` queue.
18047
+ */
18048
+ initialize: function () {
18049
+ this.reactMountReady.reset();
18050
+ },
18051
+
18052
+ /**
18053
+ * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
18054
+ */
18055
+ close: function () {
18056
+ this.reactMountReady.notifyAll();
18057
+ }
18058
+ };
18059
+
18060
+ /**
18061
+ * Executed within the scope of the `Transaction` instance. Consider these as
18062
+ * being member methods, but with an implied ordering while being isolated from
18063
+ * each other.
18064
+ */
18065
+ var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];
18066
+
18067
+ if (process.env.NODE_ENV !== 'production') {
18068
+ TRANSACTION_WRAPPERS.push({
18069
+ initialize: ReactInstrumentation.debugTool.onBeginFlush,
18070
+ close: ReactInstrumentation.debugTool.onEndFlush
18071
+ });
18072
+ }
18073
+
18074
+ /**
18075
+ * Currently:
18076
+ * - The order that these are listed in the transaction is critical:
18077
+ * - Suppresses events.
18078
+ * - Restores selection range.
18079
+ *
18080
+ * Future:
18081
+ * - Restore document/overflow scroll positions that were unintentionally
18082
+ * modified via DOM insertions above the top viewport boundary.
18083
+ * - Implement/integrate with customized constraint based layout system and keep
18084
+ * track of which dimensions must be remeasured.
18085
+ *
18086
+ * @class ReactReconcileTransaction
18087
+ */
18088
+ function ReactReconcileTransaction(useCreateElement) {
18089
+ this.reinitializeTransaction();
18090
+ // Only server-side rendering really needs this option (see
18091
+ // `ReactServerRendering`), but server-side uses
18092
+ // `ReactServerRenderingTransaction` instead. This option is here so that it's
18093
+ // accessible and defaults to false when `ReactDOMComponent` and
18094
+ // `ReactDOMTextComponent` checks it in `mountComponent`.`
18095
+ this.renderToStaticMarkup = false;
18096
+ this.reactMountReady = CallbackQueue.getPooled(null);
18097
+ this.useCreateElement = useCreateElement;
18098
+ }
18099
+
18100
+ var Mixin = {
18101
+ /**
18102
+ * @see Transaction
18103
+ * @abstract
18104
+ * @final
18105
+ * @return {array<object>} List of operation wrap procedures.
18106
+ * TODO: convert to array<TransactionWrapper>
18107
+ */
18108
+ getTransactionWrappers: function () {
18109
+ return TRANSACTION_WRAPPERS;
18110
+ },
18111
+
18112
+ /**
18113
+ * @return {object} The queue to collect `onDOMReady` callbacks with.
18114
+ */
18115
+ getReactMountReady: function () {
18116
+ return this.reactMountReady;
18117
+ },
18118
+
18119
+ /**
18120
+ * @return {object} The queue to collect React async events.
18121
+ */
18122
+ getUpdateQueue: function () {
18123
+ return ReactUpdateQueue;
18124
+ },
18125
+
18126
+ /**
18127
+ * Save current transaction state -- if the return value from this method is
18128
+ * passed to `rollback`, the transaction will be reset to that state.
18129
+ */
18130
+ checkpoint: function () {
18131
+ // reactMountReady is the our only stateful wrapper
18132
+ return this.reactMountReady.checkpoint();
18133
+ },
18134
+
18135
+ rollback: function (checkpoint) {
18136
+ this.reactMountReady.rollback(checkpoint);
18137
+ },
18138
+
18139
+ /**
18140
+ * `PooledClass` looks for this, and will invoke this before allowing this
18141
+ * instance to be reused.
18142
+ */
18143
+ destructor: function () {
18144
+ CallbackQueue.release(this.reactMountReady);
18145
+ this.reactMountReady = null;
18146
+ }
18147
+ };
18148
+
18149
+ _assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
18150
+
18151
+ PooledClass.addPoolingTo(ReactReconcileTransaction);
18152
+
18153
+ module.exports = ReactReconcileTransaction;
18154
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
18155
+
18156
+ /***/ },
18157
+ /* 143 */
18158
+ /***/ function(module, exports, __webpack_require__) {
18159
+
18160
+ /**
18161
+ * Copyright 2013-present, Facebook, Inc.
18162
+ * All rights reserved.
18163
+ *
18164
+ * This source code is licensed under the BSD-style license found in the
18165
+ * LICENSE file in the root directory of this source tree. An additional grant
18166
+ * of patent rights can be found in the PATENTS file in the same directory.
18167
+ *
18168
+ * @providesModule ReactInputSelection
18169
+ */
18170
+
18171
+ 'use strict';
18172
+
18173
+ var ReactDOMSelection = __webpack_require__(144);
18174
+
18175
+ var containsNode = __webpack_require__(146);
18176
+ var focusNode = __webpack_require__(97);
18177
+ var getActiveElement = __webpack_require__(149);
18178
+
18179
+ function isInDocument(node) {
18180
+ return containsNode(document.documentElement, node);
18181
+ }
18182
+
18183
+ /**
18184
+ * @ReactInputSelection: React input selection module. Based on Selection.js,
18185
+ * but modified to be suitable for react and has a couple of bug fixes (doesn't
18186
+ * assume buttons have range selections allowed).
18187
+ * Input selection module for React.
18188
+ */
18189
+ var ReactInputSelection = {
18190
+
18191
+ hasSelectionCapabilities: function (elem) {
18192
+ var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
18193
+ return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');
18194
+ },
18195
+
18196
+ getSelectionInformation: function () {
18197
+ var focusedElem = getActiveElement();
18198
+ return {
18199
+ focusedElem: focusedElem,
18200
+ selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
18201
+ };
18202
+ },
18203
+
18204
+ /**
18205
+ * @restoreSelection: If any selection information was potentially lost,
18206
+ * restore it. This is useful when performing operations that could remove dom
18207
+ * nodes and place them back in, resulting in focus being lost.
18208
+ */
18209
+ restoreSelection: function (priorSelectionInformation) {
18210
+ var curFocusedElem = getActiveElement();
18211
+ var priorFocusedElem = priorSelectionInformation.focusedElem;
18212
+ var priorSelectionRange = priorSelectionInformation.selectionRange;
18213
+ if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
18214
+ if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
18215
+ ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
18216
+ }
18217
+ focusNode(priorFocusedElem);
18218
+ }
18219
+ },
18220
+
18221
+ /**
18222
+ * @getSelection: Gets the selection bounds of a focused textarea, input or
18223
+ * contentEditable node.
18224
+ * -@input: Look up selection bounds of this input
18225
+ * -@return {start: selectionStart, end: selectionEnd}
18226
+ */
18227
+ getSelection: function (input) {
18228
+ var selection;
18229
+
18230
+ if ('selectionStart' in input) {
18231
+ // Modern browser with input or textarea.
18232
+ selection = {
18233
+ start: input.selectionStart,
18234
+ end: input.selectionEnd
18235
+ };
18236
+ } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
18237
+ // IE8 input.
18238
+ var range = document.selection.createRange();
18239
+ // There can only be one selection per document in IE, so it must
18240
+ // be in our element.
18241
+ if (range.parentElement() === input) {
18242
+ selection = {
18243
+ start: -range.moveStart('character', -input.value.length),
18244
+ end: -range.moveEnd('character', -input.value.length)
18245
+ };
18246
+ }
18247
+ } else {
18248
+ // Content editable or old IE textarea.
18249
+ selection = ReactDOMSelection.getOffsets(input);
18250
+ }
18251
+
18252
+ return selection || { start: 0, end: 0 };
18253
+ },
18254
+
18255
+ /**
18256
+ * @setSelection: Sets the selection bounds of a textarea or input and focuses
18257
+ * the input.
18258
+ * -@input Set selection bounds of this input or textarea
18259
+ * -@offsets Object of same form that is returned from get*
18260
+ */
18261
+ setSelection: function (input, offsets) {
18262
+ var start = offsets.start;
18263
+ var end = offsets.end;
18264
+ if (end === undefined) {
18265
+ end = start;
18266
+ }
18267
+
18268
+ if ('selectionStart' in input) {
18269
+ input.selectionStart = start;
18270
+ input.selectionEnd = Math.min(end, input.value.length);
18271
+ } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {
18272
+ var range = input.createTextRange();
18273
+ range.collapse(true);
18274
+ range.moveStart('character', start);
18275
+ range.moveEnd('character', end - start);
18276
+ range.select();
18277
+ } else {
18278
+ ReactDOMSelection.setOffsets(input, offsets);
18279
+ }
18280
+ }
18281
+ };
18282
+
18283
+ module.exports = ReactInputSelection;
18284
+
18285
+ /***/ },
18286
+ /* 144 */
18287
+ /***/ function(module, exports, __webpack_require__) {
18288
+
18289
+ /**
18290
+ * Copyright 2013-present, Facebook, Inc.
18291
+ * All rights reserved.
18292
+ *
18293
+ * This source code is licensed under the BSD-style license found in the
18294
+ * LICENSE file in the root directory of this source tree. An additional grant
18295
+ * of patent rights can be found in the PATENTS file in the same directory.
18296
+ *
18297
+ * @providesModule ReactDOMSelection
18298
+ */
18299
+
18300
+ 'use strict';
18301
+
18302
+ var ExecutionEnvironment = __webpack_require__(50);
18303
+
18304
+ var getNodeForCharacterOffset = __webpack_require__(145);
18305
+ var getTextContentAccessor = __webpack_require__(52);
18306
+
18307
+ /**
18308
+ * While `isCollapsed` is available on the Selection object and `collapsed`
18309
+ * is available on the Range object, IE11 sometimes gets them wrong.
18310
+ * If the anchor/focus nodes and offsets are the same, the range is collapsed.
18311
+ */
18312
+ function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
18313
+ return anchorNode === focusNode && anchorOffset === focusOffset;
18314
+ }
18315
+
18316
+ /**
18317
+ * Get the appropriate anchor and focus node/offset pairs for IE.
18318
+ *
18319
+ * The catch here is that IE's selection API doesn't provide information
18320
+ * about whether the selection is forward or backward, so we have to
18321
+ * behave as though it's always forward.
18322
+ *
18323
+ * IE text differs from modern selection in that it behaves as though
18324
+ * block elements end with a new line. This means character offsets will
18325
+ * differ between the two APIs.
18326
+ *
18327
+ * @param {DOMElement} node
18328
+ * @return {object}
18329
+ */
18330
+ function getIEOffsets(node) {
18331
+ var selection = document.selection;
18332
+ var selectedRange = selection.createRange();
18333
+ var selectedLength = selectedRange.text.length;
18334
+
18335
+ // Duplicate selection so we can move range without breaking user selection.
18336
+ var fromStart = selectedRange.duplicate();
18337
+ fromStart.moveToElementText(node);
18338
+ fromStart.setEndPoint('EndToStart', selectedRange);
18339
+
18340
+ var startOffset = fromStart.text.length;
18341
+ var endOffset = startOffset + selectedLength;
18342
+
18343
+ return {
18344
+ start: startOffset,
18345
+ end: endOffset
18346
+ };
18347
+ }
18348
+
18349
+ /**
18350
+ * @param {DOMElement} node
18351
+ * @return {?object}
18352
+ */
18353
+ function getModernOffsets(node) {
18354
+ var selection = window.getSelection && window.getSelection();
18355
+
18356
+ if (!selection || selection.rangeCount === 0) {
18357
+ return null;
18358
+ }
18359
+
18360
+ var anchorNode = selection.anchorNode;
18361
+ var anchorOffset = selection.anchorOffset;
18362
+ var focusNode = selection.focusNode;
18363
+ var focusOffset = selection.focusOffset;
18364
+
18365
+ var currentRange = selection.getRangeAt(0);
18366
+
18367
+ // In Firefox, range.startContainer and range.endContainer can be "anonymous
18368
+ // divs", e.g. the up/down buttons on an <input type="number">. Anonymous
18369
+ // divs do not seem to expose properties, triggering a "Permission denied
18370
+ // error" if any of its properties are accessed. The only seemingly possible
18371
+ // way to avoid erroring is to access a property that typically works for
18372
+ // non-anonymous divs and catch any error that may otherwise arise. See
18373
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
18374
+ try {
18375
+ /* eslint-disable no-unused-expressions */
18376
+ currentRange.startContainer.nodeType;
18377
+ currentRange.endContainer.nodeType;
18378
+ /* eslint-enable no-unused-expressions */
18379
+ } catch (e) {
18380
+ return null;
18381
+ }
18382
+
18383
+ // If the node and offset values are the same, the selection is collapsed.
18384
+ // `Selection.isCollapsed` is available natively, but IE sometimes gets
18385
+ // this value wrong.
18386
+ var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);
18387
+
18388
+ var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;
18389
+
18390
+ var tempRange = currentRange.cloneRange();
18391
+ tempRange.selectNodeContents(node);
18392
+ tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);
18393
+
18394
+ var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);
18395
+
18396
+ var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
18397
+ var end = start + rangeLength;
18398
+
18399
+ // Detect whether the selection is backward.
18400
+ var detectionRange = document.createRange();
18401
+ detectionRange.setStart(anchorNode, anchorOffset);
18402
+ detectionRange.setEnd(focusNode, focusOffset);
18403
+ var isBackward = detectionRange.collapsed;
18404
+
18405
+ return {
18406
+ start: isBackward ? end : start,
18407
+ end: isBackward ? start : end
18408
+ };
18409
+ }
18410
+
18411
+ /**
18412
+ * @param {DOMElement|DOMTextNode} node
18413
+ * @param {object} offsets
18414
+ */
18415
+ function setIEOffsets(node, offsets) {
18416
+ var range = document.selection.createRange().duplicate();
18417
+ var start, end;
18418
+
18419
+ if (offsets.end === undefined) {
18420
+ start = offsets.start;
18421
+ end = start;
18422
+ } else if (offsets.start > offsets.end) {
18423
+ start = offsets.end;
18424
+ end = offsets.start;
18425
+ } else {
18426
+ start = offsets.start;
18427
+ end = offsets.end;
18428
+ }
18429
+
18430
+ range.moveToElementText(node);
18431
+ range.moveStart('character', start);
18432
+ range.setEndPoint('EndToStart', range);
18433
+ range.moveEnd('character', end - start);
18434
+ range.select();
18435
+ }
18436
+
18437
+ /**
18438
+ * In modern non-IE browsers, we can support both forward and backward
18439
+ * selections.
18440
+ *
18441
+ * Note: IE10+ supports the Selection object, but it does not support
18442
+ * the `extend` method, which means that even in modern IE, it's not possible
18443
+ * to programmatically create a backward selection. Thus, for all IE
18444
+ * versions, we use the old IE API to create our selections.
18445
+ *
18446
+ * @param {DOMElement|DOMTextNode} node
18447
+ * @param {object} offsets
18448
+ */
18449
+ function setModernOffsets(node, offsets) {
18450
+ if (!window.getSelection) {
18451
+ return;
18452
+ }
18453
+
18454
+ var selection = window.getSelection();
18455
+ var length = node[getTextContentAccessor()].length;
18456
+ var start = Math.min(offsets.start, length);
18457
+ var end = offsets.end === undefined ? start : Math.min(offsets.end, length);
18458
+
18459
+ // IE 11 uses modern selection, but doesn't support the extend method.
18460
+ // Flip backward selections, so we can set with a single range.
18461
+ if (!selection.extend && start > end) {
18462
+ var temp = end;
18463
+ end = start;
18464
+ start = temp;
18465
+ }
18466
+
18467
+ var startMarker = getNodeForCharacterOffset(node, start);
18468
+ var endMarker = getNodeForCharacterOffset(node, end);
18469
+
18470
+ if (startMarker && endMarker) {
18471
+ var range = document.createRange();
18472
+ range.setStart(startMarker.node, startMarker.offset);
18473
+ selection.removeAllRanges();
18474
+
18475
+ if (start > end) {
18476
+ selection.addRange(range);
18477
+ selection.extend(endMarker.node, endMarker.offset);
18478
+ } else {
18479
+ range.setEnd(endMarker.node, endMarker.offset);
18480
+ selection.addRange(range);
18481
+ }
18482
+ }
18483
+ }
18484
+
18485
+ var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);
18486
+
18487
+ var ReactDOMSelection = {
18488
+ /**
18489
+ * @param {DOMElement} node
18490
+ */
18491
+ getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,
18492
+
18493
+ /**
18494
+ * @param {DOMElement|DOMTextNode} node
18495
+ * @param {object} offsets
18496
+ */
18497
+ setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
18498
+ };
18499
+
18500
+ module.exports = ReactDOMSelection;
18501
+
18502
+ /***/ },
18503
+ /* 145 */
18504
+ /***/ function(module, exports) {
18505
+
18506
+ /**
18507
+ * Copyright 2013-present, Facebook, Inc.
18508
+ * All rights reserved.
18509
+ *
18510
+ * This source code is licensed under the BSD-style license found in the
18511
+ * LICENSE file in the root directory of this source tree. An additional grant
18512
+ * of patent rights can be found in the PATENTS file in the same directory.
18513
+ *
18514
+ * @providesModule getNodeForCharacterOffset
18515
+ */
18516
+
18517
+ 'use strict';
18518
+
18519
+ /**
18520
+ * Given any node return the first leaf node without children.
18521
+ *
18522
+ * @param {DOMElement|DOMTextNode} node
18523
+ * @return {DOMElement|DOMTextNode}
18524
+ */
18525
+
18526
+ function getLeafNode(node) {
18527
+ while (node && node.firstChild) {
18528
+ node = node.firstChild;
18529
+ }
18530
+ return node;
18531
+ }
18532
+
18533
+ /**
18534
+ * Get the next sibling within a container. This will walk up the
18535
+ * DOM if a node's siblings have been exhausted.
18536
+ *
18537
+ * @param {DOMElement|DOMTextNode} node
18538
+ * @return {?DOMElement|DOMTextNode}
18539
+ */
18540
+ function getSiblingNode(node) {
18541
+ while (node) {
18542
+ if (node.nextSibling) {
18543
+ return node.nextSibling;
18544
+ }
18545
+ node = node.parentNode;
18546
+ }
18547
+ }
18548
+
18549
+ /**
18550
+ * Get object describing the nodes which contain characters at offset.
18551
+ *
18552
+ * @param {DOMElement|DOMTextNode} root
18553
+ * @param {number} offset
18554
+ * @return {?object}
18555
+ */
18556
+ function getNodeForCharacterOffset(root, offset) {
18557
+ var node = getLeafNode(root);
18558
+ var nodeStart = 0;
18559
+ var nodeEnd = 0;
18560
+
18561
+ while (node) {
18562
+ if (node.nodeType === 3) {
18563
+ nodeEnd = nodeStart + node.textContent.length;
18564
+
18565
+ if (nodeStart <= offset && nodeEnd >= offset) {
18566
+ return {
18567
+ node: node,
18568
+ offset: offset - nodeStart
18569
+ };
18570
+ }
18571
+
18572
+ nodeStart = nodeEnd;
18573
+ }
18574
+
18575
+ node = getLeafNode(getSiblingNode(node));
18576
+ }
18577
+ }
18578
+
18579
+ module.exports = getNodeForCharacterOffset;
18580
+
18581
+ /***/ },
18582
+ /* 146 */
18583
+ /***/ function(module, exports, __webpack_require__) {
18584
+
18585
+ 'use strict';
18586
+
18587
+ /**
18588
+ * Copyright (c) 2013-present, Facebook, Inc.
18589
+ * All rights reserved.
18590
+ *
18591
+ * This source code is licensed under the BSD-style license found in the
18592
+ * LICENSE file in the root directory of this source tree. An additional grant
18593
+ * of patent rights can be found in the PATENTS file in the same directory.
18594
+ *
18595
+ *
18596
+ */
18597
+
18598
+ var isTextNode = __webpack_require__(147);
18599
+
18600
+ /*eslint-disable no-bitwise */
18601
+
18602
+ /**
18603
+ * Checks if a given DOM node contains or is another DOM node.
18604
+ */
18605
+ function containsNode(outerNode, innerNode) {
18606
+ if (!outerNode || !innerNode) {
18607
+ return false;
18608
+ } else if (outerNode === innerNode) {
18609
+ return true;
18610
+ } else if (isTextNode(outerNode)) {
18611
+ return false;
18612
+ } else if (isTextNode(innerNode)) {
18613
+ return containsNode(outerNode, innerNode.parentNode);
18614
+ } else if ('contains' in outerNode) {
18615
+ return outerNode.contains(innerNode);
18616
+ } else if (outerNode.compareDocumentPosition) {
18617
+ return !!(outerNode.compareDocumentPosition(innerNode) & 16);
18618
+ } else {
18619
+ return false;
18620
+ }
18621
+ }
18622
+
18623
+ module.exports = containsNode;
18624
+
18625
+ /***/ },
18626
+ /* 147 */
18627
+ /***/ function(module, exports, __webpack_require__) {
18628
+
18629
+ 'use strict';
18630
+
18631
+ /**
18632
+ * Copyright (c) 2013-present, Facebook, Inc.
18633
+ * All rights reserved.
18634
+ *
18635
+ * This source code is licensed under the BSD-style license found in the
18636
+ * LICENSE file in the root directory of this source tree. An additional grant
18637
+ * of patent rights can be found in the PATENTS file in the same directory.
18638
+ *
18639
+ * @typechecks
18640
+ */
18641
+
18642
+ var isNode = __webpack_require__(148);
18643
+
18644
+ /**
18645
+ * @param {*} object The object to check.
18646
+ * @return {boolean} Whether or not the object is a DOM text node.
18647
+ */
18648
+ function isTextNode(object) {
18649
+ return isNode(object) && object.nodeType == 3;
18650
+ }
18651
+
18652
+ module.exports = isTextNode;
18653
+
18654
+ /***/ },
18655
+ /* 148 */
18656
+ /***/ function(module, exports) {
18657
+
18658
+ 'use strict';
18659
+
18660
+ /**
18661
+ * Copyright (c) 2013-present, Facebook, Inc.
18662
+ * All rights reserved.
18663
+ *
18664
+ * This source code is licensed under the BSD-style license found in the
18665
+ * LICENSE file in the root directory of this source tree. An additional grant
18666
+ * of patent rights can be found in the PATENTS file in the same directory.
18667
+ *
18668
+ * @typechecks
18669
+ */
18670
+
18671
+ /**
18672
+ * @param {*} object The object to check.
18673
+ * @return {boolean} Whether or not the object is a DOM node.
18674
+ */
18675
+ function isNode(object) {
18676
+ return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
18677
+ }
18678
+
18679
+ module.exports = isNode;
18680
+
18681
+ /***/ },
18682
+ /* 149 */
18683
+ /***/ function(module, exports) {
18684
+
18685
+ 'use strict';
18686
+
18687
+ /**
18688
+ * Copyright (c) 2013-present, Facebook, Inc.
18689
+ * All rights reserved.
18690
+ *
18691
+ * This source code is licensed under the BSD-style license found in the
18692
+ * LICENSE file in the root directory of this source tree. An additional grant
18693
+ * of patent rights can be found in the PATENTS file in the same directory.
18694
+ *
18695
+ * @typechecks
18696
+ */
18697
+
18698
+ /* eslint-disable fb-www/typeof-undefined */
18699
+
18700
+ /**
18701
+ * Same as document.activeElement but wraps in a try-catch block. In IE it is
18702
+ * not safe to call document.activeElement if there is nothing focused.
18703
+ *
18704
+ * The activeElement will be null only if the document or document body is not
18705
+ * yet defined.
18706
+ */
18707
+ function getActiveElement() /*?DOMElement*/{
18708
+ if (typeof document === 'undefined') {
18709
+ return null;
18710
+ }
18711
+ try {
18712
+ return document.activeElement || document.body;
18713
+ } catch (e) {
18714
+ return document.body;
18715
+ }
18716
+ }
18717
+
18718
+ module.exports = getActiveElement;
18719
+
18720
+ /***/ },
18721
+ /* 150 */
18722
+ /***/ function(module, exports) {
18723
+
18724
+ /**
18725
+ * Copyright 2013-present, Facebook, Inc.
18726
+ * All rights reserved.
18727
+ *
18728
+ * This source code is licensed under the BSD-style license found in the
18729
+ * LICENSE file in the root directory of this source tree. An additional grant
18730
+ * of patent rights can be found in the PATENTS file in the same directory.
18731
+ *
18732
+ * @providesModule SVGDOMPropertyConfig
18733
+ */
18734
+
18735
+ 'use strict';
18736
+
18737
+ var NS = {
18738
+ xlink: 'http://www.w3.org/1999/xlink',
18739
+ xml: 'http://www.w3.org/XML/1998/namespace'
18740
+ };
18741
+
18742
+ // We use attributes for everything SVG so let's avoid some duplication and run
18743
+ // code instead.
18744
+ // The following are all specified in the HTML config already so we exclude here.
18745
+ // - class (as className)
18746
+ // - color
18747
+ // - height
18748
+ // - id
18749
+ // - lang
18750
+ // - max
18751
+ // - media
18752
+ // - method
18753
+ // - min
18754
+ // - name
18755
+ // - style
18756
+ // - target
18757
+ // - type
18758
+ // - width
18759
+ var ATTRS = {
18760
+ accentHeight: 'accent-height',
18761
+ accumulate: 0,
18762
+ additive: 0,
18763
+ alignmentBaseline: 'alignment-baseline',
18764
+ allowReorder: 'allowReorder',
18765
+ alphabetic: 0,
18766
+ amplitude: 0,
18767
+ arabicForm: 'arabic-form',
18768
+ ascent: 0,
18769
+ attributeName: 'attributeName',
18770
+ attributeType: 'attributeType',
18771
+ autoReverse: 'autoReverse',
18772
+ azimuth: 0,
18773
+ baseFrequency: 'baseFrequency',
18774
+ baseProfile: 'baseProfile',
18775
+ baselineShift: 'baseline-shift',
18776
+ bbox: 0,
18777
+ begin: 0,
18778
+ bias: 0,
18779
+ by: 0,
18780
+ calcMode: 'calcMode',
18781
+ capHeight: 'cap-height',
18782
+ clip: 0,
18783
+ clipPath: 'clip-path',
18784
+ clipRule: 'clip-rule',
18785
+ clipPathUnits: 'clipPathUnits',
18786
+ colorInterpolation: 'color-interpolation',
18787
+ colorInterpolationFilters: 'color-interpolation-filters',
18788
+ colorProfile: 'color-profile',
18789
+ colorRendering: 'color-rendering',
18790
+ contentScriptType: 'contentScriptType',
18791
+ contentStyleType: 'contentStyleType',
18792
+ cursor: 0,
18793
+ cx: 0,
18794
+ cy: 0,
18795
+ d: 0,
18796
+ decelerate: 0,
18797
+ descent: 0,
18798
+ diffuseConstant: 'diffuseConstant',
18799
+ direction: 0,
18800
+ display: 0,
18801
+ divisor: 0,
18802
+ dominantBaseline: 'dominant-baseline',
18803
+ dur: 0,
18804
+ dx: 0,
18805
+ dy: 0,
18806
+ edgeMode: 'edgeMode',
18807
+ elevation: 0,
18808
+ enableBackground: 'enable-background',
18809
+ end: 0,
18810
+ exponent: 0,
18811
+ externalResourcesRequired: 'externalResourcesRequired',
18812
+ fill: 0,
18813
+ fillOpacity: 'fill-opacity',
18814
+ fillRule: 'fill-rule',
18815
+ filter: 0,
18816
+ filterRes: 'filterRes',
18817
+ filterUnits: 'filterUnits',
18818
+ floodColor: 'flood-color',
18819
+ floodOpacity: 'flood-opacity',
18820
+ focusable: 0,
18821
+ fontFamily: 'font-family',
18822
+ fontSize: 'font-size',
18823
+ fontSizeAdjust: 'font-size-adjust',
18824
+ fontStretch: 'font-stretch',
18825
+ fontStyle: 'font-style',
18826
+ fontVariant: 'font-variant',
18827
+ fontWeight: 'font-weight',
18828
+ format: 0,
18829
+ from: 0,
18830
+ fx: 0,
18831
+ fy: 0,
18832
+ g1: 0,
18833
+ g2: 0,
18834
+ glyphName: 'glyph-name',
18835
+ glyphOrientationHorizontal: 'glyph-orientation-horizontal',
18836
+ glyphOrientationVertical: 'glyph-orientation-vertical',
18837
+ glyphRef: 'glyphRef',
18838
+ gradientTransform: 'gradientTransform',
18839
+ gradientUnits: 'gradientUnits',
18840
+ hanging: 0,
18841
+ horizAdvX: 'horiz-adv-x',
18842
+ horizOriginX: 'horiz-origin-x',
18843
+ ideographic: 0,
18844
+ imageRendering: 'image-rendering',
18845
+ 'in': 0,
18846
+ in2: 0,
18847
+ intercept: 0,
18848
+ k: 0,
18849
+ k1: 0,
18850
+ k2: 0,
18851
+ k3: 0,
18852
+ k4: 0,
18853
+ kernelMatrix: 'kernelMatrix',
18854
+ kernelUnitLength: 'kernelUnitLength',
18855
+ kerning: 0,
18856
+ keyPoints: 'keyPoints',
18857
+ keySplines: 'keySplines',
18858
+ keyTimes: 'keyTimes',
18859
+ lengthAdjust: 'lengthAdjust',
18860
+ letterSpacing: 'letter-spacing',
18861
+ lightingColor: 'lighting-color',
18862
+ limitingConeAngle: 'limitingConeAngle',
18863
+ local: 0,
18864
+ markerEnd: 'marker-end',
18865
+ markerMid: 'marker-mid',
18866
+ markerStart: 'marker-start',
18867
+ markerHeight: 'markerHeight',
18868
+ markerUnits: 'markerUnits',
18869
+ markerWidth: 'markerWidth',
18870
+ mask: 0,
18871
+ maskContentUnits: 'maskContentUnits',
18872
+ maskUnits: 'maskUnits',
18873
+ mathematical: 0,
18874
+ mode: 0,
18875
+ numOctaves: 'numOctaves',
18876
+ offset: 0,
18877
+ opacity: 0,
18878
+ operator: 0,
18879
+ order: 0,
18880
+ orient: 0,
18881
+ orientation: 0,
18882
+ origin: 0,
18883
+ overflow: 0,
18884
+ overlinePosition: 'overline-position',
18885
+ overlineThickness: 'overline-thickness',
18886
+ paintOrder: 'paint-order',
18887
+ panose1: 'panose-1',
18888
+ pathLength: 'pathLength',
18889
+ patternContentUnits: 'patternContentUnits',
18890
+ patternTransform: 'patternTransform',
18891
+ patternUnits: 'patternUnits',
18892
+ pointerEvents: 'pointer-events',
18893
+ points: 0,
18894
+ pointsAtX: 'pointsAtX',
18895
+ pointsAtY: 'pointsAtY',
18896
+ pointsAtZ: 'pointsAtZ',
18897
+ preserveAlpha: 'preserveAlpha',
18898
+ preserveAspectRatio: 'preserveAspectRatio',
18899
+ primitiveUnits: 'primitiveUnits',
18900
+ r: 0,
18901
+ radius: 0,
18902
+ refX: 'refX',
18903
+ refY: 'refY',
18904
+ renderingIntent: 'rendering-intent',
18905
+ repeatCount: 'repeatCount',
18906
+ repeatDur: 'repeatDur',
18907
+ requiredExtensions: 'requiredExtensions',
18908
+ requiredFeatures: 'requiredFeatures',
18909
+ restart: 0,
18910
+ result: 0,
18911
+ rotate: 0,
18912
+ rx: 0,
18913
+ ry: 0,
18914
+ scale: 0,
18915
+ seed: 0,
18916
+ shapeRendering: 'shape-rendering',
18917
+ slope: 0,
18918
+ spacing: 0,
18919
+ specularConstant: 'specularConstant',
18920
+ specularExponent: 'specularExponent',
18921
+ speed: 0,
18922
+ spreadMethod: 'spreadMethod',
18923
+ startOffset: 'startOffset',
18924
+ stdDeviation: 'stdDeviation',
18925
+ stemh: 0,
18926
+ stemv: 0,
18927
+ stitchTiles: 'stitchTiles',
18928
+ stopColor: 'stop-color',
18929
+ stopOpacity: 'stop-opacity',
18930
+ strikethroughPosition: 'strikethrough-position',
18931
+ strikethroughThickness: 'strikethrough-thickness',
18932
+ string: 0,
18933
+ stroke: 0,
18934
+ strokeDasharray: 'stroke-dasharray',
18935
+ strokeDashoffset: 'stroke-dashoffset',
18936
+ strokeLinecap: 'stroke-linecap',
18937
+ strokeLinejoin: 'stroke-linejoin',
18938
+ strokeMiterlimit: 'stroke-miterlimit',
18939
+ strokeOpacity: 'stroke-opacity',
18940
+ strokeWidth: 'stroke-width',
18941
+ surfaceScale: 'surfaceScale',
18942
+ systemLanguage: 'systemLanguage',
18943
+ tableValues: 'tableValues',
18944
+ targetX: 'targetX',
18945
+ targetY: 'targetY',
18946
+ textAnchor: 'text-anchor',
18947
+ textDecoration: 'text-decoration',
18948
+ textRendering: 'text-rendering',
18949
+ textLength: 'textLength',
18950
+ to: 0,
18951
+ transform: 0,
18952
+ u1: 0,
18953
+ u2: 0,
18954
+ underlinePosition: 'underline-position',
18955
+ underlineThickness: 'underline-thickness',
18956
+ unicode: 0,
18957
+ unicodeBidi: 'unicode-bidi',
18958
+ unicodeRange: 'unicode-range',
18959
+ unitsPerEm: 'units-per-em',
18960
+ vAlphabetic: 'v-alphabetic',
18961
+ vHanging: 'v-hanging',
18962
+ vIdeographic: 'v-ideographic',
18963
+ vMathematical: 'v-mathematical',
18964
+ values: 0,
18965
+ vectorEffect: 'vector-effect',
18966
+ version: 0,
18967
+ vertAdvY: 'vert-adv-y',
18968
+ vertOriginX: 'vert-origin-x',
18969
+ vertOriginY: 'vert-origin-y',
18970
+ viewBox: 'viewBox',
18971
+ viewTarget: 'viewTarget',
18972
+ visibility: 0,
18973
+ widths: 0,
18974
+ wordSpacing: 'word-spacing',
18975
+ writingMode: 'writing-mode',
18976
+ x: 0,
18977
+ xHeight: 'x-height',
18978
+ x1: 0,
18979
+ x2: 0,
18980
+ xChannelSelector: 'xChannelSelector',
18981
+ xlinkActuate: 'xlink:actuate',
18982
+ xlinkArcrole: 'xlink:arcrole',
18983
+ xlinkHref: 'xlink:href',
18984
+ xlinkRole: 'xlink:role',
18985
+ xlinkShow: 'xlink:show',
18986
+ xlinkTitle: 'xlink:title',
18987
+ xlinkType: 'xlink:type',
18988
+ xmlBase: 'xml:base',
18989
+ xmlns: 0,
18990
+ xmlnsXlink: 'xmlns:xlink',
18991
+ xmlLang: 'xml:lang',
18992
+ xmlSpace: 'xml:space',
18993
+ y: 0,
18994
+ y1: 0,
18995
+ y2: 0,
18996
+ yChannelSelector: 'yChannelSelector',
18997
+ z: 0,
18998
+ zoomAndPan: 'zoomAndPan'
18999
+ };
19000
+
19001
+ var SVGDOMPropertyConfig = {
19002
+ Properties: {},
19003
+ DOMAttributeNamespaces: {
19004
+ xlinkActuate: NS.xlink,
19005
+ xlinkArcrole: NS.xlink,
19006
+ xlinkHref: NS.xlink,
19007
+ xlinkRole: NS.xlink,
19008
+ xlinkShow: NS.xlink,
19009
+ xlinkTitle: NS.xlink,
19010
+ xlinkType: NS.xlink,
19011
+ xmlBase: NS.xml,
19012
+ xmlLang: NS.xml,
19013
+ xmlSpace: NS.xml
19014
+ },
19015
+ DOMAttributeNames: {}
19016
+ };
19017
+
19018
+ Object.keys(ATTRS).forEach(function (key) {
19019
+ SVGDOMPropertyConfig.Properties[key] = 0;
19020
+ if (ATTRS[key]) {
19021
+ SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];
19022
+ }
19023
+ });
19024
+
19025
+ module.exports = SVGDOMPropertyConfig;
19026
+
19027
+ /***/ },
19028
+ /* 151 */
19029
+ /***/ function(module, exports, __webpack_require__) {
19030
+
19031
+ /**
19032
+ * Copyright 2013-present, Facebook, Inc.
19033
+ * All rights reserved.
19034
+ *
19035
+ * This source code is licensed under the BSD-style license found in the
19036
+ * LICENSE file in the root directory of this source tree. An additional grant
19037
+ * of patent rights can be found in the PATENTS file in the same directory.
19038
+ *
19039
+ * @providesModule SelectEventPlugin
19040
+ */
19041
+
19042
+ 'use strict';
19043
+
19044
+ var EventConstants = __webpack_require__(42);
19045
+ var EventPropagators = __webpack_require__(43);
19046
+ var ExecutionEnvironment = __webpack_require__(50);
19047
+ var ReactDOMComponentTree = __webpack_require__(37);
19048
+ var ReactInputSelection = __webpack_require__(143);
19049
+ var SyntheticEvent = __webpack_require__(54);
19050
+
19051
+ var getActiveElement = __webpack_require__(149);
19052
+ var isTextInputElement = __webpack_require__(73);
19053
+ var keyOf = __webpack_require__(26);
19054
+ var shallowEqual = __webpack_require__(125);
19055
+
19056
+ var topLevelTypes = EventConstants.topLevelTypes;
19057
+
19058
+ var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;
19059
+
19060
+ var eventTypes = {
19061
+ select: {
19062
+ phasedRegistrationNames: {
19063
+ bubbled: keyOf({ onSelect: null }),
19064
+ captured: keyOf({ onSelectCapture: null })
19065
+ },
19066
+ dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
19067
+ }
19068
+ };
19069
+
19070
+ var activeElement = null;
19071
+ var activeElementInst = null;
19072
+ var lastSelection = null;
19073
+ var mouseDown = false;
19074
+
19075
+ // Track whether a listener exists for this plugin. If none exist, we do
19076
+ // not extract events. See #3639.
19077
+ var hasListener = false;
19078
+ var ON_SELECT_KEY = keyOf({ onSelect: null });
19079
+
19080
+ /**
19081
+ * Get an object which is a unique representation of the current selection.
19082
+ *
19083
+ * The return value will not be consistent across nodes or browsers, but
19084
+ * two identical selections on the same node will return identical objects.
19085
+ *
19086
+ * @param {DOMElement} node
19087
+ * @return {object}
19088
+ */
19089
+ function getSelection(node) {
19090
+ if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
19091
+ return {
19092
+ start: node.selectionStart,
19093
+ end: node.selectionEnd
19094
+ };
19095
+ } else if (window.getSelection) {
19096
+ var selection = window.getSelection();
19097
+ return {
19098
+ anchorNode: selection.anchorNode,
19099
+ anchorOffset: selection.anchorOffset,
19100
+ focusNode: selection.focusNode,
19101
+ focusOffset: selection.focusOffset
19102
+ };
19103
+ } else if (document.selection) {
19104
+ var range = document.selection.createRange();
19105
+ return {
19106
+ parentElement: range.parentElement(),
19107
+ text: range.text,
19108
+ top: range.boundingTop,
19109
+ left: range.boundingLeft
19110
+ };
19111
+ }
19112
+ }
19113
+
19114
+ /**
19115
+ * Poll selection to see whether it's changed.
19116
+ *
19117
+ * @param {object} nativeEvent
19118
+ * @return {?SyntheticEvent}
19119
+ */
19120
+ function constructSelectEvent(nativeEvent, nativeEventTarget) {
19121
+ // Ensure we have the right element, and that the user is not dragging a
19122
+ // selection (this matches native `select` event behavior). In HTML5, select
19123
+ // fires only on input and textarea thus if there's no focused element we
19124
+ // won't dispatch.
19125
+ if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
19126
+ return null;
19127
+ }
19128
+
19129
+ // Only fire when selection has actually changed.
19130
+ var currentSelection = getSelection(activeElement);
19131
+ if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
19132
+ lastSelection = currentSelection;
19133
+
19134
+ var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);
19135
+
19136
+ syntheticEvent.type = 'select';
19137
+ syntheticEvent.target = activeElement;
19138
+
19139
+ EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);
19140
+
19141
+ return syntheticEvent;
19142
+ }
19143
+
19144
+ return null;
19145
+ }
19146
+
19147
+ /**
19148
+ * This plugin creates an `onSelect` event that normalizes select events
19149
+ * across form elements.
19150
+ *
19151
+ * Supported elements are:
19152
+ * - input (see `isTextInputElement`)
19153
+ * - textarea
19154
+ * - contentEditable
19155
+ *
19156
+ * This differs from native browser implementations in the following ways:
19157
+ * - Fires on contentEditable fields as well as inputs.
19158
+ * - Fires for collapsed selection.
19159
+ * - Fires after user input.
19160
+ */
19161
+ var SelectEventPlugin = {
19162
+
19163
+ eventTypes: eventTypes,
19164
+
19165
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
19166
+ if (!hasListener) {
19167
+ return null;
19168
+ }
19169
+
19170
+ var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;
19171
+
19172
+ switch (topLevelType) {
19173
+ // Track the input node that has focus.
19174
+ case topLevelTypes.topFocus:
19175
+ if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
19176
+ activeElement = targetNode;
19177
+ activeElementInst = targetInst;
19178
+ lastSelection = null;
19179
+ }
19180
+ break;
19181
+ case topLevelTypes.topBlur:
19182
+ activeElement = null;
19183
+ activeElementInst = null;
19184
+ lastSelection = null;
19185
+ break;
19186
+
19187
+ // Don't fire the event while the user is dragging. This matches the
19188
+ // semantics of the native select event.
19189
+ case topLevelTypes.topMouseDown:
19190
+ mouseDown = true;
19191
+ break;
19192
+ case topLevelTypes.topContextMenu:
19193
+ case topLevelTypes.topMouseUp:
19194
+ mouseDown = false;
19195
+ return constructSelectEvent(nativeEvent, nativeEventTarget);
19196
+
19197
+ // Chrome and IE fire non-standard event when selection is changed (and
19198
+ // sometimes when it hasn't). IE's event fires out of order with respect
19199
+ // to key and input events on deletion, so we discard it.
19200
+ //
19201
+ // Firefox doesn't support selectionchange, so check selection status
19202
+ // after each key entry. The selection changes after keydown and before
19203
+ // keyup, but we check on keydown as well in the case of holding down a
19204
+ // key, when multiple keydown events are fired but only one keyup is.
19205
+ // This is also our approach for IE handling, for the reason above.
19206
+ case topLevelTypes.topSelectionChange:
19207
+ if (skipSelectionChangeEvent) {
19208
+ break;
19209
+ }
19210
+ // falls through
19211
+ case topLevelTypes.topKeyDown:
19212
+ case topLevelTypes.topKeyUp:
19213
+ return constructSelectEvent(nativeEvent, nativeEventTarget);
19214
+ }
19215
+
19216
+ return null;
19217
+ },
19218
+
19219
+ didPutListener: function (inst, registrationName, listener) {
19220
+ if (registrationName === ON_SELECT_KEY) {
19221
+ hasListener = true;
19222
+ }
19223
+ }
19224
+ };
19225
+
19226
+ module.exports = SelectEventPlugin;
19227
+
19228
+ /***/ },
19229
+ /* 152 */
19230
+ /***/ function(module, exports, __webpack_require__) {
19231
+
19232
+ /* WEBPACK VAR INJECTION */(function(process) {/**
19233
+ * Copyright 2013-present, Facebook, Inc.
19234
+ * All rights reserved.
19235
+ *
19236
+ * This source code is licensed under the BSD-style license found in the
19237
+ * LICENSE file in the root directory of this source tree. An additional grant
19238
+ * of patent rights can be found in the PATENTS file in the same directory.
19239
+ *
19240
+ * @providesModule SimpleEventPlugin
19241
+ */
19242
+
19243
+ 'use strict';
19244
+
19245
+ var _prodInvariant = __webpack_require__(8);
19246
+
19247
+ var EventConstants = __webpack_require__(42);
19248
+ var EventListener = __webpack_require__(139);
19249
+ var EventPropagators = __webpack_require__(43);
19250
+ var ReactDOMComponentTree = __webpack_require__(37);
19251
+ var SyntheticAnimationEvent = __webpack_require__(153);
19252
+ var SyntheticClipboardEvent = __webpack_require__(154);
19253
+ var SyntheticEvent = __webpack_require__(54);
19254
+ var SyntheticFocusEvent = __webpack_require__(155);
19255
+ var SyntheticKeyboardEvent = __webpack_require__(156);
19256
+ var SyntheticMouseEvent = __webpack_require__(76);
19257
+ var SyntheticDragEvent = __webpack_require__(159);
19258
+ var SyntheticTouchEvent = __webpack_require__(160);
19259
+ var SyntheticTransitionEvent = __webpack_require__(161);
19260
+ var SyntheticUIEvent = __webpack_require__(77);
19261
+ var SyntheticWheelEvent = __webpack_require__(162);
19262
+
19263
+ var emptyFunction = __webpack_require__(13);
19264
+ var getEventCharCode = __webpack_require__(157);
19265
+ var invariant = __webpack_require__(9);
19266
+ var keyOf = __webpack_require__(26);
19267
+
19268
+ var topLevelTypes = EventConstants.topLevelTypes;
19269
+
19270
+ var eventTypes = {
19271
+ abort: {
19272
+ phasedRegistrationNames: {
19273
+ bubbled: keyOf({ onAbort: true }),
19274
+ captured: keyOf({ onAbortCapture: true })
19275
+ }
19276
+ },
19277
+ animationEnd: {
19278
+ phasedRegistrationNames: {
19279
+ bubbled: keyOf({ onAnimationEnd: true }),
19280
+ captured: keyOf({ onAnimationEndCapture: true })
19281
+ }
19282
+ },
19283
+ animationIteration: {
19284
+ phasedRegistrationNames: {
19285
+ bubbled: keyOf({ onAnimationIteration: true }),
19286
+ captured: keyOf({ onAnimationIterationCapture: true })
19287
+ }
19288
+ },
19289
+ animationStart: {
19290
+ phasedRegistrationNames: {
19291
+ bubbled: keyOf({ onAnimationStart: true }),
19292
+ captured: keyOf({ onAnimationStartCapture: true })
19293
+ }
19294
+ },
19295
+ blur: {
19296
+ phasedRegistrationNames: {
19297
+ bubbled: keyOf({ onBlur: true }),
19298
+ captured: keyOf({ onBlurCapture: true })
19299
+ }
19300
+ },
19301
+ canPlay: {
19302
+ phasedRegistrationNames: {
19303
+ bubbled: keyOf({ onCanPlay: true }),
19304
+ captured: keyOf({ onCanPlayCapture: true })
19305
+ }
19306
+ },
19307
+ canPlayThrough: {
19308
+ phasedRegistrationNames: {
19309
+ bubbled: keyOf({ onCanPlayThrough: true }),
19310
+ captured: keyOf({ onCanPlayThroughCapture: true })
19311
+ }
19312
+ },
19313
+ click: {
19314
+ phasedRegistrationNames: {
19315
+ bubbled: keyOf({ onClick: true }),
19316
+ captured: keyOf({ onClickCapture: true })
19317
+ }
19318
+ },
19319
+ contextMenu: {
19320
+ phasedRegistrationNames: {
19321
+ bubbled: keyOf({ onContextMenu: true }),
19322
+ captured: keyOf({ onContextMenuCapture: true })
19323
+ }
19324
+ },
19325
+ copy: {
19326
+ phasedRegistrationNames: {
19327
+ bubbled: keyOf({ onCopy: true }),
19328
+ captured: keyOf({ onCopyCapture: true })
19329
+ }
19330
+ },
19331
+ cut: {
19332
+ phasedRegistrationNames: {
19333
+ bubbled: keyOf({ onCut: true }),
19334
+ captured: keyOf({ onCutCapture: true })
19335
+ }
19336
+ },
19337
+ doubleClick: {
19338
+ phasedRegistrationNames: {
19339
+ bubbled: keyOf({ onDoubleClick: true }),
19340
+ captured: keyOf({ onDoubleClickCapture: true })
19341
+ }
19342
+ },
19343
+ drag: {
19344
+ phasedRegistrationNames: {
19345
+ bubbled: keyOf({ onDrag: true }),
19346
+ captured: keyOf({ onDragCapture: true })
19347
+ }
19348
+ },
19349
+ dragEnd: {
19350
+ phasedRegistrationNames: {
19351
+ bubbled: keyOf({ onDragEnd: true }),
19352
+ captured: keyOf({ onDragEndCapture: true })
19353
+ }
19354
+ },
19355
+ dragEnter: {
19356
+ phasedRegistrationNames: {
19357
+ bubbled: keyOf({ onDragEnter: true }),
19358
+ captured: keyOf({ onDragEnterCapture: true })
19359
+ }
19360
+ },
19361
+ dragExit: {
19362
+ phasedRegistrationNames: {
19363
+ bubbled: keyOf({ onDragExit: true }),
19364
+ captured: keyOf({ onDragExitCapture: true })
19365
+ }
19366
+ },
19367
+ dragLeave: {
19368
+ phasedRegistrationNames: {
19369
+ bubbled: keyOf({ onDragLeave: true }),
19370
+ captured: keyOf({ onDragLeaveCapture: true })
19371
+ }
19372
+ },
19373
+ dragOver: {
19374
+ phasedRegistrationNames: {
19375
+ bubbled: keyOf({ onDragOver: true }),
19376
+ captured: keyOf({ onDragOverCapture: true })
19377
+ }
19378
+ },
19379
+ dragStart: {
19380
+ phasedRegistrationNames: {
19381
+ bubbled: keyOf({ onDragStart: true }),
19382
+ captured: keyOf({ onDragStartCapture: true })
19383
+ }
19384
+ },
19385
+ drop: {
19386
+ phasedRegistrationNames: {
19387
+ bubbled: keyOf({ onDrop: true }),
19388
+ captured: keyOf({ onDropCapture: true })
19389
+ }
19390
+ },
19391
+ durationChange: {
19392
+ phasedRegistrationNames: {
19393
+ bubbled: keyOf({ onDurationChange: true }),
19394
+ captured: keyOf({ onDurationChangeCapture: true })
19395
+ }
19396
+ },
19397
+ emptied: {
19398
+ phasedRegistrationNames: {
19399
+ bubbled: keyOf({ onEmptied: true }),
19400
+ captured: keyOf({ onEmptiedCapture: true })
19401
+ }
19402
+ },
19403
+ encrypted: {
19404
+ phasedRegistrationNames: {
19405
+ bubbled: keyOf({ onEncrypted: true }),
19406
+ captured: keyOf({ onEncryptedCapture: true })
19407
+ }
19408
+ },
19409
+ ended: {
19410
+ phasedRegistrationNames: {
19411
+ bubbled: keyOf({ onEnded: true }),
19412
+ captured: keyOf({ onEndedCapture: true })
19413
+ }
19414
+ },
19415
+ error: {
19416
+ phasedRegistrationNames: {
19417
+ bubbled: keyOf({ onError: true }),
19418
+ captured: keyOf({ onErrorCapture: true })
19419
+ }
19420
+ },
19421
+ focus: {
19422
+ phasedRegistrationNames: {
19423
+ bubbled: keyOf({ onFocus: true }),
19424
+ captured: keyOf({ onFocusCapture: true })
19425
+ }
19426
+ },
19427
+ input: {
19428
+ phasedRegistrationNames: {
19429
+ bubbled: keyOf({ onInput: true }),
19430
+ captured: keyOf({ onInputCapture: true })
19431
+ }
19432
+ },
19433
+ invalid: {
19434
+ phasedRegistrationNames: {
19435
+ bubbled: keyOf({ onInvalid: true }),
19436
+ captured: keyOf({ onInvalidCapture: true })
19437
+ }
19438
+ },
19439
+ keyDown: {
19440
+ phasedRegistrationNames: {
19441
+ bubbled: keyOf({ onKeyDown: true }),
19442
+ captured: keyOf({ onKeyDownCapture: true })
19443
+ }
19444
+ },
19445
+ keyPress: {
19446
+ phasedRegistrationNames: {
19447
+ bubbled: keyOf({ onKeyPress: true }),
19448
+ captured: keyOf({ onKeyPressCapture: true })
19449
+ }
19450
+ },
19451
+ keyUp: {
19452
+ phasedRegistrationNames: {
19453
+ bubbled: keyOf({ onKeyUp: true }),
19454
+ captured: keyOf({ onKeyUpCapture: true })
19455
+ }
19456
+ },
19457
+ load: {
19458
+ phasedRegistrationNames: {
19459
+ bubbled: keyOf({ onLoad: true }),
19460
+ captured: keyOf({ onLoadCapture: true })
19461
+ }
19462
+ },
19463
+ loadedData: {
19464
+ phasedRegistrationNames: {
19465
+ bubbled: keyOf({ onLoadedData: true }),
19466
+ captured: keyOf({ onLoadedDataCapture: true })
19467
+ }
19468
+ },
19469
+ loadedMetadata: {
19470
+ phasedRegistrationNames: {
19471
+ bubbled: keyOf({ onLoadedMetadata: true }),
19472
+ captured: keyOf({ onLoadedMetadataCapture: true })
19473
+ }
19474
+ },
19475
+ loadStart: {
19476
+ phasedRegistrationNames: {
19477
+ bubbled: keyOf({ onLoadStart: true }),
19478
+ captured: keyOf({ onLoadStartCapture: true })
19479
+ }
19480
+ },
19481
+ // Note: We do not allow listening to mouseOver events. Instead, use the
19482
+ // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
19483
+ mouseDown: {
19484
+ phasedRegistrationNames: {
19485
+ bubbled: keyOf({ onMouseDown: true }),
19486
+ captured: keyOf({ onMouseDownCapture: true })
19487
+ }
19488
+ },
19489
+ mouseMove: {
19490
+ phasedRegistrationNames: {
19491
+ bubbled: keyOf({ onMouseMove: true }),
19492
+ captured: keyOf({ onMouseMoveCapture: true })
19493
+ }
19494
+ },
19495
+ mouseOut: {
19496
+ phasedRegistrationNames: {
19497
+ bubbled: keyOf({ onMouseOut: true }),
19498
+ captured: keyOf({ onMouseOutCapture: true })
19499
+ }
19500
+ },
19501
+ mouseOver: {
19502
+ phasedRegistrationNames: {
19503
+ bubbled: keyOf({ onMouseOver: true }),
19504
+ captured: keyOf({ onMouseOverCapture: true })
19505
+ }
19506
+ },
19507
+ mouseUp: {
19508
+ phasedRegistrationNames: {
19509
+ bubbled: keyOf({ onMouseUp: true }),
19510
+ captured: keyOf({ onMouseUpCapture: true })
19511
+ }
19512
+ },
19513
+ paste: {
19514
+ phasedRegistrationNames: {
19515
+ bubbled: keyOf({ onPaste: true }),
19516
+ captured: keyOf({ onPasteCapture: true })
19517
+ }
19518
+ },
19519
+ pause: {
19520
+ phasedRegistrationNames: {
19521
+ bubbled: keyOf({ onPause: true }),
19522
+ captured: keyOf({ onPauseCapture: true })
19523
+ }
19524
+ },
19525
+ play: {
19526
+ phasedRegistrationNames: {
19527
+ bubbled: keyOf({ onPlay: true }),
19528
+ captured: keyOf({ onPlayCapture: true })
19529
+ }
19530
+ },
19531
+ playing: {
19532
+ phasedRegistrationNames: {
19533
+ bubbled: keyOf({ onPlaying: true }),
19534
+ captured: keyOf({ onPlayingCapture: true })
19535
+ }
19536
+ },
19537
+ progress: {
19538
+ phasedRegistrationNames: {
19539
+ bubbled: keyOf({ onProgress: true }),
19540
+ captured: keyOf({ onProgressCapture: true })
19541
+ }
19542
+ },
19543
+ rateChange: {
19544
+ phasedRegistrationNames: {
19545
+ bubbled: keyOf({ onRateChange: true }),
19546
+ captured: keyOf({ onRateChangeCapture: true })
19547
+ }
19548
+ },
19549
+ reset: {
19550
+ phasedRegistrationNames: {
19551
+ bubbled: keyOf({ onReset: true }),
19552
+ captured: keyOf({ onResetCapture: true })
19553
+ }
19554
+ },
19555
+ scroll: {
19556
+ phasedRegistrationNames: {
19557
+ bubbled: keyOf({ onScroll: true }),
19558
+ captured: keyOf({ onScrollCapture: true })
19559
+ }
19560
+ },
19561
+ seeked: {
19562
+ phasedRegistrationNames: {
19563
+ bubbled: keyOf({ onSeeked: true }),
19564
+ captured: keyOf({ onSeekedCapture: true })
19565
+ }
19566
+ },
19567
+ seeking: {
19568
+ phasedRegistrationNames: {
19569
+ bubbled: keyOf({ onSeeking: true }),
19570
+ captured: keyOf({ onSeekingCapture: true })
19571
+ }
19572
+ },
19573
+ stalled: {
19574
+ phasedRegistrationNames: {
19575
+ bubbled: keyOf({ onStalled: true }),
19576
+ captured: keyOf({ onStalledCapture: true })
19577
+ }
19578
+ },
19579
+ submit: {
19580
+ phasedRegistrationNames: {
19581
+ bubbled: keyOf({ onSubmit: true }),
19582
+ captured: keyOf({ onSubmitCapture: true })
19583
+ }
19584
+ },
19585
+ suspend: {
19586
+ phasedRegistrationNames: {
19587
+ bubbled: keyOf({ onSuspend: true }),
19588
+ captured: keyOf({ onSuspendCapture: true })
19589
+ }
19590
+ },
19591
+ timeUpdate: {
19592
+ phasedRegistrationNames: {
19593
+ bubbled: keyOf({ onTimeUpdate: true }),
19594
+ captured: keyOf({ onTimeUpdateCapture: true })
19595
+ }
19596
+ },
19597
+ touchCancel: {
19598
+ phasedRegistrationNames: {
19599
+ bubbled: keyOf({ onTouchCancel: true }),
19600
+ captured: keyOf({ onTouchCancelCapture: true })
19601
+ }
19602
+ },
19603
+ touchEnd: {
19604
+ phasedRegistrationNames: {
19605
+ bubbled: keyOf({ onTouchEnd: true }),
19606
+ captured: keyOf({ onTouchEndCapture: true })
19607
+ }
19608
+ },
19609
+ touchMove: {
19610
+ phasedRegistrationNames: {
19611
+ bubbled: keyOf({ onTouchMove: true }),
19612
+ captured: keyOf({ onTouchMoveCapture: true })
19613
+ }
19614
+ },
19615
+ touchStart: {
19616
+ phasedRegistrationNames: {
19617
+ bubbled: keyOf({ onTouchStart: true }),
19618
+ captured: keyOf({ onTouchStartCapture: true })
19619
+ }
19620
+ },
19621
+ transitionEnd: {
19622
+ phasedRegistrationNames: {
19623
+ bubbled: keyOf({ onTransitionEnd: true }),
19624
+ captured: keyOf({ onTransitionEndCapture: true })
19625
+ }
19626
+ },
19627
+ volumeChange: {
19628
+ phasedRegistrationNames: {
19629
+ bubbled: keyOf({ onVolumeChange: true }),
19630
+ captured: keyOf({ onVolumeChangeCapture: true })
19631
+ }
19632
+ },
19633
+ waiting: {
19634
+ phasedRegistrationNames: {
19635
+ bubbled: keyOf({ onWaiting: true }),
19636
+ captured: keyOf({ onWaitingCapture: true })
19637
+ }
19638
+ },
19639
+ wheel: {
19640
+ phasedRegistrationNames: {
19641
+ bubbled: keyOf({ onWheel: true }),
19642
+ captured: keyOf({ onWheelCapture: true })
19643
+ }
19644
+ }
19645
+ };
19646
+
19647
+ var topLevelEventsToDispatchConfig = {
19648
+ topAbort: eventTypes.abort,
19649
+ topAnimationEnd: eventTypes.animationEnd,
19650
+ topAnimationIteration: eventTypes.animationIteration,
19651
+ topAnimationStart: eventTypes.animationStart,
19652
+ topBlur: eventTypes.blur,
19653
+ topCanPlay: eventTypes.canPlay,
19654
+ topCanPlayThrough: eventTypes.canPlayThrough,
19655
+ topClick: eventTypes.click,
19656
+ topContextMenu: eventTypes.contextMenu,
19657
+ topCopy: eventTypes.copy,
19658
+ topCut: eventTypes.cut,
19659
+ topDoubleClick: eventTypes.doubleClick,
19660
+ topDrag: eventTypes.drag,
19661
+ topDragEnd: eventTypes.dragEnd,
19662
+ topDragEnter: eventTypes.dragEnter,
19663
+ topDragExit: eventTypes.dragExit,
19664
+ topDragLeave: eventTypes.dragLeave,
19665
+ topDragOver: eventTypes.dragOver,
19666
+ topDragStart: eventTypes.dragStart,
19667
+ topDrop: eventTypes.drop,
19668
+ topDurationChange: eventTypes.durationChange,
19669
+ topEmptied: eventTypes.emptied,
19670
+ topEncrypted: eventTypes.encrypted,
19671
+ topEnded: eventTypes.ended,
19672
+ topError: eventTypes.error,
19673
+ topFocus: eventTypes.focus,
19674
+ topInput: eventTypes.input,
19675
+ topInvalid: eventTypes.invalid,
19676
+ topKeyDown: eventTypes.keyDown,
19677
+ topKeyPress: eventTypes.keyPress,
19678
+ topKeyUp: eventTypes.keyUp,
19679
+ topLoad: eventTypes.load,
19680
+ topLoadedData: eventTypes.loadedData,
19681
+ topLoadedMetadata: eventTypes.loadedMetadata,
19682
+ topLoadStart: eventTypes.loadStart,
19683
+ topMouseDown: eventTypes.mouseDown,
19684
+ topMouseMove: eventTypes.mouseMove,
19685
+ topMouseOut: eventTypes.mouseOut,
19686
+ topMouseOver: eventTypes.mouseOver,
19687
+ topMouseUp: eventTypes.mouseUp,
19688
+ topPaste: eventTypes.paste,
19689
+ topPause: eventTypes.pause,
19690
+ topPlay: eventTypes.play,
19691
+ topPlaying: eventTypes.playing,
19692
+ topProgress: eventTypes.progress,
19693
+ topRateChange: eventTypes.rateChange,
19694
+ topReset: eventTypes.reset,
19695
+ topScroll: eventTypes.scroll,
19696
+ topSeeked: eventTypes.seeked,
19697
+ topSeeking: eventTypes.seeking,
19698
+ topStalled: eventTypes.stalled,
19699
+ topSubmit: eventTypes.submit,
19700
+ topSuspend: eventTypes.suspend,
19701
+ topTimeUpdate: eventTypes.timeUpdate,
19702
+ topTouchCancel: eventTypes.touchCancel,
19703
+ topTouchEnd: eventTypes.touchEnd,
19704
+ topTouchMove: eventTypes.touchMove,
19705
+ topTouchStart: eventTypes.touchStart,
19706
+ topTransitionEnd: eventTypes.transitionEnd,
19707
+ topVolumeChange: eventTypes.volumeChange,
19708
+ topWaiting: eventTypes.waiting,
19709
+ topWheel: eventTypes.wheel
19710
+ };
19711
+
19712
+ for (var type in topLevelEventsToDispatchConfig) {
19713
+ topLevelEventsToDispatchConfig[type].dependencies = [type];
19714
+ }
19715
+
19716
+ var ON_CLICK_KEY = keyOf({ onClick: null });
19717
+ var onClickListeners = {};
19718
+
19719
+ function getDictionaryKey(inst) {
19720
+ // Prevents V8 performance issue:
19721
+ // https://github.com/facebook/react/pull/7232
19722
+ return '.' + inst._rootNodeID;
19723
+ }
19724
+
19725
+ var SimpleEventPlugin = {
19726
+
19727
+ eventTypes: eventTypes,
19728
+
19729
+ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {
19730
+ var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
19731
+ if (!dispatchConfig) {
19732
+ return null;
19733
+ }
19734
+ var EventConstructor;
19735
+ switch (topLevelType) {
19736
+ case topLevelTypes.topAbort:
19737
+ case topLevelTypes.topCanPlay:
19738
+ case topLevelTypes.topCanPlayThrough:
19739
+ case topLevelTypes.topDurationChange:
19740
+ case topLevelTypes.topEmptied:
19741
+ case topLevelTypes.topEncrypted:
19742
+ case topLevelTypes.topEnded:
19743
+ case topLevelTypes.topError:
19744
+ case topLevelTypes.topInput:
19745
+ case topLevelTypes.topInvalid:
19746
+ case topLevelTypes.topLoad:
19747
+ case topLevelTypes.topLoadedData:
19748
+ case topLevelTypes.topLoadedMetadata:
19749
+ case topLevelTypes.topLoadStart:
19750
+ case topLevelTypes.topPause:
19751
+ case topLevelTypes.topPlay:
19752
+ case topLevelTypes.topPlaying:
19753
+ case topLevelTypes.topProgress:
19754
+ case topLevelTypes.topRateChange:
19755
+ case topLevelTypes.topReset:
19756
+ case topLevelTypes.topSeeked:
19757
+ case topLevelTypes.topSeeking:
19758
+ case topLevelTypes.topStalled:
19759
+ case topLevelTypes.topSubmit:
19760
+ case topLevelTypes.topSuspend:
19761
+ case topLevelTypes.topTimeUpdate:
19762
+ case topLevelTypes.topVolumeChange:
19763
+ case topLevelTypes.topWaiting:
19764
+ // HTML Events
19765
+ // @see http://www.w3.org/TR/html5/index.html#events-0
19766
+ EventConstructor = SyntheticEvent;
19767
+ break;
19768
+ case topLevelTypes.topKeyPress:
19769
+ // Firefox creates a keypress event for function keys too. This removes
19770
+ // the unwanted keypress events. Enter is however both printable and
19771
+ // non-printable. One would expect Tab to be as well (but it isn't).
19772
+ if (getEventCharCode(nativeEvent) === 0) {
19773
+ return null;
19774
+ }
19775
+ /* falls through */
19776
+ case topLevelTypes.topKeyDown:
19777
+ case topLevelTypes.topKeyUp:
19778
+ EventConstructor = SyntheticKeyboardEvent;
19779
+ break;
19780
+ case topLevelTypes.topBlur:
19781
+ case topLevelTypes.topFocus:
19782
+ EventConstructor = SyntheticFocusEvent;
19783
+ break;
19784
+ case topLevelTypes.topClick:
19785
+ // Firefox creates a click event on right mouse clicks. This removes the
19786
+ // unwanted click events.
19787
+ if (nativeEvent.button === 2) {
19788
+ return null;
19789
+ }
19790
+ /* falls through */
19791
+ case topLevelTypes.topContextMenu:
19792
+ case topLevelTypes.topDoubleClick:
19793
+ case topLevelTypes.topMouseDown:
19794
+ case topLevelTypes.topMouseMove:
19795
+ case topLevelTypes.topMouseOut:
19796
+ case topLevelTypes.topMouseOver:
19797
+ case topLevelTypes.topMouseUp:
19798
+ EventConstructor = SyntheticMouseEvent;
19799
+ break;
19800
+ case topLevelTypes.topDrag:
19801
+ case topLevelTypes.topDragEnd:
19802
+ case topLevelTypes.topDragEnter:
19803
+ case topLevelTypes.topDragExit:
19804
+ case topLevelTypes.topDragLeave:
19805
+ case topLevelTypes.topDragOver:
19806
+ case topLevelTypes.topDragStart:
19807
+ case topLevelTypes.topDrop:
19808
+ EventConstructor = SyntheticDragEvent;
19809
+ break;
19810
+ case topLevelTypes.topTouchCancel:
19811
+ case topLevelTypes.topTouchEnd:
19812
+ case topLevelTypes.topTouchMove:
19813
+ case topLevelTypes.topTouchStart:
19814
+ EventConstructor = SyntheticTouchEvent;
19815
+ break;
19816
+ case topLevelTypes.topAnimationEnd:
19817
+ case topLevelTypes.topAnimationIteration:
19818
+ case topLevelTypes.topAnimationStart:
19819
+ EventConstructor = SyntheticAnimationEvent;
19820
+ break;
19821
+ case topLevelTypes.topTransitionEnd:
19822
+ EventConstructor = SyntheticTransitionEvent;
19823
+ break;
19824
+ case topLevelTypes.topScroll:
19825
+ EventConstructor = SyntheticUIEvent;
19826
+ break;
19827
+ case topLevelTypes.topWheel:
19828
+ EventConstructor = SyntheticWheelEvent;
19829
+ break;
19830
+ case topLevelTypes.topCopy:
19831
+ case topLevelTypes.topCut:
19832
+ case topLevelTypes.topPaste:
19833
+ EventConstructor = SyntheticClipboardEvent;
19834
+ break;
19835
+ }
19836
+ !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;
19837
+ var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);
19838
+ EventPropagators.accumulateTwoPhaseDispatches(event);
19839
+ return event;
19840
+ },
19841
+
19842
+ didPutListener: function (inst, registrationName, listener) {
19843
+ // Mobile Safari does not fire properly bubble click events on
19844
+ // non-interactive elements, which means delegated click listeners do not
19845
+ // fire. The workaround for this bug involves attaching an empty click
19846
+ // listener on the target node.
19847
+ if (registrationName === ON_CLICK_KEY) {
19848
+ var key = getDictionaryKey(inst);
19849
+ var node = ReactDOMComponentTree.getNodeFromInstance(inst);
19850
+ if (!onClickListeners[key]) {
19851
+ onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);
19852
+ }
19853
+ }
19854
+ },
19855
+
19856
+ willDeleteListener: function (inst, registrationName) {
19857
+ if (registrationName === ON_CLICK_KEY) {
19858
+ var key = getDictionaryKey(inst);
19859
+ onClickListeners[key].remove();
19860
+ delete onClickListeners[key];
19861
+ }
19862
+ }
19863
+
19864
+ };
19865
+
19866
+ module.exports = SimpleEventPlugin;
19867
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
19868
+
19869
+ /***/ },
19870
+ /* 153 */
19871
+ /***/ function(module, exports, __webpack_require__) {
19872
+
19873
+ /**
19874
+ * Copyright 2013-present, Facebook, Inc.
19875
+ * All rights reserved.
19876
+ *
19877
+ * This source code is licensed under the BSD-style license found in the
19878
+ * LICENSE file in the root directory of this source tree. An additional grant
19879
+ * of patent rights can be found in the PATENTS file in the same directory.
19880
+ *
19881
+ * @providesModule SyntheticAnimationEvent
19882
+ */
19883
+
19884
+ 'use strict';
19885
+
19886
+ var SyntheticEvent = __webpack_require__(54);
19887
+
19888
+ /**
19889
+ * @interface Event
19890
+ * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
19891
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
19892
+ */
19893
+ var AnimationEventInterface = {
19894
+ animationName: null,
19895
+ elapsedTime: null,
19896
+ pseudoElement: null
19897
+ };
19898
+
19899
+ /**
19900
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
19901
+ * @param {string} dispatchMarker Marker identifying the event target.
19902
+ * @param {object} nativeEvent Native browser event.
19903
+ * @extends {SyntheticEvent}
19904
+ */
19905
+ function SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
19906
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
19907
+ }
19908
+
19909
+ SyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);
19910
+
19911
+ module.exports = SyntheticAnimationEvent;
19912
+
19913
+ /***/ },
19914
+ /* 154 */
19915
+ /***/ function(module, exports, __webpack_require__) {
19916
+
19917
+ /**
19918
+ * Copyright 2013-present, Facebook, Inc.
19919
+ * All rights reserved.
19920
+ *
19921
+ * This source code is licensed under the BSD-style license found in the
19922
+ * LICENSE file in the root directory of this source tree. An additional grant
19923
+ * of patent rights can be found in the PATENTS file in the same directory.
19924
+ *
19925
+ * @providesModule SyntheticClipboardEvent
19926
+ */
19927
+
19928
+ 'use strict';
19929
+
19930
+ var SyntheticEvent = __webpack_require__(54);
19931
+
19932
+ /**
19933
+ * @interface Event
19934
+ * @see http://www.w3.org/TR/clipboard-apis/
19935
+ */
19936
+ var ClipboardEventInterface = {
19937
+ clipboardData: function (event) {
19938
+ return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
19939
+ }
19940
+ };
19941
+
19942
+ /**
19943
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
19944
+ * @param {string} dispatchMarker Marker identifying the event target.
19945
+ * @param {object} nativeEvent Native browser event.
19946
+ * @extends {SyntheticUIEvent}
19947
+ */
19948
+ function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
19949
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
19950
+ }
19951
+
19952
+ SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
19953
+
19954
+ module.exports = SyntheticClipboardEvent;
19955
+
19956
+ /***/ },
19957
+ /* 155 */
19958
+ /***/ function(module, exports, __webpack_require__) {
19959
+
19960
+ /**
19961
+ * Copyright 2013-present, Facebook, Inc.
19962
+ * All rights reserved.
19963
+ *
19964
+ * This source code is licensed under the BSD-style license found in the
19965
+ * LICENSE file in the root directory of this source tree. An additional grant
19966
+ * of patent rights can be found in the PATENTS file in the same directory.
19967
+ *
19968
+ * @providesModule SyntheticFocusEvent
19969
+ */
19970
+
19971
+ 'use strict';
19972
+
19973
+ var SyntheticUIEvent = __webpack_require__(77);
19974
+
19975
+ /**
19976
+ * @interface FocusEvent
19977
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
19978
+ */
19979
+ var FocusEventInterface = {
19980
+ relatedTarget: null
19981
+ };
19982
+
19983
+ /**
19984
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
19985
+ * @param {string} dispatchMarker Marker identifying the event target.
19986
+ * @param {object} nativeEvent Native browser event.
19987
+ * @extends {SyntheticUIEvent}
19988
+ */
19989
+ function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
19990
+ return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
19991
+ }
19992
+
19993
+ SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
19994
+
19995
+ module.exports = SyntheticFocusEvent;
19996
+
19997
+ /***/ },
19998
+ /* 156 */
19999
+ /***/ function(module, exports, __webpack_require__) {
20000
+
20001
+ /**
20002
+ * Copyright 2013-present, Facebook, Inc.
20003
+ * All rights reserved.
20004
+ *
20005
+ * This source code is licensed under the BSD-style license found in the
20006
+ * LICENSE file in the root directory of this source tree. An additional grant
20007
+ * of patent rights can be found in the PATENTS file in the same directory.
20008
+ *
20009
+ * @providesModule SyntheticKeyboardEvent
20010
+ */
20011
+
20012
+ 'use strict';
20013
+
20014
+ var SyntheticUIEvent = __webpack_require__(77);
20015
+
20016
+ var getEventCharCode = __webpack_require__(157);
20017
+ var getEventKey = __webpack_require__(158);
20018
+ var getEventModifierState = __webpack_require__(79);
20019
+
20020
+ /**
20021
+ * @interface KeyboardEvent
20022
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
20023
+ */
20024
+ var KeyboardEventInterface = {
20025
+ key: getEventKey,
20026
+ location: null,
20027
+ ctrlKey: null,
20028
+ shiftKey: null,
20029
+ altKey: null,
20030
+ metaKey: null,
20031
+ repeat: null,
20032
+ locale: null,
20033
+ getModifierState: getEventModifierState,
20034
+ // Legacy Interface
20035
+ charCode: function (event) {
20036
+ // `charCode` is the result of a KeyPress event and represents the value of
20037
+ // the actual printable character.
20038
+
20039
+ // KeyPress is deprecated, but its replacement is not yet final and not
20040
+ // implemented in any major browser. Only KeyPress has charCode.
20041
+ if (event.type === 'keypress') {
20042
+ return getEventCharCode(event);
20043
+ }
20044
+ return 0;
20045
+ },
20046
+ keyCode: function (event) {
20047
+ // `keyCode` is the result of a KeyDown/Up event and represents the value of
20048
+ // physical keyboard key.
20049
+
20050
+ // The actual meaning of the value depends on the users' keyboard layout
20051
+ // which cannot be detected. Assuming that it is a US keyboard layout
20052
+ // provides a surprisingly accurate mapping for US and European users.
20053
+ // Due to this, it is left to the user to implement at this time.
20054
+ if (event.type === 'keydown' || event.type === 'keyup') {
20055
+ return event.keyCode;
20056
+ }
20057
+ return 0;
20058
+ },
20059
+ which: function (event) {
20060
+ // `which` is an alias for either `keyCode` or `charCode` depending on the
20061
+ // type of the event.
20062
+ if (event.type === 'keypress') {
20063
+ return getEventCharCode(event);
20064
+ }
20065
+ if (event.type === 'keydown' || event.type === 'keyup') {
20066
+ return event.keyCode;
20067
+ }
20068
+ return 0;
20069
+ }
20070
+ };
20071
+
20072
+ /**
20073
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
20074
+ * @param {string} dispatchMarker Marker identifying the event target.
20075
+ * @param {object} nativeEvent Native browser event.
20076
+ * @extends {SyntheticUIEvent}
20077
+ */
20078
+ function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
20079
+ return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
20080
+ }
20081
+
20082
+ SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
20083
+
20084
+ module.exports = SyntheticKeyboardEvent;
20085
+
20086
+ /***/ },
20087
+ /* 157 */
20088
+ /***/ function(module, exports) {
20089
+
20090
+ /**
20091
+ * Copyright 2013-present, Facebook, Inc.
20092
+ * All rights reserved.
20093
+ *
20094
+ * This source code is licensed under the BSD-style license found in the
20095
+ * LICENSE file in the root directory of this source tree. An additional grant
20096
+ * of patent rights can be found in the PATENTS file in the same directory.
20097
+ *
20098
+ * @providesModule getEventCharCode
20099
+ */
20100
+
20101
+ 'use strict';
20102
+
20103
+ /**
20104
+ * `charCode` represents the actual "character code" and is safe to use with
20105
+ * `String.fromCharCode`. As such, only keys that correspond to printable
20106
+ * characters produce a valid `charCode`, the only exception to this is Enter.
20107
+ * The Tab-key is considered non-printable and does not have a `charCode`,
20108
+ * presumably because it does not produce a tab-character in browsers.
20109
+ *
20110
+ * @param {object} nativeEvent Native browser event.
20111
+ * @return {number} Normalized `charCode` property.
20112
+ */
20113
+
20114
+ function getEventCharCode(nativeEvent) {
20115
+ var charCode;
20116
+ var keyCode = nativeEvent.keyCode;
20117
+
20118
+ if ('charCode' in nativeEvent) {
20119
+ charCode = nativeEvent.charCode;
20120
+
20121
+ // FF does not set `charCode` for the Enter-key, check against `keyCode`.
20122
+ if (charCode === 0 && keyCode === 13) {
20123
+ charCode = 13;
20124
+ }
20125
+ } else {
20126
+ // IE8 does not implement `charCode`, but `keyCode` has the correct value.
20127
+ charCode = keyCode;
20128
+ }
20129
+
20130
+ // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
20131
+ // Must not discard the (non-)printable Enter-key.
20132
+ if (charCode >= 32 || charCode === 13) {
20133
+ return charCode;
20134
+ }
20135
+
20136
+ return 0;
20137
+ }
20138
+
20139
+ module.exports = getEventCharCode;
20140
+
20141
+ /***/ },
20142
+ /* 158 */
20143
+ /***/ function(module, exports, __webpack_require__) {
20144
+
20145
+ /**
20146
+ * Copyright 2013-present, Facebook, Inc.
20147
+ * All rights reserved.
20148
+ *
20149
+ * This source code is licensed under the BSD-style license found in the
20150
+ * LICENSE file in the root directory of this source tree. An additional grant
20151
+ * of patent rights can be found in the PATENTS file in the same directory.
20152
+ *
20153
+ * @providesModule getEventKey
20154
+ */
20155
+
20156
+ 'use strict';
20157
+
20158
+ var getEventCharCode = __webpack_require__(157);
20159
+
20160
+ /**
20161
+ * Normalization of deprecated HTML5 `key` values
20162
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
20163
+ */
20164
+ var normalizeKey = {
20165
+ 'Esc': 'Escape',
20166
+ 'Spacebar': ' ',
20167
+ 'Left': 'ArrowLeft',
20168
+ 'Up': 'ArrowUp',
20169
+ 'Right': 'ArrowRight',
20170
+ 'Down': 'ArrowDown',
20171
+ 'Del': 'Delete',
20172
+ 'Win': 'OS',
20173
+ 'Menu': 'ContextMenu',
20174
+ 'Apps': 'ContextMenu',
20175
+ 'Scroll': 'ScrollLock',
20176
+ 'MozPrintableKey': 'Unidentified'
20177
+ };
20178
+
20179
+ /**
20180
+ * Translation from legacy `keyCode` to HTML5 `key`
20181
+ * Only special keys supported, all others depend on keyboard layout or browser
20182
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
20183
+ */
20184
+ var translateToKey = {
20185
+ 8: 'Backspace',
20186
+ 9: 'Tab',
20187
+ 12: 'Clear',
20188
+ 13: 'Enter',
20189
+ 16: 'Shift',
20190
+ 17: 'Control',
20191
+ 18: 'Alt',
20192
+ 19: 'Pause',
20193
+ 20: 'CapsLock',
20194
+ 27: 'Escape',
20195
+ 32: ' ',
20196
+ 33: 'PageUp',
20197
+ 34: 'PageDown',
20198
+ 35: 'End',
20199
+ 36: 'Home',
20200
+ 37: 'ArrowLeft',
20201
+ 38: 'ArrowUp',
20202
+ 39: 'ArrowRight',
20203
+ 40: 'ArrowDown',
20204
+ 45: 'Insert',
20205
+ 46: 'Delete',
20206
+ 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
20207
+ 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
20208
+ 144: 'NumLock',
20209
+ 145: 'ScrollLock',
20210
+ 224: 'Meta'
20211
+ };
20212
+
20213
+ /**
20214
+ * @param {object} nativeEvent Native browser event.
20215
+ * @return {string} Normalized `key` property.
20216
+ */
20217
+ function getEventKey(nativeEvent) {
20218
+ if (nativeEvent.key) {
20219
+ // Normalize inconsistent values reported by browsers due to
20220
+ // implementations of a working draft specification.
20221
+
20222
+ // FireFox implements `key` but returns `MozPrintableKey` for all
20223
+ // printable characters (normalized to `Unidentified`), ignore it.
20224
+ var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
20225
+ if (key !== 'Unidentified') {
20226
+ return key;
20227
+ }
20228
+ }
20229
+
20230
+ // Browser does not implement `key`, polyfill as much of it as we can.
20231
+ if (nativeEvent.type === 'keypress') {
20232
+ var charCode = getEventCharCode(nativeEvent);
20233
+
20234
+ // The enter-key is technically both printable and non-printable and can
20235
+ // thus be captured by `keypress`, no other non-printable key should.
20236
+ return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
20237
+ }
20238
+ if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
20239
+ // While user keyboard layout determines the actual meaning of each
20240
+ // `keyCode` value, almost all function keys have a universal value.
20241
+ return translateToKey[nativeEvent.keyCode] || 'Unidentified';
20242
+ }
20243
+ return '';
20244
+ }
20245
+
20246
+ module.exports = getEventKey;
20247
+
20248
+ /***/ },
20249
+ /* 159 */
20250
+ /***/ function(module, exports, __webpack_require__) {
20251
+
20252
+ /**
20253
+ * Copyright 2013-present, Facebook, Inc.
20254
+ * All rights reserved.
20255
+ *
20256
+ * This source code is licensed under the BSD-style license found in the
20257
+ * LICENSE file in the root directory of this source tree. An additional grant
20258
+ * of patent rights can be found in the PATENTS file in the same directory.
20259
+ *
20260
+ * @providesModule SyntheticDragEvent
20261
+ */
20262
+
20263
+ 'use strict';
20264
+
20265
+ var SyntheticMouseEvent = __webpack_require__(76);
20266
+
20267
+ /**
20268
+ * @interface DragEvent
20269
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
20270
+ */
20271
+ var DragEventInterface = {
20272
+ dataTransfer: null
20273
+ };
20274
+
20275
+ /**
20276
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
20277
+ * @param {string} dispatchMarker Marker identifying the event target.
20278
+ * @param {object} nativeEvent Native browser event.
20279
+ * @extends {SyntheticUIEvent}
20280
+ */
20281
+ function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
20282
+ return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
20283
+ }
20284
+
20285
+ SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
20286
+
20287
+ module.exports = SyntheticDragEvent;
20288
+
20289
+ /***/ },
20290
+ /* 160 */
20291
+ /***/ function(module, exports, __webpack_require__) {
20292
+
20293
+ /**
20294
+ * Copyright 2013-present, Facebook, Inc.
20295
+ * All rights reserved.
20296
+ *
20297
+ * This source code is licensed under the BSD-style license found in the
20298
+ * LICENSE file in the root directory of this source tree. An additional grant
20299
+ * of patent rights can be found in the PATENTS file in the same directory.
20300
+ *
20301
+ * @providesModule SyntheticTouchEvent
20302
+ */
20303
+
20304
+ 'use strict';
20305
+
20306
+ var SyntheticUIEvent = __webpack_require__(77);
20307
+
20308
+ var getEventModifierState = __webpack_require__(79);
20309
+
20310
+ /**
20311
+ * @interface TouchEvent
20312
+ * @see http://www.w3.org/TR/touch-events/
20313
+ */
20314
+ var TouchEventInterface = {
20315
+ touches: null,
20316
+ targetTouches: null,
20317
+ changedTouches: null,
20318
+ altKey: null,
20319
+ metaKey: null,
20320
+ ctrlKey: null,
20321
+ shiftKey: null,
20322
+ getModifierState: getEventModifierState
20323
+ };
20324
+
20325
+ /**
20326
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
20327
+ * @param {string} dispatchMarker Marker identifying the event target.
20328
+ * @param {object} nativeEvent Native browser event.
20329
+ * @extends {SyntheticUIEvent}
20330
+ */
20331
+ function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
20332
+ return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
20333
+ }
20334
+
20335
+ SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
20336
+
20337
+ module.exports = SyntheticTouchEvent;
20338
+
20339
+ /***/ },
20340
+ /* 161 */
20341
+ /***/ function(module, exports, __webpack_require__) {
20342
+
20343
+ /**
20344
+ * Copyright 2013-present, Facebook, Inc.
20345
+ * All rights reserved.
20346
+ *
20347
+ * This source code is licensed under the BSD-style license found in the
20348
+ * LICENSE file in the root directory of this source tree. An additional grant
20349
+ * of patent rights can be found in the PATENTS file in the same directory.
20350
+ *
20351
+ * @providesModule SyntheticTransitionEvent
20352
+ */
20353
+
20354
+ 'use strict';
20355
+
20356
+ var SyntheticEvent = __webpack_require__(54);
20357
+
20358
+ /**
20359
+ * @interface Event
20360
+ * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
20361
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
20362
+ */
20363
+ var TransitionEventInterface = {
20364
+ propertyName: null,
20365
+ elapsedTime: null,
20366
+ pseudoElement: null
20367
+ };
20368
+
20369
+ /**
20370
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
20371
+ * @param {string} dispatchMarker Marker identifying the event target.
20372
+ * @param {object} nativeEvent Native browser event.
20373
+ * @extends {SyntheticEvent}
20374
+ */
20375
+ function SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
20376
+ return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
20377
+ }
20378
+
20379
+ SyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);
20380
+
20381
+ module.exports = SyntheticTransitionEvent;
20382
+
20383
+ /***/ },
20384
+ /* 162 */
20385
+ /***/ function(module, exports, __webpack_require__) {
20386
+
20387
+ /**
20388
+ * Copyright 2013-present, Facebook, Inc.
20389
+ * All rights reserved.
20390
+ *
20391
+ * This source code is licensed under the BSD-style license found in the
20392
+ * LICENSE file in the root directory of this source tree. An additional grant
20393
+ * of patent rights can be found in the PATENTS file in the same directory.
20394
+ *
20395
+ * @providesModule SyntheticWheelEvent
20396
+ */
20397
+
20398
+ 'use strict';
20399
+
20400
+ var SyntheticMouseEvent = __webpack_require__(76);
20401
+
20402
+ /**
20403
+ * @interface WheelEvent
20404
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
20405
+ */
20406
+ var WheelEventInterface = {
20407
+ deltaX: function (event) {
20408
+ return 'deltaX' in event ? event.deltaX :
20409
+ // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
20410
+ 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
20411
+ },
20412
+ deltaY: function (event) {
20413
+ return 'deltaY' in event ? event.deltaY :
20414
+ // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
20415
+ 'wheelDeltaY' in event ? -event.wheelDeltaY :
20416
+ // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
20417
+ 'wheelDelta' in event ? -event.wheelDelta : 0;
20418
+ },
20419
+ deltaZ: null,
20420
+
20421
+ // Browsers without "deltaMode" is reporting in raw wheel delta where one
20422
+ // notch on the scroll is always +/- 120, roughly equivalent to pixels.
20423
+ // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
20424
+ // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
20425
+ deltaMode: null
20426
+ };
20427
+
20428
+ /**
20429
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
20430
+ * @param {string} dispatchMarker Marker identifying the event target.
20431
+ * @param {object} nativeEvent Native browser event.
20432
+ * @extends {SyntheticMouseEvent}
20433
+ */
20434
+ function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {
20435
+ return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);
20436
+ }
20437
+
20438
+ SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
20439
+
20440
+ module.exports = SyntheticWheelEvent;
20441
+
20442
+ /***/ },
20443
+ /* 163 */
20444
+ /***/ function(module, exports, __webpack_require__) {
20445
+
20446
+ /* WEBPACK VAR INJECTION */(function(process) {/**
20447
+ * Copyright 2013-present, Facebook, Inc.
20448
+ * All rights reserved.
20449
+ *
20450
+ * This source code is licensed under the BSD-style license found in the
20451
+ * LICENSE file in the root directory of this source tree. An additional grant
20452
+ * of patent rights can be found in the PATENTS file in the same directory.
20453
+ *
20454
+ * @providesModule ReactMount
20455
+ */
20456
+
20457
+ 'use strict';
20458
+
20459
+ var _prodInvariant = __webpack_require__(8);
20460
+
20461
+ var DOMLazyTree = __webpack_require__(83);
20462
+ var DOMProperty = __webpack_require__(38);
20463
+ var ReactBrowserEventEmitter = __webpack_require__(108);
20464
+ var ReactCurrentOwner = __webpack_require__(11);
20465
+ var ReactDOMComponentTree = __webpack_require__(37);
20466
+ var ReactDOMContainerInfo = __webpack_require__(164);
20467
+ var ReactDOMFeatureFlags = __webpack_require__(165);
20468
+ var ReactElement = __webpack_require__(10);
20469
+ var ReactFeatureFlags = __webpack_require__(59);
20470
+ var ReactInstanceMap = __webpack_require__(120);
20471
+ var ReactInstrumentation = __webpack_require__(63);
20472
+ var ReactMarkupChecksum = __webpack_require__(166);
20473
+ var ReactReconciler = __webpack_require__(60);
20474
+ var ReactUpdateQueue = __webpack_require__(132);
20475
+ var ReactUpdates = __webpack_require__(57);
20476
+
20477
+ var emptyObject = __webpack_require__(20);
20478
+ var instantiateReactComponent = __webpack_require__(122);
20479
+ var invariant = __webpack_require__(9);
20480
+ var setInnerHTML = __webpack_require__(85);
20481
+ var shouldUpdateReactComponent = __webpack_require__(126);
20482
+ var warning = __webpack_require__(12);
20483
+
20484
+ var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
20485
+ var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
20486
+
20487
+ var ELEMENT_NODE_TYPE = 1;
20488
+ var DOC_NODE_TYPE = 9;
20489
+ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
20490
+
20491
+ var instancesByReactRootID = {};
20492
+
20493
+ /**
20494
+ * Finds the index of the first character
20495
+ * that's not common between the two given strings.
20496
+ *
20497
+ * @return {number} the index of the character where the strings diverge
20498
+ */
20499
+ function firstDifferenceIndex(string1, string2) {
20500
+ var minLen = Math.min(string1.length, string2.length);
20501
+ for (var i = 0; i < minLen; i++) {
20502
+ if (string1.charAt(i) !== string2.charAt(i)) {
20503
+ return i;
20504
+ }
20505
+ }
20506
+ return string1.length === string2.length ? -1 : minLen;
20507
+ }
20508
+
20509
+ /**
20510
+ * @param {DOMElement|DOMDocument} container DOM element that may contain
20511
+ * a React component
20512
+ * @return {?*} DOM element that may have the reactRoot ID, or null.
20513
+ */
20514
+ function getReactRootElementInContainer(container) {
20515
+ if (!container) {
20516
+ return null;
20517
+ }
20518
+
20519
+ if (container.nodeType === DOC_NODE_TYPE) {
20520
+ return container.documentElement;
20521
+ } else {
20522
+ return container.firstChild;
20523
+ }
20524
+ }
20525
+
20526
+ function internalGetID(node) {
20527
+ // If node is something like a window, document, or text node, none of
20528
+ // which support attributes or a .getAttribute method, gracefully return
20529
+ // the empty string, as if the attribute were missing.
20530
+ return node.getAttribute && node.getAttribute(ATTR_NAME) || '';
20531
+ }
20532
+
20533
+ /**
20534
+ * Mounts this component and inserts it into the DOM.
20535
+ *
20536
+ * @param {ReactComponent} componentInstance The instance to mount.
20537
+ * @param {DOMElement} container DOM element to mount into.
20538
+ * @param {ReactReconcileTransaction} transaction
20539
+ * @param {boolean} shouldReuseMarkup If true, do not insert markup
20540
+ */
20541
+ function mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {
20542
+ var markerName;
20543
+ if (ReactFeatureFlags.logTopLevelRenders) {
20544
+ var wrappedElement = wrapperInstance._currentElement.props;
20545
+ var type = wrappedElement.type;
20546
+ markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);
20547
+ console.time(markerName);
20548
+ }
20549
+
20550
+ var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDebugID */
20551
+ );
20552
+
20553
+ if (markerName) {
20554
+ console.timeEnd(markerName);
20555
+ }
20556
+
20557
+ wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;
20558
+ ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);
20559
+ }
20560
+
20561
+ /**
20562
+ * Batched mount.
20563
+ *
20564
+ * @param {ReactComponent} componentInstance The instance to mount.
20565
+ * @param {DOMElement} container DOM element to mount into.
20566
+ * @param {boolean} shouldReuseMarkup If true, do not insert markup
20567
+ */
20568
+ function batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {
20569
+ var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(
20570
+ /* useCreateElement */
20571
+ !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);
20572
+ transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);
20573
+ ReactUpdates.ReactReconcileTransaction.release(transaction);
20574
+ }
20575
+
20576
+ /**
20577
+ * Unmounts a component and removes it from the DOM.
20578
+ *
20579
+ * @param {ReactComponent} instance React component instance.
20580
+ * @param {DOMElement} container DOM element to unmount from.
20581
+ * @final
20582
+ * @internal
20583
+ * @see {ReactMount.unmountComponentAtNode}
20584
+ */
20585
+ function unmountComponentFromNode(instance, container, safely) {
20586
+ if (process.env.NODE_ENV !== 'production') {
20587
+ ReactInstrumentation.debugTool.onBeginFlush();
20588
+ }
20589
+ ReactReconciler.unmountComponent(instance, safely);
20590
+ if (process.env.NODE_ENV !== 'production') {
20591
+ ReactInstrumentation.debugTool.onEndFlush();
20592
+ }
20593
+
20594
+ if (container.nodeType === DOC_NODE_TYPE) {
20595
+ container = container.documentElement;
20596
+ }
20597
+
20598
+ // http://jsperf.com/emptying-a-node
20599
+ while (container.lastChild) {
20600
+ container.removeChild(container.lastChild);
20601
+ }
20602
+ }
20603
+
20604
+ /**
20605
+ * True if the supplied DOM node has a direct React-rendered child that is
20606
+ * not a React root element. Useful for warning in `render`,
20607
+ * `unmountComponentAtNode`, etc.
20608
+ *
20609
+ * @param {?DOMElement} node The candidate DOM node.
20610
+ * @return {boolean} True if the DOM element contains a direct child that was
20611
+ * rendered by React but is not a root element.
20612
+ * @internal
20613
+ */
20614
+ function hasNonRootReactChild(container) {
20615
+ var rootEl = getReactRootElementInContainer(container);
20616
+ if (rootEl) {
20617
+ var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);
20618
+ return !!(inst && inst._hostParent);
20619
+ }
20620
+ }
20621
+
20622
+ /**
20623
+ * True if the supplied DOM node is a React DOM element and
20624
+ * it has been rendered by another copy of React.
20625
+ *
20626
+ * @param {?DOMElement} node The candidate DOM node.
20627
+ * @return {boolean} True if the DOM has been rendered by another copy of React
20628
+ * @internal
20629
+ */
20630
+ function nodeIsRenderedByOtherInstance(container) {
20631
+ var rootEl = getReactRootElementInContainer(container);
20632
+ return !!(rootEl && isReactNode(rootEl) && !ReactDOMComponentTree.getInstanceFromNode(rootEl));
20633
+ }
20634
+
20635
+ /**
20636
+ * True if the supplied DOM node is a valid node element.
20637
+ *
20638
+ * @param {?DOMElement} node The candidate DOM node.
20639
+ * @return {boolean} True if the DOM is a valid DOM node.
20640
+ * @internal
20641
+ */
20642
+ function isValidContainer(node) {
20643
+ return !!(node && (node.nodeType === ELEMENT_NODE_TYPE || node.nodeType === DOC_NODE_TYPE || node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
20644
+ }
20645
+
20646
+ /**
20647
+ * True if the supplied DOM node is a valid React node element.
20648
+ *
20649
+ * @param {?DOMElement} node The candidate DOM node.
20650
+ * @return {boolean} True if the DOM is a valid React DOM node.
20651
+ * @internal
20652
+ */
20653
+ function isReactNode(node) {
20654
+ return isValidContainer(node) && (node.hasAttribute(ROOT_ATTR_NAME) || node.hasAttribute(ATTR_NAME));
20655
+ }
20656
+
20657
+ function getHostRootInstanceInContainer(container) {
20658
+ var rootEl = getReactRootElementInContainer(container);
20659
+ var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
20660
+ return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;
20661
+ }
20662
+
20663
+ function getTopLevelWrapperInContainer(container) {
20664
+ var root = getHostRootInstanceInContainer(container);
20665
+ return root ? root._hostContainerInfo._topLevelWrapper : null;
20666
+ }
20667
+
20668
+ /**
20669
+ * Temporary (?) hack so that we can store all top-level pending updates on
20670
+ * composites instead of having to worry about different types of components
20671
+ * here.
20672
+ */
20673
+ var topLevelRootCounter = 1;
20674
+ var TopLevelWrapper = function () {
20675
+ this.rootID = topLevelRootCounter++;
20676
+ };
20677
+ TopLevelWrapper.prototype.isReactComponent = {};
20678
+ if (process.env.NODE_ENV !== 'production') {
20679
+ TopLevelWrapper.displayName = 'TopLevelWrapper';
20680
+ }
20681
+ TopLevelWrapper.prototype.render = function () {
20682
+ // this.props is actually a ReactElement
20683
+ return this.props;
20684
+ };
20685
+
20686
+ /**
20687
+ * Mounting is the process of initializing a React component by creating its
20688
+ * representative DOM elements and inserting them into a supplied `container`.
20689
+ * Any prior content inside `container` is destroyed in the process.
20690
+ *
20691
+ * ReactMount.render(
20692
+ * component,
20693
+ * document.getElementById('container')
20694
+ * );
20695
+ *
20696
+ * <div id="container"> <-- Supplied `container`.
20697
+ * <div data-reactid=".3"> <-- Rendered reactRoot of React
20698
+ * // ... component.
20699
+ * </div>
20700
+ * </div>
20701
+ *
20702
+ * Inside of `container`, the first element rendered is the "reactRoot".
20703
+ */
20704
+ var ReactMount = {
20705
+
20706
+ TopLevelWrapper: TopLevelWrapper,
20707
+
20708
+ /**
20709
+ * Used by devtools. The keys are not important.
20710
+ */
20711
+ _instancesByReactRootID: instancesByReactRootID,
20712
+
20713
+ /**
20714
+ * This is a hook provided to support rendering React components while
20715
+ * ensuring that the apparent scroll position of its `container` does not
20716
+ * change.
20717
+ *
20718
+ * @param {DOMElement} container The `container` being rendered into.
20719
+ * @param {function} renderCallback This must be called once to do the render.
20720
+ */
20721
+ scrollMonitor: function (container, renderCallback) {
20722
+ renderCallback();
20723
+ },
20724
+
20725
+ /**
20726
+ * Take a component that's already mounted into the DOM and replace its props
20727
+ * @param {ReactComponent} prevComponent component instance already in the DOM
20728
+ * @param {ReactElement} nextElement component instance to render
20729
+ * @param {DOMElement} container container to render into
20730
+ * @param {?function} callback function triggered on completion
20731
+ */
20732
+ _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {
20733
+ ReactMount.scrollMonitor(container, function () {
20734
+ ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);
20735
+ if (callback) {
20736
+ ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
20737
+ }
20738
+ });
20739
+
20740
+ return prevComponent;
20741
+ },
20742
+
20743
+ /**
20744
+ * Render a new component into the DOM. Hooked by hooks!
20745
+ *
20746
+ * @param {ReactElement} nextElement element to render
20747
+ * @param {DOMElement} container container to render into
20748
+ * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
20749
+ * @return {ReactComponent} nextComponent
20750
+ */
20751
+ _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
20752
+ // Various parts of our code (such as ReactCompositeComponent's
20753
+ // _renderValidatedComponent) assume that calls to render aren't nested;
20754
+ // verify that that's the case.
20755
+ process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
20756
+
20757
+ !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;
20758
+
20759
+ ReactBrowserEventEmitter.ensureScrollValueMonitoring();
20760
+ var componentInstance = instantiateReactComponent(nextElement, false);
20761
+
20762
+ // The initial render is synchronous but any updates that happen during
20763
+ // rendering, in componentWillMount or componentDidMount, will be batched
20764
+ // according to the current batching strategy.
20765
+
20766
+ ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);
20767
+
20768
+ var wrapperID = componentInstance._instance.rootID;
20769
+ instancesByReactRootID[wrapperID] = componentInstance;
20770
+
20771
+ return componentInstance;
20772
+ },
20773
+
20774
+ /**
20775
+ * Renders a React component into the DOM in the supplied `container`.
20776
+ *
20777
+ * If the React component was previously rendered into `container`, this will
20778
+ * perform an update on it and only mutate the DOM as necessary to reflect the
20779
+ * latest React component.
20780
+ *
20781
+ * @param {ReactComponent} parentComponent The conceptual parent of this render tree.
20782
+ * @param {ReactElement} nextElement Component element to render.
20783
+ * @param {DOMElement} container DOM element to render into.
20784
+ * @param {?function} callback function triggered on completion
20785
+ * @return {ReactComponent} Component instance rendered in `container`.
20786
+ */
20787
+ renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
20788
+ !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;
20789
+ return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
20790
+ },
20791
+
20792
+ _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
20793
+ ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');
20794
+ !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :
20795
+ // Check if it quacks like an element
20796
+ nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;
20797
+
20798
+ process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;
20799
+
20800
+ var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);
20801
+
20802
+ var nextContext;
20803
+ if (parentComponent) {
20804
+ var parentInst = ReactInstanceMap.get(parentComponent);
20805
+ nextContext = parentInst._processChildContext(parentInst._context);
20806
+ } else {
20807
+ nextContext = emptyObject;
20808
+ }
20809
+
20810
+ var prevComponent = getTopLevelWrapperInContainer(container);
20811
+
20812
+ if (prevComponent) {
20813
+ var prevWrappedElement = prevComponent._currentElement;
20814
+ var prevElement = prevWrappedElement.props;
20815
+ if (shouldUpdateReactComponent(prevElement, nextElement)) {
20816
+ var publicInst = prevComponent._renderedComponent.getPublicInstance();
20817
+ var updatedCallback = callback && function () {
20818
+ callback.call(publicInst);
20819
+ };
20820
+ ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);
20821
+ return publicInst;
20822
+ } else {
20823
+ ReactMount.unmountComponentAtNode(container);
20824
+ }
20825
+ }
20826
+
20827
+ var reactRootElement = getReactRootElementInContainer(container);
20828
+ var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);
20829
+ var containerHasNonRootReactChild = hasNonRootReactChild(container);
20830
+
20831
+ if (process.env.NODE_ENV !== 'production') {
20832
+ process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;
20833
+
20834
+ if (!containerHasReactMarkup || reactRootElement.nextSibling) {
20835
+ var rootElementSibling = reactRootElement;
20836
+ while (rootElementSibling) {
20837
+ if (internalGetID(rootElementSibling)) {
20838
+ process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;
20839
+ break;
20840
+ }
20841
+ rootElementSibling = rootElementSibling.nextSibling;
20842
+ }
20843
+ }
20844
+ }
20845
+
20846
+ var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;
20847
+ var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();
20848
+ if (callback) {
20849
+ callback.call(component);
20850
+ }
20851
+ return component;
20852
+ },
20853
+
20854
+ /**
20855
+ * Renders a React component into the DOM in the supplied `container`.
20856
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render
20857
+ *
20858
+ * If the React component was previously rendered into `container`, this will
20859
+ * perform an update on it and only mutate the DOM as necessary to reflect the
20860
+ * latest React component.
20861
+ *
20862
+ * @param {ReactElement} nextElement Component element to render.
20863
+ * @param {DOMElement} container DOM element to render into.
20864
+ * @param {?function} callback function triggered on completion
20865
+ * @return {ReactComponent} Component instance rendered in `container`.
20866
+ */
20867
+ render: function (nextElement, container, callback) {
20868
+ return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);
20869
+ },
20870
+
20871
+ /**
20872
+ * Unmounts and destroys the React component rendered in the `container`.
20873
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode
20874
+ *
20875
+ * @param {DOMElement} container DOM element containing a React component.
20876
+ * @return {boolean} True if a component was found in and unmounted from
20877
+ * `container`
20878
+ */
20879
+ unmountComponentAtNode: function (container) {
20880
+ // Various parts of our code (such as ReactCompositeComponent's
20881
+ // _renderValidatedComponent) assume that calls to render aren't nested;
20882
+ // verify that that's the case. (Strictly speaking, unmounting won't cause a
20883
+ // render but we still don't expect to be in a render call here.)
20884
+ process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
20885
+
20886
+ !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;
20887
+
20888
+ if (process.env.NODE_ENV !== 'production') {
20889
+ process.env.NODE_ENV !== 'production' ? warning(!nodeIsRenderedByOtherInstance(container), 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by another copy of React.') : void 0;
20890
+ }
20891
+
20892
+ var prevComponent = getTopLevelWrapperInContainer(container);
20893
+ if (!prevComponent) {
20894
+ // Check if the node being unmounted was rendered by React, but isn't a
20895
+ // root node.
20896
+ var containerHasNonRootReactChild = hasNonRootReactChild(container);
20897
+
20898
+ // Check if the container itself is a React root node.
20899
+ var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);
20900
+
20901
+ if (process.env.NODE_ENV !== 'production') {
20902
+ process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;
20903
+ }
20904
+
20905
+ return false;
20906
+ }
20907
+ delete instancesByReactRootID[prevComponent._instance.rootID];
20908
+ ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);
20909
+ return true;
20910
+ },
20911
+
20912
+ _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {
20913
+ !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;
20914
+
20915
+ if (shouldReuseMarkup) {
20916
+ var rootElement = getReactRootElementInContainer(container);
20917
+ if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
20918
+ ReactDOMComponentTree.precacheNode(instance, rootElement);
20919
+ return;
20920
+ } else {
20921
+ var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
20922
+ rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
20923
+
20924
+ var rootMarkup = rootElement.outerHTML;
20925
+ rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);
20926
+
20927
+ var normalizedMarkup = markup;
20928
+ if (process.env.NODE_ENV !== 'production') {
20929
+ // because rootMarkup is retrieved from the DOM, various normalizations
20930
+ // will have occurred which will not be present in `markup`. Here,
20931
+ // insert markup into a <div> or <iframe> depending on the container
20932
+ // type to perform the same normalizations before comparing.
20933
+ var normalizer;
20934
+ if (container.nodeType === ELEMENT_NODE_TYPE) {
20935
+ normalizer = document.createElement('div');
20936
+ normalizer.innerHTML = markup;
20937
+ normalizedMarkup = normalizer.innerHTML;
20938
+ } else {
20939
+ normalizer = document.createElement('iframe');
20940
+ document.body.appendChild(normalizer);
20941
+ normalizer.contentDocument.write(markup);
20942
+ normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;
20943
+ document.body.removeChild(normalizer);
20944
+ }
20945
+ }
20946
+
20947
+ var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
20948
+ var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
20949
+
20950
+ !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s', difference) : _prodInvariant('42', difference) : void 0;
20951
+
20952
+ if (process.env.NODE_ENV !== 'production') {
20953
+ process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : void 0;
20954
+ }
20955
+ }
20956
+ }
20957
+
20958
+ !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but you didn\'t use server rendering. We can\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;
20959
+
20960
+ if (transaction.useCreateElement) {
20961
+ while (container.lastChild) {
20962
+ container.removeChild(container.lastChild);
20963
+ }
20964
+ DOMLazyTree.insertTreeBefore(container, markup, null);
20965
+ } else {
20966
+ setInnerHTML(container, markup);
20967
+ ReactDOMComponentTree.precacheNode(instance, container.firstChild);
20968
+ }
20969
+
20970
+ if (process.env.NODE_ENV !== 'production') {
20971
+ var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
20972
+ if (hostNode._debugID !== 0) {
20973
+ ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());
20974
+ }
20975
+ }
20976
+ }
20977
+ };
20978
+
20979
+ module.exports = ReactMount;
20980
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
20981
+
20982
+ /***/ },
20983
+ /* 164 */
20984
+ /***/ function(module, exports, __webpack_require__) {
20985
+
20986
+ /* WEBPACK VAR INJECTION */(function(process) {/**
20987
+ * Copyright 2013-present, Facebook, Inc.
20988
+ * All rights reserved.
20989
+ *
20990
+ * This source code is licensed under the BSD-style license found in the
20991
+ * LICENSE file in the root directory of this source tree. An additional grant
20992
+ * of patent rights can be found in the PATENTS file in the same directory.
20993
+ *
20994
+ * @providesModule ReactDOMContainerInfo
20995
+ */
20996
+
20997
+ 'use strict';
20998
+
20999
+ var validateDOMNesting = __webpack_require__(133);
21000
+
21001
+ var DOC_NODE_TYPE = 9;
21002
+
21003
+ function ReactDOMContainerInfo(topLevelWrapper, node) {
21004
+ var info = {
21005
+ _topLevelWrapper: topLevelWrapper,
21006
+ _idCounter: 1,
21007
+ _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,
21008
+ _node: node,
21009
+ _tag: node ? node.nodeName.toLowerCase() : null,
21010
+ _namespaceURI: node ? node.namespaceURI : null
21011
+ };
21012
+ if (process.env.NODE_ENV !== 'production') {
21013
+ info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;
21014
+ }
21015
+ return info;
21016
+ }
21017
+
21018
+ module.exports = ReactDOMContainerInfo;
21019
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21020
+
21021
+ /***/ },
21022
+ /* 165 */
21023
+ /***/ function(module, exports) {
21024
+
21025
+ /**
21026
+ * Copyright 2013-present, Facebook, Inc.
21027
+ * All rights reserved.
21028
+ *
21029
+ * This source code is licensed under the BSD-style license found in the
21030
+ * LICENSE file in the root directory of this source tree. An additional grant
21031
+ * of patent rights can be found in the PATENTS file in the same directory.
21032
+ *
21033
+ * @providesModule ReactDOMFeatureFlags
21034
+ */
21035
+
21036
+ 'use strict';
21037
+
21038
+ var ReactDOMFeatureFlags = {
21039
+ useCreateElement: true
21040
+ };
21041
+
21042
+ module.exports = ReactDOMFeatureFlags;
21043
+
21044
+ /***/ },
21045
+ /* 166 */
21046
+ /***/ function(module, exports, __webpack_require__) {
21047
+
21048
+ /**
21049
+ * Copyright 2013-present, Facebook, Inc.
21050
+ * All rights reserved.
21051
+ *
21052
+ * This source code is licensed under the BSD-style license found in the
21053
+ * LICENSE file in the root directory of this source tree. An additional grant
21054
+ * of patent rights can be found in the PATENTS file in the same directory.
21055
+ *
21056
+ * @providesModule ReactMarkupChecksum
21057
+ */
21058
+
21059
+ 'use strict';
21060
+
21061
+ var adler32 = __webpack_require__(167);
21062
+
21063
+ var TAG_END = /\/?>/;
21064
+ var COMMENT_START = /^<\!\-\-/;
21065
+
21066
+ var ReactMarkupChecksum = {
21067
+ CHECKSUM_ATTR_NAME: 'data-react-checksum',
21068
+
21069
+ /**
21070
+ * @param {string} markup Markup string
21071
+ * @return {string} Markup string with checksum attribute attached
21072
+ */
21073
+ addChecksumToMarkup: function (markup) {
21074
+ var checksum = adler32(markup);
21075
+
21076
+ // Add checksum (handle both parent tags, comments and self-closing tags)
21077
+ if (COMMENT_START.test(markup)) {
21078
+ return markup;
21079
+ } else {
21080
+ return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
21081
+ }
21082
+ },
21083
+
21084
+ /**
21085
+ * @param {string} markup to use
21086
+ * @param {DOMElement} element root React element
21087
+ * @returns {boolean} whether or not the markup is the same
21088
+ */
21089
+ canReuseMarkup: function (markup, element) {
21090
+ var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
21091
+ existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
21092
+ var markupChecksum = adler32(markup);
21093
+ return markupChecksum === existingChecksum;
21094
+ }
21095
+ };
21096
+
21097
+ module.exports = ReactMarkupChecksum;
21098
+
21099
+ /***/ },
21100
+ /* 167 */
21101
+ /***/ function(module, exports) {
21102
+
21103
+ /**
21104
+ * Copyright 2013-present, Facebook, Inc.
21105
+ * All rights reserved.
21106
+ *
21107
+ * This source code is licensed under the BSD-style license found in the
21108
+ * LICENSE file in the root directory of this source tree. An additional grant
21109
+ * of patent rights can be found in the PATENTS file in the same directory.
21110
+ *
21111
+ * @providesModule adler32
21112
+ *
21113
+ */
21114
+
21115
+ 'use strict';
21116
+
21117
+ var MOD = 65521;
21118
+
21119
+ // adler32 is not cryptographically strong, and is only used to sanity check that
21120
+ // markup generated on the server matches the markup generated on the client.
21121
+ // This implementation (a modified version of the SheetJS version) has been optimized
21122
+ // for our use case, at the expense of conforming to the adler32 specification
21123
+ // for non-ascii inputs.
21124
+ function adler32(data) {
21125
+ var a = 1;
21126
+ var b = 0;
21127
+ var i = 0;
21128
+ var l = data.length;
21129
+ var m = l & ~0x3;
21130
+ while (i < m) {
21131
+ var n = Math.min(i + 4096, m);
21132
+ for (; i < n; i += 4) {
21133
+ b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));
21134
+ }
21135
+ a %= MOD;
21136
+ b %= MOD;
21137
+ }
21138
+ for (; i < l; i++) {
21139
+ b += a += data.charCodeAt(i);
21140
+ }
21141
+ a %= MOD;
21142
+ b %= MOD;
21143
+ return a | b << 16;
21144
+ }
21145
+
21146
+ module.exports = adler32;
21147
+
21148
+ /***/ },
21149
+ /* 168 */
21150
+ /***/ function(module, exports, __webpack_require__) {
21151
+
21152
+ /* WEBPACK VAR INJECTION */(function(process) {/**
21153
+ * Copyright 2013-present, Facebook, Inc.
21154
+ * All rights reserved.
21155
+ *
21156
+ * This source code is licensed under the BSD-style license found in the
21157
+ * LICENSE file in the root directory of this source tree. An additional grant
21158
+ * of patent rights can be found in the PATENTS file in the same directory.
21159
+ *
21160
+ * @providesModule findDOMNode
21161
+ */
21162
+
21163
+ 'use strict';
21164
+
21165
+ var _prodInvariant = __webpack_require__(8);
21166
+
21167
+ var ReactCurrentOwner = __webpack_require__(11);
21168
+ var ReactDOMComponentTree = __webpack_require__(37);
21169
+ var ReactInstanceMap = __webpack_require__(120);
21170
+
21171
+ var getHostComponentFromComposite = __webpack_require__(169);
21172
+ var invariant = __webpack_require__(9);
21173
+ var warning = __webpack_require__(12);
21174
+
21175
+ /**
21176
+ * Returns the DOM node rendered by this element.
21177
+ *
21178
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
21179
+ *
21180
+ * @param {ReactComponent|DOMElement} componentOrElement
21181
+ * @return {?DOMElement} The root node of this element.
21182
+ */
21183
+ function findDOMNode(componentOrElement) {
21184
+ if (process.env.NODE_ENV !== 'production') {
21185
+ var owner = ReactCurrentOwner.current;
21186
+ if (owner !== null) {
21187
+ process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;
21188
+ owner._warnedAboutRefsInRender = true;
21189
+ }
21190
+ }
21191
+ if (componentOrElement == null) {
21192
+ return null;
21193
+ }
21194
+ if (componentOrElement.nodeType === 1) {
21195
+ return componentOrElement;
21196
+ }
21197
+
21198
+ var inst = ReactInstanceMap.get(componentOrElement);
21199
+ if (inst) {
21200
+ inst = getHostComponentFromComposite(inst);
21201
+ return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;
21202
+ }
21203
+
21204
+ if (typeof componentOrElement.render === 'function') {
21205
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;
21206
+ } else {
21207
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;
21208
+ }
21209
+ }
21210
+
21211
+ module.exports = findDOMNode;
21212
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21213
+
21214
+ /***/ },
21215
+ /* 169 */
21216
+ /***/ function(module, exports, __webpack_require__) {
21217
+
21218
+ /**
21219
+ * Copyright 2013-present, Facebook, Inc.
21220
+ * All rights reserved.
21221
+ *
21222
+ * This source code is licensed under the BSD-style license found in the
21223
+ * LICENSE file in the root directory of this source tree. An additional grant
21224
+ * of patent rights can be found in the PATENTS file in the same directory.
21225
+ *
21226
+ * @providesModule getHostComponentFromComposite
21227
+ */
21228
+
21229
+ 'use strict';
21230
+
21231
+ var ReactNodeTypes = __webpack_require__(124);
21232
+
21233
+ function getHostComponentFromComposite(inst) {
21234
+ var type;
21235
+
21236
+ while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {
21237
+ inst = inst._renderedComponent;
21238
+ }
21239
+
21240
+ if (type === ReactNodeTypes.HOST) {
21241
+ return inst._renderedComponent;
21242
+ } else if (type === ReactNodeTypes.EMPTY) {
21243
+ return null;
21244
+ }
21245
+ }
21246
+
21247
+ module.exports = getHostComponentFromComposite;
21248
+
21249
+ /***/ },
21250
+ /* 170 */
21251
+ /***/ function(module, exports, __webpack_require__) {
21252
+
21253
+ /**
21254
+ * Copyright 2013-present, Facebook, Inc.
21255
+ * All rights reserved.
21256
+ *
21257
+ * This source code is licensed under the BSD-style license found in the
21258
+ * LICENSE file in the root directory of this source tree. An additional grant
21259
+ * of patent rights can be found in the PATENTS file in the same directory.
21260
+ *
21261
+ * @providesModule renderSubtreeIntoContainer
21262
+ */
21263
+
21264
+ 'use strict';
21265
+
21266
+ var ReactMount = __webpack_require__(163);
21267
+
21268
+ module.exports = ReactMount.renderSubtreeIntoContainer;
21269
+
21270
+ /***/ },
21271
+ /* 171 */
21272
+ /***/ function(module, exports, __webpack_require__) {
21273
+
21274
+ /* WEBPACK VAR INJECTION */(function(process) {/**
21275
+ * Copyright 2013-present, Facebook, Inc.
21276
+ * All rights reserved.
21277
+ *
21278
+ * This source code is licensed under the BSD-style license found in the
21279
+ * LICENSE file in the root directory of this source tree. An additional grant
21280
+ * of patent rights can be found in the PATENTS file in the same directory.
21281
+ *
21282
+ * @providesModule ReactDOMUnknownPropertyHook
21283
+ */
21284
+
21285
+ 'use strict';
21286
+
21287
+ var DOMProperty = __webpack_require__(38);
21288
+ var EventPluginRegistry = __webpack_require__(45);
21289
+ var ReactComponentTreeHook = __webpack_require__(29);
21290
+
21291
+ var warning = __webpack_require__(12);
21292
+
21293
+ if (process.env.NODE_ENV !== 'production') {
21294
+ var reactProps = {
21295
+ children: true,
21296
+ dangerouslySetInnerHTML: true,
21297
+ key: true,
21298
+ ref: true,
21299
+
21300
+ autoFocus: true,
21301
+ defaultValue: true,
21302
+ valueLink: true,
21303
+ defaultChecked: true,
21304
+ checkedLink: true,
21305
+ innerHTML: true,
21306
+ suppressContentEditableWarning: true,
21307
+ onFocusIn: true,
21308
+ onFocusOut: true
21309
+ };
21310
+ var warnedProperties = {};
21311
+
21312
+ var validateProperty = function (tagName, name, debugID) {
21313
+ if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {
21314
+ return true;
21315
+ }
21316
+ if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
21317
+ return true;
21318
+ }
21319
+ if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {
21320
+ return true;
21321
+ }
21322
+ warnedProperties[name] = true;
21323
+ var lowerCasedName = name.toLowerCase();
21324
+
21325
+ // data-* attributes should be lowercase; suggest the lowercase version
21326
+ var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
21327
+
21328
+ var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;
21329
+
21330
+ if (standardName != null) {
21331
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
21332
+ return true;
21333
+ } else if (registrationName != null) {
21334
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
21335
+ return true;
21336
+ } else {
21337
+ // We were unable to guess which prop the user intended.
21338
+ // It is likely that the user was just blindly spreading/forwarding props
21339
+ // Components should be careful to only render valid props/attributes.
21340
+ // Warning will be invoked in warnUnknownProperties to allow grouping.
21341
+ return false;
21342
+ }
21343
+ };
21344
+ }
21345
+
21346
+ var warnUnknownProperties = function (debugID, element) {
21347
+ var unknownProps = [];
21348
+ for (var key in element.props) {
21349
+ var isValid = validateProperty(element.type, key, debugID);
21350
+ if (!isValid) {
21351
+ unknownProps.push(key);
21352
+ }
21353
+ }
21354
+
21355
+ var unknownPropString = unknownProps.map(function (prop) {
21356
+ return '`' + prop + '`';
21357
+ }).join(', ');
21358
+
21359
+ if (unknownProps.length === 1) {
21360
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
21361
+ } else if (unknownProps.length > 1) {
21362
+ process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
21363
+ }
21364
+ };
21365
+
21366
+ function handleElement(debugID, element) {
21367
+ if (element == null || typeof element.type !== 'string') {
21368
+ return;
21369
+ }
21370
+ if (element.type.indexOf('-') >= 0 || element.props.is) {
21371
+ return;
21372
+ }
21373
+ warnUnknownProperties(debugID, element);
21374
+ }
21375
+
21376
+ var ReactDOMUnknownPropertyHook = {
21377
+ onBeforeMountComponent: function (debugID, element) {
21378
+ handleElement(debugID, element);
21379
+ },
21380
+ onBeforeUpdateComponent: function (debugID, element) {
21381
+ handleElement(debugID, element);
21382
+ }
21383
+ };
21384
+
21385
+ module.exports = ReactDOMUnknownPropertyHook;
21386
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21387
+
21388
+ /***/ },
21389
+ /* 172 */
21390
+ /***/ function(module, exports, __webpack_require__) {
21391
+
21392
+ /* WEBPACK VAR INJECTION */(function(process) {/**
21393
+ * Copyright 2013-present, Facebook, Inc.
21394
+ * All rights reserved.
21395
+ *
21396
+ * This source code is licensed under the BSD-style license found in the
21397
+ * LICENSE file in the root directory of this source tree. An additional grant
21398
+ * of patent rights can be found in the PATENTS file in the same directory.
21399
+ *
21400
+ * @providesModule ReactDOMNullInputValuePropHook
21401
+ */
21402
+
21403
+ 'use strict';
21404
+
21405
+ var ReactComponentTreeHook = __webpack_require__(29);
21406
+
21407
+ var warning = __webpack_require__(12);
21408
+
21409
+ var didWarnValueNull = false;
21410
+
21411
+ function handleElement(debugID, element) {
21412
+ if (element == null) {
21413
+ return;
21414
+ }
21415
+ if (element.type !== 'input' && element.type !== 'textarea' && element.type !== 'select') {
21416
+ return;
21417
+ }
21418
+ if (element.props != null && element.props.value === null && !didWarnValueNull) {
21419
+ process.env.NODE_ENV !== 'production' ? warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;
21420
+
21421
+ didWarnValueNull = true;
21422
+ }
21423
+ }
21424
+
21425
+ var ReactDOMNullInputValuePropHook = {
21426
+ onBeforeMountComponent: function (debugID, element) {
21427
+ handleElement(debugID, element);
21428
+ },
21429
+ onBeforeUpdateComponent: function (debugID, element) {
21430
+ handleElement(debugID, element);
21431
+ }
21432
+ };
21433
+
21434
+ module.exports = ReactDOMNullInputValuePropHook;
21435
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21436
+
21437
+ /***/ },
21438
+ /* 173 */
21439
+ /***/ function(module, exports, __webpack_require__) {
21440
+
21441
+ 'use strict';
21442
+
21443
+ exports.__esModule = true;
21444
+ exports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.RouterContext = exports.createRoutes = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined;
21445
+
21446
+ var _RouteUtils = __webpack_require__(174);
21447
+
21448
+ Object.defineProperty(exports, 'createRoutes', {
21449
+ enumerable: true,
21450
+ get: function get() {
21451
+ return _RouteUtils.createRoutes;
21452
+ }
21453
+ });
21454
+
21455
+ var _PropTypes = __webpack_require__(175);
21456
+
21457
+ Object.defineProperty(exports, 'locationShape', {
21458
+ enumerable: true,
21459
+ get: function get() {
21460
+ return _PropTypes.locationShape;
21461
+ }
21462
+ });
21463
+ Object.defineProperty(exports, 'routerShape', {
21464
+ enumerable: true,
21465
+ get: function get() {
21466
+ return _PropTypes.routerShape;
21467
+ }
21468
+ });
21469
+
21470
+ var _PatternUtils = __webpack_require__(176);
21471
+
21472
+ Object.defineProperty(exports, 'formatPattern', {
21473
+ enumerable: true,
21474
+ get: function get() {
21475
+ return _PatternUtils.formatPattern;
21476
+ }
21477
+ });
21478
+
21479
+ var _Router2 = __webpack_require__(178);
21480
+
21481
+ var _Router3 = _interopRequireDefault(_Router2);
21482
+
21483
+ var _Link2 = __webpack_require__(194);
21484
+
21485
+ var _Link3 = _interopRequireDefault(_Link2);
21486
+
21487
+ var _IndexLink2 = __webpack_require__(195);
21488
+
21489
+ var _IndexLink3 = _interopRequireDefault(_IndexLink2);
21490
+
21491
+ var _withRouter2 = __webpack_require__(196);
21492
+
21493
+ var _withRouter3 = _interopRequireDefault(_withRouter2);
21494
+
21495
+ var _IndexRedirect2 = __webpack_require__(198);
21496
+
21497
+ var _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2);
21498
+
21499
+ var _IndexRoute2 = __webpack_require__(200);
21500
+
21501
+ var _IndexRoute3 = _interopRequireDefault(_IndexRoute2);
21502
+
21503
+ var _Redirect2 = __webpack_require__(199);
21504
+
21505
+ var _Redirect3 = _interopRequireDefault(_Redirect2);
21506
+
21507
+ var _Route2 = __webpack_require__(201);
21508
+
21509
+ var _Route3 = _interopRequireDefault(_Route2);
21510
+
21511
+ var _RouterContext2 = __webpack_require__(190);
21512
+
21513
+ var _RouterContext3 = _interopRequireDefault(_RouterContext2);
21514
+
21515
+ var _match2 = __webpack_require__(202);
21516
+
21517
+ var _match3 = _interopRequireDefault(_match2);
21518
+
21519
+ var _useRouterHistory2 = __webpack_require__(216);
21520
+
21521
+ var _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2);
21522
+
21523
+ var _applyRouterMiddleware2 = __webpack_require__(217);
21524
+
21525
+ var _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2);
21526
+
21527
+ var _browserHistory2 = __webpack_require__(218);
21528
+
21529
+ var _browserHistory3 = _interopRequireDefault(_browserHistory2);
21530
+
21531
+ var _hashHistory2 = __webpack_require__(226);
21532
+
21533
+ var _hashHistory3 = _interopRequireDefault(_hashHistory2);
21534
+
21535
+ var _createMemoryHistory2 = __webpack_require__(204);
21536
+
21537
+ var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2);
21538
+
21539
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21540
+
21541
+ exports.Router = _Router3.default; /* components */
21542
+
21543
+ exports.Link = _Link3.default;
21544
+ exports.IndexLink = _IndexLink3.default;
21545
+ exports.withRouter = _withRouter3.default;
21546
+
21547
+ /* components (configuration) */
21548
+
21549
+ exports.IndexRedirect = _IndexRedirect3.default;
21550
+ exports.IndexRoute = _IndexRoute3.default;
21551
+ exports.Redirect = _Redirect3.default;
21552
+ exports.Route = _Route3.default;
21553
+
21554
+ /* utils */
21555
+
21556
+ exports.RouterContext = _RouterContext3.default;
21557
+ exports.match = _match3.default;
21558
+ exports.useRouterHistory = _useRouterHistory3.default;
21559
+ exports.applyRouterMiddleware = _applyRouterMiddleware3.default;
21560
+
21561
+ /* histories */
21562
+
21563
+ exports.browserHistory = _browserHistory3.default;
21564
+ exports.hashHistory = _hashHistory3.default;
21565
+ exports.createMemoryHistory = _createMemoryHistory3.default;
21566
+
21567
+ /***/ },
21568
+ /* 174 */
21569
+ /***/ function(module, exports, __webpack_require__) {
21570
+
21571
+ 'use strict';
21572
+
21573
+ exports.__esModule = true;
21574
+
21575
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
21576
+
21577
+ exports.isReactChildren = isReactChildren;
21578
+ exports.createRouteFromReactElement = createRouteFromReactElement;
21579
+ exports.createRoutesFromReactChildren = createRoutesFromReactChildren;
21580
+ exports.createRoutes = createRoutes;
21581
+
21582
+ var _react = __webpack_require__(2);
21583
+
21584
+ var _react2 = _interopRequireDefault(_react);
21585
+
21586
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21587
+
21588
+ function isValidChild(object) {
21589
+ return object == null || _react2.default.isValidElement(object);
21590
+ }
21591
+
21592
+ function isReactChildren(object) {
21593
+ return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);
21594
+ }
21595
+
21596
+ function createRoute(defaultProps, props) {
21597
+ return _extends({}, defaultProps, props);
21598
+ }
21599
+
21600
+ function createRouteFromReactElement(element) {
21601
+ var type = element.type;
21602
+ var route = createRoute(type.defaultProps, element.props);
21603
+
21604
+ if (route.children) {
21605
+ var childRoutes = createRoutesFromReactChildren(route.children, route);
21606
+
21607
+ if (childRoutes.length) route.childRoutes = childRoutes;
21608
+
21609
+ delete route.children;
21610
+ }
21611
+
21612
+ return route;
21613
+ }
21614
+
21615
+ /**
21616
+ * Creates and returns a routes object from the given ReactChildren. JSX
21617
+ * provides a convenient way to visualize how routes in the hierarchy are
21618
+ * nested.
21619
+ *
21620
+ * import { Route, createRoutesFromReactChildren } from 'react-router'
21621
+ *
21622
+ * const routes = createRoutesFromReactChildren(
21623
+ * <Route component={App}>
21624
+ * <Route path="home" component={Dashboard}/>
21625
+ * <Route path="news" component={NewsFeed}/>
21626
+ * </Route>
21627
+ * )
21628
+ *
21629
+ * Note: This method is automatically used when you provide <Route> children
21630
+ * to a <Router> component.
21631
+ */
21632
+ function createRoutesFromReactChildren(children, parentRoute) {
21633
+ var routes = [];
21634
+
21635
+ _react2.default.Children.forEach(children, function (element) {
21636
+ if (_react2.default.isValidElement(element)) {
21637
+ // Component classes may have a static create* method.
21638
+ if (element.type.createRouteFromReactElement) {
21639
+ var route = element.type.createRouteFromReactElement(element, parentRoute);
21640
+
21641
+ if (route) routes.push(route);
21642
+ } else {
21643
+ routes.push(createRouteFromReactElement(element));
21644
+ }
21645
+ }
21646
+ });
21647
+
21648
+ return routes;
21649
+ }
21650
+
21651
+ /**
21652
+ * Creates and returns an array of routes from the given object which
21653
+ * may be a JSX route, a plain object route, or an array of either.
21654
+ */
21655
+ function createRoutes(routes) {
21656
+ if (isReactChildren(routes)) {
21657
+ routes = createRoutesFromReactChildren(routes);
21658
+ } else if (routes && !Array.isArray(routes)) {
21659
+ routes = [routes];
21660
+ }
21661
+
21662
+ return routes;
21663
+ }
21664
+
21665
+ /***/ },
21666
+ /* 175 */
21667
+ /***/ function(module, exports, __webpack_require__) {
21668
+
21669
+ 'use strict';
21670
+
21671
+ exports.__esModule = true;
21672
+ exports.locationShape = exports.routerShape = undefined;
21673
+
21674
+ var _react = __webpack_require__(2);
21675
+
21676
+ var func = _react.PropTypes.func,
21677
+ object = _react.PropTypes.object,
21678
+ shape = _react.PropTypes.shape,
21679
+ string = _react.PropTypes.string;
21680
+ var routerShape = exports.routerShape = shape({
21681
+ push: func.isRequired,
21682
+ replace: func.isRequired,
21683
+ go: func.isRequired,
21684
+ goBack: func.isRequired,
21685
+ goForward: func.isRequired,
21686
+ setRouteLeaveHook: func.isRequired,
21687
+ isActive: func.isRequired
21688
+ });
21689
+
21690
+ var locationShape = exports.locationShape = shape({
21691
+ pathname: string.isRequired,
21692
+ search: string.isRequired,
21693
+ state: object,
21694
+ action: string.isRequired,
21695
+ key: string
21696
+ });
21697
+
21698
+ /***/ },
21699
+ /* 176 */
21700
+ /***/ function(module, exports, __webpack_require__) {
21701
+
21702
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
21703
+
21704
+ exports.__esModule = true;
21705
+ exports.compilePattern = compilePattern;
21706
+ exports.matchPattern = matchPattern;
21707
+ exports.getParamNames = getParamNames;
21708
+ exports.getParams = getParams;
21709
+ exports.formatPattern = formatPattern;
21710
+
21711
+ var _invariant = __webpack_require__(177);
21712
+
21713
+ var _invariant2 = _interopRequireDefault(_invariant);
21714
+
21715
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21716
+
21717
+ function escapeRegExp(string) {
21718
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
21719
+ }
21720
+
21721
+ function _compilePattern(pattern) {
21722
+ var regexpSource = '';
21723
+ var paramNames = [];
21724
+ var tokens = [];
21725
+
21726
+ var match = void 0,
21727
+ lastIndex = 0,
21728
+ matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)/g;
21729
+ while (match = matcher.exec(pattern)) {
21730
+ if (match.index !== lastIndex) {
21731
+ tokens.push(pattern.slice(lastIndex, match.index));
21732
+ regexpSource += escapeRegExp(pattern.slice(lastIndex, match.index));
21733
+ }
21734
+
21735
+ if (match[1]) {
21736
+ regexpSource += '([^/]+)';
21737
+ paramNames.push(match[1]);
21738
+ } else if (match[0] === '**') {
21739
+ regexpSource += '(.*)';
21740
+ paramNames.push('splat');
21741
+ } else if (match[0] === '*') {
21742
+ regexpSource += '(.*?)';
21743
+ paramNames.push('splat');
21744
+ } else if (match[0] === '(') {
21745
+ regexpSource += '(?:';
21746
+ } else if (match[0] === ')') {
21747
+ regexpSource += ')?';
21748
+ }
21749
+
21750
+ tokens.push(match[0]);
21751
+
21752
+ lastIndex = matcher.lastIndex;
21753
+ }
21754
+
21755
+ if (lastIndex !== pattern.length) {
21756
+ tokens.push(pattern.slice(lastIndex, pattern.length));
21757
+ regexpSource += escapeRegExp(pattern.slice(lastIndex, pattern.length));
21758
+ }
21759
+
21760
+ return {
21761
+ pattern: pattern,
21762
+ regexpSource: regexpSource,
21763
+ paramNames: paramNames,
21764
+ tokens: tokens
21765
+ };
21766
+ }
21767
+
21768
+ var CompiledPatternsCache = Object.create(null);
21769
+
21770
+ function compilePattern(pattern) {
21771
+ if (!CompiledPatternsCache[pattern]) CompiledPatternsCache[pattern] = _compilePattern(pattern);
21772
+
21773
+ return CompiledPatternsCache[pattern];
21774
+ }
21775
+
21776
+ /**
21777
+ * Attempts to match a pattern on the given pathname. Patterns may use
21778
+ * the following special characters:
21779
+ *
21780
+ * - :paramName Matches a URL segment up to the next /, ?, or #. The
21781
+ * captured string is considered a "param"
21782
+ * - () Wraps a segment of the URL that is optional
21783
+ * - * Consumes (non-greedy) all characters up to the next
21784
+ * character in the pattern, or to the end of the URL if
21785
+ * there is none
21786
+ * - ** Consumes (greedy) all characters up to the next character
21787
+ * in the pattern, or to the end of the URL if there is none
21788
+ *
21789
+ * The function calls callback(error, matched) when finished.
21790
+ * The return value is an object with the following properties:
21791
+ *
21792
+ * - remainingPathname
21793
+ * - paramNames
21794
+ * - paramValues
21795
+ */
21796
+ function matchPattern(pattern, pathname) {
21797
+ // Ensure pattern starts with leading slash for consistency with pathname.
21798
+ if (pattern.charAt(0) !== '/') {
21799
+ pattern = '/' + pattern;
21800
+ }
21801
+
21802
+ var _compilePattern2 = compilePattern(pattern),
21803
+ regexpSource = _compilePattern2.regexpSource,
21804
+ paramNames = _compilePattern2.paramNames,
21805
+ tokens = _compilePattern2.tokens;
21806
+
21807
+ if (pattern.charAt(pattern.length - 1) !== '/') {
21808
+ regexpSource += '/?'; // Allow optional path separator at end.
21809
+ }
21810
+
21811
+ // Special-case patterns like '*' for catch-all routes.
21812
+ if (tokens[tokens.length - 1] === '*') {
21813
+ regexpSource += '$';
21814
+ }
21815
+
21816
+ var match = pathname.match(new RegExp('^' + regexpSource, 'i'));
21817
+ if (match == null) {
21818
+ return null;
21819
+ }
21820
+
21821
+ var matchedPath = match[0];
21822
+ var remainingPathname = pathname.substr(matchedPath.length);
21823
+
21824
+ if (remainingPathname) {
21825
+ // Require that the match ends at a path separator, if we didn't match
21826
+ // the full path, so any remaining pathname is a new path segment.
21827
+ if (matchedPath.charAt(matchedPath.length - 1) !== '/') {
21828
+ return null;
21829
+ }
21830
+
21831
+ // If there is a remaining pathname, treat the path separator as part of
21832
+ // the remaining pathname for properly continuing the match.
21833
+ remainingPathname = '/' + remainingPathname;
21834
+ }
21835
+
21836
+ return {
21837
+ remainingPathname: remainingPathname,
21838
+ paramNames: paramNames,
21839
+ paramValues: match.slice(1).map(function (v) {
21840
+ return v && decodeURIComponent(v);
21841
+ })
21842
+ };
21843
+ }
21844
+
21845
+ function getParamNames(pattern) {
21846
+ return compilePattern(pattern).paramNames;
21847
+ }
21848
+
21849
+ function getParams(pattern, pathname) {
21850
+ var match = matchPattern(pattern, pathname);
21851
+ if (!match) {
21852
+ return null;
21853
+ }
21854
+
21855
+ var paramNames = match.paramNames,
21856
+ paramValues = match.paramValues;
21857
+
21858
+ var params = {};
21859
+
21860
+ paramNames.forEach(function (paramName, index) {
21861
+ params[paramName] = paramValues[index];
21862
+ });
21863
+
21864
+ return params;
21865
+ }
21866
+
21867
+ /**
21868
+ * Returns a version of the given pattern with params interpolated. Throws
21869
+ * if there is a dynamic segment of the pattern for which there is no param.
21870
+ */
21871
+ function formatPattern(pattern, params) {
21872
+ params = params || {};
21873
+
21874
+ var _compilePattern3 = compilePattern(pattern),
21875
+ tokens = _compilePattern3.tokens;
21876
+
21877
+ var parenCount = 0,
21878
+ pathname = '',
21879
+ splatIndex = 0,
21880
+ parenHistory = [];
21881
+
21882
+ var token = void 0,
21883
+ paramName = void 0,
21884
+ paramValue = void 0;
21885
+ for (var i = 0, len = tokens.length; i < len; ++i) {
21886
+ token = tokens[i];
21887
+
21888
+ if (token === '*' || token === '**') {
21889
+ paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat;
21890
+
21891
+ !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing splat #%s for path "%s"', splatIndex, pattern) : (0, _invariant2.default)(false) : void 0;
21892
+
21893
+ if (paramValue != null) pathname += encodeURI(paramValue);
21894
+ } else if (token === '(') {
21895
+ parenHistory[parenCount] = '';
21896
+ parenCount += 1;
21897
+ } else if (token === ')') {
21898
+ var parenText = parenHistory.pop();
21899
+ parenCount -= 1;
21900
+
21901
+ if (parenCount) parenHistory[parenCount - 1] += parenText;else pathname += parenText;
21902
+ } else if (token.charAt(0) === ':') {
21903
+ paramName = token.substring(1);
21904
+ paramValue = params[paramName];
21905
+
21906
+ !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing "%s" parameter for path "%s"', paramName, pattern) : (0, _invariant2.default)(false) : void 0;
21907
+
21908
+ if (paramValue == null) {
21909
+ if (parenCount) {
21910
+ parenHistory[parenCount - 1] = '';
21911
+
21912
+ var curTokenIdx = tokens.indexOf(token);
21913
+ var tokensSubset = tokens.slice(curTokenIdx, tokens.length);
21914
+ var nextParenIdx = -1;
21915
+
21916
+ for (var _i = 0; _i < tokensSubset.length; _i++) {
21917
+ if (tokensSubset[_i] == ')') {
21918
+ nextParenIdx = _i;
21919
+ break;
21920
+ }
21921
+ }
21922
+
21923
+ !(nextParenIdx > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Path "%s" is missing end paren at segment "%s"', pattern, tokensSubset.join('')) : (0, _invariant2.default)(false) : void 0;
21924
+
21925
+ // jump to ending paren
21926
+ i = curTokenIdx + nextParenIdx - 1;
21927
+ }
21928
+ } else if (parenCount) parenHistory[parenCount - 1] += encodeURIComponent(paramValue);else pathname += encodeURIComponent(paramValue);
21929
+ } else {
21930
+ if (parenCount) parenHistory[parenCount - 1] += token;else pathname += token;
21931
+ }
21932
+ }
21933
+
21934
+ !(parenCount <= 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Path "%s" is missing end paren', pattern) : (0, _invariant2.default)(false) : void 0;
21935
+
21936
+ return pathname.replace(/\/+/g, '/');
21937
+ }
21938
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21939
+
21940
+ /***/ },
21941
+ /* 177 */
21942
+ /***/ function(module, exports, __webpack_require__) {
21943
+
21944
+ /* WEBPACK VAR INJECTION */(function(process) {/**
21945
+ * Copyright 2013-2015, Facebook, Inc.
21946
+ * All rights reserved.
21947
+ *
21948
+ * This source code is licensed under the BSD-style license found in the
21949
+ * LICENSE file in the root directory of this source tree. An additional grant
21950
+ * of patent rights can be found in the PATENTS file in the same directory.
21951
+ */
21952
+
21953
+ 'use strict';
21954
+
21955
+ /**
21956
+ * Use invariant() to assert state which your program assumes to be true.
21957
+ *
21958
+ * Provide sprintf-style format (only %s is supported) and arguments
21959
+ * to provide information about what broke and what you were
21960
+ * expecting.
21961
+ *
21962
+ * The invariant message will be stripped in production, but the invariant
21963
+ * will remain to ensure logic does not differ in production.
21964
+ */
21965
+
21966
+ var invariant = function(condition, format, a, b, c, d, e, f) {
21967
+ if (process.env.NODE_ENV !== 'production') {
21968
+ if (format === undefined) {
21969
+ throw new Error('invariant requires an error message argument');
21970
+ }
21971
+ }
21972
+
21973
+ if (!condition) {
21974
+ var error;
21975
+ if (format === undefined) {
21976
+ error = new Error(
21977
+ 'Minified exception occurred; use the non-minified dev environment ' +
21978
+ 'for the full error message and additional helpful warnings.'
21979
+ );
21980
+ } else {
21981
+ var args = [a, b, c, d, e, f];
21982
+ var argIndex = 0;
21983
+ error = new Error(
21984
+ format.replace(/%s/g, function() { return args[argIndex++]; })
21985
+ );
21986
+ error.name = 'Invariant Violation';
21987
+ }
21988
+
21989
+ error.framesToPop = 1; // we don't care about invariant's own frame
21990
+ throw error;
21991
+ }
21992
+ };
21993
+
21994
+ module.exports = invariant;
21995
+
21996
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
21997
+
21998
+ /***/ },
21999
+ /* 178 */
22000
+ /***/ function(module, exports, __webpack_require__) {
22001
+
22002
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
22003
+
22004
+ exports.__esModule = true;
22005
+
22006
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
22007
+
22008
+ var _invariant = __webpack_require__(177);
22009
+
22010
+ var _invariant2 = _interopRequireDefault(_invariant);
22011
+
22012
+ var _react = __webpack_require__(2);
22013
+
22014
+ var _react2 = _interopRequireDefault(_react);
22015
+
22016
+ var _createTransitionManager2 = __webpack_require__(179);
22017
+
22018
+ var _createTransitionManager3 = _interopRequireDefault(_createTransitionManager2);
22019
+
22020
+ var _InternalPropTypes = __webpack_require__(189);
22021
+
22022
+ var _RouterContext = __webpack_require__(190);
22023
+
22024
+ var _RouterContext2 = _interopRequireDefault(_RouterContext);
22025
+
22026
+ var _RouteUtils = __webpack_require__(174);
22027
+
22028
+ var _RouterUtils = __webpack_require__(193);
22029
+
22030
+ var _routerWarning = __webpack_require__(180);
22031
+
22032
+ var _routerWarning2 = _interopRequireDefault(_routerWarning);
22033
+
22034
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22035
+
22036
+ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
22037
+
22038
+ var _React$PropTypes = _react2.default.PropTypes,
22039
+ func = _React$PropTypes.func,
22040
+ object = _React$PropTypes.object;
22041
+
22042
+ /**
22043
+ * A <Router> is a high-level API for automatically setting up
22044
+ * a router that renders a <RouterContext> with all the props
22045
+ * it needs each time the URL changes.
22046
+ */
22047
+
22048
+ var Router = _react2.default.createClass({
22049
+ displayName: 'Router',
22050
+
22051
+
22052
+ propTypes: {
22053
+ history: object,
22054
+ children: _InternalPropTypes.routes,
22055
+ routes: _InternalPropTypes.routes, // alias for children
22056
+ render: func,
22057
+ createElement: func,
22058
+ onError: func,
22059
+ onUpdate: func,
22060
+
22061
+ // PRIVATE: For client-side rehydration of server match.
22062
+ matchContext: object
22063
+ },
22064
+
22065
+ getDefaultProps: function getDefaultProps() {
22066
+ return {
22067
+ render: function render(props) {
22068
+ return _react2.default.createElement(_RouterContext2.default, props);
22069
+ }
22070
+ };
22071
+ },
22072
+ getInitialState: function getInitialState() {
22073
+ return {
22074
+ location: null,
22075
+ routes: null,
22076
+ params: null,
22077
+ components: null
22078
+ };
22079
+ },
22080
+ handleError: function handleError(error) {
22081
+ if (this.props.onError) {
22082
+ this.props.onError.call(this, error);
22083
+ } else {
22084
+ // Throw errors by default so we don't silently swallow them!
22085
+ throw error; // This error probably occurred in getChildRoutes or getComponents.
22086
+ }
22087
+ },
22088
+ createRouterObject: function createRouterObject(state) {
22089
+ var matchContext = this.props.matchContext;
22090
+
22091
+ if (matchContext) {
22092
+ return matchContext.router;
22093
+ }
22094
+
22095
+ var history = this.props.history;
22096
+
22097
+ return (0, _RouterUtils.createRouterObject)(history, this.transitionManager, state);
22098
+ },
22099
+ createTransitionManager: function createTransitionManager() {
22100
+ var matchContext = this.props.matchContext;
22101
+
22102
+ if (matchContext) {
22103
+ return matchContext.transitionManager;
22104
+ }
22105
+
22106
+ var history = this.props.history;
22107
+ var _props = this.props,
22108
+ routes = _props.routes,
22109
+ children = _props.children;
22110
+
22111
+
22112
+ !history.getCurrentLocation ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You have provided a history object created with history v2.x or ' + 'earlier. This version of React Router is only compatible with v3 ' + 'history objects. Please upgrade to history v3.x.') : (0, _invariant2.default)(false) : void 0;
22113
+
22114
+ return (0, _createTransitionManager3.default)(history, (0, _RouteUtils.createRoutes)(routes || children));
22115
+ },
22116
+ componentWillMount: function componentWillMount() {
22117
+ var _this = this;
22118
+
22119
+ this.transitionManager = this.createTransitionManager();
22120
+ this.router = this.createRouterObject(this.state);
22121
+
22122
+ this._unlisten = this.transitionManager.listen(function (error, state) {
22123
+ if (error) {
22124
+ _this.handleError(error);
22125
+ } else {
22126
+ // Keep the identity of this.router because of a caveat in ContextUtils:
22127
+ // they only work if the object identity is preserved.
22128
+ (0, _RouterUtils.assignRouterState)(_this.router, state);
22129
+ _this.setState(state, _this.props.onUpdate);
22130
+ }
22131
+ });
22132
+ },
22133
+
22134
+
22135
+ /* istanbul ignore next: sanity check */
22136
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
22137
+ process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(nextProps.history === this.props.history, 'You cannot change <Router history>; it will be ignored') : void 0;
22138
+
22139
+ process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)((nextProps.routes || nextProps.children) === (this.props.routes || this.props.children), 'You cannot change <Router routes>; it will be ignored') : void 0;
22140
+ },
22141
+ componentWillUnmount: function componentWillUnmount() {
22142
+ if (this._unlisten) this._unlisten();
22143
+ },
22144
+ render: function render() {
22145
+ var _state = this.state,
22146
+ location = _state.location,
22147
+ routes = _state.routes,
22148
+ params = _state.params,
22149
+ components = _state.components;
22150
+
22151
+ var _props2 = this.props,
22152
+ createElement = _props2.createElement,
22153
+ render = _props2.render,
22154
+ props = _objectWithoutProperties(_props2, ['createElement', 'render']);
22155
+
22156
+ if (location == null) return null; // Async match
22157
+
22158
+ // Only forward non-Router-specific props to routing context, as those are
22159
+ // the only ones that might be custom routing context props.
22160
+ Object.keys(Router.propTypes).forEach(function (propType) {
22161
+ return delete props[propType];
22162
+ });
22163
+
22164
+ return render(_extends({}, props, {
22165
+ router: this.router,
22166
+ location: location,
22167
+ routes: routes,
22168
+ params: params,
22169
+ components: components,
22170
+ createElement: createElement
22171
+ }));
22172
+ }
22173
+ });
22174
+
22175
+ exports.default = Router;
22176
+ module.exports = exports['default'];
22177
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
22178
+
22179
+ /***/ },
22180
+ /* 179 */
22181
+ /***/ function(module, exports, __webpack_require__) {
22182
+
22183
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
22184
+
22185
+ exports.__esModule = true;
22186
+
22187
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
22188
+
22189
+ exports.default = createTransitionManager;
22190
+
22191
+ var _routerWarning = __webpack_require__(180);
22192
+
22193
+ var _routerWarning2 = _interopRequireDefault(_routerWarning);
22194
+
22195
+ var _computeChangedRoutes2 = __webpack_require__(182);
22196
+
22197
+ var _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2);
22198
+
22199
+ var _TransitionUtils = __webpack_require__(183);
22200
+
22201
+ var _isActive2 = __webpack_require__(185);
22202
+
22203
+ var _isActive3 = _interopRequireDefault(_isActive2);
22204
+
22205
+ var _getComponents = __webpack_require__(186);
22206
+
22207
+ var _getComponents2 = _interopRequireDefault(_getComponents);
22208
+
22209
+ var _matchRoutes = __webpack_require__(188);
22210
+
22211
+ var _matchRoutes2 = _interopRequireDefault(_matchRoutes);
22212
+
22213
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22214
+
22215
+ function hasAnyProperties(object) {
22216
+ for (var p in object) {
22217
+ if (Object.prototype.hasOwnProperty.call(object, p)) return true;
22218
+ }return false;
22219
+ }
22220
+
22221
+ function createTransitionManager(history, routes) {
22222
+ var state = {};
22223
+
22224
+ // Signature should be (location, indexOnly), but needs to support (path,
22225
+ // query, indexOnly)
22226
+ function isActive(location, indexOnly) {
22227
+ location = history.createLocation(location);
22228
+
22229
+ return (0, _isActive3.default)(location, indexOnly, state.location, state.routes, state.params);
22230
+ }
22231
+
22232
+ var partialNextState = void 0;
22233
+
22234
+ function match(location, callback) {
22235
+ if (partialNextState && partialNextState.location === location) {
22236
+ // Continue from where we left off.
22237
+ finishMatch(partialNextState, callback);
22238
+ } else {
22239
+ (0, _matchRoutes2.default)(routes, location, function (error, nextState) {
22240
+ if (error) {
22241
+ callback(error);
22242
+ } else if (nextState) {
22243
+ finishMatch(_extends({}, nextState, { location: location }), callback);
22244
+ } else {
22245
+ callback();
22246
+ }
22247
+ });
22248
+ }
22249
+ }
22250
+
22251
+ function finishMatch(nextState, callback) {
22252
+ var _computeChangedRoutes = (0, _computeChangedRoutes3.default)(state, nextState),
22253
+ leaveRoutes = _computeChangedRoutes.leaveRoutes,
22254
+ changeRoutes = _computeChangedRoutes.changeRoutes,
22255
+ enterRoutes = _computeChangedRoutes.enterRoutes;
22256
+
22257
+ (0, _TransitionUtils.runLeaveHooks)(leaveRoutes, state);
22258
+
22259
+ // Tear down confirmation hooks for left routes
22260
+ leaveRoutes.filter(function (route) {
22261
+ return enterRoutes.indexOf(route) === -1;
22262
+ }).forEach(removeListenBeforeHooksForRoute);
22263
+
22264
+ // change and enter hooks are run in series
22265
+ (0, _TransitionUtils.runChangeHooks)(changeRoutes, state, nextState, function (error, redirectInfo) {
22266
+ if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);
22267
+
22268
+ (0, _TransitionUtils.runEnterHooks)(enterRoutes, nextState, finishEnterHooks);
22269
+ });
22270
+
22271
+ function finishEnterHooks(error, redirectInfo) {
22272
+ if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);
22273
+
22274
+ // TODO: Fetch components after state is updated.
22275
+ (0, _getComponents2.default)(nextState, function (error, components) {
22276
+ if (error) {
22277
+ callback(error);
22278
+ } else {
22279
+ // TODO: Make match a pure function and have some other API
22280
+ // for "match and update state".
22281
+ callback(null, null, state = _extends({}, nextState, { components: components }));
22282
+ }
22283
+ });
22284
+ }
22285
+
22286
+ function handleErrorOrRedirect(error, redirectInfo) {
22287
+ if (error) callback(error);else callback(null, redirectInfo);
22288
+ }
22289
+ }
22290
+
22291
+ var RouteGuid = 1;
22292
+
22293
+ function getRouteID(route) {
22294
+ var create = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
22295
+
22296
+ return route.__id__ || create && (route.__id__ = RouteGuid++);
22297
+ }
22298
+
22299
+ var RouteHooks = Object.create(null);
22300
+
22301
+ function getRouteHooksForRoutes(routes) {
22302
+ return routes.map(function (route) {
22303
+ return RouteHooks[getRouteID(route)];
22304
+ }).filter(function (hook) {
22305
+ return hook;
22306
+ });
22307
+ }
22308
+
22309
+ function transitionHook(location, callback) {
22310
+ (0, _matchRoutes2.default)(routes, location, function (error, nextState) {
22311
+ if (nextState == null) {
22312
+ // TODO: We didn't actually match anything, but hang
22313
+ // onto error/nextState so we don't have to matchRoutes
22314
+ // again in the listen callback.
22315
+ callback();
22316
+ return;
22317
+ }
22318
+
22319
+ // Cache some state here so we don't have to
22320
+ // matchRoutes() again in the listen callback.
22321
+ partialNextState = _extends({}, nextState, { location: location });
22322
+
22323
+ var hooks = getRouteHooksForRoutes((0, _computeChangedRoutes3.default)(state, partialNextState).leaveRoutes);
22324
+
22325
+ var result = void 0;
22326
+ for (var i = 0, len = hooks.length; result == null && i < len; ++i) {
22327
+ // Passing the location arg here indicates to
22328
+ // the user that this is a transition hook.
22329
+ result = hooks[i](location);
22330
+ }
22331
+
22332
+ callback(result);
22333
+ });
22334
+ }
22335
+
22336
+ /* istanbul ignore next: untestable with Karma */
22337
+ function beforeUnloadHook() {
22338
+ // Synchronously check to see if any route hooks want
22339
+ // to prevent the current window/tab from closing.
22340
+ if (state.routes) {
22341
+ var hooks = getRouteHooksForRoutes(state.routes);
22342
+
22343
+ var message = void 0;
22344
+ for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) {
22345
+ // Passing no args indicates to the user that this is a
22346
+ // beforeunload hook. We don't know the next location.
22347
+ message = hooks[i]();
22348
+ }
22349
+
22350
+ return message;
22351
+ }
22352
+ }
22353
+
22354
+ var unlistenBefore = void 0,
22355
+ unlistenBeforeUnload = void 0;
22356
+
22357
+ function removeListenBeforeHooksForRoute(route) {
22358
+ var routeID = getRouteID(route);
22359
+ if (!routeID) {
22360
+ return;
22361
+ }
22362
+
22363
+ delete RouteHooks[routeID];
22364
+
22365
+ if (!hasAnyProperties(RouteHooks)) {
22366
+ // teardown transition & beforeunload hooks
22367
+ if (unlistenBefore) {
22368
+ unlistenBefore();
22369
+ unlistenBefore = null;
22370
+ }
22371
+
22372
+ if (unlistenBeforeUnload) {
22373
+ unlistenBeforeUnload();
22374
+ unlistenBeforeUnload = null;
22375
+ }
22376
+ }
22377
+ }
22378
+
22379
+ /**
22380
+ * Registers the given hook function to run before leaving the given route.
22381
+ *
22382
+ * During a normal transition, the hook function receives the next location
22383
+ * as its only argument and can return either a prompt message (string) to show the user,
22384
+ * to make sure they want to leave the page; or `false`, to prevent the transition.
22385
+ * Any other return value will have no effect.
22386
+ *
22387
+ * During the beforeunload event (in browsers) the hook receives no arguments.
22388
+ * In this case it must return a prompt message to prevent the transition.
22389
+ *
22390
+ * Returns a function that may be used to unbind the listener.
22391
+ */
22392
+ function listenBeforeLeavingRoute(route, hook) {
22393
+ var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks);
22394
+ var routeID = getRouteID(route, true);
22395
+
22396
+ RouteHooks[routeID] = hook;
22397
+
22398
+ if (thereWereNoRouteHooks) {
22399
+ // setup transition & beforeunload hooks
22400
+ unlistenBefore = history.listenBefore(transitionHook);
22401
+
22402
+ if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook);
22403
+ }
22404
+
22405
+ return function () {
22406
+ removeListenBeforeHooksForRoute(route);
22407
+ };
22408
+ }
22409
+
22410
+ /**
22411
+ * This is the API for stateful environments. As the location
22412
+ * changes, we update state and call the listener. We can also
22413
+ * gracefully handle errors and redirects.
22414
+ */
22415
+ function listen(listener) {
22416
+ function historyListener(location) {
22417
+ if (state.location === location) {
22418
+ listener(null, state);
22419
+ } else {
22420
+ match(location, function (error, redirectLocation, nextState) {
22421
+ if (error) {
22422
+ listener(error);
22423
+ } else if (redirectLocation) {
22424
+ history.replace(redirectLocation);
22425
+ } else if (nextState) {
22426
+ listener(null, nextState);
22427
+ } else {
22428
+ process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Location "%s" did not match any routes', location.pathname + location.search + location.hash) : void 0;
22429
+ }
22430
+ });
22431
+ }
22432
+ }
22433
+
22434
+ // TODO: Only use a single history listener. Otherwise we'll end up with
22435
+ // multiple concurrent calls to match.
22436
+
22437
+ // Set up the history listener first in case the initial match redirects.
22438
+ var unsubscribe = history.listen(historyListener);
22439
+
22440
+ if (state.location) {
22441
+ // Picking up on a matchContext.
22442
+ listener(null, state);
22443
+ } else {
22444
+ historyListener(history.getCurrentLocation());
22445
+ }
22446
+
22447
+ return unsubscribe;
22448
+ }
22449
+
22450
+ return {
22451
+ isActive: isActive,
22452
+ match: match,
22453
+ listenBeforeLeavingRoute: listenBeforeLeavingRoute,
22454
+ listen: listen
22455
+ };
22456
+ }
22457
+ module.exports = exports['default'];
22458
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
22459
+
22460
+ /***/ },
22461
+ /* 180 */
22462
+ /***/ function(module, exports, __webpack_require__) {
22463
+
22464
+ 'use strict';
22465
+
22466
+ exports.__esModule = true;
22467
+ exports.default = routerWarning;
22468
+ exports._resetWarned = _resetWarned;
22469
+
22470
+ var _warning = __webpack_require__(181);
22471
+
22472
+ var _warning2 = _interopRequireDefault(_warning);
22473
+
22474
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22475
+
22476
+ var warned = {};
22477
+
22478
+ function routerWarning(falseToWarn, message) {
22479
+ // Only issue deprecation warnings once.
22480
+ if (message.indexOf('deprecated') !== -1) {
22481
+ if (warned[message]) {
22482
+ return;
22483
+ }
22484
+
22485
+ warned[message] = true;
22486
+ }
22487
+
22488
+ message = '[react-router] ' + message;
22489
+
22490
+ for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
22491
+ args[_key - 2] = arguments[_key];
22492
+ }
22493
+
22494
+ _warning2.default.apply(undefined, [falseToWarn, message].concat(args));
22495
+ }
22496
+
22497
+ function _resetWarned() {
22498
+ warned = {};
22499
+ }
22500
+
22501
+ /***/ },
22502
+ /* 181 */
22503
+ /***/ function(module, exports, __webpack_require__) {
22504
+
22505
+ /* WEBPACK VAR INJECTION */(function(process) {/**
22506
+ * Copyright 2014-2015, Facebook, Inc.
22507
+ * All rights reserved.
22508
+ *
22509
+ * This source code is licensed under the BSD-style license found in the
22510
+ * LICENSE file in the root directory of this source tree. An additional grant
22511
+ * of patent rights can be found in the PATENTS file in the same directory.
22512
+ */
22513
+
22514
+ 'use strict';
22515
+
22516
+ /**
22517
+ * Similar to invariant but only logs a warning if the condition is not met.
22518
+ * This can be used to log issues in development environments in critical
22519
+ * paths. Removing the logging code for production environments will keep the
22520
+ * same logic and follow the same code paths.
22521
+ */
22522
+
22523
+ var warning = function() {};
22524
+
22525
+ if (process.env.NODE_ENV !== 'production') {
22526
+ warning = function(condition, format, args) {
22527
+ var len = arguments.length;
22528
+ args = new Array(len > 2 ? len - 2 : 0);
22529
+ for (var key = 2; key < len; key++) {
22530
+ args[key - 2] = arguments[key];
22531
+ }
22532
+ if (format === undefined) {
22533
+ throw new Error(
22534
+ '`warning(condition, format, ...args)` requires a warning ' +
22535
+ 'message argument'
22536
+ );
22537
+ }
22538
+
22539
+ if (format.length < 10 || (/^[s\W]*$/).test(format)) {
22540
+ throw new Error(
22541
+ 'The warning format should be able to uniquely identify this ' +
22542
+ 'warning. Please, use a more descriptive format than: ' + format
22543
+ );
22544
+ }
22545
+
22546
+ if (!condition) {
22547
+ var argIndex = 0;
22548
+ var message = 'Warning: ' +
22549
+ format.replace(/%s/g, function() {
22550
+ return args[argIndex++];
22551
+ });
22552
+ if (typeof console !== 'undefined') {
22553
+ console.error(message);
22554
+ }
22555
+ try {
22556
+ // This error was thrown as a convenience so that you can use this stack
22557
+ // to find the callsite that caused this warning to fire.
22558
+ throw new Error(message);
22559
+ } catch(x) {}
22560
+ }
22561
+ };
22562
+ }
22563
+
22564
+ module.exports = warning;
22565
+
22566
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
22567
+
22568
+ /***/ },
22569
+ /* 182 */
22570
+ /***/ function(module, exports, __webpack_require__) {
22571
+
22572
+ 'use strict';
22573
+
22574
+ exports.__esModule = true;
22575
+
22576
+ var _PatternUtils = __webpack_require__(176);
22577
+
22578
+ function routeParamsChanged(route, prevState, nextState) {
22579
+ if (!route.path) return false;
22580
+
22581
+ var paramNames = (0, _PatternUtils.getParamNames)(route.path);
22582
+
22583
+ return paramNames.some(function (paramName) {
22584
+ return prevState.params[paramName] !== nextState.params[paramName];
22585
+ });
22586
+ }
22587
+
22588
+ /**
22589
+ * Returns an object of { leaveRoutes, changeRoutes, enterRoutes } determined by
22590
+ * the change from prevState to nextState. We leave routes if either
22591
+ * 1) they are not in the next state or 2) they are in the next state
22592
+ * but their params have changed (i.e. /users/123 => /users/456).
22593
+ *
22594
+ * leaveRoutes are ordered starting at the leaf route of the tree
22595
+ * we're leaving up to the common parent route. enterRoutes are ordered
22596
+ * from the top of the tree we're entering down to the leaf route.
22597
+ *
22598
+ * changeRoutes are any routes that didn't leave or enter during
22599
+ * the transition.
22600
+ */
22601
+ function computeChangedRoutes(prevState, nextState) {
22602
+ var prevRoutes = prevState && prevState.routes;
22603
+ var nextRoutes = nextState.routes;
22604
+
22605
+ var leaveRoutes = void 0,
22606
+ changeRoutes = void 0,
22607
+ enterRoutes = void 0;
22608
+ if (prevRoutes) {
22609
+ (function () {
22610
+ var parentIsLeaving = false;
22611
+ leaveRoutes = prevRoutes.filter(function (route) {
22612
+ if (parentIsLeaving) {
22613
+ return true;
22614
+ } else {
22615
+ var isLeaving = nextRoutes.indexOf(route) === -1 || routeParamsChanged(route, prevState, nextState);
22616
+ if (isLeaving) parentIsLeaving = true;
22617
+ return isLeaving;
22618
+ }
22619
+ });
22620
+
22621
+ // onLeave hooks start at the leaf route.
22622
+ leaveRoutes.reverse();
22623
+
22624
+ enterRoutes = [];
22625
+ changeRoutes = [];
22626
+
22627
+ nextRoutes.forEach(function (route) {
22628
+ var isNew = prevRoutes.indexOf(route) === -1;
22629
+ var paramsChanged = leaveRoutes.indexOf(route) !== -1;
22630
+
22631
+ if (isNew || paramsChanged) enterRoutes.push(route);else changeRoutes.push(route);
22632
+ });
22633
+ })();
22634
+ } else {
22635
+ leaveRoutes = [];
22636
+ changeRoutes = [];
22637
+ enterRoutes = nextRoutes;
22638
+ }
22639
+
22640
+ return {
22641
+ leaveRoutes: leaveRoutes,
22642
+ changeRoutes: changeRoutes,
22643
+ enterRoutes: enterRoutes
22644
+ };
22645
+ }
22646
+
22647
+ exports.default = computeChangedRoutes;
22648
+ module.exports = exports['default'];
22649
+
22650
+ /***/ },
22651
+ /* 183 */
22652
+ /***/ function(module, exports, __webpack_require__) {
22653
+
22654
+ 'use strict';
22655
+
22656
+ exports.__esModule = true;
22657
+ exports.runEnterHooks = runEnterHooks;
22658
+ exports.runChangeHooks = runChangeHooks;
22659
+ exports.runLeaveHooks = runLeaveHooks;
22660
+
22661
+ var _AsyncUtils = __webpack_require__(184);
22662
+
22663
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22664
+
22665
+ var PendingHooks = function PendingHooks() {
22666
+ var _this = this;
22667
+
22668
+ _classCallCheck(this, PendingHooks);
22669
+
22670
+ this.hooks = [];
22671
+
22672
+ this.add = function (hook) {
22673
+ return _this.hooks.push(hook);
22674
+ };
22675
+
22676
+ this.remove = function (hook) {
22677
+ return _this.hooks = _this.hooks.filter(function (h) {
22678
+ return h !== hook;
22679
+ });
22680
+ };
22681
+
22682
+ this.has = function (hook) {
22683
+ return _this.hooks.indexOf(hook) !== -1;
22684
+ };
22685
+
22686
+ this.clear = function () {
22687
+ return _this.hooks = [];
22688
+ };
22689
+ };
22690
+
22691
+ var enterHooks = new PendingHooks();
22692
+ var changeHooks = new PendingHooks();
22693
+
22694
+ function createTransitionHook(hook, route, asyncArity, pendingHooks) {
22695
+ var isSync = hook.length < asyncArity;
22696
+
22697
+ var transitionHook = function transitionHook() {
22698
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
22699
+ args[_key] = arguments[_key];
22700
+ }
22701
+
22702
+ hook.apply(route, args);
22703
+
22704
+ if (isSync) {
22705
+ var callback = args[args.length - 1];
22706
+ // Assume hook executes synchronously and
22707
+ // automatically call the callback.
22708
+ callback();
22709
+ }
22710
+ };
22711
+
22712
+ pendingHooks.add(transitionHook);
22713
+
22714
+ return transitionHook;
22715
+ }
22716
+
22717
+ function getEnterHooks(routes) {
22718
+ return routes.reduce(function (hooks, route) {
22719
+ if (route.onEnter) hooks.push(createTransitionHook(route.onEnter, route, 3, enterHooks));
22720
+ return hooks;
22721
+ }, []);
22722
+ }
22723
+
22724
+ function getChangeHooks(routes) {
22725
+ return routes.reduce(function (hooks, route) {
22726
+ if (route.onChange) hooks.push(createTransitionHook(route.onChange, route, 4, changeHooks));
22727
+ return hooks;
22728
+ }, []);
22729
+ }
22730
+
22731
+ function runTransitionHooks(length, iter, callback) {
22732
+ if (!length) {
22733
+ callback();
22734
+ return;
22735
+ }
22736
+
22737
+ var redirectInfo = void 0;
22738
+ function replace(location) {
22739
+ redirectInfo = location;
22740
+ }
22741
+
22742
+ (0, _AsyncUtils.loopAsync)(length, function (index, next, done) {
22743
+ iter(index, replace, function (error) {
22744
+ if (error || redirectInfo) {
22745
+ done(error, redirectInfo); // No need to continue.
22746
+ } else {
22747
+ next();
22748
+ }
22749
+ });
22750
+ }, callback);
22751
+ }
22752
+
22753
+ /**
22754
+ * Runs all onEnter hooks in the given array of routes in order
22755
+ * with onEnter(nextState, replace, callback) and calls
22756
+ * callback(error, redirectInfo) when finished. The first hook
22757
+ * to use replace short-circuits the loop.
22758
+ *
22759
+ * If a hook needs to run asynchronously, it may use the callback
22760
+ * function. However, doing so will cause the transition to pause,
22761
+ * which could lead to a non-responsive UI if the hook is slow.
22762
+ */
22763
+ function runEnterHooks(routes, nextState, callback) {
22764
+ enterHooks.clear();
22765
+ var hooks = getEnterHooks(routes);
22766
+ return runTransitionHooks(hooks.length, function (index, replace, next) {
22767
+ var wrappedNext = function wrappedNext() {
22768
+ if (enterHooks.has(hooks[index])) {
22769
+ next();
22770
+ enterHooks.remove(hooks[index]);
22771
+ }
22772
+ };
22773
+ hooks[index](nextState, replace, wrappedNext);
22774
+ }, callback);
22775
+ }
22776
+
22777
+ /**
22778
+ * Runs all onChange hooks in the given array of routes in order
22779
+ * with onChange(prevState, nextState, replace, callback) and calls
22780
+ * callback(error, redirectInfo) when finished. The first hook
22781
+ * to use replace short-circuits the loop.
22782
+ *
22783
+ * If a hook needs to run asynchronously, it may use the callback
22784
+ * function. However, doing so will cause the transition to pause,
22785
+ * which could lead to a non-responsive UI if the hook is slow.
22786
+ */
22787
+ function runChangeHooks(routes, state, nextState, callback) {
22788
+ changeHooks.clear();
22789
+ var hooks = getChangeHooks(routes);
22790
+ return runTransitionHooks(hooks.length, function (index, replace, next) {
22791
+ var wrappedNext = function wrappedNext() {
22792
+ if (changeHooks.has(hooks[index])) {
22793
+ next();
22794
+ changeHooks.remove(hooks[index]);
22795
+ }
22796
+ };
22797
+ hooks[index](state, nextState, replace, wrappedNext);
22798
+ }, callback);
22799
+ }
22800
+
22801
+ /**
22802
+ * Runs all onLeave hooks in the given array of routes in order.
22803
+ */
22804
+ function runLeaveHooks(routes, prevState) {
22805
+ for (var i = 0, len = routes.length; i < len; ++i) {
22806
+ if (routes[i].onLeave) routes[i].onLeave.call(routes[i], prevState);
22807
+ }
22808
+ }
22809
+
22810
+ /***/ },
22811
+ /* 184 */
22812
+ /***/ function(module, exports) {
22813
+
22814
+ "use strict";
22815
+
22816
+ exports.__esModule = true;
22817
+ exports.loopAsync = loopAsync;
22818
+ exports.mapAsync = mapAsync;
22819
+ function loopAsync(turns, work, callback) {
22820
+ var currentTurn = 0,
22821
+ isDone = false;
22822
+ var sync = false,
22823
+ hasNext = false,
22824
+ doneArgs = void 0;
22825
+
22826
+ function done() {
22827
+ isDone = true;
22828
+ if (sync) {
22829
+ // Iterate instead of recursing if possible.
22830
+ doneArgs = [].concat(Array.prototype.slice.call(arguments));
22831
+ return;
22832
+ }
22833
+
22834
+ callback.apply(this, arguments);
22835
+ }
22836
+
22837
+ function next() {
22838
+ if (isDone) {
22839
+ return;
22840
+ }
22841
+
22842
+ hasNext = true;
22843
+ if (sync) {
22844
+ // Iterate instead of recursing if possible.
22845
+ return;
22846
+ }
22847
+
22848
+ sync = true;
22849
+
22850
+ while (!isDone && currentTurn < turns && hasNext) {
22851
+ hasNext = false;
22852
+ work.call(this, currentTurn++, next, done);
22853
+ }
22854
+
22855
+ sync = false;
22856
+
22857
+ if (isDone) {
22858
+ // This means the loop finished synchronously.
22859
+ callback.apply(this, doneArgs);
22860
+ return;
22861
+ }
22862
+
22863
+ if (currentTurn >= turns && hasNext) {
22864
+ isDone = true;
22865
+ callback();
22866
+ }
22867
+ }
22868
+
22869
+ next();
22870
+ }
22871
+
22872
+ function mapAsync(array, work, callback) {
22873
+ var length = array.length;
22874
+ var values = [];
22875
+
22876
+ if (length === 0) return callback(null, values);
22877
+
22878
+ var isDone = false,
22879
+ doneCount = 0;
22880
+
22881
+ function done(index, error, value) {
22882
+ if (isDone) return;
22883
+
22884
+ if (error) {
22885
+ isDone = true;
22886
+ callback(error);
22887
+ } else {
22888
+ values[index] = value;
22889
+
22890
+ isDone = ++doneCount === length;
22891
+
22892
+ if (isDone) callback(null, values);
22893
+ }
22894
+ }
22895
+
22896
+ array.forEach(function (item, index) {
22897
+ work(item, index, function (error, value) {
22898
+ done(index, error, value);
22899
+ });
22900
+ });
22901
+ }
22902
+
22903
+ /***/ },
22904
+ /* 185 */
22905
+ /***/ function(module, exports, __webpack_require__) {
22906
+
22907
+ 'use strict';
22908
+
22909
+ exports.__esModule = true;
22910
+
22911
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
22912
+
22913
+ exports.default = isActive;
22914
+
22915
+ var _PatternUtils = __webpack_require__(176);
22916
+
22917
+ function deepEqual(a, b) {
22918
+ if (a == b) return true;
22919
+
22920
+ if (a == null || b == null) return false;
22921
+
22922
+ if (Array.isArray(a)) {
22923
+ return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {
22924
+ return deepEqual(item, b[index]);
22925
+ });
22926
+ }
22927
+
22928
+ if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object') {
22929
+ for (var p in a) {
22930
+ if (!Object.prototype.hasOwnProperty.call(a, p)) {
22931
+ continue;
22932
+ }
22933
+
22934
+ if (a[p] === undefined) {
22935
+ if (b[p] !== undefined) {
22936
+ return false;
22937
+ }
22938
+ } else if (!Object.prototype.hasOwnProperty.call(b, p)) {
22939
+ return false;
22940
+ } else if (!deepEqual(a[p], b[p])) {
22941
+ return false;
22942
+ }
22943
+ }
22944
+
22945
+ return true;
22946
+ }
22947
+
22948
+ return String(a) === String(b);
22949
+ }
22950
+
22951
+ /**
22952
+ * Returns true if the current pathname matches the supplied one, net of
22953
+ * leading and trailing slash normalization. This is sufficient for an
22954
+ * indexOnly route match.
22955
+ */
22956
+ function pathIsActive(pathname, currentPathname) {
22957
+ // Normalize leading slash for consistency. Leading slash on pathname has
22958
+ // already been normalized in isActive. See caveat there.
22959
+ if (currentPathname.charAt(0) !== '/') {
22960
+ currentPathname = '/' + currentPathname;
22961
+ }
22962
+
22963
+ // Normalize the end of both path names too. Maybe `/foo/` shouldn't show
22964
+ // `/foo` as active, but in this case, we would already have failed the
22965
+ // match.
22966
+ if (pathname.charAt(pathname.length - 1) !== '/') {
22967
+ pathname += '/';
22968
+ }
22969
+ if (currentPathname.charAt(currentPathname.length - 1) !== '/') {
22970
+ currentPathname += '/';
22971
+ }
22972
+
22973
+ return currentPathname === pathname;
22974
+ }
22975
+
22976
+ /**
22977
+ * Returns true if the given pathname matches the active routes and params.
22978
+ */
22979
+ function routeIsActive(pathname, routes, params) {
22980
+ var remainingPathname = pathname,
22981
+ paramNames = [],
22982
+ paramValues = [];
22983
+
22984
+ // for...of would work here but it's probably slower post-transpilation.
22985
+ for (var i = 0, len = routes.length; i < len; ++i) {
22986
+ var route = routes[i];
22987
+ var pattern = route.path || '';
22988
+
22989
+ if (pattern.charAt(0) === '/') {
22990
+ remainingPathname = pathname;
22991
+ paramNames = [];
22992
+ paramValues = [];
22993
+ }
22994
+
22995
+ if (remainingPathname !== null && pattern) {
22996
+ var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);
22997
+ if (matched) {
22998
+ remainingPathname = matched.remainingPathname;
22999
+ paramNames = [].concat(paramNames, matched.paramNames);
23000
+ paramValues = [].concat(paramValues, matched.paramValues);
23001
+ } else {
23002
+ remainingPathname = null;
23003
+ }
23004
+
23005
+ if (remainingPathname === '') {
23006
+ // We have an exact match on the route. Just check that all the params
23007
+ // match.
23008
+ // FIXME: This doesn't work on repeated params.
23009
+ return paramNames.every(function (paramName, index) {
23010
+ return String(paramValues[index]) === String(params[paramName]);
23011
+ });
23012
+ }
23013
+ }
23014
+ }
23015
+
23016
+ return false;
23017
+ }
23018
+
23019
+ /**
23020
+ * Returns true if all key/value pairs in the given query are
23021
+ * currently active.
23022
+ */
23023
+ function queryIsActive(query, activeQuery) {
23024
+ if (activeQuery == null) return query == null;
23025
+
23026
+ if (query == null) return true;
23027
+
23028
+ return deepEqual(query, activeQuery);
23029
+ }
23030
+
23031
+ /**
23032
+ * Returns true if a <Link> to the given pathname/query combination is
23033
+ * currently active.
23034
+ */
23035
+ function isActive(_ref, indexOnly, currentLocation, routes, params) {
23036
+ var pathname = _ref.pathname,
23037
+ query = _ref.query;
23038
+
23039
+ if (currentLocation == null) return false;
23040
+
23041
+ // TODO: This is a bit ugly. It keeps around support for treating pathnames
23042
+ // without preceding slashes as absolute paths, but possibly also works
23043
+ // around the same quirks with basenames as in matchRoutes.
23044
+ if (pathname.charAt(0) !== '/') {
23045
+ pathname = '/' + pathname;
23046
+ }
23047
+
23048
+ if (!pathIsActive(pathname, currentLocation.pathname)) {
23049
+ // The path check is necessary and sufficient for indexOnly, but otherwise
23050
+ // we still need to check the routes.
23051
+ if (indexOnly || !routeIsActive(pathname, routes, params)) {
23052
+ return false;
23053
+ }
23054
+ }
23055
+
23056
+ return queryIsActive(query, currentLocation.query);
23057
+ }
23058
+ module.exports = exports['default'];
23059
+
23060
+ /***/ },
23061
+ /* 186 */
23062
+ /***/ function(module, exports, __webpack_require__) {
23063
+
23064
+ 'use strict';
23065
+
23066
+ exports.__esModule = true;
23067
+
23068
+ var _AsyncUtils = __webpack_require__(184);
23069
+
23070
+ var _PromiseUtils = __webpack_require__(187);
23071
+
23072
+ function getComponentsForRoute(nextState, route, callback) {
23073
+ if (route.component || route.components) {
23074
+ callback(null, route.component || route.components);
23075
+ return;
23076
+ }
23077
+
23078
+ var getComponent = route.getComponent || route.getComponents;
23079
+ if (getComponent) {
23080
+ var componentReturn = getComponent.call(route, nextState, callback);
23081
+ if ((0, _PromiseUtils.isPromise)(componentReturn)) componentReturn.then(function (component) {
23082
+ return callback(null, component);
23083
+ }, callback);
23084
+ } else {
23085
+ callback();
23086
+ }
23087
+ }
23088
+
23089
+ /**
23090
+ * Asynchronously fetches all components needed for the given router
23091
+ * state and calls callback(error, components) when finished.
23092
+ *
23093
+ * Note: This operation may finish synchronously if no routes have an
23094
+ * asynchronous getComponents method.
23095
+ */
23096
+ function getComponents(nextState, callback) {
23097
+ (0, _AsyncUtils.mapAsync)(nextState.routes, function (route, index, callback) {
23098
+ getComponentsForRoute(nextState, route, callback);
23099
+ }, callback);
23100
+ }
23101
+
23102
+ exports.default = getComponents;
23103
+ module.exports = exports['default'];
23104
+
23105
+ /***/ },
23106
+ /* 187 */
23107
+ /***/ function(module, exports) {
23108
+
23109
+ 'use strict';
23110
+
23111
+ exports.__esModule = true;
23112
+ exports.isPromise = isPromise;
23113
+ function isPromise(obj) {
23114
+ return obj && typeof obj.then === 'function';
23115
+ }
23116
+
23117
+ /***/ },
23118
+ /* 188 */
23119
+ /***/ function(module, exports, __webpack_require__) {
23120
+
23121
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
23122
+
23123
+ exports.__esModule = true;
23124
+
23125
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
23126
+
23127
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
23128
+
23129
+ exports.default = matchRoutes;
23130
+
23131
+ var _AsyncUtils = __webpack_require__(184);
23132
+
23133
+ var _PromiseUtils = __webpack_require__(187);
23134
+
23135
+ var _PatternUtils = __webpack_require__(176);
23136
+
23137
+ var _routerWarning = __webpack_require__(180);
23138
+
23139
+ var _routerWarning2 = _interopRequireDefault(_routerWarning);
23140
+
23141
+ var _RouteUtils = __webpack_require__(174);
23142
+
23143
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23144
+
23145
+ function getChildRoutes(route, location, paramNames, paramValues, callback) {
23146
+ if (route.childRoutes) {
23147
+ return [null, route.childRoutes];
23148
+ }
23149
+ if (!route.getChildRoutes) {
23150
+ return [];
23151
+ }
23152
+
23153
+ var sync = true,
23154
+ result = void 0;
23155
+
23156
+ var partialNextState = {
23157
+ location: location,
23158
+ params: createParams(paramNames, paramValues)
23159
+ };
23160
+
23161
+ var childRoutesReturn = route.getChildRoutes(partialNextState, function (error, childRoutes) {
23162
+ childRoutes = !error && (0, _RouteUtils.createRoutes)(childRoutes);
23163
+ if (sync) {
23164
+ result = [error, childRoutes];
23165
+ return;
23166
+ }
23167
+
23168
+ callback(error, childRoutes);
23169
+ });
23170
+
23171
+ if ((0, _PromiseUtils.isPromise)(childRoutesReturn)) childRoutesReturn.then(function (childRoutes) {
23172
+ return callback(null, (0, _RouteUtils.createRoutes)(childRoutes));
23173
+ }, callback);
23174
+
23175
+ sync = false;
23176
+ return result; // Might be undefined.
23177
+ }
23178
+
23179
+ function getIndexRoute(route, location, paramNames, paramValues, callback) {
23180
+ if (route.indexRoute) {
23181
+ callback(null, route.indexRoute);
23182
+ } else if (route.getIndexRoute) {
23183
+ var partialNextState = {
23184
+ location: location,
23185
+ params: createParams(paramNames, paramValues)
23186
+ };
23187
+
23188
+ var indexRoutesReturn = route.getIndexRoute(partialNextState, function (error, indexRoute) {
23189
+ callback(error, !error && (0, _RouteUtils.createRoutes)(indexRoute)[0]);
23190
+ });
23191
+
23192
+ if ((0, _PromiseUtils.isPromise)(indexRoutesReturn)) indexRoutesReturn.then(function (indexRoute) {
23193
+ return callback(null, (0, _RouteUtils.createRoutes)(indexRoute)[0]);
23194
+ }, callback);
23195
+ } else if (route.childRoutes) {
23196
+ (function () {
23197
+ var pathless = route.childRoutes.filter(function (childRoute) {
23198
+ return !childRoute.path;
23199
+ });
23200
+
23201
+ (0, _AsyncUtils.loopAsync)(pathless.length, function (index, next, done) {
23202
+ getIndexRoute(pathless[index], location, paramNames, paramValues, function (error, indexRoute) {
23203
+ if (error || indexRoute) {
23204
+ var routes = [pathless[index]].concat(Array.isArray(indexRoute) ? indexRoute : [indexRoute]);
23205
+ done(error, routes);
23206
+ } else {
23207
+ next();
23208
+ }
23209
+ });
23210
+ }, function (err, routes) {
23211
+ callback(null, routes);
23212
+ });
23213
+ })();
23214
+ } else {
23215
+ callback();
23216
+ }
23217
+ }
23218
+
23219
+ function assignParams(params, paramNames, paramValues) {
23220
+ return paramNames.reduce(function (params, paramName, index) {
23221
+ var paramValue = paramValues && paramValues[index];
23222
+
23223
+ if (Array.isArray(params[paramName])) {
23224
+ params[paramName].push(paramValue);
23225
+ } else if (paramName in params) {
23226
+ params[paramName] = [params[paramName], paramValue];
23227
+ } else {
23228
+ params[paramName] = paramValue;
23229
+ }
23230
+
23231
+ return params;
23232
+ }, params);
23233
+ }
23234
+
23235
+ function createParams(paramNames, paramValues) {
23236
+ return assignParams({}, paramNames, paramValues);
23237
+ }
23238
+
23239
+ function matchRouteDeep(route, location, remainingPathname, paramNames, paramValues, callback) {
23240
+ var pattern = route.path || '';
23241
+
23242
+ if (pattern.charAt(0) === '/') {
23243
+ remainingPathname = location.pathname;
23244
+ paramNames = [];
23245
+ paramValues = [];
23246
+ }
23247
+
23248
+ // Only try to match the path if the route actually has a pattern, and if
23249
+ // we're not just searching for potential nested absolute paths.
23250
+ if (remainingPathname !== null && pattern) {
23251
+ try {
23252
+ var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);
23253
+ if (matched) {
23254
+ remainingPathname = matched.remainingPathname;
23255
+ paramNames = [].concat(paramNames, matched.paramNames);
23256
+ paramValues = [].concat(paramValues, matched.paramValues);
23257
+ } else {
23258
+ remainingPathname = null;
23259
+ }
23260
+ } catch (error) {
23261
+ callback(error);
23262
+ }
23263
+
23264
+ // By assumption, pattern is non-empty here, which is the prerequisite for
23265
+ // actually terminating a match.
23266
+ if (remainingPathname === '') {
23267
+ var _ret2 = function () {
23268
+ var match = {
23269
+ routes: [route],
23270
+ params: createParams(paramNames, paramValues)
23271
+ };
23272
+
23273
+ getIndexRoute(route, location, paramNames, paramValues, function (error, indexRoute) {
23274
+ if (error) {
23275
+ callback(error);
23276
+ } else {
23277
+ if (Array.isArray(indexRoute)) {
23278
+ var _match$routes;
23279
+
23280
+ process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(indexRoute.every(function (route) {
23281
+ return !route.path;
23282
+ }), 'Index routes should not have paths') : void 0;
23283
+ (_match$routes = match.routes).push.apply(_match$routes, indexRoute);
23284
+ } else if (indexRoute) {
23285
+ process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!indexRoute.path, 'Index routes should not have paths') : void 0;
23286
+ match.routes.push(indexRoute);
23287
+ }
23288
+
23289
+ callback(null, match);
23290
+ }
23291
+ });
23292
+
23293
+ return {
23294
+ v: void 0
23295
+ };
23296
+ }();
23297
+
23298
+ if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
23299
+ }
23300
+ }
23301
+
23302
+ if (remainingPathname != null || route.childRoutes) {
23303
+ // Either a) this route matched at least some of the path or b)
23304
+ // we don't have to load this route's children asynchronously. In
23305
+ // either case continue checking for matches in the subtree.
23306
+ var onChildRoutes = function onChildRoutes(error, childRoutes) {
23307
+ if (error) {
23308
+ callback(error);
23309
+ } else if (childRoutes) {
23310
+ // Check the child routes to see if any of them match.
23311
+ matchRoutes(childRoutes, location, function (error, match) {
23312
+ if (error) {
23313
+ callback(error);
23314
+ } else if (match) {
23315
+ // A child route matched! Augment the match and pass it up the stack.
23316
+ match.routes.unshift(route);
23317
+ callback(null, match);
23318
+ } else {
23319
+ callback();
23320
+ }
23321
+ }, remainingPathname, paramNames, paramValues);
23322
+ } else {
23323
+ callback();
23324
+ }
23325
+ };
23326
+
23327
+ var result = getChildRoutes(route, location, paramNames, paramValues, onChildRoutes);
23328
+ if (result) {
23329
+ onChildRoutes.apply(undefined, result);
23330
+ }
23331
+ } else {
23332
+ callback();
23333
+ }
23334
+ }
23335
+
23336
+ /**
23337
+ * Asynchronously matches the given location to a set of routes and calls
23338
+ * callback(error, state) when finished. The state object will have the
23339
+ * following properties:
23340
+ *
23341
+ * - routes An array of routes that matched, in hierarchical order
23342
+ * - params An object of URL parameters
23343
+ *
23344
+ * Note: This operation may finish synchronously if no routes have an
23345
+ * asynchronous getChildRoutes method.
23346
+ */
23347
+ function matchRoutes(routes, location, callback, remainingPathname) {
23348
+ var paramNames = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
23349
+ var paramValues = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
23350
+
23351
+ if (remainingPathname === undefined) {
23352
+ // TODO: This is a little bit ugly, but it works around a quirk in history
23353
+ // that strips the leading slash from pathnames when using basenames with
23354
+ // trailing slashes.
23355
+ if (location.pathname.charAt(0) !== '/') {
23356
+ location = _extends({}, location, {
23357
+ pathname: '/' + location.pathname
23358
+ });
23359
+ }
23360
+ remainingPathname = location.pathname;
23361
+ }
23362
+
23363
+ (0, _AsyncUtils.loopAsync)(routes.length, function (index, next, done) {
23364
+ matchRouteDeep(routes[index], location, remainingPathname, paramNames, paramValues, function (error, match) {
23365
+ if (error || match) {
23366
+ done(error, match);
23367
+ } else {
23368
+ next();
23369
+ }
23370
+ });
23371
+ }, callback);
23372
+ }
23373
+ module.exports = exports['default'];
23374
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
23375
+
23376
+ /***/ },
23377
+ /* 189 */
23378
+ /***/ function(module, exports, __webpack_require__) {
23379
+
23380
+ 'use strict';
23381
+
23382
+ exports.__esModule = true;
23383
+ exports.routes = exports.route = exports.components = exports.component = exports.history = undefined;
23384
+ exports.falsy = falsy;
23385
+
23386
+ var _react = __webpack_require__(2);
23387
+
23388
+ var func = _react.PropTypes.func,
23389
+ object = _react.PropTypes.object,
23390
+ arrayOf = _react.PropTypes.arrayOf,
23391
+ oneOfType = _react.PropTypes.oneOfType,
23392
+ element = _react.PropTypes.element,
23393
+ shape = _react.PropTypes.shape,
23394
+ string = _react.PropTypes.string;
23395
+ function falsy(props, propName, componentName) {
23396
+ if (props[propName]) return new Error('<' + componentName + '> should not have a "' + propName + '" prop');
23397
+ }
23398
+
23399
+ var history = exports.history = shape({
23400
+ listen: func.isRequired,
23401
+ push: func.isRequired,
23402
+ replace: func.isRequired,
23403
+ go: func.isRequired,
23404
+ goBack: func.isRequired,
23405
+ goForward: func.isRequired
23406
+ });
23407
+
23408
+ var component = exports.component = oneOfType([func, string]);
23409
+ var components = exports.components = oneOfType([component, object]);
23410
+ var route = exports.route = oneOfType([object, element]);
23411
+ var routes = exports.routes = oneOfType([route, arrayOf(route)]);
23412
+
23413
+ /***/ },
23414
+ /* 190 */
23415
+ /***/ function(module, exports, __webpack_require__) {
23416
+
23417
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
23418
+
23419
+ exports.__esModule = true;
23420
+
23421
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
23422
+
23423
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
23424
+
23425
+ var _invariant = __webpack_require__(177);
23426
+
23427
+ var _invariant2 = _interopRequireDefault(_invariant);
23428
+
23429
+ var _react = __webpack_require__(2);
23430
+
23431
+ var _react2 = _interopRequireDefault(_react);
23432
+
23433
+ var _getRouteParams = __webpack_require__(191);
23434
+
23435
+ var _getRouteParams2 = _interopRequireDefault(_getRouteParams);
23436
+
23437
+ var _ContextUtils = __webpack_require__(192);
23438
+
23439
+ var _RouteUtils = __webpack_require__(174);
23440
+
23441
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23442
+
23443
+ var _React$PropTypes = _react2.default.PropTypes,
23444
+ array = _React$PropTypes.array,
23445
+ func = _React$PropTypes.func,
23446
+ object = _React$PropTypes.object;
23447
+
23448
+ /**
23449
+ * A <RouterContext> renders the component tree for a given router state
23450
+ * and sets the history object and the current location in context.
23451
+ */
23452
+
23453
+ var RouterContext = _react2.default.createClass({
23454
+ displayName: 'RouterContext',
23455
+
23456
+
23457
+ mixins: [(0, _ContextUtils.ContextProvider)('router')],
23458
+
23459
+ propTypes: {
23460
+ router: object.isRequired,
23461
+ location: object.isRequired,
23462
+ routes: array.isRequired,
23463
+ params: object.isRequired,
23464
+ components: array.isRequired,
23465
+ createElement: func.isRequired
23466
+ },
23467
+
23468
+ getDefaultProps: function getDefaultProps() {
23469
+ return {
23470
+ createElement: _react2.default.createElement
23471
+ };
23472
+ },
23473
+
23474
+
23475
+ childContextTypes: {
23476
+ router: object.isRequired
23477
+ },
23478
+
23479
+ getChildContext: function getChildContext() {
23480
+ return {
23481
+ router: this.props.router
23482
+ };
23483
+ },
23484
+ createElement: function createElement(component, props) {
23485
+ return component == null ? null : this.props.createElement(component, props);
23486
+ },
23487
+ render: function render() {
23488
+ var _this = this;
23489
+
23490
+ var _props = this.props,
23491
+ location = _props.location,
23492
+ routes = _props.routes,
23493
+ params = _props.params,
23494
+ components = _props.components,
23495
+ router = _props.router;
23496
+
23497
+ var element = null;
23498
+
23499
+ if (components) {
23500
+ element = components.reduceRight(function (element, components, index) {
23501
+ if (components == null) return element; // Don't create new children; use the grandchildren.
23502
+
23503
+ var route = routes[index];
23504
+ var routeParams = (0, _getRouteParams2.default)(route, params);
23505
+ var props = {
23506
+ location: location,
23507
+ params: params,
23508
+ route: route,
23509
+ router: router,
23510
+ routeParams: routeParams,
23511
+ routes: routes
23512
+ };
23513
+
23514
+ if ((0, _RouteUtils.isReactChildren)(element)) {
23515
+ props.children = element;
23516
+ } else if (element) {
23517
+ for (var prop in element) {
23518
+ if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop];
23519
+ }
23520
+ }
23521
+
23522
+ if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') {
23523
+ var elements = {};
23524
+
23525
+ for (var key in components) {
23526
+ if (Object.prototype.hasOwnProperty.call(components, key)) {
23527
+ // Pass through the key as a prop to createElement to allow
23528
+ // custom createElement functions to know which named component
23529
+ // they're rendering, for e.g. matching up to fetched data.
23530
+ elements[key] = _this.createElement(components[key], _extends({
23531
+ key: key }, props));
23532
+ }
23533
+