clapp-pm 1.0.41__tar.gz → 1.0.43__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.
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/PKG-INFO +1 -1
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_pm.egg-info/SOURCES.txt +48 -0
- clapp_pm-1.0.43/index.json +51 -0
- clapp_pm-1.0.43/packages/cloud-calc/README.md +93 -0
- clapp_pm-1.0.43/packages/cloud-calc/main.py +364 -0
- clapp_pm-1.0.43/packages/cloud-calc/manifest.json +8 -0
- clapp_pm-1.0.43/packages/cloud-calc/requirements.txt +1 -0
- clapp_pm-1.0.43/packages/pycloudos/README.md +279 -0
- clapp_pm-1.0.43/packages/pycloudos/main.py +193 -0
- clapp_pm-1.0.43/packages/pycloudos/manifest.json +15 -0
- clapp_pm-1.0.43/packages/pycloudos/pycloud_fs/home/Desktop/test_desktop_file.txt +11 -0
- clapp_pm-1.0.43/packages/pycloudos/pycloud_fs/home/default/Desktop/test_dosya.txt +1 -0
- clapp_pm-1.0.43/packages/pycloudos/pycloud_fs/home/default/Desktop/test_script.py +11 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/__init__.py +7 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/dock.py +722 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/flet_html_widgets.py +0 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/theme.py +930 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/ui.py +381 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/wallpaper.py +830 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/widgets.py +688 -0
- clapp_pm-1.0.43/packages/pycloudos/rain/windowmanager.py +605 -0
- clapp_pm-1.0.43/packages/pycloudos/requirements-dev.txt +43 -0
- clapp_pm-1.0.43/packages/pycloudos/requirements.txt +43 -0
- clapp_pm-1.0.43/packages/pycloudos/setup_deps.py +422 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/publish_command.py +32 -44
- clapp_pm-1.0.43/test-app/clapp-packages-repo/README.md +46 -0
- clapp_pm-1.0.43/test-app/clapp-packages-repo/packages.json +40 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/version.json +1 -1
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/version.py +1 -1
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/CHANGELOG.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/GITHUB_SETUP.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/LICENSE +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/MANIFEST.in +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/PYPI_UPLOAD.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/advanced_test.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/apps/test-app/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/apps/test-app/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/apps/test-app/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/build_index.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/check_env.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/clapp_core.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/clean_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/cli_commands.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/dependency_resolver.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/doctor_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/info_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/install_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/installer.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/list_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/manifest_schema.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/manifest_validator.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/package_registry.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/package_runner.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/post_install_hint.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/publish_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/remote_registry.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/setup.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/system_test.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/uninstall_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/validate_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/version.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/version_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/backup_current/where_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/build_index.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/cache_manager.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/check_env.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/index.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-finder/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-finder/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-finder/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-finder/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-web-browser/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-web-browser/cloud_browser.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-web-browser/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/cloud-web-browser/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/test-app-2/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/test-app-2/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages/test-app-2/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp-packages-repo/packages.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_core.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_pm.egg-info/dependency_links.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_pm.egg-info/entry_points.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_pm.egg-info/requires.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clapp_pm.egg-info/top_level.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/clean_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/cli_commands.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/dependency_resolver.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/deploy.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/docs/developer_guide.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/doctor_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/info_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/install_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/installer.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/list_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/manifest_schema.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/manifest_validator.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/new_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/package_registry.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/package_runner.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/package_signing.py +0 -0
- {clapp_pm-1.0.41/test-app → clapp_pm-1.0.43/packages/cloud-calc}/clapp-packages-repo/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43/packages/cloud-calc/clapp-packages-repo}/index.json +0 -0
- {clapp_pm-1.0.41/test-app → clapp_pm-1.0.43/packages/cloud-calc}/clapp-packages-repo/packages.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-finder/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-finder/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-finder/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-finder/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-web-browser/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-web-browser/cloud_browser.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-web-browser/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/cloud-web-browser/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/test-app-2/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/test-app-2/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/packages/test-app-2/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/post_install_hint.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/progress_utils.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/pyproject.toml +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/remote_registry.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/setup.cfg +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/setup.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/smart_search.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/system_test.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/templates/dart/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/templates/lua/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/templates/python/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/templates/python/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/templates/python/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/index.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-finder/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-finder/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-finder/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-finder/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-web-browser/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-web-browser/cloud_browser.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-web-browser/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/cloud-web-browser/requirements.txt +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app-2/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app-2/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/clapp-packages-repo/packages/test-app-2/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/packages/test-app/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/packages/test-app/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app/packages/test-app/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app-2/README.md +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app-2/main.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/test-app-2/manifest.json +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/uninstall_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/validate_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/version_command.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/version_manager.py +0 -0
- {clapp_pm-1.0.41 → clapp_pm-1.0.43}/where_command.py +0 -0
@@ -131,6 +131,13 @@ where_command.py
|
|
131
131
|
./clapp_pm.egg-info/requires.txt
|
132
132
|
./clapp_pm.egg-info/top_level.txt
|
133
133
|
./docs/developer_guide.md
|
134
|
+
./packages/cloud-calc/README.md
|
135
|
+
./packages/cloud-calc/main.py
|
136
|
+
./packages/cloud-calc/manifest.json
|
137
|
+
./packages/cloud-calc/requirements.txt
|
138
|
+
./packages/cloud-calc/clapp-packages-repo/README.md
|
139
|
+
./packages/cloud-calc/clapp-packages-repo/index.json
|
140
|
+
./packages/cloud-calc/clapp-packages-repo/packages.json
|
134
141
|
./packages/cloud-finder/README.md
|
135
142
|
./packages/cloud-finder/main.py
|
136
143
|
./packages/cloud-finder/manifest.json
|
@@ -139,6 +146,23 @@ where_command.py
|
|
139
146
|
./packages/cloud-web-browser/cloud_browser.py
|
140
147
|
./packages/cloud-web-browser/manifest.json
|
141
148
|
./packages/cloud-web-browser/requirements.txt
|
149
|
+
./packages/pycloudos/README.md
|
150
|
+
./packages/pycloudos/main.py
|
151
|
+
./packages/pycloudos/manifest.json
|
152
|
+
./packages/pycloudos/requirements-dev.txt
|
153
|
+
./packages/pycloudos/requirements.txt
|
154
|
+
./packages/pycloudos/setup_deps.py
|
155
|
+
./packages/pycloudos/pycloud_fs/home/Desktop/test_desktop_file.txt
|
156
|
+
./packages/pycloudos/pycloud_fs/home/default/Desktop/test_dosya.txt
|
157
|
+
./packages/pycloudos/pycloud_fs/home/default/Desktop/test_script.py
|
158
|
+
./packages/pycloudos/rain/__init__.py
|
159
|
+
./packages/pycloudos/rain/dock.py
|
160
|
+
./packages/pycloudos/rain/flet_html_widgets.py
|
161
|
+
./packages/pycloudos/rain/theme.py
|
162
|
+
./packages/pycloudos/rain/ui.py
|
163
|
+
./packages/pycloudos/rain/wallpaper.py
|
164
|
+
./packages/pycloudos/rain/widgets.py
|
165
|
+
./packages/pycloudos/rain/windowmanager.py
|
142
166
|
./packages/test-app-2/README.md
|
143
167
|
./packages/test-app-2/main.py
|
144
168
|
./packages/test-app-2/manifest.json
|
@@ -214,6 +238,13 @@ clapp-packages-repo/packages/test-app-2/README.md
|
|
214
238
|
clapp-packages-repo/packages/test-app-2/main.py
|
215
239
|
clapp-packages-repo/packages/test-app-2/manifest.json
|
216
240
|
docs/developer_guide.md
|
241
|
+
packages/cloud-calc/README.md
|
242
|
+
packages/cloud-calc/main.py
|
243
|
+
packages/cloud-calc/manifest.json
|
244
|
+
packages/cloud-calc/requirements.txt
|
245
|
+
packages/cloud-calc/clapp-packages-repo/README.md
|
246
|
+
packages/cloud-calc/clapp-packages-repo/index.json
|
247
|
+
packages/cloud-calc/clapp-packages-repo/packages.json
|
217
248
|
packages/cloud-finder/README.md
|
218
249
|
packages/cloud-finder/main.py
|
219
250
|
packages/cloud-finder/manifest.json
|
@@ -222,6 +253,23 @@ packages/cloud-web-browser/README.md
|
|
222
253
|
packages/cloud-web-browser/cloud_browser.py
|
223
254
|
packages/cloud-web-browser/manifest.json
|
224
255
|
packages/cloud-web-browser/requirements.txt
|
256
|
+
packages/pycloudos/README.md
|
257
|
+
packages/pycloudos/main.py
|
258
|
+
packages/pycloudos/manifest.json
|
259
|
+
packages/pycloudos/requirements-dev.txt
|
260
|
+
packages/pycloudos/requirements.txt
|
261
|
+
packages/pycloudos/setup_deps.py
|
262
|
+
packages/pycloudos/pycloud_fs/home/Desktop/test_desktop_file.txt
|
263
|
+
packages/pycloudos/pycloud_fs/home/default/Desktop/test_dosya.txt
|
264
|
+
packages/pycloudos/pycloud_fs/home/default/Desktop/test_script.py
|
265
|
+
packages/pycloudos/rain/__init__.py
|
266
|
+
packages/pycloudos/rain/dock.py
|
267
|
+
packages/pycloudos/rain/flet_html_widgets.py
|
268
|
+
packages/pycloudos/rain/theme.py
|
269
|
+
packages/pycloudos/rain/ui.py
|
270
|
+
packages/pycloudos/rain/wallpaper.py
|
271
|
+
packages/pycloudos/rain/widgets.py
|
272
|
+
packages/pycloudos/rain/windowmanager.py
|
225
273
|
packages/test-app-2/README.md
|
226
274
|
packages/test-app-2/main.py
|
227
275
|
packages/test-app-2/manifest.json
|
@@ -0,0 +1,51 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "cloud-calc",
|
4
|
+
"version": "1.0.0",
|
5
|
+
"language": "python",
|
6
|
+
"description": "Modern ve profesyonel hesap makinesi uygulaması",
|
7
|
+
"entry": "main.py",
|
8
|
+
"dependencies": [],
|
9
|
+
"folder": "cloud-calc",
|
10
|
+
"repo_url": "https://github.com/mburakmmm/clapp-packages",
|
11
|
+
"subdir": "cloud-calc"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"name": "cloud-finder",
|
15
|
+
"version": "1.0.0",
|
16
|
+
"language": "python",
|
17
|
+
"description": "MacOS Finder'a benzeyen modern dosya gezgini",
|
18
|
+
"entry": "main.py",
|
19
|
+
"dependencies": [],
|
20
|
+
"folder": "cloud-finder",
|
21
|
+
"repo_url": "https://github.com/mburakmmm/clapp-packages",
|
22
|
+
"subdir": "cloud-finder"
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"name": "cloud-web-browser",
|
26
|
+
"version": "1.0.0",
|
27
|
+
"language": "python",
|
28
|
+
"description": "Modern ve hızlı web tarayıcı uygulaması. Python ve Flet framework'ü ile geliştirilmiştir. WebView teknolojisi ile gerçek web sayfalarını uygulama içinde görüntüler.",
|
29
|
+
"entry": "cloud_browser.py",
|
30
|
+
"dependencies": [
|
31
|
+
"flet>=0.21.0",
|
32
|
+
"flet-webview>=0.1.0",
|
33
|
+
"requests>=2.31.0",
|
34
|
+
"beautifulsoup4>=4.12.0"
|
35
|
+
],
|
36
|
+
"folder": "cloud-web-browser",
|
37
|
+
"repo_url": "https://github.com/mburakmmm/clapp-packages",
|
38
|
+
"subdir": "cloud-web-browser"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"name": "test-app-2",
|
42
|
+
"version": "1.0.0",
|
43
|
+
"language": "python",
|
44
|
+
"description": "Basit bir Python Hello World uygulaması",
|
45
|
+
"entry": "main.py",
|
46
|
+
"dependencies": [],
|
47
|
+
"folder": "test-app-2",
|
48
|
+
"repo_url": "https://github.com/mburakmmm/clapp-packages",
|
49
|
+
"subdir": "test-app-2"
|
50
|
+
}
|
51
|
+
]
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Cloud Calculator
|
2
|
+
|
3
|
+
Modern ve profesyonel bir hesap makinesi uygulaması. Python ve Flet framework kullanılarak geliştirilmiştir.
|
4
|
+
|
5
|
+
## Özellikler
|
6
|
+
|
7
|
+
### 🧮 Temel İşlemler
|
8
|
+
- Toplama, çıkarma, çarpma, bölme
|
9
|
+
- Ondalık sayı desteği
|
10
|
+
- Geri alma (backspace) fonksiyonu
|
11
|
+
- Temizleme (clear) fonksiyonu
|
12
|
+
|
13
|
+
### 🔬 Bilimsel Hesap Makinesi
|
14
|
+
- Karekök (√)
|
15
|
+
- Kare alma (x²)
|
16
|
+
- Trigonometrik fonksiyonlar (sin, cos, tan)
|
17
|
+
- Logaritma (log)
|
18
|
+
|
19
|
+
### 🎨 Modern Arayüz
|
20
|
+
- Gradient arka plan
|
21
|
+
- Yuvarlak butonlar
|
22
|
+
- Tema değiştirme (Açık/Koyu)
|
23
|
+
- Responsive tasarım
|
24
|
+
- Geçmiş işlemler görüntüleme
|
25
|
+
|
26
|
+
### 📱 Kullanıcı Deneyimi
|
27
|
+
- İşlem geçmişi
|
28
|
+
- Son 3 işlemi görüntüleme
|
29
|
+
- Geçmiş temizleme
|
30
|
+
- Hata yönetimi
|
31
|
+
- Anlık sonuç gösterimi
|
32
|
+
|
33
|
+
## Kurulum
|
34
|
+
|
35
|
+
1. Gerekli paketleri yükleyin:
|
36
|
+
```bash
|
37
|
+
pip install -r requirements.txt
|
38
|
+
```
|
39
|
+
|
40
|
+
2. Uygulamayı çalıştırın:
|
41
|
+
```bash
|
42
|
+
python main.py
|
43
|
+
```
|
44
|
+
|
45
|
+
## Kullanım
|
46
|
+
|
47
|
+
### Temel İşlemler
|
48
|
+
- Sayıları ve operatörleri tıklayarak işlem oluşturun
|
49
|
+
- "=" butonuna basarak sonucu görün
|
50
|
+
- "C" butonu ile temizleyin
|
51
|
+
- "⌫" butonu ile son karakteri silin
|
52
|
+
|
53
|
+
### Bilimsel İşlemler
|
54
|
+
- Bir sayı girin
|
55
|
+
- İstediğiniz bilimsel fonksiyonu seçin (√, x², sin, cos, tan, log)
|
56
|
+
- Sonuç otomatik olarak hesaplanır
|
57
|
+
|
58
|
+
### Tema Değiştirme
|
59
|
+
- Sol üst köşedeki tema butonuna tıklayın
|
60
|
+
- Açık ve koyu tema arasında geçiş yapın
|
61
|
+
|
62
|
+
### Geçmiş
|
63
|
+
- Son 3 işlem otomatik olarak görüntülenir
|
64
|
+
- Sağ üst köşedeki temizleme butonu ile geçmişi silebilirsiniz
|
65
|
+
|
66
|
+
## Teknik Detaylar
|
67
|
+
|
68
|
+
- **Framework**: Flet (Python)
|
69
|
+
- **Dil**: Python 3.7+
|
70
|
+
- **Pencere Boyutu**: 400x700 piksel
|
71
|
+
- **Tema**: Gradient arka planlar
|
72
|
+
- **Buton Stili**: Yuvarlak, modern tasarım
|
73
|
+
|
74
|
+
## Ekran Görüntüleri
|
75
|
+
|
76
|
+
Uygulama modern bir arayüze sahiptir:
|
77
|
+
- Mor-mavi gradient arka plan
|
78
|
+
- Beyaz metin ve butonlar
|
79
|
+
- Yuvarlak, modern buton tasarımı
|
80
|
+
- Temiz ve düzenli layout
|
81
|
+
|
82
|
+
## Geliştirme
|
83
|
+
|
84
|
+
Bu proje açık kaynak kodludur ve geliştirilmeye açıktır. Yeni özellikler eklemek için:
|
85
|
+
|
86
|
+
1. Projeyi fork edin
|
87
|
+
2. Yeni özellik dalı oluşturun
|
88
|
+
3. Değişikliklerinizi commit edin
|
89
|
+
4. Pull request gönderin
|
90
|
+
|
91
|
+
## Lisans
|
92
|
+
|
93
|
+
Bu proje MIT lisansı altında lisanslanmıştır.
|
@@ -0,0 +1,364 @@
|
|
1
|
+
import flet as ft
|
2
|
+
import math
|
3
|
+
from datetime import datetime
|
4
|
+
|
5
|
+
class CloudCalculator:
|
6
|
+
def __init__(self):
|
7
|
+
self.current_expression = ""
|
8
|
+
self.history = []
|
9
|
+
self.is_dark_theme = False
|
10
|
+
|
11
|
+
def main(self, page: ft.Page):
|
12
|
+
page.title = "Cloud Calculator"
|
13
|
+
page.theme_mode = ft.ThemeMode.LIGHT
|
14
|
+
page.window_width = 200
|
15
|
+
page.window_height = 700
|
16
|
+
page.window_resizable = True
|
17
|
+
page.padding = 0
|
18
|
+
page.spacing = 0
|
19
|
+
page.bgcolor = "#667eea"
|
20
|
+
|
21
|
+
# Ana container - Tam genişlik, tam yükseklik
|
22
|
+
self.main_container = ft.Container(
|
23
|
+
expand=True,
|
24
|
+
border_radius=0,
|
25
|
+
padding=15,
|
26
|
+
gradient=ft.LinearGradient(
|
27
|
+
begin=ft.alignment.top_center,
|
28
|
+
end=ft.alignment.bottom_center,
|
29
|
+
colors=["#667eea", "#764ba2"]
|
30
|
+
)
|
31
|
+
)
|
32
|
+
|
33
|
+
# Ekran alanı
|
34
|
+
self.display = ft.TextField(
|
35
|
+
value="0",
|
36
|
+
text_align=ft.TextAlign.RIGHT,
|
37
|
+
border=ft.InputBorder.NONE,
|
38
|
+
text_size=32,
|
39
|
+
color="white",
|
40
|
+
bgcolor="transparent",
|
41
|
+
read_only=True,
|
42
|
+
height=80
|
43
|
+
)
|
44
|
+
|
45
|
+
# Geçmiş alanı
|
46
|
+
self.history_display = ft.Text(
|
47
|
+
"",
|
48
|
+
size=14,
|
49
|
+
color="white",
|
50
|
+
text_align=ft.TextAlign.RIGHT,
|
51
|
+
opacity=0.7
|
52
|
+
)
|
53
|
+
|
54
|
+
# Tema değiştirme butonu
|
55
|
+
self.theme_button = ft.IconButton(
|
56
|
+
icon="dark_mode",
|
57
|
+
icon_color="white",
|
58
|
+
on_click=self.toggle_theme
|
59
|
+
)
|
60
|
+
|
61
|
+
# Geçmiş temizleme butonu
|
62
|
+
self.clear_history_button = ft.IconButton(
|
63
|
+
icon="clear_all",
|
64
|
+
icon_color="white",
|
65
|
+
on_click=self.clear_history
|
66
|
+
)
|
67
|
+
|
68
|
+
# Üst bar
|
69
|
+
top_bar = ft.Row(
|
70
|
+
controls=[
|
71
|
+
self.theme_button,
|
72
|
+
ft.Text("Cloud Calculator", size=18, color="white", weight=ft.FontWeight.BOLD),
|
73
|
+
self.clear_history_button
|
74
|
+
],
|
75
|
+
alignment=ft.MainAxisAlignment.SPACE_BETWEEN
|
76
|
+
)
|
77
|
+
|
78
|
+
# Buton stilleri
|
79
|
+
button_style = {
|
80
|
+
"width": 60,
|
81
|
+
"height": 60
|
82
|
+
}
|
83
|
+
|
84
|
+
# Sayı butonları - Doğru standart düzen
|
85
|
+
number_buttons = [
|
86
|
+
ft.ElevatedButton("7", **button_style, on_click=lambda e: self.add_to_expression("7")),
|
87
|
+
ft.ElevatedButton("8", **button_style, on_click=lambda e: self.add_to_expression("8")),
|
88
|
+
ft.ElevatedButton("9", **button_style, on_click=lambda e: self.add_to_expression("9")),
|
89
|
+
ft.ElevatedButton("÷", **button_style, on_click=lambda e: self.add_to_expression("/"), bgcolor="#ff9500"),
|
90
|
+
|
91
|
+
ft.ElevatedButton("4", **button_style, on_click=lambda e: self.add_to_expression("4")),
|
92
|
+
ft.ElevatedButton("5", **button_style, on_click=lambda e: self.add_to_expression("5")),
|
93
|
+
ft.ElevatedButton("6", **button_style, on_click=lambda e: self.add_to_expression("6")),
|
94
|
+
ft.ElevatedButton("×", **button_style, on_click=lambda e: self.add_to_expression("*"), bgcolor="#ff9500"),
|
95
|
+
|
96
|
+
ft.ElevatedButton("1", **button_style, on_click=lambda e: self.add_to_expression("1")),
|
97
|
+
ft.ElevatedButton("2", **button_style, on_click=lambda e: self.add_to_expression("2")),
|
98
|
+
ft.ElevatedButton("3", **button_style, on_click=lambda e: self.add_to_expression("3")),
|
99
|
+
ft.ElevatedButton("-", **button_style, on_click=lambda e: self.add_to_expression("-"), bgcolor="#ff9500"),
|
100
|
+
|
101
|
+
ft.ElevatedButton("0", **button_style, on_click=lambda e: self.add_to_expression("0")),
|
102
|
+
ft.ElevatedButton(".", **button_style, on_click=lambda e: self.add_to_expression(".")),
|
103
|
+
ft.ElevatedButton("+", **button_style, on_click=lambda e: self.add_to_expression("+"), bgcolor="#ff9500"),
|
104
|
+
ft.ElevatedButton("=", **button_style, on_click=self.calculate, bgcolor="#ff9500"),
|
105
|
+
]
|
106
|
+
|
107
|
+
# Bilimsel hesap makinesi butonları artık manuel satırlarda tanımlanıyor
|
108
|
+
|
109
|
+
# Manuel satır düzeni - Doğru sıralama
|
110
|
+
row1 = ft.Row(
|
111
|
+
controls=[
|
112
|
+
ft.ElevatedButton("7", **button_style, on_click=lambda e: self.add_to_expression("7")),
|
113
|
+
ft.ElevatedButton("8", **button_style, on_click=lambda e: self.add_to_expression("8")),
|
114
|
+
ft.ElevatedButton("9", **button_style, on_click=lambda e: self.add_to_expression("9")),
|
115
|
+
ft.ElevatedButton("÷", **button_style, on_click=lambda e: self.add_to_expression("/"), bgcolor="#ff9500"),
|
116
|
+
],
|
117
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
118
|
+
spacing=10
|
119
|
+
)
|
120
|
+
|
121
|
+
row2 = ft.Row(
|
122
|
+
controls=[
|
123
|
+
ft.ElevatedButton("4", **button_style, on_click=lambda e: self.add_to_expression("4")),
|
124
|
+
ft.ElevatedButton("5", **button_style, on_click=lambda e: self.add_to_expression("5")),
|
125
|
+
ft.ElevatedButton("6", **button_style, on_click=lambda e: self.add_to_expression("6")),
|
126
|
+
ft.ElevatedButton("×", **button_style, on_click=lambda e: self.add_to_expression("*"), bgcolor="#ff9500"),
|
127
|
+
],
|
128
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
129
|
+
spacing=10
|
130
|
+
)
|
131
|
+
|
132
|
+
row3 = ft.Row(
|
133
|
+
controls=[
|
134
|
+
ft.ElevatedButton("1", **button_style, on_click=lambda e: self.add_to_expression("1")),
|
135
|
+
ft.ElevatedButton("2", **button_style, on_click=lambda e: self.add_to_expression("2")),
|
136
|
+
ft.ElevatedButton("3", **button_style, on_click=lambda e: self.add_to_expression("3")),
|
137
|
+
ft.ElevatedButton("-", **button_style, on_click=lambda e: self.add_to_expression("-"), bgcolor="#ff9500"),
|
138
|
+
],
|
139
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
140
|
+
spacing=10
|
141
|
+
)
|
142
|
+
|
143
|
+
row4 = ft.Row(
|
144
|
+
controls=[
|
145
|
+
ft.ElevatedButton("0", **button_style, on_click=lambda e: self.add_to_expression("0")),
|
146
|
+
ft.ElevatedButton(".", **button_style, on_click=lambda e: self.add_to_expression(".")),
|
147
|
+
ft.ElevatedButton("+", **button_style, on_click=lambda e: self.add_to_expression("+"), bgcolor="#ff9500"),
|
148
|
+
ft.ElevatedButton("=", **button_style, on_click=self.calculate, bgcolor="#ff9500"),
|
149
|
+
],
|
150
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
151
|
+
spacing=10
|
152
|
+
)
|
153
|
+
|
154
|
+
# Bilimsel butonlar - Manuel satır düzeni
|
155
|
+
scientific_row1 = ft.Row(
|
156
|
+
controls=[
|
157
|
+
ft.ElevatedButton("C", width=60, height=40, on_click=self.clear, bgcolor="#ff3b30"),
|
158
|
+
ft.ElevatedButton("⌫", width=60, height=40, on_click=self.backspace, bgcolor="#ff9500"),
|
159
|
+
ft.ElevatedButton("√", width=60, height=40, on_click=self.sqrt, bgcolor="#007aff"),
|
160
|
+
ft.ElevatedButton("x²", width=60, height=40, on_click=self.square, bgcolor="#007aff"),
|
161
|
+
],
|
162
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
163
|
+
spacing=10
|
164
|
+
)
|
165
|
+
|
166
|
+
scientific_row2 = ft.Row(
|
167
|
+
controls=[
|
168
|
+
ft.ElevatedButton("sin", width=60, height=40, on_click=self.sin, bgcolor="#007aff"),
|
169
|
+
ft.ElevatedButton("cos", width=60, height=40, on_click=self.cos, bgcolor="#007aff"),
|
170
|
+
ft.ElevatedButton("tan", width=60, height=40, on_click=self.tan, bgcolor="#007aff"),
|
171
|
+
ft.ElevatedButton("log", width=60, height=40, on_click=self.log, bgcolor="#007aff"),
|
172
|
+
],
|
173
|
+
alignment=ft.MainAxisAlignment.CENTER,
|
174
|
+
spacing=10
|
175
|
+
)
|
176
|
+
|
177
|
+
# Ana layout - Manuel satır düzeni
|
178
|
+
self.main_container.content = ft.Column(
|
179
|
+
controls=[
|
180
|
+
top_bar,
|
181
|
+
self.history_display,
|
182
|
+
self.display,
|
183
|
+
ft.Divider(color="white", opacity=0.3),
|
184
|
+
scientific_row1,
|
185
|
+
scientific_row2,
|
186
|
+
row1,
|
187
|
+
row2,
|
188
|
+
row3,
|
189
|
+
row4
|
190
|
+
],
|
191
|
+
spacing=10,
|
192
|
+
horizontal_alignment=ft.CrossAxisAlignment.CENTER
|
193
|
+
)
|
194
|
+
|
195
|
+
page.add(self.main_container)
|
196
|
+
page.update()
|
197
|
+
|
198
|
+
def add_to_expression(self, value):
|
199
|
+
if self.display.value == "0" and value not in ["+", "-", "*", "/", "."]:
|
200
|
+
self.current_expression = value
|
201
|
+
else:
|
202
|
+
self.current_expression += value
|
203
|
+
|
204
|
+
self.display.value = self.current_expression
|
205
|
+
self.display.update()
|
206
|
+
|
207
|
+
def calculate(self, e=None):
|
208
|
+
try:
|
209
|
+
if self.current_expression:
|
210
|
+
result = eval(self.current_expression)
|
211
|
+
if isinstance(result, (int, float)):
|
212
|
+
if result == int(result):
|
213
|
+
result = int(result)
|
214
|
+
|
215
|
+
# Geçmişe ekle
|
216
|
+
history_entry = f"{self.current_expression} = {result}"
|
217
|
+
self.history.append({
|
218
|
+
"expression": self.current_expression,
|
219
|
+
"result": result,
|
220
|
+
"timestamp": datetime.now().strftime("%H:%M:%S")
|
221
|
+
})
|
222
|
+
|
223
|
+
# Geçmişi güncelle
|
224
|
+
self.update_history_display()
|
225
|
+
|
226
|
+
self.display.value = str(result)
|
227
|
+
self.current_expression = str(result)
|
228
|
+
else:
|
229
|
+
self.display.value = "Error"
|
230
|
+
self.display.update()
|
231
|
+
except:
|
232
|
+
self.display.value = "Error"
|
233
|
+
self.display.update()
|
234
|
+
|
235
|
+
def clear(self, e=None):
|
236
|
+
self.current_expression = ""
|
237
|
+
self.display.value = "0"
|
238
|
+
self.display.update()
|
239
|
+
|
240
|
+
def backspace(self, e=None):
|
241
|
+
if self.current_expression:
|
242
|
+
self.current_expression = self.current_expression[:-1]
|
243
|
+
if not self.current_expression:
|
244
|
+
self.display.value = "0"
|
245
|
+
else:
|
246
|
+
self.display.value = self.current_expression
|
247
|
+
self.display.update()
|
248
|
+
|
249
|
+
def sqrt(self, e=None):
|
250
|
+
try:
|
251
|
+
if self.current_expression:
|
252
|
+
result = math.sqrt(float(self.current_expression))
|
253
|
+
self.add_to_history(f"√({self.current_expression})", result)
|
254
|
+
self.display.value = str(result)
|
255
|
+
self.current_expression = str(result)
|
256
|
+
self.display.update()
|
257
|
+
except:
|
258
|
+
self.display.value = "Error"
|
259
|
+
self.display.update()
|
260
|
+
|
261
|
+
def square(self, e=None):
|
262
|
+
try:
|
263
|
+
if self.current_expression:
|
264
|
+
result = float(self.current_expression) ** 2
|
265
|
+
self.add_to_history(f"({self.current_expression})²", result)
|
266
|
+
self.display.value = str(result)
|
267
|
+
self.current_expression = str(result)
|
268
|
+
self.display.update()
|
269
|
+
except:
|
270
|
+
self.display.value = "Error"
|
271
|
+
self.display.update()
|
272
|
+
|
273
|
+
def sin(self, e=None):
|
274
|
+
try:
|
275
|
+
if self.current_expression:
|
276
|
+
result = math.sin(math.radians(float(self.current_expression)))
|
277
|
+
self.add_to_history(f"sin({self.current_expression}°)", result)
|
278
|
+
self.display.value = str(result)
|
279
|
+
self.current_expression = str(result)
|
280
|
+
self.display.update()
|
281
|
+
except:
|
282
|
+
self.display.value = "Error"
|
283
|
+
self.display.update()
|
284
|
+
|
285
|
+
def cos(self, e=None):
|
286
|
+
try:
|
287
|
+
if self.current_expression:
|
288
|
+
result = math.cos(math.radians(float(self.current_expression)))
|
289
|
+
self.add_to_history(f"cos({self.current_expression}°)", result)
|
290
|
+
self.display.value = str(result)
|
291
|
+
self.current_expression = str(result)
|
292
|
+
self.display.update()
|
293
|
+
except:
|
294
|
+
self.display.value = "Error"
|
295
|
+
self.display.update()
|
296
|
+
|
297
|
+
def tan(self, e=None):
|
298
|
+
try:
|
299
|
+
if self.current_expression:
|
300
|
+
result = math.tan(math.radians(float(self.current_expression)))
|
301
|
+
self.add_to_history(f"tan({self.current_expression}°)", result)
|
302
|
+
self.display.value = str(result)
|
303
|
+
self.current_expression = str(result)
|
304
|
+
self.display.update()
|
305
|
+
except:
|
306
|
+
self.display.value = "Error"
|
307
|
+
self.display.update()
|
308
|
+
|
309
|
+
def log(self, e=None):
|
310
|
+
try:
|
311
|
+
if self.current_expression:
|
312
|
+
result = math.log10(float(self.current_expression))
|
313
|
+
self.add_to_history(f"log({self.current_expression})", result)
|
314
|
+
self.display.value = str(result)
|
315
|
+
self.current_expression = str(result)
|
316
|
+
self.display.update()
|
317
|
+
except:
|
318
|
+
self.display.value = "Error"
|
319
|
+
self.display.update()
|
320
|
+
|
321
|
+
def add_to_history(self, expression, result):
|
322
|
+
self.history.append({
|
323
|
+
"expression": expression,
|
324
|
+
"result": result,
|
325
|
+
"timestamp": datetime.now().strftime("%H:%M:%S")
|
326
|
+
})
|
327
|
+
self.update_history_display()
|
328
|
+
|
329
|
+
def update_history_display(self):
|
330
|
+
if self.history:
|
331
|
+
# Son 3 işlemi göster
|
332
|
+
recent_history = self.history[-3:]
|
333
|
+
history_text = "\n".join([f"{entry['expression']} = {entry['result']}" for entry in recent_history])
|
334
|
+
self.history_display.value = history_text
|
335
|
+
self.history_display.update()
|
336
|
+
|
337
|
+
def clear_history(self, e=None):
|
338
|
+
self.history = []
|
339
|
+
self.history_display.value = ""
|
340
|
+
self.history_display.update()
|
341
|
+
|
342
|
+
def toggle_theme(self, e):
|
343
|
+
self.is_dark_theme = not self.is_dark_theme
|
344
|
+
if self.is_dark_theme:
|
345
|
+
self.main_container.gradient = ft.LinearGradient(
|
346
|
+
begin=ft.alignment.top_center,
|
347
|
+
end=ft.alignment.bottom_center,
|
348
|
+
colors=["#2c3e50", "#34495e"]
|
349
|
+
)
|
350
|
+
self.theme_button.icon = "light_mode"
|
351
|
+
else:
|
352
|
+
self.main_container.gradient = ft.LinearGradient(
|
353
|
+
begin=ft.alignment.top_center,
|
354
|
+
end=ft.alignment.bottom_center,
|
355
|
+
colors=["#667eea", "#764ba2"]
|
356
|
+
)
|
357
|
+
self.theme_button.icon = "dark_mode"
|
358
|
+
|
359
|
+
self.main_container.update()
|
360
|
+
self.theme_button.update()
|
361
|
+
|
362
|
+
if __name__ == "__main__":
|
363
|
+
calculator = CloudCalculator()
|
364
|
+
ft.app(target=calculator.main)
|
@@ -0,0 +1 @@
|
|
1
|
+
flet>=0.21.0
|