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.
Files changed (126) hide show
  1. pulse/__init__.py +1493 -0
  2. pulse/_examples.py +29 -0
  3. pulse/app.py +1086 -0
  4. pulse/channel.py +607 -0
  5. pulse/cli/__init__.py +0 -0
  6. pulse/cli/cmd.py +575 -0
  7. pulse/cli/dependencies.py +181 -0
  8. pulse/cli/folder_lock.py +134 -0
  9. pulse/cli/helpers.py +271 -0
  10. pulse/cli/logging.py +102 -0
  11. pulse/cli/models.py +35 -0
  12. pulse/cli/packages.py +262 -0
  13. pulse/cli/processes.py +292 -0
  14. pulse/cli/secrets.py +39 -0
  15. pulse/cli/uvicorn_log_config.py +87 -0
  16. pulse/code_analysis.py +38 -0
  17. pulse/codegen/__init__.py +0 -0
  18. pulse/codegen/codegen.py +359 -0
  19. pulse/codegen/templates/__init__.py +0 -0
  20. pulse/codegen/templates/layout.py +106 -0
  21. pulse/codegen/templates/route.py +345 -0
  22. pulse/codegen/templates/routes_ts.py +42 -0
  23. pulse/codegen/utils.py +20 -0
  24. pulse/component.py +237 -0
  25. pulse/components/__init__.py +0 -0
  26. pulse/components/for_.py +83 -0
  27. pulse/components/if_.py +86 -0
  28. pulse/components/react_router.py +94 -0
  29. pulse/context.py +108 -0
  30. pulse/cookies.py +322 -0
  31. pulse/decorators.py +344 -0
  32. pulse/dom/__init__.py +0 -0
  33. pulse/dom/elements.py +1024 -0
  34. pulse/dom/events.py +445 -0
  35. pulse/dom/props.py +1250 -0
  36. pulse/dom/svg.py +0 -0
  37. pulse/dom/tags.py +328 -0
  38. pulse/dom/tags.pyi +480 -0
  39. pulse/env.py +178 -0
  40. pulse/form.py +538 -0
  41. pulse/helpers.py +541 -0
  42. pulse/hooks/__init__.py +0 -0
  43. pulse/hooks/core.py +452 -0
  44. pulse/hooks/effects.py +88 -0
  45. pulse/hooks/init.py +668 -0
  46. pulse/hooks/runtime.py +464 -0
  47. pulse/hooks/setup.py +254 -0
  48. pulse/hooks/stable.py +138 -0
  49. pulse/hooks/state.py +192 -0
  50. pulse/js/__init__.py +125 -0
  51. pulse/js/__init__.pyi +115 -0
  52. pulse/js/_types.py +299 -0
  53. pulse/js/array.py +339 -0
  54. pulse/js/console.py +50 -0
  55. pulse/js/date.py +119 -0
  56. pulse/js/document.py +145 -0
  57. pulse/js/error.py +140 -0
  58. pulse/js/json.py +66 -0
  59. pulse/js/map.py +97 -0
  60. pulse/js/math.py +69 -0
  61. pulse/js/navigator.py +79 -0
  62. pulse/js/number.py +57 -0
  63. pulse/js/obj.py +81 -0
  64. pulse/js/object.py +172 -0
  65. pulse/js/promise.py +172 -0
  66. pulse/js/pulse.py +115 -0
  67. pulse/js/react.py +495 -0
  68. pulse/js/regexp.py +57 -0
  69. pulse/js/set.py +124 -0
  70. pulse/js/string.py +38 -0
  71. pulse/js/weakmap.py +53 -0
  72. pulse/js/weakset.py +48 -0
  73. pulse/js/window.py +205 -0
  74. pulse/messages.py +202 -0
  75. pulse/middleware.py +471 -0
  76. pulse/plugin.py +96 -0
  77. pulse/proxy.py +242 -0
  78. pulse/py.typed +0 -0
  79. pulse/queries/__init__.py +0 -0
  80. pulse/queries/client.py +609 -0
  81. pulse/queries/common.py +101 -0
  82. pulse/queries/effect.py +55 -0
  83. pulse/queries/infinite_query.py +1418 -0
  84. pulse/queries/mutation.py +295 -0
  85. pulse/queries/protocol.py +136 -0
  86. pulse/queries/query.py +1314 -0
  87. pulse/queries/store.py +120 -0
  88. pulse/react_component.py +88 -0
  89. pulse/reactive.py +1208 -0
  90. pulse/reactive_extensions.py +1172 -0
  91. pulse/render_session.py +768 -0
  92. pulse/renderer.py +584 -0
  93. pulse/request.py +205 -0
  94. pulse/routing.py +598 -0
  95. pulse/serializer.py +279 -0
  96. pulse/state.py +556 -0
  97. pulse/test_helpers.py +15 -0
  98. pulse/transpiler/__init__.py +111 -0
  99. pulse/transpiler/assets.py +81 -0
  100. pulse/transpiler/builtins.py +1029 -0
  101. pulse/transpiler/dynamic_import.py +130 -0
  102. pulse/transpiler/emit_context.py +49 -0
  103. pulse/transpiler/errors.py +96 -0
  104. pulse/transpiler/function.py +611 -0
  105. pulse/transpiler/id.py +18 -0
  106. pulse/transpiler/imports.py +341 -0
  107. pulse/transpiler/js_module.py +336 -0
  108. pulse/transpiler/modules/__init__.py +33 -0
  109. pulse/transpiler/modules/asyncio.py +57 -0
  110. pulse/transpiler/modules/json.py +24 -0
  111. pulse/transpiler/modules/math.py +265 -0
  112. pulse/transpiler/modules/pulse/__init__.py +5 -0
  113. pulse/transpiler/modules/pulse/tags.py +250 -0
  114. pulse/transpiler/modules/typing.py +63 -0
  115. pulse/transpiler/nodes.py +1987 -0
  116. pulse/transpiler/py_module.py +135 -0
  117. pulse/transpiler/transpiler.py +1100 -0
  118. pulse/transpiler/vdom.py +256 -0
  119. pulse/types/__init__.py +0 -0
  120. pulse/types/event_handler.py +50 -0
  121. pulse/user_session.py +386 -0
  122. pulse/version.py +69 -0
  123. pulse_framework-0.1.62.dist-info/METADATA +198 -0
  124. pulse_framework-0.1.62.dist-info/RECORD +126 -0
  125. pulse_framework-0.1.62.dist-info/WHEEL +4 -0
  126. 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
+ ]