lumiview 0.1.0__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.
- lumiview-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +135 -0
- lumiview-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +65 -0
- lumiview-0.1.0/.github/workflows/build.yml +185 -0
- lumiview-0.1.0/.gitignore +222 -0
- lumiview-0.1.0/CONTRIBUTING.md +72 -0
- lumiview-0.1.0/Cargo.lock +2448 -0
- lumiview-0.1.0/Cargo.toml +32 -0
- lumiview-0.1.0/LICENSE +373 -0
- lumiview-0.1.0/PKG-INFO +196 -0
- lumiview-0.1.0/README.md +163 -0
- lumiview-0.1.0/README_zh.md +159 -0
- lumiview-0.1.0/docs/architecture.md +116 -0
- lumiview-0.1.0/docs/getting-started.md +157 -0
- lumiview-0.1.0/docs/integrations.md +120 -0
- lumiview-0.1.0/docs/plugins.md +153 -0
- lumiview-0.1.0/docs/serve.md +97 -0
- lumiview-0.1.0/examples/bridge_demo.py +87 -0
- lumiview-0.1.0/examples/custom_titlebar.py +80 -0
- lumiview-0.1.0/examples/django_demo.py +159 -0
- lumiview-0.1.0/examples/events.py +65 -0
- lumiview-0.1.0/examples/fastapi_demo.py +99 -0
- lumiview-0.1.0/examples/hello_world.py +56 -0
- lumiview-0.1.0/examples/hello_world_sync.py +39 -0
- lumiview-0.1.0/examples/menu.py +109 -0
- lumiview-0.1.0/examples/multi_window.py +63 -0
- lumiview-0.1.0/examples/tray.py +131 -0
- lumiview-0.1.0/pyproject.toml +51 -0
- lumiview-0.1.0/python/lumiview/__init__.py +137 -0
- lumiview-0.1.0/python/lumiview/_binding.py +103 -0
- lumiview-0.1.0/python/lumiview/_core.pyi +1241 -0
- lumiview-0.1.0/python/lumiview/app.py +966 -0
- lumiview-0.1.0/python/lumiview/bridge.py +344 -0
- lumiview-0.1.0/python/lumiview/events.py +643 -0
- lumiview-0.1.0/python/lumiview/menu.py +645 -0
- lumiview-0.1.0/python/lumiview/plugins/__init__.py +5 -0
- lumiview-0.1.0/python/lumiview/plugins/window_controls.py +224 -0
- lumiview-0.1.0/python/lumiview/scope.py +405 -0
- lumiview-0.1.0/python/lumiview/serve/__init__.py +46 -0
- lumiview-0.1.0/python/lumiview/serve/asgi.py +224 -0
- lumiview-0.1.0/python/lumiview/serve/base.py +167 -0
- lumiview-0.1.0/python/lumiview/serve/static.py +142 -0
- lumiview-0.1.0/python/lumiview/serve/wsgi.py +234 -0
- lumiview-0.1.0/python/lumiview/task.py +283 -0
- lumiview-0.1.0/python/lumiview/tray.py +150 -0
- lumiview-0.1.0/python/lumiview/utils.py +98 -0
- lumiview-0.1.0/python/lumiview/window.py +2034 -0
- lumiview-0.1.0/src/event_loop.rs +425 -0
- lumiview-0.1.0/src/events.rs +1073 -0
- lumiview-0.1.0/src/lib.rs +113 -0
- lumiview-0.1.0/src/menu.rs +493 -0
- lumiview-0.1.0/src/monitor.rs +92 -0
- lumiview-0.1.0/src/tray.rs +362 -0
- lumiview-0.1.0/src/types.rs +680 -0
- lumiview-0.1.0/src/window.rs +969 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: Bug Report - Bug反馈
|
|
2
|
+
description: Create a report to help us improve. - 反馈问题,帮助我们改进
|
|
3
|
+
title: "[Bug] "
|
|
4
|
+
labels:
|
|
5
|
+
- 🐛 bug
|
|
6
|
+
|
|
7
|
+
body:
|
|
8
|
+
- type: markdown
|
|
9
|
+
attributes:
|
|
10
|
+
value: |
|
|
11
|
+
Before filling in this `issue`, please make sure that there are no similar or duplicate `issues` that have been opened.
|
|
12
|
+
填写此 `issue` 前,请先确认已经开启的 `issue` 没有类似或重复的 `issue`。
|
|
13
|
+
|
|
14
|
+
- type: dropdown
|
|
15
|
+
id: system
|
|
16
|
+
attributes:
|
|
17
|
+
label: OS - 操作系统
|
|
18
|
+
options:
|
|
19
|
+
- Windows
|
|
20
|
+
- macOS
|
|
21
|
+
- Linux
|
|
22
|
+
validations:
|
|
23
|
+
required: true
|
|
24
|
+
|
|
25
|
+
- type: input
|
|
26
|
+
id: os_version
|
|
27
|
+
attributes:
|
|
28
|
+
label: OS Version - 操作系统版本
|
|
29
|
+
description: |
|
|
30
|
+
e.g. Windows 11 24H2 / macOS 15 Sequoia / Ubuntu 24.04
|
|
31
|
+
例如:Windows 11 24H2 / macOS 15 Sequoia / Ubuntu 24.04
|
|
32
|
+
placeholder: Windows 11 24H2
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
35
|
+
|
|
36
|
+
- type: input
|
|
37
|
+
id: python_version
|
|
38
|
+
attributes:
|
|
39
|
+
label: Python Version - Python 版本
|
|
40
|
+
description: |
|
|
41
|
+
LumiView requires Python >= 3.10.
|
|
42
|
+
LumiView 要求 Python >= 3.10。
|
|
43
|
+
placeholder: "3.12"
|
|
44
|
+
validations:
|
|
45
|
+
required: true
|
|
46
|
+
|
|
47
|
+
- type: input
|
|
48
|
+
id: version
|
|
49
|
+
attributes:
|
|
50
|
+
label: LumiView Version - LumiView 版本
|
|
51
|
+
description: |
|
|
52
|
+
Run `pip show lumiview` to check. LumiView is still in alpha, so please always test with the latest version first.
|
|
53
|
+
运行 `pip show lumiview` 查看。LumiView 仍处于 alpha 阶段,请务必先测试最新版本再提交。
|
|
54
|
+
placeholder: 0.1.0
|
|
55
|
+
validations:
|
|
56
|
+
required: true
|
|
57
|
+
|
|
58
|
+
- type: dropdown
|
|
59
|
+
id: area
|
|
60
|
+
attributes:
|
|
61
|
+
label: Affected Area - 影响范围
|
|
62
|
+
description: |
|
|
63
|
+
Which part of LumiView is involved? You can select multiple.
|
|
64
|
+
涉及 LumiView 的哪个部分?可多选。
|
|
65
|
+
multiple: true
|
|
66
|
+
options:
|
|
67
|
+
- Window / 窗口管理(几何、状态、特效、全屏)
|
|
68
|
+
- WebView / 网页加载与渲染
|
|
69
|
+
- JS Bridge (IPC) / 桥接通信
|
|
70
|
+
- Event system / 事件系统
|
|
71
|
+
- Plugins / 插件
|
|
72
|
+
- serve protocol / 协议处理
|
|
73
|
+
- Installation & build / 安装与构建
|
|
74
|
+
- Other / 其他
|
|
75
|
+
validations:
|
|
76
|
+
required: false
|
|
77
|
+
|
|
78
|
+
- type: textarea
|
|
79
|
+
id: exist
|
|
80
|
+
attributes:
|
|
81
|
+
label: Existing behavior - 现有行为
|
|
82
|
+
description: |
|
|
83
|
+
Please describe the problem you have encountered carefully.
|
|
84
|
+
请仔细描述你所遇到的问题。
|
|
85
|
+
validations:
|
|
86
|
+
required: true
|
|
87
|
+
|
|
88
|
+
- type: textarea
|
|
89
|
+
id: expect
|
|
90
|
+
attributes:
|
|
91
|
+
label: Expected behavior - 预期行为
|
|
92
|
+
description: |
|
|
93
|
+
Please describe in detail the results you wish to achieve.
|
|
94
|
+
请仔细描述你要得到的结果。
|
|
95
|
+
validations:
|
|
96
|
+
required: true
|
|
97
|
+
|
|
98
|
+
- type: textarea
|
|
99
|
+
id: reproduce
|
|
100
|
+
attributes:
|
|
101
|
+
label: To Reproduce - 复现问题
|
|
102
|
+
description: |
|
|
103
|
+
How do you trigger this bug? Please walk us through it step by step, and provide a minimal reproduction script if possible.
|
|
104
|
+
这个 bug 是怎么触发的?请详细告诉我们是怎样出现这个情况的,如果可能请提供最小复现脚本。
|
|
105
|
+
placeholder: |
|
|
106
|
+
```python
|
|
107
|
+
from lumiview import App, Window, WindowOptions
|
|
108
|
+
|
|
109
|
+
# minimal reproduction code
|
|
110
|
+
```
|
|
111
|
+
validations:
|
|
112
|
+
required: false
|
|
113
|
+
|
|
114
|
+
- type: textarea
|
|
115
|
+
id: logs
|
|
116
|
+
attributes:
|
|
117
|
+
label: Logs & Screenshots - 日志与截图
|
|
118
|
+
description: |
|
|
119
|
+
Please provide the full traceback, console output, or screenshots. If the window crashes, try running with `RUST_BACKTRACE=1`.
|
|
120
|
+
请提供完整的 traceback、控制台输出或截图。若窗口崩溃,可尝试以 `RUST_BACKTRACE=1` 运行。
|
|
121
|
+
validations:
|
|
122
|
+
required: false
|
|
123
|
+
|
|
124
|
+
- type: checkboxes
|
|
125
|
+
id: know
|
|
126
|
+
attributes:
|
|
127
|
+
label: This issue is unique - 这个 issue 是唯一的
|
|
128
|
+
options:
|
|
129
|
+
- label: I have searched the issue tracker and confirmed that there is no identical issue. 我已经搜索问题追踪器并且确认没有相同的 Issue。
|
|
130
|
+
required: true
|
|
131
|
+
- label: I admit that I previously checked all options without thorough verification and directly submitted this Issue, and I agree that it can be closed directly. 我承认此前未充分核实便勾选了所有选项并直接提交此 Issue ,且同意该 Issue 可被直接关闭。
|
|
132
|
+
- label: I confirm that I am currently using the latest version of LumiView. If not, this issue can be closed directly. 我确认当前使用的是最新版本的 LumiView,若非如此,此 Issue 可被直接关闭。
|
|
133
|
+
required: true
|
|
134
|
+
- label: I promise to provide a detailed description of the encountered issue, along with relevant logs and screenshots, rather than offering incomplete or vague information. 我承诺将详细描述遇到的问题,并提供相关日志与截图,而非提供不完整或模糊的信息。
|
|
135
|
+
required: true
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Feature request - 功能请求
|
|
2
|
+
description: Suggest an idea for this project - 为这个项目推荐一个新想法
|
|
3
|
+
title: "[Feature] "
|
|
4
|
+
labels:
|
|
5
|
+
- 🪁 enhancement
|
|
6
|
+
|
|
7
|
+
body:
|
|
8
|
+
- type: markdown
|
|
9
|
+
attributes:
|
|
10
|
+
value: |
|
|
11
|
+
Before filling in this `issue`, please make sure that there are no similar or duplicate `issues` that have been opened.
|
|
12
|
+
填写此 `issue` 前,请先确认已经开启的 `issue` 没有类似或重复的 `issue`。
|
|
13
|
+
|
|
14
|
+
- type: textarea
|
|
15
|
+
id: feature
|
|
16
|
+
attributes:
|
|
17
|
+
label: What new features do you want? - 你想要什么新功能?
|
|
18
|
+
description: |
|
|
19
|
+
What new feature or change you want? How it improves? Please tell us the requirements is with a clear and detailed description, put your screenshots if possible.
|
|
20
|
+
你想要什么新功能或者什么改变?这会带来什么提升?请清晰而详细地描述你的需求,如果可以的话最好附带截图。
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
- type: textarea
|
|
25
|
+
id: use_case
|
|
26
|
+
attributes:
|
|
27
|
+
label: Use Case - 使用场景
|
|
28
|
+
description: |
|
|
29
|
+
What is your application scenario and how do you use LumiView? (e.g. a desktop app you are building with LumiView)
|
|
30
|
+
你的应用场景是什么?你如何使用 LumiView?(例如:你正在用 LumiView 构建的桌面应用)
|
|
31
|
+
placeholder: |
|
|
32
|
+
I'm building a desktop app with LumiView, and I need...
|
|
33
|
+
validations:
|
|
34
|
+
required: false
|
|
35
|
+
|
|
36
|
+
- type: dropdown
|
|
37
|
+
id: area
|
|
38
|
+
attributes:
|
|
39
|
+
label: Related Area - 相关范围
|
|
40
|
+
description: |
|
|
41
|
+
Which part of LumiView is involved? You can select multiple.
|
|
42
|
+
涉及 LumiView 的哪个部分?可多选。
|
|
43
|
+
multiple: true
|
|
44
|
+
options:
|
|
45
|
+
- Window / 窗口管理
|
|
46
|
+
- WebView
|
|
47
|
+
- JS Bridge (IPC)
|
|
48
|
+
- Event system / 事件系统
|
|
49
|
+
- Plugins / 插件
|
|
50
|
+
- serve protocol / 协议处理
|
|
51
|
+
- Packaging / 打包分发
|
|
52
|
+
- Other / 其他
|
|
53
|
+
validations:
|
|
54
|
+
required: false
|
|
55
|
+
|
|
56
|
+
- type: checkboxes
|
|
57
|
+
id: know
|
|
58
|
+
attributes:
|
|
59
|
+
label: This issue is unique - 这个 issue 是唯一的
|
|
60
|
+
options:
|
|
61
|
+
- label: I have searched the issue tracker and confirmed that there is no identical issue. 我已经搜索问题追踪器并且确认没有相同的 Issue。
|
|
62
|
+
required: true
|
|
63
|
+
- label: I admit that I previously checked all options without thorough verification and directly submitted this Issue, and I agree that it can be closed directly. 我承认此前未充分核实便勾选了所有选项并直接提交此 Issue ,且同意该 Issue 可被直接关闭。
|
|
64
|
+
- label: I promise to provide a detailed description of the new feature I want, along with reasonable justification, rather than offering incomplete or vague information. 我承诺我会详细描述我想要的新功能,并附上合理的理由,而非提供不完整或模糊的信息。
|
|
65
|
+
required: true
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
name: Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
branches:
|
|
8
|
+
- main
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
linux:
|
|
16
|
+
runs-on: ${{ matrix.platform.runner }}
|
|
17
|
+
strategy:
|
|
18
|
+
matrix:
|
|
19
|
+
platform:
|
|
20
|
+
- runner: ubuntu-latest
|
|
21
|
+
target: x86_64
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- name: Install webkit2gtk
|
|
25
|
+
run: |
|
|
26
|
+
sudo apt-get update
|
|
27
|
+
# libxdo-dev: muda's GTK backend sends predefined-item shortcuts
|
|
28
|
+
# (copy/paste/...) through xdo; bundled into the wheel by
|
|
29
|
+
# auditwheel (no GTK-style global-type-registry concern).
|
|
30
|
+
sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libglib2.0-dev libxdo-dev
|
|
31
|
+
- uses: actions/setup-python@v5
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.12"
|
|
34
|
+
|
|
35
|
+
- name: Build wheel
|
|
36
|
+
uses: PyO3/maturin-action@v1
|
|
37
|
+
with:
|
|
38
|
+
args: --release --out dist
|
|
39
|
+
- name: Repair manylinux (exclude system GTK/GLib/dbus — must not bundle)
|
|
40
|
+
run: |
|
|
41
|
+
pip install auditwheel
|
|
42
|
+
# GTK/GLib libraries can never be bundled into the wheel: the
|
|
43
|
+
# GObject type registry is process-global, so a second copy breaks
|
|
44
|
+
# any process that also links the system GTK (LumiView's own tao
|
|
45
|
+
# window and wryview both do). libdbus-1/libsystemd likewise exist
|
|
46
|
+
# on every desktop that can run GTK3 (the gtk .deb depends on
|
|
47
|
+
# them) — bundling them only adds weight and risks version skew.
|
|
48
|
+
auditwheel repair \
|
|
49
|
+
--exclude 'libgtk-3.*' \
|
|
50
|
+
--exclude 'libgdk-3.*' \
|
|
51
|
+
--exclude 'libglib-2.0.*' \
|
|
52
|
+
--exclude 'libgobject-2.0.*' \
|
|
53
|
+
--exclude 'libgio-2.0.*' \
|
|
54
|
+
--exclude 'libgmodule-2.0.*' \
|
|
55
|
+
--exclude 'libgdk_pixbuf-2.0.*' \
|
|
56
|
+
--exclude 'libpango-1.0.*' \
|
|
57
|
+
--exclude 'libpangocairo-1.0.*' \
|
|
58
|
+
--exclude 'libpangoft2-1.0.*' \
|
|
59
|
+
--exclude 'libatk-1.0.*' \
|
|
60
|
+
--exclude 'libharfbuzz.*' \
|
|
61
|
+
--exclude 'libfribidi.*' \
|
|
62
|
+
--exclude 'libepoxy.*' \
|
|
63
|
+
--exclude 'libcairo.*' \
|
|
64
|
+
--exclude 'libcairo-gobject.*' \
|
|
65
|
+
--exclude 'libxkbcommon.*' \
|
|
66
|
+
--exclude 'libwayland-client.*' \
|
|
67
|
+
--exclude 'libdbus-1.*' \
|
|
68
|
+
--exclude 'libsystemd.*' \
|
|
69
|
+
--exclude 'libgcrypt.*' \
|
|
70
|
+
--exclude 'libgpg-error.*' \
|
|
71
|
+
--exclude 'libcap.*' \
|
|
72
|
+
--exclude 'libzstd.*' \
|
|
73
|
+
--exclude 'liblz4.*' \
|
|
74
|
+
--exclude 'liblzma.*' \
|
|
75
|
+
-w dist dist/lumiview-*.whl
|
|
76
|
+
rm -f dist/*-linux_x86_64.whl
|
|
77
|
+
- name: Upload wheels
|
|
78
|
+
uses: actions/upload-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: wheels-linux
|
|
81
|
+
path: dist
|
|
82
|
+
|
|
83
|
+
windows:
|
|
84
|
+
runs-on: ${{ matrix.platform.runner }}
|
|
85
|
+
strategy:
|
|
86
|
+
matrix:
|
|
87
|
+
platform:
|
|
88
|
+
- runner: windows-latest
|
|
89
|
+
target: x64
|
|
90
|
+
- runner: windows-latest
|
|
91
|
+
target: x86
|
|
92
|
+
python-arch: x86
|
|
93
|
+
steps:
|
|
94
|
+
- uses: actions/checkout@v7
|
|
95
|
+
- uses: actions/setup-python@v7
|
|
96
|
+
with:
|
|
97
|
+
python-version: "3.12"
|
|
98
|
+
architecture: ${{ matrix.platform.python-arch || 'x64' }}
|
|
99
|
+
- name: Build wheels
|
|
100
|
+
uses: PyO3/maturin-action@v1
|
|
101
|
+
with:
|
|
102
|
+
target: ${{ matrix.platform.target }}
|
|
103
|
+
args: --release --out dist --find-interpreter
|
|
104
|
+
- name: Upload wheels
|
|
105
|
+
uses: actions/upload-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: wheels-windows-${{ matrix.platform.target }}
|
|
108
|
+
path: dist
|
|
109
|
+
|
|
110
|
+
macos:
|
|
111
|
+
runs-on: ${{ matrix.platform.runner }}
|
|
112
|
+
strategy:
|
|
113
|
+
matrix:
|
|
114
|
+
platform:
|
|
115
|
+
- runner: macos-14
|
|
116
|
+
target: x86_64
|
|
117
|
+
- runner: macos-latest
|
|
118
|
+
target: aarch64
|
|
119
|
+
steps:
|
|
120
|
+
- uses: actions/checkout@v4
|
|
121
|
+
- uses: actions/setup-python@v5
|
|
122
|
+
with:
|
|
123
|
+
python-version: "3.12"
|
|
124
|
+
- name: Build wheel
|
|
125
|
+
uses: PyO3/maturin-action@v1
|
|
126
|
+
with:
|
|
127
|
+
target: ${{ matrix.platform.target }}
|
|
128
|
+
args: --release --out dist
|
|
129
|
+
- name: Upload wheels
|
|
130
|
+
uses: actions/upload-artifact@v4
|
|
131
|
+
with:
|
|
132
|
+
name: wheels-macos-${{ matrix.platform.target }}
|
|
133
|
+
path: dist
|
|
134
|
+
|
|
135
|
+
sdist:
|
|
136
|
+
runs-on: ubuntu-latest
|
|
137
|
+
steps:
|
|
138
|
+
- uses: actions/checkout@v4
|
|
139
|
+
- name: Build sdist
|
|
140
|
+
uses: PyO3/maturin-action@v1
|
|
141
|
+
with:
|
|
142
|
+
command: sdist
|
|
143
|
+
args: --out dist
|
|
144
|
+
- name: Upload sdist
|
|
145
|
+
uses: actions/upload-artifact@v4
|
|
146
|
+
with:
|
|
147
|
+
name: wheels-sdist
|
|
148
|
+
path: dist
|
|
149
|
+
|
|
150
|
+
pypi-publish:
|
|
151
|
+
runs-on: ubuntu-latest
|
|
152
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
153
|
+
needs: [linux, windows, macos, sdist]
|
|
154
|
+
permissions:
|
|
155
|
+
id-token: write
|
|
156
|
+
contents: read
|
|
157
|
+
environment:
|
|
158
|
+
name: pypi
|
|
159
|
+
url: https://pypi.org/project/lumiview/
|
|
160
|
+
steps:
|
|
161
|
+
- uses: actions/checkout@v4
|
|
162
|
+
|
|
163
|
+
- name: Validate version match
|
|
164
|
+
shell: pwsh
|
|
165
|
+
run: |
|
|
166
|
+
$pyprojectVersion = (Select-String -Path pyproject.toml -Pattern 'version = "(.+?)"').Matches.Groups[1].Value
|
|
167
|
+
$gitTag = "${{ github.ref }}".Split('/')[-1]
|
|
168
|
+
$gitTagVersion = $gitTag.TrimStart('v')
|
|
169
|
+
if ($pyprojectVersion -ne $gitTagVersion) {
|
|
170
|
+
Write-Error "Version mismatch: pyproject.toml=$pyprojectVersion vs tag=$gitTag"
|
|
171
|
+
exit 1
|
|
172
|
+
}
|
|
173
|
+
Write-Host "Versions match: $pyprojectVersion"
|
|
174
|
+
|
|
175
|
+
- name: Retrieve release distributions
|
|
176
|
+
uses: actions/download-artifact@v4
|
|
177
|
+
with:
|
|
178
|
+
pattern: wheels-*
|
|
179
|
+
path: dist/
|
|
180
|
+
merge-multiple: true
|
|
181
|
+
|
|
182
|
+
- name: Publish release distributions to PyPI
|
|
183
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
184
|
+
with:
|
|
185
|
+
packages-dir: dist/
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
parts/
|
|
18
|
+
sdist/
|
|
19
|
+
var/
|
|
20
|
+
wheels/
|
|
21
|
+
share/python-wheels/
|
|
22
|
+
*.egg-info/
|
|
23
|
+
.installed.cfg
|
|
24
|
+
*.egg
|
|
25
|
+
MANIFEST
|
|
26
|
+
|
|
27
|
+
# PyInstaller
|
|
28
|
+
# Usually these files are written by a python script from a template
|
|
29
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
30
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Installer logs
|
|
34
|
+
pip-log.txt
|
|
35
|
+
pip-delete-this-directory.txt
|
|
36
|
+
|
|
37
|
+
# Unit test / coverage reports
|
|
38
|
+
htmlcov/
|
|
39
|
+
.tox/
|
|
40
|
+
.nox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
*.py.cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
cover/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Django stuff:
|
|
57
|
+
*.log
|
|
58
|
+
local_settings.py
|
|
59
|
+
db.sqlite3
|
|
60
|
+
db.sqlite3-journal
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
.pybuilder/
|
|
74
|
+
target/
|
|
75
|
+
|
|
76
|
+
# Jupyter Notebook
|
|
77
|
+
.ipynb_checkpoints
|
|
78
|
+
|
|
79
|
+
# IPython
|
|
80
|
+
profile_default/
|
|
81
|
+
ipython_config.py
|
|
82
|
+
|
|
83
|
+
# pyenv
|
|
84
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
85
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
86
|
+
# .python-version
|
|
87
|
+
|
|
88
|
+
# pipenv
|
|
89
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
90
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
91
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
92
|
+
# install all needed dependencies.
|
|
93
|
+
#Pipfile.lock
|
|
94
|
+
|
|
95
|
+
# UV
|
|
96
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
97
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
98
|
+
# commonly ignored for libraries.
|
|
99
|
+
#uv.lock
|
|
100
|
+
|
|
101
|
+
# poetry
|
|
102
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
103
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
104
|
+
# commonly ignored for libraries.
|
|
105
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
106
|
+
#poetry.lock
|
|
107
|
+
#poetry.toml
|
|
108
|
+
|
|
109
|
+
# pdm
|
|
110
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
111
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
112
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
113
|
+
#pdm.lock
|
|
114
|
+
#pdm.toml
|
|
115
|
+
.pdm-python
|
|
116
|
+
.pdm-build/
|
|
117
|
+
|
|
118
|
+
# pixi
|
|
119
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
120
|
+
#pixi.lock
|
|
121
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
122
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
123
|
+
.pixi
|
|
124
|
+
|
|
125
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
126
|
+
__pypackages__/
|
|
127
|
+
|
|
128
|
+
# Celery stuff
|
|
129
|
+
celerybeat-schedule
|
|
130
|
+
celerybeat.pid
|
|
131
|
+
|
|
132
|
+
# SageMath parsed files
|
|
133
|
+
*.sage.py
|
|
134
|
+
|
|
135
|
+
# Environments
|
|
136
|
+
.env
|
|
137
|
+
.envrc
|
|
138
|
+
.venv
|
|
139
|
+
env/
|
|
140
|
+
venv/
|
|
141
|
+
ENV/
|
|
142
|
+
env.bak/
|
|
143
|
+
venv.bak/
|
|
144
|
+
|
|
145
|
+
# Spyder project settings
|
|
146
|
+
.spyderproject
|
|
147
|
+
.spyproject
|
|
148
|
+
|
|
149
|
+
# Rope project settings
|
|
150
|
+
.ropeproject
|
|
151
|
+
|
|
152
|
+
# mkdocs documentation
|
|
153
|
+
/site
|
|
154
|
+
|
|
155
|
+
# mypy
|
|
156
|
+
.mypy_cache/
|
|
157
|
+
.dmypy.json
|
|
158
|
+
dmypy.json
|
|
159
|
+
|
|
160
|
+
# Pyre type checker
|
|
161
|
+
.pyre/
|
|
162
|
+
|
|
163
|
+
# pytype static type analyzer
|
|
164
|
+
.pytype/
|
|
165
|
+
|
|
166
|
+
# Cython debug symbols
|
|
167
|
+
cython_debug/
|
|
168
|
+
|
|
169
|
+
# PyCharm
|
|
170
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
171
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
172
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
173
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
174
|
+
.idea/
|
|
175
|
+
|
|
176
|
+
# Abstra
|
|
177
|
+
# Abstra is an AI-powered process automation framework.
|
|
178
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
179
|
+
# Learn more at https://abstra.io/docs
|
|
180
|
+
.abstra/
|
|
181
|
+
|
|
182
|
+
# Visual Studio Code
|
|
183
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
184
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
185
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
186
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
187
|
+
.vscode/
|
|
188
|
+
|
|
189
|
+
# Ruff stuff:
|
|
190
|
+
.ruff_cache/
|
|
191
|
+
|
|
192
|
+
# PyPI configuration file
|
|
193
|
+
.pypirc
|
|
194
|
+
|
|
195
|
+
# Cursor
|
|
196
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
197
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
198
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
199
|
+
.cursorignore
|
|
200
|
+
.cursorindexingignore
|
|
201
|
+
|
|
202
|
+
# Marimo
|
|
203
|
+
marimo/_static/
|
|
204
|
+
marimo/_lsp/
|
|
205
|
+
__marimo__/
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
# stubs
|
|
209
|
+
|
|
210
|
+
stubs/
|
|
211
|
+
|
|
212
|
+
python/**/*.pyd
|
|
213
|
+
python/**/*.pdb
|
|
214
|
+
|
|
215
|
+
.claude
|
|
216
|
+
CLAUDE.md
|
|
217
|
+
|
|
218
|
+
.DS_Store
|
|
219
|
+
|
|
220
|
+
plan.md
|
|
221
|
+
TODO.md
|
|
222
|
+
docs/superpowers
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Contributing to LumiView
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing! LumiView is in early development, and we welcome feedback, bug reports, and thoughtful PRs.
|
|
4
|
+
|
|
5
|
+
**Before starting any significant work**, please open a [Discussion](https://github.com/xiaosuawa/LumiView/discussions) or [Issue](https://github.com/xiaosuawa/LumiView/issues) to align on the approach. Unsolicited PRs that touch the public API may not be merged if they conflict with the planned direction.
|
|
6
|
+
|
|
7
|
+
## Ways to Contribute
|
|
8
|
+
|
|
9
|
+
### 🐛 Bug Reports
|
|
10
|
+
|
|
11
|
+
- Check existing [Issues](https://github.com/xiaosuawa/LumiView/issues) first
|
|
12
|
+
- Include: OS + version, Python version, `lumiview` version, minimal repro code
|
|
13
|
+
- **Include logs**: run the repro with DEBUG logging enabled and paste
|
|
14
|
+
the relevant output:
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
logging.getLogger("lumiview").setLevel(logging.DEBUG)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The `lumiview.*` log tree covers window / tray lifecycle and event
|
|
23
|
+
dispatch — it usually pinpoints the issue faster than the repro alone.
|
|
24
|
+
|
|
25
|
+
### 💡 Feature Ideas
|
|
26
|
+
|
|
27
|
+
- Use [Discussions](https://github.com/xiaosuawa/LumiView/discussions) for brainstorming
|
|
28
|
+
- Tell us about your use case — it helps us prioritize
|
|
29
|
+
|
|
30
|
+
### 📖 Examples & Documentation
|
|
31
|
+
|
|
32
|
+
- Improvements to the [`examples/`](examples/) directory are always welcome
|
|
33
|
+
- Docstring improvements and typo fixes don't need prior discussion
|
|
34
|
+
|
|
35
|
+
### 🔧 Code Contributions
|
|
36
|
+
|
|
37
|
+
1. **Discuss first** — open an issue or discussion for anything beyond small fixes
|
|
38
|
+
2. **Follow existing patterns** — match the code style, type annotations, and docstring conventions
|
|
39
|
+
3. **Keep PRs focused** — one thing per PR
|
|
40
|
+
|
|
41
|
+
## Development Setup
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Clone and install dev dependencies
|
|
45
|
+
git clone https://github.com/xiaosuawa/LumiView.git
|
|
46
|
+
cd lumiview
|
|
47
|
+
pip install maturin
|
|
48
|
+
|
|
49
|
+
# Build and install in debug mode
|
|
50
|
+
maturin develop
|
|
51
|
+
|
|
52
|
+
# Run an example
|
|
53
|
+
python examples/hello_world.py
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Project Structure
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
src/ Rust bindings (PyO3 + tao + wryview)
|
|
60
|
+
python/lumiview/ Python layer (App, Window, Bridge, Task, serve)
|
|
61
|
+
examples/ Runnable example scripts
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Code Style
|
|
65
|
+
|
|
66
|
+
- Python: follow existing type annotation patterns (all public APIs are typed)
|
|
67
|
+
- Rust: standard `cargo fmt` + `cargo clippy`
|
|
68
|
+
- Docstrings: Google-style for Python, `///` for Rust
|
|
69
|
+
|
|
70
|
+
## License
|
|
71
|
+
|
|
72
|
+
By contributing, you agree that your contributions will be licensed under the [MPL-2.0](LICENSE).
|