instaui 0.1.14__tar.gz → 0.1.16__tar.gz

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 (290) hide show
  1. {instaui-0.1.14 → instaui-0.1.16}/PKG-INFO +1 -2
  2. instaui-0.1.16/instaui/action/__init__.py +10 -0
  3. instaui-0.1.16/instaui/action/cookie.py +25 -0
  4. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/radio.py +19 -6
  5. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/radio_group.py +2 -3
  6. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/slider.py +1 -1
  7. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/component.py +2 -0
  8. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/element.py +17 -4
  9. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/__init__.py +2 -0
  10. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/label.py +9 -7
  11. instaui-0.1.16/instaui/components/html/radio.py +37 -0
  12. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/match.py +2 -0
  13. instaui-0.1.16/instaui/components/timer/timer.js +48 -0
  14. instaui-0.1.16/instaui/components/timer/timer.py +94 -0
  15. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/vfor.py +2 -0
  16. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/vif.py +5 -1
  17. {instaui-0.1.14 → instaui-0.1.16}/instaui/event/js_event.py +2 -0
  18. {instaui-0.1.14 → instaui-0.1.16}/instaui/event/vue_event.py +3 -0
  19. {instaui-0.1.14 → instaui-0.1.16}/instaui/event/web_event.py +3 -0
  20. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/scope.py +18 -4
  21. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/insta-ui.esm-browser.prod.js +3717 -3717
  22. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/insta-ui.js.map +1 -1
  23. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui/__init__.py +2 -2
  24. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui/__init__.pyi +2 -2
  25. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/js_computed.py +16 -1
  26. instaui-0.1.16/instaui/vars/mixin_types/element_binding.py +22 -0
  27. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/path_var.py +3 -3
  28. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/vue_computed.py +17 -1
  29. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/web_computed.py +17 -5
  30. {instaui-0.1.14 → instaui-0.1.16}/instaui/watch/js_watch.py +2 -0
  31. {instaui-0.1.14 → instaui-0.1.16}/instaui/watch/web_watch.py +2 -0
  32. {instaui-0.1.14 → instaui-0.1.16}/pyproject.toml +2 -16
  33. instaui-0.1.14/instaui/vars/mixin_types/element_binding.py +0 -10
  34. {instaui-0.1.14 → instaui-0.1.16}/.gitignore +0 -0
  35. {instaui-0.1.14 → instaui-0.1.16}/LICENSE +0 -0
  36. {instaui-0.1.14 → instaui-0.1.16}/README.md +0 -0
  37. {instaui-0.1.14 → instaui-0.1.16}/instaui/__init__.py +0 -0
  38. {instaui-0.1.14 → instaui-0.1.16}/instaui/_helper/observable_helper.py +0 -0
  39. {instaui-0.1.14/instaui/ui_functions → instaui-0.1.16/instaui/action}/url_location.py +0 -0
  40. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/__init__.py +0 -0
  41. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/_settings.py +0 -0
  42. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/_use_tools/locale.py +0 -0
  43. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/component_types.py +0 -0
  44. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/_utils.py +0 -0
  45. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/affix.py +0 -0
  46. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/alert.py +0 -0
  47. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/anchor.py +0 -0
  48. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/auto_complete.py +0 -0
  49. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/avatar.py +0 -0
  50. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/back_top.py +0 -0
  51. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/badge.py +0 -0
  52. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/breadcrumb.py +0 -0
  53. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/button.py +0 -0
  54. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/calendar.py +0 -0
  55. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/card.py +0 -0
  56. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/carousel.py +0 -0
  57. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/cascader.py +0 -0
  58. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/checkbox.py +0 -0
  59. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/collapse.py +0 -0
  60. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/color_picker.py +0 -0
  61. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/comment.py +0 -0
  62. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/config_provider.py +0 -0
  63. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/date_picker.py +0 -0
  64. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/descriptions.py +0 -0
  65. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/divider.py +0 -0
  66. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/drawer.py +0 -0
  67. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/dropdown.py +0 -0
  68. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/empty.py +0 -0
  69. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/form.py +0 -0
  70. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/icon.py +0 -0
  71. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/image.py +0 -0
  72. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/input.py +0 -0
  73. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/input_number.py +0 -0
  74. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/input_password.py +0 -0
  75. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/input_search.py +0 -0
  76. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/input_tag.py +0 -0
  77. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/layout.py +0 -0
  78. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/layout_content.py +0 -0
  79. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/layout_footer.py +0 -0
  80. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/layout_header.py +0 -0
  81. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/layout_sider.py +0 -0
  82. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/link.py +0 -0
  83. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/list.py +0 -0
  84. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/mention.py +0 -0
  85. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/menu.py +0 -0
  86. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/modal.py +0 -0
  87. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/overflow_list.py +0 -0
  88. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/page_header.py +0 -0
  89. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/pagination.py +0 -0
  90. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/pop_confirm.py +0 -0
  91. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/popover.py +0 -0
  92. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/progress.py +0 -0
  93. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/rate.py +0 -0
  94. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/resize_box.py +0 -0
  95. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/result.py +0 -0
  96. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/select.py +0 -0
  97. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/skeleton.py +0 -0
  98. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/space.py +0 -0
  99. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/spin.py +0 -0
  100. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/split.py +0 -0
  101. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/statistic.py +0 -0
  102. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/steps.py +0 -0
  103. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/switch.py +0 -0
  104. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tab_pane.py +0 -0
  105. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/table.py +0 -0
  106. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tabs.py +0 -0
  107. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tag.py +0 -0
  108. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/textarea.py +0 -0
  109. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/time_picker.py +0 -0
  110. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/timeline.py +0 -0
  111. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tooltip.py +0 -0
  112. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/transfer.py +0 -0
  113. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tree.py +0 -0
  114. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/tree_select.py +0 -0
  115. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/trigger.py +0 -0
  116. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/typography.py +0 -0
  117. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/upload.py +0 -0
  118. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/verification_code.py +0 -0
  119. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/components/watermark.py +0 -0
  120. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/locales/__init__.py +0 -0
  121. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/locales/_index.py +0 -0
  122. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/locales/en_us.py +0 -0
  123. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/locales/zh_cn.py +0 -0
  124. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/setup.py +0 -0
  125. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/static/instaui-arco.css +0 -0
  126. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/static/instaui-arco.js +0 -0
  127. {instaui-0.1.14 → instaui-0.1.16}/instaui/arco/types.py +0 -0
  128. {instaui-0.1.14 → instaui-0.1.16}/instaui/boot_info.py +0 -0
  129. {instaui-0.1.14 → instaui-0.1.16}/instaui/common/jsonable.py +0 -0
  130. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/__init__.py +0 -0
  131. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/column.py +0 -0
  132. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/content.py +0 -0
  133. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/directive.py +0 -0
  134. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/grid.py +0 -0
  135. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/_mixins.py +0 -0
  136. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/_preset.py +0 -0
  137. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/button.py +0 -0
  138. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/checkbox.py +0 -0
  139. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/date.py +0 -0
  140. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/div.py +0 -0
  141. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/form.py +0 -0
  142. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/heading.py +0 -0
  143. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/input.py +0 -0
  144. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/li.py +0 -0
  145. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/link.py +0 -0
  146. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/number.py +0 -0
  147. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/paragraph.py +0 -0
  148. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/range.py +0 -0
  149. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/select.py +0 -0
  150. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/span.py +0 -0
  151. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/table.py +0 -0
  152. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/textarea.py +0 -0
  153. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/html/ul.py +0 -0
  154. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/label.py +0 -0
  155. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/markdown/markdown.js +0 -0
  156. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/markdown/markdown.py +0 -0
  157. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/markdown/static/github-markdown.css +0 -0
  158. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/markdown/static/marked.esm.js +0 -0
  159. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/row.py +0 -0
  160. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/shiki_code.js +0 -0
  161. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/shiki_code.py +0 -0
  162. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/langs/css.mjs +0 -0
  163. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/langs/markdown.mjs +0 -0
  164. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/langs/python.mjs +0 -0
  165. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/langs/shell.mjs +0 -0
  166. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/langs/shellscript.mjs +0 -0
  167. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/shiki-core.js +0 -0
  168. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/shiki-style.css +0 -0
  169. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/shiki-transformers.js +0 -0
  170. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/themes/vitesse-dark.mjs +0 -0
  171. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/shiki_code/static/themes/vitesse-light.mjs +0 -0
  172. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/slot.py +0 -0
  173. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/transition_group.py +0 -0
  174. {instaui-0.1.14 → instaui-0.1.16}/instaui/components/value_element.py +0 -0
  175. {instaui-0.1.14 → instaui-0.1.16}/instaui/consts.py +0 -0
  176. {instaui-0.1.14 → instaui-0.1.16}/instaui/dependencies/component_dependency.py +0 -0
  177. {instaui-0.1.14 → instaui-0.1.16}/instaui/dependencies/plugin_dependency.py +0 -0
  178. {instaui-0.1.14 → instaui-0.1.16}/instaui/event/event_mixin.py +0 -0
  179. {instaui-0.1.14 → instaui-0.1.16}/instaui/experimental/__init__.py +0 -0
  180. {instaui-0.1.14 → instaui-0.1.16}/instaui/experimental/debug.py +0 -0
  181. {instaui-0.1.14 → instaui-0.1.16}/instaui/extra_libs/_echarts.py +0 -0
  182. {instaui-0.1.14 → instaui-0.1.16}/instaui/extra_libs/_import_error.py +0 -0
  183. {instaui-0.1.14 → instaui-0.1.16}/instaui/extra_libs/_mermaid.py +0 -0
  184. {instaui-0.1.14 → instaui-0.1.16}/instaui/extra_libs/_shiki_code.py +0 -0
  185. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/_utils.py +0 -0
  186. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/_uvicorn.py +0 -0
  187. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/debug_mode_router.py +0 -0
  188. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/dependency_router.py +0 -0
  189. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/event_router.py +0 -0
  190. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/middlewares.py +0 -0
  191. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/request_context.py +0 -0
  192. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/resource.py +0 -0
  193. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/server.py +0 -0
  194. {instaui-0.1.14 → instaui-0.1.16}/instaui/fastapi_server/watch_router.py +0 -0
  195. {instaui-0.1.14 → instaui-0.1.16}/instaui/handlers/_utils.py +0 -0
  196. {instaui-0.1.14 → instaui-0.1.16}/instaui/handlers/event_handler.py +0 -0
  197. {instaui-0.1.14 → instaui-0.1.16}/instaui/handlers/watch_handler.py +0 -0
  198. {instaui-0.1.14 → instaui-0.1.16}/instaui/html_tools.py +0 -0
  199. {instaui-0.1.14 → instaui-0.1.16}/instaui/inject.py +0 -0
  200. {instaui-0.1.14 → instaui-0.1.16}/instaui/js/__init__.py +0 -0
  201. {instaui-0.1.14 → instaui-0.1.16}/instaui/js/js_output.py +0 -0
  202. {instaui-0.1.14 → instaui-0.1.16}/instaui/js/lambda_func.py +0 -0
  203. {instaui-0.1.14 → instaui-0.1.16}/instaui/launch_collector.py +0 -0
  204. {instaui-0.1.14 → instaui-0.1.16}/instaui/page_info.py +0 -0
  205. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/__init__.py +0 -0
  206. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/_app.py +0 -0
  207. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/_inner_helper.py +0 -0
  208. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/_link_manager.py +0 -0
  209. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/context.py +0 -0
  210. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/dataclass.py +0 -0
  211. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/resource.py +0 -0
  212. {instaui-0.1.14 → instaui-0.1.16}/instaui/runtime/ui_state_scope.py +0 -0
  213. {instaui-0.1.14 → instaui-0.1.16}/instaui/settings/__init__.py +0 -0
  214. {instaui-0.1.14 → instaui-0.1.16}/instaui/settings/__settings.py +0 -0
  215. {instaui-0.1.14 → instaui-0.1.16}/instaui/shadcn_classless/_index.py +0 -0
  216. {instaui-0.1.14 → instaui-0.1.16}/instaui/shadcn_classless/static/shadcn-classless.css +0 -0
  217. {instaui-0.1.14 → instaui-0.1.16}/instaui/skip.py +0 -0
  218. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/__init__.py +0 -0
  219. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_components.py +0 -0
  220. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_file_base_utils.py +0 -0
  221. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_functions.py +0 -0
  222. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_install.py +0 -0
  223. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_route_model.py +0 -0
  224. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_router_box.py +0 -0
  225. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_router_output.py +0 -0
  226. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_router_param_var.py +0 -0
  227. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/_types.py +0 -0
  228. {instaui-0.1.14 → instaui-0.1.16}/instaui/spa_router/templates/page_routes +0 -0
  229. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/insta-ui.css +0 -0
  230. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/insta-ui.ico +0 -0
  231. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/instaui-tools-browser.js +0 -0
  232. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/templates/debug/sse.html +0 -0
  233. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/templates/web.html +0 -0
  234. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/templates/webview.html +0 -0
  235. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/templates/zero.html +0 -0
  236. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/vue.esm-browser.prod.js +0 -0
  237. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/vue.global.prod.js +0 -0
  238. {instaui-0.1.14 → instaui-0.1.16}/instaui/static/vue.runtime.esm-browser.prod.js +0 -0
  239. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/file_system.py +0 -0
  240. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/func_system.py +0 -0
  241. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/js_system.py +0 -0
  242. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/module_system.py +0 -0
  243. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/pydantic_system.py +0 -0
  244. {instaui-0.1.14 → instaui-0.1.16}/instaui/systems/string_system.py +0 -0
  245. {instaui-0.1.14 → instaui-0.1.16}/instaui/tailwind/__init__.py +0 -0
  246. {instaui-0.1.14 → instaui-0.1.16}/instaui/tailwind/_index.py +0 -0
  247. {instaui-0.1.14 → instaui-0.1.16}/instaui/tailwind/static/tailwindcss-v3.min.js +0 -0
  248. {instaui-0.1.14 → instaui-0.1.16}/instaui/tailwind/static/tailwindcss-v4.min.js +0 -0
  249. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/__init__.py +0 -0
  250. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/_utils.py +0 -0
  251. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/env.py +0 -0
  252. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/web_template.py +0 -0
  253. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/webview_template.py +0 -0
  254. {instaui-0.1.14 → instaui-0.1.16}/instaui/template/zero_template.py +0 -0
  255. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui/events.py +0 -0
  256. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui_functions/input_slient_data.py +0 -0
  257. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui_functions/server.py +0 -0
  258. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui_functions/str_format.py +0 -0
  259. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui_functions/ui_page.py +0 -0
  260. {instaui-0.1.14 → instaui-0.1.16}/instaui/ui_functions/ui_types.py +0 -0
  261. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/_types.py +0 -0
  262. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/data.py +0 -0
  263. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/element_ref.py +0 -0
  264. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/event_context.py +0 -0
  265. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/event_extend.py +0 -0
  266. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/common_type.py +0 -0
  267. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/observable.py +0 -0
  268. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/pathable.py +0 -0
  269. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/py_binding.py +0 -0
  270. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/str_format_binding.py +0 -0
  271. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/mixin_types/var_type.py +0 -0
  272. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/ref.py +0 -0
  273. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/slot_prop.py +0 -0
  274. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/state.py +0 -0
  275. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/types.py +0 -0
  276. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/vfor_item.py +0 -0
  277. {instaui-0.1.14 → instaui-0.1.16}/instaui/vars/web_view_computed.py +0 -0
  278. {instaui-0.1.14 → instaui-0.1.16}/instaui/version.py +0 -0
  279. {instaui-0.1.14 → instaui-0.1.16}/instaui/watch/_types.py +0 -0
  280. {instaui-0.1.14 → instaui-0.1.16}/instaui/watch/_utils.py +0 -0
  281. {instaui-0.1.14 → instaui-0.1.16}/instaui/watch/vue_watch.py +0 -0
  282. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/__init__.py +0 -0
  283. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/_utils.py +0 -0
  284. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/api.py +0 -0
  285. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/func.py +0 -0
  286. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/index.py +0 -0
  287. {instaui-0.1.14 → instaui-0.1.16}/instaui/webview/resource.py +0 -0
  288. {instaui-0.1.14 → instaui-0.1.16}/instaui/zero/__init__.py +0 -0
  289. {instaui-0.1.14 → instaui-0.1.16}/instaui/zero/func.py +0 -0
  290. {instaui-0.1.14 → instaui-0.1.16}/instaui/zero/scope.py +0 -0
@@ -1,12 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instaui
3
- Version: 0.1.14
3
+ Version: 0.1.16
4
4
  Summary: insta-ui is a Python-based UI library for rapidly building user interfaces.
5
5
  Author-email: CrystalWindSnake <568166495@qq.com>
6
6
  License-Expression: MIT
7
7
  License-File: LICENSE
8
8
  Keywords: gui,ui,web
9
- Requires-Python: <3.13,>=3.8
10
9
  Requires-Dist: jinja2>=3.1.6
11
10
  Requires-Dist: orjson>=3.10.15
12
11
  Requires-Dist: pydantic>=2.10.6
@@ -0,0 +1,10 @@
1
+ __all__ = [
2
+ "url_location",
3
+ "set_cookie",
4
+ "cookie_output",
5
+ "cookie_input",
6
+ ]
7
+
8
+
9
+ from .url_location import UrlLocation as url_location
10
+ from .cookie import cookie_input, cookie_output, set_cookie
@@ -0,0 +1,25 @@
1
+ from datetime import datetime
2
+ from typing import Optional, Union
3
+ from instaui.runtime.context import get_context
4
+
5
+
6
+ def cookie_output():
7
+ if not get_context().app_mode == "web":
8
+ raise ValueError("cookie_output can only be used in web mode")
9
+
10
+
11
+ def cookie_input():
12
+ pass
13
+
14
+
15
+ def set_cookie(
16
+ key: str,
17
+ value: str,
18
+ *,
19
+ max_age: Optional[int] = None,
20
+ expires: Optional[Union[int, datetime]] = None,
21
+ secure: bool = False,
22
+ httponly: bool = False,
23
+ samesite: Optional[str] = None,
24
+ ):
25
+ pass
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import typing
2
3
  from typing_extensions import Unpack
3
4
  import pydantic
@@ -6,13 +7,16 @@ from instaui.vars.types import TMaybeRef
6
7
  from instaui.vars.state import StateModel
7
8
  from instaui.arco import component_types
8
9
  from instaui.event.event_mixin import EventMixin
9
- from ._utils import handle_props, try_setup_vmodel
10
+ from ._utils import handle_props
11
+ from .radio_group import RadioGroup
12
+
13
+ _TValue = typing.Union[str, float]
10
14
 
11
15
 
12
16
  class Radio(Element):
13
17
  def __init__(
14
18
  self,
15
- value: typing.Optional[TMaybeRef[typing.Union[str, int, bool, float]]] = None,
19
+ value: typing.Optional[TMaybeRef[_TValue]] = None,
16
20
  **kwargs: Unpack[component_types.TRadio],
17
21
  ):
18
22
  super().__init__("a-radio")
@@ -33,8 +37,17 @@ class Radio(Element):
33
37
  )
34
38
  return self
35
39
 
40
+ @staticmethod
41
+ def from_list(options: TMaybeRef[typing.List[_TValue]], value: TMaybeRef[_TValue]):
42
+ return RadioGroup(value=value, options=options) # type: ignore
43
+
44
+ @staticmethod
45
+ def from_options(
46
+ options: TMaybeRef[typing.List[RadioOption]], value: TMaybeRef[_TValue]
47
+ ):
48
+ return RadioGroup(value=value, options=options) # type: ignore
36
49
 
37
- class RadioOption(StateModel):
38
- label: str
39
- value: typing.Union[str, int]
40
- disabled: bool = pydantic.Field(default=False)
50
+ class RadioOption(StateModel):
51
+ label: str
52
+ value: typing.Union[str, int]
53
+ disabled: bool = pydantic.Field(default=False)
@@ -4,7 +4,6 @@ from instaui.components.element import Element
4
4
  from instaui.vars.types import TMaybeRef
5
5
  from instaui.event.event_mixin import EventMixin
6
6
  from ._utils import handle_props, try_setup_vmodel
7
- from .radio import RadioOption
8
7
 
9
8
 
10
9
  class TRadioGroup(TypedDict, total=False):
@@ -12,7 +11,7 @@ class TRadioGroup(TypedDict, total=False):
12
11
  default_value: typing.Union[str, int, bool]
13
12
  type: typing.Literal["radio", "button"]
14
13
  size: typing.Literal["mini", "small", "medium", "large"]
15
- options: typing.List[typing.Union[str, int, RadioOption]]
14
+ options: typing.List[typing.Union[str, int]]
16
15
  direction: typing.Literal["horizontal", "vertical"]
17
16
  disabled: bool
18
17
 
@@ -20,7 +19,7 @@ class TRadioGroup(TypedDict, total=False):
20
19
  class RadioGroup(Element):
21
20
  def __init__(
22
21
  self,
23
- value: typing.Optional[TMaybeRef[typing.Union[str, int, bool, float]]] = None,
22
+ value: typing.Optional[TMaybeRef[typing.Union[str, float]]] = None,
24
23
  **kwargs: Unpack[TRadioGroup],
25
24
  ):
26
25
  super().__init__("a-radio-group")
@@ -6,7 +6,7 @@ from instaui.arco import component_types
6
6
  from instaui.event.event_mixin import EventMixin
7
7
  from ._utils import handle_props, try_setup_vmodel
8
8
 
9
- _TSliderValue = typing.Union[int, float]
9
+ _TSliderValue = typing.Union[int, float, typing.List[int], typing.List[float]]
10
10
 
11
11
 
12
12
  class Slider(Element):
@@ -29,6 +29,8 @@ class Component(Jsonable):
29
29
  else str(tag)
30
30
  )
31
31
  )
32
+ if isinstance(tag, ElementBindingMixin):
33
+ tag._mark_used()
32
34
  self._slot_manager = SlotManager()
33
35
 
34
36
  get_app_slot().append_component_to_container(self)
@@ -97,10 +97,6 @@ class Element(Component):
97
97
  self._proxy_props: List[ElementBindingMixin] = []
98
98
 
99
99
  self._events: defaultdict[str, List[EventMixin]] = defaultdict(list)
100
-
101
- # self._js_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
102
- # self._web_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
103
- # self._vue_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
104
100
  self._directives: Dict[Directive, None] = {}
105
101
 
106
102
  self._slot_manager = SlotManager()
@@ -275,18 +271,28 @@ class Element(Component):
275
271
 
276
272
  if isinstance(add, dict):
277
273
  self._dict_classes.update(**add) # type: ignore
274
+ for value in (
275
+ v for v in add.values() if isinstance(v, ElementBindingMixin)
276
+ ):
277
+ value._mark_used()
278
278
 
279
279
  if isinstance(add, ElementBindingMixin):
280
280
  self._bind_str_classes.append(add) # type: ignore
281
+ add._mark_used()
281
282
 
282
283
  return self
283
284
 
284
285
  def style(self, add: Union[str, Dict[str, Any], TMaybeRef[str]]) -> Self:
285
286
  if isinstance(add, dict):
286
287
  add = {key: value for key, value in add.items()}
288
+ for value in (
289
+ v for v in add.values() if isinstance(v, ElementBindingMixin)
290
+ ):
291
+ value._mark_used()
287
292
 
288
293
  if isinstance(add, ElementBindingMixin):
289
294
  self._style_str_binds.append(add)
295
+ add._mark_used()
290
296
  return self
291
297
 
292
298
  new_style = self._parse_style(add)
@@ -296,10 +302,17 @@ class Element(Component):
296
302
  def props(self, add: Union[str, Dict[str, Any], TMaybeRef]) -> Self:
297
303
  if isinstance(add, ElementBindingMixin):
298
304
  self._proxy_props.append(add)
305
+ add._mark_used()
299
306
  return self
300
307
 
301
308
  if isinstance(add, dict):
302
309
  add = {key: value for key, value in add.items() if value is not None}
310
+
311
+ for value in (
312
+ v for v in add.values() if isinstance(v, ElementBindingMixin)
313
+ ):
314
+ value._mark_used()
315
+
303
316
  new_props = self._parse_props(add)
304
317
  self._props.update(new_props)
305
318
  return self
@@ -6,6 +6,7 @@ __all__ = [
6
6
  "number",
7
7
  "button",
8
8
  "checkbox",
9
+ "radio",
9
10
  "form",
10
11
  "select",
11
12
  "option",
@@ -32,6 +33,7 @@ from .input import Input as input
32
33
  from .number import Number as number
33
34
  from .button import Button as button
34
35
  from .checkbox import Checkbox as checkbox
36
+ from .radio import Radio as radio
35
37
  from .form import Form as form
36
38
  from .select import Select as select
37
39
  from .ul import Ul as ul
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from typing import TYPE_CHECKING, Any, Union
2
+ from typing import TYPE_CHECKING, Any, Optional, Union
3
3
  from instaui.components.element import Element
4
4
 
5
5
  if TYPE_CHECKING:
@@ -10,12 +10,14 @@ class Label(Element):
10
10
  def __init__(
11
11
  self,
12
12
  text: Union[Any, TMaybeRef[Any], None] = None,
13
+ *,
14
+ for_: Optional[TMaybeRef[str]] = None,
13
15
  ):
14
16
  super().__init__("label")
15
17
 
16
- if text is not None:
17
- self.props(
18
- {
19
- "innerText": text,
20
- }
21
- )
18
+ self.props(
19
+ {
20
+ "innerText": text,
21
+ "for": for_,
22
+ }
23
+ )
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING, Optional, Union
3
+ from instaui.components.element import Element
4
+ from instaui.components.value_element import ValueElement
5
+ from ._mixins import InputEventMixin
6
+
7
+ if TYPE_CHECKING:
8
+ from instaui.vars.types import TMaybeRef
9
+
10
+
11
+ _T_value = str
12
+
13
+
14
+ class Radio(InputEventMixin, ValueElement[_T_value]):
15
+ def __init__(
16
+ self,
17
+ value: Optional[TMaybeRef[_T_value]] = None,
18
+ *,
19
+ model_value: Optional[_T_value] = None,
20
+ id: Optional[TMaybeRef[str]] = None,
21
+ name: Optional[TMaybeRef[str]] = None,
22
+ ):
23
+ super().__init__("input", value, is_html_component=True)
24
+ self.props({"type": "radio"})
25
+
26
+ self.props(
27
+ {
28
+ "id": id,
29
+ "name": name,
30
+ }
31
+ )
32
+
33
+ if model_value is not None:
34
+ self.props({"value": model_value})
35
+
36
+ def _input_event_mixin_element(self) -> Element:
37
+ return self
@@ -11,6 +11,8 @@ class Match(Component):
11
11
  def __init__(self, on: ElementBindingMixin):
12
12
  super().__init__("match")
13
13
  self._on = on
14
+ if isinstance(on, ElementBindingMixin):
15
+ on._mark_used()
14
16
  self._default_case = None
15
17
 
16
18
  def _to_json_dict(self):
@@ -0,0 +1,48 @@
1
+ import { ref, watch, onMounted, onUnmounted, toRef } from 'vue'
2
+
3
+
4
+ export default {
5
+ props: ['intervalSeconds', 'active', 'once', 'immediate'],
6
+ setup(props, { emit }) {
7
+ const { intervalSeconds, once = false, immediate = true } = props
8
+ const intervalId = ref(null)
9
+ const isActive = toRef(() => props.active ?? true)
10
+ const emitTick = once ? () => { emit('tick'); stopInterval() } : () => emit('tick')
11
+
12
+ if (once === false) {
13
+ watch(isActive, (value) => {
14
+ if (value) {
15
+ startInterval()
16
+ } else {
17
+ stopInterval()
18
+ }
19
+ })
20
+ }
21
+
22
+ const startInterval = () => {
23
+ if (immediate) {
24
+ emitTick()
25
+ }
26
+
27
+ intervalId.value = setInterval(() => {
28
+ emitTick()
29
+ }, intervalSeconds * 1000)
30
+ }
31
+
32
+ const stopInterval = () => {
33
+ clearInterval(intervalId.value)
34
+ emit('stop')
35
+ }
36
+
37
+ onMounted(() => {
38
+ if (isActive.value) {
39
+ startInterval()
40
+ }
41
+ })
42
+
43
+ onUnmounted(() => {
44
+ stopInterval()
45
+ })
46
+ }
47
+
48
+ }
@@ -0,0 +1,94 @@
1
+ from __future__ import annotations
2
+ from typing import List, Optional
3
+ from instaui.components.element import Element
4
+ from instaui.vars.types import TMaybeRef
5
+ from instaui.event.event_mixin import EventMixin
6
+
7
+
8
+ class Timer(Element, esm="./timer.js"):
9
+ """
10
+ A timer component that triggers events at specified intervals.
11
+
12
+ Args:
13
+ interval_seconds (float): Time in seconds between repeated events.
14
+ active (Optional[TMaybeRef[bool]], optional): If True, starts the timer immediately.
15
+ Accepts reactive values (e.g., state references) for dynamic control. Defaults to None (equivalent to True).
16
+ immediate (Optional[bool], optional): If True, triggers the first event immediately. Defaults to None (equivalent to True).
17
+
18
+ Example:
19
+ .. code-block:: python
20
+ from instaui import ui, html
21
+
22
+ @ui.page('/')
23
+ def index():
24
+ x = ui.state(0)
25
+ active = ui.state(True)
26
+
27
+ @ui.event(inputs=[x], outputs=[x])
28
+ def on_tick(x):
29
+ return x + 1
30
+
31
+ ui.timer(1, active=active).on_tick(on_tick)
32
+
33
+ html.checkbox(active)
34
+ html.span(x)
35
+ """
36
+
37
+ def __init__(
38
+ self,
39
+ interval_seconds: float,
40
+ *,
41
+ active: Optional[TMaybeRef[bool]] = None,
42
+ immediate: Optional[bool] = None,
43
+ ):
44
+ super().__init__("template")
45
+
46
+ self.props(
47
+ {
48
+ "intervalSeconds": interval_seconds,
49
+ "active": active,
50
+ "immediate": immediate,
51
+ }
52
+ )
53
+
54
+ def on_tick(
55
+ self,
56
+ handler: EventMixin,
57
+ *,
58
+ extends: Optional[List] = None,
59
+ ):
60
+ """
61
+ Registers an event handler for the "tick" event.
62
+ """
63
+ return self.on("tick", handler, extends=extends)
64
+
65
+ def on_stop(
66
+ self,
67
+ handler: EventMixin,
68
+ *,
69
+ extends: Optional[List] = None,
70
+ ):
71
+ """
72
+ Registers an event handler for the "stop" event.
73
+ """
74
+
75
+ return self.on("stop", handler, extends=extends)
76
+
77
+ @classmethod
78
+ def once(cls, delay_seconds: float):
79
+ """
80
+ Creates a timer that triggers only once.
81
+
82
+ Args:
83
+ delay_seconds (float): Time in seconds before the timer triggers.
84
+
85
+ Example:
86
+ .. code-block:: python
87
+ msg = ui.state('')
88
+ on_done = ui.js_event(outputs=[msg],code="()=> 'Done!'")
89
+
90
+ ui.timer.once(1).on_tick(on_done)
91
+ html.span(msg) # will show "Done!" after 1 second
92
+
93
+ """
94
+ return cls(delay_seconds, immediate=False).props({"once": True})
@@ -50,6 +50,8 @@ class VFor(Component, Generic[_T]):
50
50
 
51
51
  super().__init__("vfor")
52
52
  self._data = data
53
+ if isinstance(self._data, ElementBindingMixin):
54
+ self._data._mark_used()
53
55
  self._key = key
54
56
  self._fid = get_app_slot().generate_vfor_id()
55
57
  self.__scope_manager = new_scope(append_to_app=False)
@@ -10,6 +10,8 @@ class VIf(Component):
10
10
  def __init__(self, on: TMaybeRef[bool]):
11
11
  super().__init__("vif")
12
12
  self._on = cast(ElementBindingMixin, on)
13
+ if isinstance(on, ElementBindingMixin):
14
+ on._mark_used()
13
15
  self.__scope_manager = new_scope(append_to_app=False)
14
16
  self.__scope = None
15
17
 
@@ -24,7 +26,9 @@ class VIf(Component):
24
26
  def _to_json_dict(self):
25
27
  data = super()._to_json_dict()
26
28
  data["props"] = {
27
- "on": self._on._to_element_binding_config(),
29
+ "on": self._on
30
+ if isinstance(self._on, bool)
31
+ else self._on._to_element_binding_config(),
28
32
  }
29
33
  props: Dict = data["props"]
30
34
 
@@ -1,5 +1,6 @@
1
1
  import typing
2
2
  from instaui.vars.mixin_types.py_binding import CanInputMixin, CanOutputMixin
3
+ from instaui.vars.mixin_types.element_binding import _try_mark_inputs_used
3
4
  from instaui.common.jsonable import Jsonable
4
5
  from .event_mixin import EventMixin
5
6
 
@@ -26,6 +27,7 @@ class JsEvent(Jsonable, EventMixin):
26
27
  def _to_json_dict(self):
27
28
  data = super()._to_json_dict()
28
29
  data["type"] = self.event_type()
30
+ _try_mark_inputs_used(self._org_inputs)
29
31
 
30
32
  if self._inputs:
31
33
  data["inputs"] = self._inputs
@@ -1,6 +1,7 @@
1
1
  import typing
2
2
  from instaui.common.jsonable import Jsonable
3
3
  from instaui.vars.mixin_types.observable import ObservableMixin
4
+ from instaui.vars.mixin_types.element_binding import _try_mark_inputs_used
4
5
  from .event_mixin import EventMixin
5
6
 
6
7
 
@@ -59,6 +60,8 @@ class VueEvent(Jsonable, EventMixin):
59
60
 
60
61
  def _to_json_dict(self):
61
62
  data = super()._to_json_dict()
63
+
64
+ _try_mark_inputs_used((self._bindings or {}).values())
62
65
  data["type"] = self.event_type()
63
66
  return data
64
67
 
@@ -4,6 +4,7 @@ from typing_extensions import ParamSpec
4
4
  from instaui.common.jsonable import Jsonable
5
5
  from instaui.runtime._app import get_current_scope, get_app_slot
6
6
  from instaui.vars.mixin_types.py_binding import CanInputMixin, CanOutputMixin
7
+ from instaui.vars.mixin_types.element_binding import _try_mark_inputs_used
7
8
  from instaui.handlers import event_handler
8
9
  from .event_mixin import EventMixin
9
10
 
@@ -46,6 +47,8 @@ class WebEvent(Jsonable, EventMixin, typing.Generic[P, R]):
46
47
  def _to_json_dict(self):
47
48
  app = get_app_slot()
48
49
 
50
+ _try_mark_inputs_used(self._inputs)
51
+
49
52
  hkey = event_handler.create_handler_key(
50
53
  page_path=app.page_path, handler=self._fn
51
54
  )
@@ -96,10 +96,24 @@ class Scope(Jsonable):
96
96
  data["vue_watch"] = self._vue_watchs
97
97
  if self._element_refs:
98
98
  data["eRefs"] = self._element_refs
99
- if self._web_computeds:
100
- data["web_computed"] = self._web_computeds
101
- if self._js_computeds:
102
- data["js_computed"] = self._js_computeds
99
+
100
+ # web computeds
101
+ _web_computeds = [
102
+ computed for computed in self._web_computeds if computed._is_used()
103
+ ]
104
+
105
+ if _web_computeds:
106
+ data["web_computed"] = _web_computeds
107
+
108
+ # js computeds
109
+ _js_computeds = [
110
+ computed for computed in self._js_computeds if computed._is_used()
111
+ ]
112
+
113
+ if _js_computeds:
114
+ data["js_computed"] = _js_computeds
115
+
116
+ # vue computeds
103
117
  if self._vue_computeds:
104
118
  data["vue_computed"] = self._vue_computeds
105
119
  if self._const_data: