zephyr_rb 1.0.1b → 1.0.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.
- checksums.yaml +4 -4
- data/lib/{zephyr_rb/cli.rb → cli.rb} +1 -1
- data/lib/zephyr_rb/version.rb +1 -1
- metadata +8 -26
- data/exe/zephyr-rb +0 -6
- data/src/browser.script.iife.js +0 -3052
- data/src/component.rb +0 -132
- data/src/components.rb +0 -934
- data/src/dom_builder.rb +0 -94
- data/src/registry.rb +0 -30
- data/src/zephyr-bridge.js +0 -69
- data/src/zephyr_wasm.rb +0 -86
- /data/lib/{zephyr_rb.rb → zephyr_rb/zephyr_rb.rb} +0 -0
data/src/component.rb
DELETED
@@ -1,132 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'js'
|
4
|
-
|
5
|
-
module ZephyrWasm
|
6
|
-
class Component
|
7
|
-
class << self
|
8
|
-
attr_accessor :tag_name
|
9
|
-
attr_reader :observed_attrs
|
10
|
-
|
11
|
-
def inherited(subclass)
|
12
|
-
super
|
13
|
-
subclass.instance_variable_set(:@observed_attrs, [])
|
14
|
-
end
|
15
|
-
|
16
|
-
def observed_attributes(*attrs)
|
17
|
-
@observed_attrs ||= []
|
18
|
-
@observed_attrs.concat(attrs.map(&:to_s))
|
19
|
-
end
|
20
|
-
|
21
|
-
def on_connect(&block)
|
22
|
-
define_method(:on_connect_impl, &block)
|
23
|
-
end
|
24
|
-
|
25
|
-
def on_disconnect(&block)
|
26
|
-
define_method(:on_disconnect_impl, &block)
|
27
|
-
end
|
28
|
-
|
29
|
-
def template(&block)
|
30
|
-
@template_block = block
|
31
|
-
end
|
32
|
-
|
33
|
-
def get_template_block
|
34
|
-
@template_block
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
attr_reader :element, :signal, :state
|
39
|
-
|
40
|
-
def initialize(element)
|
41
|
-
@element = element
|
42
|
-
@abort_controller = JS.global[:AbortController].new
|
43
|
-
@signal = @abort_controller[:signal]
|
44
|
-
@state = {}
|
45
|
-
end
|
46
|
-
|
47
|
-
def connected
|
48
|
-
setup_observed_attributes
|
49
|
-
on_connect_impl if respond_to?(:on_connect_impl)
|
50
|
-
end
|
51
|
-
|
52
|
-
def disconnected
|
53
|
-
@abort_controller.call(:abort)
|
54
|
-
on_disconnect_impl if respond_to?(:on_disconnect_impl)
|
55
|
-
end
|
56
|
-
|
57
|
-
def attribute_changed(name, old_value, new_value)
|
58
|
-
@state[name] = new_value
|
59
|
-
render if @element[:isConnected]
|
60
|
-
end
|
61
|
-
|
62
|
-
def render
|
63
|
-
template_block = self.class.get_template_block
|
64
|
-
return unless template_block
|
65
|
-
|
66
|
-
begin
|
67
|
-
builder = DOMBuilder.new(@element, self)
|
68
|
-
# Use instance_exec to pass builder while maintaining component context
|
69
|
-
instance_exec(builder, &template_block)
|
70
|
-
builder.apply
|
71
|
-
rescue => e
|
72
|
-
puts "Render error: #{e.message}"
|
73
|
-
puts e.backtrace.first(5).join("\n")
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# State management
|
78
|
-
def set_state(key, value)
|
79
|
-
@state[key] = value
|
80
|
-
render
|
81
|
-
end
|
82
|
-
|
83
|
-
# Attribute helpers
|
84
|
-
def [](key)
|
85
|
-
@element.call(:getAttribute, key.to_s)&.to_s
|
86
|
-
end
|
87
|
-
|
88
|
-
def []=(key, value)
|
89
|
-
if value.nil?
|
90
|
-
@element.call(:removeAttribute, key.to_s)
|
91
|
-
else
|
92
|
-
@element.call(:setAttribute, key.to_s, value.to_s)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
# Event helpers
|
97
|
-
def on(event_name, selector = nil, &block)
|
98
|
-
handler = ->(event) {
|
99
|
-
target = event[:target]
|
100
|
-
|
101
|
-
if selector
|
102
|
-
# Event delegation
|
103
|
-
element = target.call(:closest, selector)
|
104
|
-
block.call(event) if element
|
105
|
-
else
|
106
|
-
block.call(event)
|
107
|
-
end
|
108
|
-
}.to_js
|
109
|
-
|
110
|
-
options = { signal: @signal }.to_js
|
111
|
-
@element.call(:addEventListener, event_name.to_s, handler, options)
|
112
|
-
end
|
113
|
-
|
114
|
-
# DOM query helpers
|
115
|
-
def query(selector)
|
116
|
-
@element.call(:querySelector, selector)
|
117
|
-
end
|
118
|
-
|
119
|
-
def query_all(selector)
|
120
|
-
@element.call(:querySelectorAll, selector)
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
def setup_observed_attributes
|
126
|
-
self.class.observed_attrs&.each do |attr|
|
127
|
-
value = @element.call(:getAttribute, attr)
|
128
|
-
@state[attr] = value.to_s if value
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|