ruby_wasm_ui 0.8.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 (99) hide show
  1. checksums.yaml +7 -0
  2. data/.cursor/rules/ruby_comments.mdc +29 -0
  3. data/.github/workflows/playwright.yml +74 -0
  4. data/.github/workflows/rspec.yml +33 -0
  5. data/.node-version +1 -0
  6. data/CODE_OF_CONDUCT.md +132 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +218 -0
  9. data/Rakefile +4 -0
  10. data/docs/conditional-rendering.md +119 -0
  11. data/docs/lifecycle-hooks.md +75 -0
  12. data/docs/list-rendering.md +51 -0
  13. data/examples/Gemfile +5 -0
  14. data/examples/Gemfile.lock +41 -0
  15. data/examples/Makefile +15 -0
  16. data/examples/npm-packages/runtime/counter/index.html +28 -0
  17. data/examples/npm-packages/runtime/counter/index.rb +62 -0
  18. data/examples/npm-packages/runtime/counter/index.spec.js +42 -0
  19. data/examples/npm-packages/runtime/hello/index.html +28 -0
  20. data/examples/npm-packages/runtime/hello/index.rb +29 -0
  21. data/examples/npm-packages/runtime/hello/index.spec.js +53 -0
  22. data/examples/npm-packages/runtime/input/index.html +28 -0
  23. data/examples/npm-packages/runtime/input/index.rb +46 -0
  24. data/examples/npm-packages/runtime/input/index.spec.js +58 -0
  25. data/examples/npm-packages/runtime/list/index.html +27 -0
  26. data/examples/npm-packages/runtime/list/index.rb +33 -0
  27. data/examples/npm-packages/runtime/list/index.spec.js +46 -0
  28. data/examples/npm-packages/runtime/on_mounted_demo/index.html +40 -0
  29. data/examples/npm-packages/runtime/on_mounted_demo/index.rb +59 -0
  30. data/examples/npm-packages/runtime/on_mounted_demo/index.spec.js +50 -0
  31. data/examples/npm-packages/runtime/r_if_attribute_demo/index.html +34 -0
  32. data/examples/npm-packages/runtime/r_if_attribute_demo/index.rb +113 -0
  33. data/examples/npm-packages/runtime/r_if_attribute_demo/index.spec.js +140 -0
  34. data/examples/npm-packages/runtime/random_cocktail/index.html +27 -0
  35. data/examples/npm-packages/runtime/random_cocktail/index.rb +69 -0
  36. data/examples/npm-packages/runtime/random_cocktail/index.spec.js +101 -0
  37. data/examples/npm-packages/runtime/search_field/index.html +27 -0
  38. data/examples/npm-packages/runtime/search_field/index.rb +39 -0
  39. data/examples/npm-packages/runtime/search_field/index.spec.js +59 -0
  40. data/examples/npm-packages/runtime/todos/index.html +28 -0
  41. data/examples/npm-packages/runtime/todos/index.rb +239 -0
  42. data/examples/npm-packages/runtime/todos/index.spec.js +161 -0
  43. data/examples/npm-packages/runtime/todos/todos_repository.rb +23 -0
  44. data/examples/package.json +12 -0
  45. data/examples/src/counter/index.html +23 -0
  46. data/examples/src/counter/index.rb +60 -0
  47. data/lib/ruby_wasm_ui +1 -0
  48. data/lib/ruby_wasm_ui.rb +1 -0
  49. data/package-lock.json +100 -0
  50. data/package.json +32 -0
  51. data/packages/npm-packages/runtime/Gemfile +3 -0
  52. data/packages/npm-packages/runtime/Gemfile.lock +26 -0
  53. data/packages/npm-packages/runtime/README.md +5 -0
  54. data/packages/npm-packages/runtime/eslint.config.mjs +16 -0
  55. data/packages/npm-packages/runtime/package-lock.json +6668 -0
  56. data/packages/npm-packages/runtime/package.json +38 -0
  57. data/packages/npm-packages/runtime/rollup.config.mjs +89 -0
  58. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/component_spec.rb +416 -0
  59. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/dom/scheduler_spec.rb +98 -0
  60. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/nodes_equal_spec.rb +190 -0
  61. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_conditional_group_spec.rb +505 -0
  62. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_for_group_spec.rb +377 -0
  63. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_vdom_spec.rb +573 -0
  64. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/template/parser_spec.rb +627 -0
  65. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/arrays_spec.rb +228 -0
  66. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/objects_spec.rb +127 -0
  67. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/props_spec.rb +205 -0
  68. data/packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/strings_spec.rb +107 -0
  69. data/packages/npm-packages/runtime/spec/spec_helper.rb +16 -0
  70. data/packages/npm-packages/runtime/src/__tests__/sample.test.js +5 -0
  71. data/packages/npm-packages/runtime/src/index.js +37 -0
  72. data/packages/npm-packages/runtime/src/ruby_wasm_ui/app.rb +53 -0
  73. data/packages/npm-packages/runtime/src/ruby_wasm_ui/component.rb +215 -0
  74. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dispatcher.rb +46 -0
  75. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/attributes.rb +105 -0
  76. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/destroy_dom.rb +63 -0
  77. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/events.rb +40 -0
  78. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/mount_dom.rb +108 -0
  79. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/patch_dom.rb +237 -0
  80. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom/scheduler.rb +51 -0
  81. data/packages/npm-packages/runtime/src/ruby_wasm_ui/dom.rb +13 -0
  82. data/packages/npm-packages/runtime/src/ruby_wasm_ui/nodes_equal.rb +45 -0
  83. data/packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_conditional_group.rb +150 -0
  84. data/packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_for_group.rb +125 -0
  85. data/packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_vdom.rb +220 -0
  86. data/packages/npm-packages/runtime/src/ruby_wasm_ui/template/parser.rb +134 -0
  87. data/packages/npm-packages/runtime/src/ruby_wasm_ui/template.rb +11 -0
  88. data/packages/npm-packages/runtime/src/ruby_wasm_ui/utils/arrays.rb +185 -0
  89. data/packages/npm-packages/runtime/src/ruby_wasm_ui/utils/objects.rb +37 -0
  90. data/packages/npm-packages/runtime/src/ruby_wasm_ui/utils/props.rb +25 -0
  91. data/packages/npm-packages/runtime/src/ruby_wasm_ui/utils/strings.rb +19 -0
  92. data/packages/npm-packages/runtime/src/ruby_wasm_ui/utils.rb +11 -0
  93. data/packages/npm-packages/runtime/src/ruby_wasm_ui/vdom.rb +84 -0
  94. data/packages/npm-packages/runtime/src/ruby_wasm_ui/version.rb +5 -0
  95. data/packages/npm-packages/runtime/src/ruby_wasm_ui.rb +14 -0
  96. data/packages/npm-packages/runtime/vitest.config.js +8 -0
  97. data/playwright.config.js +78 -0
  98. data/sig/ruby_wasm_ui.rbs +4 -0
  99. metadata +168 -0
@@ -0,0 +1,84 @@
1
+ module RubyWasmUi
2
+ class Vdom
3
+ DOM_TYPES = {
4
+ TEXT: 'text',
5
+ ELEMENT: 'element',
6
+ FRAGMENT: 'fragment',
7
+ COMPONENT: 'component'
8
+ }
9
+
10
+ # @param tag [String]
11
+ # @param props [Hash]
12
+ # @param children [Array]
13
+ # @param type [Symbol]
14
+ # @param value [Object]
15
+ # @return [Vdom]
16
+ def self.h(tag, props = {}, children = [])
17
+ type = tag.is_a?(String) ? DOM_TYPES[:ELEMENT] : DOM_TYPES[:COMPONENT]
18
+ new(tag, props, type, children, nil)
19
+ end
20
+
21
+ # @param str [String]
22
+ # @return [Vdom]
23
+ def self.h_string(str)
24
+ vdom = new('', {}, DOM_TYPES[:TEXT], [], str.to_s)
25
+ vdom
26
+ end
27
+
28
+ # @param vdoms [Array]
29
+ # @return [Vdom]
30
+ def self.h_fragment(vdoms)
31
+ new('', {}, DOM_TYPES[:FRAGMENT], map_text_nodes(RubyWasmUi::Utils::Arrays.without_nulls(vdoms)), nil)
32
+ end
33
+
34
+ # @param type [Symbol]
35
+ # @param props [Hash]
36
+ # @param children [Array]
37
+ # @param value [Object]
38
+ # @return [Vdom]
39
+ def initialize(tag, props, type, children, value)
40
+ @tag = tag
41
+ @props = props
42
+ @children = self.class.map_text_nodes(RubyWasmUi::Utils::Arrays.without_nulls(children))
43
+ @type = type
44
+ @value = value.to_s
45
+ @el = nil
46
+ @listeners = {}
47
+ @component = nil
48
+ end
49
+
50
+ attr_reader :tag, :props, :children, :type, :value
51
+ attr_accessor :el, :listeners, :component
52
+
53
+ private
54
+
55
+ # @param children [Array]
56
+ def self.map_text_nodes(children)
57
+ children.map { |child| is_text_node?(child) ? h_string(child) : child }
58
+ end
59
+
60
+ # @param child [Object]
61
+ # @return [Boolean]
62
+ def self.is_text_node?(child)
63
+ child.is_a?(String) || child.is_a?(Integer) || child.is_a?(JS::Object)
64
+ end
65
+
66
+ # @param vdom [Vdom]
67
+ # @return [Array]
68
+ def self.extract_children(vdom)
69
+ return [] if vdom.children.nil?
70
+
71
+ children = []
72
+
73
+ vdom.children.each do |child|
74
+ if child.type == DOM_TYPES[:FRAGMENT]
75
+ children.concat(extract_children(child))
76
+ else
77
+ children << child
78
+ end
79
+ end
80
+
81
+ children
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyWasmUi
4
+ VERSION = "0.8.1"
5
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ruby_wasm_ui/app"
4
+ require_relative "ruby_wasm_ui/component"
5
+ require_relative "ruby_wasm_ui/dispatcher"
6
+ require_relative "ruby_wasm_ui/dom"
7
+ require_relative "ruby_wasm_ui/nodes_equal"
8
+ require_relative "ruby_wasm_ui/template"
9
+ require_relative "ruby_wasm_ui/utils"
10
+ require_relative "ruby_wasm_ui/vdom"
11
+ require_relative "ruby_wasm_ui/version"
12
+
13
+ module RubyWasmUi
14
+ end
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ reporters: "verbose",
6
+ environment: "jsdom",
7
+ },
8
+ });
@@ -0,0 +1,78 @@
1
+ import { defineConfig, devices } from "@playwright/test";
2
+
3
+ /**
4
+ * @see https://playwright.dev/docs/test-configuration
5
+ */
6
+ export default defineConfig({
7
+ testDir: "./examples/npm-packages/runtime",
8
+ testMatch: "*/*.spec.js",
9
+ /* Run tests in files in parallel */
10
+ fullyParallel: true,
11
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
12
+ forbidOnly: !!process.env.CI,
13
+ /* Retry on CI only */
14
+ retries: process.env.CI ? 2 : 1,
15
+ /* Opt out of parallel tests on CI. */
16
+ workers: process.env.CI ? 2 : undefined,
17
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
18
+ reporter: [["html", { open: "never" }]],
19
+ /* Output directory for test results */
20
+ outputDir: "test-results/",
21
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
22
+ use: {
23
+ /* Base URL to use in actions like `await page.goto('/')`. */
24
+ baseURL: "http://localhost:8080",
25
+
26
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
27
+ trace: "on-first-retry",
28
+
29
+ /* Take screenshot on failure */
30
+ screenshot: "only-on-failure",
31
+ },
32
+
33
+ /* Configure projects for major browsers */
34
+ projects: [
35
+ {
36
+ name: "chromium",
37
+ use: { ...devices["Desktop Chrome"] },
38
+ },
39
+
40
+ // {
41
+ // name: "firefox",
42
+ // use: { ...devices["Desktop Firefox"] },
43
+ // },
44
+
45
+ // {
46
+ // name: "webkit",
47
+ // use: { ...devices["Desktop Safari"] },
48
+ // },
49
+
50
+ /* Test against mobile viewports. */
51
+ // {
52
+ // name: 'Mobile Chrome',
53
+ // use: { ...devices['Pixel 5'] },
54
+ // },
55
+ // {
56
+ // name: 'Mobile Safari',
57
+ // use: { ...devices['iPhone 12'] },
58
+ // },
59
+
60
+ /* Test against branded browsers. */
61
+ // {
62
+ // name: 'Microsoft Edge',
63
+ // use: { ...devices['Desktop Edge'], channel: 'msedge' },
64
+ // },
65
+ // {
66
+ // name: 'Google Chrome',
67
+ // use: { ...devices['Desktop Chrome'], channel: 'chrome' },
68
+ // },
69
+ ],
70
+
71
+ /* Run your local dev server before starting the tests */
72
+ webServer: {
73
+ command: "npm run serve:examples:test",
74
+ url: "http://localhost:8080",
75
+ reuseExistingServer: !process.env.CI,
76
+ timeout: 120 * 1000, // 2 minutes timeout for Ruby WASM to load
77
+ },
78
+ });
@@ -0,0 +1,4 @@
1
+ module RubyWasmUi
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_wasm_ui
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ platform: ruby
6
+ authors:
7
+ - t0yohei
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ruby_wasm
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.7'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.7'
26
+ - !ruby/object:Gem::Dependency
27
+ name: js
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.7'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
40
+ description: Write reactive web applications using familiar Ruby syntax and patterns
41
+ email:
42
+ - k.t0yohei@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - ".cursor/rules/ruby_comments.mdc"
48
+ - ".github/workflows/playwright.yml"
49
+ - ".github/workflows/rspec.yml"
50
+ - ".node-version"
51
+ - CODE_OF_CONDUCT.md
52
+ - LICENSE.txt
53
+ - README.md
54
+ - Rakefile
55
+ - docs/conditional-rendering.md
56
+ - docs/lifecycle-hooks.md
57
+ - docs/list-rendering.md
58
+ - examples/Gemfile
59
+ - examples/Gemfile.lock
60
+ - examples/Makefile
61
+ - examples/npm-packages/runtime/counter/index.html
62
+ - examples/npm-packages/runtime/counter/index.rb
63
+ - examples/npm-packages/runtime/counter/index.spec.js
64
+ - examples/npm-packages/runtime/hello/index.html
65
+ - examples/npm-packages/runtime/hello/index.rb
66
+ - examples/npm-packages/runtime/hello/index.spec.js
67
+ - examples/npm-packages/runtime/input/index.html
68
+ - examples/npm-packages/runtime/input/index.rb
69
+ - examples/npm-packages/runtime/input/index.spec.js
70
+ - examples/npm-packages/runtime/list/index.html
71
+ - examples/npm-packages/runtime/list/index.rb
72
+ - examples/npm-packages/runtime/list/index.spec.js
73
+ - examples/npm-packages/runtime/on_mounted_demo/index.html
74
+ - examples/npm-packages/runtime/on_mounted_demo/index.rb
75
+ - examples/npm-packages/runtime/on_mounted_demo/index.spec.js
76
+ - examples/npm-packages/runtime/r_if_attribute_demo/index.html
77
+ - examples/npm-packages/runtime/r_if_attribute_demo/index.rb
78
+ - examples/npm-packages/runtime/r_if_attribute_demo/index.spec.js
79
+ - examples/npm-packages/runtime/random_cocktail/index.html
80
+ - examples/npm-packages/runtime/random_cocktail/index.rb
81
+ - examples/npm-packages/runtime/random_cocktail/index.spec.js
82
+ - examples/npm-packages/runtime/search_field/index.html
83
+ - examples/npm-packages/runtime/search_field/index.rb
84
+ - examples/npm-packages/runtime/search_field/index.spec.js
85
+ - examples/npm-packages/runtime/todos/index.html
86
+ - examples/npm-packages/runtime/todos/index.rb
87
+ - examples/npm-packages/runtime/todos/index.spec.js
88
+ - examples/npm-packages/runtime/todos/todos_repository.rb
89
+ - examples/package.json
90
+ - examples/src/counter/index.html
91
+ - examples/src/counter/index.rb
92
+ - lib/ruby_wasm_ui
93
+ - lib/ruby_wasm_ui.rb
94
+ - package-lock.json
95
+ - package.json
96
+ - packages/npm-packages/runtime/Gemfile
97
+ - packages/npm-packages/runtime/Gemfile.lock
98
+ - packages/npm-packages/runtime/README.md
99
+ - packages/npm-packages/runtime/eslint.config.mjs
100
+ - packages/npm-packages/runtime/package-lock.json
101
+ - packages/npm-packages/runtime/package.json
102
+ - packages/npm-packages/runtime/rollup.config.mjs
103
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/component_spec.rb
104
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/dom/scheduler_spec.rb
105
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/nodes_equal_spec.rb
106
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_conditional_group_spec.rb
107
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_for_group_spec.rb
108
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/template/build_vdom_spec.rb
109
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/template/parser_spec.rb
110
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/arrays_spec.rb
111
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/objects_spec.rb
112
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/props_spec.rb
113
+ - packages/npm-packages/runtime/spec/ruby_wasm_ui/utils/strings_spec.rb
114
+ - packages/npm-packages/runtime/spec/spec_helper.rb
115
+ - packages/npm-packages/runtime/src/__tests__/sample.test.js
116
+ - packages/npm-packages/runtime/src/index.js
117
+ - packages/npm-packages/runtime/src/ruby_wasm_ui.rb
118
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/app.rb
119
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/component.rb
120
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dispatcher.rb
121
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom.rb
122
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/attributes.rb
123
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/destroy_dom.rb
124
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/events.rb
125
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/mount_dom.rb
126
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/patch_dom.rb
127
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/dom/scheduler.rb
128
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/nodes_equal.rb
129
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/template.rb
130
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_conditional_group.rb
131
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_for_group.rb
132
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/template/build_vdom.rb
133
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/template/parser.rb
134
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/utils.rb
135
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/utils/arrays.rb
136
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/utils/objects.rb
137
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/utils/props.rb
138
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/utils/strings.rb
139
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/vdom.rb
140
+ - packages/npm-packages/runtime/src/ruby_wasm_ui/version.rb
141
+ - packages/npm-packages/runtime/vitest.config.js
142
+ - playwright.config.js
143
+ - sig/ruby_wasm_ui.rbs
144
+ homepage: https://github.com/t0yohei/ruby-wasm-ui
145
+ licenses:
146
+ - MIT
147
+ metadata:
148
+ allowed_push_host: https://rubygems.org
149
+ homepage_uri: https://github.com/t0yohei/ruby-wasm-ui
150
+ source_code_uri: https://github.com/t0yohei/ruby-wasm-ui
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 3.2.0
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubygems_version: 3.7.2
166
+ specification_version: 4
167
+ summary: A modern web frontend framework for Ruby using ruby.wasm
168
+ test_files: []