mikiui 0.0.1__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.
- mikiui-0.0.1/PKG-INFO +161 -0
- mikiui-0.0.1/README.md +132 -0
- mikiui-0.0.1/mikiui/__init__.py +44 -0
- mikiui-0.0.1/mikiui/app/__init__.py +64 -0
- mikiui-0.0.1/mikiui/app/app.py +789 -0
- mikiui-0.0.1/mikiui/app/marketplace.py +486 -0
- mikiui-0.0.1/mikiui/app/plugin_discovery.py +519 -0
- mikiui-0.0.1/mikiui/app/plugin_security.py +633 -0
- mikiui-0.0.1/mikiui/app/plugins.py +273 -0
- mikiui-0.0.1/mikiui/app/routes.py +253 -0
- mikiui-0.0.1/mikiui/app/state.py +25 -0
- mikiui-0.0.1/mikiui/app/static_assets.py +332 -0
- mikiui-0.0.1/mikiui/app/theme_registry.py +210 -0
- mikiui-0.0.1/mikiui/app/widget_registry.py +197 -0
- mikiui-0.0.1/mikiui/backend/__init__.py +17 -0
- mikiui-0.0.1/mikiui/backend/api_routes.py +29 -0
- mikiui-0.0.1/mikiui/backend/server.py +398 -0
- mikiui-0.0.1/mikiui/backend/sse.py +116 -0
- mikiui-0.0.1/mikiui/backend/websocket.py +217 -0
- mikiui-0.0.1/mikiui/build/__init__.py +29 -0
- mikiui-0.0.1/mikiui/build/desktop_build.py +676 -0
- mikiui-0.0.1/mikiui/build/optimizer.py +63 -0
- mikiui-0.0.1/mikiui/build/tailwind/__init__.py +487 -0
- mikiui-0.0.1/mikiui/build/web_build.py +707 -0
- mikiui-0.0.1/mikiui/cli/__init__.py +10 -0
- mikiui-0.0.1/mikiui/cli/__main__.py +8 -0
- mikiui-0.0.1/mikiui/cli/_dev_support.py +34 -0
- mikiui-0.0.1/mikiui/cli/app_discovery.py +285 -0
- mikiui-0.0.1/mikiui/cli/commands.py +518 -0
- mikiui-0.0.1/mikiui/cli/scaffolding.py +301 -0
- mikiui-0.0.1/mikiui/components/__init__.py +241 -0
- mikiui-0.0.1/mikiui/components/accordion.py +32 -0
- mikiui-0.0.1/mikiui/components/badge.py +37 -0
- mikiui-0.0.1/mikiui/components/base.py +40 -0
- mikiui-0.0.1/mikiui/components/breadcrumbs.py +27 -0
- mikiui-0.0.1/mikiui/components/button.py +247 -0
- mikiui-0.0.1/mikiui/components/calendar.py +57 -0
- mikiui-0.0.1/mikiui/components/chart.py +102 -0
- mikiui-0.0.1/mikiui/components/collection.py +190 -0
- mikiui-0.0.1/mikiui/components/dialog.py +162 -0
- mikiui-0.0.1/mikiui/components/feedback.py +106 -0
- mikiui-0.0.1/mikiui/components/filepicker.py +45 -0
- mikiui-0.0.1/mikiui/components/form.py +59 -0
- mikiui-0.0.1/mikiui/components/html.py +291 -0
- mikiui-0.0.1/mikiui/components/input.py +539 -0
- mikiui-0.0.1/mikiui/components/layout_primitives.py +242 -0
- mikiui-0.0.1/mikiui/components/listview.py +44 -0
- mikiui-0.0.1/mikiui/components/menuitem.py +27 -0
- mikiui-0.0.1/mikiui/components/modal.py +113 -0
- mikiui-0.0.1/mikiui/components/navbar.py +118 -0
- mikiui-0.0.1/mikiui/components/picture.py +28 -0
- mikiui-0.0.1/mikiui/components/progressbar.py +76 -0
- mikiui-0.0.1/mikiui/components/slider.py +8 -0
- mikiui-0.0.1/mikiui/components/splitview/__init__.py +17 -0
- mikiui-0.0.1/mikiui/components/splitview/splitview.py +371 -0
- mikiui-0.0.1/mikiui/components/surfaces.py +220 -0
- mikiui-0.0.1/mikiui/components/table.py +76 -0
- mikiui-0.0.1/mikiui/components/tabs.py +193 -0
- mikiui-0.0.1/mikiui/components/tooltip.py +20 -0
- mikiui-0.0.1/mikiui/components/treeview.py +43 -0
- mikiui-0.0.1/mikiui/engine/__init__.py +48 -0
- mikiui-0.0.1/mikiui/engine/bridge.py +222 -0
- mikiui-0.0.1/mikiui/engine/diff.py +64 -0
- mikiui-0.0.1/mikiui/engine/dom.py +264 -0
- mikiui-0.0.1/mikiui/engine/renderer.py +374 -0
- mikiui-0.0.1/mikiui/engine/updater.py +31 -0
- mikiui-0.0.1/mikiui/errors.py +158 -0
- mikiui-0.0.1/mikiui/examples/01_hello_world.py +104 -0
- mikiui-0.0.1/mikiui/examples/02_basic_components.py +300 -0
- mikiui-0.0.1/mikiui/examples/03_forms_validation.py +248 -0
- mikiui-0.0.1/mikiui/examples/04_routing.py +214 -0
- mikiui-0.0.1/mikiui/examples/05_widgets_gallery.py +291 -0
- mikiui-0.0.1/mikiui/examples/06_layouts.py +147 -0
- mikiui-0.0.1/mikiui/examples/07_themes.py +208 -0
- mikiui-0.0.1/mikiui/examples/08_plugins.py +241 -0
- mikiui-0.0.1/mikiui/examples/09_auth_sessions.py +226 -0
- mikiui-0.0.1/mikiui/examples/10_notifications.py +213 -0
- mikiui-0.0.1/mikiui/examples/11_websocket_chat.py +209 -0
- mikiui-0.0.1/mikiui/examples/12_api_backend.py +162 -0
- mikiui-0.0.1/mikiui/examples/13_dashboard.py +149 -0
- mikiui-0.0.1/mikiui/examples/14_desktop_app.py +150 -0
- mikiui-0.0.1/mikiui/examples/15_fullstack_app.py +399 -0
- mikiui-0.0.1/mikiui/examples/__init__.py +33 -0
- mikiui-0.0.1/mikiui/examples/components.py +182 -0
- mikiui-0.0.1/mikiui/examples/demo.py +7 -0
- mikiui-0.0.1/mikiui/examples/demo1.py +512 -0
- mikiui-0.0.1/mikiui/examples/kitchen_sink.py +1381 -0
- mikiui-0.0.1/mikiui/examples/layouts.py +172 -0
- mikiui-0.0.1/mikiui/examples/splitview_demo.py +455 -0
- mikiui-0.0.1/mikiui/examples/widgets.py +212 -0
- mikiui-0.0.1/mikiui/media/__init__.py +18 -0
- mikiui-0.0.1/mikiui/media/equalizer.py +62 -0
- mikiui-0.0.1/mikiui/media/filters.py +93 -0
- mikiui-0.0.1/mikiui/media/recorder.py +70 -0
- mikiui-0.0.1/mikiui/media/streaming.py +84 -0
- mikiui-0.0.1/mikiui/middleware/__init__.py +5 -0
- mikiui-0.0.1/mikiui/middleware/error_handler.py +177 -0
- mikiui-0.0.1/mikiui/router/__init__.py +30 -0
- mikiui-0.0.1/mikiui/router/auth.py +99 -0
- mikiui-0.0.1/mikiui/router/auth_middleware.py +134 -0
- mikiui-0.0.1/mikiui/router/csrf.py +79 -0
- mikiui-0.0.1/mikiui/router/group.py +194 -0
- mikiui-0.0.1/mikiui/router/middleware.py +138 -0
- mikiui-0.0.1/mikiui/router/rate_limit.py +164 -0
- mikiui-0.0.1/mikiui/router/router.py +306 -0
- mikiui-0.0.1/mikiui/runtime/__init__.py +7 -0
- mikiui-0.0.1/mikiui/runtime/alpine.min.js +5 -0
- mikiui-0.0.1/mikiui/runtime/alpine_runtime.js +38 -0
- mikiui-0.0.1/mikiui/runtime/history_router.js +109 -0
- mikiui-0.0.1/mikiui/runtime/htmx.min.js +1 -0
- mikiui-0.0.1/mikiui/runtime/htmx_runtime.js +23 -0
- mikiui-0.0.1/mikiui/runtime/js/core.js +215 -0
- mikiui-0.0.1/mikiui/runtime/js/init.js +119 -0
- mikiui-0.0.1/mikiui/runtime/js/miki_bridge.js +315 -0
- mikiui-0.0.1/mikiui/runtime/js/mikiaccordion.js +32 -0
- mikiui-0.0.1/mikiui/runtime/js/mikibottomnav.js +53 -0
- mikiui-0.0.1/mikiui/runtime/js/mikibottomsheet.js +152 -0
- mikiui-0.0.1/mikiui/runtime/js/mikicarousel.js +175 -0
- mikiui-0.0.1/mikiui/runtime/js/mikichat.js +175 -0
- mikiui-0.0.1/mikiui/runtime/js/mikichip.js +47 -0
- mikiui-0.0.1/mikiui/runtime/js/mikicollapsible.js +100 -0
- mikiui-0.0.1/mikiui/runtime/js/mikicontextwindow.js +105 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidatagrid.js +319 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidial.js +206 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidialog.js +132 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidockablepanel.js +476 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidrawer.js +102 -0
- mikiui-0.0.1/mikiui/runtime/js/mikidropzone.js +89 -0
- mikiui-0.0.1/mikiui/runtime/js/mikieditorarea.js +221 -0
- mikiui-0.0.1/mikiui/runtime/js/mikiide.js +184 -0
- mikiui-0.0.1/mikiui/runtime/js/mikikanban.js +143 -0
- mikiui-0.0.1/mikiui/runtime/js/mikilazygrid.js +48 -0
- mikiui-0.0.1/mikiui/runtime/js/mikimdi.js +340 -0
- mikiui-0.0.1/mikiui/runtime/js/mikimenubar.js +225 -0
- mikiui-0.0.1/mikiui/runtime/js/mikimessagebox.js +67 -0
- mikiui-0.0.1/mikiui/runtime/js/mikimodal.js +96 -0
- mikiui-0.0.1/mikiui/runtime/js/mikipressable.js +30 -0
- mikiui-0.0.1/mikiui/runtime/js/mikiprogress.js +55 -0
- mikiui-0.0.1/mikiui/runtime/js/mikiprogressdialog.js +52 -0
- mikiui-0.0.1/mikiui/runtime/js/mikiscrollview.js +38 -0
- mikiui-0.0.1/mikiui/runtime/js/mikisearchableselect.js +46 -0
- mikiui-0.0.1/mikiui/runtime/js/mikislider.js +88 -0
- mikiui-0.0.1/mikiui/runtime/js/mikisplitview.js +320 -0
- mikiui-0.0.1/mikiui/runtime/js/mikistackedpanel.js +114 -0
- mikiui-0.0.1/mikiui/runtime/js/mikitabs.js +165 -0
- mikiui-0.0.1/mikiui/runtime/js/mikitoggle.js +60 -0
- mikiui-0.0.1/mikiui/runtime/js/mikivirtuallist.js +54 -0
- mikiui-0.0.1/mikiui/runtime/miki.css +4381 -0
- mikiui-0.0.1/mikiui/runtime/miki_components.css +255 -0
- mikiui-0.0.1/mikiui/runtime/miki_ui.js +2887 -0
- mikiui-0.0.1/mikiui/runtime/miki_utilities.css +70 -0
- mikiui-0.0.1/mikiui/runtime/runtime_loader.py +77 -0
- mikiui-0.0.1/mikiui/runtime/tailwind.css +22 -0
- mikiui-0.0.1/mikiui/runtime/themes/aqua.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/bumblebee.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/coporate.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/cupcake.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/cyberpunk.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/dark.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/dracula.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/emerald.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/forest.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/garden.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/halloween.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/light.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/pastel.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/ratro.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/solarized-dark.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/synthwave.css +35 -0
- mikiui-0.0.1/mikiui/runtime/themes/tailwind.css +1188 -0
- mikiui-0.0.1/mikiui/runtime/themes/valentine.css +35 -0
- mikiui-0.0.1/mikiui/styling/__init__.py +64 -0
- mikiui-0.0.1/mikiui/styling/plain_css.py +169 -0
- mikiui-0.0.1/mikiui/styling/runtime.py +155 -0
- mikiui-0.0.1/mikiui/styling/system.py +530 -0
- mikiui-0.0.1/mikiui/styling/tailwind.py +220 -0
- mikiui-0.0.1/mikiui/themes/__init__.py +178 -0
- mikiui-0.0.1/mikiui/validation/__init__.py +248 -0
- mikiui-0.0.1/mikiui/validation/exceptions.py +11 -0
- mikiui-0.0.1/mikiui/validation/form.py +133 -0
- mikiui-0.0.1/mikiui/widgets/__init__.py +117 -0
- mikiui-0.0.1/mikiui/widgets/advanced.py +184 -0
- mikiui-0.0.1/mikiui/widgets/advanced_widgets.py +383 -0
- mikiui-0.0.1/mikiui/widgets/auth.py +117 -0
- mikiui-0.0.1/mikiui/widgets/chatui.py +108 -0
- mikiui-0.0.1/mikiui/widgets/dashboard.py +38 -0
- mikiui-0.0.1/mikiui/widgets/datagrid.py +252 -0
- mikiui-0.0.1/mikiui/widgets/dockable_panel.py +277 -0
- mikiui-0.0.1/mikiui/widgets/icon.py +233 -0
- mikiui-0.0.1/mikiui/widgets/ide_editor.py +63 -0
- mikiui-0.0.1/mikiui/widgets/inspector_panel.py +31 -0
- mikiui-0.0.1/mikiui/widgets/kanbanboard.py +48 -0
- mikiui-0.0.1/mikiui/widgets/layout_widgets.py +176 -0
- mikiui-0.0.1/mikiui/widgets/mediaplayer.py +46 -0
- mikiui-0.0.1/mikiui/widgets/navigation_widgets.py +342 -0
- mikiui-0.0.1/mikiui/widgets/panels.py +1107 -0
- mikiui-0.0.1/mikiui/widgets/property_grid.py +32 -0
- mikiui-0.0.1/mikiui/widgets/splitview.py +185 -0
- mikiui-0.0.1/mikiui/widgets/terminal_widget.py +30 -0
- mikiui-0.0.1/mikiui/widgets/theme_switcher.py +161 -0
- mikiui-0.0.1/mikiui.egg-info/PKG-INFO +161 -0
- mikiui-0.0.1/mikiui.egg-info/SOURCES.txt +244 -0
- mikiui-0.0.1/mikiui.egg-info/dependency_links.txt +1 -0
- mikiui-0.0.1/mikiui.egg-info/entry_points.txt +2 -0
- mikiui-0.0.1/mikiui.egg-info/requires.txt +26 -0
- mikiui-0.0.1/mikiui.egg-info/top_level.txt +2 -0
- mikiui-0.0.1/mikiui_app_plugins/__init__.py +36 -0
- mikiui-0.0.1/mikiui_app_plugins/api.py +284 -0
- mikiui-0.0.1/mikiui_app_plugins/demo.py +136 -0
- mikiui-0.0.1/mikiui_app_plugins/notifications.py +487 -0
- mikiui-0.0.1/mikiui_app_plugins/session.py +415 -0
- mikiui-0.0.1/pyproject.toml +121 -0
- mikiui-0.0.1/setup.cfg +4 -0
- mikiui-0.0.1/tests/test_advanced_widgets.py +384 -0
- mikiui-0.0.1/tests/test_advanced_widgets_v3.py +190 -0
- mikiui-0.0.1/tests/test_app.py +137 -0
- mikiui-0.0.1/tests/test_app_run.py +74 -0
- mikiui-0.0.1/tests/test_auth_middleware_fail_closed.py +66 -0
- mikiui-0.0.1/tests/test_base_components.py +73 -0
- mikiui-0.0.1/tests/test_bridge.py +165 -0
- mikiui-0.0.1/tests/test_components.py +109 -0
- mikiui-0.0.1/tests/test_desktop.py +250 -0
- mikiui-0.0.1/tests/test_dom_sanitization.py +76 -0
- mikiui-0.0.1/tests/test_engine.py +104 -0
- mikiui-0.0.1/tests/test_engine_diff.py +87 -0
- mikiui-0.0.1/tests/test_error_handler.py +75 -0
- mikiui-0.0.1/tests/test_errors.py +132 -0
- mikiui-0.0.1/tests/test_layout_widgets.py +156 -0
- mikiui-0.0.1/tests/test_marketplace.py +188 -0
- mikiui-0.0.1/tests/test_modal_and_layout.py +118 -0
- mikiui-0.0.1/tests/test_plugin_security.py +282 -0
- mikiui-0.0.1/tests/test_realtime.py +354 -0
- mikiui-0.0.1/tests/test_route_group.py +90 -0
- mikiui-0.0.1/tests/test_router.py +555 -0
- mikiui-0.0.1/tests/test_scaffolding.py +102 -0
- mikiui-0.0.1/tests/test_security.py +734 -0
- mikiui-0.0.1/tests/test_splitview.py +64 -0
- mikiui-0.0.1/tests/test_static_assets_security.py +40 -0
- mikiui-0.0.1/tests/test_static_coverage.py +185 -0
- mikiui-0.0.1/tests/test_styling_plain.py +42 -0
- mikiui-0.0.1/tests/test_surfaces.py +78 -0
- mikiui-0.0.1/tests/test_theme_switcher.py +118 -0
- mikiui-0.0.1/tests/test_themes.py +798 -0
- mikiui-0.0.1/tests/test_validation.py +154 -0
- mikiui-0.0.1/tests/test_validation_form.py +79 -0
- mikiui-0.0.1/tests/test_widgets.py +613 -0
mikiui-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mikiui
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Python-first UI framework that renders UIs as standalone desktops or websites.
|
|
5
|
+
Requires-Python: >=3.14
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: fastapi>=0.115
|
|
8
|
+
Requires-Dist: uvicorn[standard]>=0.30
|
|
9
|
+
Requires-Dist: click>=8.1
|
|
10
|
+
Requires-Dist: typer>=0.12
|
|
11
|
+
Provides-Extra: dev
|
|
12
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
13
|
+
Requires-Dist: pytest-cov>=6.0; extra == "dev"
|
|
14
|
+
Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
|
|
15
|
+
Requires-Dist: mypy>=1.13; extra == "dev"
|
|
16
|
+
Requires-Dist: ruff>=0.8; extra == "dev"
|
|
17
|
+
Requires-Dist: httpx>=0.28; extra == "dev"
|
|
18
|
+
Requires-Dist: playwright>=1.40; extra == "dev"
|
|
19
|
+
Provides-Extra: build
|
|
20
|
+
Requires-Dist: setuptools>=68; extra == "build"
|
|
21
|
+
Requires-Dist: wheel>=0.42; extra == "build"
|
|
22
|
+
Requires-Dist: build>=1.2; extra == "build"
|
|
23
|
+
Provides-Extra: desktop
|
|
24
|
+
Requires-Dist: pywebview>=5.0; extra == "desktop"
|
|
25
|
+
Requires-Dist: pyinstaller>=6.0; extra == "desktop"
|
|
26
|
+
Requires-Dist: watchfiles>=0.21; extra == "desktop"
|
|
27
|
+
Provides-Extra: tailwind
|
|
28
|
+
Requires-Dist: watchfiles>=0.21; extra == "tailwind"
|
|
29
|
+
|
|
30
|
+
# MikiUI
|
|
31
|
+
|
|
32
|
+
A Python-first UI framework that renders UIs as standalone desktops or websites.
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install -e .
|
|
38
|
+
mikiui new myapp
|
|
39
|
+
cd myapp
|
|
40
|
+
mikiui dev # development server
|
|
41
|
+
# or
|
|
42
|
+
mikiui desktop # native desktop window
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Styling
|
|
46
|
+
|
|
47
|
+
MikiUI supports two styling frameworks. Choose one during project creation:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
mikiui new myapp
|
|
51
|
+
# Follow the prompts to choose Tailwind or plain CSS
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
| Framework | Description | Node.js Required |
|
|
55
|
+
|-----------|-------------|-----------------|
|
|
56
|
+
| `tailwind` | Tailwind CSS + optional DaisyUI | Yes |
|
|
57
|
+
| `plain` | Plain CSS, no framework | No |
|
|
58
|
+
|
|
59
|
+
### Tailwind CSS
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
cd myapp
|
|
63
|
+
npm install # Install Node.js dependencies
|
|
64
|
+
mikiui dev # Start dev server
|
|
65
|
+
mikiui tailwind dev # Watch & rebuild CSS (second terminal)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Production build:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
mikiui build --target web --theme tailwind
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Add DaisyUI:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
mikiui install tailwind daisyui
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Plain CSS
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cd myapp
|
|
84
|
+
mikiui dev # No extra setup needed
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## What's Available
|
|
88
|
+
|
|
89
|
+
- **Components** — all HTML elements as Python classes (Button, Input, Form, Table, Dialog, Tabs, etc.)
|
|
90
|
+
- **Widgets** — high-level composite UI (DataGrid, MediaPlayer, DockablePanel, IDE Editor, ThemeSwitcher, etc.)
|
|
91
|
+
- **Themes** — 4 built-in themes (light, dark, solarized-dark, dracula) with custom theme support
|
|
92
|
+
- **Styling** — Tailwind CSS or plain CSS
|
|
93
|
+
- **Plugins** — extend with custom themes, components, and widgets
|
|
94
|
+
- **Desktop** — native pywebview window or system browser fallback
|
|
95
|
+
- **Full-stack** — FastAPI backend with HTMX + Alpine.js runtime
|
|
96
|
+
|
|
97
|
+
## Commands
|
|
98
|
+
|
|
99
|
+
| Command | Description |
|
|
100
|
+
|---------|-------------|
|
|
101
|
+
| `mikiui new <name>` | Scaffold a new project (prompts for framework) |
|
|
102
|
+
| `mikiui dev` | Development server (auto-discovers `app.py`) |
|
|
103
|
+
| `mikiui desktop` | Native desktop window (pywebview) |
|
|
104
|
+
| `mikiui desktop --reload` | Desktop with auto-reload |
|
|
105
|
+
| `mikiui desktop --browser` | Force system browser |
|
|
106
|
+
| `mikiui build --target web` | Static web build |
|
|
107
|
+
| `mikiui build --target desktop` | Desktop package build |
|
|
108
|
+
| `mikiui tailwind dev` | Watch and rebuild Tailwind CSS |
|
|
109
|
+
| `mikiui tailwind build` | Production Tailwind build |
|
|
110
|
+
| `mikiui install tailwind` | Install Tailwind + npm deps |
|
|
111
|
+
|
|
112
|
+
## Running Your App
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
# app.py
|
|
116
|
+
from mikiui import MikiApp, Div, H1, Button
|
|
117
|
+
|
|
118
|
+
app = MikiApp(title="My App")
|
|
119
|
+
app.set_theme("dark")
|
|
120
|
+
|
|
121
|
+
@app.route("/", title="Home")
|
|
122
|
+
def home():
|
|
123
|
+
return Div(H1("Welcome to MikiUI!"), Button("Click me"))
|
|
124
|
+
|
|
125
|
+
if __name__ == "__main__":
|
|
126
|
+
app.run() # python app.py
|
|
127
|
+
# or: app.run(desktop=True) for native window
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Documentation
|
|
131
|
+
|
|
132
|
+
- [Getting Started](docs/getting-started.md)
|
|
133
|
+
- [Styling Guide](docs/styling.md)
|
|
134
|
+
- [Theme Reference](docs/theme-reference.md)
|
|
135
|
+
- [Theming Guide](docs/themes.md)
|
|
136
|
+
- [App Discovery & Running](docs/app-discovery.md)
|
|
137
|
+
- [Plugin System](docs/plugins.md)
|
|
138
|
+
- [Full Spec](context/plan.md)
|
|
139
|
+
|
|
140
|
+
## Production readiness
|
|
141
|
+
|
|
142
|
+
Use the following commands to validate the package and production build flow before shipping a release:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
pip install -e .
|
|
146
|
+
python -m build
|
|
147
|
+
mikiui build --target web
|
|
148
|
+
mikiui build --target desktop
|
|
149
|
+
pytest
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The framework is intended to support:
|
|
153
|
+
|
|
154
|
+
- web deployment via static HTML/HTMX + FastAPI
|
|
155
|
+
- desktop deployment via pywebview or browser fallback
|
|
156
|
+
- a single Python codebase for component and widget reuse
|
|
157
|
+
- Tailwind or plain CSS styling without changing app logic
|
|
158
|
+
|
|
159
|
+
## License
|
|
160
|
+
|
|
161
|
+
MIT
|
mikiui-0.0.1/README.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# MikiUI
|
|
2
|
+
|
|
3
|
+
A Python-first UI framework that renders UIs as standalone desktops or websites.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install -e .
|
|
9
|
+
mikiui new myapp
|
|
10
|
+
cd myapp
|
|
11
|
+
mikiui dev # development server
|
|
12
|
+
# or
|
|
13
|
+
mikiui desktop # native desktop window
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Styling
|
|
17
|
+
|
|
18
|
+
MikiUI supports two styling frameworks. Choose one during project creation:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mikiui new myapp
|
|
22
|
+
# Follow the prompts to choose Tailwind or plain CSS
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
| Framework | Description | Node.js Required |
|
|
26
|
+
|-----------|-------------|-----------------|
|
|
27
|
+
| `tailwind` | Tailwind CSS + optional DaisyUI | Yes |
|
|
28
|
+
| `plain` | Plain CSS, no framework | No |
|
|
29
|
+
|
|
30
|
+
### Tailwind CSS
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cd myapp
|
|
34
|
+
npm install # Install Node.js dependencies
|
|
35
|
+
mikiui dev # Start dev server
|
|
36
|
+
mikiui tailwind dev # Watch & rebuild CSS (second terminal)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Production build:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
mikiui build --target web --theme tailwind
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Add DaisyUI:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mikiui install tailwind daisyui
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Plain CSS
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cd myapp
|
|
55
|
+
mikiui dev # No extra setup needed
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## What's Available
|
|
59
|
+
|
|
60
|
+
- **Components** — all HTML elements as Python classes (Button, Input, Form, Table, Dialog, Tabs, etc.)
|
|
61
|
+
- **Widgets** — high-level composite UI (DataGrid, MediaPlayer, DockablePanel, IDE Editor, ThemeSwitcher, etc.)
|
|
62
|
+
- **Themes** — 4 built-in themes (light, dark, solarized-dark, dracula) with custom theme support
|
|
63
|
+
- **Styling** — Tailwind CSS or plain CSS
|
|
64
|
+
- **Plugins** — extend with custom themes, components, and widgets
|
|
65
|
+
- **Desktop** — native pywebview window or system browser fallback
|
|
66
|
+
- **Full-stack** — FastAPI backend with HTMX + Alpine.js runtime
|
|
67
|
+
|
|
68
|
+
## Commands
|
|
69
|
+
|
|
70
|
+
| Command | Description |
|
|
71
|
+
|---------|-------------|
|
|
72
|
+
| `mikiui new <name>` | Scaffold a new project (prompts for framework) |
|
|
73
|
+
| `mikiui dev` | Development server (auto-discovers `app.py`) |
|
|
74
|
+
| `mikiui desktop` | Native desktop window (pywebview) |
|
|
75
|
+
| `mikiui desktop --reload` | Desktop with auto-reload |
|
|
76
|
+
| `mikiui desktop --browser` | Force system browser |
|
|
77
|
+
| `mikiui build --target web` | Static web build |
|
|
78
|
+
| `mikiui build --target desktop` | Desktop package build |
|
|
79
|
+
| `mikiui tailwind dev` | Watch and rebuild Tailwind CSS |
|
|
80
|
+
| `mikiui tailwind build` | Production Tailwind build |
|
|
81
|
+
| `mikiui install tailwind` | Install Tailwind + npm deps |
|
|
82
|
+
|
|
83
|
+
## Running Your App
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
# app.py
|
|
87
|
+
from mikiui import MikiApp, Div, H1, Button
|
|
88
|
+
|
|
89
|
+
app = MikiApp(title="My App")
|
|
90
|
+
app.set_theme("dark")
|
|
91
|
+
|
|
92
|
+
@app.route("/", title="Home")
|
|
93
|
+
def home():
|
|
94
|
+
return Div(H1("Welcome to MikiUI!"), Button("Click me"))
|
|
95
|
+
|
|
96
|
+
if __name__ == "__main__":
|
|
97
|
+
app.run() # python app.py
|
|
98
|
+
# or: app.run(desktop=True) for native window
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Documentation
|
|
102
|
+
|
|
103
|
+
- [Getting Started](docs/getting-started.md)
|
|
104
|
+
- [Styling Guide](docs/styling.md)
|
|
105
|
+
- [Theme Reference](docs/theme-reference.md)
|
|
106
|
+
- [Theming Guide](docs/themes.md)
|
|
107
|
+
- [App Discovery & Running](docs/app-discovery.md)
|
|
108
|
+
- [Plugin System](docs/plugins.md)
|
|
109
|
+
- [Full Spec](context/plan.md)
|
|
110
|
+
|
|
111
|
+
## Production readiness
|
|
112
|
+
|
|
113
|
+
Use the following commands to validate the package and production build flow before shipping a release:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pip install -e .
|
|
117
|
+
python -m build
|
|
118
|
+
mikiui build --target web
|
|
119
|
+
mikiui build --target desktop
|
|
120
|
+
pytest
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The framework is intended to support:
|
|
124
|
+
|
|
125
|
+
- web deployment via static HTML/HTMX + FastAPI
|
|
126
|
+
- desktop deployment via pywebview or browser fallback
|
|
127
|
+
- a single Python codebase for component and widget reuse
|
|
128
|
+
- Tailwind or plain CSS styling without changing app logic
|
|
129
|
+
|
|
130
|
+
## License
|
|
131
|
+
|
|
132
|
+
MIT
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""MikiUI - Python-first UI framework.
|
|
2
|
+
|
|
3
|
+
Render UIs as standalone desktops or websites from Python component trees.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from . import components
|
|
9
|
+
from .app import AppState, ComponentPlugin, Ctx, MikiApp, Plugin, RouteDef, ThemePlugin, WidgetPlugin
|
|
10
|
+
from .backend import create_app
|
|
11
|
+
|
|
12
|
+
# Re-export every public component at the top level so apps can do
|
|
13
|
+
# `from mikiui import Div, Button` (see context/plan.md API examples).
|
|
14
|
+
from .components import * # noqa: F401,F403
|
|
15
|
+
from .engine import RawHtml, _, render, render_fragment, render_page, set_translator
|
|
16
|
+
from .router import Router
|
|
17
|
+
from .themes import Theme, get_theme, list_themes, register_theme
|
|
18
|
+
|
|
19
|
+
__version__ = "0.0.1"
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"MikiApp",
|
|
23
|
+
"Ctx",
|
|
24
|
+
"AppState",
|
|
25
|
+
"Plugin",
|
|
26
|
+
"ThemePlugin",
|
|
27
|
+
"ComponentPlugin",
|
|
28
|
+
"WidgetPlugin",
|
|
29
|
+
"RouteDef",
|
|
30
|
+
"render",
|
|
31
|
+
"render_page",
|
|
32
|
+
"render_fragment",
|
|
33
|
+
"_",
|
|
34
|
+
"RawHtml",
|
|
35
|
+
"set_translator",
|
|
36
|
+
"create_app",
|
|
37
|
+
"components",
|
|
38
|
+
"Router",
|
|
39
|
+
"Theme",
|
|
40
|
+
"register_theme",
|
|
41
|
+
"get_theme",
|
|
42
|
+
"list_themes",
|
|
43
|
+
"__version__",
|
|
44
|
+
]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""MikiUI application package."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .app import MikiApp
|
|
6
|
+
from .marketplace import (
|
|
7
|
+
DirectoryIndexSource,
|
|
8
|
+
MarketplaceSource,
|
|
9
|
+
PluginInfo,
|
|
10
|
+
PluginMarketplace,
|
|
11
|
+
PyPIIndexSource,
|
|
12
|
+
)
|
|
13
|
+
from .plugin_discovery import (
|
|
14
|
+
PluginMetadata,
|
|
15
|
+
auto_load,
|
|
16
|
+
discover_plugins,
|
|
17
|
+
load_plugin,
|
|
18
|
+
)
|
|
19
|
+
from .plugin_security import (
|
|
20
|
+
PluginManifest,
|
|
21
|
+
PluginSecurityConfig,
|
|
22
|
+
PluginSecurityViolation,
|
|
23
|
+
PluginValidator,
|
|
24
|
+
load_manifest,
|
|
25
|
+
validate_plugin,
|
|
26
|
+
)
|
|
27
|
+
from .plugins import ComponentPlugin, Plugin, ThemePlugin, WidgetPlugin
|
|
28
|
+
from .routes import Ctx, RouteDef, invoke_route, resolve_title
|
|
29
|
+
from .state import AppState
|
|
30
|
+
from .theme_registry import ThemeRegistry
|
|
31
|
+
from .widget_registry import WidgetRegistry
|
|
32
|
+
|
|
33
|
+
__all__ = [
|
|
34
|
+
"MikiApp",
|
|
35
|
+
"Ctx",
|
|
36
|
+
"RouteDef",
|
|
37
|
+
"AppState",
|
|
38
|
+
"Plugin",
|
|
39
|
+
"ThemePlugin",
|
|
40
|
+
"ComponentPlugin",
|
|
41
|
+
"WidgetPlugin",
|
|
42
|
+
"WidgetRegistry",
|
|
43
|
+
"ThemeRegistry",
|
|
44
|
+
"PluginMetadata",
|
|
45
|
+
"discover_plugins",
|
|
46
|
+
"load_plugin",
|
|
47
|
+
"auto_load",
|
|
48
|
+
"resolve_title",
|
|
49
|
+
"invoke_route",
|
|
50
|
+
# Security
|
|
51
|
+
"PluginManifest",
|
|
52
|
+
"PluginSecurityConfig",
|
|
53
|
+
"PluginSecurityViolation",
|
|
54
|
+
"PluginValidator",
|
|
55
|
+
"validate_plugin",
|
|
56
|
+
"load_manifest",
|
|
57
|
+
# Marketplace
|
|
58
|
+
"PluginInfo",
|
|
59
|
+
"MarketplaceSource",
|
|
60
|
+
"DirectoryIndexSource",
|
|
61
|
+
"PyPIIndexSource",
|
|
62
|
+
"PluginMarketplace",
|
|
63
|
+
]
|
|
64
|
+
|