PyWebWinUI3 1.2.0__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.
- {pywebwinui3-1.2.0/PyWebWinUI3.egg-info → pywebwinui3-1.2.2}/PKG-INFO +1 -1
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2/PyWebWinUI3.egg-info}/PKG-INFO +1 -1
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/SOURCES.txt +6 -6
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/__init__.py +1 -1
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/core.py +212 -16
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/type.py +100 -29
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/util.py +122 -3
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/assets/2.CgNWjm1R.css → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/assets/2.YxEoeVwz.css +1 -1
- pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/chunks/D94BNvJJ.js +1 -0
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/entry/app.C_Ap8SyA.js → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/entry/app.B-Q6XOuJ.js +2 -2
- pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js +1 -0
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/nodes/1.gP9JsMWl.js → pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js +1 -1
- pywebwinui3-1.2.2/pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js +142 -0
- pywebwinui3-1.2.2/pywebwinui3/web/_app/version.json +1 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/index.html +9 -9
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/chunks/BF2c23Wg.js +0 -1
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/entry/start.BBET_QR9.js +0 -1
- pywebwinui3-1.2.0/pywebwinui3/web/_app/immutable/nodes/2.SvYNzG6D.js +0 -99
- pywebwinui3-1.2.0/pywebwinui3/web/_app/version.json +0 -1
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/LICENSE +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/MANIFEST.in +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/NOTICE +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/dependency_links.txt +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/requires.txt +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/PyWebWinUI3.egg-info/top_level.txt +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/README.md +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pyproject.toml +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/event.py +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.0.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.1.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.10.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.11.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.12.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.13.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.14.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.15.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.16.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.17.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.18.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.19.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.2.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.20.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.21.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.22.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.23.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.24.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.25.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.26.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.27.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.28.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.29.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.3.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.30.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.31.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.32.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.33.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.34.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.35.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.36.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.37.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.38.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.39.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.4.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.40.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.41.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.42.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.43.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.44.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.45.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.46.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.47.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.48.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.49.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.5.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.50.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.51.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.52.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.53.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.54.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.55.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.56.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.57.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.58.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.59.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.6.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.60.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.61.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.62.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.63.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.64.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.65.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.66.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.67.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.68.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.69.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.7.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.70.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.71.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.72.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.73.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.74.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.75.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.76.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.77.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.78.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.79.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.8.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.80.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.81.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.82.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.83.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.84.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.85.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.86.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.87.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.88.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.89.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.9.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.90.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/PretendardVariable.subset.91.woff2 +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/Pretendard/Variable-dynamic-subset.min.css +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/SegoeFluentIcons.ttf +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/env.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/6pQH9Hkv.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/B-XLOWlt.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CGGCsFu4.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CW0wlPPy.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CZPLFskb.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/CZuXpvpo.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/chunks/DF1x2LYX.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/pywebwinui3/web/_app/immutable/nodes/0.C49PHrK2.js +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/requirements.txt +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/setup.cfg +0 -0
- {pywebwinui3-1.2.0 → pywebwinui3-1.2.2}/setup.py +0 -0
|
@@ -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.
|
|
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/BF2c23Wg.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.
|
|
125
|
-
pywebwinui3/web/_app/immutable/entry/start.
|
|
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.
|
|
128
|
-
pywebwinui3/web/_app/immutable/nodes/2.
|
|
127
|
+
pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js
|
|
128
|
+
pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js
|
|
@@ -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():
|
|
@@ -289,6 +396,14 @@ class MainWindow:
|
|
|
289
396
|
self._ui_server = None
|
|
290
397
|
self._ui_server_thread = None
|
|
291
398
|
|
|
399
|
+
def _resolve_path_under(self, base_path: Path, relative_path: str) -> Path | None:
|
|
400
|
+
candidate = (base_path / relative_path).resolve()
|
|
401
|
+
try:
|
|
402
|
+
candidate.relative_to(base_path)
|
|
403
|
+
except ValueError:
|
|
404
|
+
return None
|
|
405
|
+
return candidate
|
|
406
|
+
|
|
292
407
|
def _resolve_server_path(self, raw_path: str) -> Path | None:
|
|
293
408
|
path = unquote(raw_path or "/")
|
|
294
409
|
if path in {"", "/"}:
|
|
@@ -299,23 +414,10 @@ class MainWindow:
|
|
|
299
414
|
continue
|
|
300
415
|
|
|
301
416
|
prefix = f"/__{name}__/"
|
|
302
|
-
if
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
relative = path[len(prefix) :]
|
|
306
|
-
candidate = (base_path / relative).resolve()
|
|
307
|
-
try:
|
|
308
|
-
candidate.relative_to(base_path)
|
|
309
|
-
except ValueError:
|
|
310
|
-
return None
|
|
311
|
-
return candidate
|
|
417
|
+
if path.startswith(prefix):
|
|
418
|
+
return self._resolve_path_under(base_path, path[len(prefix) :])
|
|
312
419
|
|
|
313
|
-
|
|
314
|
-
try:
|
|
315
|
-
candidate.relative_to(self.packagePath)
|
|
316
|
-
except ValueError:
|
|
317
|
-
return None
|
|
318
|
-
return candidate
|
|
420
|
+
return self._resolve_path_under(self.packagePath, path.lstrip("/"))
|
|
319
421
|
|
|
320
422
|
def _resource_url(self, path: Path) -> str:
|
|
321
423
|
path = path.resolve()
|
|
@@ -334,11 +436,14 @@ class MainWindow:
|
|
|
334
436
|
def _before_show(self):
|
|
335
437
|
try:
|
|
336
438
|
hwnd = self._window.native.Handle.ToInt64()
|
|
439
|
+
_apply_menu_theme_support(self.values.get("system_theme"), hwnd)
|
|
337
440
|
title_bar.hide(hwnd)
|
|
441
|
+
self._set_window_maximized_state(bool(_user32.IsZoomed(hwnd)), sync=False)
|
|
338
442
|
except Exception:
|
|
339
443
|
core_logger.debug("Failed to hide title bar", exc_info=True)
|
|
340
444
|
|
|
341
445
|
def _on_closed(self):
|
|
446
|
+
self.accent.stop()
|
|
342
447
|
self._stop_ui_server()
|
|
343
448
|
self.events.closed.set()
|
|
344
449
|
|
|
@@ -368,6 +473,16 @@ class MainWindow:
|
|
|
368
473
|
def queue_sync_value(self, key: str, value):
|
|
369
474
|
self._dispatch_or_defer_sync(key, value)
|
|
370
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
|
+
|
|
371
486
|
def _init_payload(self):
|
|
372
487
|
return dict(self.values)
|
|
373
488
|
|
|
@@ -415,6 +530,87 @@ class MainWindow:
|
|
|
415
530
|
except Exception:
|
|
416
531
|
core_logger.debug("Failed to set window on top", exc_info=True)
|
|
417
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
|
+
|
|
418
614
|
def get_window_size(self) -> tuple[int, int]:
|
|
419
615
|
width = int(getattr(self._window, "initial_width", DEFAULT_WINDOW_WIDTH))
|
|
420
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
|
-
#
|
|
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
|
-
#
|
|
288
|
+
# margin = "0"
|
|
289
|
+
# width = "auto"
|
|
290
|
+
# height = "auto"
|
|
267
291
|
# round = "4px"
|
|
268
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
325
|
+
# step = None
|
|
326
|
+
# button = True
|
|
327
|
+
#
|
|
289
328
|
# class Line:
|
|
290
329
|
# margin = "0"
|
|
291
|
-
# size = "
|
|
330
|
+
# size = "1px"
|
|
292
331
|
# color = Color.Fill.Control.Strong.Default
|
|
332
|
+
#
|
|
293
333
|
# class Match:
|
|
294
334
|
# disabled = False
|
|
295
|
-
#
|
|
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
|
-
#
|
|
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 =
|
|
317
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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 = "
|
|
355
|
-
|
|
356
|
-
#
|
|
357
|
-
# "Case",
|
|
358
|
-
# "True",
|
|
359
|
-
# "False",
|
|
360
|
-
# "Header",
|
|
361
|
-
# "Content",
|
|
362
|
-
# ]
|
|
431
|
+
# height = "400px"
|
|
432
|
+
# round = "0"
|
|
433
|
+
# background = "transparent"
|