pgwidgets-js 0.3.4__tar.gz → 0.3.6__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 (205) hide show
  1. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/PKG-INFO +1 -1
  2. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/WhatsNew.rst +41 -0
  3. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/menus.rst +8 -3
  4. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/package.json +1 -1
  5. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/defs.py +10 -4
  6. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Menu.css +9 -0
  7. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TreeView.css +17 -2
  8. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ComboBox.js +16 -1
  9. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/MenuAction.js +36 -2
  10. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/MenuBar.js +33 -2
  11. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/RadioButton.js +4 -1
  12. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TableView.js +4 -0
  13. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ToolBarAction.js +1 -1
  14. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TreeView.js +369 -15
  15. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/PKG-INFO +1 -1
  16. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/scm_file_list.json +165 -165
  17. pgwidgets_js-0.3.6/pgwidgets_js.egg-info/scm_version.json +8 -0
  18. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/tests/test_recent_additions.py +35 -0
  19. pgwidgets_js-0.3.4/pgwidgets_js.egg-info/scm_version.json +0 -8
  20. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/.flake8 +0 -0
  21. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/.github/workflows/tests.yml +0 -0
  22. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/.gitignore +0 -0
  23. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/.readthedocs.yaml +0 -0
  24. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/LICENSE.md +0 -0
  25. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/MANIFEST.in +0 -0
  26. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/README.md +0 -0
  27. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/Widgets.css +0 -0
  28. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/Widgets.js +0 -0
  29. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/Makefile +0 -0
  30. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/callbacks.rst +0 -0
  31. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/conf.py +0 -0
  32. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/electron.rst +0 -0
  33. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/external-widgets.rst +0 -0
  34. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/for-developers.rst +0 -0
  35. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/frameworks.rst +0 -0
  36. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/getting-started.rst +0 -0
  37. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/index.rst +0 -0
  38. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/pyodide.rst +0 -0
  39. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/remote.rst +0 -0
  40. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/styling.rst +0 -0
  41. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/controls.rst +0 -0
  42. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/dialogs.rst +0 -0
  43. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/display.rst +0 -0
  44. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/index.rst +0 -0
  45. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/layout.rst +0 -0
  46. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/nonvisual.rst +0 -0
  47. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/docs/widgets/text.rst +0 -0
  48. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/all_widgets.html +0 -0
  49. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/all_widgets_pyodide.html +0 -0
  50. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/all_widgets_pyodide.py +0 -0
  51. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/all_widgets_pyscript.html +0 -0
  52. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/all_widgets_pyscript.py +0 -0
  53. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/box.html +0 -0
  54. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/button.html +0 -0
  55. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/canvas.html +0 -0
  56. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/checkbox.html +0 -0
  57. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/colordialog.html +0 -0
  58. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/combobox.html +0 -0
  59. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/debug_spinbox.html +0 -0
  60. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/dial.html +0 -0
  61. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/dialog.html +0 -0
  62. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/electron/.gitignore +0 -0
  63. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/electron/.npmrc +0 -0
  64. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/electron/index.html +0 -0
  65. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/electron/main.js +0 -0
  66. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/electron/package.json +0 -0
  67. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/expander.html +0 -0
  68. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/external_widgets.html +0 -0
  69. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/fixedlayout.html +0 -0
  70. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/frame.html +0 -0
  71. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/gridbox.html +0 -0
  72. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/htmlview.html +0 -0
  73. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/image.html +0 -0
  74. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/label.html +0 -0
  75. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/mdi_widget.html +0 -0
  76. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/menu.html +0 -0
  77. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/progressbar.html +0 -0
  78. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/pyodide_demo.html +0 -0
  79. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/pyscript.toml +0 -0
  80. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/radiobutton.html +0 -0
  81. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/remote.html +0 -0
  82. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/remote_demo.py +0 -0
  83. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/remote_demo_async.py +0 -0
  84. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/scroll_area.html +0 -0
  85. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/scrollable.html +0 -0
  86. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/scrollbar.html +0 -0
  87. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/slider.html +0 -0
  88. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/spinbox.html +0 -0
  89. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/splitter.html +0 -0
  90. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/tab_widget.html +0 -0
  91. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/tableview.html +0 -0
  92. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/text_entry.html +0 -0
  93. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/textarea.html +0 -0
  94. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/textentryset.html +0 -0
  95. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/textsource.html +0 -0
  96. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/togglebutton.html +0 -0
  97. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/toolbar.html +0 -0
  98. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/treeview.html +0 -0
  99. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/examples/videowidget.html +0 -0
  100. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/__init__.py +0 -0
  101. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/pyodide/__init__.py +0 -0
  102. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/pyodide/log.py +0 -0
  103. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/pyodide/widget.py +0 -0
  104. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/Widgets.css +0 -0
  105. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/Widgets.js +0 -0
  106. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/AbstractScrollArea.css +0 -0
  107. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Box.css +0 -0
  108. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Button.css +0 -0
  109. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/CheckBox.css +0 -0
  110. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ColorDialog.css +0 -0
  111. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ComboBox.css +0 -0
  112. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Dial.css +0 -0
  113. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Dialog.css +0 -0
  114. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Expander.css +0 -0
  115. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ExternalWidget.css +0 -0
  116. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/FixedLayout.css +0 -0
  117. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Frame.css +0 -0
  118. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/GridBox.css +0 -0
  119. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/HtmlView.css +0 -0
  120. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Image.css +0 -0
  121. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Label.css +0 -0
  122. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/MDIWidget.css +0 -0
  123. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ProgressBar.css +0 -0
  124. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/RadioButton.css +0 -0
  125. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ScrollArea.css +0 -0
  126. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ScrollBar.css +0 -0
  127. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Slider.css +0 -0
  128. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/SpinBox.css +0 -0
  129. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Splitter.css +0 -0
  130. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/StatusBar.css +0 -0
  131. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TabWidget.css +0 -0
  132. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Text.css +0 -0
  133. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TextArea.css +0 -0
  134. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TextEntrySet.css +0 -0
  135. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TextSource.css +0 -0
  136. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ToggleButton.css +0 -0
  137. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/ToolBar.css +0 -0
  138. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/TopLevel.css +0 -0
  139. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/VideoWidget.css +0 -0
  140. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/Widget.css +0 -0
  141. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/css/WindowMenu.css +0 -0
  142. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/file.svg +0 -0
  143. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/folder.svg +0 -0
  144. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/hdots.svg +0 -0
  145. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/pgicon.svg +0 -0
  146. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/pgwidgets-logo.png +0 -0
  147. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/pgwidgets-logo.svg +0 -0
  148. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/icons/vdots.svg +0 -0
  149. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/AbstractScrollArea.js +0 -0
  150. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Box.js +0 -0
  151. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Button.js +0 -0
  152. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Callback.js +0 -0
  153. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Canvas.js +0 -0
  154. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/CheckBox.js +0 -0
  155. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ColorDialog.js +0 -0
  156. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ColorWidget.js +0 -0
  157. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ComboBoxNative.js +0 -0
  158. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Dial.js +0 -0
  159. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Dialog.js +0 -0
  160. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Expander.js +0 -0
  161. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ExternalWidget.js +0 -0
  162. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/FileDialog.js +0 -0
  163. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/FixedLayout.js +0 -0
  164. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Frame.js +0 -0
  165. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/GridBox.js +0 -0
  166. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/HtmlView.js +0 -0
  167. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Image.js +0 -0
  168. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Label.js +0 -0
  169. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/MDIWidget.js +0 -0
  170. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Menu.js +0 -0
  171. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Page.js +0 -0
  172. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ProgressBar.js +0 -0
  173. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/RemoteInterface.js +0 -0
  174. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ScrollArea.js +0 -0
  175. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ScrollBar.js +0 -0
  176. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Separator.js +0 -0
  177. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Slider.js +0 -0
  178. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/SpinBox.js +0 -0
  179. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Splitter.js +0 -0
  180. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/StatusBar.js +0 -0
  181. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TabWidget.js +0 -0
  182. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TextArea.js +0 -0
  183. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TextEntry.js +0 -0
  184. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TextEntrySet.js +0 -0
  185. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TextSource.js +0 -0
  186. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TextWidget.js +0 -0
  187. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Timer.js +0 -0
  188. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ToggleButton.js +0 -0
  189. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/ToolBar.js +0 -0
  190. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/TopLevel.js +0 -0
  191. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/VideoWidget.js +0 -0
  192. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/Widget.js +0 -0
  193. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/modules/WindowMenu.js +0 -0
  194. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js/static/remote.html +0 -0
  195. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/SOURCES.txt +0 -0
  196. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/dependency_links.txt +0 -0
  197. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/requires.txt +0 -0
  198. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pgwidgets_js.egg-info/top_level.txt +0 -0
  199. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/pyproject.toml +0 -0
  200. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/setup.cfg +0 -0
  201. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/setup.py +0 -0
  202. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/tests/__init__.py +0 -0
  203. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/tests/test_consistency.py +0 -0
  204. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/tests/test_defs.py +0 -0
  205. {pgwidgets_js-0.3.4 → pgwidgets_js-0.3.6}/tests/test_static_assets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pgwidgets-js
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: pgwidgets JavaScript widget library — static assets for use with Python servers
5
5
  Author: PGWidgets Developers
6
6
  License: BSD-3-Clause
@@ -4,6 +4,47 @@ What's New
4
4
  Recent changes — since ``v0.3.3``
5
5
  ---------------------------------
6
6
 
7
+ TableView: spreadsheet-style cell cursor and editing
8
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9
+
10
+ ``TableView`` gained a current-cell cursor navigated with the arrow keys
11
+ and Tab. ``set_editable(tf)`` makes every text column editable in one
12
+ call. With editing on, typing a printable character starts an edit
13
+ pre-filled with that character (replacing the cell), Enter or F2 edits
14
+ the existing contents, and Delete/Backspace clears the cell. While
15
+ editing, the arrow keys commit and move in that direction (Excel-style),
16
+ Tab commits and moves right, Enter commits and moves down, and Esc
17
+ cancels.
18
+
19
+ TableView/TreeView: header font and more compact tables
20
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21
+
22
+ New ``set_header_font(family, size, weight, style)`` sets the
23
+ column-header font. Headers are now non-bold by default for a more
24
+ compact table (pass a bold weight to embolden), and
25
+ ``set_optimal_column_widths`` only reserves sort-indicator padding on
26
+ sortable columns, so unsorted/non-sortable columns pack more tightly.
27
+
28
+ Menu icons: ``icon_only`` and top-level menubar icons
29
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30
+
31
+ ``MenuAction`` already accepted ``icon_url`` / ``iconsize``; it now also
32
+ takes ``icon_only``, which shows just the icon (keeping the text as an
33
+ accessible tooltip) and falls back to the text label when no icon is set.
34
+ ``MenuBar.add_menu(menu, name, options)`` gained an optional ``options``
35
+ argument so top-level menubar entries can carry an icon
36
+ (``icon_url`` / ``iconsize`` / ``icon_only``) too. Icon creation now uses a
37
+ truthy guard (matching ``ToolBarAction``) so an unset icon arriving as
38
+ ``null``/``undefined``/``''`` no longer renders a broken image.
39
+
40
+ RadioButton: robust ``group`` handling
41
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42
+
43
+ ``RadioButton`` now uses a truthy check for the ``group`` option, so an
44
+ unset group arriving as ``null``/``undefined``/``''`` (varies by backend,
45
+ e.g. ``to_js(None)`` under Pyodide) reliably starts a new group instead of
46
+ risking a crash on ``undefined.group``.
47
+
7
48
  TextSource: text no longer clipped when scrolling long files
8
49
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9
50
 
@@ -25,8 +25,11 @@ Horizontal menu bar, typically placed at the top of a window.
25
25
 
26
26
  * - Method
27
27
  - Description
28
- * - ``add_menu(menu, name)``
29
- - Add a Menu with a display name.
28
+ * - ``add_menu(menu, name, options)``
29
+ - Add a Menu with a display name. ``options`` (optional) may include
30
+ ``icon_url`` / ``iconsize`` / ``icon_only`` to show an icon on the
31
+ top-level entry (``icon_only`` shows just the icon and keeps the name
32
+ as a tooltip).
30
33
  * - ``add_name(name)``
31
34
  - Add a menu by name (creates and returns a new Menu).
32
35
  * - ``get_menu(name)``
@@ -88,7 +91,7 @@ MenuAction
88
91
 
89
92
  A single action item inside a Menu.
90
93
 
91
- **Constructor:** ``new Widgets.MenuAction({text, icon_url, iconsize, checkable, name})``
94
+ **Constructor:** ``new Widgets.MenuAction({text, icon_url, iconsize, checkable, name, icon_only})``
92
95
 
93
96
  **Options:**
94
97
 
@@ -97,6 +100,8 @@ A single action item inside a Menu.
97
100
  - ``iconsize`` -- icon size in pixels
98
101
  - ``checkable`` -- whether the action has a check state
99
102
  - ``name`` -- internal name
103
+ - ``icon_only`` -- when an icon is set, show only the icon (the text is kept
104
+ as an accessible tooltip; falls back to the text if no icon is set)
100
105
 
101
106
  **Methods:**
102
107
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pgwidgets",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "A native JavaScript widget library with Qt/GTK-style layout and controls",
5
5
  "type": "module",
6
6
  "main": "Widgets.js",
@@ -667,7 +667,7 @@ WIDGETS = {
667
667
  "clear": [],
668
668
  "set_length": ["numchars"],
669
669
  },
670
- "callbacks": ["activated"],
670
+ "callbacks": ["activated", "modified"],
671
671
  },
672
672
 
673
673
  "SpinBox": {
@@ -767,6 +767,8 @@ WIDGETS = {
767
767
  "sortable", "allow_text_selection"],
768
768
  "methods": {
769
769
  "set_columns": ["columns"],
770
+ "set_editable": ["tf"],
771
+ "set_header_font": ["family", "size", "weight", "style"],
770
772
  "set_tree": ["tree"],
771
773
  "add_tree": ["tree", "parent"],
772
774
  "update_tree": ["tree"],
@@ -774,6 +776,7 @@ WIDGETS = {
774
776
  "add_item": ["parent", "key", "values"],
775
777
  "remove_item": ["path"],
776
778
  "remove_items": ["paths"],
779
+ "delete_tree": ["tree", "prune_empty"],
777
780
  "clear": [],
778
781
  "expand_all": [],
779
782
  "collapse_all": [],
@@ -828,7 +831,7 @@ WIDGETS = {
828
831
  },
829
832
  "callbacks": ["activated", "selected", "expanded", "collapsed",
830
833
  "sorted", "cell_edited", "scrolled",
831
- "cell_selected", "cell_action",
834
+ "cell_selected", "cell_action", "changed",
832
835
  "copy", "cut", "paste"],
833
836
  },
834
837
 
@@ -840,6 +843,8 @@ WIDGETS = {
840
843
  "sortable", "allow_text_selection"],
841
844
  "methods": {
842
845
  "set_columns": ["columns"],
846
+ "set_editable": ["tf"],
847
+ "set_header_font": ["family", "size", "weight", "style"],
843
848
  "set_rows": ["rows"],
844
849
  "set_data": ["data"],
845
850
  "clear": [],
@@ -1009,7 +1014,7 @@ WIDGETS = {
1009
1014
  "args": [],
1010
1015
  "options": [],
1011
1016
  "methods": {
1012
- "add_menu": ["menu", "name"],
1017
+ "add_menu": ["menu", "name", "options"],
1013
1018
  "add_name": ["name"],
1014
1019
  "get_menu": ["name"],
1015
1020
  },
@@ -1034,7 +1039,8 @@ WIDGETS = {
1034
1039
  "MenuAction": {
1035
1040
  "base": "widget",
1036
1041
  "args": [],
1037
- "options": ["text", "icon_url", "iconsize", "checkable", "name"],
1042
+ "options": ["text", "icon_url", "iconsize", "checkable", "name",
1043
+ "icon_only"],
1038
1044
  "methods": {
1039
1045
  "set_text": ["text"],
1040
1046
  "get_text": [],
@@ -16,11 +16,20 @@
16
16
  }
17
17
 
18
18
  .menubar-item {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: 4px;
19
22
  padding: 4px 10px;
20
23
  cursor: pointer;
21
24
  white-space: nowrap;
22
25
  }
23
26
 
27
+ .menubar-item-icon {
28
+ display: block;
29
+ width: 16px;
30
+ height: 16px;
31
+ }
32
+
24
33
  .menubar-item:hover,
25
34
  .menubar-item.active {
26
35
  background-color: #cde;
@@ -48,7 +48,9 @@
48
48
  .treeview-header-cell {
49
49
  position: relative;
50
50
  padding: 4px 6px;
51
- font-weight: 600;
51
+ /* non-bold by default (compact, matching the qt backend); use
52
+ set_header_font() to opt into a bold/other header font */
53
+ font-weight: normal;
52
54
  overflow: hidden;
53
55
  white-space: nowrap;
54
56
  border-right: 1px solid #ddd;
@@ -90,7 +92,13 @@
90
92
  flex-shrink: 0;
91
93
  font-size: 10px;
92
94
  color: #555;
93
- margin-right: 6px;
95
+ }
96
+
97
+ /* Only reserve the gap when a sort arrow is actually shown, so unsorted
98
+ headers don't carry extra right-side space and stay aligned with the
99
+ body cells. */
100
+ .treeview-sort-indicator:not(:empty) {
101
+ margin-left: 6px;
94
102
  }
95
103
 
96
104
  .treeview-resize-handle {
@@ -253,6 +261,13 @@
253
261
  color: white;
254
262
  }
255
263
 
264
+ /* Current-cell cursor (TableView spreadsheet-style navigation). Drawn as
265
+ an inset outline so it reads on top of selection/row backgrounds. */
266
+ .treeview-cell-cursor {
267
+ outline: 2px solid #4a90e2;
268
+ outline-offset: -2px;
269
+ }
270
+
256
271
  /* ── Inline cell editor ─────────────────────────────── */
257
272
 
258
273
  .treeview-cell-editable {
@@ -74,7 +74,16 @@ class ComboBox extends Widget {
74
74
  if (e.key === 'Enter') {
75
75
  e.preventDefault();
76
76
  this._hideDropdown();
77
- this.make_callback('activated', this.get_index(), this.get_text());
77
+ let idx = this.get_index();
78
+ if (idx < 0 && this._editable) {
79
+ // Commit a new typed value (mirrors the Qt/Gtk
80
+ // backends) so the reported index is valid and
81
+ // consistent with get_text().
82
+ this.append_text(this._input.value);
83
+ idx = this._items.length - 1;
84
+ this._selectedIdx = idx;
85
+ }
86
+ this.make_callback('activated', idx, this.get_text());
78
87
  } else if (e.key === 'ArrowDown') {
79
88
  e.preventDefault();
80
89
  if (this._dropdown.style.display === 'none') {
@@ -89,6 +98,10 @@ class ComboBox extends Widget {
89
98
  if (this._editable) {
90
99
  this._input.addEventListener('input', () => {
91
100
  this._showDropdown(this._input.value);
101
+ // Report the live text so the server-side get_text() stays
102
+ // current without waiting for Enter/selection. Does not
103
+ // fire 'activated' -- typing must not count as activation.
104
+ this.make_callback('modified', this._input.value);
92
105
  });
93
106
  }
94
107
 
@@ -114,6 +127,8 @@ class ComboBox extends Widget {
114
127
  });
115
128
 
116
129
  this.enable_callback('activated');
130
+ // 'modified' reports live entry text as the user types (editable)
131
+ this.enable_callback('modified');
117
132
  }
118
133
 
119
134
  /**
@@ -17,6 +17,9 @@ class MenuAction extends Widget {
17
17
  * @param {number[]|null} [options.iconsize=null] - Icon size as [width, height] in pixels.
18
18
  * @param {boolean} [options.checkable=false] - Whether the action has a checkbox.
19
19
  * @param {string|null} [options.name=null] - Alias for text.
20
+ * @param {boolean} [options.icon_only=false] - If true, show only the icon
21
+ * (when one is set), keeping the text as the accessible tooltip and as
22
+ * the fallback when no icon is present.
20
23
  * @param {HTMLElement} [options.element=null] - Optional pre-existing DOM element to use.
21
24
  */
22
25
  constructor(options = {}) {
@@ -29,6 +32,8 @@ class MenuAction extends Widget {
29
32
 
30
33
  this.checkable = this.get_option(options, 'checkable', false);
31
34
  this.checked = false;
35
+ this.icon_only = this.get_option(options, 'icon_only', false);
36
+ this._has_icon = false;
32
37
 
33
38
  // checkbox indicator (hidden unless checkable)
34
39
  this._check = document.createElement('span');
@@ -44,7 +49,11 @@ class MenuAction extends Widget {
44
49
 
45
50
  let icon_url = this.get_option(options, 'icon_url', null);
46
51
  let iconsize = this.get_option(options, 'iconsize', null);
47
- if (icon_url !== null) {
52
+ // Truthy check (not ``!== null``): an unset icon may arrive as null
53
+ // (JSON/websocket backend), undefined (to_js(None) in the pyodide
54
+ // backend) or ''. Only create the icon for a real URL, otherwise an
55
+ // empty ``<img src="undefined">`` shows as a broken-image dot.
56
+ if (icon_url) {
48
57
  this.set_icon(icon_url, iconsize);
49
58
  }
50
59
 
@@ -61,6 +70,8 @@ class MenuAction extends Widget {
61
70
  this.set_text(text);
62
71
  }
63
72
 
73
+ this._applyIconOnly();
74
+
64
75
  // click handler
65
76
  this.element.addEventListener('click', (e) => {
66
77
  this._activate();
@@ -94,6 +105,7 @@ class MenuAction extends Widget {
94
105
  */
95
106
  set_text(text) {
96
107
  this._label.textContent = text;
108
+ this._applyIconOnly();
97
109
  }
98
110
 
99
111
  /**
@@ -112,10 +124,32 @@ class MenuAction extends Widget {
112
124
  set_icon(url, iconsize = null) {
113
125
  this._icon.src = url;
114
126
  this._icon.style.display = '';
115
- if (iconsize !== null) {
127
+ this._has_icon = true;
128
+ if (iconsize) {
116
129
  this._icon.style.width = iconsize[0] + 'px';
117
130
  this._icon.style.height = iconsize[1] + 'px';
118
131
  }
132
+ this._applyIconOnly();
133
+ }
134
+
135
+ /**
136
+ * Applies the icon_only display preference: when icon_only is set and an
137
+ * icon is present, hide the text label (keeping it as a tooltip for
138
+ * accessibility); otherwise show the label. Safe to call before the
139
+ * label element exists (during construction).
140
+ * @private
141
+ */
142
+ _applyIconOnly() {
143
+ if (!this._label) return;
144
+ if (this.icon_only && this._has_icon) {
145
+ this._label.style.display = 'none';
146
+ if (this._label.textContent) {
147
+ this.element.title = this._label.textContent;
148
+ }
149
+ } else {
150
+ this._label.style.display = '';
151
+ this.element.removeAttribute('title');
152
+ }
119
153
  }
120
154
 
121
155
  /**
@@ -55,11 +55,42 @@ class MenuBar extends ContainerWidget {
55
55
  * Adds a Menu widget to the bar under the given name.
56
56
  * @param {Menu} menu - The Menu widget to associate.
57
57
  * @param {string} name - The label displayed on the menu bar.
58
+ * @param {Object} [options] - Optional settings.
59
+ * @param {string|null} [options.icon_url=null] - URL of an icon image.
60
+ * @param {number[]|null} [options.iconsize=null] - Icon size [w, h] in px.
61
+ * @param {boolean} [options.icon_only=false] - Show only the icon (when
62
+ * set), keeping the name as an accessible tooltip; falls back to the
63
+ * text label when no icon is present.
58
64
  */
59
- add_menu(menu, name) {
65
+ add_menu(menu, name, options = {}) {
60
66
  let button = document.createElement('div');
61
67
  button.className = 'menubar-item';
62
- button.textContent = name;
68
+
69
+ let icon_url = this.get_option(options, 'icon_url', null);
70
+ let iconsize = this.get_option(options, 'iconsize', null);
71
+ let icon_only = this.get_option(options, 'icon_only', false);
72
+
73
+ // Truthy check (see ToolBarAction/MenuAction): an unset icon may
74
+ // arrive as null/undefined/'' depending on the backend.
75
+ if (icon_url) {
76
+ let img = document.createElement('img');
77
+ img.className = 'menubar-item-icon';
78
+ img.src = icon_url;
79
+ if (iconsize) {
80
+ img.style.width = iconsize[0] + 'px';
81
+ img.style.height = iconsize[1] + 'px';
82
+ }
83
+ button.appendChild(img);
84
+ }
85
+ if (icon_url && icon_only) {
86
+ // icon only: keep the name as an accessible tooltip
87
+ button.title = name;
88
+ } else {
89
+ let label = document.createElement('span');
90
+ label.className = 'menubar-item-label';
91
+ label.textContent = name;
92
+ button.appendChild(label);
93
+ }
63
94
 
64
95
  let container = document.createElement('div');
65
96
  container.className = 'menubar-item-container';
@@ -40,8 +40,11 @@ class RadioButton extends Widget {
40
40
  this.element.appendChild(this.label);
41
41
 
42
42
  // group management
43
+ // Truthy check (not ``!== null``): an unset group may arrive as null
44
+ // (JSON/websocket backend), undefined (to_js(None) in the pyodide
45
+ // backend) or '' -- treat any of those as "start a new group".
43
46
  let groupOwner = this.get_option(options, 'group', null);
44
- if (groupOwner !== null) {
47
+ if (groupOwner) {
45
48
  // join existing group
46
49
  this.group = groupOwner.group;
47
50
  this.group.push(this);
@@ -26,6 +26,10 @@ class TableView extends TreeView {
26
26
  super(merged);
27
27
  this.element.classList.add('tableview-widget');
28
28
 
29
+ // A TableView drives a spreadsheet-style current-cell cursor: the
30
+ // arrow/Tab keys move a highlighted cell and editable columns accept
31
+ // type / Delete / Enter editing. Pass cell_cursor: false to opt out.
32
+ this._cellCursor = this.get_option(options, 'cell_cursor', true);
29
33
  }
30
34
 
31
35
  /**
@@ -150,7 +150,7 @@ class ToolBarAction extends Widget {
150
150
  this.element.insertBefore(this._icon, this.element.firstChild);
151
151
  }
152
152
  this._icon.src = url;
153
- if (iconsize !== null) {
153
+ if (iconsize) {
154
154
  this._icon.style.width = iconsize[0] + 'px';
155
155
  this._icon.style.height = iconsize[1] + 'px';
156
156
  }