ex4nicegui 0.8.7__tar.gz → 0.8.9__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 (192) hide show
  1. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/PKG-INFO +2 -2
  2. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/__init__.py +2 -1
  3. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/drawer.py +1 -1
  4. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/view_model.py +33 -3
  5. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/descriptor.py +34 -7
  6. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/signals.py +26 -0
  7. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/pyproject.toml +5 -4
  8. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/LICENSE +0 -0
  9. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/README.md +0 -0
  10. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/__init__.py +0 -0
  11. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/__init__.py +0 -0
  12. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/dataSource.py +0 -0
  13. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/dataSourceFacade.py +0 -0
  14. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/__init__.py +0 -0
  15. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/containers.py +0 -0
  16. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/layouts.py +0 -0
  17. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/models.py +0 -0
  18. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/text.py +0 -0
  19. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_aggrid.py +0 -0
  20. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_date_picker.js +0 -0
  21. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_date_picker.py +0 -0
  22. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_echarts.py +0 -0
  23. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_radio.py +0 -0
  24. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_range.py +0 -0
  25. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_select.py +0 -0
  26. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_slider.py +0 -0
  27. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/elements/ui_table.py +0 -0
  28. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/index.py +0 -0
  29. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/protocols.py +0 -0
  30. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/bi/types.py +0 -0
  31. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/experimental_/__init__.py +0 -0
  32. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/experimental_/gridLayout/__init__.py +0 -0
  33. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/experimental_/gridLayout/index.py +0 -0
  34. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/gsap/__init__.py +0 -0
  35. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/gsap/gsap.py +0 -0
  36. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/gsap/timeline.js +0 -0
  37. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/gsap/timeline.py +0 -0
  38. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/gsap/wrapGsap.js +0 -0
  39. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/helper/__init__.py +0 -0
  40. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/helper/client_instance_locker.py +0 -0
  41. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/__init__.py +0 -0
  42. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/gridFlex/GridFlex.js +0 -0
  43. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/gridFlex/__init__.py +0 -0
  44. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/gridFlex/gridFlex.py +0 -0
  45. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/gridFlex/utils.py +0 -0
  46. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/rxFlex/__init__.py +0 -0
  47. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/rxFlex/index.py +0 -0
  48. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/layout/rxFlex/types.py +0 -0
  49. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/__init__.py +0 -0
  50. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/__init__.py +0 -0
  51. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-color.ems.js +0 -0
  52. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-dispatch.ems.js +0 -0
  53. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-drag.ems.js +0 -0
  54. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-ease.ems.js +0 -0
  55. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-interpolate.ems.js +0 -0
  56. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-selection.ems.js +0 -0
  57. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-timer.ems.js +0 -0
  58. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-transition.ems.js +0 -0
  59. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/d3/d3-zoom.ems.js +0 -0
  60. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/.DS_Store +0 -0
  61. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/CSSPlugin.js +0 -0
  62. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/CSSRulePlugin.js +0 -0
  63. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/CustomEase.js +0 -0
  64. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/Draggable.js +0 -0
  65. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/EasePack.js +0 -0
  66. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/EaselPlugin.js +0 -0
  67. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/Flip.js +0 -0
  68. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/MotionPathPlugin.js +0 -0
  69. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/Observer.js +0 -0
  70. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/PixiPlugin.js +0 -0
  71. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/ScrollToPlugin.js +0 -0
  72. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/ScrollTrigger.js +0 -0
  73. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/TextPlugin.js +0 -0
  74. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/__init__.py +0 -0
  75. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/all.js +0 -0
  76. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/gsap-core.js +0 -0
  77. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/gsap.mjs +0 -0
  78. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/utils/__init__.py +0 -0
  79. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/utils/matrix.js +0 -0
  80. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/utils/paths.js +0 -0
  81. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/libs/gsap/utils/strings.js +0 -0
  82. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/EChartsComponent/ECharts.js +0 -0
  83. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/EChartsComponent/ECharts.py +0 -0
  84. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/EChartsComponent/events.py +0 -0
  85. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/EChartsComponent/types.py +0 -0
  86. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/EChartsComponent/utils.py +0 -0
  87. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/UseDraggable/UseDraggable.js +0 -0
  88. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/UseDraggable/UseDraggable.py +0 -0
  89. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/base.py +0 -0
  90. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/deferredTask.py +0 -0
  91. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/dropZone/dropZone.js +0 -0
  92. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/dropZone/dropZone.py +0 -0
  93. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/empty.js +0 -0
  94. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/empty.py +0 -0
  95. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/fileWatcher.py +0 -0
  96. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/local_file_picker.py +0 -0
  97. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mermaid/mermaid.js +0 -0
  98. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mermaid/mermaid.py +0 -0
  99. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mixins/backgroundColor.py +0 -0
  100. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mixins/disableable.py +0 -0
  101. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mixins/flexLayout.py +0 -0
  102. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mixins/textColor.py +0 -0
  103. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/mixins/value_element.py +0 -0
  104. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/aggrid.py +0 -0
  105. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/avatar.py +0 -0
  106. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/badge.py +0 -0
  107. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/base.py +0 -0
  108. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/button.py +0 -0
  109. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/card.py +0 -0
  110. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/checkbox.py +0 -0
  111. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/chip.py +0 -0
  112. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/circular_progress.py +0 -0
  113. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/color_picker.py +0 -0
  114. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/column.py +0 -0
  115. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/date.py +0 -0
  116. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/dialog.py +0 -0
  117. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/echarts.py +0 -0
  118. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/element.py +0 -0
  119. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/expansion.py +0 -0
  120. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/grid.py +0 -0
  121. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/html.js +0 -0
  122. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/html.py +0 -0
  123. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/icon.py +0 -0
  124. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/image.py +0 -0
  125. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/input.py +0 -0
  126. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/knob.py +0 -0
  127. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/label.py +0 -0
  128. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/linear_progress.py +0 -0
  129. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/number.py +0 -0
  130. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/radio.py +0 -0
  131. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/range.py +0 -0
  132. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/row.py +0 -0
  133. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/select.py +0 -0
  134. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/slider.py +0 -0
  135. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/spinner.py +0 -0
  136. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/switch.py +0 -0
  137. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tab.py +0 -0
  138. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tab_panel.py +0 -0
  139. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tab_panels.py +0 -0
  140. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/table.py +0 -0
  141. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tabs.py +0 -0
  142. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/textarea.py +0 -0
  143. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/toggle.py +0 -0
  144. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tooltip.py +0 -0
  145. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/tree.py +0 -0
  146. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/officials/upload.py +0 -0
  147. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/q_pagination.py +0 -0
  148. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/rxui.py +0 -0
  149. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/scopedStyle.js +0 -0
  150. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/scopedStyle.py +0 -0
  151. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/services/pandas_service.py +0 -0
  152. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/services/reactive_service.py +0 -0
  153. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/systems/color_system.py +0 -0
  154. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/systems/object_system.py +0 -0
  155. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/systems/reactive_system.py +0 -0
  156. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/transitionGroup.js +0 -0
  157. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/transitionGroup.py +0 -0
  158. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/useMouse/UseMouse.js +0 -0
  159. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/useMouse/UseMouse.py +0 -0
  160. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/usePagination.py +0 -0
  161. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/vfor.js +0 -0
  162. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/vfor.py +0 -0
  163. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/reactive/vmodel.py +0 -0
  164. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/__init__.py +0 -0
  165. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/core/VueUse.js +0 -0
  166. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/core/vue_use.py +0 -0
  167. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/functions/breakpoint.py +0 -0
  168. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/functions/dark.py +0 -0
  169. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/toolbox/functions/qr_code.py +0 -0
  170. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/tools/__init__.py +0 -0
  171. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/tools/debug.py +0 -0
  172. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/__init__.py +0 -0
  173. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/apiEffect.py +0 -0
  174. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/asyncComputed.py +0 -0
  175. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/clientScope.py +0 -0
  176. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/common.py +0 -0
  177. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/effect.py +0 -0
  178. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/__init__.py +0 -0
  179. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/base.py +0 -0
  180. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/bool.py +0 -0
  181. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/date.py +0 -0
  182. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/dict.py +0 -0
  183. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/float.py +0 -0
  184. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/int.py +0 -0
  185. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/list.py +0 -0
  186. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/string.py +0 -0
  187. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/proxy/utils.py +0 -0
  188. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/refComputed.py +0 -0
  189. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/refWrapper.py +0 -0
  190. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/scheduler.py +0 -0
  191. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/utils/types.py +0 -0
  192. {ex4nicegui-0.8.7 → ex4nicegui-0.8.9}/ex4nicegui/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ex4nicegui
3
- Version: 0.8.7
3
+ Version: 0.8.9
4
4
  Summary: Extension library based on nicegui, providing data responsive,BI functionality modules
5
5
  License: MIT
6
6
  Keywords: nicegui,ex4nicegui,webui
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Dist: executing (>=2.0.1,<3.0.0)
19
- Requires-Dist: nicegui (>=2.0.0,<3.0.0)
19
+ Requires-Dist: nicegui (>=2.21.1,<3.0.0)
20
20
  Requires-Dist: signe (>=0.4.22,<0.5.0)
21
21
  Project-URL: Repository, https://github.com/CrystalWindSnake/ex4nicegui
22
22
  Description-Content-Type: text/markdown
@@ -74,7 +74,7 @@ from .mermaid.mermaid import Mermaid as mermaid
74
74
  from .officials.dialog import DialogBindableUi as dialog
75
75
  from .vfor import vfor, VforStore
76
76
  from .vmodel import vmodel
77
- from .view_model import ViewModel, var, cached_var, list_var
77
+ from .view_model import ViewModel, var, cached_var, list_var, dict_var
78
78
 
79
79
  pagination = q_pagination
80
80
 
@@ -102,6 +102,7 @@ __all__ = [
102
102
  "var",
103
103
  "cached_var",
104
104
  "list_var",
105
+ "dict_var",
105
106
  "html",
106
107
  "aggrid",
107
108
  "button",
@@ -11,7 +11,7 @@ from ex4nicegui.utils.signals import (
11
11
  _TMaybeRef as TMaybeRef,
12
12
  )
13
13
  from nicegui import ui
14
- from nicegui.page_layout import Drawer
14
+ from nicegui.elements.drawer import Drawer
15
15
  from .base import BindableUi
16
16
 
17
17
  _TDrawerSide = Literal["left", "right"]
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from typing import Any, Callable, List, Optional, Union, Type, TypeVar, overload
2
+ from typing import Any, Callable, Dict, List, Optional, Union, Type, TypeVar, overload
3
3
  from ex4nicegui.utils.signals import (
4
4
  deep_ref,
5
5
  is_ref,
@@ -23,6 +23,7 @@ from ex4nicegui.utils.proxy.descriptor import ProxyDescriptor
23
23
 
24
24
  _CACHED_VARS_FLAG = "__vm_cached__"
25
25
  _LIST_VAR_FLAG = "__vm_list_var__"
26
+ _DICT_VAR_FLAG = "__vm_dict_var__"
26
27
 
27
28
  _T = TypeVar("_T")
28
29
 
@@ -72,7 +73,8 @@ class ViewModel(NoProxy):
72
73
  if callable(value) and hasattr(value, _CACHED_VARS_FLAG):
73
74
  setattr(self, name, computed(partial(value, self)))
74
75
 
75
- def __init_subclass__(cls) -> None:
76
+ def __init_subclass__(cls, **kwargs) -> None:
77
+ super().__init_subclass__(**kwargs)
76
78
  need_vars = (
77
79
  (name, value)
78
80
  for name, value in vars(cls).items()
@@ -80,7 +82,7 @@ class ViewModel(NoProxy):
80
82
  )
81
83
 
82
84
  for name, value in need_vars:
83
- class_var_setter(cls, name, value, _LIST_VAR_FLAG)
85
+ class_var_setter(cls, name, value, _LIST_VAR_FLAG, _DICT_VAR_FLAG)
84
86
 
85
87
  @overload
86
88
  @staticmethod
@@ -280,6 +282,34 @@ def list_var(factory: Callable[[], List[_T_Var_Value]]) -> List[_T_Var_Value]:
280
282
  return factory # type: ignore
281
283
 
282
284
 
285
+ def dict_var(factory: Callable[[], Dict]) -> Dict:
286
+ """Create implicitly proxied reactive variables for dictionaries. Use them just like ordinary dictionaries while maintaining reactivity. Only use within rxui.ViewModel.
287
+
288
+ Args:
289
+ factory (Callable[[], Dict]): A factory function that returns a new dictionary.
290
+
291
+ Example:
292
+ .. code-block:: python
293
+ from ex4nicegui import rxui
294
+ class State(rxui.ViewModel):
295
+ data = rxui.dict_var(lambda: {"a": 1, "b": 2, "c": 3})
296
+
297
+ def update_data(self):
298
+ self.data["d"] = len(self.data) + 1
299
+
300
+ def display_data(self):
301
+ return ",".join(f"{k}:{v}" for k, v in self.data.items())
302
+
303
+ state = State()
304
+ ui.button("Update", on_click=state.update_data)
305
+ rxui.label(state.display_data)
306
+
307
+ """
308
+ assert callable(factory), "factory must be a callable"
309
+ setattr(factory, _DICT_VAR_FLAG, None)
310
+ return factory # type: ignore
311
+
312
+
283
313
  def cached_var(func: Callable[..., _T]) -> ReadonlyRef[_T]:
284
314
  """A decorator to cache the result of a function. Only use within rxui.ViewModel.
285
315
 
@@ -8,6 +8,7 @@ from .float import FloatProxy
8
8
  from .bool import BoolProxy
9
9
  from .date import DateProxy
10
10
  from .dict import DictProxy
11
+ from ex4nicegui.utils.signals import deep_ref
11
12
  import datetime
12
13
  import warnings
13
14
  from . import to_value_if_base_type_proxy
@@ -61,9 +62,34 @@ class ListDescriptor(ProxyDescriptor[Callable[[], List]]):
61
62
  super().__init__(name, value, lambda x: ListProxy(x() if callable(x) else x))
62
63
 
63
64
 
64
- class DictDescriptor(ProxyDescriptor[Dict]):
65
- def __init__(self, name: str, value: Dict) -> None:
66
- super().__init__(name, value, DictProxy)
65
+ class DictDescriptor:
66
+ def __init__(
67
+ self,
68
+ name: str,
69
+ factory: Callable[[], Dict],
70
+ ) -> None:
71
+ self.name = name
72
+ self._ref_builder = lambda: deep_ref(factory())
73
+
74
+ def __get__(self, instance: object, owner: Any):
75
+ if instance is None:
76
+ return self
77
+
78
+ proxy = instance.__dict__.get(self.name, None)
79
+ if proxy is None:
80
+ proxy = self._ref_builder()
81
+ instance.__dict__[self.name] = proxy
82
+
83
+ return proxy.value
84
+
85
+ def __set__(self, instance: object, value: T) -> None:
86
+ value = to_value_if_base_type_proxy(value)
87
+ proxy = instance.__dict__.get(self.name, None)
88
+ if proxy is None:
89
+ proxy = self._ref_builder()
90
+ instance.__dict__[self.name] = proxy
91
+
92
+ proxy.value = value # type: ignore
67
93
 
68
94
 
69
95
  class StringDescriptor(ProxyDescriptor[str]):
@@ -91,7 +117,9 @@ class DateDescriptor(ProxyDescriptor[datetime.date]):
91
117
  super().__init__(name, value, lambda x: DateProxy(x.year, x.month, x.day))
92
118
 
93
119
 
94
- def class_var_setter(cls: Type, name: str, value, list_var_flat: str) -> None:
120
+ def class_var_setter(
121
+ cls: Type, name: str, value, list_var_flat: str, dict_var_flat: str
122
+ ) -> None:
95
123
  if value is None or isinstance(value, str):
96
124
  setattr(cls, name, StringDescriptor(name, value))
97
125
  elif isinstance(value, bool):
@@ -111,9 +139,8 @@ def class_var_setter(cls: Type, name: str, value, list_var_flat: str) -> None:
111
139
  )
112
140
  setattr(cls, name, ListDescriptor(name, lambda: []))
113
141
 
114
- elif isinstance(value, dict):
115
- pass # TODO
116
- # setattr(cls, name, DictDescriptor(name, value))
142
+ elif callable(value) and hasattr(value, dict_var_flat):
143
+ setattr(cls, name, DictDescriptor(name, value))
117
144
  elif isinstance(value, float):
118
145
  setattr(cls, name, FloatDescriptor(name, value))
119
146
  elif isinstance(value, datetime.date):
@@ -1,4 +1,5 @@
1
1
  from datetime import date, datetime
2
+ import inspect
2
3
  import signe
3
4
  from signe.core.scope import Scope
4
5
  from .clientScope import _CLIENT_SCOPE_MANAGER
@@ -13,6 +14,7 @@ from typing import (
13
14
  Sequence,
14
15
  )
15
16
  from nicegui import ui
17
+ from nicegui.functions.refreshable import RefreshableContainer
16
18
  from .effect import effect
17
19
  from .scheduler import get_uiScheduler
18
20
  from .types import (
@@ -168,6 +170,9 @@ class effect_refreshable:
168
170
  def warp(
169
171
  fn: Callable,
170
172
  ):
173
+ if inspect.iscoroutinefunction(fn):
174
+ return async_effect_refreshable(refs)(fn)
175
+
171
176
  return effect_refreshable(fn, refs)
172
177
 
173
178
  return warp
@@ -194,6 +199,27 @@ class effect_refreshable:
194
199
  return runner
195
200
 
196
201
 
202
+ def async_effect_refreshable(source: _T_effect_refreshable_refs):
203
+ def wrapper(fn: Callable[[], Any]):
204
+ @on(source, onchanges=False)
205
+ async def on_source_changed():
206
+ with temp_box:
207
+ await fn()
208
+
209
+ container.clear()
210
+
211
+ for child in list(temp_box):
212
+ child.move(container)
213
+
214
+ temp_box.clear()
215
+
216
+ # 临时容器做中转,避免异步等待时,页面内容空白的问题
217
+ temp_box = RefreshableContainer()
218
+ container = RefreshableContainer()
219
+
220
+ return wrapper
221
+
222
+
197
223
  def on(
198
224
  refs: Union[TGetterOrReadonlyRef, RefWrapper, Sequence[TGetterOrReadonlyRef], Any],
199
225
  onchanges=False,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ex4nicegui"
3
- version = "0.8.7"
3
+ version = "0.8.9"
4
4
  description = "Extension library based on nicegui, providing data responsive,BI functionality modules"
5
5
  authors = ["CrystalWindSnake <568166495@qq.com>"]
6
6
  license = "MIT"
@@ -10,7 +10,7 @@ keywords = ["nicegui", "ex4nicegui", "webui"]
10
10
 
11
11
  [tool.poetry.dependencies]
12
12
  python = "^3.8"
13
- nicegui = "^2.0.0"
13
+ nicegui = "^2.21.1"
14
14
  signe = "^0.4.22"
15
15
  executing = "^2.0.1"
16
16
 
@@ -27,9 +27,10 @@ numpy = [
27
27
  {version = "^1.26.0", python = ">=3.9,<3.13"}
28
28
  ]
29
29
  pyecharts = "^2.0.5"
30
- pytest-playwright = "^0.5.0"
31
- playwright = "^1.43.0"
30
+ pytest-playwright = "<0.7.0"
31
+ playwright = "<1.52.0"
32
32
  pytest-asyncio = "^0.24.0"
33
+ pywebview = ">=5.4"
33
34
 
34
35
  [build-system]
35
36
  requires = ["poetry-core"]
File without changes
File without changes