react-rails 2.4.7 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -10
  3. data/LICENSE +0 -0
  4. data/README.md +304 -41
  5. data/lib/assets/javascripts/JSXTransformer.js +0 -0
  6. data/lib/assets/javascripts/react_ujs.js +1 -507
  7. data/lib/assets/react-source/development/react-server.js +166 -6795
  8. data/lib/assets/react-source/development/react.js +184 -21874
  9. data/lib/assets/react-source/production/react-server.js +2 -22
  10. data/lib/assets/react-source/production/react.js +2 -24
  11. data/lib/generators/react/component_generator.rb +91 -15
  12. data/lib/generators/react/install_generator.rb +22 -4
  13. data/lib/generators/templates/component.es6.jsx +0 -0
  14. data/lib/generators/templates/component.js.jsx +0 -0
  15. data/lib/generators/templates/component.js.jsx.coffee +0 -0
  16. data/lib/generators/templates/component.js.jsx.tsx +36 -0
  17. data/lib/generators/templates/react_server_rendering.rb +0 -0
  18. data/lib/generators/templates/server_rendering.js +0 -0
  19. data/lib/generators/templates/server_rendering_pack.js +3 -3
  20. data/lib/react/jsx/babel_transformer.rb +0 -0
  21. data/lib/react/jsx/jsx_transformer.rb +0 -0
  22. data/lib/react/jsx/processor.rb +0 -0
  23. data/lib/react/jsx/sprockets_strategy.rb +1 -1
  24. data/lib/react/jsx/template.rb +0 -0
  25. data/lib/react/jsx.rb +0 -0
  26. data/lib/react/rails/asset_variant.rb +0 -0
  27. data/lib/react/rails/component_mount.rb +7 -0
  28. data/lib/react/rails/controller_lifecycle.rb +0 -0
  29. data/lib/react/rails/controller_renderer.rb +0 -0
  30. data/lib/react/rails/railtie.rb +1 -0
  31. data/lib/react/rails/test_helper.rb +23 -0
  32. data/lib/react/rails/version.rb +1 -1
  33. data/lib/react/rails/view_helper.rb +0 -0
  34. data/lib/react/rails.rb +0 -0
  35. data/lib/react/server_rendering/bundle_renderer/console_polyfill.js +0 -0
  36. data/lib/react/server_rendering/bundle_renderer/console_replay.js +0 -0
  37. data/lib/react/server_rendering/bundle_renderer/console_reset.js +0 -0
  38. data/lib/react/server_rendering/bundle_renderer/timeout_polyfill.js +0 -0
  39. data/lib/react/server_rendering/bundle_renderer.rb +0 -0
  40. data/lib/react/server_rendering/environment_container.rb +0 -0
  41. data/lib/react/server_rendering/exec_js_renderer.rb +0 -0
  42. data/lib/react/server_rendering/manifest_container.rb +0 -0
  43. data/lib/react/server_rendering/webpacker_manifest_container.rb +4 -4
  44. data/lib/react/server_rendering/yaml_manifest_container.rb +0 -0
  45. data/lib/react/server_rendering.rb +0 -0
  46. data/lib/react-rails.rb +6 -0
  47. data/lib/react.rb +6 -4
  48. metadata +55 -12
@@ -1,507 +1 @@
1
- (function webpackUniversalModuleDefinition(root, factory) {
2
- if(typeof exports === 'object' && typeof module === 'object')
3
- module.exports = factory(require("react"), require("react-dom"), require("react-dom/server"));
4
- else if(typeof define === 'function' && define.amd)
5
- define(["react", "react-dom", "react-dom/server"], factory);
6
- else if(typeof exports === 'object')
7
- exports["ReactRailsUJS"] = factory(require("react"), require("react-dom"), require("react-dom/server"));
8
- else
9
- root["ReactRailsUJS"] = factory(root["React"], root["ReactDOM"], root["ReactDOMServer"]);
10
- })(this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__) {
11
- return /******/ (function(modules) { // webpackBootstrap
12
- /******/ // The module cache
13
- /******/ var installedModules = {};
14
- /******/
15
- /******/ // The require function
16
- /******/ function __webpack_require__(moduleId) {
17
- /******/
18
- /******/ // Check if module is in cache
19
- /******/ if(installedModules[moduleId]) {
20
- /******/ return installedModules[moduleId].exports;
21
- /******/ }
22
- /******/ // Create a new module (and put it into the cache)
23
- /******/ var module = installedModules[moduleId] = {
24
- /******/ i: moduleId,
25
- /******/ l: false,
26
- /******/ exports: {}
27
- /******/ };
28
- /******/
29
- /******/ // Execute the module function
30
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
- /******/
32
- /******/ // Flag the module as loaded
33
- /******/ module.l = true;
34
- /******/
35
- /******/ // Return the exports of the module
36
- /******/ return module.exports;
37
- /******/ }
38
- /******/
39
- /******/
40
- /******/ // expose the modules object (__webpack_modules__)
41
- /******/ __webpack_require__.m = modules;
42
- /******/
43
- /******/ // expose the module cache
44
- /******/ __webpack_require__.c = installedModules;
45
- /******/
46
- /******/ // identity function for calling harmony imports with the correct context
47
- /******/ __webpack_require__.i = function(value) { return value; };
48
- /******/
49
- /******/ // define getter function for harmony exports
50
- /******/ __webpack_require__.d = function(exports, name, getter) {
51
- /******/ if(!__webpack_require__.o(exports, name)) {
52
- /******/ Object.defineProperty(exports, name, {
53
- /******/ configurable: false,
54
- /******/ enumerable: true,
55
- /******/ get: getter
56
- /******/ });
57
- /******/ }
58
- /******/ };
59
- /******/
60
- /******/ // getDefaultExport function for compatibility with non-harmony modules
61
- /******/ __webpack_require__.n = function(module) {
62
- /******/ var getter = module && module.__esModule ?
63
- /******/ function getDefault() { return module['default']; } :
64
- /******/ function getModuleExports() { return module; };
65
- /******/ __webpack_require__.d(getter, 'a', getter);
66
- /******/ return getter;
67
- /******/ };
68
- /******/
69
- /******/ // Object.prototype.hasOwnProperty.call
70
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
71
- /******/
72
- /******/ // __webpack_public_path__
73
- /******/ __webpack_require__.p = "";
74
- /******/
75
- /******/ // Load entry module and return exports
76
- /******/ return __webpack_require__(__webpack_require__.s = 6);
77
- /******/ })
78
- /************************************************************************/
79
- /******/ ([
80
- /* 0 */
81
- /***/ (function(module, exports) {
82
-
83
- // Assume className is simple and can be found at top-level (window).
84
- // Fallback to eval to handle cases like 'My.React.ComponentName'.
85
- // Also, try to gracefully import Babel 6 style default exports
86
- var topLevel = typeof window === "undefined" ? this : window;
87
-
88
- module.exports = function(className) {
89
- var constructor;
90
- // Try to access the class globally first
91
- constructor = topLevel[className];
92
-
93
- // If that didn't work, try eval
94
- if (!constructor) {
95
- constructor = eval(className);
96
- }
97
-
98
- // Lastly, if there is a default attribute try that
99
- if (constructor && constructor['default']) {
100
- constructor = constructor['default'];
101
- }
102
-
103
- return constructor;
104
- }
105
-
106
-
107
- /***/ }),
108
- /* 1 */
109
- /***/ (function(module, exports, __webpack_require__) {
110
-
111
- var nativeEvents = __webpack_require__(7)
112
- var pjaxEvents = __webpack_require__(8)
113
- var turbolinksEvents = __webpack_require__(9)
114
- var turbolinksClassicDeprecatedEvents = __webpack_require__(11)
115
- var turbolinksClassicEvents = __webpack_require__(10)
116
-
117
- // see what things are globally available
118
- // and setup event handlers to those things
119
- module.exports = function(ujs) {
120
- if (ujs.handleEvent) {
121
- // We're calling this a second time -- remove previous handlers
122
- if (typeof Turbolinks !== "undefined" && typeof Turbolinks.EVENTS !== "undefined") {
123
- turbolinksClassicEvents.teardown(ujs);
124
- }
125
- turbolinksEvents.teardown(ujs);
126
- turbolinksClassicDeprecatedEvents.teardown(ujs);
127
- pjaxEvents.teardown(ujs);
128
- nativeEvents.teardown(ujs);
129
- }
130
-
131
- if ('addEventListener' in window) {
132
- ujs.handleEvent = function(eventName, callback) {
133
- document.addEventListener(eventName, callback);
134
- };
135
- ujs.removeEvent = function(eventName, callback) {
136
- document.removeEventListener(eventName, callback);
137
- };
138
- } else {
139
- ujs.handleEvent = function(eventName, callback) {
140
- window.attachEvent(eventName, callback);
141
- };
142
- ujs.removeEvent = function(eventName, callback) {
143
- window.detachEvent(eventName, callback);
144
- };
145
- }
146
-
147
- // Detect which kind of events to set up:
148
- if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
149
- if (typeof Turbolinks.EVENTS !== 'undefined') {
150
- // Turbolinks.EVENTS is in classic version 2.4.0+
151
- turbolinksClassicEvents.setup(ujs)
152
- } else if (typeof Turbolinks.controller !== "undefined") {
153
- // Turbolinks.controller is in version 5+
154
- turbolinksEvents.setup(ujs);
155
- } else {
156
- turbolinksClassicDeprecatedEvents.setup(ujs);
157
- }
158
- } else if (typeof $ !== "undefined" && typeof $.pjax === 'function') {
159
- pjaxEvents.setup(ujs);
160
- } else {
161
- nativeEvents.setup(ujs);
162
- }
163
- }
164
-
165
-
166
- /***/ }),
167
- /* 2 */
168
- /***/ (function(module, exports, __webpack_require__) {
169
-
170
- // Make a function which:
171
- // - First tries to require the name
172
- // - Then falls back to global lookup
173
- var fromGlobal = __webpack_require__(0)
174
- var fromRequireContext = __webpack_require__(12)
175
-
176
- module.exports = function(reqctx) {
177
- var fromCtx = fromRequireContext(reqctx)
178
- return function(className) {
179
- var component;
180
- try {
181
- // `require` will raise an error if this className isn't found:
182
- component = fromCtx(className)
183
- } catch (firstErr) {
184
- // fallback to global:
185
- try {
186
- component = fromGlobal(className)
187
- } catch (secondErr) {
188
- console.error(firstErr)
189
- console.error(secondErr)
190
- }
191
- }
192
- return component
193
- }
194
- }
195
-
196
-
197
- /***/ }),
198
- /* 3 */
199
- /***/ (function(module, exports) {
200
-
201
- module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
202
-
203
- /***/ }),
204
- /* 4 */
205
- /***/ (function(module, exports) {
206
-
207
- module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
208
-
209
- /***/ }),
210
- /* 5 */
211
- /***/ (function(module, exports) {
212
-
213
- module.exports = __WEBPACK_EXTERNAL_MODULE_5__;
214
-
215
- /***/ }),
216
- /* 6 */
217
- /***/ (function(module, exports, __webpack_require__) {
218
-
219
- var React = __webpack_require__(3)
220
- var ReactDOM = __webpack_require__(4)
221
- var ReactDOMServer = __webpack_require__(5)
222
-
223
- var detectEvents = __webpack_require__(1)
224
- var constructorFromGlobal = __webpack_require__(0)
225
- var constructorFromRequireContextWithGlobalFallback = __webpack_require__(2)
226
-
227
- var ReactRailsUJS = {
228
- // This attribute holds the name of component which should be mounted
229
- // example: `data-react-class="MyApp.Items.EditForm"`
230
- CLASS_NAME_ATTR: 'data-react-class',
231
-
232
- // This attribute holds JSON stringified props for initializing the component
233
- // example: `data-react-props="{\"item\": { \"id\": 1, \"name\": \"My Item\"} }"`
234
- PROPS_ATTR: 'data-react-props',
235
-
236
- // This attribute holds which method to use between: ReactDOM.hydrate, ReactDOM.render
237
- RENDER_ATTR: 'data-hydrate',
238
-
239
- // If jQuery is detected, save a reference to it for event handlers
240
- jQuery: (typeof window !== 'undefined') && (typeof window.jQuery !== 'undefined') && window.jQuery,
241
-
242
- // helper method for the mount and unmount methods to find the
243
- // `data-react-class` DOM elements
244
- findDOMNodes: function(searchSelector) {
245
- var classNameAttr = ReactRailsUJS.CLASS_NAME_ATTR
246
- // we will use fully qualified paths as we do not bind the callbacks
247
- var selector, parent;
248
-
249
- switch (typeof searchSelector) {
250
- case 'undefined':
251
- selector = '[' + classNameAttr + ']';
252
- parent = document;
253
- break;
254
- case 'object':
255
- selector = '[' + classNameAttr + ']';
256
- parent = searchSelector;
257
- break;
258
- case 'string':
259
- selector = searchSelector + '[' + classNameAttr + '], ' +
260
- searchSelector + ' [' + classNameAttr + ']';
261
- parent = document;
262
- break
263
- default:
264
- break;
265
- }
266
-
267
- if (ReactRailsUJS.jQuery) {
268
- return ReactRailsUJS.jQuery(selector, parent);
269
- } else {
270
- return parent.querySelectorAll(selector);
271
- }
272
- },
273
-
274
- // Get the constructor for a className (returns a React class)
275
- // Override this function to lookup classes in a custom way,
276
- // the default is ReactRailsUJS.ComponentGlobal
277
- getConstructor: constructorFromGlobal,
278
-
279
- // Given a Webpack `require.context`,
280
- // try finding components with `require`,
281
- // then falling back to global lookup.
282
- useContext: function(requireContext) {
283
- this.getConstructor = constructorFromRequireContextWithGlobalFallback(requireContext)
284
- },
285
-
286
- // Render `componentName` with `props` to a string,
287
- // using the specified `renderFunction` from `react-dom/server`.
288
- serverRender: function(renderFunction, componentName, props) {
289
- var componentClass = this.getConstructor(componentName)
290
- var element = React.createElement(componentClass, props)
291
- return ReactDOMServer[renderFunction](element)
292
- },
293
-
294
- // Within `searchSelector`, find nodes which should have React components
295
- // inside them, and mount them with their props.
296
- mountComponents: function(searchSelector) {
297
- var ujs = ReactRailsUJS
298
- var nodes = ujs.findDOMNodes(searchSelector);
299
-
300
- for (var i = 0; i < nodes.length; ++i) {
301
- var node = nodes[i];
302
- var className = node.getAttribute(ujs.CLASS_NAME_ATTR);
303
- var constructor = ujs.getConstructor(className);
304
- var propsJson = node.getAttribute(ujs.PROPS_ATTR);
305
- var props = propsJson && JSON.parse(propsJson);
306
- var hydrate = node.getAttribute(ujs.RENDER_ATTR);
307
-
308
- if (!constructor) {
309
- var message = "Cannot find component: '" + className + "'"
310
- if (console && console.log) {
311
- console.log("%c[react-rails] %c" + message + " for element", "font-weight: bold", "", node)
312
- }
313
- throw new Error(message + ". Make sure your component is available to render.")
314
- } else {
315
- if (hydrate && typeof ReactDOM.hydrate === "function") {
316
- ReactDOM.hydrate(React.createElement(constructor, props), node);
317
- } else {
318
- ReactDOM.render(React.createElement(constructor, props), node);
319
- }
320
- }
321
- }
322
- },
323
-
324
- // Within `searchSelector`, find nodes which have React components
325
- // inside them, and unmount those components.
326
- unmountComponents: function(searchSelector) {
327
- var nodes = ReactRailsUJS.findDOMNodes(searchSelector);
328
-
329
- for (var i = 0; i < nodes.length; ++i) {
330
- var node = nodes[i];
331
- ReactDOM.unmountComponentAtNode(node);
332
- }
333
- },
334
-
335
- // Check the global context for installed libraries
336
- // and figure out which library to hook up to (pjax, Turbolinks, jQuery)
337
- // This is called on load, but you can call it again if needed
338
- // (It will unmount itself)
339
- detectEvents: function() {
340
- detectEvents(this)
341
- },
342
- }
343
-
344
- // These stable references are so that handlers can be added and removed:
345
- ReactRailsUJS.handleMount = function(e) {
346
- var target = undefined;
347
- if (e && e.target) {
348
- target = e.target;
349
- }
350
- ReactRailsUJS.mountComponents(target);
351
- }
352
- ReactRailsUJS.handleUnmount = function(e) {
353
- var target = undefined;
354
- if (e && e.target) {
355
- target = e.target;
356
- }
357
- ReactRailsUJS.unmountComponents(target);
358
- }
359
-
360
-
361
- if (typeof window !== "undefined") {
362
- // Only setup events for browser (not server-rendering)
363
- ReactRailsUJS.detectEvents()
364
- }
365
-
366
- // It's a bit of a no-no to populate the global namespace,
367
- // but we really need it!
368
- // We need access to this object for server rendering, and
369
- // we can't do a dynamic `require`, so we'll grab it from here:
370
- self.ReactRailsUJS = ReactRailsUJS
371
-
372
- module.exports = ReactRailsUJS
373
-
374
-
375
- /***/ }),
376
- /* 7 */
377
- /***/ (function(module, exports) {
378
-
379
- module.exports = {
380
- // Attach handlers to browser events to mount
381
- // (There are no unmount handlers since the page is destroyed on navigation)
382
- setup: function(ujs) {
383
- if ('addEventListener' in window) {
384
- ujs.handleEvent('DOMContentLoaded', ujs.handleMount);
385
- } else {
386
- // add support to IE8 without jQuery
387
- ujs.handleEvent('onload', ujs.handleMount);
388
- }
389
- },
390
-
391
- teardown: function(ujs) {
392
- ujs.removeEvent('DOMContentLoaded', ujs.handleMount);
393
- ujs.removeEvent('onload', ujs.handleMount);
394
- }
395
- }
396
-
397
-
398
- /***/ }),
399
- /* 8 */
400
- /***/ (function(module, exports) {
401
-
402
- module.exports = {
403
- // pjax support
404
- setup: function(ujs) {
405
- ujs.handleEvent('ready', ujs.handleMount);
406
- ujs.handleEvent('pjax:end', ujs.handleMount);
407
- ujs.handleEvent('pjax:beforeReplace', ujs.handleUnmount);
408
- },
409
-
410
- teardown: function(ujs) {
411
- ujs.removeEvent('ready', ujs.handleMount);
412
- ujs.removeEvent('pjax:end', ujs.handleMount);
413
- ujs.removeEvent('pjax:beforeReplace', ujs.handleUnmount);
414
- },
415
- }
416
-
417
-
418
- /***/ }),
419
- /* 9 */
420
- /***/ (function(module, exports) {
421
-
422
- module.exports = {
423
- // Turbolinks 5+ got rid of named events (?!)
424
- setup: function(ujs) {
425
- ujs.handleEvent('turbolinks:load', ujs.handleMount)
426
- ujs.handleEvent('turbolinks:before-render', ujs.handleUnmount)
427
- },
428
-
429
- teardown: function(ujs) {
430
- ujs.removeEvent('turbolinks:load', ujs.handleMount)
431
- ujs.removeEvent('turbolinks:before-render', ujs.handleUnmount)
432
- },
433
- }
434
-
435
-
436
- /***/ }),
437
- /* 10 */
438
- /***/ (function(module, exports) {
439
-
440
- module.exports = {
441
- // Attach handlers to Turbolinks-Classic events
442
- // for mounting and unmounting components
443
- setup: function(ujs) {
444
- ujs.handleEvent(Turbolinks.EVENTS.CHANGE, ujs.handleMount);
445
- ujs.handleEvent(Turbolinks.EVENTS.BEFORE_UNLOAD, ujs.handleUnmount);
446
- },
447
- teardown: function(ujs) {
448
- ujs.removeEvent(Turbolinks.EVENTS.CHANGE, ujs.handleMount);
449
- ujs.removeEvent(Turbolinks.EVENTS.BEFORE_UNLOAD, ujs.handleUnmount);
450
- }
451
- }
452
-
453
-
454
- /***/ }),
455
- /* 11 */
456
- /***/ (function(module, exports) {
457
-
458
- module.exports = {
459
- // Before Turbolinks 2.4.0, Turbolinks didn't
460
- // have named events and didn't have a before-unload event.
461
- // Also, it didn't work with the Turbolinks cache, see
462
- // https://github.com/reactjs/react-rails/issues/87
463
- setup: function(ujs) {
464
- Turbolinks.pagesCached(0)
465
- ujs.handleEvent('page:change', ujs.handleMount);
466
- ujs.handleEvent('page:receive', ujs.handleUnmount);
467
- },
468
- teardown: function(ujs) {
469
- ujs.removeEvent('page:change', ujs.handleMount);
470
- ujs.removeEvent('page:receive', ujs.handleUnmount);
471
- }
472
- }
473
-
474
-
475
- /***/ }),
476
- /* 12 */
477
- /***/ (function(module, exports) {
478
-
479
- // Load React components by requiring them from "components/", for example:
480
- //
481
- // - "pages/index" -> `require("components/pages/index")`
482
- // - "pages/show.Header" -> `require("components/pages/show").Header`
483
- // - "pages/show.Body.Content" -> `require("components/pages/show").Body.Content`
484
- //
485
- module.exports = function(reqctx) {
486
- return function(className) {
487
- var parts = className.split(".")
488
- var filename = parts.shift()
489
- var keys = parts
490
- // Load the module:
491
- var component = reqctx("./" + filename)
492
- // Then access each key:
493
- keys.forEach(function(k) {
494
- component = component[k]
495
- })
496
- // support `export default`
497
- if (component.__esModule) {
498
- component = component["default"]
499
- }
500
- return component
501
- }
502
- }
503
-
504
-
505
- /***/ })
506
- /******/ ]);
507
- });
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom"),require("react-dom/server")):"function"==typeof define&&define.amd?define(["react","react-dom","react-dom/server"],t):"object"==typeof exports?exports.ReactRailsUJS=t(require("react"),require("react-dom"),require("react-dom/server")):e.ReactRailsUJS=t(e.React,e.ReactDOM,e.ReactDOMServer)}(self,((__WEBPACK_EXTERNAL_MODULE__787__,__WEBPACK_EXTERNAL_MODULE__156__,__WEBPACK_EXTERNAL_MODULE__997__)=>(()=>{var __webpack_modules__={10:(e,t,n)=>{var o=n(787),r=n(156),a=n(997),u=n(230),c=n(121),d=n(831),i=n(37),_=n(39);const{supportsHydration:s,reactHydrate:l,createReactRootLike:p}=n(198);var v={CLASS_NAME_ATTR:"data-react-class",PROPS_ATTR:"data-react-props",RENDER_ATTR:"data-hydrate",CACHE_ID_ATTR:"data-react-cache-id",TURBOLINKS_PERMANENT_ATTR:"data-turbolinks-permanent",jQuery:"undefined"!=typeof window&&void 0!==window.jQuery&&window.jQuery,components:{},findDOMNodes:function(e){var t,n,o=v.CLASS_NAME_ATTR;switch(typeof e){case"undefined":t="["+o+"]",n=document;break;case"object":t="["+o+"]",n=e;break;case"string":t=e+"["+o+"], "+e+" ["+o+"]",n=document}return v.jQuery?v.jQuery(t,n):n.querySelectorAll(t)},getConstructor:c,constructorFromGlobal:c,constructorFromRequireContext:d,constructorFromRequireContextWithGlobalFallback:i,useContext:function(e){this.getConstructor=i(e)},useContexts:function(e){this.getConstructor=_(e)},serverRender:function(e,t,n){var r=this.getConstructor(t),u=o.createElement(r,n);return a[e](u)},mountComponents:function(e){for(var t=v,n=t.findDOMNodes(e),r=0;r<n.length;++r){var a=n[r],u=a.getAttribute(t.CLASS_NAME_ATTR),c=t.getConstructor(u),d=a.getAttribute(t.PROPS_ATTR),i=d&&JSON.parse(d),_=a.getAttribute(t.RENDER_ATTR),f=a.getAttribute(t.CACHE_ID_ATTR),E=a.hasAttribute(t.TURBOLINKS_PERMANENT_ATTR);if(!c){var h="Cannot find component: '"+u+"'";throw console&&console.log&&console.log("%c[react-rails] %c"+h+" for element","font-weight: bold","",a),new Error(h+". Make sure your component is available to render.")}var m=this.components[f];void 0===m&&(m=o.createElement(c,i),E&&(this.components[f]=m)),m=_&&s()?l(a,m):p(a).render(m)}},unmountComponents:function(e){for(var t=v.findDOMNodes(e),n=0;n<t.length;++n){var o=t[n];r.unmountComponentAtNode(o)}},detectEvents:function(){u(this)},handleMount:function(e){var t=void 0;e&&e.target&&(t=e.target),v.mountComponents(t)},handleUnmount:function(e){var t=void 0;e&&e.target&&(t=e.target),v.unmountComponents(t)}};"undefined"!=typeof window&&v.detectEvents(),self.ReactRailsUJS=v,e.exports=v},230:(e,t,n)=>{var o=n(528),r=n(921),a=n(228),u=n(724),c=n(968);e.exports=function(e){e.handleEvent&&("undefined"!=typeof Turbolinks&&void 0!==Turbolinks.EVENTS&&c.teardown(e),a.teardown(e),u.teardown(e),r.teardown(e),o.teardown(e)),"addEventListener"in window?(e.handleEvent=function(e,t){document.addEventListener(e,t)},e.removeEvent=function(e,t){document.removeEventListener(e,t)}):(e.handleEvent=function(e,t){window.attachEvent(e,t)},e.removeEvent=function(e,t){window.detachEvent(e,t)}),"undefined"!=typeof Turbolinks&&Turbolinks.supported?void 0!==Turbolinks.EVENTS?c.setup(e):void 0!==Turbolinks.controller?a.setup(e):u.setup(e):"undefined"!=typeof $&&"function"==typeof $.pjax?r.setup(e):o.setup(e)}},528:e=>{e.exports={setup:function(e){"addEventListener"in window?e.handleEvent("DOMContentLoaded",e.handleMount):e.handleEvent("onload",e.handleMount)},teardown:function(e){e.removeEvent("DOMContentLoaded",e.handleMount),e.removeEvent("onload",e.handleMount)}}},921:e=>{e.exports={setup:function(e){e.handleEvent("ready",e.handleMount),e.handleEvent("pjax:end",e.handleMount),e.handleEvent("pjax:beforeReplace",e.handleUnmount)},teardown:function(e){e.removeEvent("ready",e.handleMount),e.removeEvent("pjax:end",e.handleMount),e.removeEvent("pjax:beforeReplace",e.handleUnmount)}}},228:e=>{e.exports={setup:function(e){e.handleEvent("turbolinks:load",e.handleMount)},teardown:function(e){e.removeEvent("turbolinks:load",e.handleMount)}}},968:e=>{e.exports={setup:function(e){e.handleEvent(Turbolinks.EVENTS.CHANGE,e.handleMount),e.handleEvent(Turbolinks.EVENTS.BEFORE_UNLOAD,e.handleUnmount)},teardown:function(e){e.removeEvent(Turbolinks.EVENTS.CHANGE,e.handleMount),e.removeEvent(Turbolinks.EVENTS.BEFORE_UNLOAD,e.handleUnmount)}}},724:e=>{e.exports={setup:function(e){Turbolinks.pagesCached(0),e.handleEvent("page:change",e.handleMount),e.handleEvent("page:receive",e.handleUnmount)},teardown:function(e){e.removeEvent("page:change",e.handleMount),e.removeEvent("page:receive",e.handleUnmount)}}},121:function(module){var topLevel="undefined"==typeof window?this:window;module.exports=function(className){var constructor;return constructor=topLevel[className],constructor||(constructor=eval(className)),constructor&&constructor.default&&(constructor=constructor.default),constructor}},831:e=>{e.exports=function(e){return function(t){var n=t.split("."),o=n.shift(),r=n,a=e("./"+o);return r.forEach((function(e){a=a[e]})),a.__esModule&&(a=a.default),a}}},37:(e,t,n)=>{var o=n(121),r=n(831);e.exports=function(e){var t=r(e);return function(e){var n;try{n=t(e)}catch(t){try{n=o(e)}catch(e){console.error(t),console.error(e)}}return n}}},39:(e,t,n)=>{var o=n(121),r=n(831);e.exports=function(e){var t=e.map((e=>r(e)));return function(e){var n;try{var r,a,u=0;do{r=t[u];try{n=r(e)}catch(e){a||(a=e)}u+=1}while(u<t.length);if(!n)throw a}catch(a){try{n=o(e)}catch(e){console.error(a),console.error(e)}}return n}}},198:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createReactRootLike:()=>i,reactHydrate:()=>d,supportsHydration:()=>c});var o=n(156),r=n.n(o);let a=r();if(void 0!==r()&&(r().version.split(".")[0]||16)>=18)try{a=n(Object(function(){var e=new Error("Cannot find module 'react-dom/client'");throw e.code="MODULE_NOT_FOUND",e}()))}catch(e){a=r()}const u=a;function c(){return"function"==typeof u.hydrate||"function"==typeof u.hydrateRoot}function d(e,t){return"function"==typeof u.hydrateRoot?u.hydrateRoot(e,t):u.hydrate(t,e)}function i(e){return u.createRoot?u.createRoot(e):function(e){return{render:t=>u.render(t,e)}}(e)}},787:e=>{"use strict";e.exports=__WEBPACK_EXTERNAL_MODULE__787__},156:e=>{"use strict";e.exports=__WEBPACK_EXTERNAL_MODULE__156__},997:e=>{"use strict";e.exports=__WEBPACK_EXTERNAL_MODULE__997__}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(10);return __webpack_exports__})()));