isomorfeus-preact 10.6.14 → 10.6.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/isomorfeus-preact.rb +3 -3
- data/lib/isomorfeus_preact/lucid_component/api.rb +1 -1
- data/lib/isomorfeus_preact/lucid_component/initializer.rb +2 -2
- data/lib/isomorfeus_preact/lucid_func/initializer.rb +1 -1
- data/lib/isomorfeus_preact/preact/function_component/initializer.rb +1 -1
- data/lib/preact/component/api.rb +1 -1
- data/lib/preact/component/callbacks.rb +6 -6
- data/lib/preact/component/initializer.rb +2 -2
- data/lib/preact/component/native_component_constructor.rb +1 -1
- data/lib/preact/props.rb +51 -0
- data/lib/preact/state.rb +67 -0
- data/lib/preact/version.rb +1 -1
- data/lib/preact.rb +2 -2
- data/node_modules/.package-lock.json +3 -3
- data/node_modules/preact/LICENSE +21 -21
- data/node_modules/preact/README.md +187 -187
- data/node_modules/preact/compat/dist/compat.js +1 -1
- data/node_modules/preact/compat/dist/compat.js.map +1 -1
- data/node_modules/preact/compat/dist/compat.mjs +1 -1
- data/node_modules/preact/compat/dist/compat.module.js +1 -1
- data/node_modules/preact/compat/dist/compat.module.js.map +1 -1
- data/node_modules/preact/compat/dist/compat.umd.js +1 -1
- data/node_modules/preact/compat/dist/compat.umd.js.map +1 -1
- data/node_modules/preact/compat/jsx-dev-runtime.js +1 -1
- data/node_modules/preact/compat/jsx-dev-runtime.mjs +1 -1
- data/node_modules/preact/compat/jsx-runtime.js +1 -1
- data/node_modules/preact/compat/jsx-runtime.mjs +1 -1
- data/node_modules/preact/compat/package.json +19 -19
- data/node_modules/preact/compat/scheduler.js +15 -15
- data/node_modules/preact/compat/scheduler.mjs +23 -23
- data/node_modules/preact/compat/server.js +15 -15
- data/node_modules/preact/compat/server.mjs +4 -4
- data/node_modules/preact/compat/src/Children.js +21 -21
- data/node_modules/preact/compat/src/PureComponent.js +15 -15
- data/node_modules/preact/compat/src/forwardRef.js +51 -51
- data/node_modules/preact/compat/src/index.d.ts +141 -141
- data/node_modules/preact/compat/src/index.js +187 -187
- data/node_modules/preact/compat/src/internal.d.ts +47 -47
- data/node_modules/preact/compat/src/memo.js +34 -34
- data/node_modules/preact/compat/src/portals.js +80 -80
- data/node_modules/preact/compat/src/render.js +229 -230
- data/node_modules/preact/compat/src/suspense-list.d.ts +14 -14
- data/node_modules/preact/compat/src/suspense-list.js +126 -126
- data/node_modules/preact/compat/src/suspense.d.ts +15 -15
- data/node_modules/preact/compat/src/suspense.js +270 -270
- data/node_modules/preact/compat/src/util.js +28 -28
- data/node_modules/preact/compat/test-utils.js +1 -1
- data/node_modules/preact/debug/dist/debug.js.map +1 -1
- data/node_modules/preact/debug/dist/debug.module.js.map +1 -1
- data/node_modules/preact/debug/dist/debug.umd.js.map +1 -1
- data/node_modules/preact/debug/package.json +18 -18
- data/node_modules/preact/debug/src/check-props.js +54 -54
- data/node_modules/preact/debug/src/component-stack.js +146 -146
- data/node_modules/preact/debug/src/constants.js +3 -3
- data/node_modules/preact/debug/src/debug.js +442 -442
- data/node_modules/preact/debug/src/index.js +6 -6
- data/node_modules/preact/debug/src/internal.d.ts +82 -82
- data/node_modules/preact/debug/src/util.js +11 -11
- data/node_modules/preact/devtools/dist/devtools.js +1 -1
- data/node_modules/preact/devtools/dist/devtools.js.map +1 -1
- data/node_modules/preact/devtools/dist/devtools.mjs +1 -1
- data/node_modules/preact/devtools/dist/devtools.module.js +1 -1
- data/node_modules/preact/devtools/dist/devtools.module.js.map +1 -1
- data/node_modules/preact/devtools/dist/devtools.umd.js +1 -1
- data/node_modules/preact/devtools/dist/devtools.umd.js.map +1 -1
- data/node_modules/preact/devtools/package.json +16 -16
- data/node_modules/preact/devtools/src/devtools.js +10 -10
- data/node_modules/preact/devtools/src/index.d.ts +8 -8
- data/node_modules/preact/devtools/src/index.js +15 -15
- data/node_modules/preact/dist/preact.js.map +1 -1
- data/node_modules/preact/dist/preact.min.js.map +1 -1
- data/node_modules/preact/dist/preact.module.js.map +1 -1
- data/node_modules/preact/dist/preact.umd.js.map +1 -1
- data/node_modules/preact/hooks/dist/hooks.js +1 -1
- data/node_modules/preact/hooks/dist/hooks.js.map +1 -1
- data/node_modules/preact/hooks/dist/hooks.mjs +1 -1
- data/node_modules/preact/hooks/dist/hooks.module.js +1 -1
- data/node_modules/preact/hooks/dist/hooks.module.js.map +1 -1
- data/node_modules/preact/hooks/dist/hooks.umd.js +1 -1
- data/node_modules/preact/hooks/dist/hooks.umd.js.map +1 -1
- data/node_modules/preact/hooks/package.json +26 -26
- data/node_modules/preact/hooks/src/index.d.ts +139 -139
- data/node_modules/preact/hooks/src/index.js +386 -388
- data/node_modules/preact/hooks/src/internal.d.ts +75 -75
- data/node_modules/preact/jsx-runtime/dist/jsxRuntime.js.map +1 -1
- data/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +1 -1
- data/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js.map +1 -1
- data/node_modules/preact/jsx-runtime/package.json +19 -19
- data/node_modules/preact/jsx-runtime/src/index.d.ts +50 -50
- data/node_modules/preact/jsx-runtime/src/index.js +77 -77
- data/node_modules/preact/package.json +291 -287
- data/node_modules/preact/src/cjs.js +3 -3
- data/node_modules/preact/src/clone-element.js +34 -34
- data/node_modules/preact/src/component.js +225 -225
- data/node_modules/preact/src/constants.js +3 -3
- data/node_modules/preact/src/create-context.js +68 -68
- data/node_modules/preact/src/create-element.js +98 -98
- data/node_modules/preact/src/diff/catch-error.js +38 -38
- data/node_modules/preact/src/diff/children.js +335 -335
- data/node_modules/preact/src/diff/index.js +516 -516
- data/node_modules/preact/src/diff/props.js +158 -158
- data/node_modules/preact/src/index.d.ts +310 -310
- data/node_modules/preact/src/index.js +13 -13
- data/node_modules/preact/src/internal.d.ts +146 -146
- data/node_modules/preact/src/jsx.d.ts +1005 -1005
- data/node_modules/preact/src/options.js +16 -16
- data/node_modules/preact/src/render.js +75 -75
- data/node_modules/preact/src/util.js +27 -27
- data/node_modules/preact/test-utils/dist/testUtils.js.map +1 -1
- data/node_modules/preact/test-utils/dist/testUtils.module.js.map +1 -1
- data/node_modules/preact/test-utils/dist/testUtils.umd.js.map +1 -1
- data/node_modules/preact/test-utils/package.json +19 -19
- data/node_modules/preact/test-utils/src/index.d.ts +3 -3
- data/node_modules/preact/test-utils/src/index.js +117 -117
- data/package.json +1 -1
- metadata +4 -4
- data/lib/preact/component/props.rb +0 -55
- data/lib/preact/component/state.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 477ee7e9d7f1af01eb798486973807f63b32a8db1fee61c5559c12b3490409f1
|
4
|
+
data.tar.gz: 0ff4bd0ef757956daf3c6ded9e527a49ad6bfc4edc7a9f943fc86b8fa4eddc06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c795d9dbbdccc8c968c20bd494ef1eeac0f73b0ecc0850a4ea76d1c8e4b45221f7c8fbb1c574c088a99060702ee3a56602847bdf4b5b44fdc21f49765753394b
|
7
|
+
data.tar.gz: a7727b43a807a03fd55e58c647741f8c42e6f007eb1a7123a982e59c9fdfbe2780ea0870cf083226c923a54240c33c8c7b8b7e05585a5b1377991801df056840
|
data/lib/isomorfeus-preact.rb
CHANGED
@@ -21,7 +21,7 @@ if RUBY_ENGINE == 'opal'
|
|
21
21
|
|
22
22
|
# nanocss
|
23
23
|
require 'nano_css'
|
24
|
-
|
24
|
+
|
25
25
|
# preact
|
26
26
|
require 'preact/version'
|
27
27
|
require 'preact'
|
@@ -31,7 +31,7 @@ if RUBY_ENGINE == 'opal'
|
|
31
31
|
require 'isomorfeus/props/validate_hash_proxy'
|
32
32
|
require 'isomorfeus/props/validator'
|
33
33
|
require 'lucid_prop_declaration/mixin'
|
34
|
-
require 'preact/
|
34
|
+
require 'preact/props'
|
35
35
|
|
36
36
|
# HTML Elements and Fragment support
|
37
37
|
require 'preact/component/elements'
|
@@ -45,7 +45,7 @@ if RUBY_ENGINE == 'opal'
|
|
45
45
|
require 'preact/component/callbacks'
|
46
46
|
require 'preact/component/initializer'
|
47
47
|
require 'preact/component/native_component_constructor'
|
48
|
-
require 'preact/
|
48
|
+
require 'preact/state'
|
49
49
|
require 'preact/component/params'
|
50
50
|
require 'preact/component/resolution'
|
51
51
|
require 'preact/component/mixin'
|
@@ -7,8 +7,8 @@ module LucidComponent
|
|
7
7
|
# @iso_store = Isomorfeus::IsomorphicStoreProxy.new(self)
|
8
8
|
# @local_store = Isomorfeus::LocalStoreProxy.new(self)
|
9
9
|
@store = LucidComponent::InstanceStoreProxy.new(self)
|
10
|
-
@props = `Opal.Preact.
|
11
|
-
@state = `Opal.Preact.
|
10
|
+
@props = `Opal.Preact.Props.$new(#@native)`
|
11
|
+
@state = `Opal.Preact.State.$new(#@native)`
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -2,7 +2,7 @@ module LucidFunc
|
|
2
2
|
module Initializer
|
3
3
|
def initialize
|
4
4
|
self.JS[:native_props] = `{ props: null }`
|
5
|
-
@native_props = `Opal.Preact.
|
5
|
+
@native_props = `Opal.Preact.Props.$new(#{self})`
|
6
6
|
@app_store = LucidComponent::AppStoreProxy.new(self)
|
7
7
|
@class_store = LucidComponent::ClassStoreProxy.new(self.class.to_s, self, self)
|
8
8
|
@store = LucidComponent::InstanceStoreProxy.new(self)
|
data/lib/preact/component/api.rb
CHANGED
@@ -41,8 +41,8 @@ module Preact
|
|
41
41
|
%x{
|
42
42
|
var fun = function(prev_props, prev_state, snapshot) {
|
43
43
|
Opal.Preact.active_redux_components.push(this);
|
44
|
-
#{`this.__ruby_instance`.instance_exec(`Opal.Preact.
|
45
|
-
`Opal.Preact.
|
44
|
+
#{`this.__ruby_instance`.instance_exec(`Opal.Preact.Props.$new({props: prev_props})`,
|
45
|
+
`Opal.Preact.State.$new({state: prev_state})`,
|
46
46
|
`snapshot`, &block)};
|
47
47
|
Opal.Preact.active_redux_components.pop();
|
48
48
|
}
|
@@ -69,8 +69,8 @@ module Preact
|
|
69
69
|
%x{
|
70
70
|
var fun = function(props, state) {
|
71
71
|
Opal.Preact.active_redux_components.push(this);
|
72
|
-
var result = #{`this.__ruby_instance`.instance_exec(`Opal.Preact.
|
73
|
-
`Opal.Preact.
|
72
|
+
var result = #{`this.__ruby_instance`.instance_exec(`Opal.Preact.Props.$new({props: props})`,
|
73
|
+
`Opal.Preact.State.$new({state: state})`, &block)};
|
74
74
|
Opal.Preact.active_redux_components.pop();
|
75
75
|
if (typeof result.$to_n === 'function') { result = result.$to_n() }
|
76
76
|
if (result === Opal.nil) { return null; }
|
@@ -85,8 +85,8 @@ module Preact
|
|
85
85
|
%x{
|
86
86
|
var fun = function(prev_props, prev_state) {
|
87
87
|
Opal.Preact.active_redux_components.push(this);
|
88
|
-
var result = #{`this.__ruby_instance`.instance_exec(`Opal.Preact.
|
89
|
-
`Opal.Preact.
|
88
|
+
var result = #{`this.__ruby_instance`.instance_exec(`Opal.Preact.Props.$new({props: prev_props})`,
|
89
|
+
`Opal.Preact.State.$new({state: prev_state})`, &block)};
|
90
90
|
Opal.Preact.active_redux_components.pop();
|
91
91
|
if (result === Opal.nil) { return null; }
|
92
92
|
return result;
|
@@ -3,8 +3,8 @@ module Preact
|
|
3
3
|
module Initializer
|
4
4
|
def initialize(native_component)
|
5
5
|
@native = native_component
|
6
|
-
@props = `Opal.Preact.
|
7
|
-
@state = `Opal.Preact.
|
6
|
+
@props = `Opal.Preact.Props.$new(#@native)`
|
7
|
+
@state = `Opal.Preact.State.$new(#@native)`
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -46,7 +46,7 @@ module Preact
|
|
46
46
|
}
|
47
47
|
shouldComponentUpdate(next_props, next_state) {
|
48
48
|
if (base.should_component_update_block) {
|
49
|
-
return #{!!`this.__ruby_instance`.instance_exec(Preact
|
49
|
+
return #{!!`this.__ruby_instance`.instance_exec(`Opal.Preact.Props.$new({props: next_props})`, `Opal.Preact.State.$new({state: next_state })`, &`base.should_component_update_block`)};
|
50
50
|
}
|
51
51
|
if (!Opal.Preact.props_are_equal(this.props, next_props)) { return true; }
|
52
52
|
if (Opal.Preact.state_is_not_equal(this.state, next_state)) { return true; }
|
data/lib/preact/props.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Preact
|
2
|
+
class Props
|
3
|
+
def initialize(native)
|
4
|
+
@native = native
|
5
|
+
end
|
6
|
+
|
7
|
+
def ==(other_props)
|
8
|
+
%x{
|
9
|
+
if (Opal.Preact.props_are_equal(#@native.props, #{other_props.to_n})) { return true; }
|
10
|
+
return false;
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(prop, *args, &block)
|
15
|
+
%x{
|
16
|
+
const p = #@native.props;
|
17
|
+
if (typeof p[prop] === 'undefined') {
|
18
|
+
prop = Opal.Preact.lower_camelize(prop);
|
19
|
+
if (typeof p[prop] === 'undefined') { return nil; }
|
20
|
+
}
|
21
|
+
return p[prop];
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def theme
|
26
|
+
`#@native.props.iso_theme`
|
27
|
+
end
|
28
|
+
|
29
|
+
def params
|
30
|
+
return @params if @params
|
31
|
+
return nil if `typeof #@native.props.params === 'undefined'`
|
32
|
+
@params = ::Preact::Component::Params.new(`#@native.props.params`)
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_h
|
36
|
+
`Opal.Hash.$new(#@native.props)`.transform_keys!(&:underscore)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_json
|
40
|
+
JSON.dump(to_transport)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_n
|
44
|
+
`#@native.props`
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_transport
|
48
|
+
{}.merge(to_h)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/preact/state.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Preact
|
2
|
+
class State
|
3
|
+
include ::Native::Wrapper
|
4
|
+
|
5
|
+
def initialize(native)
|
6
|
+
@native = native
|
7
|
+
end
|
8
|
+
|
9
|
+
def ==(other_state)
|
10
|
+
%x{
|
11
|
+
if (Opal.Preact.state_is_not_equal(#@native.state, #{other_state.to_raw_n})) { return false; }
|
12
|
+
return true;
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(key, *args, &block)
|
17
|
+
if `args.length > 0`
|
18
|
+
new_state = `{}`
|
19
|
+
new_state.JS[(`key.endsWith('=')` ? key.chop : key)] = args[0]
|
20
|
+
if block_given?
|
21
|
+
@native.JS.setState(new_state, `function() { block.$call(); }`)
|
22
|
+
else
|
23
|
+
@native.JS.setState(new_state, `null`)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
%x{
|
27
|
+
if (typeof #@native.state[key] === 'undefined') { return nil; }
|
28
|
+
return #@native.state[key];
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_state(updater, &block)
|
34
|
+
new_state = `{}`
|
35
|
+
updater.each do |key, value|
|
36
|
+
new_state.JS[key] = value
|
37
|
+
end
|
38
|
+
if block_given?
|
39
|
+
@native.JS.setState(new_state, `function() { block.$call(); }`)
|
40
|
+
else
|
41
|
+
@native.JS.setState(new_state, `null`)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def size
|
46
|
+
`Object.keys(#@native.state).length`;
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_n
|
50
|
+
%x{
|
51
|
+
var new_native = {};
|
52
|
+
for (var key in #@native.state) {
|
53
|
+
if (typeof #@native.state[key].$to_n !== "undefined") {
|
54
|
+
new_native[key] = #@native.state[key].$to_n();
|
55
|
+
} else {
|
56
|
+
new_native[key] = #@native.state[key];
|
57
|
+
}
|
58
|
+
}
|
59
|
+
return new_native;
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_raw_n
|
64
|
+
`#@native.state`
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/preact/version.rb
CHANGED
data/lib/preact.rb
CHANGED
@@ -256,14 +256,14 @@ module Preact
|
|
256
256
|
`Opal.global.Preact.toChildArray(children)`
|
257
257
|
end
|
258
258
|
|
259
|
-
def self.clone_element(
|
259
|
+
def self.clone_element(native_preact_element, props = nil, children = nil, &block)
|
260
260
|
block_result = `null`
|
261
261
|
if block_given?
|
262
262
|
block_result = block.call
|
263
263
|
block_result = `null` unless block_result
|
264
264
|
end
|
265
265
|
native_props = props ? `Opal.Preact.to_native_preact_props(props)` : `null`
|
266
|
-
`Opal.global.Preact.cloneElement(
|
266
|
+
`Opal.global.Preact.cloneElement(native_preact_element, native_props, block_result)`
|
267
267
|
end
|
268
268
|
|
269
269
|
def self.create_context(const_name, default_value)
|
@@ -4,9 +4,9 @@
|
|
4
4
|
"requires": true,
|
5
5
|
"packages": {
|
6
6
|
"node_modules/preact": {
|
7
|
-
"version": "10.6.
|
8
|
-
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.
|
9
|
-
"integrity": "sha512-
|
7
|
+
"version": "10.6.5",
|
8
|
+
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz",
|
9
|
+
"integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==",
|
10
10
|
"funding": {
|
11
11
|
"type": "opencollective",
|
12
12
|
"url": "https://opencollective.com/preact"
|
data/node_modules/preact/LICENSE
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2015-present Jason Miller
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015-present Jason Miller
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|