isomorfeus-preact 10.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +62 -0
  3. data/lib/browser/delegate_native.rb +70 -0
  4. data/lib/browser/element.rb +176 -0
  5. data/lib/browser/element/canvas.rb +17 -0
  6. data/lib/browser/element/media.rb +78 -0
  7. data/lib/browser/event.rb +92 -0
  8. data/lib/browser/event_target.rb +39 -0
  9. data/lib/browser/file_list.rb +125 -0
  10. data/lib/browser/iterable.rb +15 -0
  11. data/lib/isomorfeus-preact.rb +109 -0
  12. data/lib/isomorfeus/preact/config.rb +189 -0
  13. data/lib/isomorfeus/preact/memcached_component_cache.rb +19 -0
  14. data/lib/isomorfeus/preact/redis_component_cache.rb +19 -0
  15. data/lib/isomorfeus/preact/thread_local_component_cache.rb +17 -0
  16. data/lib/isomorfeus/preact_view_helper.rb +188 -0
  17. data/lib/isomorfeus/props/validate_hash_proxy.rb +186 -0
  18. data/lib/isomorfeus/props/validator.rb +159 -0
  19. data/lib/isomorfeus/top_level.rb +101 -0
  20. data/lib/isomorfeus/top_level_ssr.rb +27 -0
  21. data/lib/isomorfeus_preact/lucid_app/api.rb +22 -0
  22. data/lib/isomorfeus_preact/lucid_app/base.rb +7 -0
  23. data/lib/isomorfeus_preact/lucid_app/mixin.rb +16 -0
  24. data/lib/isomorfeus_preact/lucid_app/native_component_constructor.rb +91 -0
  25. data/lib/isomorfeus_preact/lucid_component/api.rb +68 -0
  26. data/lib/isomorfeus_preact/lucid_component/app_store_proxy.rb +37 -0
  27. data/lib/isomorfeus_preact/lucid_component/base.rb +7 -0
  28. data/lib/isomorfeus_preact/lucid_component/class_store_proxy.rb +44 -0
  29. data/lib/isomorfeus_preact/lucid_component/initializer.rb +14 -0
  30. data/lib/isomorfeus_preact/lucid_component/instance_store_proxy.rb +44 -0
  31. data/lib/isomorfeus_preact/lucid_component/mixin.rb +15 -0
  32. data/lib/isomorfeus_preact/lucid_component/native_component_constructor.rb +84 -0
  33. data/lib/isomorfeus_preact/lucid_component/styles_api.rb +31 -0
  34. data/lib/isomorfeus_preact/lucid_component/styles_wrapper.rb +40 -0
  35. data/lib/isomorfeus_preact/lucid_func/base.rb +7 -0
  36. data/lib/isomorfeus_preact/lucid_func/initializer.rb +11 -0
  37. data/lib/isomorfeus_preact/lucid_func/mixin.rb +12 -0
  38. data/lib/isomorfeus_preact/lucid_func/native_component_constructor.rb +55 -0
  39. data/lib/isomorfeus_preact/preact/function_component/api.rb +123 -0
  40. data/lib/isomorfeus_preact/preact/function_component/base.rb +9 -0
  41. data/lib/isomorfeus_preact/preact/function_component/initializer.rb +10 -0
  42. data/lib/isomorfeus_preact/preact/function_component/mixin.rb +12 -0
  43. data/lib/isomorfeus_preact/preact/function_component/native_component_constructor.rb +48 -0
  44. data/lib/lucid_app/context.rb +24 -0
  45. data/lib/lucid_prop_declaration/mixin.rb +126 -0
  46. data/lib/preact.rb +309 -0
  47. data/lib/preact/component/api.rb +124 -0
  48. data/lib/preact/component/base.rb +9 -0
  49. data/lib/preact/component/callbacks.rb +102 -0
  50. data/lib/preact/component/elements.rb +64 -0
  51. data/lib/preact/component/initializer.rb +11 -0
  52. data/lib/preact/component/mixin.rb +15 -0
  53. data/lib/preact/component/native_component_constructor.rb +65 -0
  54. data/lib/preact/component/params.rb +18 -0
  55. data/lib/preact/component/props.rb +55 -0
  56. data/lib/preact/component/resolution.rb +97 -0
  57. data/lib/preact/component/state.rb +58 -0
  58. data/lib/preact/context_wrapper.rb +46 -0
  59. data/lib/preact/native_constant_wrapper.rb +29 -0
  60. data/lib/preact/options.rb +98 -0
  61. data/lib/preact/ref.rb +17 -0
  62. data/lib/preact/version.rb +3 -0
  63. metadata +301 -0
@@ -0,0 +1,97 @@
1
+ module Preact
2
+ module Component
3
+ module Resolution
4
+ def self.included(base)
5
+ base.instance_exec do
6
+ unless method_defined?(:_preact_component_class_resolution_original_const_missing)
7
+ alias _preact_component_class_resolution_original_const_missing const_missing
8
+ end
9
+
10
+ def const_missing(const_name)
11
+ %x{
12
+ if (typeof Opal.global[const_name] !== "undefined" && (const_name[0] === const_name[0].toUpperCase())) {
13
+ var new_const = #{Preact::NativeConstantWrapper.new(`Opal.global[const_name]`, const_name)};
14
+ new_const.preact_component = Opal.global[const_name];
15
+ #{Object.const_set(const_name, `new_const`)};
16
+ return new_const;
17
+ } else {
18
+ return #{_preact_component_class_resolution_original_const_missing(const_name)};
19
+ }
20
+ }
21
+ end
22
+
23
+ # this is required for autoloading support, as the component may not be loaded and so its method is not registered.
24
+ # must load it first, done by const_get, and next time the method will be there.
25
+ unless method_defined?(:_preact_component_class_resolution_original_method_missing)
26
+ alias _preact_component_class_resolution_original_method_missing method_missing
27
+ end
28
+
29
+ def method_missing(component_name, *args, &block)
30
+ # check for ruby component and render it
31
+ # otherwise pass on method missing
32
+ %x{
33
+ var constant;
34
+ if (typeof self.iso_preact_const_cache === 'undefined') { self.iso_preact_const_cache = {}; }
35
+ try {
36
+ if (typeof self.iso_preact_const_cache[component_name] !== 'undefined') {
37
+ constant = self.iso_preact_const_cache[component_name]
38
+ } else {
39
+ constant = self.$const_get(component_name);
40
+ self.iso_preact_const_cache[component_name] = constant;
41
+ }
42
+ if (typeof constant.preact_component !== 'undefined') {
43
+ return Opal.Preact.internal_prepare_args_and_render(constant.preact_component, args, block);
44
+ }
45
+ } catch(err) { }
46
+ return #{_preact_component_class_resolution_original_method_missing(component_name, *args, block)};
47
+ }
48
+ end
49
+ end
50
+ end
51
+
52
+ unless method_defined?(:_preact_component_resolution_original_method_missing)
53
+ alias _preact_component_resolution_original_method_missing method_missing
54
+ end
55
+
56
+ def method_missing(component_name, *args, &block)
57
+ # Further on it must check for modules, because $const_get does not take
58
+ # the full nesting into account, as usually its called via $$ with the
59
+ # nesting provided by the compiler.
60
+ %x{
61
+ var constant;
62
+ if (typeof self.iso_preact_const_cache === 'undefined') { self.iso_preact_const_cache = {}; }
63
+
64
+ if (typeof self.iso_preact_const_cache[component_name] !== 'undefined') {
65
+ constant = self.iso_preact_const_cache[component_name]
66
+ } else if (typeof self.$$is_a_module !== 'undefined') {
67
+ try {
68
+ constant = self.$const_get(component_name);
69
+ self.iso_preact_const_cache[component_name] = constant;
70
+ } catch(err) { }
71
+ } else {
72
+ let sc = self.$class();
73
+ try {
74
+ constant = sc.$const_get(component_name);
75
+ self.iso_preact_const_cache[component_name] = constant;
76
+ } catch(err) {
77
+ var module_names = sc.$to_s().split("::");
78
+ var module_name;
79
+ for (var i = module_names.length - 1; i > 0; i--) {
80
+ module_name = module_names.slice(0, i).join('::');
81
+ try {
82
+ constant = sc.$const_get(module_name).$const_get(component_name, false);
83
+ self.iso_preact_const_cache[component_name] = constant;
84
+ break;
85
+ } catch(err) { }
86
+ }
87
+ }
88
+ }
89
+ if (constant && typeof constant.preact_component !== 'undefined') {
90
+ return Opal.Preact.internal_prepare_args_and_render(constant.preact_component, args, block);
91
+ }
92
+ return #{_preact_component_resolution_original_method_missing(component_name, *args, block)};
93
+ }
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,58 @@
1
+ module Preact
2
+ module Component
3
+ class State
4
+ include ::Native::Wrapper
5
+
6
+ def initialize(native)
7
+ @native = native
8
+ end
9
+
10
+ def method_missing(key, *args, &block)
11
+ if `args.length > 0`
12
+ new_state = `{}`
13
+ new_state.JS[(`key.endsWith('=')` ? key.chop : key)] = args[0]
14
+ if block_given?
15
+ @native.JS.setState(new_state, `function() { block.$call(); }`)
16
+ else
17
+ @native.JS.setState(new_state, `null`)
18
+ end
19
+ else
20
+ %x{
21
+ if (typeof #@native.state[key] === 'undefined') { return nil; }
22
+ return #@native.state[key];
23
+ }
24
+ end
25
+ end
26
+
27
+ def set_state(updater, &block)
28
+ new_state = `{}`
29
+ updater.each do |key, value|
30
+ new_state.JS[key] = value
31
+ end
32
+ if block_given?
33
+ @native.JS.setState(new_state, `function() { block.$call(); }`)
34
+ else
35
+ @native.JS.setState(new_state, `null`)
36
+ end
37
+ end
38
+
39
+ def size
40
+ `Object.keys(#@native.state).length`;
41
+ end
42
+
43
+ def to_n
44
+ %x{
45
+ var new_native = {};
46
+ for (var key in #@native.state) {
47
+ if (typeof #@native.state[key].$to_n !== "undefined") {
48
+ new_native[key] = #@native.state[key].$to_n();
49
+ } else {
50
+ new_native[key] = #@native.state[key];
51
+ }
52
+ }
53
+ return new_native;
54
+ }
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,46 @@
1
+ module Preact
2
+ class ContextWrapper
3
+ include ::Native::Wrapper
4
+
5
+ def initialize(native)
6
+ @native = native
7
+ end
8
+
9
+ def is_wrapped_context
10
+ true
11
+ end
12
+
13
+ def Consumer(*args, &block)
14
+ %x{
15
+ let operabu = Opal.Preact.render_buffer;
16
+ let props = null;
17
+
18
+ if (args.length > 0) { props = Opal.Preact.to_native_preact_props(args[0]); }
19
+
20
+ let preact_element = Opal.global.Preact.createElement(this.native.Consumer, props, function(value) {
21
+ let children = null;
22
+ if (block !== nil) {
23
+ operabu.push([]);
24
+ // console.log("consumer pushed", operabu, operabu.toString());
25
+ let block_result = block.$call(value);
26
+ if (block_result && block_result !== nil) { Opal.Preact.render_block_result(block_result); }
27
+ // console.log("consumer popping", operabu, operabu.toString());
28
+ children = operabu.pop();
29
+ if (children.length === 1) { children = children[0]; }
30
+ else if (children.length === 0) { children = null; }
31
+ }
32
+ return children;
33
+ });
34
+ operabu[operabu.length - 1].push(preact_element);
35
+ }
36
+ end
37
+
38
+ def Provider(*args, &block)
39
+ %x{
40
+ var props = null;
41
+ if (args.length > 0) { props = Opal.Preact.to_native_preact_props(args[0]); }
42
+ Opal.Preact.internal_render(this.native.Provider, props, null, block);
43
+ }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,29 @@
1
+ module Preact
2
+ class NativeConstantWrapper
3
+ include ::Native::Wrapper
4
+
5
+ def initialize(native, const_name)
6
+ @native = native
7
+ @const_name = const_name
8
+ end
9
+
10
+ def method_missing(name, *args, &block)
11
+ %x{
12
+ if (name[0] === 'u' && name[1] === 's' && name[2] === 'e') {
13
+ if (name.indexOf('_') > 0) { name = Opal.Preact.lower_camelize(name); }
14
+ return #@native[name].call(this, args);
15
+ }
16
+ var component = null;
17
+ var component_type = typeof #@native[name];
18
+ if (component_type === "function" || component_type === "object") {
19
+ component = #@native[name];
20
+ }
21
+ if (component) {
22
+ return Opal.Preact.internal_prepare_args_and_render(component, args, block);
23
+ } else {
24
+ #{Isomorfeus.raise_error(error_class: NameError, message: "No such native Component #@const_name.#{name}")};
25
+ }
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,98 @@
1
+ module Preact
2
+ class Options
3
+ class << self
4
+ def debounce_rendering(&block)
5
+ %x{
6
+ const old_hook = Opal.global.Preact.options.debounceRendering;
7
+ Opal.global.Preact.options.debounceRendering = function(callback) {
8
+ #{block.call};
9
+ if (old_hook) {
10
+ old_hook(callback);
11
+ }
12
+ }
13
+ }
14
+ nil
15
+ end
16
+
17
+ def diffed(&block)
18
+ # TODO wrap vnode
19
+ %x{
20
+ const old_hook = Opal.global.Preact.options.diffed;
21
+ Opal.global.Preact.options.diffed = function(vnode) {
22
+ #{block.call(`vnode`)};
23
+ if (old_hook) {
24
+ old_hook(vnode);
25
+ }
26
+ }
27
+ }
28
+ nil
29
+ end
30
+
31
+ def event(&block)
32
+ %x{
33
+ const old_hook = Opal.global.Preact.options.event;
34
+ Opal.global.Preact.options.event = function(event) {
35
+ ruby_event = #{Browser::Event.new(`event`)}
36
+ ruby_event = #{block.call(`ruby_event`)};
37
+ return ruby_event.native;
38
+ }
39
+ }
40
+ nil
41
+ end
42
+
43
+ def request_animation_frame(&block)
44
+ %x{
45
+ const old_hook = Opal.global.Preact.options.requestAnimationFrame;
46
+ Opal.global.Preact.options.requestAnimationFrame = function(callback) {
47
+ #{block.call};
48
+ if (old_hook) {
49
+ old_hook(callback);
50
+ }
51
+ }
52
+ }
53
+ nil
54
+ end
55
+
56
+ def unmount(&block)
57
+ # TODO wrap vnode
58
+ %x{
59
+ const old_hook = Opal.global.Preact.options.unmount;
60
+ Opal.global.Preact.options.unmount = function(vnode) {
61
+ #{block.call(`vnode`)};
62
+ if (old_hook) {
63
+ old_hook(vnode);
64
+ }
65
+ }
66
+ }
67
+ nil
68
+ end
69
+
70
+ def use_debug_value(&block)
71
+ %x{
72
+ const old_hook = Opal.global.Preact.options.useDebugValue;
73
+ Opal.global.Preact.options.useDebugValue = function(value) {
74
+ #{block.call(`value`)};
75
+ if (old_hook) {
76
+ old_hook(value);
77
+ }
78
+ }
79
+ }
80
+ nil
81
+ end
82
+
83
+ def vnode(&block)
84
+ %x{
85
+ const old_hook = Opal.global.Preact.options.unmount;
86
+ Opal.global.Preact.options.unmount = function(vnode) {
87
+ #{block.call(`vnode`)};
88
+ if (old_hook) {
89
+ old_hook(vnode);
90
+ }
91
+ }
92
+ }
93
+ nil
94
+ end
95
+
96
+ end
97
+ end
98
+ end
data/lib/preact/ref.rb ADDED
@@ -0,0 +1,17 @@
1
+ module Preact
2
+ class Ref
3
+ include ::Native::Wrapper
4
+
5
+ def initialize(native)
6
+ @native = native
7
+ end
8
+
9
+ def is_wrapped_ref
10
+ true
11
+ end
12
+
13
+ def current
14
+ `Opal.Preact.native_element_or_component_to_ruby(#@native.current)`
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Preact
2
+ VERSION = '10.5.0'
3
+ end
metadata ADDED
@@ -0,0 +1,301 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isomorfeus-preact
3
+ version: !ruby/object:Gem::Version
4
+ version: 10.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Jan Biedermann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.9
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: oj
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.12.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.12.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: opal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: opal-activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.3.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: opal-zeitwerk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: opal-webpack-loader
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.11.4
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.11.4
97
+ - !ruby/object:Gem::Dependency
98
+ name: isomorfeus-redux
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.1.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.1.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: isomorfeus-speednode
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.3.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.3.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: dalli
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.7.11
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.7.11
139
+ - !ruby/object:Gem::Dependency
140
+ name: redis
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 4.4.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 4.4.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: zeitwerk
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 2.4.2
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.4.2
167
+ - !ruby/object:Gem::Dependency
168
+ name: isomorfeus-puppetmaster
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.4.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.4.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: rake
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '3.8'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '3.8'
209
+ description: Write Preact Components in Ruby.
210
+ email:
211
+ - jan@kursator.com
212
+ executables: []
213
+ extensions: []
214
+ extra_rdoc_files: []
215
+ files:
216
+ - README.md
217
+ - lib/browser/delegate_native.rb
218
+ - lib/browser/element.rb
219
+ - lib/browser/element/canvas.rb
220
+ - lib/browser/element/media.rb
221
+ - lib/browser/event.rb
222
+ - lib/browser/event_target.rb
223
+ - lib/browser/file_list.rb
224
+ - lib/browser/iterable.rb
225
+ - lib/isomorfeus-preact.rb
226
+ - lib/isomorfeus/preact/config.rb
227
+ - lib/isomorfeus/preact/memcached_component_cache.rb
228
+ - lib/isomorfeus/preact/redis_component_cache.rb
229
+ - lib/isomorfeus/preact/thread_local_component_cache.rb
230
+ - lib/isomorfeus/preact_view_helper.rb
231
+ - lib/isomorfeus/props/validate_hash_proxy.rb
232
+ - lib/isomorfeus/props/validator.rb
233
+ - lib/isomorfeus/top_level.rb
234
+ - lib/isomorfeus/top_level_ssr.rb
235
+ - lib/isomorfeus_preact/lucid_app/api.rb
236
+ - lib/isomorfeus_preact/lucid_app/base.rb
237
+ - lib/isomorfeus_preact/lucid_app/mixin.rb
238
+ - lib/isomorfeus_preact/lucid_app/native_component_constructor.rb
239
+ - lib/isomorfeus_preact/lucid_component/api.rb
240
+ - lib/isomorfeus_preact/lucid_component/app_store_proxy.rb
241
+ - lib/isomorfeus_preact/lucid_component/base.rb
242
+ - lib/isomorfeus_preact/lucid_component/class_store_proxy.rb
243
+ - lib/isomorfeus_preact/lucid_component/initializer.rb
244
+ - lib/isomorfeus_preact/lucid_component/instance_store_proxy.rb
245
+ - lib/isomorfeus_preact/lucid_component/mixin.rb
246
+ - lib/isomorfeus_preact/lucid_component/native_component_constructor.rb
247
+ - lib/isomorfeus_preact/lucid_component/styles_api.rb
248
+ - lib/isomorfeus_preact/lucid_component/styles_wrapper.rb
249
+ - lib/isomorfeus_preact/lucid_func/base.rb
250
+ - lib/isomorfeus_preact/lucid_func/initializer.rb
251
+ - lib/isomorfeus_preact/lucid_func/mixin.rb
252
+ - lib/isomorfeus_preact/lucid_func/native_component_constructor.rb
253
+ - lib/isomorfeus_preact/preact/function_component/api.rb
254
+ - lib/isomorfeus_preact/preact/function_component/base.rb
255
+ - lib/isomorfeus_preact/preact/function_component/initializer.rb
256
+ - lib/isomorfeus_preact/preact/function_component/mixin.rb
257
+ - lib/isomorfeus_preact/preact/function_component/native_component_constructor.rb
258
+ - lib/lucid_app/context.rb
259
+ - lib/lucid_prop_declaration/mixin.rb
260
+ - lib/preact.rb
261
+ - lib/preact/component/api.rb
262
+ - lib/preact/component/base.rb
263
+ - lib/preact/component/callbacks.rb
264
+ - lib/preact/component/elements.rb
265
+ - lib/preact/component/initializer.rb
266
+ - lib/preact/component/mixin.rb
267
+ - lib/preact/component/native_component_constructor.rb
268
+ - lib/preact/component/params.rb
269
+ - lib/preact/component/props.rb
270
+ - lib/preact/component/resolution.rb
271
+ - lib/preact/component/state.rb
272
+ - lib/preact/context_wrapper.rb
273
+ - lib/preact/native_constant_wrapper.rb
274
+ - lib/preact/options.rb
275
+ - lib/preact/ref.rb
276
+ - lib/preact/version.rb
277
+ homepage: http://isomorfeus.com
278
+ licenses:
279
+ - MIT
280
+ metadata:
281
+ github_repo: ssh://github.com/isomorfeus/gems
282
+ post_install_message:
283
+ rdoc_options: []
284
+ require_paths:
285
+ - lib
286
+ required_ruby_version: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - ">="
289
+ - !ruby/object:Gem::Version
290
+ version: '0'
291
+ required_rubygems_version: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - ">="
294
+ - !ruby/object:Gem::Version
295
+ version: '0'
296
+ requirements: []
297
+ rubygems_version: 3.2.15
298
+ signing_key:
299
+ specification_version: 4
300
+ summary: Preact for Opal Ruby.
301
+ test_files: []