isomorfeus-react 16.5.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 (63) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -0
  3. data/README.md +620 -0
  4. data/isomorfeus-react.gemspec +23 -0
  5. data/lib/isomorfeus-react.rb +131 -0
  6. data/lib/isomorfeus/config.rb +84 -0
  7. data/lib/isomorfeus/top_level.rb +48 -0
  8. data/lib/isomorfeus/view_helpers.rb +38 -0
  9. data/lib/lucid_app/api.rb +22 -0
  10. data/lib/lucid_app/base.rb +7 -0
  11. data/lib/lucid_app/context.rb +7 -0
  12. data/lib/lucid_app/mixin.rb +17 -0
  13. data/lib/lucid_app/native_component_constructor.rb +70 -0
  14. data/lib/lucid_component/api.rb +97 -0
  15. data/lib/lucid_component/base.rb +7 -0
  16. data/lib/lucid_component/event_handler.rb +17 -0
  17. data/lib/lucid_component/initializer.rb +12 -0
  18. data/lib/lucid_component/mixin.rb +17 -0
  19. data/lib/lucid_component/native_component_constructor.rb +131 -0
  20. data/lib/react.rb +147 -0
  21. data/lib/react/active_support_support.rb +13 -0
  22. data/lib/react/component/api.rb +226 -0
  23. data/lib/react/component/base.rb +9 -0
  24. data/lib/react/component/elements.rb +78 -0
  25. data/lib/react/component/event_handler.rb +19 -0
  26. data/lib/react/component/features.rb +47 -0
  27. data/lib/react/component/history.rb +36 -0
  28. data/lib/react/component/initializer.rb +11 -0
  29. data/lib/react/component/location.rb +15 -0
  30. data/lib/react/component/match.rb +31 -0
  31. data/lib/react/component/mixin.rb +19 -0
  32. data/lib/react/component/native_component_constructor.rb +76 -0
  33. data/lib/react/component/native_component_validate_prop.rb +37 -0
  34. data/lib/react/component/props.rb +49 -0
  35. data/lib/react/component/resolution.rb +71 -0
  36. data/lib/react/component/should_component_update.rb +14 -0
  37. data/lib/react/component/state.rb +52 -0
  38. data/lib/react/component/unsafe_api.rb +33 -0
  39. data/lib/react/context_wrapper.rb +47 -0
  40. data/lib/react/function_component/creator.rb +47 -0
  41. data/lib/react/function_component/resolution.rb +61 -0
  42. data/lib/react/function_component/runner.rb +19 -0
  43. data/lib/react/native_constant_wrapper.rb +34 -0
  44. data/lib/react/pure_component/base.rb +9 -0
  45. data/lib/react/pure_component/mixin.rb +17 -0
  46. data/lib/react/redux_component/api.rb +132 -0
  47. data/lib/react/redux_component/app_store_defaults.rb +38 -0
  48. data/lib/react/redux_component/app_store_proxy.rb +46 -0
  49. data/lib/react/redux_component/base.rb +9 -0
  50. data/lib/react/redux_component/class_store_proxy.rb +50 -0
  51. data/lib/react/redux_component/component_class_store_defaults.rb +40 -0
  52. data/lib/react/redux_component/component_instance_store_defaults.rb +41 -0
  53. data/lib/react/redux_component/initializer.rb +14 -0
  54. data/lib/react/redux_component/instance_store_proxy.rb +50 -0
  55. data/lib/react/redux_component/mixin.rb +18 -0
  56. data/lib/react/redux_component/native_component_constructor.rb +119 -0
  57. data/lib/react/redux_component/reducers.rb +53 -0
  58. data/lib/react/ref.rb +19 -0
  59. data/lib/react/synthetic_event.rb +53 -0
  60. data/lib/react/version.rb +3 -0
  61. data/lib/react_dom.rb +31 -0
  62. data/lib/react_dom_server.rb +17 -0
  63. metadata +167 -0
@@ -0,0 +1,41 @@
1
+ module React
2
+ module ReduxComponent
3
+ class ComponentInstanceStoreDefaults
4
+ def initialize(state, component_name)
5
+ @state = {}
6
+ @component_name = component_name
7
+ end
8
+
9
+ def method_missing(key, *args, &block)
10
+ if `args.length > 0`
11
+ # set initial class state
12
+ key = key.chop if `key.endsWith('=')`
13
+ @state[key] = args[0]
14
+ current_state = Isomorfeus.store.get_state
15
+ if !(current_state[:component_class_state].has_key?(@component_name) &&
16
+ current_state[:component_class_state][@component_name].has_key?(:instance_defaults) &&
17
+ current_state[:component_class_state][@component_name][:instance_defaults].has_key?(key))
18
+ Isomorfeus.store.dispatch(type: 'COMPONENT_CLASS_STATE', class: @component_name, name: :instance_defaults, value: { key => args[0]})
19
+ end
20
+ else
21
+ # get class state
22
+
23
+ # check if we have a component local state value
24
+
25
+ if @state.has_key?(key)
26
+ return @state[key]
27
+ end
28
+ end
29
+ nil
30
+ end
31
+
32
+ def to_h
33
+ @state
34
+ end
35
+
36
+ def to_n
37
+ @state.to_n
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ module React
2
+ module ReduxComponent
3
+ module Initializer
4
+ def initialize(native_component)
5
+ @native = native_component
6
+ @app_store = ::React::ReduxComponent::AppStoreProxy.new(self)
7
+ @class_store = ::React::ReduxComponent::ClassStoreProxy.new(self)
8
+ @props = ::React::Component::Props.new(@native.JS[:props])
9
+ @state = ::React::Component::State.new(@native)
10
+ @store = ::React::ReduxComponent::InstanceStoreProxy.new(self)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,50 @@
1
+ module React
2
+ module ReduxComponent
3
+ class InstanceStoreProxy
4
+
5
+ def initialize(component_instance, access_key = 'state')
6
+ @native_component_instance = component_instance.to_n
7
+ @component_instance = component_instance
8
+ @component_object_id = component_instance.object_id.to_s
9
+ @access_key = access_key
10
+ end
11
+
12
+ def method_missing(key, *args, &block)
13
+ @native_component_instance.JS.register_used_store_path(['component_state', @component_object_id, key])
14
+ if `args.length > 0`
15
+ # set instance state, simply a dispatch
16
+
17
+ action = { type: 'COMPONENT_STATE', object_id: @component_object_id, name: (`key.endsWith('=')` ? key.chop : key), value: args[0] }
18
+ Isomorfeus.store.dispatch(action)
19
+
20
+ else
21
+ # get instance state
22
+
23
+ if @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id] &&
24
+ @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS.hasOwnProperty(key)
25
+ # check if we have a component local state value
26
+ return @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS[key]
27
+ elsif @component_instance.class.default_instance_store_defined && @component_instance.class.store.to_h.has_key?(key)
28
+ # check if a default value was given
29
+ return @component_instance.class.store.to_h[key]
30
+ end
31
+
32
+ # otherwise return nil
33
+ return nil
34
+ end
35
+ end
36
+
37
+ def dispatch(action)
38
+ Isomorfeus.store.dispatch(action)
39
+ end
40
+
41
+ def subscribe(&block)
42
+ Isomorfeus.store.subscribe(&block)
43
+ end
44
+
45
+ def unsubscribe(unsubscriber)
46
+ `unsubscriber()`
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ module React
2
+ module ReduxComponent
3
+ module Mixin
4
+ def self.included(base)
5
+ base.include(::Native::Wrapper)
6
+ base.extend(::React::ReduxComponent::NativeComponentConstructor)
7
+ base.extend(::React::Component::NativeComponentValidateProp)
8
+ base.extend(::React::Component::EventHandler)
9
+ base.include(::React::Component::Elements)
10
+ base.include(::React::Component::API)
11
+ base.include(::React::ReduxComponent::API)
12
+ base.include(::React::ReduxComponent::Initializer)
13
+ base.include(::React::Component::Features)
14
+ base.include(::React::Component::Resolution)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,119 @@
1
+ module React
2
+ module ReduxComponent
3
+ module NativeComponentConstructor
4
+ # for should_component_update we apply ruby semantics for comparing props
5
+ # to do so, we convert the props to ruby hashes and then compare
6
+ # this makes sure, that for example rubys Nil object gets handled properly
7
+ def self.extended(base)
8
+ component_name = base.to_s
9
+ # language=JS
10
+ %x{
11
+ base.react_component = class extends React.Component {
12
+ constructor(props) {
13
+ super(props);
14
+ if (base.$default_state_defined()) {
15
+ this.state = Object.assign({}, base.$state().$to_n(), { isomorfeus_store: Opal.Isomorfeus.store.native.getState() });
16
+ } else {
17
+ this.state = { isomorfeus_store: Opal.Isomorfeus.store.native.getState() };
18
+ };
19
+ if (typeof this.state.isomorfeus_store.component_class_state[#{component_name}] === "undefined") {
20
+ this.state.isomorfeus_store.component_class_state[#{component_name}] = {};
21
+ };
22
+ this.__ruby_instance = base.$new(this);
23
+ this.__object_id = this.__ruby_instance.$object_id().$to_s();
24
+ if (!this.state.isomorfeus_store.component_state) {
25
+ this.state.isomorfeus_store.component_state = {};
26
+ if (base.$default_instance_store_defined()) {
27
+ this.state.isomorfeus_store.component_state[this.__object_id] = base.$store.$to_n();
28
+ } else {
29
+ this.state.isomorfeus_store.component_state[this.__object_id] = {};
30
+ }
31
+ };
32
+ var event_handlers = #{base.event_handlers};
33
+ for (var i = 0; i < event_handlers.length; i++) {
34
+ this[event_handlers[i]] = this[event_handlers[i]].bind(this);
35
+ }
36
+ var defined_refs = #{base.defined_refs};
37
+ for (var ref in defined_refs) {
38
+ if (defined_refs[ref] != null) {
39
+ this[ref] = function(element) {
40
+ #{`this.__ruby_instance`.instance_exec(React::Ref.new(`element`), `defined_refs[ref]`)}
41
+ }
42
+ this[ref] = this[ref].bind(this);
43
+ } else {
44
+ this[ref] = React.createRef();
45
+ }
46
+ }
47
+ this.listener = this.listener.bind(this);
48
+ this.unsubscriber = Opal.Isomorfeus.store.native.subscribe(this.listener);
49
+ }
50
+ data_access() {
51
+ return this.state.isomorfeus_store
52
+ }
53
+ static get displayName() {
54
+ return #{component_name};
55
+ }
56
+ listener() {
57
+ var next_state = Object.assign({}, this.state, { isomorfeus_store: Opal.Isomorfeus.store.native.getState() });
58
+ if (this.scu_for_used_store_paths(this, this.state.isomorfeus_store, next_state.isomorfeus_store)) { this.setState(next_state); }
59
+ }
60
+ register_used_store_path(path) {
61
+ this.used_store_paths.push(path);
62
+ }
63
+ componentWillUnmount() {
64
+ if (typeof this.unsubscriber === "function") { this.unsubscriber(); };
65
+ }
66
+ shouldComponentUpdate(next_props, next_state) {
67
+ var next_props_keys = Object.keys(next_props);
68
+ var this_props_keys = Object.keys(this.props);
69
+ if (next_props_keys.length !== this_props_keys.length) { return true; }
70
+
71
+ var next_state_keys = Object.keys(next_state);
72
+ var this_state_keys = Object.keys(this.state);
73
+ if (next_state_keys.length !== this_state_keys.length) { return true; }
74
+
75
+ for (var property in next_props) {
76
+ if (next_props.hasOwnProperty(property)) {
77
+ if (!this.props.hasOwnProperty(property)) { return true; };
78
+ if (property == "children") { if (next_props.children !== this.props.children) { return true; }}
79
+ else if (typeof next_props[property] !== "undefined" && typeof next_props[property]['$!='] !== "undefined" && typeof this.props[property] !== "undefined" && typeof this.props[property]['$!='] !== "undefined") {
80
+ if (#{ !! (`next_props[property]` != `this.props[property]`) }) { return true; };
81
+ } else if (next_props[property] !== this.props[property]) { return true; };
82
+ }
83
+ }
84
+ for (var property in next_state) {
85
+ if (property === "isomorfeus_store") {
86
+ var res = this.scu_for_used_store_paths(this, this.state.isomorfeus_store, next_state.isomorfeus_store);
87
+ if (res) { return true; }
88
+ }
89
+ if (next_state.hasOwnProperty(property)) {
90
+ if (!this.state.hasOwnProperty(property)) { return true; };
91
+ if (typeof next_state[property]['$!='] !== "undefined" && typeof this.state[property]['$!='] !== "undefined") {
92
+ if (#{ !! (`next_state[property]` != `this.state[property]`) }) { return true };
93
+ } else if (next_state[property] !== this.state[property]) { return true };
94
+ }
95
+ }
96
+ return false;
97
+ }
98
+ scu_for_used_store_paths(self, current_state, next_state) {
99
+ var unique_used_store_paths = self.used_store_paths.filter(function(elem, pos) {
100
+ return (self.used_store_paths.indexOf(elem) === pos);
101
+ });
102
+ var used_length = unique_used_store_paths.length;
103
+ var store_path;
104
+ var current_value;
105
+ var next_value;
106
+ for (var i = 0; i < used_length; i++) {
107
+ store_path = unique_used_store_paths[i];
108
+ current_value = store_path.reduce(function(prev, curr) { return prev && prev[curr]; }, current_state);
109
+ next_value = store_path.reduce(function(prev, curr) { return prev && prev[curr]; }, next_state);
110
+ if (current_value !== next_value) { return true; };
111
+ }
112
+ return false;
113
+ }
114
+ }
115
+ }
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,53 @@
1
+ module React
2
+ module ReduxComponent
3
+ module Reducers
4
+ def self.add_component_reducers_to_store
5
+ component_reducer = Redux.create_reducer do |prev_state, action|
6
+ case action[:type]
7
+ when 'COMPONENT_STATE'
8
+ new_state = {}.merge!(prev_state) # make a copy of state
9
+ new_state[action[:object_id]] = {} unless new_state.has_key?(action[:object_id])
10
+ new_state[action[:object_id]].merge!(action[:name] => action[:value])
11
+ new_state
12
+ when 'INIT'
13
+ new_state = {}
14
+ new_state
15
+ else
16
+ prev_state
17
+ end
18
+ end
19
+
20
+ component_class_reducer = Redux.create_reducer do |prev_state, action|
21
+ case action[:type]
22
+ when 'COMPONENT_CLASS_STATE'
23
+ new_state = {}.merge!(prev_state) # make a copy of state
24
+ new_state[action[:class]] = {} unless new_state.has_key?(action[:class])
25
+ new_state[action[:class]].merge!(action[:name] => action[:value])
26
+ new_state
27
+ when 'INIT'
28
+ new_state = {}
29
+ new_state
30
+ else
31
+ prev_state
32
+ end
33
+ end
34
+
35
+ app_reducer = Redux.create_reducer do |prev_state, action|
36
+ case action[:type]
37
+ when 'APPLICATION_STATE'
38
+ new_state = {}.merge!(prev_state) # make a copy of state
39
+ new_state.merge!(action[:name] => action[:value])
40
+ new_state
41
+ when 'INIT'
42
+ new_state = {}
43
+ new_state
44
+ else
45
+ prev_state
46
+ end
47
+ end
48
+
49
+ Redux::Store.add_reducers(component_state: component_reducer, component_class_state: component_class_reducer, application_state: app_reducer)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,19 @@
1
+ module React
2
+ class Ref
3
+ include ::Native::Wrapper
4
+
5
+ def initialize(native_ref)
6
+ @native = native_ref
7
+ end
8
+
9
+ def current
10
+ %x{
11
+ if (typeof #@native.current.__ruby_instance != undefined) {
12
+ return #@native.current.__ruby_instance;
13
+ } else {
14
+ #@native.current;
15
+ }
16
+ }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ module React
2
+ class SyntheticEvent
3
+ include Native::Wrapper
4
+ # helpers
5
+ def self.native_accessors(*js_names)
6
+ js_names.each do |js_name|
7
+ ruby_name = js_name.underscore
8
+ define_method(ruby_name) do
9
+ @native.JS[js_name]
10
+ end
11
+ end
12
+ end
13
+
14
+ def self.native_boolean_accessors(*js_names)
15
+ js_names.each do |js_name|
16
+ ruby_name = js_name.underscore + '?'
17
+ define_method(ruby_name) do
18
+ @native.JS[js_name]
19
+ end
20
+ end
21
+ end
22
+
23
+ alias_native :get_modifier_state, :getModifierState
24
+ alias_native :is_default_prevented?, :isDefaultPrevented
25
+ alias_native :is_propagation_stopped?, :isPropagationStopped
26
+ alias_native :persist, :persist
27
+ alias_native :prevent_default, :preventDefault
28
+ alias_native :stop_propagation, :stopPropagation
29
+
30
+ native_accessors :animationName, :button, :buttons, :changedTouches, :charCode, :clientX, :clientY, :clipboardData, :data, :deltaMode, :deltaX,
31
+ :deltaY, :deltaZ, :detail, :elapsedTime, :eventPhase, :height, :key, :keyCode, :locale, :location, :pageX, :pageY, :pointerId,
32
+ :pointerType, :pressure, :propertyName, :pseudoElement, :screenX, :screenY, :tangentialPressure, :targetTouches, :tiltX, :tiltY,
33
+ :timestamp, :touches, :twist, :type, :view, :which, :width
34
+
35
+ native_boolean_accessors :altKey, :bubbles, :cancelable, :ctrlKey, :defaultPrevented, :isPrimary, :isTrusted, :metaKey, :repeat, :shiftKey
36
+
37
+ def current_target
38
+ Browser::Event::Target.convert(@native.JS[:currentTarget])
39
+ end
40
+
41
+ def native_event
42
+ Browser::Event.new(@native.JS[:nativeEvent])
43
+ end
44
+
45
+ def related_target
46
+ Browser::Event::Target.convert(@native.JS[:relatedTarget])
47
+ end
48
+
49
+ def target
50
+ Browser::Event::Target.convert(@native.JS[:target])
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module React
2
+ VERSION = '16.5.1'
3
+ end
@@ -0,0 +1,31 @@
1
+ module ReactDOM
2
+ def create_portal
3
+
4
+ end
5
+
6
+ def find_dom_node
7
+
8
+ end
9
+
10
+ def hydrate
11
+
12
+ end
13
+
14
+ def self.render(native_element, container, &block)
15
+ `Opal.React.render_buffer.push([]);`
16
+
17
+ result = if block_given?
18
+ `ReactDOM.render(native_element, container, function() { block.$call() })`
19
+ else
20
+ `ReactDOM.render(native_element, container)`
21
+ end
22
+
23
+ `Opal.React.render_buffer.pop([])`
24
+
25
+ result
26
+ end
27
+
28
+ def unmount_component_at_node
29
+
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ module ReactDOMServer
2
+ def render_to_string
3
+
4
+ end
5
+
6
+ def render_to_static_markup
7
+
8
+ end
9
+
10
+ def render_to_node_stream
11
+
12
+ end
13
+
14
+ def render_to_static_node_stream
15
+
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isomorfeus-react
3
+ version: !ruby/object:Gem::Version
4
+ version: 16.5.1
5
+ platform: ruby
6
+ authors:
7
+ - Jan Biedermann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: opal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.11.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 0.12.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.11.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.12.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: opal-activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.3.1
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.3.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: opal-browser
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.2.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: isomorfeus-redux
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 4.0.0
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 4.0.0
75
+ description: Write React Components in Ruby.
76
+ email:
77
+ - jan@kursator.com
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - Gemfile
83
+ - README.md
84
+ - isomorfeus-react.gemspec
85
+ - lib/isomorfeus-react.rb
86
+ - lib/isomorfeus/config.rb
87
+ - lib/isomorfeus/top_level.rb
88
+ - lib/isomorfeus/view_helpers.rb
89
+ - lib/lucid_app/api.rb
90
+ - lib/lucid_app/base.rb
91
+ - lib/lucid_app/context.rb
92
+ - lib/lucid_app/mixin.rb
93
+ - lib/lucid_app/native_component_constructor.rb
94
+ - lib/lucid_component/api.rb
95
+ - lib/lucid_component/base.rb
96
+ - lib/lucid_component/event_handler.rb
97
+ - lib/lucid_component/initializer.rb
98
+ - lib/lucid_component/mixin.rb
99
+ - lib/lucid_component/native_component_constructor.rb
100
+ - lib/react.rb
101
+ - lib/react/active_support_support.rb
102
+ - lib/react/component/api.rb
103
+ - lib/react/component/base.rb
104
+ - lib/react/component/elements.rb
105
+ - lib/react/component/event_handler.rb
106
+ - lib/react/component/features.rb
107
+ - lib/react/component/history.rb
108
+ - lib/react/component/initializer.rb
109
+ - lib/react/component/location.rb
110
+ - lib/react/component/match.rb
111
+ - lib/react/component/mixin.rb
112
+ - lib/react/component/native_component_constructor.rb
113
+ - lib/react/component/native_component_validate_prop.rb
114
+ - lib/react/component/props.rb
115
+ - lib/react/component/resolution.rb
116
+ - lib/react/component/should_component_update.rb
117
+ - lib/react/component/state.rb
118
+ - lib/react/component/unsafe_api.rb
119
+ - lib/react/context_wrapper.rb
120
+ - lib/react/function_component/creator.rb
121
+ - lib/react/function_component/resolution.rb
122
+ - lib/react/function_component/runner.rb
123
+ - lib/react/native_constant_wrapper.rb
124
+ - lib/react/pure_component/base.rb
125
+ - lib/react/pure_component/mixin.rb
126
+ - lib/react/redux_component/api.rb
127
+ - lib/react/redux_component/app_store_defaults.rb
128
+ - lib/react/redux_component/app_store_proxy.rb
129
+ - lib/react/redux_component/base.rb
130
+ - lib/react/redux_component/class_store_proxy.rb
131
+ - lib/react/redux_component/component_class_store_defaults.rb
132
+ - lib/react/redux_component/component_instance_store_defaults.rb
133
+ - lib/react/redux_component/initializer.rb
134
+ - lib/react/redux_component/instance_store_proxy.rb
135
+ - lib/react/redux_component/mixin.rb
136
+ - lib/react/redux_component/native_component_constructor.rb
137
+ - lib/react/redux_component/reducers.rb
138
+ - lib/react/ref.rb
139
+ - lib/react/synthetic_event.rb
140
+ - lib/react/version.rb
141
+ - lib/react_dom.rb
142
+ - lib/react_dom_server.rb
143
+ homepage: http://isomorfeus.com
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.7.6
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: React for Opal Ruby.
167
+ test_files: []