pulse-framework 0.1.62__py3-none-any.whl
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.
- pulse/__init__.py +1493 -0
- pulse/_examples.py +29 -0
- pulse/app.py +1086 -0
- pulse/channel.py +607 -0
- pulse/cli/__init__.py +0 -0
- pulse/cli/cmd.py +575 -0
- pulse/cli/dependencies.py +181 -0
- pulse/cli/folder_lock.py +134 -0
- pulse/cli/helpers.py +271 -0
- pulse/cli/logging.py +102 -0
- pulse/cli/models.py +35 -0
- pulse/cli/packages.py +262 -0
- pulse/cli/processes.py +292 -0
- pulse/cli/secrets.py +39 -0
- pulse/cli/uvicorn_log_config.py +87 -0
- pulse/code_analysis.py +38 -0
- pulse/codegen/__init__.py +0 -0
- pulse/codegen/codegen.py +359 -0
- pulse/codegen/templates/__init__.py +0 -0
- pulse/codegen/templates/layout.py +106 -0
- pulse/codegen/templates/route.py +345 -0
- pulse/codegen/templates/routes_ts.py +42 -0
- pulse/codegen/utils.py +20 -0
- pulse/component.py +237 -0
- pulse/components/__init__.py +0 -0
- pulse/components/for_.py +83 -0
- pulse/components/if_.py +86 -0
- pulse/components/react_router.py +94 -0
- pulse/context.py +108 -0
- pulse/cookies.py +322 -0
- pulse/decorators.py +344 -0
- pulse/dom/__init__.py +0 -0
- pulse/dom/elements.py +1024 -0
- pulse/dom/events.py +445 -0
- pulse/dom/props.py +1250 -0
- pulse/dom/svg.py +0 -0
- pulse/dom/tags.py +328 -0
- pulse/dom/tags.pyi +480 -0
- pulse/env.py +178 -0
- pulse/form.py +538 -0
- pulse/helpers.py +541 -0
- pulse/hooks/__init__.py +0 -0
- pulse/hooks/core.py +452 -0
- pulse/hooks/effects.py +88 -0
- pulse/hooks/init.py +668 -0
- pulse/hooks/runtime.py +464 -0
- pulse/hooks/setup.py +254 -0
- pulse/hooks/stable.py +138 -0
- pulse/hooks/state.py +192 -0
- pulse/js/__init__.py +125 -0
- pulse/js/__init__.pyi +115 -0
- pulse/js/_types.py +299 -0
- pulse/js/array.py +339 -0
- pulse/js/console.py +50 -0
- pulse/js/date.py +119 -0
- pulse/js/document.py +145 -0
- pulse/js/error.py +140 -0
- pulse/js/json.py +66 -0
- pulse/js/map.py +97 -0
- pulse/js/math.py +69 -0
- pulse/js/navigator.py +79 -0
- pulse/js/number.py +57 -0
- pulse/js/obj.py +81 -0
- pulse/js/object.py +172 -0
- pulse/js/promise.py +172 -0
- pulse/js/pulse.py +115 -0
- pulse/js/react.py +495 -0
- pulse/js/regexp.py +57 -0
- pulse/js/set.py +124 -0
- pulse/js/string.py +38 -0
- pulse/js/weakmap.py +53 -0
- pulse/js/weakset.py +48 -0
- pulse/js/window.py +205 -0
- pulse/messages.py +202 -0
- pulse/middleware.py +471 -0
- pulse/plugin.py +96 -0
- pulse/proxy.py +242 -0
- pulse/py.typed +0 -0
- pulse/queries/__init__.py +0 -0
- pulse/queries/client.py +609 -0
- pulse/queries/common.py +101 -0
- pulse/queries/effect.py +55 -0
- pulse/queries/infinite_query.py +1418 -0
- pulse/queries/mutation.py +295 -0
- pulse/queries/protocol.py +136 -0
- pulse/queries/query.py +1314 -0
- pulse/queries/store.py +120 -0
- pulse/react_component.py +88 -0
- pulse/reactive.py +1208 -0
- pulse/reactive_extensions.py +1172 -0
- pulse/render_session.py +768 -0
- pulse/renderer.py +584 -0
- pulse/request.py +205 -0
- pulse/routing.py +598 -0
- pulse/serializer.py +279 -0
- pulse/state.py +556 -0
- pulse/test_helpers.py +15 -0
- pulse/transpiler/__init__.py +111 -0
- pulse/transpiler/assets.py +81 -0
- pulse/transpiler/builtins.py +1029 -0
- pulse/transpiler/dynamic_import.py +130 -0
- pulse/transpiler/emit_context.py +49 -0
- pulse/transpiler/errors.py +96 -0
- pulse/transpiler/function.py +611 -0
- pulse/transpiler/id.py +18 -0
- pulse/transpiler/imports.py +341 -0
- pulse/transpiler/js_module.py +336 -0
- pulse/transpiler/modules/__init__.py +33 -0
- pulse/transpiler/modules/asyncio.py +57 -0
- pulse/transpiler/modules/json.py +24 -0
- pulse/transpiler/modules/math.py +265 -0
- pulse/transpiler/modules/pulse/__init__.py +5 -0
- pulse/transpiler/modules/pulse/tags.py +250 -0
- pulse/transpiler/modules/typing.py +63 -0
- pulse/transpiler/nodes.py +1987 -0
- pulse/transpiler/py_module.py +135 -0
- pulse/transpiler/transpiler.py +1100 -0
- pulse/transpiler/vdom.py +256 -0
- pulse/types/__init__.py +0 -0
- pulse/types/event_handler.py +50 -0
- pulse/user_session.py +386 -0
- pulse/version.py +69 -0
- pulse_framework-0.1.62.dist-info/METADATA +198 -0
- pulse_framework-0.1.62.dist-info/RECORD +126 -0
- pulse_framework-0.1.62.dist-info/WHEEL +4 -0
- pulse_framework-0.1.62.dist-info/entry_points.txt +3 -0
pulse/dom/svg.py
ADDED
|
File without changes
|
pulse/dom/tags.py
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
from typing import Any, ParamSpec
|
|
2
|
+
|
|
3
|
+
from pulse.transpiler.nodes import Element, Node
|
|
4
|
+
|
|
5
|
+
P = ParamSpec("P")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def define_tag(name: str, default_props: dict[str, Any] | None = None):
|
|
9
|
+
"""
|
|
10
|
+
Define a standard HTML tag that creates UITreeNode instances.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
name: The tag name (e.g., "div", "span")
|
|
14
|
+
default_props: Default props to apply to all instances
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
A function that creates UITreeNode instances
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def create_element(*children: Node, **props: Any) -> Element:
|
|
21
|
+
"""Create a UI element for this tag."""
|
|
22
|
+
if default_props:
|
|
23
|
+
props = default_props | props
|
|
24
|
+
key = props.pop("key", None)
|
|
25
|
+
child_list = list(children) if children else None
|
|
26
|
+
return Element(tag=name, key=key, props=props or None, children=child_list)
|
|
27
|
+
|
|
28
|
+
return create_element
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def define_self_closing_tag(name: str, default_props: dict[str, Any] | None = None):
|
|
32
|
+
"""
|
|
33
|
+
Define a self-closing HTML tag that creates UITreeNode instances.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
name: The tag name (e.g., "br", "img")
|
|
37
|
+
default_props: Default props to apply to all instances
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
A function that creates UITreeNode instances (no children allowed)
|
|
41
|
+
"""
|
|
42
|
+
default_props = default_props
|
|
43
|
+
|
|
44
|
+
def create_element(**props: Any) -> Element:
|
|
45
|
+
"""Create a self-closing UI element for this tag."""
|
|
46
|
+
if default_props:
|
|
47
|
+
props = default_props | props
|
|
48
|
+
key = props.pop("key", None)
|
|
49
|
+
return Element(
|
|
50
|
+
tag=name,
|
|
51
|
+
key=key,
|
|
52
|
+
props=props or None,
|
|
53
|
+
children=None,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
return create_element
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
a = define_tag("a")
|
|
60
|
+
abbr = define_tag("abbr")
|
|
61
|
+
address = define_tag("address")
|
|
62
|
+
article = define_tag("article")
|
|
63
|
+
aside = define_tag("aside")
|
|
64
|
+
audio = define_tag("audio")
|
|
65
|
+
b = define_tag("b")
|
|
66
|
+
bdi = define_tag("bdi")
|
|
67
|
+
bdo = define_tag("bdo")
|
|
68
|
+
blockquote = define_tag("blockquote")
|
|
69
|
+
body = define_tag("body")
|
|
70
|
+
button = define_tag("button")
|
|
71
|
+
canvas = define_tag("canvas")
|
|
72
|
+
caption = define_tag("caption")
|
|
73
|
+
cite = define_tag("cite")
|
|
74
|
+
code = define_tag("code")
|
|
75
|
+
colgroup = define_tag("colgroup")
|
|
76
|
+
data = define_tag("data")
|
|
77
|
+
datalist = define_tag("datalist")
|
|
78
|
+
dd = define_tag("dd")
|
|
79
|
+
del_ = define_tag("del")
|
|
80
|
+
details = define_tag("details")
|
|
81
|
+
dfn = define_tag("dfn")
|
|
82
|
+
dialog = define_tag("dialog")
|
|
83
|
+
div = define_tag("div")
|
|
84
|
+
dl = define_tag("dl")
|
|
85
|
+
dt = define_tag("dt")
|
|
86
|
+
em = define_tag("em")
|
|
87
|
+
fieldset = define_tag("fieldset")
|
|
88
|
+
figcaption = define_tag("figcaption")
|
|
89
|
+
figure = define_tag("figure")
|
|
90
|
+
footer = define_tag("footer")
|
|
91
|
+
form = define_tag("form", {"method": "POST"})
|
|
92
|
+
h1 = define_tag("h1")
|
|
93
|
+
h2 = define_tag("h2")
|
|
94
|
+
h3 = define_tag("h3")
|
|
95
|
+
h4 = define_tag("h4")
|
|
96
|
+
h5 = define_tag("h5")
|
|
97
|
+
h6 = define_tag("h6")
|
|
98
|
+
head = define_tag("head")
|
|
99
|
+
header = define_tag("header")
|
|
100
|
+
hgroup = define_tag("hgroup")
|
|
101
|
+
html = define_tag("html")
|
|
102
|
+
i = define_tag("i")
|
|
103
|
+
iframe = define_tag("iframe")
|
|
104
|
+
ins = define_tag("ins")
|
|
105
|
+
kbd = define_tag("kbd")
|
|
106
|
+
label = define_tag("label")
|
|
107
|
+
legend = define_tag("legend")
|
|
108
|
+
li = define_tag("li")
|
|
109
|
+
main = define_tag("main")
|
|
110
|
+
map_ = define_tag("map")
|
|
111
|
+
mark = define_tag("mark")
|
|
112
|
+
menu = define_tag("menu")
|
|
113
|
+
meter = define_tag("meter")
|
|
114
|
+
nav = define_tag("nav")
|
|
115
|
+
noscript = define_tag("noscript")
|
|
116
|
+
object_ = define_tag("object")
|
|
117
|
+
ol = define_tag("ol")
|
|
118
|
+
optgroup = define_tag("optgroup")
|
|
119
|
+
option = define_tag("option")
|
|
120
|
+
output = define_tag("output")
|
|
121
|
+
p = define_tag("p")
|
|
122
|
+
picture = define_tag("picture")
|
|
123
|
+
pre = define_tag("pre")
|
|
124
|
+
progress = define_tag("progress")
|
|
125
|
+
q = define_tag("q")
|
|
126
|
+
rp = define_tag("rp")
|
|
127
|
+
rt = define_tag("rt")
|
|
128
|
+
ruby = define_tag("ruby")
|
|
129
|
+
s = define_tag("s")
|
|
130
|
+
samp = define_tag("samp")
|
|
131
|
+
script = define_tag("script", {"type": "text/javascript"})
|
|
132
|
+
section = define_tag("section")
|
|
133
|
+
select = define_tag("select")
|
|
134
|
+
small = define_tag("small")
|
|
135
|
+
span = define_tag("span")
|
|
136
|
+
strong = define_tag("strong")
|
|
137
|
+
style = define_tag("style", {"type": "text/css"})
|
|
138
|
+
sub = define_tag("sub")
|
|
139
|
+
summary = define_tag("summary")
|
|
140
|
+
sup = define_tag("sup")
|
|
141
|
+
table = define_tag("table")
|
|
142
|
+
tbody = define_tag("tbody")
|
|
143
|
+
td = define_tag("td")
|
|
144
|
+
template = define_tag("template")
|
|
145
|
+
textarea = define_tag("textarea")
|
|
146
|
+
tfoot = define_tag("tfoot")
|
|
147
|
+
th = define_tag("th")
|
|
148
|
+
thead = define_tag("thead")
|
|
149
|
+
time = define_tag("time")
|
|
150
|
+
title = define_tag("title")
|
|
151
|
+
tr = define_tag("tr")
|
|
152
|
+
u = define_tag("u")
|
|
153
|
+
ul = define_tag("ul")
|
|
154
|
+
var = define_tag("var")
|
|
155
|
+
video = define_tag("video")
|
|
156
|
+
|
|
157
|
+
# Self-closing tags
|
|
158
|
+
area = define_self_closing_tag("area")
|
|
159
|
+
base = define_self_closing_tag("base")
|
|
160
|
+
br = define_self_closing_tag("br")
|
|
161
|
+
col = define_self_closing_tag("col")
|
|
162
|
+
embed = define_self_closing_tag("embed")
|
|
163
|
+
hr = define_self_closing_tag("hr")
|
|
164
|
+
img = define_self_closing_tag("img")
|
|
165
|
+
input = define_self_closing_tag("input")
|
|
166
|
+
link = define_self_closing_tag("link")
|
|
167
|
+
meta = define_self_closing_tag("meta")
|
|
168
|
+
param = define_self_closing_tag("param")
|
|
169
|
+
source = define_self_closing_tag("source")
|
|
170
|
+
track = define_self_closing_tag("track")
|
|
171
|
+
wbr = define_self_closing_tag("wbr")
|
|
172
|
+
|
|
173
|
+
# React fragment
|
|
174
|
+
fragment = define_tag("")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# SVG tags
|
|
178
|
+
svg = define_tag("svg")
|
|
179
|
+
circle = define_tag("circle")
|
|
180
|
+
ellipse = define_tag("ellipse")
|
|
181
|
+
g = define_tag("g")
|
|
182
|
+
line = define_tag("line")
|
|
183
|
+
path = define_tag("path")
|
|
184
|
+
polygon = define_tag("polygon")
|
|
185
|
+
polyline = define_tag("polyline")
|
|
186
|
+
rect = define_tag("rect")
|
|
187
|
+
text = define_tag("text")
|
|
188
|
+
tspan = define_tag("tspan")
|
|
189
|
+
defs = define_tag("defs")
|
|
190
|
+
clipPath = define_tag("clipPath")
|
|
191
|
+
mask = define_tag("mask")
|
|
192
|
+
pattern = define_tag("pattern")
|
|
193
|
+
use = define_tag("use")
|
|
194
|
+
|
|
195
|
+
# Lists of tag names/default props (referenced by JS transpiler builtins)
|
|
196
|
+
TAGS = [
|
|
197
|
+
("a", None),
|
|
198
|
+
("abbr", None),
|
|
199
|
+
("address", None),
|
|
200
|
+
("article", None),
|
|
201
|
+
("aside", None),
|
|
202
|
+
("audio", None),
|
|
203
|
+
("b", None),
|
|
204
|
+
("bdi", None),
|
|
205
|
+
("bdo", None),
|
|
206
|
+
("blockquote", None),
|
|
207
|
+
("body", None),
|
|
208
|
+
("button", None),
|
|
209
|
+
("canvas", None),
|
|
210
|
+
("caption", None),
|
|
211
|
+
("cite", None),
|
|
212
|
+
("code", None),
|
|
213
|
+
("colgroup", None),
|
|
214
|
+
("data", None),
|
|
215
|
+
("datalist", None),
|
|
216
|
+
("dd", None),
|
|
217
|
+
("del", None),
|
|
218
|
+
("details", None),
|
|
219
|
+
("dfn", None),
|
|
220
|
+
("dialog", None),
|
|
221
|
+
("div", None),
|
|
222
|
+
("dl", None),
|
|
223
|
+
("dt", None),
|
|
224
|
+
("em", None),
|
|
225
|
+
("fieldset", None),
|
|
226
|
+
("figcaption", None),
|
|
227
|
+
("figure", None),
|
|
228
|
+
("footer", None),
|
|
229
|
+
("form", {"method": "POST"}),
|
|
230
|
+
("h1", None),
|
|
231
|
+
("h2", None),
|
|
232
|
+
("h3", None),
|
|
233
|
+
("h4", None),
|
|
234
|
+
("h5", None),
|
|
235
|
+
("h6", None),
|
|
236
|
+
("head", None),
|
|
237
|
+
("header", None),
|
|
238
|
+
("hgroup", None),
|
|
239
|
+
("html", None),
|
|
240
|
+
("i", None),
|
|
241
|
+
("iframe", None),
|
|
242
|
+
("ins", None),
|
|
243
|
+
("kbd", None),
|
|
244
|
+
("label", None),
|
|
245
|
+
("legend", None),
|
|
246
|
+
("li", None),
|
|
247
|
+
("main", None),
|
|
248
|
+
("map", None),
|
|
249
|
+
("mark", None),
|
|
250
|
+
("menu", None),
|
|
251
|
+
("meter", None),
|
|
252
|
+
("nav", None),
|
|
253
|
+
("noscript", None),
|
|
254
|
+
("object", None),
|
|
255
|
+
("ol", None),
|
|
256
|
+
("optgroup", None),
|
|
257
|
+
("option", None),
|
|
258
|
+
("output", None),
|
|
259
|
+
("p", None),
|
|
260
|
+
("picture", None),
|
|
261
|
+
("pre", None),
|
|
262
|
+
("progress", None),
|
|
263
|
+
("q", None),
|
|
264
|
+
("rp", None),
|
|
265
|
+
("rt", None),
|
|
266
|
+
("ruby", None),
|
|
267
|
+
("s", None),
|
|
268
|
+
("samp", None),
|
|
269
|
+
("script", {"type": "text/javascript"}),
|
|
270
|
+
("section", None),
|
|
271
|
+
("select", None),
|
|
272
|
+
("small", None),
|
|
273
|
+
("span", None),
|
|
274
|
+
("strong", None),
|
|
275
|
+
("style", {"type": "text/css"}),
|
|
276
|
+
("sub", None),
|
|
277
|
+
("summary", None),
|
|
278
|
+
("sup", None),
|
|
279
|
+
("table", None),
|
|
280
|
+
("tbody", None),
|
|
281
|
+
("td", None),
|
|
282
|
+
("template", None),
|
|
283
|
+
("textarea", None),
|
|
284
|
+
("tfoot", None),
|
|
285
|
+
("th", None),
|
|
286
|
+
("thead", None),
|
|
287
|
+
("time", None),
|
|
288
|
+
("title", None),
|
|
289
|
+
("tr", None),
|
|
290
|
+
("u", None),
|
|
291
|
+
("ul", None),
|
|
292
|
+
("var", None),
|
|
293
|
+
("video", None),
|
|
294
|
+
# SVG tags
|
|
295
|
+
("svg", None),
|
|
296
|
+
("circle", None),
|
|
297
|
+
("ellipse", None),
|
|
298
|
+
("g", None),
|
|
299
|
+
("line", None),
|
|
300
|
+
("path", None),
|
|
301
|
+
("polygon", None),
|
|
302
|
+
("polyline", None),
|
|
303
|
+
("rect", None),
|
|
304
|
+
("text", None),
|
|
305
|
+
("tspan", None),
|
|
306
|
+
("defs", None),
|
|
307
|
+
("clipPath", None),
|
|
308
|
+
("mask", None),
|
|
309
|
+
("pattern", None),
|
|
310
|
+
("use", None),
|
|
311
|
+
]
|
|
312
|
+
|
|
313
|
+
SELF_CLOSING_TAGS = [
|
|
314
|
+
("area", None),
|
|
315
|
+
("base", None),
|
|
316
|
+
("br", None),
|
|
317
|
+
("col", None),
|
|
318
|
+
("embed", None),
|
|
319
|
+
("hr", None),
|
|
320
|
+
("img", None),
|
|
321
|
+
("input", None),
|
|
322
|
+
("link", None),
|
|
323
|
+
("meta", None),
|
|
324
|
+
("param", None),
|
|
325
|
+
("source", None),
|
|
326
|
+
("track", None),
|
|
327
|
+
("wbr", None),
|
|
328
|
+
]
|