instaui 0.1.9__tar.gz → 0.1.11__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.
- instaui-0.1.11/PKG-INFO +153 -0
- instaui-0.1.11/README.md +127 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/_helper/observable_helper.py +11 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/radio.py +1 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/select.py +4 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/echarts/echarts.js +8 -6
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/echarts/echarts.py +1 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/element.py +12 -22
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/grid.py +63 -11
- instaui-0.1.11/instaui/components/html/paragraph.py +29 -0
- instaui-0.1.11/instaui/components/label.py +5 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/event/js_event.py +24 -0
- instaui-0.1.11/instaui/event/vue_event.py +66 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/event/web_event.py +36 -25
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/dependency_router.py +6 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/handlers/_utils.py +27 -5
- instaui-0.1.11/instaui/static/insta-ui.css +1 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/insta-ui.esm-browser.prod.js +3717 -3672
- instaui-0.1.11/instaui/static/insta-ui.js.map +1 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/templates/web.html +1 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/templates/webview.html +1 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/templates/zero.html +1 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/func_system.py +15 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui/__init__.py +5 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui/__init__.pyi +5 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/ui_page.py +3 -3
- instaui-0.1.11/instaui/vars/event_extend.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/js_computed.py +25 -1
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/state.py +15 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/web_computed.py +36 -0
- instaui-0.1.11/instaui/watch/js_watch.py +110 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/watch/web_watch.py +53 -0
- {instaui-0.1.9 → instaui-0.1.11}/pyproject.toml +1 -1
- instaui-0.1.9/PKG-INFO +0 -153
- instaui-0.1.9/README.md +0 -127
- instaui-0.1.9/instaui/components/html/paragraph.py +0 -19
- instaui-0.1.9/instaui/static/insta-ui.css +0 -1
- instaui-0.1.9/instaui/static/insta-ui.js.map +0 -1
- instaui-0.1.9/instaui/watch/js_watch.py +0 -74
- {instaui-0.1.9 → instaui-0.1.11}/.gitignore +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/LICENSE +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/_settings.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/_use_tools/locale.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/component_types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/affix.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/alert.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/anchor.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/auto_complete.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/avatar.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/back_top.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/badge.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/breadcrumb.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/button.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/calendar.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/card.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/carousel.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/cascader.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/checkbox.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/collapse.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/color_picker.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/comment.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/config_provider.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/date_picker.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/descriptions.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/divider.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/drawer.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/dropdown.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/empty.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/form.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/icon.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/image.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/input.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/input_number.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/input_password.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/input_search.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/input_tag.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/layout.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/layout_content.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/layout_footer.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/layout_header.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/layout_sider.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/link.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/list.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/mention.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/menu.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/modal.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/overflow_list.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/page_header.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/pagination.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/pop_confirm.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/popover.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/progress.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/radio_group.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/rate.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/resize_box.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/result.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/skeleton.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/slider.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/space.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/spin.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/split.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/statistic.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/steps.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/switch.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tab_pane.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/table.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tabs.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tag.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/textarea.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/time_picker.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/timeline.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tooltip.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/transfer.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tree.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/tree_select.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/trigger.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/typography.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/upload.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/verification_code.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/components/watermark.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/locales/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/locales/_index.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/locales/en_us.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/locales/zh_cn.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/setup.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/static/instaui-arco.css +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/static/instaui-arco.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/arco/types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/boot_info.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/common/jsonable.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/column.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/component.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/content.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/directive.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/echarts/static/echarts.esm.min.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/_mixins.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/_preset.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/button.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/checkbox.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/date.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/div.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/form.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/heading.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/input.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/label.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/li.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/link.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/number.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/range.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/select.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/span.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/table.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/textarea.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/html/ul.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/markdown/markdown.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/markdown/markdown.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/markdown/static/github-markdown.css +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/markdown/static/marked.esm.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/match.py +0 -0
- /instaui-0.1.9/instaui/vars/event_extend.py → /instaui-0.1.11/instaui/components/mermaid.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/row.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/shiki_code.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/shiki_code.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/langs/css.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/langs/markdown.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/langs/python.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/langs/shell.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/langs/shellscript.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/shiki-core.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/shiki-style.css +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/shiki-transformers.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/themes/vitesse-dark.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/shiki_code/static/themes/vitesse-light.mjs +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/slot.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/transition_group.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/value_element.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/vfor.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/components/vif.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/consts.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/dependencies/component_dependency.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/dependencies/plugin_dependency.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/event/event_mixin.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/experimental/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/experimental/debug.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/_uvicorn.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/debug_mode_router.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/event_router.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/middlewares.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/request_context.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/resource.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/server.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/fastapi_server/watch_router.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/handlers/event_handler.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/handlers/watch_handler.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/html_tools.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/inject.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/js/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/js/js_output.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/js/lambda_func.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/launch_collector.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/page_info.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/_app.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/_inner_helper.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/_link_manager.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/context.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/dataclass.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/resource.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/scope.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/runtime/ui_state_scope.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/settings/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/settings/__settings.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/shadcn_classless/_index.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/shadcn_classless/static/shadcn-classless.css +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/skip.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_components.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_file_base_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_functions.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_install.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_route_model.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_router_box.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_router_output.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_router_param_var.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/_types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/spa_router/templates/page_routes +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/insta-ui.ico +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/instaui-tools-browser.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/templates/debug/sse.html +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/vue.esm-browser.prod.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/vue.global.prod.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/static/vue.runtime.esm-browser.prod.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/file_system.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/js_system.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/module_system.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/pydantic_system.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/systems/string_system.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/tailwind/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/tailwind/_index.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/tailwind/static/tailwindcss-v3.min.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/tailwind/static/tailwindcss-v4.min.js +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/env.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/web_template.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/webview_template.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/template/zero_template.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui/events.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/input_slient_data.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/server.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/str_format.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/ui_types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/ui_functions/url_location.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/_types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/data.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/element_ref.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/event_context.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/common_type.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/element_binding.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/observable.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/pathable.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/py_binding.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/str_format_binding.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/mixin_types/var_type.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/path_var.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/ref.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/slot_prop.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/vfor_item.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/vue_computed.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/vars/web_view_computed.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/version.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/watch/_types.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/watch/_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/watch/vue_watch.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/_utils.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/api.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/func.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/index.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/webview/resource.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/zero/__init__.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/zero/func.py +0 -0
- {instaui-0.1.9 → instaui-0.1.11}/instaui/zero/scope.py +0 -0
instaui-0.1.11/PKG-INFO
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: instaui
|
3
|
+
Version: 0.1.11
|
4
|
+
Summary: insta-ui is a Python-based UI library for rapidly building user interfaces.
|
5
|
+
Author-email: CrystalWindSnake <568166495@qq.com>
|
6
|
+
License-Expression: MIT
|
7
|
+
License-File: LICENSE
|
8
|
+
Keywords: gui,ui,web
|
9
|
+
Requires-Python: <3.13,>=3.8
|
10
|
+
Requires-Dist: jinja2>=3.1.6
|
11
|
+
Requires-Dist: orjson>=3.10.15
|
12
|
+
Requires-Dist: pydantic>=2.10.6
|
13
|
+
Requires-Dist: typing-extensions>=4.13.2
|
14
|
+
Provides-Extra: all
|
15
|
+
Requires-Dist: fastapi[standard]; extra == 'all'
|
16
|
+
Requires-Dist: pywebview; extra == 'all'
|
17
|
+
Requires-Dist: uvicorn; extra == 'all'
|
18
|
+
Provides-Extra: web
|
19
|
+
Requires-Dist: fastapi[standard]; extra == 'web'
|
20
|
+
Requires-Dist: pydantic<3.0.0,>=2.10.6; extra == 'web'
|
21
|
+
Requires-Dist: uvicorn; extra == 'web'
|
22
|
+
Provides-Extra: webview
|
23
|
+
Requires-Dist: pydantic<3.0.0,>=2.10.6; extra == 'webview'
|
24
|
+
Requires-Dist: pywebview; extra == 'webview'
|
25
|
+
Description-Content-Type: text/markdown
|
26
|
+
|
27
|
+
# insta-ui
|
28
|
+
|
29
|
+
<div align="center">
|
30
|
+
|
31
|
+
English| [简体中文](./README.md)
|
32
|
+
|
33
|
+
</div>
|
34
|
+
|
35
|
+
## 📖 Introduction
|
36
|
+
insta-ui is a Python-based UI library for quickly building user interfaces.
|
37
|
+
|
38
|
+
## ⚙️ Features
|
39
|
+
Three modes:
|
40
|
+
|
41
|
+
- Web mode: Generate web (stateless) applications.
|
42
|
+
- Web View mode: Generate web view applications that can be packaged as native apps (no need to start a web server).
|
43
|
+
- Zero mode: Generate pure HTML files that run directly in browsers without any dependencies.
|
44
|
+
|
45
|
+
|
46
|
+
## 📦 Installation
|
47
|
+
|
48
|
+
Zero mode:
|
49
|
+
|
50
|
+
```
|
51
|
+
pip install instaui -U
|
52
|
+
```
|
53
|
+
|
54
|
+
web mode
|
55
|
+
|
56
|
+
```
|
57
|
+
pip install instaui[web] -U
|
58
|
+
```
|
59
|
+
|
60
|
+
Web View mode
|
61
|
+
```
|
62
|
+
pip install instaui[webview] -U
|
63
|
+
```
|
64
|
+
|
65
|
+
|
66
|
+
## 🖥️ Quick Start
|
67
|
+
Below is a simple example of number summation. The result color changes dynamically based on the sum:
|
68
|
+
|
69
|
+
```python
|
70
|
+
from instaui import ui, arco
|
71
|
+
arco.use()
|
72
|
+
|
73
|
+
@ui.page('/')
|
74
|
+
def home():
|
75
|
+
num1 = ui.state(0)
|
76
|
+
num2 = ui.state(0)
|
77
|
+
|
78
|
+
# Automatically recalculates result when num1 or num2 changes
|
79
|
+
@ui.computed(inputs=[num1, num2])
|
80
|
+
def result(num1: int, num2: int):
|
81
|
+
return num1 + num2
|
82
|
+
|
83
|
+
# Automatically updates text_color when result changes
|
84
|
+
@ui.computed(inputs=[result])
|
85
|
+
def text_color(result: int):
|
86
|
+
return "red" if result % 2 == 0 else "blue"
|
87
|
+
|
88
|
+
# UI components
|
89
|
+
arco.input_number(num1)
|
90
|
+
ui.label("+")
|
91
|
+
arco.input_number(num2)
|
92
|
+
ui.label("=")
|
93
|
+
ui.label(result).style({"color": text_color})
|
94
|
+
|
95
|
+
ui.server().run()
|
96
|
+
```
|
97
|
+
|
98
|
+
Replace `ui.server().run()` with `ui.webview().run()` to switch to Web View mode:
|
99
|
+
|
100
|
+
```python
|
101
|
+
...
|
102
|
+
|
103
|
+
# ui.server().run()
|
104
|
+
ui.webview().run()
|
105
|
+
```
|
106
|
+
|
107
|
+
To execute computations on the client side instead of the server, use `ui.js_computed` instead of `ui.computed`:
|
108
|
+
|
109
|
+
```python
|
110
|
+
from instaui import ui, arco
|
111
|
+
arco.use()
|
112
|
+
|
113
|
+
@ui.page('/')
|
114
|
+
def home():
|
115
|
+
num1 = ui.state(0)
|
116
|
+
num2 = ui.state(0)
|
117
|
+
|
118
|
+
result = ui.js_computed(inputs=[num1, num2], code="(num1, num2) => num1 + num2")
|
119
|
+
text_color = ui.js_computed(inputs=[result], code="(result) => result % 2 === 0? 'red' : 'blue'")
|
120
|
+
|
121
|
+
# UI components
|
122
|
+
...
|
123
|
+
|
124
|
+
...
|
125
|
+
|
126
|
+
```
|
127
|
+
|
128
|
+
In this case, all interactions will run on the client side. Use `Zero mode` to generate a standalone HTML file:
|
129
|
+
|
130
|
+
```python
|
131
|
+
from instaui import ui, arco,zero
|
132
|
+
arco.use()
|
133
|
+
|
134
|
+
@ui.page('/')
|
135
|
+
def home():
|
136
|
+
num1 = ui.state(0)
|
137
|
+
num2 = ui.state(0)
|
138
|
+
|
139
|
+
result = ui.js_computed(inputs=[num1, num2], code="(num1, num2) => num1 + num2")
|
140
|
+
text_color = ui.js_computed(inputs=[result], code="(result) => result % 2 === 0? 'red' : 'blue'")
|
141
|
+
|
142
|
+
# UI components
|
143
|
+
arco.input_number(num1)
|
144
|
+
ui.label("+")
|
145
|
+
arco.input_number(num2)
|
146
|
+
ui.label("=")
|
147
|
+
ui.label(result).style({"color": text_color})
|
148
|
+
|
149
|
+
with zero() as z:
|
150
|
+
home()
|
151
|
+
z.to_html('index.html')
|
152
|
+
|
153
|
+
```
|
instaui-0.1.11/README.md
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
# insta-ui
|
2
|
+
|
3
|
+
<div align="center">
|
4
|
+
|
5
|
+
English| [简体中文](./README.md)
|
6
|
+
|
7
|
+
</div>
|
8
|
+
|
9
|
+
## 📖 Introduction
|
10
|
+
insta-ui is a Python-based UI library for quickly building user interfaces.
|
11
|
+
|
12
|
+
## ⚙️ Features
|
13
|
+
Three modes:
|
14
|
+
|
15
|
+
- Web mode: Generate web (stateless) applications.
|
16
|
+
- Web View mode: Generate web view applications that can be packaged as native apps (no need to start a web server).
|
17
|
+
- Zero mode: Generate pure HTML files that run directly in browsers without any dependencies.
|
18
|
+
|
19
|
+
|
20
|
+
## 📦 Installation
|
21
|
+
|
22
|
+
Zero mode:
|
23
|
+
|
24
|
+
```
|
25
|
+
pip install instaui -U
|
26
|
+
```
|
27
|
+
|
28
|
+
web mode
|
29
|
+
|
30
|
+
```
|
31
|
+
pip install instaui[web] -U
|
32
|
+
```
|
33
|
+
|
34
|
+
Web View mode
|
35
|
+
```
|
36
|
+
pip install instaui[webview] -U
|
37
|
+
```
|
38
|
+
|
39
|
+
|
40
|
+
## 🖥️ Quick Start
|
41
|
+
Below is a simple example of number summation. The result color changes dynamically based on the sum:
|
42
|
+
|
43
|
+
```python
|
44
|
+
from instaui import ui, arco
|
45
|
+
arco.use()
|
46
|
+
|
47
|
+
@ui.page('/')
|
48
|
+
def home():
|
49
|
+
num1 = ui.state(0)
|
50
|
+
num2 = ui.state(0)
|
51
|
+
|
52
|
+
# Automatically recalculates result when num1 or num2 changes
|
53
|
+
@ui.computed(inputs=[num1, num2])
|
54
|
+
def result(num1: int, num2: int):
|
55
|
+
return num1 + num2
|
56
|
+
|
57
|
+
# Automatically updates text_color when result changes
|
58
|
+
@ui.computed(inputs=[result])
|
59
|
+
def text_color(result: int):
|
60
|
+
return "red" if result % 2 == 0 else "blue"
|
61
|
+
|
62
|
+
# UI components
|
63
|
+
arco.input_number(num1)
|
64
|
+
ui.label("+")
|
65
|
+
arco.input_number(num2)
|
66
|
+
ui.label("=")
|
67
|
+
ui.label(result).style({"color": text_color})
|
68
|
+
|
69
|
+
ui.server().run()
|
70
|
+
```
|
71
|
+
|
72
|
+
Replace `ui.server().run()` with `ui.webview().run()` to switch to Web View mode:
|
73
|
+
|
74
|
+
```python
|
75
|
+
...
|
76
|
+
|
77
|
+
# ui.server().run()
|
78
|
+
ui.webview().run()
|
79
|
+
```
|
80
|
+
|
81
|
+
To execute computations on the client side instead of the server, use `ui.js_computed` instead of `ui.computed`:
|
82
|
+
|
83
|
+
```python
|
84
|
+
from instaui import ui, arco
|
85
|
+
arco.use()
|
86
|
+
|
87
|
+
@ui.page('/')
|
88
|
+
def home():
|
89
|
+
num1 = ui.state(0)
|
90
|
+
num2 = ui.state(0)
|
91
|
+
|
92
|
+
result = ui.js_computed(inputs=[num1, num2], code="(num1, num2) => num1 + num2")
|
93
|
+
text_color = ui.js_computed(inputs=[result], code="(result) => result % 2 === 0? 'red' : 'blue'")
|
94
|
+
|
95
|
+
# UI components
|
96
|
+
...
|
97
|
+
|
98
|
+
...
|
99
|
+
|
100
|
+
```
|
101
|
+
|
102
|
+
In this case, all interactions will run on the client side. Use `Zero mode` to generate a standalone HTML file:
|
103
|
+
|
104
|
+
```python
|
105
|
+
from instaui import ui, arco,zero
|
106
|
+
arco.use()
|
107
|
+
|
108
|
+
@ui.page('/')
|
109
|
+
def home():
|
110
|
+
num1 = ui.state(0)
|
111
|
+
num2 = ui.state(0)
|
112
|
+
|
113
|
+
result = ui.js_computed(inputs=[num1, num2], code="(num1, num2) => num1 + num2")
|
114
|
+
text_color = ui.js_computed(inputs=[result], code="(result) => result % 2 === 0? 'red' : 'blue'")
|
115
|
+
|
116
|
+
# UI components
|
117
|
+
arco.input_number(num1)
|
118
|
+
ui.label("+")
|
119
|
+
arco.input_number(num2)
|
120
|
+
ui.label("=")
|
121
|
+
ui.label(result).style({"color": text_color})
|
122
|
+
|
123
|
+
with zero() as z:
|
124
|
+
home()
|
125
|
+
z.to_html('index.html')
|
126
|
+
|
127
|
+
```
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import typing
|
2
2
|
from instaui.vars.mixin_types.observable import ObservableMixin
|
3
|
-
from instaui.vars.mixin_types.py_binding import CanInputMixin
|
3
|
+
from instaui.vars.mixin_types.py_binding import CanInputMixin, CanOutputMixin
|
4
4
|
from instaui.ui_functions.input_slient_data import InputSilentData
|
5
5
|
|
6
6
|
from instaui.vars.mixin_types.common_type import TObservableInput
|
@@ -33,3 +33,13 @@ def analyze_observable_inputs(inputs: typing.List[TObservableInput]):
|
|
33
33
|
result_inputs.append(input)
|
34
34
|
|
35
35
|
return result_inputs, slients, datas
|
36
|
+
|
37
|
+
|
38
|
+
def auto_made_inputs_to_slient(
|
39
|
+
inputs: typing.Optional[typing.Sequence[TObservableInput]],
|
40
|
+
outputs: typing.Optional[typing.Sequence[CanOutputMixin]],
|
41
|
+
):
|
42
|
+
if inputs is None or outputs is None:
|
43
|
+
return inputs
|
44
|
+
|
45
|
+
return [InputSilentData(input) if input in outputs else input for input in inputs]
|
@@ -10,6 +10,9 @@ from instaui.arco import component_types
|
|
10
10
|
from instaui.event.event_mixin import EventMixin
|
11
11
|
from ._utils import handle_props, try_setup_vmodel
|
12
12
|
|
13
|
+
|
14
|
+
_TSelectValue = typing.Union[str, int, typing.Sequence[str], typing.Sequence[int]]
|
15
|
+
|
13
16
|
_OPTIONS_TRANSLATE_JS: typing.Final = r"""(options)=>{
|
14
17
|
if (Array.isArray(options)){
|
15
18
|
const obj = {};
|
@@ -27,7 +30,7 @@ class Select(Element):
|
|
27
30
|
def __init__(
|
28
31
|
self,
|
29
32
|
options: TMaybeRef[typing.Union[typing.Sequence, typing.Dict]],
|
30
|
-
value: typing.Optional[TMaybeRef[
|
33
|
+
value: typing.Optional[TMaybeRef[_TSelectValue]] = None,
|
31
34
|
**kwargs: Unpack[component_types.TSelect],
|
32
35
|
):
|
33
36
|
super().__init__("a-select")
|
@@ -48,7 +48,7 @@ function setOption(root, chartIns, props) {
|
|
48
48
|
if (!chartIns.value) {
|
49
49
|
init(root, chartIns, props);
|
50
50
|
} else {
|
51
|
-
chartIns.value.setOption(props.option, props.updateOptions || {});
|
51
|
+
chartIns.value.setOption(props.option || {}, props.updateOptions || {});
|
52
52
|
}
|
53
53
|
}
|
54
54
|
|
@@ -74,8 +74,8 @@ function autoResize(root, chartIns, props) {
|
|
74
74
|
if (!isInitialResize) {
|
75
75
|
isInitialResize = true;
|
76
76
|
if (
|
77
|
-
root.offsetWidth === offsetWidth &&
|
78
|
-
root.offsetHeight === offsetHeight
|
77
|
+
root.value.offsetWidth === offsetWidth &&
|
78
|
+
root.value.offsetHeight === offsetHeight
|
79
79
|
) {
|
80
80
|
return;
|
81
81
|
}
|
@@ -105,9 +105,11 @@ function setChartEvents(root, chartIns, emit, props) {
|
|
105
105
|
if (chartEvents) {
|
106
106
|
chartEvents.forEach(event => {
|
107
107
|
chartIns.value.on(event, (...args) => {
|
108
|
-
|
109
|
-
|
110
|
-
|
108
|
+
if (args.length > 0) {
|
109
|
+
const eventArgs = args[0]
|
110
|
+
delete eventArgs['event']
|
111
|
+
delete eventArgs['$vars']
|
112
|
+
}
|
111
113
|
|
112
114
|
emit(`chart:${event}`, ...args)
|
113
115
|
});
|
@@ -96,8 +96,11 @@ class Element(Component):
|
|
96
96
|
self._props.update(self._default_props)
|
97
97
|
self._proxy_props: List[ElementBindingMixin] = []
|
98
98
|
|
99
|
-
self.
|
100
|
-
|
99
|
+
self._events: defaultdict[str, List[EventMixin]] = defaultdict(list)
|
100
|
+
|
101
|
+
# self._js_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
|
102
|
+
# self._web_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
|
103
|
+
# self._vue_events: defaultdict[str, List[EventMixin]] = defaultdict(list)
|
101
104
|
self._directives: Dict[Directive, None] = {}
|
102
105
|
|
103
106
|
self._slot_manager = SlotManager()
|
@@ -328,11 +331,7 @@ class Element(Component):
|
|
328
331
|
if extends:
|
329
332
|
handler = handler.copy_with_extends(extends)
|
330
333
|
|
331
|
-
|
332
|
-
self._js_events[event_name].append(handler)
|
333
|
-
|
334
|
-
if handler.event_type() == "web":
|
335
|
-
self._web_events[event_name].append(handler)
|
334
|
+
self._events[event_name].append(handler)
|
336
335
|
|
337
336
|
return self
|
338
337
|
|
@@ -452,8 +451,8 @@ class Element(Component):
|
|
452
451
|
v._to_element_binding_config() for v in self._proxy_props
|
453
452
|
]
|
454
453
|
|
455
|
-
if self.
|
456
|
-
data["events"] = _normalize_events(self.
|
454
|
+
if self._events:
|
455
|
+
data["events"] = _normalize_events(self._events)
|
457
456
|
|
458
457
|
if self._slot_manager.has_slot():
|
459
458
|
data["slots"] = self._slot_manager
|
@@ -477,20 +476,11 @@ class Element(Component):
|
|
477
476
|
|
478
477
|
|
479
478
|
def _normalize_events(
|
480
|
-
|
481
|
-
web_events: defaultdict[str, List[EventMixin]],
|
479
|
+
events: defaultdict[str, List[EventMixin]],
|
482
480
|
):
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
name = _normalize_event_name(name)
|
487
|
-
merged[name].extend(events)
|
488
|
-
|
489
|
-
for name, events in web_events.items():
|
490
|
-
name = _normalize_event_name(name)
|
491
|
-
merged[name].extend(events)
|
492
|
-
|
493
|
-
return dict(merged)
|
481
|
+
return {
|
482
|
+
_normalize_event_name(name): event_list for name, event_list in events.items()
|
483
|
+
}
|
494
484
|
|
495
485
|
|
496
486
|
def _normalize_event_name(event_name: str):
|
@@ -121,23 +121,75 @@ class Grid(Element):
|
|
121
121
|
area = f"{real_row} / {real_column} / {real_row_span} / {real_column_span}"
|
122
122
|
return self.mark_area(area)
|
123
123
|
|
124
|
-
@
|
124
|
+
@staticmethod
|
125
125
|
def auto_columns(
|
126
|
-
cls,
|
127
126
|
*,
|
128
127
|
min_width: TMaybeRef[str],
|
129
128
|
mode: TMaybeRef[Literal["auto-fill", "auto-fit"]] = "auto-fit",
|
130
|
-
)
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
129
|
+
):
|
130
|
+
"""
|
131
|
+
Generate a dynamic grid column configuration for responsive layout systems.
|
132
|
+
|
133
|
+
Creates a computed layout specification that calculates column dimensions
|
134
|
+
based on minimum width requirements and auto-sizing behavior. Retu
|
135
|
+
|
136
|
+
Args:
|
137
|
+
min_width (TMaybeRef[str]):
|
138
|
+
Minimum width constraint for columns as a CSS length string (e.g., "300px").
|
139
|
+
Accepts reactive references for dynamic updates.
|
140
|
+
mode (TMaybeRef[Literal["auto, optional):
|
141
|
+
Auto-sizing behavior strategy:
|
142
|
+
- "auto-fill": Preserves container space by creating additional columns
|
143
|
+
- "auto-fit": Adjusts columns to fit available space.
|
144
|
+
Defaults to "auto-fit".
|
145
|
+
|
146
|
+
Example:
|
147
|
+
.. code-block:: python
|
148
|
+
|
149
|
+
with ui.grid(columns=ui.grid.auto_columns(min_width="300px")):
|
150
|
+
...
|
151
|
+
"""
|
152
|
+
template = JsComputed(
|
153
|
+
inputs=[min_width, mode],
|
154
|
+
code=r"(min_width, mode)=> `repeat(${mode}, minmax(min(${min_width},100%), 1fr))`",
|
155
|
+
)
|
156
|
+
|
157
|
+
return template
|
158
|
+
|
159
|
+
@staticmethod
|
160
|
+
def auto_rows(
|
161
|
+
*,
|
162
|
+
min_height: TMaybeRef[str],
|
163
|
+
mode: TMaybeRef[Literal["auto-fill", "auto-fit"]] = "auto-fit",
|
164
|
+
):
|
165
|
+
"""
|
166
|
+
Generate a dynamic grid row configuration for responsive layout systems.
|
167
|
+
|
168
|
+
Creates a computed layout specification that calculates row dimensions
|
169
|
+
based on minimum height requirements and auto-sizing behavior.
|
170
|
+
|
171
|
+
Args:
|
172
|
+
min_height (TMaybeRef[str]):
|
173
|
+
Minimum height constraint for rows as a CSS length string (e.g., "300px").
|
174
|
+
mode (TMaybeRef[Literal["auto, optional):
|
175
|
+
Auto-sizing behavior strategy:
|
176
|
+
- "auto-fill": Preserves container space by creating additional rows
|
177
|
+
- "auto-fit": Adjusts rows to fit available space.
|
178
|
+
Defaults to "auto-fit".
|
179
|
+
|
180
|
+
Example:
|
181
|
+
.. code-block:: python
|
182
|
+
|
183
|
+
with ui.grid(rows=ui.grid.auto_rows(min_height="300px")):
|
184
|
+
...
|
185
|
+
"""
|
136
186
|
|
137
|
-
|
138
|
-
|
187
|
+
template = JsComputed(
|
188
|
+
inputs=[min_height, mode],
|
189
|
+
code=r"(min_height, mode)=> `repeat(${mode}, minmax(min(${min_height},100%), 1fr))`",
|
190
|
+
)
|
139
191
|
|
140
|
-
return
|
192
|
+
return template
|
141
193
|
|
142
194
|
def row_gap(self, gap: TMaybeRef[str]) -> Grid:
|
143
195
|
return self.style({"row-gap": gap})
|
@@ -0,0 +1,29 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from typing import TYPE_CHECKING, Any, Union
|
3
|
+
from instaui.components.element import Element
|
4
|
+
|
5
|
+
if TYPE_CHECKING:
|
6
|
+
from instaui.vars.types import TMaybeRef
|
7
|
+
|
8
|
+
|
9
|
+
class Paragraph(Element):
|
10
|
+
"""
|
11
|
+
A component class representing an HTML `<p>` (paragraph) element.
|
12
|
+
|
13
|
+
Args:
|
14
|
+
text (Union[str, TMaybeRef[Any]]):The text content of the paragraph.
|
15
|
+
- If a string is provided, the content is static.
|
16
|
+
- If a `TMaybeRef` object is provided, the content
|
17
|
+
will reactively update when the referenced value changes.
|
18
|
+
"""
|
19
|
+
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
text: Union[str, TMaybeRef[Any]],
|
23
|
+
):
|
24
|
+
super().__init__("p")
|
25
|
+
self.props(
|
26
|
+
{
|
27
|
+
"innerText": text,
|
28
|
+
}
|
29
|
+
)
|
@@ -55,4 +55,28 @@ def js_event(
|
|
55
55
|
outputs: typing.Optional[typing.Sequence] = None,
|
56
56
|
code: str,
|
57
57
|
):
|
58
|
+
"""
|
59
|
+
Creates a client-side event handler decorator for binding JavaScript logic to UI component events.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
inputs (typing.Optional[typing.Sequence], optional):Reactive sources (state variables, computed values)
|
63
|
+
that should be passed to the event handler. These values
|
64
|
+
will be available in the JavaScript context through the `args` array.
|
65
|
+
outputs (typing.Optional[typing.Sequence], optional): Targets (state variables, UI elements) that should
|
66
|
+
update when this handler executes. Used for coordinating
|
67
|
+
interface updates after the event is processed.
|
68
|
+
code (str): JavaScript code to execute when the event is triggered.
|
69
|
+
|
70
|
+
# Example:
|
71
|
+
.. code-block:: python
|
72
|
+
from instaui import ui, html
|
73
|
+
|
74
|
+
a = ui.state(0)
|
75
|
+
|
76
|
+
plus_one = ui.js_event(inputs=[a], outputs=[a], code="a =>a + 1")
|
77
|
+
|
78
|
+
html.button("click me").on_click(plus_one)
|
79
|
+
html.paragraph(a)
|
80
|
+
|
81
|
+
"""
|
58
82
|
return JsEvent(inputs=inputs, outputs=outputs, code=code)
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import typing
|
2
|
+
from instaui.common.jsonable import Jsonable
|
3
|
+
from instaui.vars.mixin_types.observable import ObservableMixin
|
4
|
+
from .event_mixin import EventMixin
|
5
|
+
|
6
|
+
|
7
|
+
class VueEvent(Jsonable, EventMixin):
|
8
|
+
"""
|
9
|
+
Create an event object that can be bound to a UI component's event listener.
|
10
|
+
|
11
|
+
This function generates a callable event handler with optional contextual bindings.
|
12
|
+
The event logic is defined via a code string, which can reference bound variables.
|
13
|
+
|
14
|
+
Args:
|
15
|
+
code (str): A string containing the executable logic for the event handler.
|
16
|
+
Typically contains a function body or expression that utilizes bound variables.
|
17
|
+
bindings (typing.Optional[typing.Dict[str, typing.Any]], optional): A dictionary mapping variable names to values that should be available in the
|
18
|
+
event handler's context. If None, no additional bindings are created.. Defaults to None.
|
19
|
+
|
20
|
+
Example:
|
21
|
+
.. code-block:: python
|
22
|
+
a = ui.state(1)
|
23
|
+
|
24
|
+
event = ui.vue_event(bindings={"a": a}, code=r'''()=> { a.value +=1}''')
|
25
|
+
|
26
|
+
html.span(a)
|
27
|
+
html.button("plus").on("click", event)
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(
|
31
|
+
self,
|
32
|
+
*,
|
33
|
+
code: str,
|
34
|
+
bindings: typing.Optional[typing.Dict[str, typing.Any]] = None,
|
35
|
+
):
|
36
|
+
self.code = code
|
37
|
+
self._bindings = bindings
|
38
|
+
|
39
|
+
if bindings:
|
40
|
+
bindData = [
|
41
|
+
int(not isinstance(v, ObservableMixin)) for v in bindings.values()
|
42
|
+
]
|
43
|
+
|
44
|
+
if sum(bindData) > 0:
|
45
|
+
self.bindData = bindData
|
46
|
+
|
47
|
+
self.bind = {
|
48
|
+
k: typing.cast(ObservableMixin, v)._to_observable_config()
|
49
|
+
if isinstance(v, ObservableMixin)
|
50
|
+
else v
|
51
|
+
for k, v in bindings.items()
|
52
|
+
}
|
53
|
+
|
54
|
+
def copy_with_extends(self, extends: typing.Dict):
|
55
|
+
raise NotImplementedError("VueEvent does not support extends")
|
56
|
+
|
57
|
+
def event_type(self):
|
58
|
+
return "vue"
|
59
|
+
|
60
|
+
def _to_json_dict(self):
|
61
|
+
data = super()._to_json_dict()
|
62
|
+
data["type"] = self.event_type()
|
63
|
+
return data
|
64
|
+
|
65
|
+
|
66
|
+
vue_event = VueEvent
|