PyWebWinUI3 1.2.1__tar.gz → 1.2.2__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 (133) hide show
  1. {pywebwinui3-1.2.1/PyWebWinUI3.egg-info → pywebwinui3-1.2.2}/PKG-INFO +1 -1
  2. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2/PyWebWinUI3.egg-info}/PKG-INFO +1 -1
  3. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/SOURCES.txt +6 -6
  4. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/__init__.py +1 -1
  5. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/core.py +200 -0
  6. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/type.py +100 -29
  7. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/assets/2.B-R7-woU.css → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/assets/2.YxEoeVwz.css +1 -1
  8. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/chunks/CDNCM73h.js → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/chunks/D94BNvJJ.js +1 -1
  9. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/entry/app.DZs-LPnH.js → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/entry/app.B-Q6XOuJ.js +2 -2
  10. pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js +1 -0
  11. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/nodes/1.CrcwixmX.js → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js +1 -1
  12. pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js +142 -0
  13. pywebwinui3-1.2.2/pywebwinui3/web/_app/version.json +1 -0
  14. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/index.html +9 -9
  15. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/entry/start.BIkwzMz6.js +0 -1
  16. pywebwinui3-1.2.1/pywebwinui3/web/_app/immutable/nodes/2.BX-aQgy_.js +0 -99
  17. pywebwinui3-1.2.1/pywebwinui3/web/_app/version.json +0 -1
  18. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/LICENSE +0 -0
  19. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/MANIFEST.in +0 -0
  20. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/NOTICE +0 -0
  21. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/dependency_links.txt +0 -0
  22. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/requires.txt +0 -0
  23. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/top_level.txt +0 -0
  24. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/README.md +0 -0
  25. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pyproject.toml +0 -0
  26. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/event.py +0 -0
  27. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/util.py +0 -0
  28. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.0.woff2 +0 -0
  29. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.1.woff2 +0 -0
  30. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.10.woff2 +0 -0
  31. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.11.woff2 +0 -0
  32. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.12.woff2 +0 -0
  33. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.13.woff2 +0 -0
  34. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.14.woff2 +0 -0
  35. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.15.woff2 +0 -0
  36. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.16.woff2 +0 -0
  37. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.17.woff2 +0 -0
  38. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.18.woff2 +0 -0
  39. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.19.woff2 +0 -0
  40. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.2.woff2 +0 -0
  41. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.20.woff2 +0 -0
  42. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.21.woff2 +0 -0
  43. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.22.woff2 +0 -0
  44. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.23.woff2 +0 -0
  45. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.24.woff2 +0 -0
  46. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.25.woff2 +0 -0
  47. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.26.woff2 +0 -0
  48. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.27.woff2 +0 -0
  49. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.28.woff2 +0 -0
  50. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.29.woff2 +0 -0
  51. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.3.woff2 +0 -0
  52. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.30.woff2 +0 -0
  53. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.31.woff2 +0 -0
  54. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.32.woff2 +0 -0
  55. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.33.woff2 +0 -0
  56. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.34.woff2 +0 -0
  57. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.35.woff2 +0 -0
  58. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.36.woff2 +0 -0
  59. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.37.woff2 +0 -0
  60. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.38.woff2 +0 -0
  61. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.39.woff2 +0 -0
  62. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.4.woff2 +0 -0
  63. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.40.woff2 +0 -0
  64. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.41.woff2 +0 -0
  65. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.42.woff2 +0 -0
  66. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.43.woff2 +0 -0
  67. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.44.woff2 +0 -0
  68. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.45.woff2 +0 -0
  69. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.46.woff2 +0 -0
  70. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.47.woff2 +0 -0
  71. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.48.woff2 +0 -0
  72. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.49.woff2 +0 -0
  73. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.5.woff2 +0 -0
  74. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.50.woff2 +0 -0
  75. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.51.woff2 +0 -0
  76. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.52.woff2 +0 -0
  77. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.53.woff2 +0 -0
  78. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.54.woff2 +0 -0
  79. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.55.woff2 +0 -0
  80. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.56.woff2 +0 -0
  81. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.57.woff2 +0 -0
  82. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.58.woff2 +0 -0
  83. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.59.woff2 +0 -0
  84. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.6.woff2 +0 -0
  85. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.60.woff2 +0 -0
  86. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.61.woff2 +0 -0
  87. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.62.woff2 +0 -0
  88. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.63.woff2 +0 -0
  89. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.64.woff2 +0 -0
  90. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.65.woff2 +0 -0
  91. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.66.woff2 +0 -0
  92. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.67.woff2 +0 -0
  93. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.68.woff2 +0 -0
  94. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.69.woff2 +0 -0
  95. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.7.woff2 +0 -0
  96. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.70.woff2 +0 -0
  97. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.71.woff2 +0 -0
  98. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.72.woff2 +0 -0
  99. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.73.woff2 +0 -0
  100. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.74.woff2 +0 -0
  101. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.75.woff2 +0 -0
  102. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.76.woff2 +0 -0
  103. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.77.woff2 +0 -0
  104. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.78.woff2 +0 -0
  105. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.79.woff2 +0 -0
  106. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.8.woff2 +0 -0
  107. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.80.woff2 +0 -0
  108. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.81.woff2 +0 -0
  109. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.82.woff2 +0 -0
  110. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.83.woff2 +0 -0
  111. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.84.woff2 +0 -0
  112. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.85.woff2 +0 -0
  113. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.86.woff2 +0 -0
  114. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.87.woff2 +0 -0
  115. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.88.woff2 +0 -0
  116. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.89.woff2 +0 -0
  117. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.9.woff2 +0 -0
  118. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.90.woff2 +0 -0
  119. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.91.woff2 +0 -0
  120. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/Variable-dynamic-subset.min.css +0 -0
  121. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/SegoeFluentIcons.ttf +0 -0
  122. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/env.js +0 -0
  123. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/6pQH9Hkv.js +0 -0
  124. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/B-XLOWlt.js +0 -0
  125. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CGGCsFu4.js +0 -0
  126. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CW0wlPPy.js +0 -0
  127. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CZPLFskb.js +0 -0
  128. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CZuXpvpo.js +0 -0
  129. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/DF1x2LYX.js +0 -0
  130. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/nodes/0.C49PHrK2.js +0 -0
  131. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/requirements.txt +0 -0
  132. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/setup.cfg +0 -0
  133. {pywebwinui3-1.2.1 → pywebwinui3-1.2.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyWebWinUI3
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Create modern WinUI3-style desktop UIs in Python using pywebview and a Svelte frontend.
5
5
  Home-page: https://github.com/Haruna5718/PyWebWinUI3
6
6
  Author: Haruna5718
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyWebWinUI3
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Create modern WinUI3-style desktop UIs in Python using pywebview and a Svelte frontend.
5
5
  Home-page: https://github.com/Haruna5718/PyWebWinUI3
6
6
  Author: Haruna5718
@@ -112,17 +112,17 @@ pywebwinui3/web/Pretendard/PretendardVariable.subset.91.woff2
112
112
  pywebwinui3/web/Pretendard/Variable-dynamic-subset.min.css
113
113
  pywebwinui3/web/_app/env.js
114
114
  pywebwinui3/web/_app/version.json
115
- pywebwinui3/web/_app/immutable/assets/2.B-R7-woU.css
115
+ pywebwinui3/web/_app/immutable/assets/2.YxEoeVwz.css
116
116
  pywebwinui3/web/_app/immutable/chunks/6pQH9Hkv.js
117
117
  pywebwinui3/web/_app/immutable/chunks/B-XLOWlt.js
118
- pywebwinui3/web/_app/immutable/chunks/CDNCM73h.js
119
118
  pywebwinui3/web/_app/immutable/chunks/CGGCsFu4.js
120
119
  pywebwinui3/web/_app/immutable/chunks/CW0wlPPy.js
121
120
  pywebwinui3/web/_app/immutable/chunks/CZPLFskb.js
122
121
  pywebwinui3/web/_app/immutable/chunks/CZuXpvpo.js
122
+ pywebwinui3/web/_app/immutable/chunks/D94BNvJJ.js
123
123
  pywebwinui3/web/_app/immutable/chunks/DF1x2LYX.js
124
- pywebwinui3/web/_app/immutable/entry/app.DZs-LPnH.js
125
- pywebwinui3/web/_app/immutable/entry/start.BIkwzMz6.js
124
+ pywebwinui3/web/_app/immutable/entry/app.B-Q6XOuJ.js
125
+ pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js
126
126
  pywebwinui3/web/_app/immutable/nodes/0.C49PHrK2.js
127
- pywebwinui3/web/_app/immutable/nodes/1.CrcwixmX.js
128
- pywebwinui3/web/_app/immutable/nodes/2.BX-aQgy_.js
127
+ pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js
128
+ pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js
@@ -1,3 +1,3 @@
1
1
  __all__ = ["core", "event", "util", "type"]
2
2
 
3
- __version__ = '1.2.1'
3
+ __version__ = '1.2.2'
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import ctypes
3
4
  import importlib
4
5
  import json
5
6
  import logging
@@ -12,6 +13,7 @@ from http import HTTPStatus
12
13
  from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
13
14
  from pathlib import Path
14
15
  from urllib.parse import unquote, urlparse, urlunparse
16
+ from ctypes import wintypes
15
17
 
16
18
  import webview
17
19
  from hPyT import title_bar
@@ -29,6 +31,93 @@ DEFAULT_WINDOW_MIN_WIDTH = 100
29
31
  DEFAULT_WINDOW_MIN_HEIGHT = 100
30
32
 
31
33
 
34
+ class _Point(ctypes.Structure):
35
+ _fields_ = [
36
+ ("x", ctypes.c_long),
37
+ ("y", ctypes.c_long),
38
+ ]
39
+
40
+ _user32 = ctypes.WinDLL("user32", use_last_error=True)
41
+ _kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
42
+ _uxtheme = ctypes.WinDLL("uxtheme", use_last_error=True)
43
+
44
+ _kernel32.GetProcAddress.argtypes = [wintypes.HMODULE, wintypes.LPCSTR]
45
+ _kernel32.GetProcAddress.restype = ctypes.c_void_p
46
+ _user32.ReleaseCapture.argtypes = []
47
+ _user32.ReleaseCapture.restype = ctypes.c_bool
48
+ _user32.GetCursorPos.argtypes = [ctypes.POINTER(_Point)]
49
+ _user32.GetCursorPos.restype = ctypes.c_bool
50
+ _user32.GetSystemMenu.argtypes = [ctypes.c_void_p, ctypes.c_bool]
51
+ _user32.GetSystemMenu.restype = ctypes.c_void_p
52
+ _user32.IsZoomed.argtypes = [ctypes.c_void_p]
53
+ _user32.IsZoomed.restype = ctypes.c_bool
54
+ _user32.PostMessageW.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_size_t, ctypes.c_ssize_t]
55
+ _user32.PostMessageW.restype = ctypes.c_bool
56
+ _user32.SendMessageW.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_size_t, ctypes.c_ssize_t]
57
+ _user32.SendMessageW.restype = ctypes.c_ssize_t
58
+ _user32.SetForegroundWindow.argtypes = [ctypes.c_void_p]
59
+ _user32.SetForegroundWindow.restype = ctypes.c_bool
60
+ _user32.ShowWindow.argtypes = [ctypes.c_void_p, ctypes.c_int]
61
+ _user32.ShowWindow.restype = ctypes.c_bool
62
+ _user32.TrackPopupMenu.argtypes = [
63
+ ctypes.c_void_p,
64
+ ctypes.c_uint,
65
+ ctypes.c_int,
66
+ ctypes.c_int,
67
+ ctypes.c_int,
68
+ ctypes.c_void_p,
69
+ ctypes.c_void_p,
70
+ ]
71
+ _user32.TrackPopupMenu.restype = ctypes.c_uint
72
+
73
+
74
+ def _load_ordinal_function(module, ordinal: int, restype, argtypes):
75
+ address = _kernel32.GetProcAddress(
76
+ wintypes.HMODULE(module._handle),
77
+ ctypes.cast(ctypes.c_void_p(ordinal), wintypes.LPCSTR),
78
+ )
79
+ if not address:
80
+ return None
81
+ function = ctypes.WINFUNCTYPE(restype, *argtypes)(address)
82
+ function.argtypes = argtypes
83
+ function.restype = restype
84
+ return function
85
+
86
+
87
+ _allow_dark_mode_for_window = (
88
+ _load_ordinal_function(_uxtheme, 145, ctypes.c_bool, [ctypes.c_void_p, ctypes.c_bool])
89
+ or _load_ordinal_function(_uxtheme, 133, ctypes.c_bool, [ctypes.c_void_p, ctypes.c_bool])
90
+ )
91
+ _set_preferred_app_mode = _load_ordinal_function(_uxtheme, 135, ctypes.c_int, [ctypes.c_int])
92
+ _flush_menu_themes = _load_ordinal_function(_uxtheme, 136, None, [])
93
+
94
+
95
+ def _apply_menu_theme_support(theme: str | None, hwnd: int | None = None):
96
+ if _set_preferred_app_mode is None:
97
+ return False
98
+ try:
99
+ normalized = str(theme or "system").casefold()
100
+ if normalized == "dark":
101
+ mode = 2 # ForceDark
102
+ allow_dark = True
103
+ elif normalized == "light":
104
+ mode = 3 # ForceLight
105
+ allow_dark = False
106
+ else:
107
+ mode = 1 # AllowDark
108
+ allow_dark = True
109
+
110
+ _set_preferred_app_mode(mode)
111
+ if hwnd is not None and _allow_dark_mode_for_window is not None:
112
+ _allow_dark_mode_for_window(hwnd, allow_dark)
113
+ if _flush_menu_themes is not None:
114
+ _flush_menu_themes()
115
+ return True
116
+ except Exception:
117
+ core_logger.debug("Failed to apply menu theme support", exc_info=True)
118
+ return False
119
+
120
+
32
121
  def _default_ui_origin_host(title: str) -> str:
33
122
  slug = re.sub(r"[^a-z0-9]+", "-", str(title).casefold()).strip("-")
34
123
  if not slug:
@@ -93,6 +182,9 @@ class _JsApi:
93
182
  self.syncValue = main.syncValue
94
183
  self.syncValues = main._sync_values
95
184
  self.pin = main.pin
185
+ self.startWindowDrag = main.startWindowDrag
186
+ self.toggleWindowMaximize = main.toggleWindowMaximize
187
+ self.showWindowSystemMenu = main.showWindowSystemMenu
96
188
  self.minimize = main.minimize
97
189
  self.destroy = main.destroy
98
190
  self.resolveResource = main.resolveResource
@@ -141,11 +233,13 @@ class MainWindow:
141
233
  "system_settings": None,
142
234
  "system_nofication": [],
143
235
  "system_pin": False,
236
+ "system_maximized": False,
144
237
  }
145
238
  )
146
239
  self.values.sync = self.queue_sync_value
147
240
  self._start_ui_server()
148
241
  self._configure_webview2_origin_identity()
242
+ _apply_menu_theme_support(self.values.get("system_theme"))
149
243
 
150
244
  self._window = webview.create_window(
151
245
  self._current_title(),
@@ -166,6 +260,8 @@ class MainWindow:
166
260
  self.api._init(self)
167
261
  self._window.events.before_show += self._before_show
168
262
  self._window.events.closed += self._on_closed
263
+ self._window.events.maximized += lambda *_: self._set_window_maximized_state(True)
264
+ self._window.events.restored += lambda *_: self._set_window_maximized_state(False)
169
265
 
170
266
  core_logger.debug("Window created")
171
267
 
@@ -208,6 +304,8 @@ class MainWindow:
208
304
  return state
209
305
 
210
306
  def syncValue(self, key, value):
307
+ if key == "system_theme":
308
+ _apply_menu_theme_support(value, self._window_handle())
211
309
  return self.values.set(key, value, False)
212
310
 
213
311
  def addSettings(self, pageFile: str | Path | None = None, pageData: dict | None = None):
@@ -246,6 +344,15 @@ class MainWindow:
246
344
  def _current_title(self):
247
345
  return self.values.get("system_title", self._title)
248
346
 
347
+ def _window_handle(self) -> int | None:
348
+ try:
349
+ native = getattr(self._window, "native", None)
350
+ if native is None:
351
+ return None
352
+ return int(native.Handle.ToInt64())
353
+ except Exception:
354
+ return None
355
+
249
356
  def _entry_path(self) -> Path:
250
357
  entry = (Path(self.packagePath) / "index.html").resolve()
251
358
  if not entry.is_file():
@@ -329,7 +436,9 @@ class MainWindow:
329
436
  def _before_show(self):
330
437
  try:
331
438
  hwnd = self._window.native.Handle.ToInt64()
439
+ _apply_menu_theme_support(self.values.get("system_theme"), hwnd)
332
440
  title_bar.hide(hwnd)
441
+ self._set_window_maximized_state(bool(_user32.IsZoomed(hwnd)), sync=False)
333
442
  except Exception:
334
443
  core_logger.debug("Failed to hide title bar", exc_info=True)
335
444
 
@@ -364,6 +473,16 @@ class MainWindow:
364
473
  def queue_sync_value(self, key: str, value):
365
474
  self._dispatch_or_defer_sync(key, value)
366
475
 
476
+ def _set_window_maximized_state(self, value: bool, *, sync: bool = True):
477
+ value = bool(value)
478
+ if self.values.get("system_maximized") == value:
479
+ return
480
+ self.values.set("system_maximized", value, False)
481
+ if sync:
482
+ timer = threading.Timer(0.01, lambda: self.queue_sync_value("system_maximized", value))
483
+ timer.daemon = True
484
+ timer.start()
485
+
367
486
  def _init_payload(self):
368
487
  return dict(self.values)
369
488
 
@@ -411,6 +530,87 @@ class MainWindow:
411
530
  except Exception:
412
531
  core_logger.debug("Failed to set window on top", exc_info=True)
413
532
 
533
+ def startWindowDrag(self):
534
+ try:
535
+ native = getattr(self._window, "native", None)
536
+ if native is None:
537
+ return
538
+
539
+ action_type = getattr(importlib.import_module("System"), "Action")
540
+
541
+ def _apply():
542
+ hwnd = int(native.Handle.ToInt64())
543
+ _user32.ReleaseCapture()
544
+ _user32.SendMessageW(hwnd, 0x00A1, 2, 0) # WM_NCLBUTTONDOWN, HTCAPTION
545
+
546
+ if native.InvokeRequired:
547
+ native.BeginInvoke(action_type(_apply))
548
+ else:
549
+ _apply()
550
+ except Exception:
551
+ core_logger.debug("Failed to start system window drag", exc_info=True)
552
+
553
+ def toggleWindowMaximize(self):
554
+ try:
555
+ native = getattr(self._window, "native", None)
556
+ if native is None:
557
+ return
558
+
559
+ action_type = getattr(importlib.import_module("System"), "Action")
560
+
561
+ def _apply():
562
+ hwnd = int(native.Handle.ToInt64())
563
+ is_zoomed = bool(_user32.IsZoomed(hwnd))
564
+ command = 9 if is_zoomed else 3 # SW_RESTORE / SW_MAXIMIZE
565
+ _user32.ShowWindow(hwnd, command)
566
+
567
+ if native.InvokeRequired:
568
+ native.BeginInvoke(action_type(_apply))
569
+ else:
570
+ _apply()
571
+ except Exception:
572
+ core_logger.debug("Failed to toggle window maximize", exc_info=True)
573
+
574
+ def showWindowSystemMenu(self):
575
+ try:
576
+ native = getattr(self._window, "native", None)
577
+ if native is None:
578
+ return
579
+
580
+ action_type = getattr(importlib.import_module("System"), "Action")
581
+
582
+ def _apply():
583
+ hwnd = int(native.Handle.ToInt64())
584
+ menu = _user32.GetSystemMenu(hwnd, False)
585
+ if not menu:
586
+ return
587
+ _apply_menu_theme_support(self.values.get("system_theme"), hwnd)
588
+
589
+ cursor = _Point()
590
+ if not _user32.GetCursorPos(ctypes.byref(cursor)):
591
+ return
592
+
593
+ _user32.SetForegroundWindow(hwnd)
594
+ command = _user32.TrackPopupMenu(
595
+ menu,
596
+ 0x0100 | 0x0002, # TPM_RETURNCMD | TPM_RIGHTBUTTON
597
+ cursor.x,
598
+ cursor.y,
599
+ 0,
600
+ hwnd,
601
+ None,
602
+ )
603
+ if command:
604
+ _user32.PostMessageW(hwnd, 0x0112, command, 0) # WM_SYSCOMMAND
605
+ _user32.PostMessageW(hwnd, 0x0000, 0, 0) # WM_NULL
606
+
607
+ if native.InvokeRequired:
608
+ native.BeginInvoke(action_type(_apply))
609
+ else:
610
+ _apply()
611
+ except Exception:
612
+ core_logger.debug("Failed to show window system menu", exc_info=True)
613
+
414
614
  def get_window_size(self) -> tuple[int, int]:
415
615
  width = int(getattr(self._window, "initial_width", DEFAULT_WINDOW_WIDTH))
416
616
  height = int(getattr(self._window, "initial_height", DEFAULT_WINDOW_HEIGHT))
@@ -246,55 +246,100 @@ class Color:
246
246
  # gap = "inherit"
247
247
  # round = "4px"
248
248
  # border = "1px"
249
+ # margin = "0"
249
250
  # padding = "16px"
251
+ # width = "auto"
252
+ # height = "auto"
250
253
  # align = "inherit"
251
254
  # background = Color.Background.Card.Default
255
+ #
252
256
  # class Button:
253
257
  # disabled = False
254
258
  # value = None
255
- # width = "auto"
256
- # height = "auto"
257
- # type = None
259
+ # type = None # None | "toggle" | "link"
258
260
  # url = None
261
+ # target = "blank"
262
+ # margin = "0"
263
+ # width = "fit-content"
264
+ # height = "fit-content"
265
+ # padding = "6px 10px"
266
+ # round = "4px"
267
+ # color = "inherit"
268
+ # background = Color.Fill.Control.Default
269
+ # hoverBackground = Color.Fill.Control.Secondary
270
+ # activeBackground = Color.Fill.Control.Tertiary
271
+ # borderColor = Color.Stroke.Control.Default
272
+ # shadow = "0 1px 0 0 var(--SmokeFillColorDefaultBrush), 0 0 0 1px var(--button-border-color) inset"
273
+ # selectColor = Color.Fill.Text.OnAccent.Primary
274
+ # selectBackground = Color.Fill.Accent.Default
275
+ # selectHoverBackground = Color.Fill.Accent.Secondary
276
+ # selectActiveBackground = Color.Fill.Accent.Tertiary
277
+ # selectActiveColor = Color.Fill.Text.OnAccent.Secondary
278
+ #
259
279
  # class Check:
260
280
  # disabled = False
261
281
  # value = None
282
+ # margin = "0"
262
283
  # align = "left"
263
- # type = "two"
284
+ # type = "two" # "two" | "three"
285
+ #
264
286
  # class Expender:
265
287
  # disabled = False
266
- # gap = "inherit"
288
+ # margin = "0"
289
+ # width = "auto"
290
+ # height = "auto"
267
291
  # round = "4px"
268
- # padding = "16px"
269
- # align = "inherit"
292
+ #
270
293
  # class Horizontal:
271
294
  # gap = "inherit"
295
+ # padding = "0"
296
+ # margin = "0"
297
+ # width = "auto"
298
+ # height = "auto"
272
299
  # align = "inherit"
300
+ #
273
301
  # class If:
274
302
  # disabled = False
275
- # value = None
303
+ # data = None
304
+ # raw = None
305
+ #
276
306
  # class Image:
277
307
  # disabled = False
278
308
  # source = None
309
+ # margin = "0"
279
310
  # width = "auto"
280
311
  # height = "auto"
312
+ # round = "0"
313
+ # background = "transparent"
314
+ # fit = "contain"
315
+ #
281
316
  # class Input:
282
317
  # disabled = False
318
+ # value = None
319
+ # type = "text"
320
+ # margin = "0"
283
321
  # width = "auto"
284
322
  # height = "auto"
285
- # type = "text"
286
323
  # min = None
287
324
  # max = None
288
- # value = None
325
+ # step = None
326
+ # button = True
327
+ #
289
328
  # class Line:
290
329
  # margin = "0"
291
- # size = "1"
330
+ # size = "1px"
292
331
  # color = Color.Fill.Control.Strong.Default
332
+ #
293
333
  # class Match:
294
334
  # disabled = False
295
- # value = None
335
+ # data = None
336
+ #
296
337
  # class Option:
297
338
  # value = None
339
+ # # internal attrs injected by Select:
340
+ # # optionValue = None
341
+ # # selectType = "Single"
342
+ #
298
343
  # class Page:
299
344
  # title = None
300
345
  # name = None
@@ -302,40 +347,62 @@ class Color:
302
347
  # icon = ""
303
348
  # state = None
304
349
  # badge = None
350
+ #
305
351
  # class Progressbar:
306
352
  # disabled = False
307
- # type = None
353
+ # type = None # "progress" | "running" | "success" | "paused" | "error"
354
+ # margin = "0"
308
355
  # width = "160px"
309
- # value = None
356
+ # height = "4px"
357
+ # data = 0
358
+ # round = "2px"
359
+ # trackRound = "1px"
360
+ # color = Color.Fill.Accent.Default
361
+ # background = Color.Fill.Control.Strong.Default
362
+ # shadow = "0 1px 0 0 var(--SmokeFillColorDefaultBrush)"
363
+ #
310
364
  # class Radio:
311
365
  # disabled = False
312
366
  # group = None
313
367
  # value = None
368
+ # margin = "0"
369
+ # align = "left"
370
+ #
314
371
  # class Repeat:
315
372
  # disabled = False
316
- # data = None
317
- # value = None
373
+ # data = 0
374
+ #
318
375
  # class Select:
319
376
  # disabled = False
377
+ # value = None
378
+ # type = "Single" # "Single" | "Multiple"
379
+ # displayValue = None
380
+ # margin = "0"
320
381
  # width = "auto"
321
382
  # height = "auto"
322
- # value = None
383
+ #
323
384
  # class Slider:
324
385
  # disabled = False
386
+ # value = None
387
+ # type = "horizontal" # "horizontal" | "vertical"
388
+ # margin = "0"
325
389
  # width = "160px"
326
- # type = "horizontal"
327
390
  # min = 0
328
391
  # max = 100
329
392
  # step = 1
330
- # value = None
393
+ #
331
394
  # class Space:
395
+ # size = None
332
396
  # factor = 1
397
+ #
333
398
  # class Switch:
334
399
  # disabled = False
400
+ # value = None
401
+ # margin = "0"
335
402
  # align = "left"
336
403
  # on = "ON"
337
404
  # off = "OFF"
338
- # value = None
405
+ #
339
406
  # class Text:
340
407
  # disabled = False
341
408
  # type = "default"
@@ -343,20 +410,24 @@ class Color:
343
410
  # color = None
344
411
  # size = None
345
412
  # url = None
413
+ # target = "blank"
414
+ #
346
415
  # class Vertical:
347
416
  # gap = "inherit"
417
+ # padding = "0"
418
+ # margin = "0"
348
419
  # width = "auto"
420
+ # height = "auto"
349
421
  # align = "inherit"
422
+ #
350
423
  # class Webview:
351
424
  # disabled = False
352
425
  # source = None
426
+ # data = None
427
+ # aspect = None
428
+ # allow = None
429
+ # margin = "0"
353
430
  # width = "auto"
354
- # height = "auto"
355
-
356
- # Other = [
357
- # "Case",
358
- # "True",
359
- # "False",
360
- # "Header",
361
- # "Content",
362
- # ]
431
+ # height = "400px"
432
+ # round = "0"
433
+ # background = "transparent"