From 5332229f20c0ec1ad7ec598f3b30808502b9cd70 Mon Sep 17 00:00:00 2001 From: Col0ring <47329987+Col0ring@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:47:59 +0800 Subject: [PATCH] feat: integrate ant design (#32) --- .changeset/five-actors-compete.md | 17 + .changeset/fuzzy-goats-retire.md | 17 + .changeset/lemon-laws-cross.md | 17 + .changeset/pre.json | 25 + .changeset/tough-walls-grab.md | 17 + .github/workflows/lint.yaml | 2 - .husky/commit-msg | 5 +- .husky/pre-commit | 5 +- .lintstagedrc | 2 +- CHANGELOG.md | 24 + README-zh_CN.md | 87 +- README.md | 95 +- backend/modelscope_studio/__init__.py | 9 +- .../modelscope_studio/components/__init__.py | 6 - .../components/antd/__init__.py | 145 + .../components/antd/affix/__init__.py | 79 + .../components/antd/alert/__init__.py | 84 + .../antd/alert/error_boundary/__init__.py | 68 + .../components/antd/anchor/__init__.py | 112 + .../components/antd/anchor/item/__init__.py | 77 + .../components/antd/auto_complete/__init__.py | 135 + .../antd/auto_complete/option/__init__.py | 62 + .../components/antd/avatar/__init__.py | 109 + .../components/antd/avatar/group/__init__.py | 64 + .../components/antd/badge/__init__.py | 86 + .../components/antd/badge/ribbon/__init__.py | 61 + .../components/antd/breadcrumb/__init__.py | 68 + .../antd/breadcrumb/item/__init__.py | 112 + .../components/antd/button/__init__.py | 149 + .../components/antd/button/group/__init__.py | 55 + .../components/antd/calendar/__init__.py | 95 + .../components/antd/card/__init__.py | 135 + .../components/antd/card/grid/__init__.py | 70 + .../components/antd/card/meta/__init__.py | 71 + .../components/antd/carousel/__init__.py | 86 + .../components/antd/cascader/__init__.py | 177 + .../components/antd/cascader/constants.py | 2 + .../antd/cascader/option/__init__.py | 66 + .../antd/cascader/panel/__init__.py | 106 + .../components/antd/checkbox/__init__.py | 78 + .../antd/checkbox/group/__init__.py | 100 + .../antd/checkbox/group/option/__init__.py | 64 + .../components/antd/collapse/__init__.py | 90 + .../components/antd/collapse/item/__init__.py | 78 + .../components/antd/color_picker/__init__.py | 124 + .../antd/color_picker/preset/__init__.py | 61 + .../components/antd/components.py | 138 + .../antd/config_provider/__init__.py | 88 + .../components/antd/date_picker/__init__.py | 197 + .../antd/date_picker/preset/__init__.py | 60 + .../antd/date_picker/range_picker/__init__.py | 188 + .../components/antd/descriptions/__init__.py | 81 + .../antd/descriptions/item/__init__.py | 64 + .../components/antd/divider/__init__.py | 86 + .../components/antd/drawer/__init__.py | 114 + .../components/antd/dropdown/__init__.py | 110 + .../antd/dropdown/button/__init__.py | 126 + .../components/antd/empty/__init__.py | 64 + .../components/antd/flex/__init__.py | 91 + .../components/antd/float_button/__init__.py | 105 + .../antd/float_button/back_top/__init__.py | 111 + .../antd/float_button/group/__init__.py | 123 + .../components/antd/form/__init__.py | 123 + .../components/antd/form/item/__init__.py | 124 + .../antd/form/item/rule/__init__.py | 80 + .../components/antd/grid/col/__init__.py | 109 + .../components/antd/grid/row/__init__.py | 89 + .../components/antd/icon/__init__.py | 83 + .../antd/icon/iconfont_provider/__init__.py | 61 + .../components/antd/image/__init__.py | 115 + .../antd/image/preview_group/__init__.py | 71 + .../components/antd/input/__init__.py | 123 + .../components/antd/input/otp/__init__.py | 88 + .../antd/input/password/__init__.py | 120 + .../components/antd/input/search/__init__.py | 120 + .../antd/input/textarea/__init__.py | 104 + .../components/antd/input_number/__init__.py | 139 + .../components/antd/layout/__init__.py | 86 + .../antd/layout/content/__init__.py | 70 + .../components/antd/layout/footer/__init__.py | 70 + .../components/antd/layout/header/__init__.py | 70 + .../components/antd/layout/sider/__init__.py | 116 + .../components/antd/list/__init__.py | 96 + .../components/antd/list/item/__init__.py | 68 + .../antd/list/item/meta/__init__.py | 62 + .../components/antd/mentions/__init__.py | 123 + .../antd/mentions/option/__init__.py | 66 + .../components/antd/menu/__init__.py | 111 + .../components/antd/menu/item/__init__.py | 83 + .../components/antd/message/__init__.py | 79 + .../components/antd/modal/__init__.py | 127 + .../components/antd/notification/__init__.py | 100 + .../components/antd/pagination/__init__.py | 102 + .../components/antd/popconfirm/__init__.py | 148 + .../components/antd/popover/__init__.py | 116 + .../components/antd/progress/__init__.py | 90 + .../components/antd/qr_code/__init__.py | 87 + .../components/antd/radio/__init__.py | 80 + .../components/antd/radio/button/__init__.py | 76 + .../components/antd/radio/group/__init__.py | 100 + .../antd/radio/group/option/__init__.py | 68 + .../components/antd/rate/__init__.py | 101 + .../components/antd/result/__init__.py | 70 + .../components/antd/segmented/__init__.py | 90 + .../antd/segmented/option/__init__.py | 64 + .../components/antd/select/__init__.py | 215 + .../components/antd/select/option/__init__.py | 66 + .../components/antd/skeleton/__init__.py | 75 + .../antd/skeleton/avatar/__init__.py | 62 + .../antd/skeleton/button/__init__.py | 64 + .../antd/skeleton/image/__init__.py | 55 + .../antd/skeleton/input/__init__.py | 59 + .../components/antd/skeleton/node/__init__.py | 57 + .../components/antd/slider/__init__.py | 125 + .../components/antd/slider/mark/__init__.py | 66 + .../components/antd/space/__init__.py | 97 + .../components/antd/space/compact/__init__.py | 76 + .../components/antd/spin/__init__.py | 74 + .../components/antd/splitter/__init__.py | 83 + .../antd/splitter/panel/__init__.py | 81 + .../components/antd/statistic/__init__.py | 79 + .../antd/statistic/countdown/__init__.py | 79 + .../components/antd/steps/__init__.py | 88 + .../components/antd/steps/item/__init__.py | 68 + .../components/antd/switch/__init__.py | 90 + .../components/antd/table/__init__.py | 144 + .../components/antd/table/column/__init__.py | 132 + .../antd/table/column_group/__init__.py | 58 + .../components/antd/table/constants.py | 5 + .../antd/table/expandable/__init__.py | 93 + .../antd/table/row_selection/__init__.py | 109 + .../table/row_selection/selection/__init__.py | 72 + .../components/antd/tabs/__init__.py | 118 + .../components/antd/tabs/item/__init__.py | 70 + .../components/antd/tag/__init__.py | 77 + .../antd/tag/checkable_tag/__init__.py | 72 + .../components/antd/time_picker/__init__.py | 145 + .../antd/time_picker/range_picker/__init__.py | 162 + .../components/antd/timeline/__init__.py | 70 + .../components/antd/timeline/item/__init__.py | 64 + .../components/antd/tooltip/__init__.py | 114 + .../components/antd/tour/__init__.py | 102 + .../components/antd/tour/step/__init__.py | 99 + .../components/antd/transfer/__init__.py | 139 + .../components/antd/tree/__init__.py | 166 + .../antd/tree/directory_tree/__init__.py | 165 + .../antd/tree/tree_node/__init__.py | 72 + .../components/antd/tree_select/__init__.py | 204 + .../antd/tree_select/tree_node/__init__.py | 72 + .../components/antd/typography/__init__.py | 11 + .../antd/typography/link/__init__.py | 144 + .../antd/typography/paragraph/__init__.py | 155 + .../antd/typography/text/__init__.py | 154 + .../antd/typography/title/__init__.py | 155 + .../components/antd/upload/__init__.py | 205 + .../antd/upload/dragger/__init__.py | 153 + .../components/antd/watermark/__init__.py | 73 + .../components/base/__init__.py | 8 + .../components/base/application/__init__.py | 106 + .../components/base/div/__init__.py | 93 + .../components/base/each/__init__.py | 72 + .../components/base/filter/__init__.py | 44 + .../components/base/fragment/__init__.py | 48 + .../components/base/slot/__init__.py | 51 + .../components/base/span/__init__.py | 92 + .../components/base/text/__init__.py | 62 + .../{ => legacy}/Chatbot/__init__.py | 5 +- .../Chatbot/llm_thinking_presets.py | 0 .../components/{ => legacy}/Flow/__init__.py | 4 +- .../components/{ => legacy}/Flow/edge.py | 0 .../components/{ => legacy}/Flow/node.py | 0 .../{ => legacy}/Flow/node_schema.py | 0 .../{ => legacy}/Lifecycle/__init__.py | 7 +- .../{ => legacy}/Markdown/__init__.py | 5 +- .../{ => legacy}/MultimodalInput/__init__.py | 4 +- .../{ => legacy}/WaterfallGallery/__init__.py | 4 +- .../components/legacy/__init__.py | 6 + .../utils/{ => dev}/__init__.py | 6 +- .../modelscope_studio/utils/dev/component.py | 150 + .../utils/{ => dev}/process_links.py | 0 .../utils/dev/resolve_frontend_dir.py | 15 + backend/modelscope_studio/version.py | 2 +- config/changelog/CHANGELOG.md | 24 + config/changelog/package.json | 12 +- config/lint-config/CHANGELOG.md | 24 + config/lint-config/configs/eslint/basic.mjs | 3 +- config/lint-config/configs/eslint/react.mjs | 2 +- config/lint-config/configs/eslint/svelte.mjs | 3 +- .../lint-config/configs/eslint/typescript.mjs | 16 +- config/lint-config/eslint.mjs | 2 +- config/lint-config/package.json | 30 +- docs/Dockerfile | 15 - docs/README-zh_CN.md | 49 +- docs/README.md | 62 +- docs/api/app.py | 2 +- docs/app.py | 219 +- docs/components/WaterfallGallery/app.py | 6 - docs/components/antd/button/README-zh_CN.md | 7 + docs/components/antd/button/README.md | 7 + .../{Chatbot => antd/button}/app.py | 2 +- docs/components/antd/button/demos/basic.py | 26 + docs/components/antd/divider/README-zh_CN.md | 7 + docs/components/antd/divider/README.md | 7 + docs/components/{Flow => antd/divider}/app.py | 2 +- docs/components/antd/divider/demos/basic.py | 29 + .../antd/float_button/README-zh_CN.md | 7 + docs/components/antd/float_button/README.md | 7 + .../{Lifecycle => antd/float_button}/app.py | 2 +- .../antd/float_button/demos/basic.py | 30 + docs/components/antd/icon/README-zh_CN.md | 9 + docs/components/antd/icon/README.md | 9 + .../{MultimodalInput => antd/icon}/app.py | 2 +- docs/components/antd/icon/demos/basic.py | 20 + docs/components/antd/icon/demos/iconfont.py | 22 + docs/components/antd/overview/README-zh_CN.md | 73 + docs/components/antd/overview/README.md | 73 + docs/components/antd/overview/app.py | 6 + .../demos/integrate_other_components.py | 17 + .../antd/overview/demos/limit_event.py | 18 + .../antd/overview/demos/limit_function.py | 14 + .../demos/limit_function_with_event.py | 21 + .../antd/overview/demos/limit_react_node.py | 22 + .../limit_react_node_function_by_function.py | 75 + .../limit_react_node_function_by_slot.py | 15 + .../antd/overview/demos/quick_start.py | 12 + .../antd/typography/README-zh_CN.md | 7 + docs/components/antd/typography/README.md | 7 + docs/components/antd/typography/app.py | 6 + .../components/antd/typography/demos/basic.py | 23 + .../base/application/README-zh_CN.md | 20 + docs/components/base/application/README.md | 20 + docs/components/base/application/app.py | 6 + .../base/application/demos/basic.py | 14 + .../base/application/demos/custom_event.py | 20 + .../application/demos/language_adaptation.py | 39 + .../application/demos/theme_adaptation.py | 34 + docs/components/base/div/README-zh_CN.md | 7 + docs/components/base/div/README.md | 7 + docs/components/base/div/app.py | 6 + docs/components/base/div/demos/basic.py | 12 + docs/components/base/each/README-zh_CN.md | 27 + docs/components/base/each/README.md | 27 + docs/components/base/each/app.py | 6 + docs/components/base/each/demos/basic.py | 35 + .../components/base/each/demos/use_as_item.py | 69 + .../base/each/demos/use_context_value.py | 69 + docs/components/base/filter/README-zh_CN.md | 21 + docs/components/base/filter/README.md | 21 + docs/components/base/filter/app.py | 6 + docs/components/base/filter/demos/basic.py | 20 + .../base/filter/demos/use_as_item.py | 27 + .../base/filter/demos/use_params_mapping.py | 26 + docs/components/base/fragment/README-zh_CN.md | 9 + docs/components/base/fragment/README.md | 9 + docs/components/base/fragment/app.py | 6 + docs/components/base/fragment/demos/basic.py | 22 + docs/components/base/slot/README-zh_CN.md | 16 + docs/components/base/slot/README.md | 16 + docs/components/base/slot/app.py | 6 + docs/components/base/slot/demos/basic.py | 23 + docs/components/base/span/README-zh_CN.md | 7 + docs/components/base/span/README.md | 7 + docs/components/base/span/app.py | 6 + docs/components/base/span/demos/basic.py | 12 + docs/components/base/text/README-zh_CN.md | 7 + docs/components/base/text/README.md | 7 + docs/components/base/text/app.py | 6 + docs/components/base/text/demos/basic.py | 11 + .../{ => legacy}/Chatbot/README-zh_CN.md | 2 +- .../components/{ => legacy}/Chatbot/README.md | 2 +- docs/components/legacy/Chatbot/app.py | 6 + .../{ => legacy}/Chatbot/demos/accordion.py | 3 +- .../{ => legacy}/Chatbot/demos/basic.py | 0 .../{ => legacy}/Chatbot/demos/chart.py | 0 .../Chatbot/demos/message_config.py | 0 .../{ => legacy}/Chatbot/demos/multi_bots.py | 0 .../{ => legacy}/Chatbot/demos/multimodal.py | 0 .../{ => legacy}/Chatbot/demos/select-box.py | 4 +- docs/components/{ => legacy}/Docs.py | 6 +- .../{ => legacy}/Flow/README-zh_CN.md | 0 docs/components/{ => legacy}/Flow/README.md | 0 docs/components/legacy/Flow/app.py | 6 + .../{ => legacy}/Flow/define_schema-zh_CN.md | 0 .../{ => legacy}/Flow/define_schema.md | 0 .../{ => legacy}/Flow/demos/basic.py | 2 +- .../Flow/demos/component_options.py | 3 +- .../Flow/demos/custom_node_type.py | 6 +- .../Flow/schema/agents_schema.json | 0 .../{ => legacy}/Flow/schema/agents_schema.py | 2 +- .../{ => legacy}/Lifecycle/README-zh_CN.md | 0 .../{ => legacy}/Lifecycle/README.md | 0 docs/components/legacy/Lifecycle/app.py | 6 + .../{ => legacy}/Lifecycle/demos/basic.py | 0 .../Lifecycle/demos/language_adaptation.py | 0 .../Lifecycle/demos/theme_adaptation.py | 0 .../{ => legacy}/Markdown/README-zh_CN.md | 0 .../{ => legacy}/Markdown/README.md | 0 docs/components/{ => legacy}/Markdown/app.py | 2 +- .../Markdown/custom_tags/accordion-zh_CN.md | 0 .../Markdown/custom_tags/accordion.md | 0 .../Markdown/custom_tags/chart-zh_CN.md | 0 .../Markdown/custom_tags/chart.md | 0 .../Markdown/custom_tags/select-box-zh_CN.md | 0 .../Markdown/custom_tags/select-box.md | 0 .../{ => legacy}/Markdown/demos/accordion.py | 2 +- .../{ => legacy}/Markdown/demos/basic.py | 0 .../{ => legacy}/Markdown/demos/chart.py | 0 .../{ => legacy}/Markdown/demos/custom-tag.py | 0 .../Markdown/demos/custom-tag2.py | 0 .../Markdown/demos/custom-tag3.py | 0 .../Markdown/demos/custom-tag4.py | 0 .../custom_tags/accordion/accordion-title.py | 0 .../demos/custom_tags/accordion/basic.py | 0 .../Markdown/demos/custom_tags/chart/basic.py | 0 .../demos/custom_tags/select-box/basic.py | 4 +- .../custom_tags/select-box/card_shape.py | 4 +- .../select-box/card_shape_width_auto.py | 0 .../custom_tags/select-box/python_events.py | 0 .../{ => legacy}/Markdown/demos/multimodal.py | 0 .../{ => legacy}/Markdown/demos/select-box.py | 4 +- .../MultimodalInput/README-zh_CN.md | 0 .../{ => legacy}/MultimodalInput/README.md | 0 docs/components/legacy/MultimodalInput/app.py | 6 + .../MultimodalInput/demos/basic.py | 0 .../MultimodalInput/demos/config_buttons.py | 0 .../MultimodalInput/demos/upload_sources.py | 0 .../MultimodalInput/demos/with_chatbot.py | 0 docs/components/legacy/README-zh_CN.md | 33 + docs/components/legacy/README.md | 33 + .../WaterfallGallery/README-zh_CN.md | 0 .../{ => legacy}/WaterfallGallery/README.md | 0 .../components/legacy/WaterfallGallery/app.py | 6 + .../WaterfallGallery/demos/basic.py | 0 .../demos/like_click_feedback.py | 0 .../WaterfallGallery/demos/load_more.py | 0 .../demos/responsive_columns.py | 0 docs/components/legacy/app.py | 35 + .../components/{ => legacy}/parse_markdown.py | 0 .../{ => legacy}/resources/audio.wav | Bin .../{ => legacy}/resources/bot.jpeg | Bin .../custom_components/custom_select.js | 0 .../components/{ => legacy}/resources/dog.mp4 | Bin .../{ => legacy}/resources/image-bot.jpeg | Bin .../{ => legacy}/resources/modelscope.svg | 0 .../{ => legacy}/resources/music-bot.jpeg | Bin .../{ => legacy}/resources/screen.jpeg | Bin .../{ => legacy}/resources/user.jpeg | Bin docs/components/{ => legacy}/tab-link.js | 0 docs/demos/example.py | 12 + docs/helper/Docs.py | 128 + docs/helper/Site.py | 197 + docs/helper/env.py | 3 + docs/helper/parse_markdown.py | 81 + docs/legacy_app.py | 6 + docs/requirements.txt | 2 +- docs/resources/gradio.png | Bin 0 -> 52484 bytes docs/resources/modelscope.png | Bin 0 -> 9547 bytes eslint.config.mjs | 2 +- fixtures.d.ts | 8 - frontend/CHANGELOG.md | 38 +- frontend/Chatbot/gradio.config.js | 6 - frontend/Chatbot/package.json | 27 - frontend/Flow/gradio.config.js | 6 - frontend/Flow/package.json | 30 - frontend/Flow/schema.ts | 1 - frontend/Lifecycle/CHANGELOG.md | 27 - frontend/Lifecycle/package.json | 21 - frontend/Markdown/gradio.config.js | 6 - frontend/Markdown/package.json | 25 - frontend/MultimodalInput/gradio.config.js | 6 - frontend/MultimodalInput/package.json | 29 - frontend/WaterfallGallery/CHANGELOG.md | 57 - frontend/WaterfallGallery/gradio.config.js | 6 - frontend/WaterfallGallery/package.json | 28 - frontend/antd/CHANGELOG.md | 25 + frontend/antd/affix/Index.svelte | 78 + frontend/antd/affix/affix.tsx | 13 + frontend/antd/affix/gradio.config.js | 3 + frontend/antd/affix/package.json | 14 + frontend/antd/alert/Index.svelte | 73 + frontend/antd/alert/alert.tsx | 40 + .../antd/alert/error-boundary/Index.svelte | 78 + .../error-boundary/alert.error-boundary.tsx | 27 + .../alert/error-boundary/gradio.config.js | 3 + .../antd/alert/error-boundary/package.json | 14 + frontend/antd/alert/gradio.config.js | 3 + frontend/antd/alert/package.json | 14 + frontend/antd/anchor/Index.svelte | 77 + frontend/antd/anchor/anchor.tsx | 45 + frontend/antd/anchor/context.ts | 6 + frontend/antd/anchor/gradio.config.js | 3 + frontend/antd/anchor/item/Index.svelte | 86 + frontend/antd/anchor/item/gradio.config.js | 3 + frontend/antd/anchor/item/package.json | 14 + frontend/antd/anchor/package.json | 14 + frontend/antd/auto-complete/Index.svelte | 89 + frontend/antd/auto-complete/auto-complete.tsx | 127 + frontend/antd/auto-complete/context.ts | 6 + frontend/antd/auto-complete/gradio.config.js | 3 + .../antd/auto-complete/option/Index.svelte | 94 + .../auto-complete/option/gradio.config.js | 3 + .../antd/auto-complete/option/package.json | 14 + frontend/antd/auto-complete/package.json | 14 + frontend/antd/avatar/Index.svelte | 87 + frontend/antd/avatar/avatar.tsx | 23 + frontend/antd/avatar/gradio.config.js | 3 + frontend/antd/avatar/group/Index.svelte | 74 + frontend/antd/avatar/group/avatar.group.tsx | 44 + frontend/antd/avatar/group/gradio.config.js | 3 + frontend/antd/avatar/group/package.json | 14 + frontend/antd/avatar/package.json | 14 + frontend/antd/badge/Index.svelte | 80 + frontend/antd/badge/badge.tsx | 20 + frontend/antd/badge/gradio.config.js | 3 + frontend/antd/badge/package.json | 14 + frontend/antd/badge/ribbon/Index.svelte | 77 + frontend/antd/badge/ribbon/badge.ribbon.tsx | 21 + frontend/antd/badge/ribbon/gradio.config.js | 3 + frontend/antd/badge/ribbon/package.json | 14 + frontend/antd/breadcrumb/Index.svelte | 83 + frontend/antd/breadcrumb/breadcrumb.tsx | 51 + frontend/antd/breadcrumb/context.ts | 6 + frontend/antd/breadcrumb/gradio.config.js | 3 + .../breadcrumb/item/BreadcrumbItem.svelte | 173 + frontend/antd/breadcrumb/item/Index.svelte | 42 + .../antd/breadcrumb/item/gradio.config.js | 3 + frontend/antd/breadcrumb/item/package.json | 14 + frontend/antd/breadcrumb/package.json | 14 + frontend/antd/button/Index.svelte | 86 + frontend/antd/button/button.tsx | 17 + frontend/antd/button/gradio.config.js | 3 + frontend/antd/button/group/Index.svelte | 74 + frontend/antd/button/group/button.group.less | 20 + frontend/antd/button/group/button.group.tsx | 26 + frontend/antd/button/group/gradio.config.js | 3 + frontend/antd/button/group/package.json | 14 + frontend/antd/button/package.json | 14 + frontend/antd/calendar/Index.svelte | 83 + frontend/antd/calendar/calendar.tsx | 96 + frontend/antd/calendar/gradio.config.js | 3 + frontend/antd/calendar/package.json | 14 + frontend/antd/card/Index.svelte | 68 + frontend/antd/card/card.tsx | 41 + frontend/antd/card/gradio.config.js | 3 + frontend/antd/card/grid/Index.svelte | 68 + frontend/antd/card/grid/card.grid.tsx | 6 + frontend/antd/card/grid/gradio.config.js | 3 + frontend/antd/card/grid/package.json | 14 + frontend/antd/card/meta/Index.svelte | 70 + frontend/antd/card/meta/card.meta.tsx | 27 + frontend/antd/card/meta/gradio.config.js | 3 + frontend/antd/card/meta/package.json | 14 + frontend/antd/card/package.json | 14 + frontend/antd/carousel/Index.svelte | 73 + frontend/antd/carousel/carousel.tsx | 30 + frontend/antd/carousel/gradio.config.js | 3 + frontend/antd/carousel/package.json | 14 + frontend/antd/cascader/Index.svelte | 89 + frontend/antd/cascader/cascader.tsx | 190 + frontend/antd/cascader/context.ts | 6 + frontend/antd/cascader/gradio.config.js | 3 + frontend/antd/cascader/option/Index.svelte | 90 + .../antd/cascader/option/gradio.config.js | 3 + frontend/antd/cascader/option/package.json | 14 + frontend/antd/cascader/package.json | 14 + frontend/antd/cascader/panel/Index.svelte | 85 + .../antd/cascader/panel/cascader.panel.tsx | 72 + frontend/antd/cascader/panel/gradio.config.js | 3 + frontend/antd/cascader/panel/package.json | 14 + frontend/antd/checkbox/Index.svelte | 79 + frontend/antd/checkbox/checkbox.tsx | 21 + frontend/antd/checkbox/context.ts | 6 + frontend/antd/checkbox/gradio.config.js | 3 + frontend/antd/checkbox/group/Index.svelte | 85 + .../antd/checkbox/group/checkbox.group.tsx | 47 + frontend/antd/checkbox/group/gradio.config.js | 3 + .../antd/checkbox/group/option/Index.svelte | 95 + .../checkbox/group/option/gradio.config.js | 3 + .../antd/checkbox/group/option/package.json | 14 + frontend/antd/checkbox/group/package.json | 14 + frontend/antd/checkbox/package.json | 14 + frontend/antd/collapse/Index.svelte | 83 + frontend/antd/collapse/collapse.tsx | 58 + frontend/antd/collapse/context.ts | 6 + frontend/antd/collapse/gradio.config.js | 3 + frontend/antd/collapse/item/Index.svelte | 93 + frontend/antd/collapse/item/gradio.config.js | 3 + frontend/antd/collapse/item/package.json | 14 + frontend/antd/collapse/package.json | 14 + frontend/antd/color-picker/Index.svelte | 91 + frontend/antd/color-picker/color-picker.tsx | 84 + frontend/antd/color-picker/context.ts | 6 + frontend/antd/color-picker/gradio.config.js | 3 + frontend/antd/color-picker/package.json | 14 + .../antd/color-picker/preset/Index.svelte | 95 + .../antd/color-picker/preset/gradio.config.js | 3 + .../antd/color-picker/preset/package.json | 14 + frontend/antd/config-provider/Index.svelte | 70 + .../antd/config-provider/config-provider.tsx | 139 + .../antd/config-provider/gradio.config.js | 3 + frontend/antd/config-provider/locales.ts | 74 + frontend/antd/config-provider/package.json | 14 + frontend/antd/date-picker/Index.svelte | 88 + frontend/antd/date-picker/context.ts | 6 + frontend/antd/date-picker/date-picker.tsx | 225 + frontend/antd/date-picker/gradio.config.js | 3 + frontend/antd/date-picker/package.json | 14 + frontend/antd/date-picker/preset/Index.svelte | 91 + .../antd/date-picker/preset/gradio.config.js | 3 + frontend/antd/date-picker/preset/package.json | 14 + .../date-picker/range-picker/Index.svelte | 93 + .../range-picker/date-picker.range-picker.tsx | 241 + .../date-picker/range-picker/gradio.config.js | 3 + .../date-picker/range-picker/package.json | 14 + frontend/antd/descriptions/Index.svelte | 81 + frontend/antd/descriptions/context.ts | 6 + frontend/antd/descriptions/descriptions.tsx | 37 + frontend/antd/descriptions/gradio.config.js | 3 + frontend/antd/descriptions/item/Index.svelte | 93 + .../antd/descriptions/item/gradio.config.js | 3 + frontend/antd/descriptions/item/package.json | 14 + frontend/antd/descriptions/package.json | 14 + frontend/antd/divider/Index.svelte | 86 + frontend/antd/divider/divider.tsx | 10 + frontend/antd/divider/gradio.config.js | 3 + frontend/antd/divider/package.json | 14 + frontend/antd/drawer/Index.svelte | 79 + frontend/antd/drawer/drawer.tsx | 53 + frontend/antd/drawer/gradio.config.js | 3 + frontend/antd/drawer/package.json | 14 + frontend/antd/dropdown/Index.svelte | 82 + frontend/antd/dropdown/button/Index.svelte | 92 + .../antd/dropdown/button/dropdown.button.tsx | 85 + .../antd/dropdown/button/gradio.config.js | 3 + frontend/antd/dropdown/button/package.json | 14 + frontend/antd/dropdown/dropdown.tsx | 82 + frontend/antd/dropdown/gradio.config.js | 3 + frontend/antd/dropdown/package.json | 14 + frontend/antd/empty/Index.svelte | 73 + frontend/antd/empty/empty.tsx | 28 + frontend/antd/empty/gradio.config.js | 3 + frontend/antd/empty/package.json | 14 + frontend/antd/flex/Index.svelte | 73 + frontend/antd/flex/flex.tsx | 8 + frontend/antd/flex/gradio.config.js | 3 + frontend/antd/flex/package.json | 14 + frontend/antd/float-button/Index.svelte | 75 + .../antd/float-button/back-top/Index.svelte | 81 + .../back-top/float-button.back-top.tsx | 46 + .../float-button/back-top/gradio.config.js | 3 + .../antd/float-button/back-top/package.json | 14 + frontend/antd/float-button/float-button.tsx | 45 + frontend/antd/float-button/gradio.config.js | 3 + frontend/antd/float-button/group/Index.svelte | 83 + .../group/float-button.group.less | 30 + .../float-button/group/float-button.group.tsx | 69 + .../antd/float-button/group/gradio.config.js | 3 + frontend/antd/float-button/group/package.json | 14 + frontend/antd/float-button/package.json | 14 + frontend/antd/form/Index.svelte | 90 + frontend/antd/form/context.ts | 7 + frontend/antd/form/form.tsx | 58 + frontend/antd/form/gradio.config.js | 3 + frontend/antd/form/item/Index.svelte | 80 + frontend/antd/form/item/form.item.tsx | 130 + frontend/antd/form/item/gradio.config.js | 3 + frontend/antd/form/item/package.json | 14 + frontend/antd/form/item/rule/Index.svelte | 94 + frontend/antd/form/item/rule/global.css | 3 + frontend/antd/form/item/rule/gradio.config.js | 3 + frontend/antd/form/item/rule/package.json | 14 + frontend/antd/form/package.json | 14 + frontend/antd/grid/col/Index.svelte | 83 + frontend/antd/grid/col/gradio.config.js | 3 + frontend/antd/grid/col/package.json | 14 + frontend/antd/grid/context.ts | 6 + frontend/antd/grid/row/Index.svelte | 77 + frontend/antd/grid/row/gradio.config.js | 3 + frontend/antd/grid/row/package.json | 14 + frontend/antd/grid/row/row.tsx | 30 + frontend/antd/icon/Index.svelte | 77 + frontend/antd/icon/gradio.config.js | 3 + frontend/antd/icon/icon.tsx | 26 + .../antd/icon/iconfont-provider/Index.svelte | 61 + .../antd/icon/iconfont-provider/context.ts | 37 + .../icon/iconfont-provider/create-iconfont.ts | 3 + .../icon/iconfont-provider/gradio.config.js | 3 + .../antd/icon/iconfont-provider/package.json | 14 + frontend/antd/icon/package.json | 14 + frontend/antd/image/Index.svelte | 92 + frontend/antd/image/gradio.config.js | 3 + frontend/antd/image/image.tsx | 90 + frontend/antd/image/package.json | 14 + .../antd/image/preview-group/Index.svelte | 82 + .../antd/image/preview-group/gradio.config.js | 3 + .../preview-group/image.preview-group.tsx | 54 + .../antd/image/preview-group/package.json | 14 + frontend/antd/input-number/Index.svelte | 79 + frontend/antd/input-number/gradio.config.js | 3 + frontend/antd/input-number/input-number.tsx | 91 + frontend/antd/input-number/package.json | 14 + frontend/antd/input/Index.svelte | 84 + frontend/antd/input/gradio.config.js | 3 + frontend/antd/input/input.tsx | 122 + frontend/antd/input/otp/Index.svelte | 77 + frontend/antd/input/otp/gradio.config.js | 3 + frontend/antd/input/otp/input.otp.tsx | 31 + frontend/antd/input/otp/package.json | 14 + frontend/antd/input/package.json | 14 + frontend/antd/input/password/Index.svelte | 89 + frontend/antd/input/password/gradio.config.js | 3 + .../antd/input/password/input.password.tsx | 133 + frontend/antd/input/password/package.json | 14 + frontend/antd/input/search/Index.svelte | 87 + frontend/antd/input/search/gradio.config.js | 3 + frontend/antd/input/search/input.search.tsx | 129 + frontend/antd/input/search/package.json | 14 + frontend/antd/input/textarea/Index.svelte | 89 + frontend/antd/input/textarea/gradio.config.js | 3 + .../antd/input/textarea/input.textarea.tsx | 95 + frontend/antd/input/textarea/package.json | 14 + frontend/antd/layout/Base.svelte | 74 + frontend/antd/layout/Index.svelte | 10 + frontend/antd/layout/content/Index.svelte | 10 + frontend/antd/layout/content/gradio.config.js | 3 + frontend/antd/layout/content/package.json | 14 + frontend/antd/layout/footer/Index.svelte | 10 + frontend/antd/layout/footer/gradio.config.js | 3 + frontend/antd/layout/footer/package.json | 14 + frontend/antd/layout/gradio.config.js | 3 + frontend/antd/layout/header/Index.svelte | 10 + frontend/antd/layout/header/gradio.config.js | 3 + frontend/antd/layout/header/package.json | 14 + frontend/antd/layout/layout.base.tsx | 39 + frontend/antd/layout/package.json | 14 + frontend/antd/layout/sider/Index.svelte | 74 + frontend/antd/layout/sider/gradio.config.js | 3 + frontend/antd/layout/sider/layout.sider.tsx | 25 + frontend/antd/layout/sider/package.json | 14 + frontend/antd/list/Index.svelte | 78 + frontend/antd/list/gradio.config.js | 3 + frontend/antd/list/item/Index.svelte | 68 + frontend/antd/list/item/gradio.config.js | 3 + frontend/antd/list/item/list.item.tsx | 28 + frontend/antd/list/item/meta/Index.svelte | 68 + frontend/antd/list/item/meta/gradio.config.js | 3 + .../antd/list/item/meta/list.item.meta.tsx | 28 + frontend/antd/list/item/meta/package.json | 14 + frontend/antd/list/item/package.json | 14 + frontend/antd/list/list.tsx | 33 + frontend/antd/list/package.json | 14 + frontend/antd/mentions/Index.svelte | 83 + frontend/antd/mentions/context.ts | 6 + frontend/antd/mentions/gradio.config.js | 3 + frontend/antd/mentions/mentions.tsx | 73 + frontend/antd/mentions/option/Index.svelte | 99 + .../antd/mentions/option/gradio.config.js | 3 + frontend/antd/mentions/option/package.json | 14 + frontend/antd/mentions/package.json | 14 + frontend/antd/menu/Index.svelte | 82 + frontend/antd/menu/context.ts | 6 + frontend/antd/menu/gradio.config.js | 3 + frontend/antd/menu/item/Index.svelte | 98 + frontend/antd/menu/item/gradio.config.js | 3 + frontend/antd/menu/item/package.json | 14 + frontend/antd/menu/menu.less | 44 + frontend/antd/menu/menu.tsx | 76 + frontend/antd/menu/package.json | 14 + frontend/antd/message/Index.svelte | 80 + frontend/antd/message/gradio.config.js | 3 + frontend/antd/message/message.tsx | 66 + frontend/antd/message/package.json | 14 + frontend/antd/modal/Index.svelte | 79 + frontend/antd/modal/gradio.config.js | 3 + frontend/antd/modal/modal.tsx | 104 + frontend/antd/modal/package.json | 14 + frontend/antd/notification/Index.svelte | 80 + frontend/antd/notification/gradio.config.js | 3 + frontend/antd/notification/notification.tsx | 80 + frontend/antd/notification/package.json | 14 + frontend/antd/package.json | 5 + frontend/antd/pagination/Index.svelte | 84 + frontend/antd/pagination/gradio.config.js | 3 + frontend/antd/pagination/package.json | 14 + frontend/antd/pagination/pagination.tsx | 60 + frontend/antd/popconfirm/Index.svelte | 76 + frontend/antd/popconfirm/gradio.config.js | 3 + frontend/antd/popconfirm/package.json | 14 + frontend/antd/popconfirm/popconfirm.tsx | 64 + frontend/antd/popover/Index.svelte | 75 + frontend/antd/popover/gradio.config.js | 3 + frontend/antd/popover/package.json | 14 + frontend/antd/popover/popover.tsx | 30 + frontend/antd/progress/Index.svelte | 73 + frontend/antd/progress/gradio.config.js | 3 + frontend/antd/progress/package.json | 14 + frontend/antd/progress/progress.tsx | 12 + frontend/antd/qr-code/Index.svelte | 78 + frontend/antd/qr-code/gradio.config.js | 3 + frontend/antd/qr-code/package.json | 14 + frontend/antd/qr-code/qr-code.tsx | 26 + frontend/antd/radio/Index.svelte | 80 + frontend/antd/radio/button/Index.svelte | 80 + frontend/antd/radio/button/gradio.config.js | 3 + frontend/antd/radio/button/package.json | 14 + frontend/antd/radio/button/radio.button.tsx | 29 + frontend/antd/radio/context.ts | 6 + frontend/antd/radio/gradio.config.js | 3 + frontend/antd/radio/group/Index.svelte | 88 + frontend/antd/radio/group/gradio.config.js | 3 + frontend/antd/radio/group/option/Index.svelte | 103 + .../antd/radio/group/option/gradio.config.js | 3 + frontend/antd/radio/group/option/package.json | 14 + frontend/antd/radio/group/package.json | 14 + frontend/antd/radio/group/radio.group.less | 20 + frontend/antd/radio/group/radio.group.tsx | 53 + frontend/antd/radio/package.json | 14 + frontend/antd/radio/radio.tsx | 21 + frontend/antd/rate/Index.svelte | 85 + frontend/antd/rate/gradio.config.js | 3 + frontend/antd/rate/package.json | 14 + frontend/antd/rate/rate.tsx | 45 + frontend/antd/result/Index.svelte | 73 + frontend/antd/result/gradio.config.js | 3 + frontend/antd/result/package.json | 14 + frontend/antd/result/result.tsx | 23 + frontend/antd/segmented/Index.svelte | 83 + frontend/antd/segmented/context.ts | 6 + frontend/antd/segmented/gradio.config.js | 3 + frontend/antd/segmented/option/Index.svelte | 84 + .../antd/segmented/option/gradio.config.js | 3 + frontend/antd/segmented/option/package.json | 14 + frontend/antd/segmented/package.json | 14 + frontend/antd/segmented/segmented.tsx | 35 + frontend/antd/select/Index.svelte | 89 + frontend/antd/select/context.ts | 6 + frontend/antd/select/gradio.config.js | 3 + frontend/antd/select/option/Index.svelte | 103 + frontend/antd/select/option/gradio.config.js | 3 + frontend/antd/select/option/package.json | 14 + frontend/antd/select/package.json | 14 + frontend/antd/select/select.tsx | 168 + frontend/antd/skeleton/Index.svelte | 73 + frontend/antd/skeleton/avatar/Index.svelte | 75 + .../antd/skeleton/avatar/gradio.config.js | 3 + frontend/antd/skeleton/avatar/package.json | 14 + .../antd/skeleton/avatar/skeleton.avatar.tsx | 8 + frontend/antd/skeleton/button/Index.svelte | 75 + .../antd/skeleton/button/gradio.config.js | 3 + frontend/antd/skeleton/button/package.json | 14 + .../antd/skeleton/button/skeleton.button.tsx | 8 + frontend/antd/skeleton/gradio.config.js | 3 + frontend/antd/skeleton/image/Index.svelte | 75 + frontend/antd/skeleton/image/gradio.config.js | 3 + frontend/antd/skeleton/image/package.json | 14 + .../antd/skeleton/image/skeleton.image.tsx | 8 + frontend/antd/skeleton/input/Index.svelte | 75 + frontend/antd/skeleton/input/gradio.config.js | 3 + frontend/antd/skeleton/input/package.json | 14 + .../antd/skeleton/input/skeleton.input.tsx | 8 + frontend/antd/skeleton/node/Index.svelte | 73 + frontend/antd/skeleton/node/gradio.config.js | 3 + frontend/antd/skeleton/node/package.json | 14 + frontend/antd/skeleton/node/skeleton.node.tsx | 8 + frontend/antd/skeleton/package.json | 14 + frontend/antd/skeleton/skeleton.tsx | 6 + frontend/antd/slider/Index.svelte | 89 + frontend/antd/slider/context.ts | 6 + frontend/antd/slider/gradio.config.js | 3 + frontend/antd/slider/mark/Index.svelte | 94 + frontend/antd/slider/mark/gradio.config.js | 3 + frontend/antd/slider/mark/package.json | 14 + frontend/antd/slider/package.json | 14 + frontend/antd/slider/slider.tsx | 96 + frontend/antd/space/Index.svelte | 72 + frontend/antd/space/compact/Index.svelte | 73 + frontend/antd/space/compact/gradio.config.js | 3 + frontend/antd/space/compact/package.json | 14 + frontend/antd/space/compact/space.compact.tsx | 23 + frontend/antd/space/gradio.config.js | 3 + frontend/antd/space/package.json | 14 + frontend/antd/space/space.tsx | 28 + frontend/antd/spin/Index.svelte | 73 + frontend/antd/spin/gradio.config.js | 3 + frontend/antd/spin/package.json | 14 + frontend/antd/spin/spin.tsx | 23 + frontend/antd/splitter/Index.svelte | 76 + frontend/antd/splitter/context.ts | 6 + frontend/antd/splitter/gradio.config.js | 3 + frontend/antd/splitter/package.json | 14 + frontend/antd/splitter/panel/Index.svelte | 86 + frontend/antd/splitter/panel/gradio.config.js | 3 + frontend/antd/splitter/panel/package.json | 14 + frontend/antd/splitter/splitter.tsx | 32 + frontend/antd/statistic/Index.svelte | 78 + .../antd/statistic/countdown/Index.svelte | 76 + .../antd/statistic/countdown/gradio.config.js | 3 + .../antd/statistic/countdown/package.json | 14 + .../countdown/statistic.countdown.tsx | 26 + frontend/antd/statistic/gradio.config.js | 3 + frontend/antd/statistic/package.json | 14 + frontend/antd/statistic/statistic.tsx | 35 + frontend/antd/steps/Index.svelte | 83 + frontend/antd/steps/context.ts | 6 + frontend/antd/steps/gradio.config.js | 3 + frontend/antd/steps/item/Index.svelte | 76 + frontend/antd/steps/item/gradio.config.js | 3 + frontend/antd/steps/item/package.json | 14 + frontend/antd/steps/package.json | 14 + frontend/antd/steps/steps.tsx | 55 + frontend/antd/switch/Index.svelte | 78 + frontend/antd/switch/gradio.config.js | 3 + frontend/antd/switch/package.json | 14 + frontend/antd/switch/switch.tsx | 41 + frontend/antd/table/Index.svelte | 92 + frontend/antd/table/column-group/Index.svelte | 86 + .../antd/table/column-group/gradio.config.js | 3 + frontend/antd/table/column-group/package.json | 14 + frontend/antd/table/column/Index.svelte | 183 + frontend/antd/table/column/gradio.config.js | 3 + frontend/antd/table/column/package.json | 14 + frontend/antd/table/context.ts | 27 + .../antd/table/expandable/Expandable.svelte | 119 + frontend/antd/table/expandable/Index.svelte | 42 + .../antd/table/expandable/gradio.config.js | 3 + frontend/antd/table/expandable/package.json | 14 + frontend/antd/table/gradio.config.js | 3 + frontend/antd/table/package.json | 14 + .../antd/table/row-selection/Index.svelte | 40 + .../table/row-selection/RowSelection.svelte | 119 + .../antd/table/row-selection/gradio.config.js | 3 + .../antd/table/row-selection/package.json | 14 + .../row-selection/selection/Index.svelte | 96 + .../row-selection/selection/gradio.config.js | 3 + .../row-selection/selection/package.json | 14 + frontend/antd/table/table.tsx | 221 + frontend/antd/tabs/Index.svelte | 82 + frontend/antd/tabs/context.ts | 6 + frontend/antd/tabs/gradio.config.js | 3 + frontend/antd/tabs/item/Index.svelte | 85 + frontend/antd/tabs/item/gradio.config.js | 3 + frontend/antd/tabs/item/package.json | 14 + frontend/antd/tabs/package.json | 14 + frontend/antd/tabs/tabs.tsx | 119 + frontend/antd/tag/Index.svelte | 83 + frontend/antd/tag/checkable-tag/Index.svelte | 92 + .../antd/tag/checkable-tag/gradio.config.js | 3 + frontend/antd/tag/checkable-tag/package.json | 14 + .../tag/checkable-tag/tag.checkable-tag.tsx | 21 + frontend/antd/tag/gradio.config.js | 3 + frontend/antd/tag/package.json | 14 + frontend/antd/tag/tag.tsx | 24 + frontend/antd/time-picker/Index.svelte | 84 + frontend/antd/time-picker/gradio.config.js | 3 + frontend/antd/time-picker/package.json | 14 + .../time-picker/range-picker/Index.svelte | 88 + .../time-picker/range-picker/gradio.config.js | 3 + .../time-picker/range-picker/package.json | 14 + .../range-picker/time-picker.range-picker.tsx | 213 + frontend/antd/time-picker/time-picker.tsx | 201 + frontend/antd/timeline/Index.svelte | 76 + frontend/antd/timeline/context.ts | 6 + frontend/antd/timeline/gradio.config.js | 3 + frontend/antd/timeline/item/Index.svelte | 85 + frontend/antd/timeline/item/gradio.config.js | 3 + frontend/antd/timeline/item/package.json | 14 + frontend/antd/timeline/package.json | 14 + frontend/antd/timeline/timeline.tsx | 43 + frontend/antd/tooltip/Index.svelte | 75 + frontend/antd/tooltip/gradio.config.js | 3 + frontend/antd/tooltip/package.json | 14 + frontend/antd/tooltip/tooltip.tsx | 26 + frontend/antd/tour/Index.svelte | 83 + frontend/antd/tour/context.ts | 6 + frontend/antd/tour/gradio.config.js | 3 + frontend/antd/tour/package.json | 14 + frontend/antd/tour/step/Index.svelte | 85 + frontend/antd/tour/step/gradio.config.js | 3 + frontend/antd/tour/step/package.json | 14 + frontend/antd/tour/tour.tsx | 76 + frontend/antd/transfer/Index.svelte | 89 + frontend/antd/transfer/gradio.config.js | 3 + frontend/antd/transfer/package.json | 14 + frontend/antd/transfer/transfer.tsx | 105 + frontend/antd/tree-select/Index.svelte | 88 + frontend/antd/tree-select/context.ts | 6 + frontend/antd/tree-select/gradio.config.js | 3 + frontend/antd/tree-select/package.json | 14 + .../antd/tree-select/tree-node/Index.svelte | 90 + .../tree-select/tree-node/gradio.config.js | 3 + .../antd/tree-select/tree-node/package.json | 14 + frontend/antd/tree-select/tree-select.tsx | 133 + frontend/antd/tree/Index.svelte | 82 + frontend/antd/tree/context.ts | 6 + .../antd/tree/directory-tree/Index.svelte | 84 + .../antd/tree/directory-tree/gradio.config.js | 3 + .../antd/tree/directory-tree/package.json | 14 + frontend/antd/tree/gradio.config.js | 3 + frontend/antd/tree/package.json | 14 + frontend/antd/tree/tree-node/Index.svelte | 95 + frontend/antd/tree/tree-node/gradio.config.js | 3 + frontend/antd/tree/tree-node/package.json | 14 + frontend/antd/tree/tree.tsx | 128 + frontend/antd/typography/Base.svelte | 96 + frontend/antd/typography/link/Index.svelte | 12 + .../antd/typography/link/gradio.config.js | 3 + frontend/antd/typography/link/package.json | 14 + .../antd/typography/paragraph/Index.svelte | 12 + .../typography/paragraph/gradio.config.js | 3 + .../antd/typography/paragraph/package.json | 14 + frontend/antd/typography/text/Index.svelte | 12 + .../antd/typography/text/gradio.config.js | 3 + frontend/antd/typography/text/package.json | 14 + frontend/antd/typography/title/Index.svelte | 12 + .../antd/typography/title/gradio.config.js | 3 + frontend/antd/typography/title/package.json | 14 + frontend/antd/typography/typography.base.tsx | 173 + frontend/antd/upload/Index.svelte | 96 + frontend/antd/upload/dragger/Index.svelte | 94 + frontend/antd/upload/dragger/gradio.config.js | 3 + frontend/antd/upload/dragger/package.json | 14 + .../antd/upload/dragger/upload.dragger.tsx | 185 + frontend/antd/upload/gradio.config.js | 3 + frontend/antd/upload/package.json | 14 + frontend/antd/upload/upload.tsx | 185 + frontend/antd/watermark/Index.svelte | 76 + frontend/antd/watermark/gradio.config.js | 3 + frontend/antd/watermark/package.json | 14 + frontend/antd/watermark/watermark.tsx | 5 + frontend/base/CHANGELOG.md | 25 + frontend/base/application/Application.svelte | 117 + frontend/base/application/Index.svelte | 17 + frontend/base/application/gradio.config.js | 3 + frontend/base/application/package.json | 14 + frontend/base/div/Index.svelte | 111 + frontend/base/div/gradio.config.js | 3 + frontend/base/div/package.json | 14 + frontend/base/each/Each.svelte | 26 + frontend/base/each/Index.svelte | 50 + frontend/base/each/gradio.config.js | 3 + frontend/base/each/package.json | 14 + frontend/base/filter/Index.svelte | 60 + frontend/base/filter/gradio.config.js | 3 + frontend/base/filter/package.json | 14 + frontend/base/fragment/Index.svelte | 40 + frontend/base/fragment/ShowFragment.svelte | 15 + frontend/base/fragment/fragment.tsx | 10 + frontend/base/fragment/gradio.config.js | 3 + frontend/base/fragment/package.json | 15 + frontend/base/package.json | 5 + frontend/base/slot/Index.svelte | 77 + frontend/base/slot/gradio.config.js | 3 + frontend/base/slot/package.json | 14 + frontend/base/span/Index.svelte | 111 + frontend/base/span/gradio.config.js | 3 + frontend/base/span/package.json | 14 + frontend/base/text/Index.svelte | 36 + frontend/base/text/global.css | 3 + frontend/base/text/gradio.config.js | 3 + frontend/base/text/package.json | 14 + frontend/compiled/package.json | 67 - frontend/compiled/tsconfig.build.json | 26 - frontend/compiled/tsconfig.json | 25 - frontend/compiled/tsconfig.node.json | 11 - frontend/compiled/vite.config.ts | 72 - frontend/defineConfig.js | 18 + frontend/fixtures.d.ts | 15 + .../Chatbot/Awaited.svelte} | 6 +- .../{Markdown => legacy/Chatbot}/CHANGELOG.md | 28 +- frontend/legacy/Chatbot/Index.svelte | 15 + frontend/legacy/Chatbot/gradio.config.js | 3 + frontend/legacy/Chatbot/package.json | 24 + .../Chatbot/shared/ChatBot.svelte | 4 +- .../{ => legacy}/Chatbot/shared/Copy.svelte | 2 +- .../Chatbot/shared/FlushingMarkdown.svelte | 2 +- .../Chatbot/shared/LikeDislike.svelte | 0 .../Chatbot/shared/Pending.svelte | 0 .../Chatbot/shared/llm-thinking-presets.ts | 0 frontend/{ => legacy}/Chatbot/shared/utils.ts | 0 .../Flow/Awaited.svelte} | 4 +- frontend/{ => legacy}/Flow/CHANGELOG.md | 26 +- frontend/legacy/Flow/Index.svelte | 15 + frontend/legacy/Flow/gradio.config.js | 3 + frontend/legacy/Flow/package.json | 27 + frontend/{ => legacy}/Flow/schema.json | 0 frontend/legacy/Flow/schema.ts | 1 + frontend/{ => legacy}/Flow/shared/Flow.svelte | 4 +- frontend/{ => legacy}/Flow/shared/utils.ts | 2 +- frontend/legacy/Lifecycle/CHANGELOG.md | 43 + frontend/legacy/Lifecycle/gradio.config.js | 3 + frontend/{ => legacy}/Lifecycle/index.svelte | 0 frontend/legacy/Lifecycle/package.json | 22 + .../{ => legacy}/Lifecycle/shared/utils.ts | 0 .../Markdown/Awaited.svelte} | 8 +- .../{Chatbot => legacy/Markdown}/CHANGELOG.md | 28 +- frontend/{ => legacy}/Markdown/Example.svelte | 5 +- frontend/legacy/Markdown/Index.svelte | 15 + frontend/legacy/Markdown/gradio.config.js | 3 + frontend/legacy/Markdown/package.json | 28 + .../Markdown/shared/Markdown.svelte | 2 +- .../MultimodalInput/Awaited.svelte} | 4 +- .../{ => legacy}/MultimodalInput/CHANGELOG.md | 28 +- .../MultimodalInput/Example.svelte | 0 frontend/legacy/MultimodalInput/Index.svelte | 17 + .../legacy/MultimodalInput/gradio.config.js | 3 + frontend/legacy/MultimodalInput/package.json | 28 + .../shared/AudioRecorder.svelte | 0 .../MultimodalInput/shared/FilePreview.svelte | 2 +- .../MultimodalInput/shared/Input.svelte | 0 .../MultimodalInput/shared/Loader.svelte | 0 .../MultimodalInput/shared/RemoveIcon.svelte | 0 .../shared/SubmitButton.svelte | 0 .../shared/UploadButton.svelte | 0 .../MultimodalInput/shared/UploadIcon.svelte | 0 .../MultimodalInput/shared/Webcam.svelte | 0 .../MultimodalInput/shared/context.ts | 0 .../MultimodalInput/shared/global.d.ts | 0 .../MultimodalInput/shared/utils.ts | 0 frontend/legacy/WaterfallGallery/CHANGELOG.md | 59 + .../WaterfallGallery/Index.svelte | 0 .../legacy/WaterfallGallery/gradio.config.js | 3 + frontend/legacy/WaterfallGallery/package.json | 20 + .../WaterfallGallery/shared/Dislike.svelte | 0 .../WaterfallGallery/shared/Gallery.svelte | 2 +- .../WaterfallGallery/shared/Image.svelte | 0 .../shared/Waterfall/createWaterfall.ts | 0 .../shared/Waterfall/index.ts | 0 .../shared/Waterfall/layout.ts | 0 .../WaterfallGallery/shared/utils.ts | 0 frontend/{ => legacy}/compiled/CHANGELOG.md | 26 +- .../compiled/components/FileView/index.svelte | 0 .../FileView/shared/FileView.svelte | 2 +- .../compiled/components/Flow/index.svelte | 2 +- .../compiled/components/Markdown/index.svelte | 2 +- .../compiled/components/ReactComponent.svelte | 2 +- frontend/{ => legacy}/compiled/global.d.ts | 0 frontend/{ => legacy}/compiled/index.ts | 2 +- frontend/legacy/compiled/package.json | 43 + .../compiled/src/ComponentConfigProvider.tsx | 0 .../compiled/src/FileView/Pdf.tsx | 0 .../compiled/src/FileView/hooks/usePreview.ts | 0 .../compiled/src/FileView/index.less | 0 .../compiled/src/FileView/index.tsx | 0 .../compiled/src/Flow/FlowContext.ts | 0 .../src/Flow/components/CustomComponent.tsx | 0 .../src/Flow/components/FileUpload.tsx | 0 .../Flow/components/FormListItemWrapper.tsx | 0 .../Flow/flow-components/ConnectionHandle.tsx | 0 .../Flow/flow-components/ConnectionLine.tsx | 0 .../src/Flow/flow-components/Controls.tsx | 0 .../src/Flow/flow-components/Edge.tsx | 0 .../src/Flow/flow-components/Node.tsx | 0 .../src/Flow/flow-components/Sidebar.tsx | 0 .../{ => legacy}/compiled/src/Flow/i18n.ts | 0 .../{ => legacy}/compiled/src/Flow/index.less | 0 .../{ => legacy}/compiled/src/Flow/index.tsx | 0 .../{ => legacy}/compiled/src/Flow/type.ts | 0 .../{ => legacy}/compiled/src/Flow/utils.ts | 2 +- .../src/Markdown/components/Anchor.tsx | 0 .../src/Markdown/components/Audio.tsx | 0 .../compiled/src/Markdown/components/Code.tsx | 0 .../Markdown/components/CustomComponent.tsx | 0 .../src/Markdown/components/Heading.tsx | 0 .../src/Markdown/components/Image.tsx | 0 .../src/Markdown/components/Video.tsx | 0 .../Markdown/components/custom/Accordion.tsx | 0 .../src/Markdown/components/custom/Chart.tsx | 0 .../src/Markdown/components/custom/File.tsx | 0 .../components/custom/FlushingEnd.tsx | 0 .../Markdown/components/custom/SelectBox.tsx | 0 .../compiled/src/Markdown/context.ts | 0 .../src/Markdown/hooks/useCustomProps.ts | 0 .../compiled/src/Markdown/index.less | 0 .../compiled/src/Markdown/index.tsx | 0 .../compiled/src/Markdown/math.ts | 0 .../compiled/src/Markdown/react-markdown.d.ts | 0 .../rehype-Inline-code-property.ts | 0 .../rehype-plugins/rehype-sanitize/index.d.ts | 0 .../rehype-plugins/rehype-sanitize/index.js | 0 .../rehype-plugins/rehype-sanitize/schema.js | 0 .../remark-plugins/remark-directive-rehype.ts | 0 .../compiled/src/Markdown/type.ts | 0 .../compiled/src/defineComponent.tsx | 0 frontend/{ => legacy}/compiled/src/index.ts | 0 frontend/{ => legacy}/compiled/src/mount.tsx | 0 .../{ => legacy}/compiled/src/polyfills.ts | 0 .../src/shared/hooks/useCustomComponent.ts | 0 .../src/shared/hooks/useMemoizedEqualValue.ts | 0 .../compiled/src/shared/hooks/useRefValue.ts | 0 .../{ => legacy}/compiled/src/shared/index.ts | 0 .../{ => legacy}/compiled/src/shared/type.ts | 0 frontend/{ => legacy}/compiled/src/utils.ts | 2 +- frontend/package.json | 48 +- frontend/plugin.js | 164 + frontend/shared/CHANGELOG.md | 39 - frontend/shared/package.json | 13 - frontend/svelte-preprocess-react/component.ts | 170 + frontend/svelte-preprocess-react/context.ts | 16 + .../events-polyfills.ts | 113 + frontend/svelte-preprocess-react/index.ts | 8 + frontend/svelte-preprocess-react/inject.ts | 95 + .../internal/Bridge.ts | 95 + .../svelte-preprocess-react/internal/Child.ts | 28 + .../internal/ReactWrapper.svelte | 59 + .../svelte-preprocess-react/internal/types.ts | 67 + frontend/svelte-preprocess-react/polyfills.ts | 4 + .../svelte-preprocess-react/react-slot.tsx | 183 + frontend/svelte-preprocess-react/slot.ts | 238 + frontend/svelte-preprocess-react/sveltify.ts | 88 + frontend/svelte-preprocess-react/useStore.ts | 37 + frontend/tsconfig.json | 7 + frontend/utils/createFunction.ts | 11 + frontend/utils/createItemsContext.tsx | 86 + frontend/utils/hooks/useFunction.ts | 9 + frontend/utils/hooks/useSlotsChildren.ts | 23 + frontend/utils/hooks/useTargets.ts | 43 + frontend/utils/hooks/useValueChange.ts | 28 + frontend/utils/omitUndefinedProps.ts | 10 + frontend/utils/renderItems.tsx | 79 + frontend/utils/renderParamsSlot.tsx | 21 + frontend/utils/renderSlot.tsx | 10 + frontend/utils/styleObject2String.ts | 66 + .../{shared/src/index.ts => utils/upload.ts} | 0 package.json | 46 +- pnpm-lock.yaml | 6373 ++++++++--------- pnpm-workspace.yaml | 4 +- pyproject.toml | 173 +- tsconfig.json | 21 +- 1128 files changed, 44072 insertions(+), 4480 deletions(-) create mode 100644 .changeset/five-actors-compete.md create mode 100644 .changeset/fuzzy-goats-retire.md create mode 100644 .changeset/lemon-laws-cross.md create mode 100644 .changeset/pre.json create mode 100644 .changeset/tough-walls-grab.md delete mode 100644 backend/modelscope_studio/components/__init__.py create mode 100644 backend/modelscope_studio/components/antd/__init__.py create mode 100644 backend/modelscope_studio/components/antd/affix/__init__.py create mode 100644 backend/modelscope_studio/components/antd/alert/__init__.py create mode 100644 backend/modelscope_studio/components/antd/alert/error_boundary/__init__.py create mode 100644 backend/modelscope_studio/components/antd/anchor/__init__.py create mode 100644 backend/modelscope_studio/components/antd/anchor/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/auto_complete/__init__.py create mode 100644 backend/modelscope_studio/components/antd/auto_complete/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/avatar/__init__.py create mode 100644 backend/modelscope_studio/components/antd/avatar/group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/badge/__init__.py create mode 100644 backend/modelscope_studio/components/antd/badge/ribbon/__init__.py create mode 100644 backend/modelscope_studio/components/antd/breadcrumb/__init__.py create mode 100644 backend/modelscope_studio/components/antd/breadcrumb/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/button/__init__.py create mode 100644 backend/modelscope_studio/components/antd/button/group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/calendar/__init__.py create mode 100644 backend/modelscope_studio/components/antd/card/__init__.py create mode 100644 backend/modelscope_studio/components/antd/card/grid/__init__.py create mode 100644 backend/modelscope_studio/components/antd/card/meta/__init__.py create mode 100644 backend/modelscope_studio/components/antd/carousel/__init__.py create mode 100644 backend/modelscope_studio/components/antd/cascader/__init__.py create mode 100644 backend/modelscope_studio/components/antd/cascader/constants.py create mode 100644 backend/modelscope_studio/components/antd/cascader/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/cascader/panel/__init__.py create mode 100644 backend/modelscope_studio/components/antd/checkbox/__init__.py create mode 100644 backend/modelscope_studio/components/antd/checkbox/group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/checkbox/group/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/collapse/__init__.py create mode 100644 backend/modelscope_studio/components/antd/collapse/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/color_picker/__init__.py create mode 100644 backend/modelscope_studio/components/antd/color_picker/preset/__init__.py create mode 100644 backend/modelscope_studio/components/antd/components.py create mode 100644 backend/modelscope_studio/components/antd/config_provider/__init__.py create mode 100644 backend/modelscope_studio/components/antd/date_picker/__init__.py create mode 100644 backend/modelscope_studio/components/antd/date_picker/preset/__init__.py create mode 100644 backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py create mode 100644 backend/modelscope_studio/components/antd/descriptions/__init__.py create mode 100644 backend/modelscope_studio/components/antd/descriptions/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/divider/__init__.py create mode 100644 backend/modelscope_studio/components/antd/drawer/__init__.py create mode 100644 backend/modelscope_studio/components/antd/dropdown/__init__.py create mode 100644 backend/modelscope_studio/components/antd/dropdown/button/__init__.py create mode 100644 backend/modelscope_studio/components/antd/empty/__init__.py create mode 100644 backend/modelscope_studio/components/antd/flex/__init__.py create mode 100644 backend/modelscope_studio/components/antd/float_button/__init__.py create mode 100644 backend/modelscope_studio/components/antd/float_button/back_top/__init__.py create mode 100644 backend/modelscope_studio/components/antd/float_button/group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/form/__init__.py create mode 100644 backend/modelscope_studio/components/antd/form/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/form/item/rule/__init__.py create mode 100644 backend/modelscope_studio/components/antd/grid/col/__init__.py create mode 100644 backend/modelscope_studio/components/antd/grid/row/__init__.py create mode 100644 backend/modelscope_studio/components/antd/icon/__init__.py create mode 100644 backend/modelscope_studio/components/antd/icon/iconfont_provider/__init__.py create mode 100644 backend/modelscope_studio/components/antd/image/__init__.py create mode 100644 backend/modelscope_studio/components/antd/image/preview_group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input/otp/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input/password/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input/search/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input/textarea/__init__.py create mode 100644 backend/modelscope_studio/components/antd/input_number/__init__.py create mode 100644 backend/modelscope_studio/components/antd/layout/__init__.py create mode 100644 backend/modelscope_studio/components/antd/layout/content/__init__.py create mode 100644 backend/modelscope_studio/components/antd/layout/footer/__init__.py create mode 100644 backend/modelscope_studio/components/antd/layout/header/__init__.py create mode 100644 backend/modelscope_studio/components/antd/layout/sider/__init__.py create mode 100644 backend/modelscope_studio/components/antd/list/__init__.py create mode 100644 backend/modelscope_studio/components/antd/list/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/list/item/meta/__init__.py create mode 100644 backend/modelscope_studio/components/antd/mentions/__init__.py create mode 100644 backend/modelscope_studio/components/antd/mentions/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/menu/__init__.py create mode 100644 backend/modelscope_studio/components/antd/menu/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/message/__init__.py create mode 100644 backend/modelscope_studio/components/antd/modal/__init__.py create mode 100644 backend/modelscope_studio/components/antd/notification/__init__.py create mode 100644 backend/modelscope_studio/components/antd/pagination/__init__.py create mode 100644 backend/modelscope_studio/components/antd/popconfirm/__init__.py create mode 100644 backend/modelscope_studio/components/antd/popover/__init__.py create mode 100644 backend/modelscope_studio/components/antd/progress/__init__.py create mode 100644 backend/modelscope_studio/components/antd/qr_code/__init__.py create mode 100644 backend/modelscope_studio/components/antd/radio/__init__.py create mode 100644 backend/modelscope_studio/components/antd/radio/button/__init__.py create mode 100644 backend/modelscope_studio/components/antd/radio/group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/radio/group/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/rate/__init__.py create mode 100644 backend/modelscope_studio/components/antd/result/__init__.py create mode 100644 backend/modelscope_studio/components/antd/segmented/__init__.py create mode 100644 backend/modelscope_studio/components/antd/segmented/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/select/__init__.py create mode 100644 backend/modelscope_studio/components/antd/select/option/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/avatar/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/button/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/image/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/input/__init__.py create mode 100644 backend/modelscope_studio/components/antd/skeleton/node/__init__.py create mode 100644 backend/modelscope_studio/components/antd/slider/__init__.py create mode 100644 backend/modelscope_studio/components/antd/slider/mark/__init__.py create mode 100644 backend/modelscope_studio/components/antd/space/__init__.py create mode 100644 backend/modelscope_studio/components/antd/space/compact/__init__.py create mode 100644 backend/modelscope_studio/components/antd/spin/__init__.py create mode 100644 backend/modelscope_studio/components/antd/splitter/__init__.py create mode 100644 backend/modelscope_studio/components/antd/splitter/panel/__init__.py create mode 100644 backend/modelscope_studio/components/antd/statistic/__init__.py create mode 100644 backend/modelscope_studio/components/antd/statistic/countdown/__init__.py create mode 100644 backend/modelscope_studio/components/antd/steps/__init__.py create mode 100644 backend/modelscope_studio/components/antd/steps/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/switch/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/column/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/column_group/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/constants.py create mode 100644 backend/modelscope_studio/components/antd/table/expandable/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/row_selection/__init__.py create mode 100644 backend/modelscope_studio/components/antd/table/row_selection/selection/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tabs/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tabs/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tag/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tag/checkable_tag/__init__.py create mode 100644 backend/modelscope_studio/components/antd/time_picker/__init__.py create mode 100644 backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py create mode 100644 backend/modelscope_studio/components/antd/timeline/__init__.py create mode 100644 backend/modelscope_studio/components/antd/timeline/item/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tooltip/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tour/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tour/step/__init__.py create mode 100644 backend/modelscope_studio/components/antd/transfer/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tree/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tree/tree_node/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tree_select/__init__.py create mode 100644 backend/modelscope_studio/components/antd/tree_select/tree_node/__init__.py create mode 100644 backend/modelscope_studio/components/antd/typography/__init__.py create mode 100644 backend/modelscope_studio/components/antd/typography/link/__init__.py create mode 100644 backend/modelscope_studio/components/antd/typography/paragraph/__init__.py create mode 100644 backend/modelscope_studio/components/antd/typography/text/__init__.py create mode 100644 backend/modelscope_studio/components/antd/typography/title/__init__.py create mode 100644 backend/modelscope_studio/components/antd/upload/__init__.py create mode 100644 backend/modelscope_studio/components/antd/upload/dragger/__init__.py create mode 100644 backend/modelscope_studio/components/antd/watermark/__init__.py create mode 100644 backend/modelscope_studio/components/base/__init__.py create mode 100644 backend/modelscope_studio/components/base/application/__init__.py create mode 100644 backend/modelscope_studio/components/base/div/__init__.py create mode 100644 backend/modelscope_studio/components/base/each/__init__.py create mode 100644 backend/modelscope_studio/components/base/filter/__init__.py create mode 100644 backend/modelscope_studio/components/base/fragment/__init__.py create mode 100644 backend/modelscope_studio/components/base/slot/__init__.py create mode 100644 backend/modelscope_studio/components/base/span/__init__.py create mode 100644 backend/modelscope_studio/components/base/text/__init__.py rename backend/modelscope_studio/components/{ => legacy}/Chatbot/__init__.py (99%) rename backend/modelscope_studio/components/{ => legacy}/Chatbot/llm_thinking_presets.py (100%) rename backend/modelscope_studio/components/{ => legacy}/Flow/__init__.py (97%) rename backend/modelscope_studio/components/{ => legacy}/Flow/edge.py (100%) rename backend/modelscope_studio/components/{ => legacy}/Flow/node.py (100%) rename backend/modelscope_studio/components/{ => legacy}/Flow/node_schema.py (100%) rename backend/modelscope_studio/components/{ => legacy}/Lifecycle/__init__.py (93%) rename backend/modelscope_studio/components/{ => legacy}/Markdown/__init__.py (97%) rename backend/modelscope_studio/components/{ => legacy}/MultimodalInput/__init__.py (98%) rename backend/modelscope_studio/components/{ => legacy}/WaterfallGallery/__init__.py (99%) create mode 100644 backend/modelscope_studio/components/legacy/__init__.py rename backend/modelscope_studio/utils/{ => dev}/__init__.py (69%) create mode 100644 backend/modelscope_studio/utils/dev/component.py rename backend/modelscope_studio/utils/{ => dev}/process_links.py (100%) create mode 100644 backend/modelscope_studio/utils/dev/resolve_frontend_dir.py delete mode 100644 docs/Dockerfile delete mode 100644 docs/components/WaterfallGallery/app.py create mode 100644 docs/components/antd/button/README-zh_CN.md create mode 100644 docs/components/antd/button/README.md rename docs/components/{Chatbot => antd/button}/app.py (72%) create mode 100644 docs/components/antd/button/demos/basic.py create mode 100644 docs/components/antd/divider/README-zh_CN.md create mode 100644 docs/components/antd/divider/README.md rename docs/components/{Flow => antd/divider}/app.py (72%) create mode 100644 docs/components/antd/divider/demos/basic.py create mode 100644 docs/components/antd/float_button/README-zh_CN.md create mode 100644 docs/components/antd/float_button/README.md rename docs/components/{Lifecycle => antd/float_button}/app.py (72%) create mode 100644 docs/components/antd/float_button/demos/basic.py create mode 100644 docs/components/antd/icon/README-zh_CN.md create mode 100644 docs/components/antd/icon/README.md rename docs/components/{MultimodalInput => antd/icon}/app.py (72%) create mode 100644 docs/components/antd/icon/demos/basic.py create mode 100644 docs/components/antd/icon/demos/iconfont.py create mode 100644 docs/components/antd/overview/README-zh_CN.md create mode 100644 docs/components/antd/overview/README.md create mode 100644 docs/components/antd/overview/app.py create mode 100644 docs/components/antd/overview/demos/integrate_other_components.py create mode 100644 docs/components/antd/overview/demos/limit_event.py create mode 100644 docs/components/antd/overview/demos/limit_function.py create mode 100644 docs/components/antd/overview/demos/limit_function_with_event.py create mode 100644 docs/components/antd/overview/demos/limit_react_node.py create mode 100644 docs/components/antd/overview/demos/limit_react_node_function_by_function.py create mode 100644 docs/components/antd/overview/demos/limit_react_node_function_by_slot.py create mode 100644 docs/components/antd/overview/demos/quick_start.py create mode 100644 docs/components/antd/typography/README-zh_CN.md create mode 100644 docs/components/antd/typography/README.md create mode 100644 docs/components/antd/typography/app.py create mode 100644 docs/components/antd/typography/demos/basic.py create mode 100644 docs/components/base/application/README-zh_CN.md create mode 100644 docs/components/base/application/README.md create mode 100644 docs/components/base/application/app.py create mode 100644 docs/components/base/application/demos/basic.py create mode 100644 docs/components/base/application/demos/custom_event.py create mode 100644 docs/components/base/application/demos/language_adaptation.py create mode 100644 docs/components/base/application/demos/theme_adaptation.py create mode 100644 docs/components/base/div/README-zh_CN.md create mode 100644 docs/components/base/div/README.md create mode 100644 docs/components/base/div/app.py create mode 100644 docs/components/base/div/demos/basic.py create mode 100644 docs/components/base/each/README-zh_CN.md create mode 100644 docs/components/base/each/README.md create mode 100644 docs/components/base/each/app.py create mode 100644 docs/components/base/each/demos/basic.py create mode 100644 docs/components/base/each/demos/use_as_item.py create mode 100644 docs/components/base/each/demos/use_context_value.py create mode 100644 docs/components/base/filter/README-zh_CN.md create mode 100644 docs/components/base/filter/README.md create mode 100644 docs/components/base/filter/app.py create mode 100644 docs/components/base/filter/demos/basic.py create mode 100644 docs/components/base/filter/demos/use_as_item.py create mode 100644 docs/components/base/filter/demos/use_params_mapping.py create mode 100644 docs/components/base/fragment/README-zh_CN.md create mode 100644 docs/components/base/fragment/README.md create mode 100644 docs/components/base/fragment/app.py create mode 100644 docs/components/base/fragment/demos/basic.py create mode 100644 docs/components/base/slot/README-zh_CN.md create mode 100644 docs/components/base/slot/README.md create mode 100644 docs/components/base/slot/app.py create mode 100644 docs/components/base/slot/demos/basic.py create mode 100644 docs/components/base/span/README-zh_CN.md create mode 100644 docs/components/base/span/README.md create mode 100644 docs/components/base/span/app.py create mode 100644 docs/components/base/span/demos/basic.py create mode 100644 docs/components/base/text/README-zh_CN.md create mode 100644 docs/components/base/text/README.md create mode 100644 docs/components/base/text/app.py create mode 100644 docs/components/base/text/demos/basic.py rename docs/components/{ => legacy}/Chatbot/README-zh_CN.md (99%) rename docs/components/{ => legacy}/Chatbot/README.md (99%) create mode 100644 docs/components/legacy/Chatbot/app.py rename docs/components/{ => legacy}/Chatbot/demos/accordion.py (93%) rename docs/components/{ => legacy}/Chatbot/demos/basic.py (100%) rename docs/components/{ => legacy}/Chatbot/demos/chart.py (100%) rename docs/components/{ => legacy}/Chatbot/demos/message_config.py (100%) rename docs/components/{ => legacy}/Chatbot/demos/multi_bots.py (100%) rename docs/components/{ => legacy}/Chatbot/demos/multimodal.py (100%) rename docs/components/{ => legacy}/Chatbot/demos/select-box.py (88%) rename docs/components/{ => legacy}/Docs.py (97%) rename docs/components/{ => legacy}/Flow/README-zh_CN.md (100%) rename docs/components/{ => legacy}/Flow/README.md (100%) create mode 100644 docs/components/legacy/Flow/app.py rename docs/components/{ => legacy}/Flow/define_schema-zh_CN.md (100%) rename docs/components/{ => legacy}/Flow/define_schema.md (100%) rename docs/components/{ => legacy}/Flow/demos/basic.py (92%) rename docs/components/{ => legacy}/Flow/demos/component_options.py (96%) rename docs/components/{ => legacy}/Flow/demos/custom_node_type.py (87%) rename docs/components/{ => legacy}/Flow/schema/agents_schema.json (100%) rename docs/components/{ => legacy}/Flow/schema/agents_schema.py (97%) rename docs/components/{ => legacy}/Lifecycle/README-zh_CN.md (100%) rename docs/components/{ => legacy}/Lifecycle/README.md (100%) create mode 100644 docs/components/legacy/Lifecycle/app.py rename docs/components/{ => legacy}/Lifecycle/demos/basic.py (100%) rename docs/components/{ => legacy}/Lifecycle/demos/language_adaptation.py (100%) rename docs/components/{ => legacy}/Lifecycle/demos/theme_adaptation.py (100%) rename docs/components/{ => legacy}/Markdown/README-zh_CN.md (100%) rename docs/components/{ => legacy}/Markdown/README.md (100%) rename docs/components/{ => legacy}/Markdown/app.py (90%) rename docs/components/{ => legacy}/Markdown/custom_tags/accordion-zh_CN.md (100%) rename docs/components/{ => legacy}/Markdown/custom_tags/accordion.md (100%) rename docs/components/{ => legacy}/Markdown/custom_tags/chart-zh_CN.md (100%) rename docs/components/{ => legacy}/Markdown/custom_tags/chart.md (100%) rename docs/components/{ => legacy}/Markdown/custom_tags/select-box-zh_CN.md (100%) rename docs/components/{ => legacy}/Markdown/custom_tags/select-box.md (100%) rename docs/components/{ => legacy}/Markdown/demos/accordion.py (89%) rename docs/components/{ => legacy}/Markdown/demos/basic.py (100%) rename docs/components/{ => legacy}/Markdown/demos/chart.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom-tag.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom-tag2.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom-tag3.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom-tag4.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/accordion/accordion-title.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/accordion/basic.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/chart/basic.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/select-box/basic.py (75%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/select-box/card_shape.py (95%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/select-box/card_shape_width_auto.py (100%) rename docs/components/{ => legacy}/Markdown/demos/custom_tags/select-box/python_events.py (100%) rename docs/components/{ => legacy}/Markdown/demos/multimodal.py (100%) rename docs/components/{ => legacy}/Markdown/demos/select-box.py (85%) rename docs/components/{ => legacy}/MultimodalInput/README-zh_CN.md (100%) rename docs/components/{ => legacy}/MultimodalInput/README.md (100%) create mode 100644 docs/components/legacy/MultimodalInput/app.py rename docs/components/{ => legacy}/MultimodalInput/demos/basic.py (100%) rename docs/components/{ => legacy}/MultimodalInput/demos/config_buttons.py (100%) rename docs/components/{ => legacy}/MultimodalInput/demos/upload_sources.py (100%) rename docs/components/{ => legacy}/MultimodalInput/demos/with_chatbot.py (100%) create mode 100644 docs/components/legacy/README-zh_CN.md create mode 100644 docs/components/legacy/README.md rename docs/components/{ => legacy}/WaterfallGallery/README-zh_CN.md (100%) rename docs/components/{ => legacy}/WaterfallGallery/README.md (100%) create mode 100644 docs/components/legacy/WaterfallGallery/app.py rename docs/components/{ => legacy}/WaterfallGallery/demos/basic.py (100%) rename docs/components/{ => legacy}/WaterfallGallery/demos/like_click_feedback.py (100%) rename docs/components/{ => legacy}/WaterfallGallery/demos/load_more.py (100%) rename docs/components/{ => legacy}/WaterfallGallery/demos/responsive_columns.py (100%) create mode 100644 docs/components/legacy/app.py rename docs/components/{ => legacy}/parse_markdown.py (100%) rename docs/components/{ => legacy}/resources/audio.wav (100%) rename docs/components/{ => legacy}/resources/bot.jpeg (100%) rename docs/components/{ => legacy}/resources/custom_components/custom_select.js (100%) rename docs/components/{ => legacy}/resources/dog.mp4 (100%) rename docs/components/{ => legacy}/resources/image-bot.jpeg (100%) rename docs/components/{ => legacy}/resources/modelscope.svg (100%) rename docs/components/{ => legacy}/resources/music-bot.jpeg (100%) rename docs/components/{ => legacy}/resources/screen.jpeg (100%) rename docs/components/{ => legacy}/resources/user.jpeg (100%) rename docs/components/{ => legacy}/tab-link.js (100%) create mode 100644 docs/demos/example.py create mode 100644 docs/helper/Docs.py create mode 100644 docs/helper/Site.py create mode 100644 docs/helper/env.py create mode 100644 docs/helper/parse_markdown.py create mode 100644 docs/legacy_app.py create mode 100644 docs/resources/gradio.png create mode 100644 docs/resources/modelscope.png delete mode 100644 fixtures.d.ts delete mode 100644 frontend/Chatbot/gradio.config.js delete mode 100644 frontend/Chatbot/package.json delete mode 100644 frontend/Flow/gradio.config.js delete mode 100644 frontend/Flow/package.json delete mode 100644 frontend/Flow/schema.ts delete mode 100644 frontend/Lifecycle/CHANGELOG.md delete mode 100644 frontend/Lifecycle/package.json delete mode 100644 frontend/Markdown/gradio.config.js delete mode 100644 frontend/Markdown/package.json delete mode 100644 frontend/MultimodalInput/gradio.config.js delete mode 100644 frontend/MultimodalInput/package.json delete mode 100644 frontend/WaterfallGallery/CHANGELOG.md delete mode 100644 frontend/WaterfallGallery/gradio.config.js delete mode 100644 frontend/WaterfallGallery/package.json create mode 100644 frontend/antd/CHANGELOG.md create mode 100644 frontend/antd/affix/Index.svelte create mode 100644 frontend/antd/affix/affix.tsx create mode 100644 frontend/antd/affix/gradio.config.js create mode 100644 frontend/antd/affix/package.json create mode 100644 frontend/antd/alert/Index.svelte create mode 100644 frontend/antd/alert/alert.tsx create mode 100644 frontend/antd/alert/error-boundary/Index.svelte create mode 100644 frontend/antd/alert/error-boundary/alert.error-boundary.tsx create mode 100644 frontend/antd/alert/error-boundary/gradio.config.js create mode 100644 frontend/antd/alert/error-boundary/package.json create mode 100644 frontend/antd/alert/gradio.config.js create mode 100644 frontend/antd/alert/package.json create mode 100644 frontend/antd/anchor/Index.svelte create mode 100644 frontend/antd/anchor/anchor.tsx create mode 100644 frontend/antd/anchor/context.ts create mode 100644 frontend/antd/anchor/gradio.config.js create mode 100644 frontend/antd/anchor/item/Index.svelte create mode 100644 frontend/antd/anchor/item/gradio.config.js create mode 100644 frontend/antd/anchor/item/package.json create mode 100644 frontend/antd/anchor/package.json create mode 100644 frontend/antd/auto-complete/Index.svelte create mode 100644 frontend/antd/auto-complete/auto-complete.tsx create mode 100644 frontend/antd/auto-complete/context.ts create mode 100644 frontend/antd/auto-complete/gradio.config.js create mode 100644 frontend/antd/auto-complete/option/Index.svelte create mode 100644 frontend/antd/auto-complete/option/gradio.config.js create mode 100644 frontend/antd/auto-complete/option/package.json create mode 100644 frontend/antd/auto-complete/package.json create mode 100644 frontend/antd/avatar/Index.svelte create mode 100644 frontend/antd/avatar/avatar.tsx create mode 100644 frontend/antd/avatar/gradio.config.js create mode 100644 frontend/antd/avatar/group/Index.svelte create mode 100644 frontend/antd/avatar/group/avatar.group.tsx create mode 100644 frontend/antd/avatar/group/gradio.config.js create mode 100644 frontend/antd/avatar/group/package.json create mode 100644 frontend/antd/avatar/package.json create mode 100644 frontend/antd/badge/Index.svelte create mode 100644 frontend/antd/badge/badge.tsx create mode 100644 frontend/antd/badge/gradio.config.js create mode 100644 frontend/antd/badge/package.json create mode 100644 frontend/antd/badge/ribbon/Index.svelte create mode 100644 frontend/antd/badge/ribbon/badge.ribbon.tsx create mode 100644 frontend/antd/badge/ribbon/gradio.config.js create mode 100644 frontend/antd/badge/ribbon/package.json create mode 100644 frontend/antd/breadcrumb/Index.svelte create mode 100644 frontend/antd/breadcrumb/breadcrumb.tsx create mode 100644 frontend/antd/breadcrumb/context.ts create mode 100644 frontend/antd/breadcrumb/gradio.config.js create mode 100644 frontend/antd/breadcrumb/item/BreadcrumbItem.svelte create mode 100644 frontend/antd/breadcrumb/item/Index.svelte create mode 100644 frontend/antd/breadcrumb/item/gradio.config.js create mode 100644 frontend/antd/breadcrumb/item/package.json create mode 100644 frontend/antd/breadcrumb/package.json create mode 100644 frontend/antd/button/Index.svelte create mode 100644 frontend/antd/button/button.tsx create mode 100644 frontend/antd/button/gradio.config.js create mode 100644 frontend/antd/button/group/Index.svelte create mode 100644 frontend/antd/button/group/button.group.less create mode 100644 frontend/antd/button/group/button.group.tsx create mode 100644 frontend/antd/button/group/gradio.config.js create mode 100644 frontend/antd/button/group/package.json create mode 100644 frontend/antd/button/package.json create mode 100644 frontend/antd/calendar/Index.svelte create mode 100644 frontend/antd/calendar/calendar.tsx create mode 100644 frontend/antd/calendar/gradio.config.js create mode 100644 frontend/antd/calendar/package.json create mode 100644 frontend/antd/card/Index.svelte create mode 100644 frontend/antd/card/card.tsx create mode 100644 frontend/antd/card/gradio.config.js create mode 100644 frontend/antd/card/grid/Index.svelte create mode 100644 frontend/antd/card/grid/card.grid.tsx create mode 100644 frontend/antd/card/grid/gradio.config.js create mode 100644 frontend/antd/card/grid/package.json create mode 100644 frontend/antd/card/meta/Index.svelte create mode 100644 frontend/antd/card/meta/card.meta.tsx create mode 100644 frontend/antd/card/meta/gradio.config.js create mode 100644 frontend/antd/card/meta/package.json create mode 100644 frontend/antd/card/package.json create mode 100644 frontend/antd/carousel/Index.svelte create mode 100644 frontend/antd/carousel/carousel.tsx create mode 100644 frontend/antd/carousel/gradio.config.js create mode 100644 frontend/antd/carousel/package.json create mode 100644 frontend/antd/cascader/Index.svelte create mode 100644 frontend/antd/cascader/cascader.tsx create mode 100644 frontend/antd/cascader/context.ts create mode 100644 frontend/antd/cascader/gradio.config.js create mode 100644 frontend/antd/cascader/option/Index.svelte create mode 100644 frontend/antd/cascader/option/gradio.config.js create mode 100644 frontend/antd/cascader/option/package.json create mode 100644 frontend/antd/cascader/package.json create mode 100644 frontend/antd/cascader/panel/Index.svelte create mode 100644 frontend/antd/cascader/panel/cascader.panel.tsx create mode 100644 frontend/antd/cascader/panel/gradio.config.js create mode 100644 frontend/antd/cascader/panel/package.json create mode 100644 frontend/antd/checkbox/Index.svelte create mode 100644 frontend/antd/checkbox/checkbox.tsx create mode 100644 frontend/antd/checkbox/context.ts create mode 100644 frontend/antd/checkbox/gradio.config.js create mode 100644 frontend/antd/checkbox/group/Index.svelte create mode 100644 frontend/antd/checkbox/group/checkbox.group.tsx create mode 100644 frontend/antd/checkbox/group/gradio.config.js create mode 100644 frontend/antd/checkbox/group/option/Index.svelte create mode 100644 frontend/antd/checkbox/group/option/gradio.config.js create mode 100644 frontend/antd/checkbox/group/option/package.json create mode 100644 frontend/antd/checkbox/group/package.json create mode 100644 frontend/antd/checkbox/package.json create mode 100644 frontend/antd/collapse/Index.svelte create mode 100644 frontend/antd/collapse/collapse.tsx create mode 100644 frontend/antd/collapse/context.ts create mode 100644 frontend/antd/collapse/gradio.config.js create mode 100644 frontend/antd/collapse/item/Index.svelte create mode 100644 frontend/antd/collapse/item/gradio.config.js create mode 100644 frontend/antd/collapse/item/package.json create mode 100644 frontend/antd/collapse/package.json create mode 100644 frontend/antd/color-picker/Index.svelte create mode 100644 frontend/antd/color-picker/color-picker.tsx create mode 100644 frontend/antd/color-picker/context.ts create mode 100644 frontend/antd/color-picker/gradio.config.js create mode 100644 frontend/antd/color-picker/package.json create mode 100644 frontend/antd/color-picker/preset/Index.svelte create mode 100644 frontend/antd/color-picker/preset/gradio.config.js create mode 100644 frontend/antd/color-picker/preset/package.json create mode 100644 frontend/antd/config-provider/Index.svelte create mode 100644 frontend/antd/config-provider/config-provider.tsx create mode 100644 frontend/antd/config-provider/gradio.config.js create mode 100644 frontend/antd/config-provider/locales.ts create mode 100644 frontend/antd/config-provider/package.json create mode 100644 frontend/antd/date-picker/Index.svelte create mode 100644 frontend/antd/date-picker/context.ts create mode 100644 frontend/antd/date-picker/date-picker.tsx create mode 100644 frontend/antd/date-picker/gradio.config.js create mode 100644 frontend/antd/date-picker/package.json create mode 100644 frontend/antd/date-picker/preset/Index.svelte create mode 100644 frontend/antd/date-picker/preset/gradio.config.js create mode 100644 frontend/antd/date-picker/preset/package.json create mode 100644 frontend/antd/date-picker/range-picker/Index.svelte create mode 100644 frontend/antd/date-picker/range-picker/date-picker.range-picker.tsx create mode 100644 frontend/antd/date-picker/range-picker/gradio.config.js create mode 100644 frontend/antd/date-picker/range-picker/package.json create mode 100644 frontend/antd/descriptions/Index.svelte create mode 100644 frontend/antd/descriptions/context.ts create mode 100644 frontend/antd/descriptions/descriptions.tsx create mode 100644 frontend/antd/descriptions/gradio.config.js create mode 100644 frontend/antd/descriptions/item/Index.svelte create mode 100644 frontend/antd/descriptions/item/gradio.config.js create mode 100644 frontend/antd/descriptions/item/package.json create mode 100644 frontend/antd/descriptions/package.json create mode 100644 frontend/antd/divider/Index.svelte create mode 100644 frontend/antd/divider/divider.tsx create mode 100644 frontend/antd/divider/gradio.config.js create mode 100644 frontend/antd/divider/package.json create mode 100644 frontend/antd/drawer/Index.svelte create mode 100644 frontend/antd/drawer/drawer.tsx create mode 100644 frontend/antd/drawer/gradio.config.js create mode 100644 frontend/antd/drawer/package.json create mode 100644 frontend/antd/dropdown/Index.svelte create mode 100644 frontend/antd/dropdown/button/Index.svelte create mode 100644 frontend/antd/dropdown/button/dropdown.button.tsx create mode 100644 frontend/antd/dropdown/button/gradio.config.js create mode 100644 frontend/antd/dropdown/button/package.json create mode 100644 frontend/antd/dropdown/dropdown.tsx create mode 100644 frontend/antd/dropdown/gradio.config.js create mode 100644 frontend/antd/dropdown/package.json create mode 100644 frontend/antd/empty/Index.svelte create mode 100644 frontend/antd/empty/empty.tsx create mode 100644 frontend/antd/empty/gradio.config.js create mode 100644 frontend/antd/empty/package.json create mode 100644 frontend/antd/flex/Index.svelte create mode 100644 frontend/antd/flex/flex.tsx create mode 100644 frontend/antd/flex/gradio.config.js create mode 100644 frontend/antd/flex/package.json create mode 100644 frontend/antd/float-button/Index.svelte create mode 100644 frontend/antd/float-button/back-top/Index.svelte create mode 100644 frontend/antd/float-button/back-top/float-button.back-top.tsx create mode 100644 frontend/antd/float-button/back-top/gradio.config.js create mode 100644 frontend/antd/float-button/back-top/package.json create mode 100644 frontend/antd/float-button/float-button.tsx create mode 100644 frontend/antd/float-button/gradio.config.js create mode 100644 frontend/antd/float-button/group/Index.svelte create mode 100644 frontend/antd/float-button/group/float-button.group.less create mode 100644 frontend/antd/float-button/group/float-button.group.tsx create mode 100644 frontend/antd/float-button/group/gradio.config.js create mode 100644 frontend/antd/float-button/group/package.json create mode 100644 frontend/antd/float-button/package.json create mode 100644 frontend/antd/form/Index.svelte create mode 100644 frontend/antd/form/context.ts create mode 100644 frontend/antd/form/form.tsx create mode 100644 frontend/antd/form/gradio.config.js create mode 100644 frontend/antd/form/item/Index.svelte create mode 100644 frontend/antd/form/item/form.item.tsx create mode 100644 frontend/antd/form/item/gradio.config.js create mode 100644 frontend/antd/form/item/package.json create mode 100644 frontend/antd/form/item/rule/Index.svelte create mode 100644 frontend/antd/form/item/rule/global.css create mode 100644 frontend/antd/form/item/rule/gradio.config.js create mode 100644 frontend/antd/form/item/rule/package.json create mode 100644 frontend/antd/form/package.json create mode 100644 frontend/antd/grid/col/Index.svelte create mode 100644 frontend/antd/grid/col/gradio.config.js create mode 100644 frontend/antd/grid/col/package.json create mode 100644 frontend/antd/grid/context.ts create mode 100644 frontend/antd/grid/row/Index.svelte create mode 100644 frontend/antd/grid/row/gradio.config.js create mode 100644 frontend/antd/grid/row/package.json create mode 100644 frontend/antd/grid/row/row.tsx create mode 100644 frontend/antd/icon/Index.svelte create mode 100644 frontend/antd/icon/gradio.config.js create mode 100644 frontend/antd/icon/icon.tsx create mode 100644 frontend/antd/icon/iconfont-provider/Index.svelte create mode 100644 frontend/antd/icon/iconfont-provider/context.ts create mode 100644 frontend/antd/icon/iconfont-provider/create-iconfont.ts create mode 100644 frontend/antd/icon/iconfont-provider/gradio.config.js create mode 100644 frontend/antd/icon/iconfont-provider/package.json create mode 100644 frontend/antd/icon/package.json create mode 100644 frontend/antd/image/Index.svelte create mode 100644 frontend/antd/image/gradio.config.js create mode 100644 frontend/antd/image/image.tsx create mode 100644 frontend/antd/image/package.json create mode 100644 frontend/antd/image/preview-group/Index.svelte create mode 100644 frontend/antd/image/preview-group/gradio.config.js create mode 100644 frontend/antd/image/preview-group/image.preview-group.tsx create mode 100644 frontend/antd/image/preview-group/package.json create mode 100644 frontend/antd/input-number/Index.svelte create mode 100644 frontend/antd/input-number/gradio.config.js create mode 100644 frontend/antd/input-number/input-number.tsx create mode 100644 frontend/antd/input-number/package.json create mode 100644 frontend/antd/input/Index.svelte create mode 100644 frontend/antd/input/gradio.config.js create mode 100644 frontend/antd/input/input.tsx create mode 100644 frontend/antd/input/otp/Index.svelte create mode 100644 frontend/antd/input/otp/gradio.config.js create mode 100644 frontend/antd/input/otp/input.otp.tsx create mode 100644 frontend/antd/input/otp/package.json create mode 100644 frontend/antd/input/package.json create mode 100644 frontend/antd/input/password/Index.svelte create mode 100644 frontend/antd/input/password/gradio.config.js create mode 100644 frontend/antd/input/password/input.password.tsx create mode 100644 frontend/antd/input/password/package.json create mode 100644 frontend/antd/input/search/Index.svelte create mode 100644 frontend/antd/input/search/gradio.config.js create mode 100644 frontend/antd/input/search/input.search.tsx create mode 100644 frontend/antd/input/search/package.json create mode 100644 frontend/antd/input/textarea/Index.svelte create mode 100644 frontend/antd/input/textarea/gradio.config.js create mode 100644 frontend/antd/input/textarea/input.textarea.tsx create mode 100644 frontend/antd/input/textarea/package.json create mode 100644 frontend/antd/layout/Base.svelte create mode 100644 frontend/antd/layout/Index.svelte create mode 100644 frontend/antd/layout/content/Index.svelte create mode 100644 frontend/antd/layout/content/gradio.config.js create mode 100644 frontend/antd/layout/content/package.json create mode 100644 frontend/antd/layout/footer/Index.svelte create mode 100644 frontend/antd/layout/footer/gradio.config.js create mode 100644 frontend/antd/layout/footer/package.json create mode 100644 frontend/antd/layout/gradio.config.js create mode 100644 frontend/antd/layout/header/Index.svelte create mode 100644 frontend/antd/layout/header/gradio.config.js create mode 100644 frontend/antd/layout/header/package.json create mode 100644 frontend/antd/layout/layout.base.tsx create mode 100644 frontend/antd/layout/package.json create mode 100644 frontend/antd/layout/sider/Index.svelte create mode 100644 frontend/antd/layout/sider/gradio.config.js create mode 100644 frontend/antd/layout/sider/layout.sider.tsx create mode 100644 frontend/antd/layout/sider/package.json create mode 100644 frontend/antd/list/Index.svelte create mode 100644 frontend/antd/list/gradio.config.js create mode 100644 frontend/antd/list/item/Index.svelte create mode 100644 frontend/antd/list/item/gradio.config.js create mode 100644 frontend/antd/list/item/list.item.tsx create mode 100644 frontend/antd/list/item/meta/Index.svelte create mode 100644 frontend/antd/list/item/meta/gradio.config.js create mode 100644 frontend/antd/list/item/meta/list.item.meta.tsx create mode 100644 frontend/antd/list/item/meta/package.json create mode 100644 frontend/antd/list/item/package.json create mode 100644 frontend/antd/list/list.tsx create mode 100644 frontend/antd/list/package.json create mode 100644 frontend/antd/mentions/Index.svelte create mode 100644 frontend/antd/mentions/context.ts create mode 100644 frontend/antd/mentions/gradio.config.js create mode 100644 frontend/antd/mentions/mentions.tsx create mode 100644 frontend/antd/mentions/option/Index.svelte create mode 100644 frontend/antd/mentions/option/gradio.config.js create mode 100644 frontend/antd/mentions/option/package.json create mode 100644 frontend/antd/mentions/package.json create mode 100644 frontend/antd/menu/Index.svelte create mode 100644 frontend/antd/menu/context.ts create mode 100644 frontend/antd/menu/gradio.config.js create mode 100644 frontend/antd/menu/item/Index.svelte create mode 100644 frontend/antd/menu/item/gradio.config.js create mode 100644 frontend/antd/menu/item/package.json create mode 100644 frontend/antd/menu/menu.less create mode 100644 frontend/antd/menu/menu.tsx create mode 100644 frontend/antd/menu/package.json create mode 100644 frontend/antd/message/Index.svelte create mode 100644 frontend/antd/message/gradio.config.js create mode 100644 frontend/antd/message/message.tsx create mode 100644 frontend/antd/message/package.json create mode 100644 frontend/antd/modal/Index.svelte create mode 100644 frontend/antd/modal/gradio.config.js create mode 100644 frontend/antd/modal/modal.tsx create mode 100644 frontend/antd/modal/package.json create mode 100644 frontend/antd/notification/Index.svelte create mode 100644 frontend/antd/notification/gradio.config.js create mode 100644 frontend/antd/notification/notification.tsx create mode 100644 frontend/antd/notification/package.json create mode 100644 frontend/antd/package.json create mode 100644 frontend/antd/pagination/Index.svelte create mode 100644 frontend/antd/pagination/gradio.config.js create mode 100644 frontend/antd/pagination/package.json create mode 100644 frontend/antd/pagination/pagination.tsx create mode 100644 frontend/antd/popconfirm/Index.svelte create mode 100644 frontend/antd/popconfirm/gradio.config.js create mode 100644 frontend/antd/popconfirm/package.json create mode 100644 frontend/antd/popconfirm/popconfirm.tsx create mode 100644 frontend/antd/popover/Index.svelte create mode 100644 frontend/antd/popover/gradio.config.js create mode 100644 frontend/antd/popover/package.json create mode 100644 frontend/antd/popover/popover.tsx create mode 100644 frontend/antd/progress/Index.svelte create mode 100644 frontend/antd/progress/gradio.config.js create mode 100644 frontend/antd/progress/package.json create mode 100644 frontend/antd/progress/progress.tsx create mode 100644 frontend/antd/qr-code/Index.svelte create mode 100644 frontend/antd/qr-code/gradio.config.js create mode 100644 frontend/antd/qr-code/package.json create mode 100644 frontend/antd/qr-code/qr-code.tsx create mode 100644 frontend/antd/radio/Index.svelte create mode 100644 frontend/antd/radio/button/Index.svelte create mode 100644 frontend/antd/radio/button/gradio.config.js create mode 100644 frontend/antd/radio/button/package.json create mode 100644 frontend/antd/radio/button/radio.button.tsx create mode 100644 frontend/antd/radio/context.ts create mode 100644 frontend/antd/radio/gradio.config.js create mode 100644 frontend/antd/radio/group/Index.svelte create mode 100644 frontend/antd/radio/group/gradio.config.js create mode 100644 frontend/antd/radio/group/option/Index.svelte create mode 100644 frontend/antd/radio/group/option/gradio.config.js create mode 100644 frontend/antd/radio/group/option/package.json create mode 100644 frontend/antd/radio/group/package.json create mode 100644 frontend/antd/radio/group/radio.group.less create mode 100644 frontend/antd/radio/group/radio.group.tsx create mode 100644 frontend/antd/radio/package.json create mode 100644 frontend/antd/radio/radio.tsx create mode 100644 frontend/antd/rate/Index.svelte create mode 100644 frontend/antd/rate/gradio.config.js create mode 100644 frontend/antd/rate/package.json create mode 100644 frontend/antd/rate/rate.tsx create mode 100644 frontend/antd/result/Index.svelte create mode 100644 frontend/antd/result/gradio.config.js create mode 100644 frontend/antd/result/package.json create mode 100644 frontend/antd/result/result.tsx create mode 100644 frontend/antd/segmented/Index.svelte create mode 100644 frontend/antd/segmented/context.ts create mode 100644 frontend/antd/segmented/gradio.config.js create mode 100644 frontend/antd/segmented/option/Index.svelte create mode 100644 frontend/antd/segmented/option/gradio.config.js create mode 100644 frontend/antd/segmented/option/package.json create mode 100644 frontend/antd/segmented/package.json create mode 100644 frontend/antd/segmented/segmented.tsx create mode 100644 frontend/antd/select/Index.svelte create mode 100644 frontend/antd/select/context.ts create mode 100644 frontend/antd/select/gradio.config.js create mode 100644 frontend/antd/select/option/Index.svelte create mode 100644 frontend/antd/select/option/gradio.config.js create mode 100644 frontend/antd/select/option/package.json create mode 100644 frontend/antd/select/package.json create mode 100644 frontend/antd/select/select.tsx create mode 100644 frontend/antd/skeleton/Index.svelte create mode 100644 frontend/antd/skeleton/avatar/Index.svelte create mode 100644 frontend/antd/skeleton/avatar/gradio.config.js create mode 100644 frontend/antd/skeleton/avatar/package.json create mode 100644 frontend/antd/skeleton/avatar/skeleton.avatar.tsx create mode 100644 frontend/antd/skeleton/button/Index.svelte create mode 100644 frontend/antd/skeleton/button/gradio.config.js create mode 100644 frontend/antd/skeleton/button/package.json create mode 100644 frontend/antd/skeleton/button/skeleton.button.tsx create mode 100644 frontend/antd/skeleton/gradio.config.js create mode 100644 frontend/antd/skeleton/image/Index.svelte create mode 100644 frontend/antd/skeleton/image/gradio.config.js create mode 100644 frontend/antd/skeleton/image/package.json create mode 100644 frontend/antd/skeleton/image/skeleton.image.tsx create mode 100644 frontend/antd/skeleton/input/Index.svelte create mode 100644 frontend/antd/skeleton/input/gradio.config.js create mode 100644 frontend/antd/skeleton/input/package.json create mode 100644 frontend/antd/skeleton/input/skeleton.input.tsx create mode 100644 frontend/antd/skeleton/node/Index.svelte create mode 100644 frontend/antd/skeleton/node/gradio.config.js create mode 100644 frontend/antd/skeleton/node/package.json create mode 100644 frontend/antd/skeleton/node/skeleton.node.tsx create mode 100644 frontend/antd/skeleton/package.json create mode 100644 frontend/antd/skeleton/skeleton.tsx create mode 100644 frontend/antd/slider/Index.svelte create mode 100644 frontend/antd/slider/context.ts create mode 100644 frontend/antd/slider/gradio.config.js create mode 100644 frontend/antd/slider/mark/Index.svelte create mode 100644 frontend/antd/slider/mark/gradio.config.js create mode 100644 frontend/antd/slider/mark/package.json create mode 100644 frontend/antd/slider/package.json create mode 100644 frontend/antd/slider/slider.tsx create mode 100644 frontend/antd/space/Index.svelte create mode 100644 frontend/antd/space/compact/Index.svelte create mode 100644 frontend/antd/space/compact/gradio.config.js create mode 100644 frontend/antd/space/compact/package.json create mode 100644 frontend/antd/space/compact/space.compact.tsx create mode 100644 frontend/antd/space/gradio.config.js create mode 100644 frontend/antd/space/package.json create mode 100644 frontend/antd/space/space.tsx create mode 100644 frontend/antd/spin/Index.svelte create mode 100644 frontend/antd/spin/gradio.config.js create mode 100644 frontend/antd/spin/package.json create mode 100644 frontend/antd/spin/spin.tsx create mode 100644 frontend/antd/splitter/Index.svelte create mode 100644 frontend/antd/splitter/context.ts create mode 100644 frontend/antd/splitter/gradio.config.js create mode 100644 frontend/antd/splitter/package.json create mode 100644 frontend/antd/splitter/panel/Index.svelte create mode 100644 frontend/antd/splitter/panel/gradio.config.js create mode 100644 frontend/antd/splitter/panel/package.json create mode 100644 frontend/antd/splitter/splitter.tsx create mode 100644 frontend/antd/statistic/Index.svelte create mode 100644 frontend/antd/statistic/countdown/Index.svelte create mode 100644 frontend/antd/statistic/countdown/gradio.config.js create mode 100644 frontend/antd/statistic/countdown/package.json create mode 100644 frontend/antd/statistic/countdown/statistic.countdown.tsx create mode 100644 frontend/antd/statistic/gradio.config.js create mode 100644 frontend/antd/statistic/package.json create mode 100644 frontend/antd/statistic/statistic.tsx create mode 100644 frontend/antd/steps/Index.svelte create mode 100644 frontend/antd/steps/context.ts create mode 100644 frontend/antd/steps/gradio.config.js create mode 100644 frontend/antd/steps/item/Index.svelte create mode 100644 frontend/antd/steps/item/gradio.config.js create mode 100644 frontend/antd/steps/item/package.json create mode 100644 frontend/antd/steps/package.json create mode 100644 frontend/antd/steps/steps.tsx create mode 100644 frontend/antd/switch/Index.svelte create mode 100644 frontend/antd/switch/gradio.config.js create mode 100644 frontend/antd/switch/package.json create mode 100644 frontend/antd/switch/switch.tsx create mode 100644 frontend/antd/table/Index.svelte create mode 100644 frontend/antd/table/column-group/Index.svelte create mode 100644 frontend/antd/table/column-group/gradio.config.js create mode 100644 frontend/antd/table/column-group/package.json create mode 100644 frontend/antd/table/column/Index.svelte create mode 100644 frontend/antd/table/column/gradio.config.js create mode 100644 frontend/antd/table/column/package.json create mode 100644 frontend/antd/table/context.ts create mode 100644 frontend/antd/table/expandable/Expandable.svelte create mode 100644 frontend/antd/table/expandable/Index.svelte create mode 100644 frontend/antd/table/expandable/gradio.config.js create mode 100644 frontend/antd/table/expandable/package.json create mode 100644 frontend/antd/table/gradio.config.js create mode 100644 frontend/antd/table/package.json create mode 100644 frontend/antd/table/row-selection/Index.svelte create mode 100644 frontend/antd/table/row-selection/RowSelection.svelte create mode 100644 frontend/antd/table/row-selection/gradio.config.js create mode 100644 frontend/antd/table/row-selection/package.json create mode 100644 frontend/antd/table/row-selection/selection/Index.svelte create mode 100644 frontend/antd/table/row-selection/selection/gradio.config.js create mode 100644 frontend/antd/table/row-selection/selection/package.json create mode 100644 frontend/antd/table/table.tsx create mode 100644 frontend/antd/tabs/Index.svelte create mode 100644 frontend/antd/tabs/context.ts create mode 100644 frontend/antd/tabs/gradio.config.js create mode 100644 frontend/antd/tabs/item/Index.svelte create mode 100644 frontend/antd/tabs/item/gradio.config.js create mode 100644 frontend/antd/tabs/item/package.json create mode 100644 frontend/antd/tabs/package.json create mode 100644 frontend/antd/tabs/tabs.tsx create mode 100644 frontend/antd/tag/Index.svelte create mode 100644 frontend/antd/tag/checkable-tag/Index.svelte create mode 100644 frontend/antd/tag/checkable-tag/gradio.config.js create mode 100644 frontend/antd/tag/checkable-tag/package.json create mode 100644 frontend/antd/tag/checkable-tag/tag.checkable-tag.tsx create mode 100644 frontend/antd/tag/gradio.config.js create mode 100644 frontend/antd/tag/package.json create mode 100644 frontend/antd/tag/tag.tsx create mode 100644 frontend/antd/time-picker/Index.svelte create mode 100644 frontend/antd/time-picker/gradio.config.js create mode 100644 frontend/antd/time-picker/package.json create mode 100644 frontend/antd/time-picker/range-picker/Index.svelte create mode 100644 frontend/antd/time-picker/range-picker/gradio.config.js create mode 100644 frontend/antd/time-picker/range-picker/package.json create mode 100644 frontend/antd/time-picker/range-picker/time-picker.range-picker.tsx create mode 100644 frontend/antd/time-picker/time-picker.tsx create mode 100644 frontend/antd/timeline/Index.svelte create mode 100644 frontend/antd/timeline/context.ts create mode 100644 frontend/antd/timeline/gradio.config.js create mode 100644 frontend/antd/timeline/item/Index.svelte create mode 100644 frontend/antd/timeline/item/gradio.config.js create mode 100644 frontend/antd/timeline/item/package.json create mode 100644 frontend/antd/timeline/package.json create mode 100644 frontend/antd/timeline/timeline.tsx create mode 100644 frontend/antd/tooltip/Index.svelte create mode 100644 frontend/antd/tooltip/gradio.config.js create mode 100644 frontend/antd/tooltip/package.json create mode 100644 frontend/antd/tooltip/tooltip.tsx create mode 100644 frontend/antd/tour/Index.svelte create mode 100644 frontend/antd/tour/context.ts create mode 100644 frontend/antd/tour/gradio.config.js create mode 100644 frontend/antd/tour/package.json create mode 100644 frontend/antd/tour/step/Index.svelte create mode 100644 frontend/antd/tour/step/gradio.config.js create mode 100644 frontend/antd/tour/step/package.json create mode 100644 frontend/antd/tour/tour.tsx create mode 100644 frontend/antd/transfer/Index.svelte create mode 100644 frontend/antd/transfer/gradio.config.js create mode 100644 frontend/antd/transfer/package.json create mode 100644 frontend/antd/transfer/transfer.tsx create mode 100644 frontend/antd/tree-select/Index.svelte create mode 100644 frontend/antd/tree-select/context.ts create mode 100644 frontend/antd/tree-select/gradio.config.js create mode 100644 frontend/antd/tree-select/package.json create mode 100644 frontend/antd/tree-select/tree-node/Index.svelte create mode 100644 frontend/antd/tree-select/tree-node/gradio.config.js create mode 100644 frontend/antd/tree-select/tree-node/package.json create mode 100644 frontend/antd/tree-select/tree-select.tsx create mode 100644 frontend/antd/tree/Index.svelte create mode 100644 frontend/antd/tree/context.ts create mode 100644 frontend/antd/tree/directory-tree/Index.svelte create mode 100644 frontend/antd/tree/directory-tree/gradio.config.js create mode 100644 frontend/antd/tree/directory-tree/package.json create mode 100644 frontend/antd/tree/gradio.config.js create mode 100644 frontend/antd/tree/package.json create mode 100644 frontend/antd/tree/tree-node/Index.svelte create mode 100644 frontend/antd/tree/tree-node/gradio.config.js create mode 100644 frontend/antd/tree/tree-node/package.json create mode 100644 frontend/antd/tree/tree.tsx create mode 100644 frontend/antd/typography/Base.svelte create mode 100644 frontend/antd/typography/link/Index.svelte create mode 100644 frontend/antd/typography/link/gradio.config.js create mode 100644 frontend/antd/typography/link/package.json create mode 100644 frontend/antd/typography/paragraph/Index.svelte create mode 100644 frontend/antd/typography/paragraph/gradio.config.js create mode 100644 frontend/antd/typography/paragraph/package.json create mode 100644 frontend/antd/typography/text/Index.svelte create mode 100644 frontend/antd/typography/text/gradio.config.js create mode 100644 frontend/antd/typography/text/package.json create mode 100644 frontend/antd/typography/title/Index.svelte create mode 100644 frontend/antd/typography/title/gradio.config.js create mode 100644 frontend/antd/typography/title/package.json create mode 100644 frontend/antd/typography/typography.base.tsx create mode 100644 frontend/antd/upload/Index.svelte create mode 100644 frontend/antd/upload/dragger/Index.svelte create mode 100644 frontend/antd/upload/dragger/gradio.config.js create mode 100644 frontend/antd/upload/dragger/package.json create mode 100644 frontend/antd/upload/dragger/upload.dragger.tsx create mode 100644 frontend/antd/upload/gradio.config.js create mode 100644 frontend/antd/upload/package.json create mode 100644 frontend/antd/upload/upload.tsx create mode 100644 frontend/antd/watermark/Index.svelte create mode 100644 frontend/antd/watermark/gradio.config.js create mode 100644 frontend/antd/watermark/package.json create mode 100644 frontend/antd/watermark/watermark.tsx create mode 100644 frontend/base/CHANGELOG.md create mode 100644 frontend/base/application/Application.svelte create mode 100644 frontend/base/application/Index.svelte create mode 100644 frontend/base/application/gradio.config.js create mode 100644 frontend/base/application/package.json create mode 100644 frontend/base/div/Index.svelte create mode 100644 frontend/base/div/gradio.config.js create mode 100644 frontend/base/div/package.json create mode 100644 frontend/base/each/Each.svelte create mode 100644 frontend/base/each/Index.svelte create mode 100644 frontend/base/each/gradio.config.js create mode 100644 frontend/base/each/package.json create mode 100644 frontend/base/filter/Index.svelte create mode 100644 frontend/base/filter/gradio.config.js create mode 100644 frontend/base/filter/package.json create mode 100644 frontend/base/fragment/Index.svelte create mode 100644 frontend/base/fragment/ShowFragment.svelte create mode 100644 frontend/base/fragment/fragment.tsx create mode 100644 frontend/base/fragment/gradio.config.js create mode 100644 frontend/base/fragment/package.json create mode 100644 frontend/base/package.json create mode 100644 frontend/base/slot/Index.svelte create mode 100644 frontend/base/slot/gradio.config.js create mode 100644 frontend/base/slot/package.json create mode 100644 frontend/base/span/Index.svelte create mode 100644 frontend/base/span/gradio.config.js create mode 100644 frontend/base/span/package.json create mode 100644 frontend/base/text/Index.svelte create mode 100644 frontend/base/text/global.css create mode 100644 frontend/base/text/gradio.config.js create mode 100644 frontend/base/text/package.json delete mode 100644 frontend/compiled/package.json delete mode 100644 frontend/compiled/tsconfig.build.json delete mode 100644 frontend/compiled/tsconfig.json delete mode 100644 frontend/compiled/tsconfig.node.json delete mode 100644 frontend/compiled/vite.config.ts create mode 100644 frontend/defineConfig.js create mode 100644 frontend/fixtures.d.ts rename frontend/{Chatbot/Index.svelte => legacy/Chatbot/Awaited.svelte} (98%) rename frontend/{Markdown => legacy/Chatbot}/CHANGELOG.md (66%) create mode 100644 frontend/legacy/Chatbot/Index.svelte create mode 100644 frontend/legacy/Chatbot/gradio.config.js create mode 100644 frontend/legacy/Chatbot/package.json rename frontend/{ => legacy}/Chatbot/shared/ChatBot.svelte (99%) rename frontend/{ => legacy}/Chatbot/shared/Copy.svelte (97%) rename frontend/{ => legacy}/Chatbot/shared/FlushingMarkdown.svelte (98%) rename frontend/{ => legacy}/Chatbot/shared/LikeDislike.svelte (100%) rename frontend/{ => legacy}/Chatbot/shared/Pending.svelte (100%) rename frontend/{ => legacy}/Chatbot/shared/llm-thinking-presets.ts (100%) rename frontend/{ => legacy}/Chatbot/shared/utils.ts (100%) rename frontend/{Flow/Index.svelte => legacy/Flow/Awaited.svelte} (96%) rename frontend/{ => legacy}/Flow/CHANGELOG.md (68%) create mode 100644 frontend/legacy/Flow/Index.svelte create mode 100644 frontend/legacy/Flow/gradio.config.js create mode 100644 frontend/legacy/Flow/package.json rename frontend/{ => legacy}/Flow/schema.json (100%) create mode 100644 frontend/legacy/Flow/schema.ts rename frontend/{ => legacy}/Flow/shared/Flow.svelte (96%) rename frontend/{ => legacy}/Flow/shared/utils.ts (63%) create mode 100644 frontend/legacy/Lifecycle/CHANGELOG.md create mode 100644 frontend/legacy/Lifecycle/gradio.config.js rename frontend/{ => legacy}/Lifecycle/index.svelte (100%) create mode 100644 frontend/legacy/Lifecycle/package.json rename frontend/{ => legacy}/Lifecycle/shared/utils.ts (100%) rename frontend/{Markdown/Index.svelte => legacy/Markdown/Awaited.svelte} (94%) rename frontend/{Chatbot => legacy/Markdown}/CHANGELOG.md (66%) rename frontend/{ => legacy}/Markdown/Example.svelte (89%) create mode 100644 frontend/legacy/Markdown/Index.svelte create mode 100644 frontend/legacy/Markdown/gradio.config.js create mode 100644 frontend/legacy/Markdown/package.json rename frontend/{ => legacy}/Markdown/shared/Markdown.svelte (97%) rename frontend/{MultimodalInput/Index.svelte => legacy/MultimodalInput/Awaited.svelte} (98%) rename frontend/{ => legacy}/MultimodalInput/CHANGELOG.md (67%) rename frontend/{ => legacy}/MultimodalInput/Example.svelte (100%) create mode 100644 frontend/legacy/MultimodalInput/Index.svelte create mode 100644 frontend/legacy/MultimodalInput/gradio.config.js create mode 100644 frontend/legacy/MultimodalInput/package.json rename frontend/{ => legacy}/MultimodalInput/shared/AudioRecorder.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/FilePreview.svelte (98%) rename frontend/{ => legacy}/MultimodalInput/shared/Input.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/Loader.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/RemoveIcon.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/SubmitButton.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/UploadButton.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/UploadIcon.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/Webcam.svelte (100%) rename frontend/{ => legacy}/MultimodalInput/shared/context.ts (100%) rename frontend/{ => legacy}/MultimodalInput/shared/global.d.ts (100%) rename frontend/{ => legacy}/MultimodalInput/shared/utils.ts (100%) create mode 100644 frontend/legacy/WaterfallGallery/CHANGELOG.md rename frontend/{ => legacy}/WaterfallGallery/Index.svelte (100%) create mode 100644 frontend/legacy/WaterfallGallery/gradio.config.js create mode 100644 frontend/legacy/WaterfallGallery/package.json rename frontend/{ => legacy}/WaterfallGallery/shared/Dislike.svelte (100%) rename frontend/{ => legacy}/WaterfallGallery/shared/Gallery.svelte (99%) rename frontend/{ => legacy}/WaterfallGallery/shared/Image.svelte (100%) rename frontend/{ => legacy}/WaterfallGallery/shared/Waterfall/createWaterfall.ts (100%) rename frontend/{ => legacy}/WaterfallGallery/shared/Waterfall/index.ts (100%) rename frontend/{ => legacy}/WaterfallGallery/shared/Waterfall/layout.ts (100%) rename frontend/{ => legacy}/WaterfallGallery/shared/utils.ts (100%) rename frontend/{ => legacy}/compiled/CHANGELOG.md (61%) rename frontend/{ => legacy}/compiled/components/FileView/index.svelte (100%) rename frontend/{ => legacy}/compiled/components/FileView/shared/FileView.svelte (83%) rename frontend/{ => legacy}/compiled/components/Flow/index.svelte (86%) rename frontend/{ => legacy}/compiled/components/Markdown/index.svelte (86%) rename frontend/{ => legacy}/compiled/components/ReactComponent.svelte (95%) rename frontend/{ => legacy}/compiled/global.d.ts (100%) rename frontend/{ => legacy}/compiled/index.ts (87%) create mode 100644 frontend/legacy/compiled/package.json rename frontend/{ => legacy}/compiled/src/ComponentConfigProvider.tsx (100%) rename frontend/{ => legacy}/compiled/src/FileView/Pdf.tsx (100%) rename frontend/{ => legacy}/compiled/src/FileView/hooks/usePreview.ts (100%) rename frontend/{ => legacy}/compiled/src/FileView/index.less (100%) rename frontend/{ => legacy}/compiled/src/FileView/index.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/FlowContext.ts (100%) rename frontend/{ => legacy}/compiled/src/Flow/components/CustomComponent.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/components/FileUpload.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/components/FormListItemWrapper.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/ConnectionHandle.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/ConnectionLine.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/Controls.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/Edge.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/Node.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/flow-components/Sidebar.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/i18n.ts (100%) rename frontend/{ => legacy}/compiled/src/Flow/index.less (100%) rename frontend/{ => legacy}/compiled/src/Flow/index.tsx (100%) rename frontend/{ => legacy}/compiled/src/Flow/type.ts (100%) rename frontend/{ => legacy}/compiled/src/Flow/utils.ts (99%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Anchor.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Audio.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Code.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/CustomComponent.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Heading.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Image.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/Video.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/custom/Accordion.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/custom/Chart.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/custom/File.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/custom/FlushingEnd.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/components/custom/SelectBox.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/context.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/hooks/useCustomProps.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/index.less (100%) rename frontend/{ => legacy}/compiled/src/Markdown/index.tsx (100%) rename frontend/{ => legacy}/compiled/src/Markdown/math.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/react-markdown.d.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/rehype-plugins/rehype-Inline-code-property.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/rehype-plugins/rehype-sanitize/index.d.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/rehype-plugins/rehype-sanitize/index.js (100%) rename frontend/{ => legacy}/compiled/src/Markdown/rehype-plugins/rehype-sanitize/schema.js (100%) rename frontend/{ => legacy}/compiled/src/Markdown/remark-plugins/remark-directive-rehype.ts (100%) rename frontend/{ => legacy}/compiled/src/Markdown/type.ts (100%) rename frontend/{ => legacy}/compiled/src/defineComponent.tsx (100%) rename frontend/{ => legacy}/compiled/src/index.ts (100%) rename frontend/{ => legacy}/compiled/src/mount.tsx (100%) rename frontend/{ => legacy}/compiled/src/polyfills.ts (100%) rename frontend/{ => legacy}/compiled/src/shared/hooks/useCustomComponent.ts (100%) rename frontend/{ => legacy}/compiled/src/shared/hooks/useMemoizedEqualValue.ts (100%) rename frontend/{ => legacy}/compiled/src/shared/hooks/useRefValue.ts (100%) rename frontend/{ => legacy}/compiled/src/shared/index.ts (100%) rename frontend/{ => legacy}/compiled/src/shared/type.ts (100%) rename frontend/{ => legacy}/compiled/src/utils.ts (98%) create mode 100644 frontend/plugin.js delete mode 100644 frontend/shared/CHANGELOG.md delete mode 100644 frontend/shared/package.json create mode 100644 frontend/svelte-preprocess-react/component.ts create mode 100644 frontend/svelte-preprocess-react/context.ts create mode 100644 frontend/svelte-preprocess-react/events-polyfills.ts create mode 100644 frontend/svelte-preprocess-react/index.ts create mode 100644 frontend/svelte-preprocess-react/inject.ts create mode 100644 frontend/svelte-preprocess-react/internal/Bridge.ts create mode 100644 frontend/svelte-preprocess-react/internal/Child.ts create mode 100644 frontend/svelte-preprocess-react/internal/ReactWrapper.svelte create mode 100644 frontend/svelte-preprocess-react/internal/types.ts create mode 100644 frontend/svelte-preprocess-react/polyfills.ts create mode 100644 frontend/svelte-preprocess-react/react-slot.tsx create mode 100644 frontend/svelte-preprocess-react/slot.ts create mode 100644 frontend/svelte-preprocess-react/sveltify.ts create mode 100644 frontend/svelte-preprocess-react/useStore.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/utils/createFunction.ts create mode 100644 frontend/utils/createItemsContext.tsx create mode 100644 frontend/utils/hooks/useFunction.ts create mode 100644 frontend/utils/hooks/useSlotsChildren.ts create mode 100644 frontend/utils/hooks/useTargets.ts create mode 100644 frontend/utils/hooks/useValueChange.ts create mode 100644 frontend/utils/omitUndefinedProps.ts create mode 100644 frontend/utils/renderItems.tsx create mode 100644 frontend/utils/renderParamsSlot.tsx create mode 100644 frontend/utils/renderSlot.tsx create mode 100644 frontend/utils/styleObject2String.ts rename frontend/{shared/src/index.ts => utils/upload.ts} (100%) diff --git a/.changeset/five-actors-compete.md b/.changeset/five-actors-compete.md new file mode 100644 index 00000000..b3735316 --- /dev/null +++ b/.changeset/five-actors-compete.md @@ -0,0 +1,17 @@ +--- +'@modelscope-studio/legacy-waterfall-gallery': patch +'@modelscope-studio/legacy-multimodal-input': patch +'@modelscope-studio/legacy-lifecycle': patch +'@modelscope-studio/legacy-markdown': patch +'@modelscope-studio/legacy-compiled': patch +'@modelscope-studio/legacy-chatbot': patch +'@modelscope-studio/legacy-flow': patch +'@modelscope-studio/lint-config': patch +'@modelscope-studio/changelog': patch +'@modelscope-studio/antd': patch +'@modelscope-studio/base': patch +'@modelscope-studio/frontend': patch +'modelscope_studio': patch +--- + +feat: complete components params in Python diff --git a/.changeset/fuzzy-goats-retire.md b/.changeset/fuzzy-goats-retire.md new file mode 100644 index 00000000..db0d20b5 --- /dev/null +++ b/.changeset/fuzzy-goats-retire.md @@ -0,0 +1,17 @@ +--- +'@modelscope-studio/legacy-waterfall-gallery': patch +'@modelscope-studio/legacy-multimodal-input': patch +'@modelscope-studio/legacy-lifecycle': patch +'@modelscope-studio/legacy-markdown': patch +'@modelscope-studio/legacy-compiled': patch +'@modelscope-studio/legacy-chatbot': patch +'@modelscope-studio/legacy-flow': patch +'@modelscope-studio/lint-config': patch +'@modelscope-studio/changelog': patch +'@modelscope-studio/antd': patch +'@modelscope-studio/base': patch +'@modelscope-studio/frontend': patch +'modelscope_studio': patch +--- + +feat: add new features diff --git a/.changeset/lemon-laws-cross.md b/.changeset/lemon-laws-cross.md new file mode 100644 index 00000000..c0acb047 --- /dev/null +++ b/.changeset/lemon-laws-cross.md @@ -0,0 +1,17 @@ +--- +'@modelscope-studio/legacy-waterfall-gallery': patch +'@modelscope-studio/legacy-multimodal-input': patch +'@modelscope-studio/legacy-lifecycle': patch +'@modelscope-studio/legacy-markdown': patch +'@modelscope-studio/legacy-compiled': patch +'@modelscope-studio/legacy-chatbot': patch +'@modelscope-studio/legacy-flow': patch +'@modelscope-studio/lint-config': patch +'@modelscope-studio/changelog': patch +'@modelscope-studio/antd': patch +'@modelscope-studio/base': patch +'@modelscope-studio/frontend': patch +'modelscope_studio': patch +--- + +feat: migrate to gradio 5 diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 00000000..7e81b4cd --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,25 @@ +{ + "mode": "pre", + "tag": "beta", + "initialVersions": { + "modelscope_studio": "0.4.2", + "@modelscope-studio/changelog": "0.4.2", + "@modelscope-studio/lint-config": "0.4.2", + "@modelscope-studio/frontend": "0.4.2", + "@modelscope-studio/antd": "0.0.0", + "@modelscope-studio/base": "0.0.0", + "@modelscope-studio/legacy-chatbot": "0.4.2", + "@modelscope-studio/legacy-flow": "0.4.2", + "@modelscope-studio/legacy-lifecycle": "0.4.2", + "@modelscope-studio/legacy-markdown": "0.4.2", + "@modelscope-studio/legacy-multimodal-input": "0.4.2", + "@modelscope-studio/legacy-waterfall-gallery": "0.4.2", + "@modelscope-studio/legacy-compiled": "0.4.2" + }, + "changesets": [ + "five-actors-compete", + "fuzzy-goats-retire", + "lemon-laws-cross", + "tough-walls-grab" + ] +} diff --git a/.changeset/tough-walls-grab.md b/.changeset/tough-walls-grab.md new file mode 100644 index 00000000..24863ec9 --- /dev/null +++ b/.changeset/tough-walls-grab.md @@ -0,0 +1,17 @@ +--- +'@modelscope-studio/legacy-waterfall-gallery': major +'@modelscope-studio/legacy-multimodal-input': major +'@modelscope-studio/legacy-lifecycle': major +'@modelscope-studio/legacy-markdown': major +'@modelscope-studio/legacy-compiled': major +'@modelscope-studio/legacy-chatbot': major +'@modelscope-studio/legacy-flow': major +'@modelscope-studio/lint-config': major +'@modelscope-studio/changelog': major +'@modelscope-studio/antd': major +'@modelscope-studio/base': major +'@modelscope-studio/frontend': major +'modelscope_studio': major +--- + +feat: integrate ant design diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 48301c97..558b283e 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -29,7 +29,5 @@ jobs: run: npm i pnpm@latest -g - name: Install Node Dependencies run: pnpm install - - name: Build Dependencies - run: pnpm run build:compiled - name: Run Lint run: pnpm run lint diff --git a/.husky/commit-msg b/.husky/commit-msg index 9b58085f..0c61d206 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx commitlint -e $HUSKY_GIT_PARAMS +pnpm exec commitlint -e $HUSKY_GIT_PARAMS diff --git a/.husky/pre-commit b/.husky/pre-commit index 36af2198..5ee7abd8 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx lint-staged +pnpm exec lint-staged diff --git a/.lintstagedrc b/.lintstagedrc index cfaf6972..e1370fbc 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,6 +1,6 @@ { "*.{less,css}": ["pnpm run lint:style", "pnpm run format"], - "*.{js,jsx,ts,tsx}": ["pnpm run lint:js", "pnpm run format"], + "*.{js,jsx,ts,tsx,svelte}": ["pnpm run lint:js", "pnpm run format"], "*.{md,yaml,yml,json,html}": ["pnpm run format"], "*.py": ["pnpm run lint:py"] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 5572ad99..1da8ac51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # modelscope_studio +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! + ## 0.5.2 ### Fixes diff --git a/README-zh_CN.md b/README-zh_CN.md index 50f7847c..2e09d7ff 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -1,4 +1,6 @@ -

ModelScope Studio

+> 当前文档版本为 `1.0 beta`,如果您正在使用以前的`modelscope_studio`版本,请跳转至 [legacy](https://github.com/modelscope/modelscope-studio/tree/legacy) 分支查看。 + +# ModelScope Studio

@@ -9,66 +11,67 @@

-GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space +GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space
中文  |  English  |  日本語

-`modelscope_studio` 是一套基于 gradio 4.x 的扩展组件库,致力于服务于 ModelScope 创空间中对于 gradio 应用的各类扩展需求,目前主要聚集在对话场景增强、多模态场景以及一些其他垂直场景支持。 +`modelscope_studio`是一个基于 Gradio 的三方组件库,在原有 Gradio 组件的基础上延伸了更多的组件和使用形式。 + +目前支持的 UI 库: + +- [Ant Design](https://ant.design/) + +## 何时使用 + +比起 Gradio 自身的组件,`modelscope_studio`更加注重页面布局和组件的灵活性,如果您想要构建更漂亮的用户界面,我们非常推荐您使用`modelscope_studio`。然而,当您的应用需要 Gradio 在 Python 端更多地处理内置数据时,`modelscope_studio`可能不是最好的选择,但仍然可以使用`modelscope_studio`的布局和展示组件来帮助您构建页面。 + +## 依赖 + +- Gradio >= 4.0 ## 安装 ```sh -pip install modelscope_studio +pip install modelscope_studio~=1.0.0b ``` ## 快速开始 ```python -import time import gradio as gr -import modelscope_studio as mgr - -def submit(_input, _chatbot): - print('text:', _input.text) - print('files: ', _input.files) - _chatbot.append([_input, None]) - yield _chatbot - time.sleep(1) - _chatbot[-1][1] = [{ - "flushing": False, - "text": 'bot1: ' + _input.text + '!' - }, { - "text": 'bot2: ' + _input.text + '!' - }] - yield { - chatbot: _chatbot, - } -with gr.Blocks() as demo: - chatbot = mgr.Chatbot(height=400) +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms - input = mgr.MultimodalInput() - input.submit(fn=submit, inputs=[input, chatbot], outputs=[chatbot]) +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.DatePicker() demo.queue().launch() ``` -![quickstart](./resources/quickstart.png) +## 文档与示例 -## 组件文档 +- ModelScope: [中文](https://modelscope.cn/studios/modelscope/modelscope-studio-beta) +- Hugging Face: [English](<(https://huggingface.co/spaces/modelscope/modelscope-studio-beta)>) -目前已支持的组件包括: +## 迁移到 1.0 -- Chatbot: gradio Chatbot 扩展组件,支持输出多模态内容、支持多 bot 场景、支持对话内容内的自定义渲染组件及事件交互。 -- MultimodalInput: 多模态输入框,支持上传文件、录音、照相等功能。 -- Markdown: gradio Markdown 扩展组件,支持输出多模态内容(音频、视频、语音、文件、文本)。 -- Lifecycle: 生命周期组件,用于获取当前用户的环境信息。 -- WaterfallGallery: gradio Gallery 扩展组件,支持瀑布流的图像展示。 -- Flow: 基于 [reactflow](https://reactflow.dev/) 的 Flow 组件,支持通过 schema 定制节点渲染。 -- 更多组件... +如果您在之前使用了`modelscope_studio`的组件,并且想要在新版本中继续使用。不需要对原有组件做任何修改,只需要在外层引入`ms.Application`即可。 -详细使用参见 [文档与示例](https://modelscope.cn/studios/modelscope/modelscope-studio/summary) +```python +import gradio as gr +import modelscope_studio.components.base as ms +import modelscope_studio.components.legacy as mgr + +with gr.Blocks() as demo: + with ms.Application(): + mgr.Chatbot() + +demo.launch() +``` ## 开发 @@ -86,14 +89,8 @@ pnpm install pnpm build ``` -运行 Demo! - -```sh -gradio docs/app.py -``` - -或者像下面这样运行单个 Demo: +运行 `gradio cc dev` 启动 demo: ```sh -gradio docs/components/Chatbot/demos/basic.py +gradio cc dev docs/app.py ``` diff --git a/README.md b/README.md index 737cd15c..d53a59b8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -

ModelScope Studio

+> The current document version is `1.0 beta`. If you are using a previous version of `modelscope_studio`, please switch to the [legacy](https://github.com/modelscope/modelscope-studio/tree/legacy) branch for reference. + +# ModelScope Studio

@@ -9,66 +11,69 @@

-GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space +GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space
- 中文  |  English  |  日本語 + 中文  |  English  |  日本語

-`modelscope_studio` is a set of extension component libraries based on gradio 4.x, dedicated to serving the various extension needs of gradio applications within the ModelScope Studio. It mainly focuses on enhancing conversational scenarios, supporting multimodal contexts, and providing assistance for various other specialized scenarios. +`modelscope_studio` is a third-party component library based on Gradio, extending more components and usage forms on top of the original Gradio components. + +Currently supported UI libraries: + +- [Ant Design](https://ant.design/) + +## When to Use + +Compared to Gradio's own components, `modelscope_studio` focuses more on page layout and component flexibility. If you want to build a more beautiful user interface, we highly recommend using `modelscope_studio`. However, when your application needs Gradio to handle more built-in data on the Python side, `modelscope_studio` may not be the best choice, but you can still use `modelscope_studio`'s layout and display components to help you build pages. -## Install +## Dependencies + +- Gradio >= 4.0 + +## Installation + +> Currently, `modelscope_studio` version 1.0 is still under development. You can use the `beta` version in advance. ```sh -pip install modelscope_studio +pip install modelscope_studio~=1.0.0b ``` -## Quickstart +## Quick Start ```python -import time import gradio as gr -import modelscope_studio as mgr - -def submit(_input, _chatbot): - print('text:', _input.text) - print('files: ', _input.files) - _chatbot.append([_input, None]) - yield _chatbot - time.sleep(1) - _chatbot[-1][1] = [{ - "flushing": False, - "text": 'bot1: ' + _input.text + '!' - }, { - "text": 'bot2: ' + _input.text + '!' - }] - yield { - chatbot: _chatbot, - } -with gr.Blocks() as demo: - chatbot = mgr.Chatbot(height=400) +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms - input = mgr.MultimodalInput() - input.submit(fn=submit, inputs=[input, chatbot], outputs=[chatbot]) +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.DatePicker() demo.queue().launch() ``` -![quickstart](./resources/quickstart.png) +## Documentation and Examples -## Component Docs +- ModelScope: [中文](https://modelscope.cn/studios/modelscope/modelscope-studio-beta) +- Hugging Face: [English](<(https://huggingface.co/spaces/modelscope/modelscope-studio-beta)>) -The currently supported components include: +## Migration to 1.0 -- Chatbot: Gradio Chatbot extension component, supports multi-modal content output, multi-bot scenarios, and custom rendering components and event interactions within the conversation content. -- MultimodalInput: A multi-modal input box, supporting functions such as file upload, recording, and photography. -- Markdown: Gradio Markdown extension component, supports the output of multi-modal content (audio, video, voice, files, text). -- Lifecycle: A Lifecycle component for getting the current user's environment information. -- WaterfallGallery: Gradio Gallery extension component, supports waterfall-style image display. -- Flow: A Flow component implemented based on [reactflow](https://reactflow.dev/), supports customization of node rendering through a schema. -- More components... +If you have previously used `modelscope_studio` components and want to continue using them in the new version, no modifications to the original components are needed. You just need to introduce `ms.Application` in the outer layer. -For detailed usage, see [Documentation and Examples](https://modelscope.cn/studios/modelscope/modelscope-studio/summary) +```python +import gradio as gr +import modelscope_studio.components.base as ms +import modelscope_studio.components.legacy as mgr + +with gr.Blocks() as demo: + with ms.Application(): + mgr.Chatbot() + +demo.launch() +``` ## Development @@ -86,14 +91,8 @@ pnpm install pnpm build ``` -Run demo! - -```sh -gradio docs/app.py -``` - -or run a single demo like this: +Run `gradio cc dev` to start demo: ```sh -gradio docs/components/Chatbot/demos/basic.py +gradio cc dev docs/app.py ``` diff --git a/backend/modelscope_studio/__init__.py b/backend/modelscope_studio/__init__.py index a86d5328..72fa8f2c 100644 --- a/backend/modelscope_studio/__init__.py +++ b/backend/modelscope_studio/__init__.py @@ -1,8 +1,5 @@ -from .components import ModelScopeChatbot as Chatbot -from .components import ModelScopeFlow as Flow -from .components import ModelScopeLifecycle as Lifecycle -from .components import ModelScopeMarkdown as Markdown -from .components import ModelScopeMultimodalInput as MultimodalInput -from .components import ModelScopeWaterfallGallery as WaterfallGallery +from .components.antd.components import * +from .components.base import * +from .components.legacy import * from .external import load from .version import __version__ diff --git a/backend/modelscope_studio/components/__init__.py b/backend/modelscope_studio/components/__init__.py deleted file mode 100644 index 190ba297..00000000 --- a/backend/modelscope_studio/components/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .Chatbot import ModelScopeChatbot -from .Flow import ModelScopeFlow -from .Lifecycle import ModelScopeLifecycle -from .Markdown import ModelScopeMarkdown -from .MultimodalInput import ModelScopeMultimodalInput -from .WaterfallGallery import ModelScopeWaterfallGallery diff --git a/backend/modelscope_studio/components/antd/__init__.py b/backend/modelscope_studio/components/antd/__init__.py new file mode 100644 index 00000000..d1e17f65 --- /dev/null +++ b/backend/modelscope_studio/components/antd/__init__.py @@ -0,0 +1,145 @@ +from .affix import AntdAffix as Affix +from .alert import AntdAlert as Alert +from .alert.error_boundary import AntdAlertErrorBoundary as AlertErrorBoundary +from .anchor import AntdAnchor as Anchor +from .anchor.item import AntdAnchorItem as AnchorItem +from .auto_complete import AntdAutoComplete as AutoComplete +from .auto_complete.option import AntdAutoCompleteOption as AutoCompleteOption +from .avatar import AntdAvatar as Avatar +from .avatar.group import AntdAvatarGroup as AvatarGroup +from .badge import AntdBadge as Badge +from .badge.ribbon import AntdBadgeRibbon as BadgeRibbon +from .breadcrumb import AntdBreadcrumb as Breadcrumb +from .breadcrumb.item import AntdBreadcrumbItem as BreadcrumbItem +from .button import AntdButton as Button +from .button.group import AntdButtonGroup as ButtonGroup +from .calendar import AntdCalendar as Calendar +from .card import AntdCard as Card +from .card.grid import AntdCardGrid as CardGrid +from .card.meta import AntdCardMeta as CardMeta +from .carousel import AntdCarousel as Carousel +from .cascader import AntdCascader as Cascader +from .cascader.option import AntdCascaderOption as CascaderOption +from .cascader.panel import AntdCascaderPanel as CascaderPanel +from .checkbox import AntdCheckbox as Checkbox +from .checkbox.group import AntdCheckboxGroup as CheckboxGroup +from .checkbox.group.option import \ + AntdCheckboxGroupOption as CheckboxGroupOption +from .collapse import AntdCollapse as Collapse +from .collapse.item import AntdCollapseItem as CollapseItem +from .color_picker import AntdColorPicker as ColorPicker +from .color_picker.preset import AntdColorPickerPreset as ColorPickerPreset +from .config_provider import AntdConfigProvider as ConfigProvider +from .date_picker import AntdDatePicker as DatePicker +from .date_picker.preset import AntdDatePickerPreset as DatePickerPreset +from .date_picker.range_picker import \ + AntdDatePickerRangePicker as DatePickerRangePicker +from .descriptions import AntdDescriptions as Descriptions +from .descriptions.item import AntdDescriptionsItem as DescriptionsItem +from .divider import AntdDivider as Divider +from .drawer import AntdDrawer as Drawer +from .dropdown import AntdDropdown as Dropdown +from .dropdown.button import AntdDropdownButton as DropdownButton +from .empty import AntdEmpty as Empty +from .flex import AntdFlex as Flex +from .float_button import AntdFloatButton as FloatButton +from .float_button.back_top import AntdFloatButtonBackTop as FloatButtonBackTop +from .float_button.group import AntdFloatButtonGroup as FloatButtonGroup +from .form import AntdForm as Form +from .form.item import AntdFormItem as FormItem +from .form.item.rule import AntdFormItemRule as FormItemRule +from .grid.col import AntdCol as Col +from .grid.row import AntdRow as Row +from .icon import AntdIcon as Icon +from .icon.iconfont_provider import \ + AntdIconIconfontProvider as IconIconfontProvider +from .image import AntdImage as Image +from .image.preview_group import AntdImagePreviewGroup as ImagePreviewGroup +from .input import AntdInput as Input +from .input.otp import AntdInputOTP as InputOTP +from .input.password import AntdInputPassword as InputPassword +from .input.search import AntdInputSearch as InputSearch +from .input.textarea import AntdInputTextarea as InputTextarea +from .input_number import AntdInputNumber as InputNumber +from .layout import AntdLayout as Layout +from .layout.content import AntdLayoutContent as LayoutContent +from .layout.footer import AntdLayoutFooter as LayoutFooter +from .layout.header import AntdLayoutHeader as LayoutHeader +from .layout.sider import AntdLayoutSider as LayoutSider +from .list import AntdList as List +from .list.item import AntdListItem as ListItem +from .list.item.meta import AntdListItemMeta as ListItemMeta +from .mentions import AntdMentions as Mentions +from .mentions.option import AntdMentionsOption as MentionsOption +from .menu import AntdMenu as Menu +from .menu.item import AntdMenuItem as MenuItem +from .message import AntdMessage as Message +from .modal import AntdModal as Modal +from .notification import AntdNotification as Notification +from .pagination import AntdPagination as Pagination +from .popconfirm import AntdPopconfirm as Popconfirm +from .popover import AntdPopover as Popover +from .progress import AntdProgress as Progress +from .qr_code import AntdQRCode as QRCode +from .radio import AntdRadio as Radio +from .radio.button import AntdRadioButton as RadioButton +from .radio.group import AntdRadioGroup as RadioGroup +from .radio.group.option import AntdRadioGroupOption as RadioGroupOption +from .rate import AntdRate as Rate +from .result import AntdResult as Result +from .segmented import AntdSegmented as Segmented +from .segmented.option import AntdSegmentedOption as SegmentedOptions +from .select import AntdSelect as Select +from .select.option import AntdSelectOption as SelectOption +from .skeleton import AntdSkeleton as Skeleton +from .skeleton.avatar import AntdSkeletonAvatar as SkeletonAvatar +from .skeleton.button import AntdSkeletonButton as SkeletonButton +from .skeleton.image import AntdSkeletonImage as SkeletonImage +from .skeleton.input import AntdSkeletonInput as SkeletonInput +from .skeleton.node import AntdSkeletonNode as SkeletonNode +from .slider import AntdSlider as Slider +from .slider.mark import AntdSliderMark as SliderMark +from .space import AntdSpace as Space +from .space.compact import AntdSpaceCompact as SpaceCompact +from .spin import AntdSpin as Spin +from .splitter import AntdSplitter as Splitter +from .splitter.panel import AntdSplitterPanel as SplitterPanel +from .statistic import AntdStatistic as Statistic +from .statistic import AntdStatisticCountdown as StatisticCountdown +from .steps import AntdSteps as Steps +from .steps.item import AntdStepsItem as StepsItem +from .switch import AntdSwitch as Switch +from .table import AntdTable as Table +from .table.column import AntdTableColumn as TableColumn +from .table.column_group import AntdTableColumnGroup as TableColumnGroup +from .table.expandable import AntdTableExpandable as TableExpandable +from .table.row_selection import AntdTableRowSelection as TableRowSelection +from .table.row_selection.selection import \ + AntdTableRowSelectionSelection as TableRowSelectionSelection +from .tabs import AntdTabs as Tabs +from .tabs.item import AntdTabsItem as TabsItem +from .tag import AntdTag as Tag +from .tag.checkable_tag import AntdTagCheckableTag as TagCheckableTag +from .time_picker import AntdTimePicker as TimePicker +from .time_picker.range_picker import \ + AntdTimePickerRangePicker as TimePickerRangePicker +from .timeline import AntdTimeline as Timeline +from .timeline.item import AntdTimelineItem as TimelineItem +from .tooltip import AntdTooltip as Tooltip +from .tour import AntdTour as Tour +from .tour.step import AntdTourStep as TourStep +from .transfer import AntdTransfer as Transfer +from .tree import AntdTree as Tree +from .tree.directory_tree import AntdTreeDirectoryTree as TreeDirectoryTree +from .tree.tree_node import AntdTreeTreeNode as TreeTreeNode +from .tree_select import AntdTreeSelect as TreeSelect +from .tree_select.tree_node import AntdTreeSelectTreeNode as TreeSelectTreeNode +from .typography import AntdTypography as Typography +from .typography.link import AntdTypographyLink as TypographyLink +from .typography.paragraph import \ + AntdTypographyParagraph as TypographyParagraph +from .typography.text import AntdTypographyText as TypographyText +from .typography.title import AntdTypographyTitle as TypographyTitle +from .upload import AntdUpload as Upload +from .upload.dragger import AntdUploadDragger as UploadDragger +from .watermark import AntdWatermark as Watermark diff --git a/backend/modelscope_studio/components/antd/affix/__init__.py b/backend/modelscope_studio/components/antd/affix/__init__.py new file mode 100644 index 00000000..714ac0c0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/affix/__init__.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdAffix(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/affix + + Stick an element to the viewport. + + When to use: + On longer web pages, it's helpful to stick component into the viewport. This is common for menus and actions. + + Please note that Affix should not cover other content on the page, especially when the size of the viewport is small. + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True), + doc="Callback for when Affix state is changed.") + ] + + def __init__( + self, + props: dict | None = None, + *, + offset_bottom: int | float | None = None, + offset_top: int | float | None = 0, + get_target: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + offset_bottom: Offset from the bottom of the viewport (in pixels). + offset_top: Offset from the top of the viewport (in pixels). + get_target: Specifies the scrollable area DOM node. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.offset_bottom = offset_bottom + self.offset_top = offset_top + self.get_target = get_target + + FRONTEND_DIR = resolve_frontend_dir("affix") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/alert/__init__.py b/backend/modelscope_studio/components/antd/alert/__init__.py new file mode 100644 index 00000000..a57562f0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/alert/__init__.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .error_boundary import AntdAlertErrorBoundary + + +class AntdAlert(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/alert + """ + ErrorBoundary = AntdAlertErrorBoundary + EVENTS = [ + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['action', 'closable.closeIcon', 'description', 'icon', 'message'] + + def __init__( + self, + props: dict | None = None, + *, + action: str | None = None, + after_close: str | None = None, + banner: bool | None = None, + closable: bool | dict | None = None, + description: str | None = None, + icon: str | None = None, + message: str | None = None, + show_icon: bool | None = None, + type: Literal['success', 'info', 'warning', 'error'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.action = action + self.after_close = after_close + self.banner = banner + self.closable = closable + self.description = description + self.icon = icon + self.message = message + self.show_icon = show_icon + self.type = type + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("alert") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/alert/error_boundary/__init__.py b/backend/modelscope_studio/components/antd/alert/error_boundary/__init__.py new file mode 100644 index 00000000..a7a9f711 --- /dev/null +++ b/backend/modelscope_studio/components/antd/alert/error_boundary/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdAlertErrorBoundary(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/alert + """ + EVENTS = [ + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['description', 'message'] + + def __init__( + self, + props: dict | None = None, + *, + description: str | None = None, + message: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.description = description + self.message = message + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("alert", "error-boundary") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/anchor/__init__.py b/backend/modelscope_studio/components/antd/anchor/__init__.py new file mode 100644 index 00000000..72a7fcba --- /dev/null +++ b/backend/modelscope_studio/components/antd/anchor/__init__.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdAnchorItem + + +class AntdAnchor(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/anchor + Hyperlinks to scroll on one page. + + When to use: + For displaying anchor hyperlinks on page and jumping between them. + """ + Item = AntdAnchorItem + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True), + doc="Listening for anchor link change"), + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event."), + EventListener('affix_change', + callback=lambda block: block._internal.update( + bind_affix_change_event=True), + doc="Callback for when Affix state is changed") + ] + + # supported slots + SLOTS = ['items'] + + def __init__( + self, + props: dict | None = None, + *, + affix: bool | dict = True, + bounds: int | float = 5, + get_container: str | None = None, + get_current_anchor: str | None = None, + offset_top: int | float = 0, + show_ink_in_fixed: bool = False, + target_offset: int | float | None = None, + items: list[dict] | None = None, + direction: Literal['vertical', 'horizontal'] = 'vertical', + replace: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + affix: Fixed mode of Anchor. + bounds: Bounding distance of anchor area. + get_container: Scrolling container. + get_current_anchor: Customize the anchor highlightL. + offset_top: Pixels to offset from top when calculating position of scroll. + show_ink_in_fixed: Whether show ink-square when affix=False. + target_offset: Anchor scroll offset, default as offsetTop. + items: Data configuration option content, support nesting through children. + direction: Set Anchor direction. + replace: Replace items' href in browser history instead of pushing it. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.affix = affix + self.bounds = bounds + self.get_container = get_container + self.get_current_anchor = get_current_anchor + self.offset_top = offset_top + self.show_ink_in_fixed = show_ink_in_fixed + self.target_offset = target_offset + self.items = items + self.direction = direction + self.replace = replace + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("anchor") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/anchor/item/__init__.py b/backend/modelscope_studio/components/antd/anchor/item/__init__.py new file mode 100644 index 00000000..69b7f2e6 --- /dev/null +++ b/backend/modelscope_studio/components/antd/anchor/item/__init__.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdAnchorItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/anchor + Hyperlinks to scroll on one page. + + When to use: + For displaying anchor hyperlinks on page and jumping between them. + """ + EVENTS = [] + # supported slots + SLOTS = ["title"] + + def __init__( + self, + title: str | None = None, + props: dict | None = None, + *, + key: str | None = None, + replace: bool = False, + href: str | None = None, + href_target: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + title: The content of hyperlink. + key: The unique identifier of the Anchor Link. + href: The target of hyperlink. + href_target: Specifies where to display the linked URL. + replace: Replace item href in browser history instead of pushing it. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.title = title + self.key = key + self.replace = replace + self.href = href + self.href_target = href_target + + FRONTEND_DIR = resolve_frontend_dir("anchor", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/auto_complete/__init__.py b/backend/modelscope_studio/components/antd/auto_complete/__init__.py new file mode 100644 index 00000000..f682caef --- /dev/null +++ b/backend/modelscope_studio/components/antd/auto_complete/__init__.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdAutoCompleteOption + + +# as inputs, outputs +class AntdAutoComplete(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/auto-complete/ + """ + Option = AntdAutoCompleteOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("dropdown_visible_change", + callback=lambda block: block._internal.update( + bind_dropdownVisibleChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', 'dropdownRender', 'children', 'notFoundContent' + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict = False, + auto_focus: bool = False, + backfill: bool = False, + default_active_first_option: bool = True, + default_open: bool | None = None, + default_value: str | None = None, + disabled: bool = False, + dropdown_render: str | None = None, + popup_class_name: str | None = None, + popup_match_select_width: bool | int | float = True, + filter_option: bool | str = True, + get_popup_container: str | None = None, + not_found_content: str | None = None, + open: bool | None = None, + options: list[dict] | None = None, + placeholder: str | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] | None = None, + size: Literal['small', 'middle', 'large'] | None = None, + status: Literal['error', 'warning'] | None = None, + variant: Literal['outlined', 'borderless', 'filled'] + | None = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.backfill = backfill + self.default_active_first_option = default_active_first_option + self.default_open = default_open + self.default_value = default_value + self.disabled = disabled + self.dropdown_render = dropdown_render + self.popup_class_name = popup_class_name + self.popup_match_select_width = popup_match_select_width + self.filter_option = filter_option + self.get_popup_container = get_popup_container + self.not_found_content = not_found_content + self.open = open + self.options = options + self.placeholder = placeholder + self.status = status + self.variant = variant + self.placement = placement + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("auto-complete") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/auto_complete/option/__init__.py b/backend/modelscope_studio/components/antd/auto_complete/option/__init__.py new file mode 100644 index 00000000..71bb47c4 --- /dev/null +++ b/backend/modelscope_studio/components/antd/auto_complete/option/__init__.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdAutoCompleteOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/auto-complete/ + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + value: str | None = None, + label: str | None = None, + props: dict | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + + FRONTEND_DIR = resolve_frontend_dir("auto-complete", "option") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/avatar/__init__.py b/backend/modelscope_studio/components/antd/avatar/__init__.py new file mode 100644 index 00000000..6eb6f8bf --- /dev/null +++ b/backend/modelscope_studio/components/antd/avatar/__init__.py @@ -0,0 +1,109 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any, Literal, Union + +from gradio import processing_utils +from gradio.data_classes import FileData, GradioRootModel +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .group import AntdAvatarGroup + + +class AntdAvatarData(GradioRootModel): + root: Union[FileData, str] + + +class AntdAvatar(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/avatar + """ + Group = AntdAvatarGroup + + EVENTS = [ + EventListener("error", + callback=lambda block: block._internal.update( + bind_error_event=True)) + ] + + # supported slots + SLOTS = ['icon', "src"] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + alt: str | None = None, + gap: int = 4, + icon: str | None = None, + shape: Literal['circle', 'square'] = 'circle', + size: int | Literal['large', 'small', 'default'] | dict + | None = 'default', + src_set: str | None = None, + draggable: bool | Literal['true', 'false'] | None = None, + cross_origin: Literal['anonymous', 'use-credentials', ''] + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.alt = alt + self.gap = gap + self.icon = icon + self.shape = shape + self.size = size + self.src_set = src_set + self.draggable = draggable + self.cross_origin = cross_origin + self.root_class_name = root_class_name + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("avatar") + + data_model = AntdAvatarData + + @property + def skip_api(self): + return True + + def preprocess( + self, payload: str | AntdAvatarData | None + ) -> str | AntdAvatarData | None: + if isinstance(payload, AntdAvatarData): + value = payload.root + if isinstance(value, FileData): + return value.path + return value + return payload + + def postprocess(self, value: str | None) -> str | None: + if value is None: + return None + if value.startswith("http") or value.startswith("data"): + return AntdAvatarData(root=value) + file = processing_utils.move_resource_to_block_cache(value, self) + return AntdAvatarData(root=FileData(path=file, + orig_name=Path(file).name, + size=Path(file).stat().st_size)) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/avatar/group/__init__.py b/backend/modelscope_studio/components/antd/avatar/group/__init__.py new file mode 100644 index 00000000..5bca907c --- /dev/null +++ b/backend/modelscope_studio/components/antd/avatar/group/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdAvatarGroup(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/avatar + """ + EVENTS = [] + # supported slots + SLOTS = ['max.popover.title', 'max.popover.content'] + + def __init__( + self, + props: dict | None = None, + *, + max: dict | None = None, + size: int | Literal['large', 'small', 'default'] + | dict = 'default', + shape: Literal['circle', 'square'] = 'circle', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.max = max + self.size = size + self.shape = shape + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("avatar", 'group') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/badge/__init__.py b/backend/modelscope_studio/components/antd/badge/__init__.py new file mode 100644 index 00000000..8630d9d2 --- /dev/null +++ b/backend/modelscope_studio/components/antd/badge/__init__.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .ribbon import AntdBadgeRibbon + + +class AntdBadge(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/badge + """ + Ribbon = AntdBadgeRibbon + + EVENTS = [] + + # supported slots + SLOTS = ['count', 'text'] + + def __init__( + self, + count: int | float | str | None = None, + props: dict | None = None, + *, + color: str | None = None, + class_names: dict | None = None, + dot: bool = False, + offset: tuple[int | float, int | float] | None = None, + overflow_count: int = 99, + show_zero: bool = False, + size: Literal['small', 'default'] | None = None, + status: Literal['success', 'processing', 'default', 'error', + 'warning'] | None = None, + text: str | None = None, + title: str | None = None, + styles: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.count = count + self.color = color + self.class_names = class_names + self.dot = dot + self.offset = offset + self.overflow_count = overflow_count + self.show_zero = show_zero + self.size = size + self.status = status + self.text = text + self.title = title + self.styles = styles + self.root_class_name = root_class_name + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("badge") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/badge/ribbon/__init__.py b/backend/modelscope_studio/components/antd/badge/ribbon/__init__.py new file mode 100644 index 00000000..b4c1b0a4 --- /dev/null +++ b/backend/modelscope_studio/components/antd/badge/ribbon/__init__.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdBadgeRibbon(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/badge + """ + EVENTS = [] + + def __init__( + self, + text: str | None = None, + props: dict | None = None, + *, + color: str | None = None, + placement: Literal['start', 'end'] = 'end', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.color = color + self.placement = placement + self.root_class_name = root_class_name + self.text = text + + FRONTEND_DIR = resolve_frontend_dir("badge", 'ribbon') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/breadcrumb/__init__.py b/backend/modelscope_studio/components/antd/breadcrumb/__init__.py new file mode 100644 index 00000000..443570b1 --- /dev/null +++ b/backend/modelscope_studio/components/antd/breadcrumb/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdBreadcrumbItem + + +class AntdBreadcrumb(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/breadcrumb + """ + Item = AntdBreadcrumbItem + + EVENTS = [] + + # supported slots + SLOTS = ['separator', 'itemRender', 'items'] + + def __init__( + self, + props: dict | None = None, + *, + item_render: str | None = None, + params: dict | None = None, + items: list[dict] | None = None, + separator: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.item_render = item_render + self.params = params + self.items = items + self.separator = separator + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("breadcrumb") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/breadcrumb/item/__init__.py b/backend/modelscope_studio/components/antd/breadcrumb/item/__init__.py new file mode 100644 index 00000000..ac6cccc7 --- /dev/null +++ b/backend/modelscope_studio/components/antd/breadcrumb/item/__init__.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdBreadcrumbItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/breadcrumb + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("menu_click", + callback=lambda block: block._internal.update( + bind_menu_click_event=True)), + EventListener("menu_deselect", + callback=lambda block: block._internal.update( + bind_menu_deselect_event=True)), + EventListener("menu_open_change", + callback=lambda block: block._internal.update( + bind_menu_openChange_event=True)), + EventListener("menu_select", + callback=lambda block: block._internal.update( + bind_menu_select_event=True)), + EventListener("dropdown_open_change", + callback=lambda block: block._internal.update( + bind_dropdownProps_openChange_event=True)), + EventListener("dropdown_menu_click", + callback=lambda block: block._internal.update( + bind_dropdownProps_menu_click_event=True)), + EventListener("dropdown_menu_deselect", + callback=lambda block: block._internal.update( + bind_dropdownProps_menu_deselect_event=True)), + EventListener("dropdown_menu_open_change", + callback=lambda block: block._internal.update( + bind_dropdownProps_menu_openChange_event=True)), + EventListener("dropdown_menu_select", + callback=lambda block: block._internal.update( + bind_dropdownProps_menu_select_event=True)), + ] + + # supported slots + SLOTS = [ + 'title', + "menu.expandIcon", + 'menu.overflowedIndicator', + "menu.items", + "dropdownProps.dropdownRender", + "dropdownProps.menu.expandIcon", + 'dropdownProps.menu.overflowedIndicator', + "dropdownProps.menu.items", + ] + + def __init__( + self, + title: str | None = None, + props: dict | None = None, + *, + dropdown_props: dict | None = None, + href: str | None = None, + path: str | None = None, + menu: dict | None = None, + type: Literal['separator'] | None = None, + separator: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.title = title + self.dropdown_props = dropdown_props + self.href = href + self.path = path + self.menu = menu + self.type = type + self.separator = separator + + FRONTEND_DIR = resolve_frontend_dir("breadcrumb", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/button/__init__.py b/backend/modelscope_studio/components/antd/button/__init__.py new file mode 100644 index 00000000..389e728f --- /dev/null +++ b/backend/modelscope_studio/components/antd/button/__init__.py @@ -0,0 +1,149 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .group import AntdButtonGroup + + +class AntdButton(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/button + + To trigger an operation. + + When to use: + A button means an operation (or a series of operations). Clicking a button will trigger its corresponding business logic. + + In Ant Design we provide 5 types of button. + + - Primary button: used for the main action, there can be at most one primary button in a section. + - Default button: used for a series of actions without priority. + - Dashed button: commonly used for adding more actions. + - Text button: used for the most secondary action. + - Link button: used for external links. + + And 4 other properties additionally. + + - danger: used for actions of risk, like deletion or authorization. + - ghost: used in situations with complex background, home pages usually. + - disabled: used when actions are not available. + - loading: adds a loading spinner in button, avoids multiple submits too. + """ + Group = AntdButtonGroup + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event.") + ] + + # supported slots + SLOTS = ['icon'] + + def __init__( + self, + value: str | None = "Run", + props: dict | None = None, + *, + auto_insert_space: bool = True, + block: bool = False, + class_names: dict | None = None, + danger: bool = False, + disabled: bool = False, + ghost: bool = False, + href: str | None = None, + html_type: Literal["button", "submit", "reset"] | None = "button", + icon: str | None = None, + icon_position: Literal["start", "end"] | None = "start", + loading: bool = False, + shape: Literal["default", "circle", "round"] | None = "default", + size: Literal["large", "middle", "small"] | None = None, + styles: dict | None = None, + href_target: str | None = None, + type: Literal["primary", "dashed", "link", "text", "default"] + | None = "default", + variant: Literal["outlined", "dashed", "solid", "filled", "text", + "link"] | None = None, + color: Literal['default', 'primary', 'danger'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + auto_insert_space: We add a space between two Chinese characters by default, which can be removed by setting auto_Insert_Space to false. + block: Option to fit button width to its parent width. + class_names: Semantic DOM class. + danger: Set the danger status of button. + disabled: Disabled state of button. + ghost: Make background transparent and invert text and border colors. + href: Redirect url of link button. + html_type: Set the original html type of button, see: MDN. + icon: Set the icon component of button. + icon_position: Set the icon position of button. + loading: Set the loading status of button. + shape: Can be set button shape. + size: Set the size of button. + styles: Semantic DOM style. + href_target: Same as target attribute of a, works when href is specified. + type: Set button type. + variant: Set button variant. + color: Set button color. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.auto_insert_space = auto_insert_space + self.block = block + self.class_names = class_names + self.danger = danger + self.disabled = disabled + self.ghost = ghost + self.href = href + self.html_type = html_type + self.icon = icon + self.icon_position = icon_position + self.loading = loading + self.shape = shape + self.size = size + self.styles = styles + self.href_target = href_target + self.type = type + self.variant = variant + self.color = color + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("button") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Run" + + def example_value(self) -> Any: + return "Run" diff --git a/backend/modelscope_studio/components/antd/button/group/__init__.py b/backend/modelscope_studio/components/antd/button/group/__init__.py new file mode 100644 index 00000000..f4fec3ec --- /dev/null +++ b/backend/modelscope_studio/components/antd/button/group/__init__.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdButtonGroup(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/button + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + size: Literal['small', 'middle', 'large'] | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.size = size + + FRONTEND_DIR = resolve_frontend_dir("button", 'group') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/calendar/__init__.py b/backend/modelscope_studio/components/antd/calendar/__init__.py new file mode 100644 index 00000000..2aef5a80 --- /dev/null +++ b/backend/modelscope_studio/components/antd/calendar/__init__.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdCalendar(ModelScopeComponent): + """ + Ant Design: https://ant.design/components/calendar + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("panel_change", + callback=lambda block: block._internal.update( + bind_panelChange_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)) + ] + + # supported slots + SLOTS = ['cellRender', 'fullCellRender', 'headerRender'] + + def __init__( + self, + value: int | str | float | None = None, + props: dict | None = None, + *, + cell_render: str | None = None, + full_cell_render: str | None = None, + default_value: int | str | float | None = None, + disabled_date: str | None = None, + fullscreen: bool = True, + header_render: str | None = None, + locale: dict | None = None, + mode: Literal['month', 'year'] = 'month', + valid_range: tuple[int | str | float, int | str | float] + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.cell_render = cell_render + self.full_cell_render = full_cell_render + self.default_value = default_value + self.disabled_date = disabled_date + self.fullscreen = fullscreen + self.header_render = header_render + self.locale = locale + self.mode = mode + self.valid_range = valid_range + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("calendar") + + def api_info(self) -> dict[str, Any]: + return {"anyOf": [{"type": "number"}, {"type": "string"}]} + + @property + def skip_api(self): + return False + + def preprocess(self, payload: int | float) -> int | float: + return payload + + def postprocess(self, value: int | float) -> int | str: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/card/__init__.py b/backend/modelscope_studio/components/antd/card/__init__.py new file mode 100644 index 00000000..83e21220 --- /dev/null +++ b/backend/modelscope_studio/components/antd/card/__init__.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .grid import AntdCardGrid +from .meta import AntdCardMeta + + +class AntdCard(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/card + + A container for displaying information. + + When to use: + A card can be used to display content related to a single subject. The content can consist of multiple elements of varying types and sizes. + """ + Grid = AntdCardGrid + Meta = AntdCardMeta + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("tab_change", + callback=lambda block: block._internal.update( + bind_tabChange_event=True)) + ] + + # supported slots + SLOTS = [ + "actions", + 'cover', + 'extra', + 'tabBarExtraContent', + 'title', + ] + + def __exit__(self, *args, **kwargs): + self._internal.update(contains_grid=any( + isinstance(child, AntdCardGrid) for child in self.children)) + super().__exit__(*args, **kwargs) + + def __init__( + self, + props: dict | None = None, + *, + actions: str | None = None, + active_tab_key: str | None = None, + bordered: bool = True, + cover: str | None = None, + default_active_tab_key: str | None = None, + extra: str | None = None, + hoverable: bool = False, + loading: bool = False, + size: Literal["default", "small"] | None = None, + tab_bar_extra_content: str | None = None, + tab_list: list[str] | str | None = None, + tab_props: str | None = None, + title: str | None = None, + type: str | None = None, + class_names: dict | None = None, + styles: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + actions: The action list, shows at the bottom of the Card. + active_tab_key: Current TabPane's key. + bordered: Toggles rendering of the border around the card. + cover: Card cover. + default_active_tab_key: Initial active TabPane's key, if activeTabKey is not set. + extra: Content to render in the top-right corner of the card. + hoverable: Lift up when hovering card. + loading: Shows a loading indicator while the contents of the card are being fetched. + size: Size of card. + tab_bar_extra_content: Extra content in tab bar. + title: Card title. + type: Card style type, can be set to inner or not set. + class_names: Config Card build-in module's className. + styles: Config Card build-in module's style. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.actions = actions + self.active_tab_key = active_tab_key + self.bordered = bordered + self.cover = cover + self.default_active_tab_key = default_active_tab_key + self.extra = extra + self.hoverable = hoverable + self.loading = loading + self.size = size + self.tab_bar_extra_content = tab_bar_extra_content + self.tab_list = tab_list + self.tab_props = tab_props + self.title = title + self.type = type + self.class_names = class_names + self.styles = styles + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("card") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/card/grid/__init__.py b/backend/modelscope_studio/components/antd/card/grid/__init__.py new file mode 100644 index 00000000..bb966aca --- /dev/null +++ b/backend/modelscope_studio/components/antd/card/grid/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCardGrid(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/card + + A container for displaying information. + + When to use: + A card can be used to display content related to a single subject. The content can consist of multiple elements of varying types and sizes. + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + def __init__( + self, + props: dict | None = None, + *, + hoverable: bool = True, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + hoverable: Lift up when hovering card grid. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + elem_style=elem_style, + as_item=as_item, + **kwargs) + self.props = props + self.hoverable = hoverable + + FRONTEND_DIR = resolve_frontend_dir("card", "grid") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/card/meta/__init__.py b/backend/modelscope_studio/components/antd/card/meta/__init__.py new file mode 100644 index 00000000..8593e657 --- /dev/null +++ b/backend/modelscope_studio/components/antd/card/meta/__init__.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCardMeta(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/card + + A container for displaying information. + + When to use: + A card can be used to display content related to a single subject. The content can consist of multiple elements of varying types and sizes. + """ + EVENTS = [] + SLOTS = ["title", "description", "avatar"] + + def __init__( + self, + props: dict | None = None, + *, + avatar: str | None = None, + description: str | None = None, + title: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + avatar: Avatar or icon. + description: Description content. + title: Title content. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.avatar = avatar + self.description = description + self.title = title + + FRONTEND_DIR = resolve_frontend_dir("card", "meta") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/carousel/__init__.py b/backend/modelscope_studio/components/antd/carousel/__init__.py new file mode 100644 index 00000000..fe1c22bb --- /dev/null +++ b/backend/modelscope_studio/components/antd/carousel/__init__.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCarousel(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/carousel + """ + + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + arrows: bool = False, + autoplay: bool = False, + autoplay_speed: int | float = 3000, + adaptive_height: bool = False, + dot_position: Literal['top', 'bottom', 'left', 'right'] = 'bottom', + dots: bool | dict = True, + draggable: bool = False, + fade: bool = False, + infinite: bool = True, + speed: int = 500, + easing: str = 'linear', + effect: Literal['scrollx', 'fade'] = 'scrollx', + after_change: str | None = None, + before_change: str | None = None, + wait_for_animate: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.arrows = arrows + self.autoplay = autoplay + self.autoplay_speed = autoplay_speed + self.adaptive_height = adaptive_height + self.dot_position = dot_position + self.dots = dots + self.draggable = draggable + self.fade = fade + self.infinite = infinite + self.speed = speed + self.easing = easing + self.effect = effect + self.after_change = after_change + self.before_change = before_change + self.wait_for_animate = wait_for_animate + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("carousel") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/cascader/__init__.py b/backend/modelscope_studio/components/antd/cascader/__init__.py new file mode 100644 index 00000000..45a12e3d --- /dev/null +++ b/backend/modelscope_studio/components/antd/cascader/__init__.py @@ -0,0 +1,177 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdCascaderOption +from .panel import AntdCascaderPanel + + +# as inputs, outputs +class AntdCascader(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/cascader + """ + Option = AntdCascaderOption + Panel = AntdCascaderPanel + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("dropdown_visible_change", + callback=lambda block: block._internal.update( + bind_dropdownVisibleChange_event=True)), + EventListener("load_data", + callback=lambda block: block._internal.update( + bind_loadData_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'suffixIcon', + 'maxTagPlaceholder', + 'notFoundContent', + 'expandIcon', + 'removeIcon', + 'displayRender', + 'tagRender', + 'dropdownRender', + 'showSearch.render', + ] + + def __init__( + self, + value: list[str] | list[int | float] | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict = False, + auto_clear_search_value: bool = True, + auto_focus: bool = False, + change_on_select: bool = False, + default_value: str | None = None, + disabled: bool = False, + display_render: str | None = None, + tag_render: str | None = None, + popup_class_name: str | None = None, + dropdown_render: str | None = None, + expand_icon: str | None = None, + expand_trigger: Literal['click', 'hover'] = 'click', + filed_names: dict | None = None, + get_popup_container: str | None = None, + max_tag_count: int | Literal['responsive'] | None = None, + max_tag_placeholder: str | None = None, + max_tag_text_length: int | None = None, + not_found_content: str | None = None, + open: bool | None = None, + options: list[dict] | None = None, + placeholder: str | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] = 'bottomLeft', + show_search: bool | dict = False, + size: Literal['small', 'middle', 'large'] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] + | None = 'outlined', + multiple: bool | None = None, + show_checked_strategy: Literal['SHOW_PARENT', 'SHOW_CHILD'] + | None = None, + remove_icon: str | None = None, + search_value: str | None = None, + dropdown_menu_column_style: dict | None = None, + option_render: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_clear_search_value = auto_clear_search_value + self.auto_focus = auto_focus + self.change_on_select = change_on_select + self.default_value = default_value + self.disabled = disabled + self.display_render = display_render + self.tag_render = tag_render + self.popup_class_name = popup_class_name + self.dropdown_render = dropdown_render + self.expand_icon = expand_icon + self.expand_trigger = expand_trigger + self.filed_names = filed_names + self.get_popup_container = get_popup_container + self.max_tag_count = max_tag_count + self.max_tag_placeholder = max_tag_placeholder + self.max_tag_text_length = max_tag_text_length + self.not_found_content = not_found_content + self.open = open + self.options = options + self.placeholder = placeholder + self.placement = placement + self.show_search = show_search + self.size = size + self.status = status + self.suffix_icon = suffix_icon + self.variant = variant + self.multiple = multiple + self.show_checked_strategy = show_checked_strategy + self.remove_icon = remove_icon + self.search_value = search_value + self.dropdown_menu_column_style = dropdown_menu_column_style + self.option_render = option_render + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("cascader") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [{ + "type": "array", + "items": { + "type": "string" + } + }, { + "type": "string" + }] + } + + def preprocess( + self, payload: None | list[str] | list[int | float] + ) -> None | list[str] | list[int | float]: + return payload + + def postprocess( + self, value: None | list[str] | list[int | float] + ) -> None | list[str] | list[int | float]: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/cascader/constants.py b/backend/modelscope_studio/components/antd/cascader/constants.py new file mode 100644 index 00000000..bfb00b1d --- /dev/null +++ b/backend/modelscope_studio/components/antd/cascader/constants.py @@ -0,0 +1,2 @@ +SHOW_CHILD = "SHOW_CHILD" +SHOW_PARENT = "SHOW_PARENT" diff --git a/backend/modelscope_studio/components/antd/cascader/option/__init__.py b/backend/modelscope_studio/components/antd/cascader/option/__init__.py new file mode 100644 index 00000000..e4e5c9a9 --- /dev/null +++ b/backend/modelscope_studio/components/antd/cascader/option/__init__.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCascaderOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/cascader + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + value: str | None = None, + label: str | None = None, + props: dict | None = None, + *, + disabled: bool | None = None, + is_leaf: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + self.disabled = disabled + self.is_leaf = is_leaf + + FRONTEND_DIR = resolve_frontend_dir("cascader", "option") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/cascader/panel/__init__.py b/backend/modelscope_studio/components/antd/cascader/panel/__init__.py new file mode 100644 index 00000000..21c48145 --- /dev/null +++ b/backend/modelscope_studio/components/antd/cascader/panel/__init__.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdCascaderPanel(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/cascader + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("load_data", + callback=lambda block: block._internal.update( + bind_loadData_event=True)), + ] + + # supported slots + SLOTS = ['notFoundContent', 'expandIcon'] + + def __init__( + self, + value: list[str] | list[int | float] | None = None, + props: dict | None = None, + *, + change_on_select: bool = False, + default_value: str | None = None, + expand_icon: str | None = None, + expand_trigger: Literal['click', 'hover'] = 'click', + filed_names: dict | None = None, + not_found_content: str | None = None, + options: list[dict] | None = None, + multiple: bool | None = None, + show_checked_strategy: Literal['SHOW_PARENT', 'SHOW_CHILD'] + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.change_on_select = change_on_select + self.default_value = default_value + self.expand_icon = expand_icon + self.expand_trigger = expand_trigger + self.filed_names = filed_names + self.not_found_content = not_found_content + self.options = options + self.multiple = multiple + self.show_checked_strategy = show_checked_strategy + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("cascader", "panel") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [{ + "type": "array", + "items": { + "type": "string" + } + }, { + "type": "string" + }] + } + + def preprocess( + self, payload: None | list[str] | list[int | float] + ) -> None | list[str] | list[int | float]: + return payload + + def postprocess( + self, value: None | list[str] | list[int | float] + ) -> None | list[str] | list[int | float]: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/checkbox/__init__.py b/backend/modelscope_studio/components/antd/checkbox/__init__.py new file mode 100644 index 00000000..dd3dec6b --- /dev/null +++ b/backend/modelscope_studio/components/antd/checkbox/__init__.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .group import AntdCheckboxGroup + + +# as inputs, outputs +class AntdCheckbox(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/checkbox + """ + Group = AntdCheckboxGroup + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + def __init__( + self, + value: bool | None = False, + props: dict | None = None, + *, + auto_focus: bool = False, + default_checked: bool = False, + disabled: bool = False, + indeterminate: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.auto_focus = auto_focus + self.default_checked = default_checked + self.disabled = disabled + self.indeterminate = indeterminate + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("checkbox") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "boolean"} + + def preprocess(self, payload: None | bool) -> None | bool: + return payload + + def postprocess(self, value: None | bool) -> None | bool: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/checkbox/group/__init__.py b/backend/modelscope_studio/components/antd/checkbox/group/__init__.py new file mode 100644 index 00000000..df3b784d --- /dev/null +++ b/backend/modelscope_studio/components/antd/checkbox/group/__init__.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdCheckboxGroupOption + + +# as inputs, outputs +class AntdCheckboxGroup(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/checkbox + """ + Option = AntdCheckboxGroupOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + # supported slots + SLOTS = [ + 'options', + ] + + def __init__( + self, + value: list[str | int | float | bool] | None = None, + props: dict | None = None, + *, + default_value: list[str | int | float | bool] | None = None, + disabled: bool = False, + options: list[str] | list[int | float] | list[dict] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.default_value = default_value + self.disabled = disabled + self.options = options + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("checkbox", "group") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + ], + } + } + + def preprocess( + self, payload: None | list[str | int | float | bool] | None + ) -> None | list[str | int | float | bool] | None: + return payload + + def postprocess( + self, value: None | list[str | int | float | bool] | None + ) -> None | list[str | int | float | bool] | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/checkbox/group/option/__init__.py b/backend/modelscope_studio/components/antd/checkbox/group/option/__init__.py new file mode 100644 index 00000000..d664acd9 --- /dev/null +++ b/backend/modelscope_studio/components/antd/checkbox/group/option/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Any + +from ......utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCheckboxGroupOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/checkbox + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + label: str | None = None, + disabled: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + self.disabled = disabled + + FRONTEND_DIR = resolve_frontend_dir("checkbox", ['group', 'option']) + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/collapse/__init__.py b/backend/modelscope_studio/components/antd/collapse/__init__.py new file mode 100644 index 00000000..57aa9a19 --- /dev/null +++ b/backend/modelscope_studio/components/antd/collapse/__init__.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdCollapseItem + + +class AntdCollapse(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/collapse + """ + Item = AntdCollapseItem + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + # supported slots + SLOTS = ["expandIcon", "items"] + + def __init__( + self, + props: dict | None = None, + *, + accordion: bool = False, + active_key: str | float | list[int | float] | list[str] + | None = None, + bordered: bool = True, + collapsible: Literal['header', 'icon', 'disabled'] | None = None, + default_active_key: str | float | list[int | float] | list[str] + | None = None, + destroy_inactive_panel: bool = False, + expand_icon: str | None = None, + expand_icon_position: Literal['start', 'end'] | None = None, + ghost: bool = False, + items: list[dict] | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.accordion = accordion + self.active_key = active_key + self.bordered = bordered + self.collapsible = collapsible + self.default_active_key = default_active_key + self.destroy_inactive_panel = destroy_inactive_panel + self.expand_icon = expand_icon + self.expand_icon_position = expand_icon_position + self.ghost = ghost + self.items = items + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("collapse") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/collapse/item/__init__.py b/backend/modelscope_studio/components/antd/collapse/item/__init__.py new file mode 100644 index 00000000..e414e15c --- /dev/null +++ b/backend/modelscope_studio/components/antd/collapse/item/__init__.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCollapseItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/collapse + """ + + EVENTS = [ + EventListener("item_click", + callback=lambda block: block._internal.update( + bind_itemClick_event=True)), + ] + + # supported slots + SLOTS = ['extra', "label", "children"] + + def __init__( + self, + label: str | None = None, + key: str | float | int | None = None, + props: dict | None = None, + *, + class_names: dict | None = None, + collapsible: Literal['header', 'icon', 'disabled'] | None = None, + extra: str | None = None, + force_render: bool = False, + show_arrow: bool = True, + styles: dict | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.label = label + self.props = props + self.key = key + self.class_names = class_names + self.collapsible = collapsible + self.extra = extra + self.force_render = force_render + self.show_arrow = show_arrow + self.styles = styles + + FRONTEND_DIR = resolve_frontend_dir("collapse", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/color_picker/__init__.py b/backend/modelscope_studio/components/antd/color_picker/__init__.py new file mode 100644 index 00000000..a23ad83d --- /dev/null +++ b/backend/modelscope_studio/components/antd/color_picker/__init__.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .preset import AntdColorPickerPreset + + +# as inputs, outputs +class AntdColorPicker(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/color-picker + """ + Preset = AntdColorPickerPreset + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("change_complete", + callback=lambda block: block._internal.update( + bind_changeComplete_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("format_change", + callback=lambda block: block._internal.update( + bind_formatChange_event=True)), + ] + + # supported slots + SLOTS = ["presets", 'panelRender', 'showText'] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + value_format: Literal['hex', 'rgb', 'hsb'] = 'hex', + allow_clear: bool = False, + arrow: bool | dict = True, + presets: list[dict] | None = None, + preset_items: list[dict] | None = None, + disabled: bool | None = None, + disabled_alpha: bool | None = None, + destroy_tooltip_on_hide: bool | None = None, + format: Literal['hex', 'rgb', 'hsb'] | None = 'hex', + mode: Literal['single', 'gradient'] + | list[Literal['single', 'gradient']] | None = 'single', + open: bool | None = None, + default_value: str | None = None, + default_format: Literal['hex', 'rgb', 'hsb'] | None = None, + show_text: bool | str | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] | None = 'bottomLeft', + trigger: Literal['hover', 'click'] = 'click', + panel_render: str | None = None, + size: Literal['small', 'middle', 'large'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value_format = value_format + self.allow_clear = allow_clear + self.arrow = arrow + self.presets = presets + self.preset_items = preset_items + self.disabled = disabled + self.disabled_alpha = disabled_alpha + self.destroy_tooltip_on_hide = destroy_tooltip_on_hide + self.format = format + self.mode = mode + self.open = open + self.default_value = default_value + self.default_format = default_format + self.show_text = show_text + self.placement = placement + self.trigger = trigger + self.panel_render = panel_render + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("color-picker") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: str) -> str: + + return payload + + def postprocess(self, value: str) -> str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/color_picker/preset/__init__.py b/backend/modelscope_studio/components/antd/color_picker/preset/__init__.py new file mode 100644 index 00000000..c8fa61b5 --- /dev/null +++ b/backend/modelscope_studio/components/antd/color_picker/preset/__init__.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdColorPickerPreset(ModelScopeLayoutComponent): + """ + """ + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + props: dict | None = None, + *, + label: str | None = None, + colors: list[str] = None, + default_open: bool = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.label = label + self.colors = colors + self.default_open = default_open + + FRONTEND_DIR = resolve_frontend_dir("color-picker", 'preset') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/components.py b/backend/modelscope_studio/components/antd/components.py new file mode 100644 index 00000000..581dd774 --- /dev/null +++ b/backend/modelscope_studio/components/antd/components.py @@ -0,0 +1,138 @@ +from .affix import AntdAffix +from .alert import AntdAlert +from .alert.error_boundary import AntdAlertErrorBoundary +from .anchor import AntdAnchor +from .anchor.item import AntdAnchorItem +from .auto_complete import AntdAutoComplete +from .auto_complete.option import AntdAutoCompleteOption +from .avatar import AntdAvatar +from .avatar.group import AntdAvatarGroup +from .badge import AntdBadge +from .badge.ribbon import AntdBadgeRibbon +from .breadcrumb import AntdBreadcrumb +from .breadcrumb.item import AntdBreadcrumbItem +from .button import AntdButton +from .button.group import AntdButtonGroup +from .calendar import AntdCalendar +from .card import AntdCard +from .card.grid import AntdCardGrid +from .card.meta import AntdCardMeta +from .carousel import AntdCarousel +from .cascader import AntdCascader +from .cascader.option import AntdCascaderOption +from .cascader.panel import AntdCascaderPanel +from .checkbox import AntdCheckbox +from .checkbox.group import AntdCheckboxGroup +from .checkbox.group.option import AntdCheckboxGroupOption +from .collapse import AntdCollapse +from .collapse.item import AntdCollapseItem +from .color_picker import AntdColorPicker +from .color_picker.preset import AntdColorPickerPreset +from .config_provider import AntdConfigProvider +from .date_picker import AntdDatePicker +from .date_picker.preset import AntdDatePickerPreset +from .date_picker.range_picker import AntdDatePickerRangePicker +from .descriptions import AntdDescriptions +from .descriptions.item import AntdDescriptionsItem +from .divider import AntdDivider +from .drawer import AntdDrawer +from .dropdown import AntdDropdown +from .dropdown.button import AntdDropdownButton +from .empty import AntdEmpty +from .flex import AntdFlex +from .float_button import AntdFloatButton +from .float_button.back_top import AntdFloatButtonBackTop +from .float_button.group import AntdFloatButtonGroup +from .form import AntdForm +from .form.item import AntdFormItem +from .form.item.rule import AntdFormItemRule +from .grid.col import AntdCol +from .grid.row import AntdRow +from .icon import AntdIcon +from .icon.iconfont_provider import AntdIconIconfontProvider +from .image import AntdImage +from .image.preview_group import AntdImagePreviewGroup +from .input import AntdInput +from .input.otp import AntdInputOTP +from .input.password import AntdInputPassword +from .input.search import AntdInputSearch +from .input.textarea import AntdInputTextarea +from .input_number import AntdInputNumber +from .layout import AntdLayout +from .layout.content import AntdLayoutContent +from .layout.footer import AntdLayoutFooter +from .layout.header import AntdLayoutHeader +from .layout.sider import AntdLayoutSider +from .list import AntdList +from .list.item import AntdListItem +from .list.item.meta import AntdListItemMeta +from .mentions import AntdMentions +from .mentions.option import AntdMentionsOption +from .menu import AntdMenu +from .menu.item import AntdMenuItem +from .message import AntdMessage +from .modal import AntdModal +from .notification import AntdNotification +from .pagination import AntdPagination +from .popconfirm import AntdPopconfirm +from .popover import AntdPopover +from .progress import AntdProgress +from .qr_code import AntdQRCode +from .radio import AntdRadio +from .radio.button import AntdRadioButton +from .radio.group import AntdRadioGroup +from .radio.group.option import AntdRadioGroupOption +from .rate import AntdRate +from .result import AntdResult +from .segmented import AntdSegmented +from .segmented.option import AntdSegmentedOption +from .select import AntdSelect +from .select.option import AntdSelectOption +from .skeleton import AntdSkeleton +from .skeleton.avatar import AntdSkeletonAvatar +from .skeleton.button import AntdSkeletonButton +from .skeleton.image import AntdSkeletonImage +from .skeleton.input import AntdSkeletonInput +from .skeleton.node import AntdSkeletonNode +from .slider import AntdSlider +from .slider.mark import AntdSliderMark +from .space import AntdSpace +from .space.compact import AntdSpaceCompact +from .spin import AntdSpin +from .splitter import AntdSplitter +from .splitter.panel import AntdSplitterPanel +from .statistic import AntdStatistic, AntdStatisticCountdown +from .steps import AntdSteps +from .steps.item import AntdStepsItem +from .switch import AntdSwitch +from .table import AntdTable +from .table.column import AntdTableColumn +from .table.column_group import AntdTableColumnGroup +from .table.expandable import AntdTableExpandable +from .table.row_selection import AntdTableRowSelection +from .table.row_selection.selection import AntdTableRowSelectionSelection +from .tabs import AntdTabs +from .tabs.item import AntdTabsItem +from .tag import AntdTag +from .tag.checkable_tag import AntdTagCheckableTag +from .time_picker import AntdTimePicker +from .time_picker.range_picker import AntdTimePickerRangePicker +from .timeline import AntdTimeline +from .timeline.item import AntdTimelineItem +from .tooltip import AntdTooltip +from .tour import AntdTour +from .tour.step import AntdTourStep +from .transfer import AntdTransfer +from .tree import AntdTree +from .tree.directory_tree import AntdTreeDirectoryTree +from .tree.tree_node import AntdTreeTreeNode +from .tree_select import AntdTreeSelect +from .tree_select.tree_node import AntdTreeSelectTreeNode +from .typography import AntdTypography +from .typography.link import AntdTypographyLink +from .typography.paragraph import AntdTypographyParagraph +from .typography.text import AntdTypographyText +from .typography.title import AntdTypographyTitle +from .upload import AntdUpload +from .upload.dragger import AntdUploadDragger +from .watermark import AntdWatermark diff --git a/backend/modelscope_studio/components/antd/config_provider/__init__.py b/backend/modelscope_studio/components/antd/config_provider/__init__.py new file mode 100644 index 00000000..a378b514 --- /dev/null +++ b/backend/modelscope_studio/components/antd/config_provider/__init__.py @@ -0,0 +1,88 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdConfigProvider(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/config-provider + """ + EVENTS = [] + + # see https://ant.design/components/config-provider, pass slot like 'spin.indicator'. + SLOTS = ["renderEmpty"] + + def __init__(self, + props: dict | None = None, + *, + component_disabled: bool | None = None, + component_size: Literal['small', 'middle', 'large'] + | None = None, + csp: dict | None = None, + direction: Literal['ltr', 'rtl'] | None = None, + get_popup_container: str | None = None, + get_target_container: str | None = None, + icon_prefix_cls: str | None = None, + locale: str | None = None, + popup_match_select_width: bool | int | float | None = None, + popup_overflow: Literal['viewport', 'scroll'] | None = None, + prefix_cls: str | None = None, + render_empty: str | None = None, + theme: dict | None = None, + variant: Literal['outlined', 'filled', 'borderless'] + | None = None, + virtual: bool | None = None, + warning: dict | None = None, + as_item: str | None = None, + _internal: None = None, + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.component_disabled = component_disabled + self.component_size = component_size + self.csp = csp + self.direction = direction + self.get_popup_container = get_popup_container + self.get_target_container = get_target_container + self.icon_prefix_cls = icon_prefix_cls + self.locale = locale + self.popup_match_select_width = popup_match_select_width + self.popup_overflow = popup_overflow + self.prefix_cls = prefix_cls + self.render_empty = render_empty + self.theme = theme + self.variant = variant + self.virtual = virtual + self.warning = warning + + FRONTEND_DIR = resolve_frontend_dir("config-provider") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/date_picker/__init__.py b/backend/modelscope_studio/components/antd/date_picker/__init__.py new file mode 100644 index 00000000..022d5f81 --- /dev/null +++ b/backend/modelscope_studio/components/antd/date_picker/__init__.py @@ -0,0 +1,197 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .preset import AntdDatePickerPreset +from .range_picker import AntdDatePickerRangePicker + + +# aas inputs, outputs +class AntdDatePicker(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/date-picker + """ + Preset = AntdDatePickerPreset + RangePicker = AntdDatePickerRangePicker + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener( + "ok", + callback=lambda block: block._internal.update(bind_ok_event=True)), + EventListener("panel_change", + callback=lambda block: block._internal.update( + bind_panelChange_event=True)), + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'cellRender', + 'panelRender', + ] + + def __init__( + self, + value: str | int | float | list[str | int | float] | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict = True, + auto_focus: bool = False, + cell_render: str | None = None, + components: dict | None = None, + disabled: bool = False, + disabled_date: str | None = None, + format: str | list[str] | None = None, + order: bool = True, + preserve_invalid_on_blur: bool = False, + input_read_only: bool = False, + locale: dict | None = None, + mode: Literal['time', 'date', 'month', 'year', 'decade'] + | None = None, + need_confirm: bool | None = None, + next_icon: str | None = None, + open: bool | None = None, + panel_render: str | None = None, + picker: Literal['date', 'week', 'month', 'quarter', + 'year'] = 'date', + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] = 'bottomLeft', + placeholder: str | None = None, + popup_class_name: str | None = None, + popup_style: dict | None = None, + get_popup_container: str | None = None, + min_date: str | int | float | None = None, + max_date: str | int | float | None = None, + prev_icon: str | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + presets: list[dict] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + super_next_icon: str | None = None, + super_prev_icon: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + default_picker_value: str | int | float | None = None, + default_value: str | int | float | None = None, + disabled_time: str | None = None, + multiple: bool = False, + picker_value: str | int | float | None = None, + render_extra_footer: str | None = None, + show_now: bool | None = None, + show_time: bool | dict | None = None, + show_week: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.order = order + self.preserve_invalid_on_blur = preserve_invalid_on_blur + self.components = components + self.locale = locale + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.cell_render = cell_render + self.disabled = disabled + self.disabled_date = disabled_date + self.format = format + self.input_read_only = input_read_only + self.mode = mode + self.need_confirm = need_confirm + self.next_icon = next_icon + self.open = open + self.panel_render = panel_render + self.picker = picker + self.placement = placement + self.placeholder = placeholder + self.popup_class_name = popup_class_name + self.popup_style = popup_style + self.get_popup_container = get_popup_container + self.min_date = min_date + self.max_date = max_date + self.prev_icon = prev_icon + self.size = size + self.presets = presets + self.status = status + self.suffix_icon = suffix_icon + self.super_next_icon = super_next_icon + self.super_prev_icon = super_prev_icon + self.variant = variant + self.default_picker_value = default_picker_value + self.default_value = default_value + self.disabled_time = disabled_time + self.multiple = multiple + self.picker_value = picker_value + self.render_extra_footer = render_extra_footer + self.show_now = show_now + self.show_time = show_time + self.show_week = show_week + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("date-picker") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [{ + "type": "number" + }, { + "type": "string" + }, { + "type": "array", + "items": { + "anyOf": [{ + "type": "number" + }, { + "type": "string" + }] + } + }] + } + + def preprocess( + self, payload: str | int | float | list[str | int | float] + ) -> str | int | float | list[str | int | float]: + return payload + + def postprocess( + self, value: str | int | float | list[str | int | float] + ) -> str | int | float | list[str | int | float]: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/date_picker/preset/__init__.py b/backend/modelscope_studio/components/antd/date_picker/preset/__init__.py new file mode 100644 index 00000000..1f8b2493 --- /dev/null +++ b/backend/modelscope_studio/components/antd/date_picker/preset/__init__.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdDatePickerPreset(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/date-picker + """ + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + props: dict | None = None, + *, + value: int | str | float | None = None, + label: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.label = label + self.value = value + + FRONTEND_DIR = resolve_frontend_dir("date-picker", 'preset') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py b/backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py new file mode 100644 index 00000000..41a59066 --- /dev/null +++ b/backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py @@ -0,0 +1,188 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdDatePickerRangePicker(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/date-picker + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener( + "calendar_change", + callback=lambda block: block._internal.update(bind_ok_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_calendarChange_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'separator', + 'cellRender', + 'panelRender', + ] + + def __init__( + self, + value: tuple[str | int | float, str | int | float] | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict = True, + auto_focus: bool = False, + cell_render: str | None = None, + components: dict | None = None, + disabled: bool = False, + disabled_date: str | None = None, + format: str | list[str] | None = None, + order: bool = True, + preserve_invalid_on_blur: bool = False, + input_read_only: bool = False, + locale: dict | None = None, + mode: Literal['time', 'date', 'month', 'year', 'decade'] + | None = None, + need_confirm: bool | None = None, + next_icon: str | None = None, + open: bool | None = None, + panel_render: str | None = None, + picker: Literal['date', 'week', 'month', 'quarter', + 'year'] = 'date', + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] = 'bottomLeft', + placeholder: str | None = None, + popup_class_name: str | None = None, + popup_style: dict | None = None, + get_popup_container: str | None = None, + min_date: str | int | float | None = None, + max_date: str | int | float | None = None, + prev_icon: str | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + presets: list[dict] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + super_next_icon: str | None = None, + super_prev_icon: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + allow_empty: tuple[bool, bool] | None = None, + default_picker_value: str | int | float | None = None, + default_value: str | int | float | None = None, + disabled_time: str | None = None, + id: dict | None = None, + picker_value: str | int | float | None = None, + render_extra_footer: str | None = None, + show_time: bool | dict | None = None, + separator: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.order = order + self.preserve_invalid_on_blur = preserve_invalid_on_blur + self.components = components + self.locale = locale + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.cell_render = cell_render + self.disabled = disabled + self.disabled_date = disabled_date + self.format = format + self.input_read_only = input_read_only + self.mode = mode + self.need_confirm = need_confirm + self.next_icon = next_icon + self.open = open + self.panel_render = panel_render + self.picker = picker + self.placement = placement + self.placeholder = placeholder + self.popup_class_name = popup_class_name + self.popup_style = popup_style + self.get_popup_container = get_popup_container + self.min_date = min_date + self.max_date = max_date + self.prev_icon = prev_icon + self.size = size + self.presets = presets + self.status = status + self.suffix_icon = suffix_icon + self.super_next_icon = super_next_icon + self.super_prev_icon = super_prev_icon + self.variant = variant + self.allow_empty = allow_empty + self.default_picker_value = default_picker_value + self.default_value = default_value + self.disabled_time = disabled_time + self.id = id + self.picker_value = picker_value + self.render_extra_footer = render_extra_footer + self.show_time = show_time + self.separator = separator + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("date-picker", 'range-picker') + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "type": "array", + "items": { + "anyOf": [{ + "type": "number" + }, { + "type": "string" + }] + } + } + + def preprocess( + self, payload: tuple[str | int | float, str | int | float] + ) -> tuple[str | int | float, str | int | float]: + return payload + + def postprocess( + self, value: tuple[str | int | float, str | int | float] + ) -> tuple[str | int | float, str | int | float]: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/descriptions/__init__.py b/backend/modelscope_studio/components/antd/descriptions/__init__.py new file mode 100644 index 00000000..194cc71d --- /dev/null +++ b/backend/modelscope_studio/components/antd/descriptions/__init__.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdDescriptionsItem + + +class AntdDescriptions(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/descriptions + """ + Item = AntdDescriptionsItem + + EVENTS = [] + + # supported slots + SLOTS = ['extra', 'title', "items"] + + def __init__( + self, + props: dict | None = None, + *, + bordered: bool = False, + colon: bool = True, + column: int | dict | None = 3, + content_style: dict | None = None, + extra: str | None = None, + layout: Literal['horizontal', 'vertical'] = 'horizontal', + size: Literal['default', 'middle', 'small'] | None = None, + title: str | None = None, + items: list[dict] | None = None, + label_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.title = title + self.items = items + self.bordered = bordered + self.colon = colon + self.column = column + self.content_style = content_style + self.extra = extra + self.layout = layout + self.size = size + self.root_class_name = root_class_name + self.label_style = label_style + + FRONTEND_DIR = resolve_frontend_dir("descriptions") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/descriptions/item/__init__.py b/backend/modelscope_studio/components/antd/descriptions/item/__init__.py new file mode 100644 index 00000000..a4b3643f --- /dev/null +++ b/backend/modelscope_studio/components/antd/descriptions/item/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdDescriptionsItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/descriptions + """ + + EVENTS = [] + + # supported slots + SLOTS = ['label', 'children'] + + def __init__( + self, + label: str | None = "", + props: dict | None = None, + *, + content_style: dict | None = None, + label_style: dict | None = None, + span: int | dict | None = 1, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.label = label + self.span = span + self.content_style = content_style + self.label_style = label_style + + FRONTEND_DIR = resolve_frontend_dir("descriptions", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/divider/__init__.py b/backend/modelscope_studio/components/antd/divider/__init__.py new file mode 100644 index 00000000..985dd34d --- /dev/null +++ b/backend/modelscope_studio/components/antd/divider/__init__.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdDivider(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/divider + + A divider line separates different content. + + When to use: + - Divide sections of an article. + - Divide inline text and links such as the operation column of table. + """ + + EVENTS = [] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + dashed: bool = False, + variant: Literal["dashed", "dotted", "solid"] = "solid", + orientation: Literal["left", "right", "center"] = "center", + orientation_margin: str | int | float | None = None, + plain: bool = False, + type: Literal["horizontal", "vertical"] = "horizontal", + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + value: The wrapped title. + dashed: Whether line is dashed. + variant: Whether line is dashed, dotted or solid. + orientation: The position of title inside divider. + orientation_margin: The margin-left/right between the title and its closest border, while the orientation must be left or right, If a numeric value of type string is provided without a unit, it is assumed to be in pixels (px) by default. + plain: Divider text show as plain style. + type: The direction type of divider. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.dashed = dashed + self.variant = variant + self.orientation = orientation + self.orientation_margin = orientation_margin + self.plain = plain + self.type = type + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("divider") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/drawer/__init__.py b/backend/modelscope_studio/components/antd/drawer/__init__.py new file mode 100644 index 00000000..7128b003 --- /dev/null +++ b/backend/modelscope_studio/components/antd/drawer/__init__.py @@ -0,0 +1,114 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdDrawer(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/drawer + """ + EVENTS = [ + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['closeIcon', 'extra', 'footer', 'title', 'drawerRender'] + + def __init__( + self, + props: dict | None = None, + *, + after_open_change: str | None = None, + auto_focus: bool | None = None, + body_style: dict | None = None, + close_icon: str | None = None, + class_names: dict | None = None, + destroy_on_close: bool | None = None, + extra: str | None = None, + footer: str | None = None, + force_render: bool | None = None, + get_container: str | None = None, + height: int | float | str | None = None, + keyboard: bool | None = None, + mask: bool | None = None, + mask_closable: bool | None = None, + placement: Literal['left', 'right', 'top', 'bottom'] | None = None, + push: bool | dict | None = None, + size: Literal['default', 'large'] | None = None, + styles: dict | None = None, + title: str | None = None, + loading: bool | None = None, + open: bool | None = None, + width: int | float | None = None, + z_index: int | None = None, + drawer_render: str | None = None, + root_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.after_open_change = after_open_change + self.auto_focus = auto_focus + self.body_style = body_style + self.close_icon = close_icon + self.class_names = class_names + self.destroy_on_close = destroy_on_close + self.extra = extra + self.footer = footer + self.force_render = force_render + self.get_container = get_container + self.height = height + self.keyboard = keyboard + self.mask = mask + self.mask_closable = mask_closable + self.placement = placement + self.push = push + self.size = size + self.styles = styles + self.title = title + self.loading = loading + self.open = open + self.width = width + self.z_index = z_index + self.drawer_render = drawer_render + self.root_style = root_style + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("drawer") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/dropdown/__init__.py b/backend/modelscope_studio/components/antd/dropdown/__init__.py new file mode 100644 index 00000000..6dce67da --- /dev/null +++ b/backend/modelscope_studio/components/antd/dropdown/__init__.py @@ -0,0 +1,110 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .button import AntdDropdownButton + + +class AntdDropdown(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/dropdown + """ + Button = AntdDropdownButton + EVENTS = [ + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("menu_click", + callback=lambda block: block._internal.update( + bind_menu_click_event=True)), + EventListener("menu_deselect", + callback=lambda block: block._internal.update( + bind_menu_deselect_event=True)), + EventListener("menu_open_change", + callback=lambda block: block._internal.update( + bind_menu_openChange_event=True)), + EventListener("menu_select", + callback=lambda block: block._internal.update( + bind_menu_select_event=True)), + ] + + # supported slots + SLOTS = [ + "menu.expandIcon", 'menu.overflowedIndicator', "menu.items", + "dropdownRender" + ] + + def __init__( + self, + props: dict | None = None, + *, + arrow: dict | bool = False, + auto_adjust_overflow: bool = True, + auto_focus: bool = False, + disabled: bool | None = None, + destroy_popup_on_hide: bool = False, + dropdown_render: str | None = None, + get_popup_container: str | None = None, + menu: dict | None = None, + overlay_class_name: str | None = None, + overlay_style: dict | None = None, + placement: Literal['topLeft', 'top', 'topRight', 'bottomLeft', + 'bottom', 'bottomRight'] = "bottomLeft", + trigger: list[Literal['click', 'hover', + 'contextMenu']] = ['hover'], + open: bool | None = None, + inner_elem_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.arrow = arrow + self.auto_adjust_overflow = auto_adjust_overflow + self.auto_focus = auto_focus + self.disabled = disabled + self.destroy_popup_on_hide = destroy_popup_on_hide + self.dropdown_render = dropdown_render + self.get_popup_container = get_popup_container + self.menu = menu + self.overlay_class_name = overlay_class_name + self.overlay_style = overlay_style + self.placement = placement + self.trigger = trigger + self.open = open + self.inner_elem_style = inner_elem_style + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("dropdown") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/dropdown/button/__init__.py b/backend/modelscope_studio/components/antd/dropdown/button/__init__.py new file mode 100644 index 00000000..4bc50154 --- /dev/null +++ b/backend/modelscope_studio/components/antd/dropdown/button/__init__.py @@ -0,0 +1,126 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdDropdownButton(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/dropdown + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("menu_click", + callback=lambda block: block._internal.update( + bind_menu_click_event=True)), + EventListener("menu_deselect", + callback=lambda block: block._internal.update( + bind_menu_deselect_event=True)), + EventListener("menu_open_change", + callback=lambda block: block._internal.update( + bind_menu_openChange_event=True)), + EventListener("menu_select", + callback=lambda block: block._internal.update( + bind_menu_select_event=True)), + ] + + # supported slots + SLOTS = [ + "icon", 'dropdownRender', 'buttonsRender', "menu.expandIcon", + 'menu.overflowedIndicator', "menu.items" + ] + + def __init__( + self, + value: str | None = "Run", + props: dict | None = None, + *, + arrow: dict | bool = False, + auto_adjust_overflow: bool = True, + auto_focus: bool = False, + disabled: bool | None = None, + destroy_popup_on_hide: bool = False, + dropdown_render: str | None = None, + get_popup_container: str | None = None, + menu: dict | None = None, + overlay_class_name: str | None = None, + overlay_style: dict | None = None, + placement: Literal['topLeft', 'top', 'topRight', 'bottomLeft', + 'bottom', 'bottomRight'] = "bottomLeft", + trigger: list[Literal['click', 'hover', + 'contextMenu']] = ['hover'], + open: bool | None = None, + buttons_render: str | None = None, + loading: bool | dict = False, + danger: bool | None = None, + icon: str | None = None, + size: Literal["large", "middle", "small"] | None = None, + type: Literal["primary", "dashed", "link", "text", "default"] + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.arrow = arrow + self.auto_adjust_overflow = auto_adjust_overflow + self.auto_focus = auto_focus + self.disabled = disabled + self.destroy_popup_on_hide = destroy_popup_on_hide + self.dropdown_render = dropdown_render + self.get_popup_container = get_popup_container + self.menu = menu + self.overlay_class_name = overlay_class_name + self.overlay_style = overlay_style + self.placement = placement + self.trigger = trigger + self.open = open + self.buttons_render = buttons_render + self.loading = loading + self.danger = danger + self.icon = icon + self.size = size + self.type = type + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("dropdown", "button") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Run" + + def example_value(self) -> Any: + return "Run" diff --git a/backend/modelscope_studio/components/antd/empty/__init__.py b/backend/modelscope_studio/components/antd/empty/__init__.py new file mode 100644 index 00000000..c4065120 --- /dev/null +++ b/backend/modelscope_studio/components/antd/empty/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdEmpty(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/empty + """ + + EVENTS = [] + + # supported slots + SLOTS = ['description', 'image'] + + def __init__( + self, + props: dict | None = None, + *, + description: str | None = None, + image: str | None = None, + image_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.description = description + self.image = image + self.image_style = image_style + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("empty") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/flex/__init__.py b/backend/modelscope_studio/components/antd/flex/__init__.py new file mode 100644 index 00000000..82ecbb57 --- /dev/null +++ b/backend/modelscope_studio/components/antd/flex/__init__.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdFlex(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/flex + + A flex layout container for alignment. + + When to use: + - Good for setting spacing between elements. + - Suitable for setting various horizontal and vertical alignments. + """ + + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + vertical: bool = False, + wrap: Literal['nowrap', 'wrap', 'wrap-reverse'] | bool = "nowrap", + justify: Literal['normal', 'start', 'end', 'flex-start', + 'flex-end', 'center', 'left', 'right', + 'space-between', 'space-around', 'space-evenly', + 'stretch', 'safe', 'unsafe'] | None = "normal", + align: Literal['normal', 'start', 'end', 'flex-start', 'flex-end', + 'center', 'self-start', 'self-end', 'baseline', + 'unsafe', 'stretch'] | None = "normal", + flex: str | None = "normal", + gap: Literal["small", "middle", "large"] | str | int | float + | None = None, + component: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + vertical: Is direction of the flex vertical, use flex-direction: column. + wrap: Set whether the element is displayed in a single line or in multiple lines. + justify: Sets the alignment of elements in the direction of the main axis. + align: Sets the alignment of elements in the direction of the cross axis. + flex: flex CSS shorthand properties. + gap: Sets the gap between grids. + component: custom element type. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.vertical = vertical + self.wrap = wrap + self.justify = justify + self.align = align + self.flex = flex + self.gap = gap + self.component = component + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("flex") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/float_button/__init__.py b/backend/modelscope_studio/components/antd/float_button/__init__.py new file mode 100644 index 00000000..cde90212 --- /dev/null +++ b/backend/modelscope_studio/components/antd/float_button/__init__.py @@ -0,0 +1,105 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .back_top import AntdFloatButtonBackTop +from .group import AntdFloatButtonGroup + + +class AntdFloatButton(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/float-button + + A button that floats at the top of the page. + + When to use: + - For global functionality on the site. + - Buttons that can be seen wherever you browse. + """ + BackTop = AntdFloatButtonBackTop + Group = AntdFloatButtonGroup + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle `click` event.") + ] + + # supported slots + SLOTS = ['icon', 'description', 'tooltip', 'badge.count'] + + def __init__( + self, + props: dict | None = None, + *, + icon: str | None = None, + description: str | None = None, + tooltip: str | None = None, + type: Literal['default', 'primary'] = 'default', + shape: Literal['circle', 'square'] = 'circle', + href: str | None = None, + href_target: str | None = None, + html_type: Literal['submit', 'reset', 'button'] | None = 'button', + badge: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + icon: Set the icon component of button. + description: Text and other. + tooltip: The text shown in the tooltip. + type: Setting button type. + shape: Setting button shape. + href_target: The target of hyperlink. + target: Specifies where to display the linked URL string. + htmlType: Set the original html type of button. + badge: Attach Badge to FloatButton. status and other props related are not supported. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.icon = icon + self.description = description + self.tooltip = tooltip + self.type = type + self.shape = shape + self.href = href + self.href_target = href_target + self.html_type = html_type + self.badge = badge + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("float-button") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/float_button/back_top/__init__.py b/backend/modelscope_studio/components/antd/float_button/back_top/__init__.py new file mode 100644 index 00000000..427fb7c1 --- /dev/null +++ b/backend/modelscope_studio/components/antd/float_button/back_top/__init__.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdFloatButtonBackTop(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/float-button + + A button that floats at the top of the page. + + When to use: + - For global functionality on the site. + - Buttons that can be seen wherever you browse. + """ + + EVENTS = [ + EventListener( + "click", + callback=lambda block: block._internal.update(bind_click_event=True + ), + doc= + "A callback function, which can be executed when you click the button." + ) + ] + + # supported slots + SLOTS = ['icon', 'description', 'tooltip', 'badge.count'] + + def __init__( + self, + props: dict | None = None, + *, + icon: str | None = None, + description: str | None = None, + tooltip: str | None = None, + type: Literal['default', 'primary'] = 'default', + shape: Literal['circle', 'square'] = 'circle', + href: str | None = None, + html_type: Literal['submit', 'reset', 'button'] | None = 'button', + badge: dict | None = None, + duration: int | float = 450, + get_target: str | None = None, + visibility_height: int | float = 400, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + icon: Set the icon component of button. + description: Text and other. + tooltip: The text shown in the tooltip. + type: Setting button type. + shape: Setting button shape. + target: Specifies where to display the linked URL string. + htmlType: Set the original html type of button. + badge: Attach Badge to FloatButton. status and other props related are not supported. + duration: Time to return to top(ms). + get_target: Specifies the scrollable area dom node. + visibility_height: The BackTop button will not show until the scroll height reaches this value. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.icon = icon + self.description = description + self.tooltip = tooltip + self.type = type + self.shape = shape + self.href = href + self.html_type = html_type + self.badge = badge + self.duration = duration + self.visibility_height = visibility_height + self.get_target = get_target + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("float-button", "back-top") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/float_button/group/__init__.py b/backend/modelscope_studio/components/antd/float_button/group/__init__.py new file mode 100644 index 00000000..d03ddd28 --- /dev/null +++ b/backend/modelscope_studio/components/antd/float_button/group/__init__.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdFloatButtonGroup(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/float-button + + A button that floats at the top of the page. + + When to use: + - For global functionality on the site. + - Buttons that can be seen wherever you browse. + """ + EVENTS = [ + EventListener( + "click", + callback=lambda block: block._internal.update(bind_click_event=True + ), + doc= + "Set the handler to handle click event (only work in Menu mode)."), + EventListener( + "open_change", + callback=lambda block: block._internal.update(bind_openChange_event + =True), + doc= + "Callback executed when active menu is changed, use it with trigger." + ) + ] + + # supported slots + SLOTS = ['icon', 'closeIcon', 'description', 'tooltip', 'badge.count'] + + def __init__( + self, + props: dict | None = None, + *, + icon: str | None = None, + description: str | None = None, + tooltip: str | None = None, + type: Literal['default', 'primary'] = 'default', + shape: Literal['circle', 'square'] = 'circle', + href: str | None = None, + href_target: str | None = None, + html_type: Literal['submit', 'reset', 'button'] | None = 'button', + badge: dict | None = None, + trigger: Literal['hover', 'click'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + open: bool | None = None, + close_icon: str | None = None, + placement: Literal['left', 'right', 'top', 'bottom'] + | None = 'top', + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + icon: Set the icon component of button. + description: Text and other. + tooltip: The text shown in the tooltip. + type: Setting button type. + shape: Setting button shape. + href_target: The target of hyperlink. + target: Specifies where to display the linked URL string. + htmlType: Set the original html type of button. + badge: Attach Badge to FloatButton. status and other props related are not supported. + trigger: Which action can trigger menu open/close. + open: Whether the menu is visible or not, use it with trigger. + closeIcon: Customize close button icon. + placement: Customize menu animation placement. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.icon = icon + self.description = description + self.tooltip = tooltip + self.type = type + self.shape = shape + self.href = href + self.href_target = href_target + self.html_type = html_type + self.badge = badge + self.trigger = trigger + self.open = open + self.close_icon = close_icon + self.placement = placement + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("float-button", "group") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/form/__init__.py b/backend/modelscope_studio/components/antd/form/__init__.py new file mode 100644 index 00000000..93fce2c0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/form/__init__.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Literal, Union + +from gradio.data_classes import GradioRootModel +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .item import AntdFormItem + + +class AntdFormData(GradioRootModel): + root: Union[dict, None] = None + + +class AntdForm(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/form + """ + Item = AntdFormItem + EVENTS = [ + EventListener("fields_change", + callback=lambda block: block._internal.update( + bind_fieldsChange_event=True)), + EventListener("finish", + callback=lambda block: block._internal.update( + bind_finish_event=True)), + EventListener("finish_failed", + callback=lambda block: block._internal.update( + bind_finishFailed_event=True)), + EventListener("values_change", + callback=lambda block: block._internal.update( + bind_valuesChange_event=True)), + ] + + data_model = AntdFormData + + # supported slots + SLOTS = ["requiredMark"] + + def __init__( + self, + value: dict | None = None, + props: dict | None = None, + *, + colon: bool = True, + disabled: bool = False, + component: str | False | None = None, + feedback_icons: str | None = None, + initial_values: dict | None = None, + label_align: Literal['left', 'right'] = 'right', + label_col: dict | None = None, + label_wrap: bool = False, + layout: Literal['horizontal', 'vertical', 'inline'] = 'horizontal', + form_name: str | None = None, + preserve: bool = True, + required_mark: bool | Literal['optional'] | str | None = None, + scroll_to_first_error: bool | dict = False, + size: Literal['small', 'middle', 'large'] | None = None, + validate_messages: dict | None = None, + validate_trigger: str | list[str] = 'onChange', + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + wrapper_col: dict | None = None, + clear_on_destroy: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.colon = colon + self.disabled = disabled + self.component = component + self.feedback_icons = feedback_icons + self.initial_values = initial_values + self.label_align = label_align + self.label_col = label_col + self.label_wrap = label_wrap + self.layout = layout + self.form_name = form_name + self.preserve = preserve + self.required_mark = required_mark + self.scroll_to_first_error = scroll_to_first_error + self.size = size + self.validate_messages = validate_messages + self.validate_trigger = validate_trigger + self.variant = variant + self.wrapper_col = wrapper_col + self.clear_on_destroy = clear_on_destroy + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("form") + + @property + def skip_api(self): + return False + + def preprocess(self, payload: dict | AntdFormData | None) -> dict | None: + if isinstance(payload, AntdFormData): + return payload.root + return payload + + def postprocess(self, value: dict | None) -> dict | None: + return value + + def example_payload(self) -> dict: + return {} + + def example_value(self) -> dict: + return {} diff --git a/backend/modelscope_studio/components/antd/form/item/__init__.py b/backend/modelscope_studio/components/antd/form/item/__init__.py new file mode 100644 index 00000000..465185ac --- /dev/null +++ b/backend/modelscope_studio/components/antd/form/item/__init__.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .rule import AntdFormItemRule + + +class AntdFormItem(ModelScopeLayoutComponent): + """ + """ + Rule = AntdFormItemRule + EVENTS = [] + + # supported slots + SLOTS = [ + 'extra', 'help', 'label', 'tooltip', 'tooltip.title', 'tooltip.icon' + ] + + def __init__( + self, + label: str | None = None, + props: dict | None = None, + *, + form_name: str | int | float | list[str | int | float] + | None = None, + colon: bool | None = None, + dependencies: list[str | int | float | list[str | int | float]] + | None = None, + extra: str | None = None, + get_value_from_event: str | None = None, + get_value_props: str | None = None, + has_feedback: bool | dict = False, + help: str | None = None, + hidden: bool = False, + html_for: str | None = None, + initial_value: str | int | float | list | dict | None = None, + label_align: str | None = None, + label_col: dict | None = None, + message_variants: dict | None = None, + normalize: str | None = None, + no_style: bool = False, + preserve: bool = True, + required: bool = False, + rules: list[dict] | None = None, + should_update: str | None = None, + tooltip: str | dict | None = None, + trigger: str | list[str] = 'onChange', + validate_debounce: int | float | None = None, + validate_first: bool | Literal['parallel'] = False, + validate_status: Literal['error', 'success', 'warning', + 'validating'] + | None = None, + validate_trigger: str | list[str] = 'onChange', + value_prop_name: str | None = None, + wrapper_col: dict | None = None, + layout: Literal['horizontal', 'vertical'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.label = label + self.form_name = form_name + self.props = props + self.colon = colon + self.dependencies = dependencies + self.extra = extra + self.get_value_from_event = get_value_from_event + self.get_value_props = get_value_props + self.has_feedback = has_feedback + self.help = help + self.hidden = hidden + self.html_for = html_for + self.initial_value = initial_value + self.label_align = label_align + self.label_col = label_col + self.message_variants = message_variants + self.normalize = normalize + self.no_style = no_style + self.preserve = preserve + self.required = required + self.rules = rules + self.should_update = should_update + self.tooltip = tooltip + self.trigger = trigger + self.validate_debounce = validate_debounce + self.validate_first = validate_first + self.validate_status = validate_status + self.validate_trigger = validate_trigger + self.value_prop_name = value_prop_name + self.wrapper_col = wrapper_col + self.layout = layout + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("form", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/form/item/rule/__init__.py b/backend/modelscope_studio/components/antd/form/item/rule/__init__.py new file mode 100644 index 00000000..787eb4dc --- /dev/null +++ b/backend/modelscope_studio/components/antd/form/item/rule/__init__.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from ......utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdFormItemRule(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/dropdown + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + default_field: dict | str | None = None, + enum: list | None = None, + fields: dict | None = None, + len: int | None = None, + max: int | float | None = None, + message: str | None = None, + min: int | float | None = None, + pattern: str | None = None, + required: bool | None = None, + transform: str | None = None, + type: str | None = None, + validator_trigger: str | list[str] | None = None, + validator: str | None = None, + warning_only: bool | None = None, + whitespace: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.default_field = default_field + self.enum = enum + self.fields = fields + self.len = len + self.max = max + self.message = message + self.min = min + self.pattern = pattern + self.required = required + self.transform = transform + self.type = type + self.validator_trigger = validator_trigger + self.validator = validator + self.warning_only = warning_only + self.whitespace = whitespace + + FRONTEND_DIR = resolve_frontend_dir("form", ["item", "rule"]) + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/grid/col/__init__.py b/backend/modelscope_studio/components/antd/grid/col/__init__.py new file mode 100644 index 00000000..824f1141 --- /dev/null +++ b/backend/modelscope_studio/components/antd/grid/col/__init__.py @@ -0,0 +1,109 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdCol(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/grid + + 24 Grids System. + + In the grid system, we define the frame outside the information area based on row and column, to ensure that every area can have stable arrangement. + + Following is a brief look at how it works: + + - Establish a set of column in the horizontal space defined by row (abbreviated col). + - Your content elements should be placed directly in the col, and only col should be placed directly in row. + - The column grid system is a value of 1-24 to represent its range spans. For example, three columns of equal width can be created by . + - If the sum of col spans in a row are more than 24, then the overflowing col as a whole will start a new line arrangement. + + Our grid systems base on Flex layout to allow the elements within the parent to be aligned horizontally - left, center, right, wide arrangement, and decentralized arrangement. The Grid system also supports vertical alignment - top aligned, vertically centered, bottom-aligned. You can also define the order of elements by using order. + + Layout uses a 24 grid layout to define the width of each "box", but does not rigidly adhere to the grid layout. + """ + + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + flex: str | int | None = None, + offset: int = 0, + order: int = 0, + pull: int = 0, + push: int = 0, + span: int | None = None, + xs: int | dict | None = None, + sm: int | dict | None = None, + md: int | dict | None = None, + lg: int | dict | None = None, + xl: int | dict | None = None, + xxl: int | dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + flex: Flex layout style. + offset: The number of cells to offset Col from the left. + order: Raster order. + pull: The number of cells that raster is moved to the left. + push: The number of cells that raster is moved to the right. + span: Raster number of cells to occupy, 0 corresponds to display: none. + xs: screen < 576px and also default setting, could be a span value or an object containing above props. + sm: screen ≥ 576px, could be a span value or an object containing above props. + md: screen ≥ 768px, could be a span value or an object containing above props. + lg: screen ≥ 992px, could be a span value or an object containing above props. + xl: screen ≥ 1200px, could be a span value or an object containing above props. + xxl: screen ≥ 1600px, could be a span value or an object containing above props. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.flex = flex + self.offset = offset + self.order = order + self.pull = pull + self.push = push + self.span = span + self.xs = xs + self.sm = sm + self.md = md + self.lg = lg + self.xl = xl + self.xxl = xxl + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("grid", 'col') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/grid/row/__init__.py b/backend/modelscope_studio/components/antd/grid/row/__init__.py new file mode 100644 index 00000000..be0febe6 --- /dev/null +++ b/backend/modelscope_studio/components/antd/grid/row/__init__.py @@ -0,0 +1,89 @@ +from __future__ import annotations + +from typing import Any, Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdRow(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/grid + + 24 Grids System. + + In the grid system, we define the frame outside the information area based on row and column, to ensure that every area can have stable arrangement. + + Following is a brief look at how it works: + + - Establish a set of column in the horizontal space defined by row (abbreviated col). + - Your content elements should be placed directly in the col, and only col should be placed directly in row. + - The column grid system is a value of 1-24 to represent its range spans. For example, three columns of equal width can be created by . + - If the sum of col spans in a row are more than 24, then the overflowing col as a whole will start a new line arrangement. + + Our grid systems base on Flex layout to allow the elements within the parent to be aligned horizontally - left, center, right, wide arrangement, and decentralized arrangement. The Grid system also supports vertical alignment - top aligned, vertically centered, bottom-aligned. You can also define the order of elements by using order. + + Layout uses a 24 grid layout to define the width of each "box", but does not rigidly adhere to the grid layout. + """ + + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + align: Literal["top", "middle", "bottom", "stretch"] + | dict[str, Literal["top", "middle", "bottom", "stretch"]] = "top", + gutter: int | dict | list[int] = 0, + justify: Literal["start", "end", "center", "space-between", + 'space-around', 'space-evenly'] + | dict[str, Literal["start", "end", "center", "space-between", + 'space-around', 'space-evenly']] = "start", + wrap: bool = True, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + align: Vertical alignment. + gutter: Spacing between grids, could be a number or a object like { xs: 8, sm: 16, md: 24}. Or you can use array to make horizontal and vertical spacing work at the same time [horizontal, vertical]. + justify: Horizontal arrangement. + wrap: Auto wrap line. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.align = align + self.gutter = gutter + self.justify = justify + self.wrap = wrap + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("grid", 'row') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/icon/__init__.py b/backend/modelscope_studio/components/antd/icon/__init__.py new file mode 100644 index 00000000..a59b0cf7 --- /dev/null +++ b/backend/modelscope_studio/components/antd/icon/__init__.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeComponent, resolve_frontend_dir +from .iconfont_provider import AntdIconIconfontProvider + + +class AntdIcon(ModelScopeComponent): + """ + Ant Design: https://ant.design/components/icon + + Semantic vector graphics. + """ + + IconfontProvider = AntdIconIconfontProvider + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: str | None = "GithubOutlined", + props: dict | None = None, + *, + spin: bool = False, + rotate: int | float | None = None, + two_tone_color: str | None = None, + component: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + rotate: Rotate by n degrees (not working in IE9). + spin: Rotate icon with animation. + two_tone_color: Only supports the two-tone icon. Specify the primary color. + component: The component used for the root node. + """ + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.spin = spin + self.rotate = rotate + self.component = component + self.two_tone_color = two_tone_color + + FRONTEND_DIR = resolve_frontend_dir("icon") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> str: + return "GithubOutlined" + + def example_value(self) -> str: + return "GithubOutlined" diff --git a/backend/modelscope_studio/components/antd/icon/iconfont_provider/__init__.py b/backend/modelscope_studio/components/antd/icon/iconfont_provider/__init__.py new file mode 100644 index 00000000..d6445020 --- /dev/null +++ b/backend/modelscope_studio/components/antd/icon/iconfont_provider/__init__.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdIconIconfontProvider(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/icon + + Semantic vector graphics. + + A component to help developer use their own icons deployed at https://iconfont.cn in a convenient way. + """ + EVENTS = [] + + # supported slots + SLOTS = [] + + def __init__( + self, + script_url: str | list[str] | None = None, + props: dict | None = None, + *, + extra_common_props: dict | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + render: bool = True, + **kwargs): + """ + Parameters: + script_url: The URL generated by https://iconfont.cn project. + extra_common_props: Define extra properties to the component. + """ + super().__init__(visible=visible, + render=render, + as_item=as_item, + **kwargs) + self.script_url = script_url + self.extra_common_props = extra_common_props + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("icon", "iconfont-provider") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return "GithubOutlined" + + def example_value(self) -> None: + return "GithubOutlined" diff --git a/backend/modelscope_studio/components/antd/image/__init__.py b/backend/modelscope_studio/components/antd/image/__init__.py new file mode 100644 index 00000000..81f84466 --- /dev/null +++ b/backend/modelscope_studio/components/antd/image/__init__.py @@ -0,0 +1,115 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Any, Union + +from gradio import processing_utils +from gradio.data_classes import FileData, GradioRootModel +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .preview_group import AntdImagePreviewGroup + + +class AntdImageData(GradioRootModel): + root: Union[FileData, str] + + +class AntdImage(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/image + """ + PreviewGroup = AntdImagePreviewGroup + + EVENTS = [ + EventListener("error", + callback=lambda block: block._internal.update( + bind_error_event=True)), + EventListener("preview_transform", + callback=lambda block: block._internal.update( + bind_preview_transform_event=True)), + EventListener("preview_visible_change", + callback=lambda block: block._internal.update( + bind_preview_visibleChange_event=True)) + ] + + # supported slots + SLOTS = [ + 'placeholder', + 'preview.mask', + 'preview.closeIcon', + 'preview.toolbarRender', + 'preview.imageRender', + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + alt: str | None = None, + fallback: str | None = None, + height: str | int | float | None = None, + placeholder: bool | str | int | float | None = None, + preview: bool | dict | None = True, + width: str | int | float | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.alt = alt + self.fallback = fallback + self.height = height + self.placeholder = placeholder + self.preview = preview + self.width = width + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("image") + + data_model = AntdImageData + + @property + def skip_api(self): + return True + + def preprocess( + self, + payload: str | AntdImageData | None) -> str | AntdImageData | None: + if isinstance(payload, AntdImageData): + value = payload.root + if isinstance(value, FileData): + return value.path + return value + return payload + + def postprocess(self, value: str | None) -> str | None: + if value is None: + return None + if value.startswith("http") or value.startswith("data"): + return AntdImageData(root=value) + file = processing_utils.move_resource_to_block_cache(value, self) + return AntdImageData(root=FileData(path=file, + orig_name=Path(file).name, + size=Path(file).stat().st_size)) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/image/preview_group/__init__.py b/backend/modelscope_studio/components/antd/image/preview_group/__init__.py new file mode 100644 index 00000000..be1d218e --- /dev/null +++ b/backend/modelscope_studio/components/antd/image/preview_group/__init__.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdImagePreviewGroup(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/image + """ + EVENTS = [ + EventListener("preview_transform", + callback=lambda block: block._internal.update( + bind_preview_transform_event=True)), + EventListener("preview_change", + callback=lambda block: block._internal.update( + bind_preview_change_event=True)), + EventListener("preview_visible_change", + callback=lambda block: block._internal.update( + bind_preview_visibleChange_event=True)) + ] + # supported slots + SLOTS = ['preview.mask', 'preview.closeIcon'] + + def __init__( + self, + items: list[dict | str] | None = None, + props: dict | None = None, + *, + preview: bool | dict | None = True, + fallback: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.items = items + self.preview = preview + self.fallback = fallback + + FRONTEND_DIR = resolve_frontend_dir("image", 'preview-group') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input/__init__.py b/backend/modelscope_studio/components/antd/input/__init__.py new file mode 100644 index 00000000..6c1ce97a --- /dev/null +++ b/backend/modelscope_studio/components/antd/input/__init__.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener +from typing_extensions import Literal + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .otp import AntdInputOTP +from .password import AntdInputPassword +from .search import AntdInputSearch +from .textarea import AntdInputTextarea + + +# as inputs, outputs +class AntdInput(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input + """ + Textarea = AntdInputTextarea + Password = AntdInputPassword + OTP = AntdInputOTP + Search = AntdInputSearch + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("press_enter", + callback=lambda block: block._internal.update( + bind_pressEnter_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + ] + + # supported slots + SLOTS = [ + 'addonAfter', 'addonBefore', 'allowClear.clearIcon', 'prefix', + 'suffix', 'showCount.formatter' + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + addon_after: str | None = None, + addon_before: str | None = None, + allow_clear: bool | dict | None = None, + class_names: dict | None = None, + count: dict | None = None, + default_value: str | None = None, + disabled: bool = False, + max_length: int | None = None, + prefix: str | None = None, + show_count: bool | dict = False, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + styles: dict | None = None, + suffix: str | None = None, + type: str | None = 'text', + placeholder: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.addon_after = addon_after + self.addon_before = addon_before + self.allow_clear = allow_clear + self.class_names = class_names + self.count = count + self.default_value = default_value + self.disabled = disabled + self.max_length = max_length + self.prefix = prefix + self.show_count = show_count + self.size = size + self.status = status + self.styles = styles + self.suffix = suffix + self.type = type + self.placeholder = placeholder + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input/otp/__init__.py b/backend/modelscope_studio/components/antd/input/otp/__init__.py new file mode 100644 index 00000000..f5fb8fcc --- /dev/null +++ b/backend/modelscope_studio/components/antd/input/otp/__init__.py @@ -0,0 +1,88 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdInputOTP(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + default_value: str | None = None, + disabled: bool = False, + formatter: str | None = None, + mask: str | bool | None = None, + length: int = 6, + placeholder: str = '口', + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + variant: Literal['outline', 'borderless', 'filled'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.default_value = default_value + self.disabled = disabled + self.formatter = formatter + self.mask = mask + self.length = length + self.placeholder = placeholder + self.size = size + self.status = status + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input", "otp") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input/password/__init__.py b/backend/modelscope_studio/components/antd/input/password/__init__.py new file mode 100644 index 00000000..c11ab936 --- /dev/null +++ b/backend/modelscope_studio/components/antd/input/password/__init__.py @@ -0,0 +1,120 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdInputPassword(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("press_enter", + callback=lambda block: block._internal.update( + bind_pressEnter_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("visibility_toggle_visible_change", + callback=lambda block: block._internal.update( + bind_visibilityToggle_visibleChange__event=True)), + ] + + # supported slots + SLOTS = [ + 'addonAfter', 'addonBefore', 'allowClear.clearIcon', 'prefix', + 'suffix', 'showCount.formatter' + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + icon_render: str | None = None, + visiable_toggle: bool | dict | None = True, + addon_after: str | None = None, + addon_before: str | None = None, + allow_clear: bool | dict | None = None, + class_names: dict | None = None, + count: dict | None = None, + default_value: str | None = None, + disabled: bool = False, + max_length: int | None = None, + prefix: str | None = None, + show_count: bool | dict = False, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + styles: dict | None = None, + suffix: str | None = None, + type: str | None = 'text', + placeholder: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.icon_render = icon_render + self.visiable_toggle = visiable_toggle + self.addon_after = addon_after + self.addon_before = addon_before + self.allow_clear = allow_clear + self.class_names = class_names + self.count = count + self.default_value = default_value + self.disabled = disabled + self.max_length = max_length + self.prefix = prefix + self.show_count = show_count + self.size = size + self.status = status + self.styles = styles + self.suffix = suffix + self.type = type + self.placeholder = placeholder + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input", "password") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input/search/__init__.py b/backend/modelscope_studio/components/antd/input/search/__init__.py new file mode 100644 index 00000000..0bf6d701 --- /dev/null +++ b/backend/modelscope_studio/components/antd/input/search/__init__.py @@ -0,0 +1,120 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdInputSearch(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("press_enter", + callback=lambda block: block._internal.update( + bind_pressEnter_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + ] + + # supported slots + SLOTS = [ + 'addonAfter', 'addonBefore', 'allowClear.clearIcon', 'prefix', + 'suffix', 'enterButton', 'showCount.formatter' + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + enter_button: str | bool | None = None, + loading: bool = False, + addon_after: str | None = None, + addon_before: str | None = None, + allow_clear: bool | dict | None = None, + class_names: dict | None = None, + count: dict | None = None, + default_value: str | None = None, + disabled: bool = False, + max_length: int | None = None, + prefix: str | None = None, + show_count: bool | dict = False, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + styles: dict | None = None, + suffix: str | None = None, + type: str | None = 'text', + placeholder: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.enter_button = enter_button + self.loading = loading + self.addon_after = addon_after + self.addon_before = addon_before + self.allow_clear = allow_clear + self.class_names = class_names + self.count = count + self.default_value = default_value + self.disabled = disabled + self.max_length = max_length + self.prefix = prefix + self.show_count = show_count + self.size = size + self.status = status + self.styles = styles + self.suffix = suffix + self.type = type + self.placeholder = placeholder + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input", "search") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input/textarea/__init__.py b/backend/modelscope_studio/components/antd/input/textarea/__init__.py new file mode 100644 index 00000000..7c2007df --- /dev/null +++ b/backend/modelscope_studio/components/antd/input/textarea/__init__.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdInputTextarea(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("press_enter", + callback=lambda block: block._internal.update( + bind_pressEnter_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + ] + + # supported slots + SLOTS = ['allowClear.clearIcon', 'showCount.formatter'] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + auto_size: bool | dict | None = None, + allow_clear: bool | dict | None = None, + class_names: dict | None = None, + count: dict | None = None, + default_value: str | None = None, + disabled: bool = False, + max_length: int | None = None, + show_count: bool | dict = False, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + styles: dict | None = None, + type: str | None = 'text', + placeholder: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.auto_size = auto_size + self.allow_clear = allow_clear + self.class_names = class_names + self.count = count + self.default_value = default_value + self.disabled = disabled + self.max_length = max_length + self.show_count = show_count + self.size = size + self.status = status + self.styles = styles + self.type = type + self.placeholder = placeholder + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input", "textarea") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/input_number/__init__.py b/backend/modelscope_studio/components/antd/input_number/__init__.py new file mode 100644 index 00000000..02ba0f23 --- /dev/null +++ b/backend/modelscope_studio/components/antd/input_number/__init__.py @@ -0,0 +1,139 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdInputNumber(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/input-number + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("press_enter", + callback=lambda block: block._internal.update( + bind_pressEnter_event=True)), + EventListener("step", + callback=lambda block: block._internal.update( + bind_step_event=True)), + ] + + # supported slots + SLOTS = [ + 'addonAfter', + 'addonBefore', + 'controls.upIcon', + 'controls.downIcon', + 'prefix', + 'suffix', + ] + + def __init__( + self, + value: int | float | None = None, + props: dict | None = None, + *, + addon_after: str | None = None, + addon_before: str | None = None, + auto_focus: bool = False, + change_on_blur: bool | None = None, + change_on_wheel: bool | None = True, + controls: bool | dict | None = None, + decimal_separator: str | None = None, + placeholder: str | None = None, + default_value: int | None = None, + disabled: bool = False, + formatter: str | None = None, + keyboard: bool = True, + max: int | float | None = None, + min: int | float | None = None, + parser: str | None = None, + precision: int | float | None = None, + prefix: str | None = None, + read_only: bool = False, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + step: int | float | None = 1, + string_mode: bool = False, + suffix: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.addon_after = addon_after + self.addon_before = addon_before + self.auto_focus = auto_focus + self.change_on_blur = change_on_blur + self.change_on_wheel = change_on_wheel + self.controls = controls + self.decimal_separator = decimal_separator + self.placeholder = placeholder + self.default_value = default_value + self.disabled = disabled + self.formatter = formatter + self.keyboard = keyboard + self.max = max + self.min = min + self.parser = parser + self.precision = precision + self.prefix = prefix + self.read_only = read_only + self.size = size + self.status = status + self.step = step + self.string_mode = string_mode + self.suffix = suffix + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("input-number") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "number"} + + def preprocess(self, payload: None | int | float) -> None | int | float: + if isinstance(payload, str): + if '.' in payload: + return float(payload) + return int(payload) + return payload + + def postprocess(self, value: None | int | float) -> None | int | float: + if isinstance(value, str): + if '.' in value: + return float(value) + return int(value) + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/layout/__init__.py b/backend/modelscope_studio/components/antd/layout/__init__.py new file mode 100644 index 00000000..036d4682 --- /dev/null +++ b/backend/modelscope_studio/components/antd/layout/__init__.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .content import AntdLayoutContent +from .footer import AntdLayoutFooter +from .header import AntdLayoutHeader +from .sider import AntdLayoutSider + + +class AntdLayout(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/layout + + Handling the overall layout of a page. + + Component overview: + - Layout: The layout wrapper, in which Header Sider Content Footer or Layout itself can be nested, and can be placed in any parent container. + - Header: The top layout with the default style, in which any element can be nested, and must be placed in Layout. + - Sider: The sidebar with default style and basic functions, in which any element can be nested, and must be placed in Layout. + - Content: The content layout with the default style, in which any element can be nested, and must be placed in Layout. + - Footer: The bottom layout with the default style, in which any element can be nested, and must be placed in Layout. + """ + + Content = AntdLayoutContent + Footer = AntdLayoutFooter + Header = AntdLayoutHeader + Sider = AntdLayoutSider + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + def __init__( + self, + props: dict | None = None, + *, + has_sider: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + has_sider: Whether contain Sider in children, don't have to assign it normally. Useful in ssr avoid style flickering. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.has_sider = has_sider + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("layout") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/layout/content/__init__.py b/backend/modelscope_studio/components/antd/layout/content/__init__.py new file mode 100644 index 00000000..983f077f --- /dev/null +++ b/backend/modelscope_studio/components/antd/layout/content/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdLayoutContent(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/layout + + Handling the overall layout of a page. + + Component overview: + - Layout: The layout wrapper, in which Header Sider Content Footer or Layout itself can be nested, and can be placed in any parent container. + - Header: The top layout with the default style, in which any element can be nested, and must be placed in Layout. + - Sider: The sidebar with default style and basic functions, in which any element can be nested, and must be placed in Layout. + - Content: The content layout with the default style, in which any element can be nested, and must be placed in Layout. + - Footer: The bottom layout with the default style, in which any element can be nested, and must be placed in Layout. + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + def __init__( + self, + props: dict | None = None, + *, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("layout", 'content') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/layout/footer/__init__.py b/backend/modelscope_studio/components/antd/layout/footer/__init__.py new file mode 100644 index 00000000..9ce6dcc8 --- /dev/null +++ b/backend/modelscope_studio/components/antd/layout/footer/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdLayoutFooter(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/layout + + Handling the overall layout of a page. + + Component overview: + - Layout: The layout wrapper, in which Header Sider Content Footer or Layout itself can be nested, and can be placed in any parent container. + - Header: The top layout with the default style, in which any element can be nested, and must be placed in Layout. + - Sider: The sidebar with default style and basic functions, in which any element can be nested, and must be placed in Layout. + - Content: The content layout with the default style, in which any element can be nested, and must be placed in Layout. + - Footer: The bottom layout with the default style, in which any element can be nested, and must be placed in Layout. + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + def __init__( + self, + props: dict | None = None, + *, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("layout", 'footer') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/layout/header/__init__.py b/backend/modelscope_studio/components/antd/layout/header/__init__.py new file mode 100644 index 00000000..b8ecf7cc --- /dev/null +++ b/backend/modelscope_studio/components/antd/layout/header/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdLayoutHeader(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/layout + + Handling the overall layout of a page. + + Component overview: + - Layout: The layout wrapper, in which Header Sider Content Footer or Layout itself can be nested, and can be placed in any parent container. + - Header: The top layout with the default style, in which any element can be nested, and must be placed in Layout. + - Sider: The sidebar with default style and basic functions, in which any element can be nested, and must be placed in Layout. + - Content: The content layout with the default style, in which any element can be nested, and must be placed in Layout. + - Footer: The bottom layout with the default style, in which any element can be nested, and must be placed in Layout. + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)) + ] + + def __init__( + self, + props: dict | None = None, + *, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("layout", 'header') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/layout/sider/__init__.py b/backend/modelscope_studio/components/antd/layout/sider/__init__.py new file mode 100644 index 00000000..0f87ad87 --- /dev/null +++ b/backend/modelscope_studio/components/antd/layout/sider/__init__.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdLayoutSider(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/layout + + Handling the overall layout of a page. + + Component overview: + - Layout: The layout wrapper, in which Header Sider Content Footer or Layout itself can be nested, and can be placed in any parent container. + - Header: The top layout with the default style, in which any element can be nested, and must be placed in Layout. + - Sider: The sidebar with default style and basic functions, in which any element can be nested, and must be placed in Layout. + - Content: The content layout with the default style, in which any element can be nested, and must be placed in Layout. + - Footer: The bottom layout with the default style, in which any element can be nested, and must be placed in Layout. + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener( + "breakpoint", + callback=lambda block: block._internal.update(bind_breakpoint_event + =True), + doc="The callback function, executed when breakpoints changed."), + EventListener( + "collapse", + callback=lambda block: block._internal.update(bind_collapse_event= + True), + doc= + "The callback function, executed by clicking the trigger or activating the responsive layout." + ), + ] + + SLOTS = ['trigger'] + + def __init__( + self, + props: dict | None = None, + *, + breakpoint: Literal['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] + | None = None, + collapsed: bool | None = None, + collapsed_width: int | float = 80, + collapsible: bool = False, + default_collapsed: bool = False, + reverse_arrow: bool = False, + theme: Literal['light', 'dark'] | None = None, + trigger: str | None = 'default', + width: int | float | str = 200, + zero_width_trigger_style: dict | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + breakpoint: Breakpoints of the responsive layout. + collapsed: To set the current status. + collapsed_width: Width of the collapsed sidebar, by setting to 0 a special trigger will appear. + collapsible: Whether can be collapsed. + default_collapsed: To set the initial status. + reverse_arrow: Reverse direction of arrow, for a sider that expands from the right. + theme: Color theme of the sidebar. + trigger: Specify the customized trigger, set to null to hide the trigger. + width: Width of the sidebar. + zero_width_trigger_style: To customize the styles of the special trigger that appears when collapsed_width is 0. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.breakpoint = breakpoint + self.collapsed = collapsed + self.collapsed_width = collapsed_width + self.collapsible = collapsible + self.default_collapsed = default_collapsed + self.reverse_arrow = reverse_arrow + self.theme = theme + self.trigger = trigger + self.width = width + self.zero_width_trigger_style = zero_width_trigger_style + + FRONTEND_DIR = resolve_frontend_dir("layout", 'sider') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/list/__init__.py b/backend/modelscope_studio/components/antd/list/__init__.py new file mode 100644 index 00000000..c99cf789 --- /dev/null +++ b/backend/modelscope_studio/components/antd/list/__init__.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdListItem + + +class AntdList(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/list + """ + Item = AntdListItem + EVENTS = [ + EventListener("pagination_change", + callback=lambda block: block._internal.update( + bind_pagination_change_event=True)), + EventListener("pagination_show_size_change", + callback=lambda block: block._internal.update( + bind_pagination_showSizeChange_event=True)), + ] + + # supported slots + SLOTS = ['footer', 'header', 'loadMore', 'renderItem'] + + def __init__( + self, + props: dict | None = None, + *, + bordered: bool = False, + data_source: list[Any] | None = None, + footer: str | None = None, + grid: dict | None = None, + header: str | None = None, + item_layout: str | None = None, + loading: bool | dict | None = False, + load_more: str | None = None, + locale: dict | None = None, + pagination: bool | dict | None = False, + render_item: str | None = None, + row_key: str | None = None, + size: Literal['small', 'default', 'large'] | None = None, + split: bool = True, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.bordered = bordered + self.data_source = data_source + self.footer = footer + self.grid = grid + self.header = header + self.item_layout = item_layout + self.loading = loading + self.load_more = load_more + self.pagination = pagination + self.render_item = render_item + self.locale = locale + self.row_key = row_key + self.size = size + self.split = split + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("list") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/list/item/__init__.py b/backend/modelscope_studio/components/antd/list/item/__init__.py new file mode 100644 index 00000000..9a0cbbdc --- /dev/null +++ b/backend/modelscope_studio/components/antd/list/item/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .meta import AntdListItemMeta + + +class AntdListItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/list + """ + Meta = AntdListItemMeta + EVENTS = [] + + # supported slots + SLOTS = [ + "actions", + 'extra', + ] + + def __init__( + self, + props: dict | None = None, + *, + actions: list[str] | None = None, + class_names: dict | None = None, + styles: dict | None = None, + extra: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.actions = actions + self.extra = extra + self.class_names = class_names + self.styles = styles + + FRONTEND_DIR = resolve_frontend_dir("list", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/list/item/meta/__init__.py b/backend/modelscope_studio/components/antd/list/item/meta/__init__.py new file mode 100644 index 00000000..bd3b1dd7 --- /dev/null +++ b/backend/modelscope_studio/components/antd/list/item/meta/__init__.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from typing import Any + +from ......utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdListItemMeta(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/list + """ + + EVENTS = [] + + # supported slots + SLOTS = ['avatar', 'description', 'title'] + + def __init__( + self, + props: dict | None = None, + *, + avatar: str | None = None, + description: str | None = None, + title: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.avatar = avatar + self.description = description + self.title = title + + FRONTEND_DIR = resolve_frontend_dir("list", ["item", "meta"]) + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/mentions/__init__.py b/backend/modelscope_studio/components/antd/mentions/__init__.py new file mode 100644 index 00000000..b54a083d --- /dev/null +++ b/backend/modelscope_studio/components/antd/mentions/__init__.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdMentionsOption + + +# as inputs, outputs +class AntdMentions(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/mentions + """ + Option = AntdMentionsOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("resize", + callback=lambda block: block._internal.update( + bind_resize_event=True)), + ] + + # supported slots + SLOTS = ['allowClear.clearIcon', 'notFoundContent', "options"] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict | None = None, + auto_focus: bool = False, + auto_size: bool | dict | None = None, + default_value: str | None = None, + filter_option: bool | str | None = None, + disabled: bool | None = None, + read_only: bool | None = None, + get_popup_container: str | None = None, + not_found_content: str | None = None, + options: list[dict] | None = None, + placement: Literal['top', 'bottom'] | None = None, + prefix: str | list[str] | None = '@', + split: str | None = None, + status: Literal['error', 'warning'] | None = None, + validate_search: str | None = None, + variant: Literal['outlined', 'borderless', 'filled'] = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.auto_size = auto_size + self.default_value = default_value + self.filter_option = filter_option + self.disabled = disabled + self.read_only = read_only + self.get_popup_container = get_popup_container + self.not_found_content = not_found_content + self.options = options + self.placement = placement + self.prefix = prefix + self.split = split + self.status = status + self.validate_search = validate_search + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("mentions") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "string"} + + def preprocess(self, payload: None | str) -> None | str: + return payload + + def postprocess(self, value: None | str) -> None | str: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/mentions/option/__init__.py b/backend/modelscope_studio/components/antd/mentions/option/__init__.py new file mode 100644 index 00000000..9f03ea25 --- /dev/null +++ b/backend/modelscope_studio/components/antd/mentions/option/__init__.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdMentionsOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/mentions + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + value: str | None = None, + label: str | None = None, + props: dict | None = None, + *, + disabled: bool | None = None, + key: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + self.disabled = disabled + self.key = key + + FRONTEND_DIR = resolve_frontend_dir("mentions", "option") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/menu/__init__.py b/backend/modelscope_studio/components/antd/menu/__init__.py new file mode 100644 index 00000000..4b942393 --- /dev/null +++ b/backend/modelscope_studio/components/antd/menu/__init__.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdMenuItem + + +class AntdMenu(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/menu + """ + Item = AntdMenuItem + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("deselect", + callback=lambda block: block._internal.update( + bind_deselect_event=True)), + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + ] + + # supported slots + SLOTS = ["expandIcon", 'overflowedIndicator', "items"] + + def __init__( + self, + props: dict | None = None, + *, + open_keys: list[str] | None = None, + selected_keys: list[str] | None = None, + selectable: bool = True, + default_open_keys: list[str] | None = None, + default_selected_keys: list[str] | None = None, + expand_icon: str | None = None, + force_sub_menu_render: bool | None = False, + inline_collapsed: bool | None = None, + inline_indent: int = 24, + items: list[dict] | None = None, + mode: Literal['vertical', 'horizontal', 'inline'] + | None = 'vertical', + multiple: bool | None = False, + overflowed_indicator: str | None = None, + sub_menu_close_delay: int | float = 0.1, + sub_menu_open_delay: int | float = 0, + theme: Literal['light', 'dark'] | None = None, + trigger_sub_menu_action: Literal['click', 'hover'] = 'hover', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.open_keys = open_keys + self.selected_keys = selected_keys + self.selectable = selectable + self.default_open_keys = default_open_keys + self.default_selected_keys = default_selected_keys + self.expand_icon = expand_icon + self.force_sub_menu_render = force_sub_menu_render + self.inline_collapsed = inline_collapsed + self.inline_indent = inline_indent + self.items = items + self.mode = mode + self.multiple = multiple + self.overflowed_indicator = overflowed_indicator + self.sub_menu_close_delay = sub_menu_close_delay + self.sub_menu_open_delay = sub_menu_open_delay + self.theme = theme + self.trigger_sub_menu_action = trigger_sub_menu_action + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("menu") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/menu/item/__init__.py b/backend/modelscope_studio/components/antd/menu/item/__init__.py new file mode 100644 index 00000000..605f4f3f --- /dev/null +++ b/backend/modelscope_studio/components/antd/menu/item/__init__.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdMenuItem(ModelScopeLayoutComponent): + """ + """ + + EVENTS = [ + EventListener("title_click", + callback=lambda block: block._internal.update( + bind_titleClick_event=True)), + ] + + # supported slots + SLOTS = ["title", 'icon', "label", "extra"] + + def __init__( + self, + label: str | None = None, + props: dict | None = None, + *, + title: str | None = None, + danger: bool = False, + disabled: bool = False, + extra: str | None = None, + icon: str | None = None, + key: str | None = None, + theme: Literal['dark', 'light'] = None, + type: Literal['group'] | None = None, + popup_class_name: str | None = None, + popup_offset: tuple[int | float, int | float] | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.label = label + self.props = props + self.title = title + self.danger = danger + self.disabled = disabled + self.extra = extra + self.icon = icon + self.key = key + self.theme = theme + self.type = type + self.popup_class_name = popup_class_name + self.popup_offset = popup_offset + + FRONTEND_DIR = resolve_frontend_dir("menu", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/message/__init__.py b/backend/modelscope_studio/components/antd/message/__init__.py new file mode 100644 index 00000000..822795ab --- /dev/null +++ b/backend/modelscope_studio/components/antd/message/__init__.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdMessage(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/message + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['icon', 'content'] + + def __init__( + self, + content: str | None = "", + props: dict | None = None, + *, + duration: float | int | None = 3, + icon: str | None = None, + key: str | int | float | None = None, + get_container: str | None = None, + rtl: bool | None = None, + top: int | float | None = 8, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = False, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.content = content + self.duration = duration + self.icon = icon + self.key = key + self.get_container = get_container + self.rtl = rtl + self.top = top + self.root_class_name = root_class_name + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("message") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> str: + return "Message" + + def example_value(self) -> str: + return "Message" diff --git a/backend/modelscope_studio/components/antd/modal/__init__.py b/backend/modelscope_studio/components/antd/modal/__init__.py new file mode 100644 index 00000000..b223bb41 --- /dev/null +++ b/backend/modelscope_studio/components/antd/modal/__init__.py @@ -0,0 +1,127 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdModal(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/modal + """ + EVENTS = [ + EventListener( + "ok", + callback=lambda block: block._internal.update(bind_ok_event=True)), + EventListener("cancel", + callback=lambda block: block._internal.update( + bind_cancel_event=True)) + ] + + # supported slots + SLOTS = [ + 'closeIcon', 'cancelButtonProps.icon', 'cancelText', + 'closable.closeIcon', 'closeIcon', 'footer', 'title', + 'okButtonProps.icon', 'okText', 'modalRender' + ] + + def __init__( + self, + props: dict | None = None, + *, + after_close: str | None = None, + class_names: dict | None = None, + styles: dict | None = None, + cancel_button_props: dict | None = None, + cancel_text: str | None = None, + centered: bool | None = None, + closable: bool | dict | None = None, + close_icon: str | None = None, + confirm_loading: bool | None = None, + destroy_on_close: bool | None = None, + focus_trigger_after_close: bool | None = None, + footer: str | None = None, + force_render: bool | None = None, + get_container: str | None = None, + keyboard: bool | None = None, + mask: bool | None = None, + mask_closable: bool | None = None, + modal_render: str | None = None, + ok_text: str | None = None, + ok_type: str | None = None, + ok_button_props: dict | None = None, + loading: bool | None = None, + title: str | None = None, + open: bool | None = None, + width: int | float | str | None = None, + wrap_class_name: str | None = None, + z_index: int | None = None, + after_open_change: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.after_close = after_close + self.class_names = class_names + self.styles = styles + self.cancel_button_props = cancel_button_props + self.cancel_text = cancel_text + self.centered = centered + self.closable = closable + self.close_icon = close_icon + self.confirm_loading = confirm_loading + self.destroy_on_close = destroy_on_close + self.focus_trigger_after_close = focus_trigger_after_close + self.footer = footer + self.force_render = force_render + self.get_container = get_container + self.keyboard = keyboard + self.mask = mask + self.mask_closable = mask_closable + self.modal_render = modal_render + self.ok_text = ok_text + self.ok_type = ok_type + self.ok_button_props = ok_button_props + self.loading = loading + self.title = title + self.open = open + self.width = width + self.wrap_class_name = wrap_class_name + self.z_index = z_index + self.after_open_change = after_open_change + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("modal") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/notification/__init__.py b/backend/modelscope_studio/components/antd/notification/__init__.py new file mode 100644 index 00000000..de959386 --- /dev/null +++ b/backend/modelscope_studio/components/antd/notification/__init__.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdNotification(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/notification + """ + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['btn', 'closeIcon', "description", "icon", "message"] + + def __init__( + self, + message: str | None = "", + description: str | None = "", + props: dict | None = None, + *, + btn: str | None = None, + close_icon: str | bool | None = None, + duration: int | float | None = 4.5, + show_progress: bool | None = None, + pause_on_hover: bool | None = None, + icon: str | None = None, + key: str | None = None, + placement: Literal["top", "topLeft", "topRight", "bottom", + "bottomLeft", "bottomRight"] | None = None, + role: Literal["alert", "status"] | None = None, + bottom: int | float | None = 24, + rtl: bool | None = None, + get_container: str | None = None, + stack: bool | dict | None = None, + top: int | float | None = 24, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = False, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.message = message + self.description = description + self.btn = btn + self.close_icon = close_icon + self.duration = duration + self.show_progress = show_progress + self.pause_on_hover = pause_on_hover + self.icon = icon + self.key = key + self.placement = placement + self.role = role + self.bottom = bottom + self.rtl = rtl + self.get_container = get_container + self.stack = stack + self.top = top + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("notification") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/pagination/__init__.py b/backend/modelscope_studio/components/antd/pagination/__init__.py new file mode 100644 index 00000000..6a6a85a9 --- /dev/null +++ b/backend/modelscope_studio/components/antd/pagination/__init__.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdPagination(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/pagination + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("show_size_change", + callback=lambda block: block._internal.update( + bind_showSizeChange_event=True)), + ] + + # supported slots + SLOTS = ['showQuickJumper.goButton', 'itemRender'] + + def __init__( + self, + props: dict | None = None, + *, + align: Literal['start', 'center', 'end'] | None = None, + current: int | None = None, + default_current: int | None = 1, + default_page_size: int | None = 10, + page_size: int | None = None, + disabled: bool | None = None, + hide_on_single_page: bool = False, + item_render: str | None = None, + page_size_options: list[str] | list[int] = [10, 20, 50, 100], + responsive: bool | None = None, + show_less_items: bool | None = None, + show_quick_jumper: bool | dict | None = None, + show_size_changer: bool | dict | None = None, + show_title: bool = True, + show_total: str | None = None, + simple: bool | dict | None = None, + size: Literal['small', 'default'] | None = None, + total: int = 0, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.align = align + self.current = current + self.page_size = page_size + self.total = total + self.default_current = default_current + self.default_page_size = default_page_size + self.disabled = disabled + self.hide_on_single_page = hide_on_single_page + self.item_render = item_render + self.page_size_options = page_size_options + self.responsive = responsive + self.show_less_items = show_less_items + self.show_quick_jumper = show_quick_jumper + self.show_size_changer = show_size_changer + self.show_title = show_title + self.show_total = show_total + self.simple = simple + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("pagination") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/popconfirm/__init__.py b/backend/modelscope_studio/components/antd/popconfirm/__init__.py new file mode 100644 index 00000000..87c0afd0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/popconfirm/__init__.py @@ -0,0 +1,148 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdPopconfirm(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/popconfirm + """ + EVENTS = [ + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("cancel", + callback=lambda block: block._internal.update( + bind_cancel_event=True)), + EventListener("confirm", + callback=lambda block: block._internal.update( + bind_confirm_event=True)), + EventListener("popup_click", + callback=lambda block: block._internal.update( + bind_popupClick_event=True)) + ] + + # supported slots + SLOTS = [ + 'title', + 'description', + 'cancelButtonProps.icon', + 'cancelText', + 'okButtonProps.icon', + 'okText', + ] + + def __init__( + self, + title: str | None = "", + description: str | None = None, + props: dict | None = None, + *, + cancel_button_props: dict | None = None, + cancel_text: str | None = None, + disabled: bool | None = None, + icon: str | None = None, + ok_button_props: dict | None = None, + ok_text: str | None = None, + ok_type: str | None = None, + show_cancel: bool | None = None, + align: dict | None = None, + arrow: bool | dict | None = True, + auto_adjust_overflow: bool = True, + color: str | None = None, + default_open: bool = False, + destroy_tooltip_on_hide: bool = False, + fresh: bool = False, + get_popup_container: str | None = None, + mouse_enter_delay: float | int = 0.1, + mouse_leave_delay: float | int = 0.1, + overlay_class_name: str | None = None, + overlay_style: dict | None = None, + overlay_inner_style: dict | None = None, + placement: Literal[ + 'top', + 'left', + 'right', + 'bottom', + 'topLeft', + 'topRight', + 'bottomLeft', + 'bottomRight', + 'leftTop', + 'leftBottom', + 'rightTop', + 'rightBottom', + ] = 'top', + trigger: Literal['hover', 'focus', 'click', 'contextMenu'] + | list[Literal['hover', 'focus', 'click', 'contextMenu']] = 'hover', + open: bool | None = None, + z_index: int | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.title = title + self.description = description + self.cancel_button_props = cancel_button_props + self.cancel_text = cancel_text + self.disabled = disabled + self.icon = icon + self.ok_button_props = ok_button_props + self.ok_text = ok_text + self.ok_type = ok_type + self.show_cancel = show_cancel + self.align = align + self.arrow = arrow + self.auto_adjust_overflow = auto_adjust_overflow + self.color = color + self.default_open = default_open + self.destroy_tooltip_on_hide = destroy_tooltip_on_hide + self.fresh = fresh + self.get_popup_container = get_popup_container + self.mouse_enter_delay = mouse_enter_delay + self.mouse_leave_delay = mouse_leave_delay + self.overlay_class_name = overlay_class_name + self.overlay_style = overlay_style + self.overlay_inner_style = overlay_inner_style + self.placement = placement + self.trigger = trigger + self.open = open + self.z_index = z_index + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("popconfirm") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> str: + return "Popconfirm" + + def example_value(self) -> str: + return "Popconfirm" diff --git a/backend/modelscope_studio/components/antd/popover/__init__.py b/backend/modelscope_studio/components/antd/popover/__init__.py new file mode 100644 index 00000000..4b54023b --- /dev/null +++ b/backend/modelscope_studio/components/antd/popover/__init__.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdPopover(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/popover + """ + EVENTS = [ + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + ] + + # supported slots + SLOTS = ['title', "content"] + + def __init__( + self, + content: str | None = "", + title: str | None = "", + props: dict | None = None, + *, + align: dict | None = None, + arrow: bool | dict | None = True, + auto_adjust_overflow: bool = True, + color: str | None = None, + default_open: bool = False, + destroy_tooltip_on_hide: bool = False, + fresh: bool = False, + get_popup_container: str | None = None, + mouse_enter_delay: float | int = 0.1, + mouse_leave_delay: float | int = 0.1, + overlay_class_name: str | None = None, + overlay_style: dict | None = None, + overlay_inner_style: dict | None = None, + placement: Literal[ + 'top', + 'left', + 'right', + 'bottom', + 'topLeft', + 'topRight', + 'bottomLeft', + 'bottomRight', + 'leftTop', + 'leftBottom', + 'rightTop', + 'rightBottom', + ] = 'top', + trigger: Literal['hover', 'focus', 'click', 'contextMenu'] + | list[Literal['hover', 'focus', 'click', 'contextMenu']] = 'hover', + open: bool | None = None, + z_index: int | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.title = title + self.content = content + self.props = props + self.align = align + self.arrow = arrow + self.auto_adjust_overflow = auto_adjust_overflow + self.color = color + self.default_open = default_open + self.destroy_tooltip_on_hide = destroy_tooltip_on_hide + self.fresh = fresh + self.get_popup_container = get_popup_container + self.mouse_enter_delay = mouse_enter_delay + self.mouse_leave_delay = mouse_leave_delay + self.overlay_class_name = overlay_class_name + self.overlay_style = overlay_style + self.overlay_inner_style = overlay_inner_style + self.placement = placement + self.trigger = trigger + self.open = open + self.z_index = z_index + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("popover") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> str: + return "Popover" + + def example_value(self) -> str: + return "Popover" diff --git a/backend/modelscope_studio/components/antd/progress/__init__.py b/backend/modelscope_studio/components/antd/progress/__init__.py new file mode 100644 index 00000000..4536fd09 --- /dev/null +++ b/backend/modelscope_studio/components/antd/progress/__init__.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import Any, Literal + +from ....utils.dev import ModelScopeComponent, resolve_frontend_dir + + +class AntdProgress(ModelScopeComponent): + """ + Ant Design: https://ant.design/components/progress + """ + + EVENTS = [] + + def __init__( + self, + percent: int = 0, + props: dict | None = None, + *, + format: str | None = None, + show_info: bool | None = None, + status: Literal['success', 'exception', 'normal', 'active'] + | None = None, + stroke_color: str | None = None, + stroke_linecap: Literal['round', 'butt', 'square'] + | None = None, + success: dict | None = None, + trail_color: str | None = None, + type: Literal['line', 'circle', 'dashboard'] | None = None, + size: int | float | list[int | float | str] | dict + | Literal['small', 'default'] + | None = None, + steps: int | dict | None = None, + percent_position: dict | None = None, + stroke_width: int | float | None = None, + gap_degree: int | float | None = None, + gap_position: Literal['top', 'bottom', 'left', 'right'] + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.percent = percent + self.format = format + self.show_info = show_info + self.status = status + self.stroke_color = stroke_color + self.stroke_linecap = stroke_linecap + self.success = success + self.trail_color = trail_color + self.type = type + self.size = size + self.steps = steps + self.percent_position = percent_position + self.stroke_width = stroke_width + self.gap_degree = gap_degree + self.gap_position = gap_position + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("progress") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return 0 + + def example_value(self) -> Any: + return 0 diff --git a/backend/modelscope_studio/components/antd/qr_code/__init__.py b/backend/modelscope_studio/components/antd/qr_code/__init__.py new file mode 100644 index 00000000..513202dc --- /dev/null +++ b/backend/modelscope_studio/components/antd/qr_code/__init__.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeComponent, resolve_frontend_dir + + +class AntdQRCode(ModelScopeComponent): + """ + Ant Design: https://ant.design/components/qr-code + """ + + EVENTS = [ + EventListener("refresh", + callback=lambda block: block._internal.update( + bind_refresh_event=True)), + ] + + # supported slots + SLOTS = ["statusRender"] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + type: Literal['canvas', 'svg'] | None = 'canvas', + bordered: bool = True, + color: str | None = "#000", + bg_color: str | None = 'transparent', + error_level: Literal['L', 'M', 'Q', 'H'] | None = 'M', + icon: str | None = None, + icon_size: int | dict | None = 40, + size: int = 160, + status: Literal['active', 'expired', 'loading', 'scanned'] + | None = 'active', + status_render: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.type = type + self.bordered = bordered + self.color = color + self.bg_color = bg_color + self.error_level = error_level + self.icon = icon + self.icon_size = icon_size + self.size = size + self.status = status + self.status_render = status_render + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("qr-code") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str) -> str: + return payload + + def postprocess(self, value: str) -> str: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/radio/__init__.py b/backend/modelscope_studio/components/antd/radio/__init__.py new file mode 100644 index 00000000..c0876219 --- /dev/null +++ b/backend/modelscope_studio/components/antd/radio/__init__.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .button import AntdRadioButton +from .group import AntdRadioGroup + + +# as inputs, outputs +class AntdRadio(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/radio + """ + Group = AntdRadioGroup + Button = AntdRadioButton + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + def __init__( + self, + group_value: Any | None = None, + value: bool | None = None, + props: dict | None = None, + *, + auto_focus: bool | None = None, + default_checked: bool | None = None, + disabled: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.group_value = group_value + self.auto_focus = auto_focus + self.default_checked = default_checked + self.disabled = disabled + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("radio") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "boolean"} + + def preprocess(self, payload: None | bool) -> None | bool: + return payload + + def postprocess(self, value: None | bool) -> None | bool: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/radio/button/__init__.py b/backend/modelscope_studio/components/antd/radio/button/__init__.py new file mode 100644 index 00000000..f72d5ba5 --- /dev/null +++ b/backend/modelscope_studio/components/antd/radio/button/__init__.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdRadioButton(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/radio + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + def __init__( + self, + group_value: Any | None = None, + value: bool | None = None, + props: dict | None = None, + *, + auto_focus: bool | None = None, + default_checked: bool | None = None, + disabled: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.group_value = group_value + self.auto_focus = auto_focus + self.default_checked = default_checked + self.disabled = disabled + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("radio", 'button') + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "boolean"} + + def preprocess(self, payload: None | bool) -> None | bool: + return payload + + def postprocess(self, value: None | bool) -> None | bool: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/radio/group/__init__.py b/backend/modelscope_studio/components/antd/radio/group/__init__.py new file mode 100644 index 00000000..e83cf879 --- /dev/null +++ b/backend/modelscope_studio/components/antd/radio/group/__init__.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdRadioGroupOption + + +# as inputs, outputs +class AntdRadioGroup(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/radio + """ + Option = AntdRadioGroupOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + # supported slots + SLOTS = ['options'] + + def __init__( + self, + value: Any | None = None, + props: dict | None = None, + *, + button_style: Literal['outline', 'solid'] | None = 'outline', + default_value: Any | None = None, + disabled: bool | None = None, + form_name: str | None = None, + options: list[str] | list[int | float] | list[dict] | None = None, + option_type: Literal['default', 'button'] | None = 'default', + size: Literal['small', 'middle', 'large'] | None = None, + block: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.button_style = button_style + self.default_value = default_value + self.disabled = disabled + self.form_name = form_name + self.options = options + self.option_type = option_type + self.size = size + self.block = block + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("radio", "group") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + ], + } + + def preprocess(self, payload: Any | None) -> Any | None: + return payload + + def postprocess(self, value: Any | None) -> Any | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/radio/group/option/__init__.py b/backend/modelscope_studio/components/antd/radio/group/option/__init__.py new file mode 100644 index 00000000..4dbbb21b --- /dev/null +++ b/backend/modelscope_studio/components/antd/radio/group/option/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import Any + +from ......utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdRadioGroupOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/radio + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + label: str | None = None, + disabled: bool | None = None, + title: str | None = None, + required: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + self.disabled = disabled + self.title = title + self.required = required + + FRONTEND_DIR = resolve_frontend_dir("radio", ['group', 'option']) + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/rate/__init__.py b/backend/modelscope_studio/components/antd/rate/__init__.py new file mode 100644 index 00000000..cf5a2236 --- /dev/null +++ b/backend/modelscope_studio/components/antd/rate/__init__.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdRate(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/rate + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), + EventListener("hover_change", + callback=lambda block: block._internal.update( + bind_hoverChange_event=True)), + EventListener("key_down", + callback=lambda block: block._internal.update( + bind_keyDown_event=True)), + ] + + # supported slots + SLOTS = ["character"] + + def __init__( + self, + value: int | float | None = None, + props: dict | None = None, + *, + allow_clear: bool | None = None, + allow_half: bool | None = None, + auto_focus: bool | None = None, + character: str | None = None, + count: int | float | None = 5, + default_value: int | float | None = 0, + disabled: bool | None = None, + keyboard: bool | None = None, + tooltips: list[str] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.allow_half = allow_half + self.auto_focus = auto_focus + self.character = character + self.count = count + self.default_value = default_value + self.disabled = disabled + self.keyboard = keyboard + self.tooltips = tooltips + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("rate") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "number"} + + def preprocess(self, payload: None | int | float) -> None | int | float: + return payload + + def postprocess(self, value: None | int | float) -> None | int | float: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/result/__init__.py b/backend/modelscope_studio/components/antd/result/__init__.py new file mode 100644 index 00000000..37a9badb --- /dev/null +++ b/backend/modelscope_studio/components/antd/result/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdResult(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/result + """ + EVENTS = [] + + # supported slots + SLOTS = ['extra', 'icon', 'subTitle', 'title'] + + def __init__( + self, + props: dict | None = None, + *, + extra: str | None = None, + icon: str | None = None, + status: Literal['success', 'error', 'info', 'warning', '404', + '403', '500'] + | None = None, + sub_title: str | None = None, + title: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.extra = extra + self.icon = icon + self.status = status + self.sub_title = sub_title + self.title = title + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("result") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/segmented/__init__.py b/backend/modelscope_studio/components/antd/segmented/__init__.py new file mode 100644 index 00000000..e67a7bbf --- /dev/null +++ b/backend/modelscope_studio/components/antd/segmented/__init__.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdSegmentedOption + + +# as inputs, outputs +class AntdSegmented(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/segmented + """ + Option = AntdSegmentedOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + def __init__( + self, + value: str | int | float | None = None, + props: dict | None = None, + *, + block: bool = False, + default_value: str | int | float | None = None, + disabled: bool = False, + options: list[str] | list[int | float] | list[dict] | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + vertical: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.block = block + self.default_value = default_value + self.disabled = disabled + self.options = options + self.size = size + self.vertical = vertical + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("segmented") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, list[str]]: + return { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + ] + } + + def preprocess(self, payload: str | int | float) -> str | int | float: + return payload + + def postprocess(self, value: str | int | float) -> str | int | float: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/segmented/option/__init__.py b/backend/modelscope_studio/components/antd/segmented/option/__init__.py new file mode 100644 index 00000000..339d3196 --- /dev/null +++ b/backend/modelscope_studio/components/antd/segmented/option/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSegmentedOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/segmented + """ + + EVENTS = [] + + # supported slots + SLOTS = ['icon', "label"] + + def __init__( + self, + label: str | None = None, + value: str | int | float | None = None, + props: dict | None = None, + *, + icon: str | None = None, + disabled: bool = False, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.label = label + self.value = value + self.props = props + self.icon = icon + self.disabled = disabled + + FRONTEND_DIR = resolve_frontend_dir("segmented", "option") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/select/__init__.py b/backend/modelscope_studio/components/antd/select/__init__.py new file mode 100644 index 00000000..fb05bc8a --- /dev/null +++ b/backend/modelscope_studio/components/antd/select/__init__.py @@ -0,0 +1,215 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .option import AntdSelectOption + + +# as inputs, outputs +class AntdSelect(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/select + """ + Option = AntdSelectOption + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("clear", + callback=lambda block: block._internal.update( + bind_clear_event=True)), + EventListener("popup_scroll", + callback=lambda block: block._internal.update( + bind_popupScroll_event=True)), + EventListener("dropdown_visible_change", + callback=lambda block: block._internal.update( + bind_dropdownVisibleChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', 'maxTagPlaceholder', 'menuItemSelectedIcon', + 'dropdownRender', 'optionRender', 'tagRender', 'labelRender', + 'notFoundContent', 'removeIcon', 'suffixIcon', 'options' + ] + + def __init__( + self, + value: str | int | float | list[float | int | str] | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict | None = None, + auto_clear_search_value: bool | None = None, + auto_focus: bool | None = None, + default_active_first_option: bool | None = True, + default_open: bool | None = None, + default_value: str | int | float | list[float | int | str] + | None = None, + disabled: bool | None = False, + popup_class_name: str | None = None, + popup_match_select_width: bool | int | float | None = True, + dropdown_render: str | None = None, + dropdown_style: dict | None = None, + field_names: dict | None = None, + filter_option: bool | str | None = None, + filter_sort: bool | None = None, + get_popup_container: str | None = None, + label_in_value: bool | None = False, + list_height: int | None = None, + loading: bool | None = None, + max_count: int | None = None, + max_tag_count: int | Literal['responsive'] | None = None, + max_tag_placeholder: str | None = None, + max_tag_text_length: int | None = None, + menu_item_selected_icon: str | None = None, + mode: Literal['multiple', 'tags'] | None = None, + not_found_content: str | None = None, + open: bool | None = None, + option_filter_prop: str | None = None, + option_label_prop: str | None = None, + options: list[dict] | None = None, + option_render: str | None = None, + placeholder: str | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] | None = 'bottomLeft', + remove_icon: str | None = None, + search_value: str | None = None, + show_search: bool | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + tag_render: str | None = None, + label_render: str | None = None, + token_separators: list[str] | None = None, + variant: Literal['outlined', 'borderless', 'filled'] + | None = 'outlined', + virtual: bool | None = True, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + key: int | str | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + key=key, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_clear_search_value = auto_clear_search_value + self.auto_focus = auto_focus + self.default_active_first_option = default_active_first_option + self.default_open = default_open + self.default_value = default_value + self.disabled = disabled + self.popup_class_name = popup_class_name + self.popup_match_select_width = popup_match_select_width + self.get_popup_container = get_popup_container + self.dropdown_render = dropdown_render + self.dropdown_style = dropdown_style + self.field_names = field_names + self.filter_option = filter_option + self.filter_sort = filter_sort + self.label_in_value = label_in_value + self.list_height = list_height + self.loading = loading + self.max_count = max_count + self.max_tag_count = max_tag_count + self.max_tag_placeholder = max_tag_placeholder + self.max_tag_text_length = max_tag_text_length + self.menu_item_selected_icon = menu_item_selected_icon + self.mode = mode + self.not_found_content = not_found_content + self.open = open + self.option_filter_prop = option_filter_prop + self.option_label_prop = option_label_prop + self.options = options + self.option_render = option_render + self.placeholder = placeholder + self.placement = placement + self.remove_icon = remove_icon + self.search_value = search_value + self.show_search = show_search + self.size = size + self.status = status + self.suffix_icon = suffix_icon + self.tag_render = tag_render + self.label_render = label_render + self.token_separators = token_separators + self.variant = variant + self.virtual = virtual + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("select") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [ + { + "type": "string", + }, + { + "type": "number", + }, + { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string", + }, + { + "type": "number", + }, + ], + }, + }, + ] + } + + def preprocess( + self, payload: str | int | float | list[float | int | str] | None + ) -> str | int | float | list[float | int | str] | None: + return payload + + def postprocess( + self, value: str | int | float | list[float | int | str] | None + ) -> str | int | float | list[float | int | str] | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/select/option/__init__.py b/backend/modelscope_studio/components/antd/select/option/__init__.py new file mode 100644 index 00000000..fcd4df74 --- /dev/null +++ b/backend/modelscope_studio/components/antd/select/option/__init__.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSelectOption(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/select + """ + + EVENTS = [] + + # supported slots + SLOTS = ['label', 'options'] + + def __init__( + self, + value: str | None = None, + label: str | None = None, + props: dict | None = None, + *, + title: str | None = None, + disabled: bool | None = None, + key: str | int | float | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.label = label + self.disabled = disabled + self.title = title + self.key = key + + FRONTEND_DIR = resolve_frontend_dir("select", "option") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/__init__.py b/backend/modelscope_studio/components/antd/skeleton/__init__.py new file mode 100644 index 00000000..e99c210c --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/__init__.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .avatar import AntdSkeletonAvatar +from .button import AntdSkeletonButton +from .image import AntdSkeletonImage +from .input import AntdSkeletonInput +from .node import AntdSkeletonNode + + +class AntdSkeleton(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + Node = AntdSkeletonNode + Avatar = AntdSkeletonAvatar + Button = AntdSkeletonButton + Image = AntdSkeletonImage + Input = AntdSkeletonInput + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + avatar: bool | dict | None = None, + loading: bool | None = None, + paragraph: bool | dict | None = None, + round: bool | None = None, + title: bool | dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.avatar = avatar + self.loading = loading + self.paragraph = paragraph + self.round = round + self.title = title + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/avatar/__init__.py b/backend/modelscope_studio/components/antd/skeleton/avatar/__init__.py new file mode 100644 index 00000000..9201d609 --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/avatar/__init__.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSkeletonAvatar(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + shape: Literal['circle', 'square'] | None = None, + size: Literal['large', 'small', 'default'] | int | float + | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.shape = shape + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton", "avatar") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/button/__init__.py b/backend/modelscope_studio/components/antd/skeleton/button/__init__.py new file mode 100644 index 00000000..9f2e71a2 --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/button/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSkeletonButton(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + block: bool | None = None, + shape: Literal['default', 'circle', 'round', 'square'] + | None = None, + size: Literal['large', 'small', 'default'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.block = block + self.shape = shape + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton", "button") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/image/__init__.py b/backend/modelscope_studio/components/antd/skeleton/image/__init__.py new file mode 100644 index 00000000..7189662e --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/image/__init__.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSkeletonImage(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton", "image") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/input/__init__.py b/backend/modelscope_studio/components/antd/skeleton/input/__init__.py new file mode 100644 index 00000000..1b390072 --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/input/__init__.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSkeletonInput(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + size: Literal['large', 'small', 'default'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton", "input") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/skeleton/node/__init__.py b/backend/modelscope_studio/components/antd/skeleton/node/__init__.py new file mode 100644 index 00000000..1bfa131b --- /dev/null +++ b/backend/modelscope_studio/components/antd/skeleton/node/__init__.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSkeletonNode(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/skeleton + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + active: bool | None = None, + full_size: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active = active + self.full_size = full_size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("skeleton", "node") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/slider/__init__.py b/backend/modelscope_studio/components/antd/slider/__init__.py new file mode 100644 index 00000000..986742c8 --- /dev/null +++ b/backend/modelscope_studio/components/antd/slider/__init__.py @@ -0,0 +1,125 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .mark import AntdSliderMark + + +# as inputs, outputs +class AntdSlider(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/slider + """ + Mark = AntdSliderMark + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("change_complete", + callback=lambda block: block._internal.update( + bind_changeComplete_event=True)), + ] + + # supported slots + SLOTS = ['marks', 'tooltip.formatter'] + + def __init__( + self, + value: int | float | tuple[int | float, int | float] | None = None, + props: dict | None = None, + *, + auto_focus: bool | None = None, + class_names: dict | None = None, + default_value: int | float | tuple[int | float, int | float] + | None = None, + disabled: bool | None = None, + dots: bool | None = False, + included: bool | None = True, + keyboard: bool | None = True, + marks: dict | None = None, + max: int | float | None = 100, + min: int | float | None = 0, + range: bool | dict | None = False, + reverse: bool | None = False, + step: int | float | None = 1, + styles: dict | None = None, + tooltip: dict | None = None, + vertical: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.auto_focus = auto_focus + self.class_names = class_names + self.default_value = default_value + self.disabled = disabled + self.dots = dots + self.included = included + self.keyboard = keyboard + self.marks = marks + self.max = max + self.min = min + self.range = range + self.reverse = reverse + self.step = step + self.styles = styles + self.tooltip = tooltip + self.vertical = vertical + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("slider") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [ + { + "type": "number", + }, + { + "type": "array", + "items": { + "type": "number", + }, + }, + ] + } + + def preprocess( + self, payload: int | float | tuple[int | float, int | float] | None + ) -> int | float | tuple[int | float, int | float] | None: + return payload + + def postprocess( + self, value: int | float | tuple[int | float, int | float] | None + ) -> int | float | tuple[int | float, int | float] | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/slider/mark/__init__.py b/backend/modelscope_studio/components/antd/slider/mark/__init__.py new file mode 100644 index 00000000..4b503b71 --- /dev/null +++ b/backend/modelscope_studio/components/antd/slider/mark/__init__.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSliderMark(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/slider + """ + + EVENTS = [] + + # supported slots + SLOTS = [ + 'label', + ] + + def __init__( + self, + number: float | int | None = None, + label: str | None = None, + props: dict | None = None, + *, + title: str | None = None, + disabled: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.number = number + self.label = label + self.disabled = disabled + self.title = title + + FRONTEND_DIR = resolve_frontend_dir("slider", "mark") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/space/__init__.py b/backend/modelscope_studio/components/antd/space/__init__.py new file mode 100644 index 00000000..d57137b1 --- /dev/null +++ b/backend/modelscope_studio/components/antd/space/__init__.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +from typing import Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .compact import AntdSpaceCompact + + +class AntdSpace(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/space + + Set components spacing. + + When to use: + - Avoid components clinging together and set a unified space. + - Use Space.Compact when child form components are compactly connected and the border is collapsed + + Difference with Flex component: + - Space is used to set the spacing between inline elements. It will add a wrapper element for each child element for inline alignment. Suitable for equidistant arrangement of multiple child elements in rows and columns. + - Flex is used to set the layout of block-level elements. It does not add a wrapper element. Suitable for layout of child elements in vertical or horizontal direction, and provides more flexibility and control. + """ + Compact = AntdSpaceCompact + + EVENTS = [] + + # supported slots + SLOTS = ['split'] + + def __init__( + self, + props: dict | None = None, + *, + align: Literal['start', 'end', 'center', 'baseline'] | None = None, + class_names: dict | None = None, + styles: dict | None = None, + direction: Literal['vertical', 'horizontal'] | None = 'horizontal', + size: Literal['small', 'middle', 'large'] | int | float + | list[Literal['small', 'middle', 'large'] | int | float] + | None = None, + split: str | None = None, + wrap: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + align: Align items. + class_names: Semantic className. + direction: The space direction. + size: The space size. + split: Set split. + styles: Semantic style. + wrap: Auto wrap line, when horizontal effective. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.align = align + self.class_names = class_names + self.styles = styles + self.direction = direction + self.size = size + self.split = split + self.wrap = wrap + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("space") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/space/compact/__init__.py b/backend/modelscope_studio/components/antd/space/compact/__init__.py new file mode 100644 index 00000000..1c5b4409 --- /dev/null +++ b/backend/modelscope_studio/components/antd/space/compact/__init__.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSpaceCompact(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/space + + Set components spacing. + + When to use: + - Avoid components clinging together and set a unified space. + - Use Space.Compact when child form components are compactly connected and the border is collapsed + + Difference with Flex component: + - Space is used to set the spacing between inline elements. It will add a wrapper element for each child element for inline alignment. Suitable for equidistant arrangement of multiple child elements in rows and columns. + - Flex is used to set the layout of block-level elements. It does not add a wrapper element. Suitable for layout of child elements in vertical or horizontal direction, and provides more flexibility and control. + """ + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + block: bool = False, + direction: Literal['vertical', 'horizontal'] = 'horizontal', + size: Literal['small', 'middle', 'large'] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + block: Option to fit width to its parent's width. + direction: Set direction of layout. + size: Set child component size. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.block = block + self.direction = direction + self.size = size + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("space", "compact") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/spin/__init__.py b/backend/modelscope_studio/components/antd/spin/__init__.py new file mode 100644 index 00000000..bdc5d03f --- /dev/null +++ b/backend/modelscope_studio/components/antd/spin/__init__.py @@ -0,0 +1,74 @@ +from __future__ import annotations + +from typing import Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSpin(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/spin + """ + EVENTS = [] + + # supported slots + SLOTS = ['tip', 'indicator'] + + def __init__( + self, + spinning: bool | None = None, + props: dict | None = None, + *, + delay: int | float | None = None, + fullscreen: bool | None = None, + indicator: str | None = None, + percent: int | float | Literal['auto'] | None = None, + size: Literal['small', 'default', 'large'] | None = None, + tip: str | None = None, + wrapper_class_name: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.spinning = spinning + self.delay = delay + self.fullscreen = fullscreen + self.indicator = indicator + self.percent = percent + self.size = size + self.tip = tip + self.wrapper_class_name = wrapper_class_name + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("spin") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/splitter/__init__.py b/backend/modelscope_studio/components/antd/splitter/__init__.py new file mode 100644 index 00000000..01bf2fa0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/splitter/__init__.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .panel import AntdSplitterPanel + + +class AntdSplitter(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/splitter + + Split panels to isolate. + + When to use: + Can be used to separate areas horizontally or vertically. When you need to freely drag and adjust the size of each area. When you need to specify the maximum and minimum width and height of an area. + """ + Panel = AntdSplitterPanel + + EVENTS = [ + EventListener("resize_start", + doc="Callback before dragging starts.", + callback=lambda block: block._internal.update( + bind_resizeStart_event=True)), + EventListener("resize", + doc="Panel size change callback.", + callback=lambda block: block._internal.update( + bind_resize_event=True)), + EventListener("resize_end", + doc="Drag end callback.", + callback=lambda block: block._internal.update( + bind_resizeEnd_event=True)), + ] + + def __init__( + self, + props: dict | None = None, + *, + layout: Literal['horizontal', 'vertical'] | None = 'horizontal', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + layout: Layout direction. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.layout = layout + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("splitter") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/splitter/panel/__init__.py b/backend/modelscope_studio/components/antd/splitter/panel/__init__.py new file mode 100644 index 00000000..46e9e354 --- /dev/null +++ b/backend/modelscope_studio/components/antd/splitter/panel/__init__.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdSplitterPanel(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/splitter + + Split panels to isolate. + + When to use: + Can be used to separate areas horizontally or vertically. When you need to freely drag and adjust the size of each area. When you need to specify the maximum and minimum width and height of an area. + """ + + EVENTS = [] + + def __init__( + self, + props: dict | None = None, + *, + default_size: str | int | None = None, + min: int | str | None = None, + max: int | str | None = None, + size: int | str | None = None, + collapsible: bool | dict = False, + resizable: bool = True, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + default_size: Initial panel size support number for px or 'percent%' usage. + min: Minimum threshold support number for px or 'percent%' usage. + max: Maximum threshold support number for px or 'percent%' usage. + size: Controlled panel size support number for px or 'percent%' usage. + collapsible: Quick folding. + resizable: Whether to enable drag and drop. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.default_size = default_size + self.min = min + self.max = max + self.size = size + self.collapsible = collapsible + self.resizable = resizable + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("splitter", 'panel') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/statistic/__init__.py b/backend/modelscope_studio/components/antd/statistic/__init__.py new file mode 100644 index 00000000..2b045687 --- /dev/null +++ b/backend/modelscope_studio/components/antd/statistic/__init__.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .countdown import AntdStatisticCountdown + + +class AntdStatistic(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/statistic + """ + Countdown = AntdStatisticCountdown + + EVENTS = [] + + # supported slots + SLOTS = ['prefix', 'suffix', 'title', 'formatter'] + + def __init__( + self, + value: int | float | str | None = None, + props: dict | None = None, + *, + decimal_separator: str | None = None, + formatter: str | None = None, + group_separator: str | None = None, + loading: bool = False, + precision: int | float | None = None, + prefix: str | None = None, + suffix: str | None = None, + title: str | None = None, + value_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.decimal_separator = decimal_separator + self.formatter = formatter + self.group_separator = group_separator + self.loading = loading + self.precision = precision + self.prefix = prefix + self.suffix = suffix + self.title = title + self.value_style = value_style + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("statistic") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/statistic/countdown/__init__.py b/backend/modelscope_studio/components/antd/statistic/countdown/__init__.py new file mode 100644 index 00000000..560b708f --- /dev/null +++ b/backend/modelscope_studio/components/antd/statistic/countdown/__init__.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdStatisticCountdown(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/statistic + """ + + EVENTS = [ + EventListener("finish", + callback=lambda block: block._internal.update( + bind_finish_event=True)), + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + # supported slots + SLOTS = ['prefix', 'suffix', 'title'] + + def __init__( + self, + value: int | float | None = None, + props: dict | None = None, + *, + format: str | None = None, + prefix: str | None = None, + suffix: str | None = None, + title: str | None = None, + value_style: dict | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.value = value + self.format = format + self.prefix = prefix + self.suffix = suffix + self.title = title + self.value_style = value_style + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("statistic", "countdown") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str) -> str: + return payload + + def postprocess(self, value: str) -> str: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/steps/__init__.py b/backend/modelscope_studio/components/antd/steps/__init__.py new file mode 100644 index 00000000..df2c05d6 --- /dev/null +++ b/backend/modelscope_studio/components/antd/steps/__init__.py @@ -0,0 +1,88 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdStepsItem + + +class AntdSteps(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/steps + """ + Item = AntdStepsItem + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + ] + + # supported slots + SLOTS = ['progressDot', "items"] + + def __init__( + self, + props: dict | None = None, + *, + current: int = 0, + direction: Literal['vertical', 'horizontal'] = "horizontal", + initial: int = 0, + label_placement: Literal['horizontal', 'vertical'] = 'horizontal', + percent: int | None = None, + progress_dot: bool | str = False, + responsive: bool = True, + size: Literal['small', 'default'] | None = None, + status: Literal['wait', 'process', 'finish', 'error'] = 'process', + type: Literal['default', 'navigation', 'inline'] = 'default', + items: list[dict] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.current = current + self.direction = direction + self.initial = initial + self.label_placement = label_placement + self.percent = percent + self.progress_dot = progress_dot + self.responsive = responsive + self.size = size + self.status = status + self.type = type + self.items = items + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("steps") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/steps/item/__init__.py b/backend/modelscope_studio/components/antd/steps/item/__init__.py new file mode 100644 index 00000000..9702c78f --- /dev/null +++ b/backend/modelscope_studio/components/antd/steps/item/__init__.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdStepsItem(ModelScopeLayoutComponent): + """ + """ + EVENTS = [] + + # supported slots + SLOTS = ['description', "icon", "subTitle", "title"] + + def __init__( + self, + props: dict | None = None, + *, + description: str | None = None, + disabled: bool | None = False, + icon: str | None = None, + status: Literal['wait', 'process', 'finish', 'error'] + | None = None, + sub_title: str | None = None, + title: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.description = description + self.disabled = disabled + self.icon = icon + self.status = status + self.sub_title = sub_title + self.title = title + + FRONTEND_DIR = resolve_frontend_dir("steps", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/switch/__init__.py b/backend/modelscope_studio/components/antd/switch/__init__.py new file mode 100644 index 00000000..a9724955 --- /dev/null +++ b/backend/modelscope_studio/components/antd/switch/__init__.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdSwitch(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/switch + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + ] + + # supported slots + SLOTS = ['checkedChildren', 'unCheckedChildren'] + + def __init__( + self, + value: bool | None = False, + props: dict | None = None, + *, + auto_focus: bool | None = None, + checked: bool | None = None, + checked_children: str | None = None, + default_checked: bool | None = None, + disabled: bool | None = None, + loading: bool | None = None, + size: Literal['default', 'small'] | None = None, + un_checked_children: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.auto_focus = auto_focus + self.checked = checked + self.checked_children = checked_children + self.default_checked = default_checked + self.disabled = disabled + self.loading = loading + self.size = size + self.un_checked_children = un_checked_children + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("switch") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"type": "boolean"} + + def preprocess(self, payload: None | str) -> None | bool: + return payload + + def postprocess(self, value: None | bool) -> None | bool: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/__init__.py b/backend/modelscope_studio/components/antd/table/__init__.py new file mode 100644 index 00000000..e2fb8cbd --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/__init__.py @@ -0,0 +1,144 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .column import AntdTableColumn +from .column_group import AntdTableColumnGroup +from .constants import (EXPAND_COLUMN, SELECTION_ALL, SELECTION_COLUMN, + SELECTION_INVERT, SELECTION_NONE) +from .expandable import AntdTableExpandable +from .row_selection import AntdTableRowSelection + + +class AntdTable(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + Column = AntdTableColumn + ColumnGroup = AntdTableColumnGroup + Expandable = AntdTableExpandable + RowSelection = AntdTableRowSelection + + # constants + EXPAND_COLUMN = EXPAND_COLUMN + SELECTION_ALL = SELECTION_ALL + SELECTION_COLUMN = SELECTION_COLUMN + SELECTION_INVERT = SELECTION_INVERT + SELECTION_NONE = SELECTION_NONE + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("scroll", + callback=lambda block: block._internal.update( + bind_scroll_event=True)), + ] + + # supported slots + SLOTS = [ + 'footer', + 'title', + 'summary', + "expandable", + "rowSelection" + 'loading.tip', + 'loading.indicator', + 'pagination.showQuickJumper.goButton', + 'pagination.itemRender', + 'showSorterTooltip.title', + ] + + def __init__( + self, + data_source: list[dict] | None = None, + columns: list[dict] | None = None, + props: dict | None = None, + *, + bordered: bool = False, + components: dict | None = None, + expandable: dict | None = None, + footer: str | None = None, + get_popup_container: str | None = None, + loading: bool | dict = False, + locale: dict | None = None, + pagination: bool | dict | None = None, + row_class_name: str | None = None, + row_key: str | None = None, + row_selection: dict | None = None, + row_hoverable: bool | None = None, + scroll: dict | None = None, + show_header: bool = True, + show_sorter_tooltip: bool | dict | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + sort_directions: list[Literal['ascend', 'descend']] | None = None, + sticky: bool | dict | None = None, + summary: str | None = None, + table_layout: Literal['auto', 'fixed'] | None = None, + title: str | None = None, + virtual: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.data_source = data_source + self.columns = columns + self.bordered = bordered + self.components = components + self.expandable = expandable + self.footer = footer + self.get_popup_container = get_popup_container + self.loading = loading + self.locale = locale + self.pagination = pagination + self.row_class_name = row_class_name + self.row_key = row_key + self.row_selection = row_selection + self.row_hoverable = row_hoverable + self.scroll = scroll + self.show_header = show_header + self.show_sorter_tooltip = show_sorter_tooltip + self.size = size + self.sort_directions = sort_directions + self.sticky = sticky + self.summary = summary + self.table_layout = table_layout + self.title = title + self.virtual = virtual + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("table") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/column/__init__.py b/backend/modelscope_studio/components/antd/table/column/__init__.py new file mode 100644 index 00000000..ca210657 --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/column/__init__.py @@ -0,0 +1,132 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTableColumn(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + EVENTS = [ + EventListener("filter_dropdown_open_change", + callback=lambda block: block._internal.update( + bind_filterDropdownOpenChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'filterDropdown', 'filterIcon', 'render', 'title', 'sortIcon', + 'showSorterTooltip.title' + ] + + def __init__( + self, + props: dict | None = None, + built_in_column: Literal['SELECTION_COLUMN', 'EXPAND_COLUMN'] + | None = None, + *, + align: str | None = None, + col_span: int | None = None, + data_index: str | list[str] | None = None, + default_filtered_value: list[str] | None = None, + filter_reset_to_default_filtered_value: bool | None = False, + default_sort_order: Literal['ascend', 'descend'] | None = None, + ellipsis: bool | dict | None = None, + filter_dropdown: str | None = None, + filter_dropdown_open: bool | None = None, + filtered: bool | None = None, + filtered_value: list[str] | None = None, + filter_icon: str | None = None, + filter_on_close: bool | None = None, + filter_multiple: bool | None = None, + filter_mode: Literal['menu', 'tree'] | None = None, + filter_search: bool | str | None = None, + filters: list[dict] | None = None, + fixed: str | bool | None = None, + key: str | None = None, + column_render: str | None = None, + responsive: list[str] | None = None, + row_scope: Literal['row', 'rowgroup'] | None = None, + should_cell_update: str | None = None, + show_sorter_tooltip: bool | dict | None = None, + sort_directions: list[Literal['ascend', 'descend']] | None = None, + sorter: bool | dict | str | None = None, + sort_order: Literal['ascend', 'descend'] | None = None, + sort_icon: str | None = None, + title: str | None = None, + width: int | float | str | None = None, + min_width: int | float | str | None = None, + hidden: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.built_in_column = built_in_column + self.align = align + self.col_span = col_span + self.data_index = data_index + self.default_filtered_value = default_filtered_value + self.filter_reset_to_default_filtered_value = filter_reset_to_default_filtered_value + self.default_sort_order = default_sort_order + self.ellipsis = ellipsis + self.filter_dropdown = filter_dropdown + self.filter_dropdown_open = filter_dropdown_open + self.filtered = filtered + self.filtered_value = filtered_value + self.filter_icon = filter_icon + self.filter_on_close = filter_on_close + self.filter_multiple = filter_multiple + self.filter_mode = filter_mode + self.filter_search = filter_search + self.filters = filters + self.fixed = fixed + self.key = key + self.column_render = column_render + self.responsive = responsive + self.row_scope = row_scope + self.should_cell_update = should_cell_update + self.show_sorter_tooltip = show_sorter_tooltip + self.sorter = sorter + self.sort_directions = sort_directions + self.sort_order = sort_order + self.sort_icon = sort_icon + self.title = title + self.width = width + self.min_width = min_width + self.hidden = hidden + + FRONTEND_DIR = resolve_frontend_dir("table", "column") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/column_group/__init__.py b/backend/modelscope_studio/components/antd/table/column_group/__init__.py new file mode 100644 index 00000000..ee3fb2b1 --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/column_group/__init__.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTableColumnGroup(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + EVENTS = [] + + # supported slots + SLOTS = [ + 'title', + ] + + def __init__( + self, + title: str | None = None, + props: dict | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.title = title + + FRONTEND_DIR = resolve_frontend_dir("table", "column-group") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/constants.py b/backend/modelscope_studio/components/antd/table/constants.py new file mode 100644 index 00000000..44227dcd --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/constants.py @@ -0,0 +1,5 @@ +EXPAND_COLUMN = "EXPAND_COLUMN" +SELECTION_COLUMN = "SELECTION_COLUMN" +SELECTION_ALL = "SELECT_ALL" +SELECTION_INVERT = "SELECT_INVERT" +SELECTION_NONE = "SELECT_NONE" diff --git a/backend/modelscope_studio/components/antd/table/expandable/__init__.py b/backend/modelscope_studio/components/antd/table/expandable/__init__.py new file mode 100644 index 00000000..8741196b --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/expandable/__init__.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTableExpandable(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + EVENTS = [ + EventListener("expand", + callback=lambda block: block._internal.update( + bind_expand_event=True)), + EventListener("expanded_rows_change", + callback=lambda block: block._internal.update( + bind_expandedRowsChange_event=True)), + ] + + # supported slots + SLOTS = ['columnTitle', 'expandIcon', 'expandedRowRender'] + + def __init__( + self, + props: dict | None = None, + *, + children_column_name: str | None = None, + column_title: str | None = None, + column_width: int | float | str | None = None, + expanded_row_class_name: str | None = None, + expanded_row_keys: list[str] | None = None, + expanded_row_render: str | None = None, + expand_icon: str | None = None, + default_expand_all_rows: bool | None = None, + default_expanded_row_keys: list[str] | None = None, + expand_row_by_click: bool | None = None, + fixed: bool | Literal['left', 'right'] | None = None, + indent_size: int | float | None = 15, + row_expandable: str | None = None, + show_expand_column: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.children_column_name = children_column_name + self.column_title = column_title + self.column_width = column_width + self.expanded_row_class_name = expanded_row_class_name + self.expanded_row_keys = expanded_row_keys + self.expanded_row_render = expanded_row_render + self.expand_icon = expand_icon + self.default_expand_all_rows = default_expand_all_rows + self.default_expanded_row_keys = default_expanded_row_keys + self.expand_row_by_click = expand_row_by_click + self.fixed = fixed + self.indent_size = indent_size + self.row_expandable = row_expandable + self.show_expand_column = show_expand_column + + FRONTEND_DIR = resolve_frontend_dir("table", "expandable") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: list[str] | None) -> list[str] | None: + return payload + + def postprocess(self, value: list[str] | None) -> list[str] | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/row_selection/__init__.py b/backend/modelscope_studio/components/antd/table/row_selection/__init__.py new file mode 100644 index 00000000..3b5ad710 --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/row_selection/__init__.py @@ -0,0 +1,109 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .selection import AntdTableRowSelectionSelection + + +class AntdTableRowSelection(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + Selection = AntdTableRowSelectionSelection + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("select_all", + callback=lambda block: block._internal.update( + bind_selectAll_event=True)), + EventListener("select_invert", + callback=lambda block: block._internal.update( + bind_selectInvert_event=True)), + EventListener("select_none", + callback=lambda block: block._internal.update( + bind_selectNone_event=True)), + EventListener("select_multiple", + callback=lambda block: block._internal.update( + bind_selectMultiple_event=True)), + ] + + # supported slots + SLOTS = [ + 'columnTitle', + 'renderCell', + 'selections', + ] + + def __init__( + self, + props: dict | None = None, + *, + check_strictly: bool | None = None, + column_title: str | None = None, + column_width: int | float | str | None = None, + fixed: bool | None = None, + get_checkbox_props: str | None = None, + hide_select_all: bool | None = None, + preserve_selected_rows_keys: bool | None = None, + render_cell: str | None = None, + selected_row_keys: list[str] | list[int | float] | None = None, + default_selected_row_keys: list[str] | list[int | float] + | None = None, + selections: list[dict] | bool | None = None, + type: Literal["checkbox", "radio"] | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.check_strictly = check_strictly + self.column_title = column_title + self.column_width = column_width + self.fixed = fixed + self.get_checkbox_props = get_checkbox_props + self.hide_select_all = hide_select_all + self.preserve_selected_rows_keys = preserve_selected_rows_keys + self.render_cell = render_cell + self.selected_row_keys = selected_row_keys + self.default_selected_row_keys = default_selected_row_keys + self.selections = selections + self.type = type + + FRONTEND_DIR = resolve_frontend_dir("table", "row-selection") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/table/row_selection/selection/__init__.py b/backend/modelscope_studio/components/antd/table/row_selection/selection/__init__.py new file mode 100644 index 00000000..019b2f52 --- /dev/null +++ b/backend/modelscope_studio/components/antd/table/row_selection/selection/__init__.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ......utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTableRowSelectionSelection(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/table + """ + EVENTS = [ + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + ] + + # supported slots + SLOTS = [ + 'text', + ] + + def __init__( + self, + text: str | None = None, + built_in_selection: Literal["SELECT_ALL", "SELECT_INVERT", + "SELECT_NONE"] | None = None, + props: dict | None = None, + *, + key: str | int | float | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.key = key + self.text = text + self.built_in_selection = built_in_selection + + FRONTEND_DIR = resolve_frontend_dir("table", + ["row-selection", 'selection']) + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tabs/__init__.py b/backend/modelscope_studio/components/antd/tabs/__init__.py new file mode 100644 index 00000000..18726f41 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tabs/__init__.py @@ -0,0 +1,118 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdTabsItem + + +class AntdTabs(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tabs + """ + Item = AntdTabsItem + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("edit", + callback=lambda block: block._internal.update( + bind_edit_event=True)), + EventListener("tab_click", + callback=lambda block: block._internal.update( + bind_tabClick_event=True)), + EventListener("tab_scroll", + callback=lambda block: block._internal.update( + bind_tabScroll_event=True)), + ] + + # supported slots + SLOTS = [ + 'addIcon', 'removeIcon', 'renderTabBar', 'tabBarExtraContent', + 'tabBarExtraContent.left', 'tabBarExtraContent.right', 'more.icon', + 'items' + ] + + def __init__( + self, + props: dict | None = None, + *, + active_key: str | None = None, + add_icon: str | None = None, + animated: bool | dict | None = None, + centered: bool | None = None, + default_active_key: str | None = None, + hide_add: bool | None = None, + indicator: dict | None = None, + items: list[dict] | None = None, + more: dict | None = None, + remove_icon: str | None = None, + popup_class_name: str | None = None, + render_tab_bar: str | None = None, + size: Literal["small", "middle", "large"] | None = None, + tab_bar_extra_content: str | dict | None = None, + tab_bar_gutter: int | float | None = None, + tab_bar_style: dict | None = None, + tab_position: Literal["left", "right", "top", "bottom"] + | None = None, + destroy_inactive_tab_pane: bool | None = None, + type: Literal["card", "line", "editable-card"] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.active_key = active_key + self.add_icon = add_icon + self.animated = animated + self.centered = centered + self.default_active_key = default_active_key + self.hide_add = hide_add + self.indicator = indicator + self.items = items + self.more = more + self.remove_icon = remove_icon + self.popup_class_name = popup_class_name + self.render_tab_bar = render_tab_bar + self.size = size + self.tab_bar_extra_content = tab_bar_extra_content + self.tab_bar_gutter = tab_bar_gutter + self.tab_bar_style = tab_bar_style + self.tab_position = tab_position + self.destroy_inactive_tab_pane = destroy_inactive_tab_pane + self.type = type + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tabs") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tabs/item/__init__.py b/backend/modelscope_studio/components/antd/tabs/item/__init__.py new file mode 100644 index 00000000..3e481721 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tabs/item/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTabsItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tabs + """ + EVENTS = [] + + # supported slots + SLOTS = ['closeIcon', "icon", "label", "children"] + + def __init__( + self, + props: dict | None = None, + *, + close_icon: str | None = None, + destroy_inactive_tab_pane: bool | None = None, + disabled: bool | None = None, + force_render: bool | None = None, + key: str | None = None, + label: str | None = None, + icon: str | None = None, + closable: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.close_icon = close_icon + self.destroy_inactive_tab_pane = destroy_inactive_tab_pane + self.disabled = disabled + self.force_render = force_render + self.key = key + self.label = label + self.icon = icon + self.closable = closable + + FRONTEND_DIR = resolve_frontend_dir("tabs", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tag/__init__.py b/backend/modelscope_studio/components/antd/tag/__init__.py new file mode 100644 index 00000000..abc7cfaf --- /dev/null +++ b/backend/modelscope_studio/components/antd/tag/__init__.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .checkable_tag import AntdTagCheckableTag + + +class AntdTag(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tag + """ + CheckableTag = AntdTagCheckableTag + + EVENTS = [ + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)) + ] + + # supported slots + SLOTS = ['icon', 'closeIcon'] + + def __init__( + self, + value: str | None = "", + props: dict | None = None, + *, + bordered: bool | None = None, + close_icon: str | bool | None = None, + color: str | None = None, + icon: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.bordered = bordered + self.close_icon = close_icon + self.color = color + self.icon = icon + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tag") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Tag" + + def example_value(self) -> Any: + return "Tag" diff --git a/backend/modelscope_studio/components/antd/tag/checkable_tag/__init__.py b/backend/modelscope_studio/components/antd/tag/checkable_tag/__init__.py new file mode 100644 index 00000000..f9ffdb64 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tag/checkable_tag/__init__.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdTagCheckableTag(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/tag + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)) + ] + + def __init__( + self, + label: str | None = None, + value: bool | None = False, + props: dict | None = None, + *, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.label = label + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tag", 'checkable-tag') + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "type": "boolean", + } + + def preprocess(self, payload: bool | None) -> bool | None: + return payload + + def postprocess(self, value: bool | None) -> bool | None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/time_picker/__init__.py b/backend/modelscope_studio/components/antd/time_picker/__init__.py new file mode 100644 index 00000000..cbb1d362 --- /dev/null +++ b/backend/modelscope_studio/components/antd/time_picker/__init__.py @@ -0,0 +1,145 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .range_picker import AntdTimePickerRangePicker + + +# as inputs, outputs +class AntdTimePicker(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/time-picker + """ + RangePicker = AntdTimePickerRangePicker + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)), + EventListener("calendar_change", + callback=lambda block: block._internal.update( + bind_calendarChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'cellRender', + 'panelRender', + ] + + def __init__( + self, + value: str | int | float | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict | None = None, + auto_focus: bool | None = None, + cell_render: str | None = None, + change_on_scroll: bool | None = None, + default_value: str | int | float | None = None, + disabled: bool | None = None, + disabled_time: str | None = None, + format: str | None = 'HH:mm:ss', + get_popup_container: dict | None = None, + hide_disabled_options: bool | None = None, + hour_step: int | None = 1, + input_read_only: bool | None = False, + minute_step: int | None = 1, + need_confirm: bool | None = None, + open: bool | None = None, + placeholder: str | list[str] | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] + | None = 'bottomLeft', + popup_class_name: str | None = None, + popup_style: dict | None = None, + render_extra_footer: str | None = None, + second_step: int | None = 1, + show_now: bool | None = True, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + use_12_hours: bool | None = False, + variant: Literal['outlined', 'borderless', 'filled'] + | None = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.cell_render = cell_render + self.change_on_scroll = change_on_scroll + self.default_value = default_value + self.disabled = disabled + self.disabled_time = disabled_time + self.format = format + self.get_popup_container = get_popup_container + self.hide_disabled_options = hide_disabled_options + self.hour_step = hour_step + self.input_read_only = input_read_only + self.minute_step = minute_step + self.need_confirm = need_confirm + self.open = open + self.placeholder = placeholder + self.placement = placement + self.popup_class_name = popup_class_name + self.popup_style = popup_style + self.render_extra_footer = render_extra_footer + self.second_step = second_step + self.show_now = show_now + self.size = size + self.status = status + self.suffix_icon = suffix_icon + self.use_12_hours = use_12_hours + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("time-picker") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return {"anyOf": [{"type": "number"}, {"type": "string"}]} + + def preprocess(self, payload: int | float) -> int | float: + return payload + + def postprocess(self, value: int | float | str) -> int | str: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py b/backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py new file mode 100644 index 00000000..a3e4cd8c --- /dev/null +++ b/backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdTimePickerRangePicker(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/time-picker + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener( + "calendar_change", + callback=lambda block: block._internal.update(bind_ok_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_calendarChange_event=True)), + EventListener("blur", + callback=lambda block: block._internal.update( + bind_blur_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'separator', + 'cellRender', + 'panelRender', + ] + + def __init__( + self, + value: tuple[str | int | float, str | int | float] | None = None, + props: dict | None = None, + *, + order: bool = True, + allow_clear: bool | dict | None = None, + auto_focus: bool | None = None, + cell_render: str | None = None, + change_on_scroll: bool | None = None, + default_value: str | int | float | None = None, + disabled: bool | None = None, + disabled_time: str | None = None, + format: str | None = 'HH:mm:ss', + get_popup_container: dict | None = None, + hide_disabled_options: bool | None = None, + hour_step: int | None = 1, + input_read_only: bool | None = False, + minute_step: int | None = 1, + need_confirm: bool | None = None, + open: bool | None = None, + placeholder: str | list[str] | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] + | None = 'bottomLeft', + popup_class_name: str | None = None, + popup_style: dict | None = None, + render_extra_footer: str | None = None, + second_step: int | None = 1, + show_now: bool | None = True, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + use_12_hours: bool | None = False, + variant: Literal['outlined', 'borderless', 'filled'] + | None = 'outlined', + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.order = order + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.cell_render = cell_render + self.change_on_scroll = change_on_scroll + self.default_value = default_value + self.disabled = disabled + self.disabled_time = disabled_time + self.format = format + self.get_popup_container = get_popup_container + self.hide_disabled_options = hide_disabled_options + self.hour_step = hour_step + self.input_read_only = input_read_only + self.minute_step = minute_step + self.need_confirm = need_confirm + self.open = open + self.placeholder = placeholder + self.placement = placement + self.popup_class_name = popup_class_name + self.popup_style = popup_style + self.render_extra_footer = render_extra_footer + self.second_step = second_step + self.show_now = show_now + self.size = size + self.status = status + self.suffix_icon = suffix_icon + self.use_12_hours = use_12_hours + self.variant = variant + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("time-picker", 'range-picker') + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "type": "array", + "items": { + "anyOf": [{ + "type": "number" + }, { + "type": "string" + }] + } + } + + def preprocess( + self, payload: tuple[str | int | float, str | int | float] + ) -> tuple[str | int | float, str | int | float]: + return payload + + def postprocess( + self, value: tuple[str | int | float, str | int | float] + ) -> tuple[str | int | float, str | int | float]: + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/timeline/__init__.py b/backend/modelscope_studio/components/antd/timeline/__init__.py new file mode 100644 index 00000000..5a7768fb --- /dev/null +++ b/backend/modelscope_studio/components/antd/timeline/__init__.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from typing import Literal + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .item import AntdTimelineItem + + +class AntdTimeline(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/timeline + """ + Item = AntdTimelineItem + EVENTS = [] + + # supported slots + SLOTS = ['pending', 'pendingDot'] + + def __init__( + self, + props: dict | None = None, + *, + mode: Literal["left", "alternate", "right"] | None = None, + pending: str | bool | None = None, + pending_dot: str | None = None, + reverse: bool | None = None, + items: list[dict] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.mode = mode + self.pending = pending + self.pending_dot = pending_dot + self.reverse = reverse + self.items = items + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("timeline") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/timeline/item/__init__.py b/backend/modelscope_studio/components/antd/timeline/item/__init__.py new file mode 100644 index 00000000..dc105958 --- /dev/null +++ b/backend/modelscope_studio/components/antd/timeline/item/__init__.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from typing import Literal + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTimelineItem(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/timeline + """ + EVENTS = [] + + # supported slots + SLOTS = ['dot', "label", "children"] + + def __init__( + self, + props: dict | None = None, + *, + color: str | None = None, + dot: str | None = None, + label: str | None = None, + position: Literal["left", "right"] | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.color = color + self.dot = dot + self.label = label + self.position = position + + FRONTEND_DIR = resolve_frontend_dir("timeline", "item") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tooltip/__init__.py b/backend/modelscope_studio/components/antd/tooltip/__init__.py new file mode 100644 index 00000000..a3cec615 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tooltip/__init__.py @@ -0,0 +1,114 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTooltip(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tooltip + """ + EVENTS = [ + EventListener("open_change", + callback=lambda block: block._internal.update( + bind_openChange_event=True)) + ] + + # supported slots + SLOTS = ['title'] + + def __init__( + self, + title: str | None = "", + props: dict | None = None, + *, + align: dict | None = None, + arrow: bool | dict | None = True, + auto_adjust_overflow: bool = True, + color: str | None = None, + default_open: bool = False, + destroy_tooltip_on_hide: bool = False, + fresh: bool = False, + get_popup_container: str | None = None, + mouse_enter_delay: float | int = 0.1, + mouse_leave_delay: float | int = 0.1, + overlay_class_name: str | None = None, + overlay_style: dict | None = None, + overlay_inner_style: dict | None = None, + placement: Literal[ + 'top', + 'left', + 'right', + 'bottom', + 'topLeft', + 'topRight', + 'bottomLeft', + 'bottomRight', + 'leftTop', + 'leftBottom', + 'rightTop', + 'rightBottom', + ] = 'top', + trigger: Literal['hover', 'focus', 'click', 'contextMenu'] + | list[Literal['hover', 'focus', 'click', 'contextMenu']] = 'hover', + open: bool | None = None, + z_index: int | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.title = title + self.props = props + self.align = align + self.arrow = arrow + self.auto_adjust_overflow = auto_adjust_overflow + self.color = color + self.default_open = default_open + self.destroy_tooltip_on_hide = destroy_tooltip_on_hide + self.fresh = fresh + self.get_popup_container = get_popup_container + self.mouse_enter_delay = mouse_enter_delay + self.mouse_leave_delay = mouse_leave_delay + self.overlay_class_name = overlay_class_name + self.overlay_style = overlay_style + self.overlay_inner_style = overlay_inner_style + self.placement = placement + self.trigger = trigger + self.open = open + self.z_index = z_index + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tooltip") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> str: + return "Tooltip" + + def example_value(self) -> str: + return "Tooltip" diff --git a/backend/modelscope_studio/components/antd/tour/__init__.py b/backend/modelscope_studio/components/antd/tour/__init__.py new file mode 100644 index 00000000..52e5dc1e --- /dev/null +++ b/backend/modelscope_studio/components/antd/tour/__init__.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .step import AntdTourStep + + +class AntdTour(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tour + """ + Step = AntdTourStep + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)), + EventListener("finish", + callback=lambda block: block._internal.update( + bind_finish_event=True)), + ] + + # supported slots + SLOTS = ['closeIcon', 'indicatorsRender'] + + def __init__( + self, + props: dict | None = None, + *, + open: bool | None = None, + current: int | None = None, + arrow: bool | dict | None = True, + close_icon: str | None = None, + disabled_interaction: bool | None = False, + gap: dict | None = None, + placement: Literal['center', 'left', 'leftTop', 'leftBottom', + 'right' + 'rightTop', 'rightBottom', 'top', 'topLeft', + 'topRight', 'bottom', 'bottomLeft', + 'bottomRight'] = 'bottom', + mask: bool | dict = True, + type: Literal['default', 'primary'] = 'default', + scroll_into_view_options: bool | dict = True, + indicators_render: str | None = None, + z_index: int | None = None, + get_popup_container: str | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.open = open + self.current = current + self.arrow = arrow + self.close_icon = close_icon + self.disabled_interaction = disabled_interaction + self.gap = gap + self.placement = placement + self.mask = mask + self.type = type + self.scroll_into_view_options = scroll_into_view_options + self.indicators_render = indicators_render + self.z_index = z_index + self.get_popup_container = get_popup_container + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tour") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tour/step/__init__.py b/backend/modelscope_studio/components/antd/tour/step/__init__.py new file mode 100644 index 00000000..2b68fddb --- /dev/null +++ b/backend/modelscope_studio/components/antd/tour/step/__init__.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from typing import Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTourStep(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tour + """ + EVENTS = [ + EventListener("close", + callback=lambda block: block._internal.update( + bind_close_event=True)), + EventListener("next_button_props_click", + callback=lambda block: block._internal.update( + bind_nextButtonProps_click_event=True)), + EventListener("prev_button_props_click", + callback=lambda block: block._internal.update( + bind_prevButtonProps_click_event=True)), + ] + + # supported slots + SLOTS = [ + 'closeIcon', "cover", "title", "description", + "nextButtonProps.children", "prevButtonProps.children" + ] + + def __init__( + self, + props: dict | None = None, + *, + get_target: str | None = None, + arrow: bool | dict | None = True, + close_icon: str | None = None, + cover: str | None = None, + title: str | None = None, + description: str | None = None, + placement: Literal['center', 'left', 'leftTop', 'leftBottom', + 'right' + 'rightTop', 'rightBottom', 'top', 'topLeft', + 'topRight', 'bottom', 'bottomLeft', + 'bottomRight'] = 'bottom', + mask: bool | dict = True, + type: Literal['default', 'primary'] = 'default', + next_button_props: dict | None = None, + prev_button_props: dict | None = None, + scroll_into_view_options: bool | dict = True, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.get_target = get_target + self.arrow = arrow + self.close_icon = close_icon + self.cover = cover + self.title = title + self.description = description + self.placement = placement + self.mask = mask + self.type = type + self.next_button_props = next_button_props + self.prev_button_props = prev_button_props + self.scroll_into_view_options = scroll_into_view_options + + FRONTEND_DIR = resolve_frontend_dir("tour", "step") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/transfer/__init__.py b/backend/modelscope_studio/components/antd/transfer/__init__.py new file mode 100644 index 00000000..0348ac93 --- /dev/null +++ b/backend/modelscope_studio/components/antd/transfer/__init__.py @@ -0,0 +1,139 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +# as inputs, outputs +class AntdTransfer(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/transfer + """ + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("scroll", + callback=lambda block: block._internal.update( + bind_scroll_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("select_change", + callback=lambda block: block._internal.update( + bind_selectChange_event=True)), + ] + + # supported slots + SLOTS = [ + 'selectionsIcon', 'titles', 'footer', 'locale.notFoundContent', + 'selectAllLabels', 'render' + ] + + def __init__( + self, + value: list[float | int | str] | None = None, + props: dict | None = None, + *, + data_source: list[dict] | None = None, + disabled: bool | None = None, + selections_icon: str | None = None, + filter_option: str | None = None, + footer: str | None = None, + list_style: dict | str | None = None, + locale: dict | None = None, + one_way: bool | None = False, + operations: list[str] | None = None, + operations_style: dict | None = None, + pagination: bool | dict | None = False, + item_render: str | None = None, + select_all_labels: list[str] | None = None, + selected_keys: list[str] | list[int | float] | None = None, + show_search: bool | None = False, + show_select_all: bool | None = True, + status: Literal['error', 'warning'] | None = None, + target_keys: list[str] | list[int | float] | None = None, + titles: list[str] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + key: int | str | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + key=key, + elem_style=elem_style, + **kwargs) + self.props = props + self.data_source = data_source + self.disabled = disabled + self.selections_icon = selections_icon + self.filter_option = filter_option + self.footer = footer + self.list_style = list_style + self.locale = locale + self.one_way = one_way + self.operations = operations + self.operations_style = operations_style + self.pagination = pagination + self.item_render = item_render + self.select_all_labels = select_all_labels + self.selected_keys = selected_keys + self.show_search = show_search + self.show_select_all = show_select_all + self.status = status + self.target_keys = target_keys + self.titles = titles + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("transfer") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string", + }, + { + "type": "number", + }, + ], + }, + }, + + def preprocess( + self, payload: list[float | int | str] | None + ) -> list[float | int | str] | None: + return payload + + def postprocess( + self, value: list[float | int | str] | None + ) -> list[float | int | str] | None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/antd/tree/__init__.py b/backend/modelscope_studio/components/antd/tree/__init__.py new file mode 100644 index 00000000..4825f7e5 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tree/__init__.py @@ -0,0 +1,166 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from .directory_tree import AntdTreeDirectoryTree +from .tree_node import AntdTreeTreeNode + + +class AntdTree(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tree + """ + TreeNode = AntdTreeTreeNode + DirectoryTree = AntdTreeDirectoryTree + + EVENTS = [ + EventListener("check", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("drag_end", + callback=lambda block: block._internal.update( + bind_dragEnd_event=True)), + EventListener("drag_enter", + callback=lambda block: block._internal.update( + bind_dragEnter_event=True)), + EventListener("drag_leave", + callback=lambda block: block._internal.update( + bind_dragLeave_event=True)), + EventListener("drag_over", + callback=lambda block: block._internal.update( + bind_dragOver_event=True)), + EventListener("drag_start", + callback=lambda block: block._internal.update( + bind_dragStart_event=True)), + EventListener("drop", + callback=lambda block: block._internal.update( + bind_dragDrop_event=True)), + EventListener("expand", + callback=lambda block: block._internal.update( + bind_expand_event=True)), + EventListener("load", + callback=lambda block: block._internal.update( + bind_load_event=True)), + EventListener("right_click", + callback=lambda block: block._internal.update( + bind_rightClick_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("load_data", + callback=lambda block: block._internal.update( + bind_loadData_event=True)), + ] + + # supported slots + SLOTS = [ + 'switcherLoadingIcon', + 'switcherIcon', + 'showLine.showLeafIcon', + 'icon', + 'treeData', + 'draggable.icon', + ] + + def __init__( + self, + props: dict | None = None, + *, + allow_drop: str | None = None, + auto_expand_parent: bool | None = None, + block_node: bool | None = None, + checkable: bool | None = None, + checked_keys: list[str] | dict | None = None, + check_strictly: bool | None = None, + default_checked_keys: list[str] | None = None, + default_expand_all: bool | None = None, + default_expanded_keys: list[str] | None = None, + default_expand_parent: bool | None = None, + default_selected_keys: list[str] | None = None, + disabled: bool | None = None, + draggable: bool | dict | str | None = None, + expanded_keys: list[str] | None = None, + filed_names: dict | None = None, + filter_tree_node: str | None = None, + height: int | float | None = None, + icon: str | None = None, + loaded_keys: list[str] | None = None, + multiple: bool | None = None, + root_style: dict | None = None, + selectable: bool | None = None, + selected_keys: list[str] | None = None, + show_icon: bool | None = None, + show_line: bool | dict | None = None, + switcher_icon: str | None = None, + title_render: str | None = None, + tree_data: list[dict] | None = None, + virtual: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_drop = allow_drop + self.auto_expand_parent = auto_expand_parent + self.block_node = block_node + self.checkable = checkable + self.checked_keys = checked_keys + self.check_strictly = check_strictly + self.default_checked_keys = default_checked_keys + self.default_expand_all = default_expand_all + self.default_expanded_keys = default_expanded_keys + self.default_expand_parent = default_expand_parent + self.default_selected_keys = default_selected_keys + self.disabled = disabled + self.draggable = draggable + self.expanded_keys = expanded_keys + self.filed_names = filed_names + self.filter_tree_node = filter_tree_node + self.height = height + self.icon = icon + self.loaded_keys = loaded_keys + self.multiple = multiple + self.root_style = root_style + self.selectable = selectable + self.selected_keys = selected_keys + self.show_icon = show_icon + self.show_line = show_line + self.switcher_icon = switcher_icon + self.title_render = title_render + self.tree_data = tree_data + self.virtual = virtual + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tree") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None | None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py b/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py new file mode 100644 index 00000000..0d987747 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py @@ -0,0 +1,165 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTreeDirectoryTree(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tree + """ + + EVENTS = [ + EventListener("check", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("drag_end", + callback=lambda block: block._internal.update( + bind_dragEnd_event=True)), + EventListener("drag_enter", + callback=lambda block: block._internal.update( + bind_dragEnter_event=True)), + EventListener("drag_leave", + callback=lambda block: block._internal.update( + bind_dragLeave_event=True)), + EventListener("drag_over", + callback=lambda block: block._internal.update( + bind_dragOver_event=True)), + EventListener("drag_start", + callback=lambda block: block._internal.update( + bind_dragStart_event=True)), + EventListener("drop", + callback=lambda block: block._internal.update( + bind_dragDrop_event=True)), + EventListener("expand", + callback=lambda block: block._internal.update( + bind_expand_event=True)), + EventListener("load", + callback=lambda block: block._internal.update( + bind_load_event=True)), + EventListener("right_click", + callback=lambda block: block._internal.update( + bind_rightClick_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("load_data", + callback=lambda block: block._internal.update( + bind_loadData_event=True)), + ] + + # supported slots + SLOTS = [ + 'switcherLoadingIcon', + 'switcherIcon', + 'showLine.showLeafIcon', + 'icon', + 'treeData', + 'draggable.icon', + ] + + def __init__( + self, + props: dict | None = None, + *, + expand_action: Literal['click', 'doubleClick'] | bool + | None = None, + allow_drop: str | None = None, + auto_expand_parent: bool | None = None, + block_node: bool | None = None, + checkable: bool | None = None, + checked_keys: list[str] | dict | None = None, + check_strictly: bool | None = None, + default_checked_keys: list[str] | None = None, + default_expand_all: bool | None = None, + default_expanded_keys: list[str] | None = None, + default_expand_parent: bool | None = None, + default_selected_keys: list[str] | None = None, + disabled: bool | None = None, + draggable: bool | dict | str | None = None, + expanded_keys: list[str] | None = None, + filed_names: dict | None = None, + filter_tree_node: str | None = None, + height: int | float | None = None, + icon: str | None = None, + loaded_keys: list[str] | None = None, + multiple: bool | None = None, + root_style: dict | None = None, + selectable: bool | None = None, + selected_keys: list[str] | None = None, + show_icon: bool | None = None, + show_line: bool | dict | None = None, + switcher_icon: str | None = None, + title_render: str | None = None, + tree_data: list[dict] | None = None, + virtual: bool | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.expand_action = expand_action + self.allow_drop = allow_drop + self.auto_expand_parent = auto_expand_parent + self.block_node = block_node + self.checkable = checkable + self.checked_keys = checked_keys + self.check_strictly = check_strictly + self.default_checked_keys = default_checked_keys + self.default_expand_all = default_expand_all + self.default_expanded_keys = default_expanded_keys + self.default_expand_parent = default_expand_parent + self.default_selected_keys = default_selected_keys + self.disabled = disabled + self.draggable = draggable + self.expanded_keys = expanded_keys + self.filed_names = filed_names + self.filter_tree_node = filter_tree_node + self.height = height + self.icon = icon + self.loaded_keys = loaded_keys + self.multiple = multiple + self.root_style = root_style + self.selectable = selectable + self.selected_keys = selected_keys + self.show_icon = show_icon + self.show_line = show_line + self.switcher_icon = switcher_icon + self.title_render = title_render + self.tree_data = tree_data + self.virtual = virtual + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tree", "directory-tree") + + @property + def skip_api(self): + return False + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/tree/tree_node/__init__.py b/backend/modelscope_studio/components/antd/tree/tree_node/__init__.py new file mode 100644 index 00000000..77b1a648 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tree/tree_node/__init__.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTreeTreeNode(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tree + """ + + EVENTS = [] + + # supported slots + SLOTS = ["title", 'icon'] + + def __init__( + self, + title: str | None = None, + props: dict | None = None, + *, + checkable: bool | None = None, + disable_checkbox: bool | None = None, + disabled: bool | None = None, + icon: str | None = None, + is_leaf: bool | None = None, + key: str | None = None, + selectable: bool | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.title = title + self.props = props + self.checkable = checkable + self.disable_checkbox = disable_checkbox + self.disabled = disabled + self.icon = icon + self.is_leaf = is_leaf + self.key = key + self.selectable = selectable + + FRONTEND_DIR = resolve_frontend_dir("tree", "tree-node") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/tree_select/__init__.py b/backend/modelscope_studio/components/antd/tree_select/__init__.py new file mode 100644 index 00000000..5f3c82f1 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tree_select/__init__.py @@ -0,0 +1,204 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .tree_node import AntdTreeSelectTreeNode + + +# as inputs, outputs +class AntdTreeSelect(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/tree-select + """ + TreeNode = AntdTreeSelectTreeNode + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_change_event=True)), + EventListener("select", + callback=lambda block: block._internal.update( + bind_select_event=True)), + EventListener("search", + callback=lambda block: block._internal.update( + bind_search_event=True)), + EventListener("tree_expand", + callback=lambda block: block._internal.update( + bind_treeExpand_event=True)), + EventListener("popup_scroll", + callback=lambda block: block._internal.update( + bind_popupScroll_event=True)), + EventListener("dropdown_visible_change", + callback=lambda block: block._internal.update( + bind_dropdownVisibleChange_event=True)), + EventListener("load_data", + callback=lambda block: block._internal.update( + bind_loadData_event=True)), + ] + + # supported slots + SLOTS = [ + 'allowClear.clearIcon', + 'maxTagPlaceholder', + 'notFoundContent', + 'suffixIcon', + 'switcherIcon', + 'dropdownRender', + 'tagRender', + 'treeTitleRender', + ] + + def __init__( + self, + value: str | list[str] | None = None, + props: dict | None = None, + *, + allow_clear: bool | dict | None = None, + auto_clear_search_value: bool | None = True, + auto_focus: bool | None = None, + default_value: str | list[str] | None = None, + disabled: bool | None = False, + popup_class_name: str | None = None, + popup_match_select_width: bool | float | int | None = True, + dropdown_render: str | None = None, + dropdown_style: dict | None = None, + field_names: dict | None = None, + filter_tree_node: str | bool | None = None, + get_popup_container: dict | None = None, + label_in_value: bool | None = False, + list_height: int | None = 256, + loading: bool | None = None, + max_tag_count: int | None = None, + max_tag_placeholder: str | None = None, + max_tag_text_length: int | None = None, + multiple: bool | None = None, + not_found_content: str | None = None, + placeholder: str | None = None, + placement: Literal['bottomLeft', 'bottomRight', 'topLeft', + 'topRight'] | None = 'bottomLeft', + search_value: str | None = None, + show_checked_strategy: Literal['SHOW_ALL', 'SHOW_PARENT', + 'SHOW_CHILD'] | None = None, + show_search: bool | None = None, + size: Literal['large', 'middle', 'small'] | None = None, + status: Literal['error', 'warning'] | None = None, + suffix_icon: str | None = None, + switcher_icon: str | None = None, + tag_render: str | None = None, + tree_checkable: bool | None = False, + tree_check_strictly: bool | None = False, + tree_data: list[dict] | None = None, + tree_data_simple_mode: bool | dict | None = False, + tree_title_render: str | None = None, + tree_default_expand_all: bool | None = False, + tree_default_expanded_keys: list[str] | None = None, + tree_expand_action: str | bool = False, + tree_expanded_keys: list[str] | None = None, + tree_icon: bool | None = None, + tree_line: bool | dict | None = None, + tree_loaded_keys: list[str] | None = None, + tree_node_filter_prop: str | None = None, + tree_node_label_prop: str | None = None, + variant: Literal['outline', 'borderless', 'solid'] + | None = 'outline', + virtual: bool | None = True, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.allow_clear = allow_clear + self.auto_focus = auto_focus + self.auto_clear_search_value = auto_clear_search_value + self.default_value = default_value + self.disabled = disabled + self.popup_class_name = popup_class_name + self.popup_match_select_width = popup_match_select_width + self.dropdown_render = dropdown_render + self.dropdown_style = dropdown_style + self.field_names = field_names + self.filter_tree_node = filter_tree_node + self.get_popup_container = get_popup_container + self.label_in_value = label_in_value + self.list_height = list_height + self.loading = loading + self.max_tag_count = max_tag_count + self.max_tag_placeholder = max_tag_placeholder + self.max_tag_text_length = max_tag_text_length + self.multiple = multiple + self.not_found_content = not_found_content + self.placeholder = placeholder + self.placement = placement + self.search_value = search_value + self.show_checked_strategy = show_checked_strategy + self.show_search = show_search + self.size = size + self.status = status + self.suffix_icon = suffix_icon + self.switcher_icon = switcher_icon + self.tag_render = tag_render + self.tree_checkable = tree_checkable + self.tree_check_strictly = tree_check_strictly + self.tree_data = tree_data + self.tree_data_simple_mode = tree_data_simple_mode + self.tree_title_render = tree_title_render + self.tree_default_expand_all = tree_default_expand_all + self.tree_default_expanded_keys = tree_default_expanded_keys + self.tree_expand_action = tree_expand_action + self.tree_expanded_keys = tree_expanded_keys + self.tree_icon = tree_icon + self.tree_line = tree_line + self.tree_loaded_keys = tree_loaded_keys + self.tree_node_filter_prop = tree_node_filter_prop + self.tree_node_label_prop = tree_node_label_prop + self.variant = variant + self.virtual = virtual + self.root_class_name = root_class_name + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("tree-select") + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, Any]: + return { + "anyOf": [{ + "type": "string" + }, { + "type": "array", + "items": { + "type": "string" + } + }] + } + + def preprocess(self, payload: str | list[str]) -> str | list[str]: + return payload + + def postprocess(self, value: str | list[str] | None) -> str | list[str]: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/tree_select/tree_node/__init__.py b/backend/modelscope_studio/components/antd/tree_select/tree_node/__init__.py new file mode 100644 index 00000000..6d960dd0 --- /dev/null +++ b/backend/modelscope_studio/components/antd/tree_select/tree_node/__init__.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from typing import Any + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTreeSelectTreeNode(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/tree-select + """ + + EVENTS = [] + + # supported slots + SLOTS = ["title"] + + def __init__( + self, + value: str | None = None, + title: str | None = None, + props: dict | None = None, + *, + disabled: bool = False, + selectable: bool = True, + checkable: bool | None = None, + disable_checkbox: bool = False, + is_leaf: bool = False, + key: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.title = title + self.disabled = disabled + self.selectable = selectable + self.checkable = checkable + self.disable_checkbox = disable_checkbox + self.is_leaf = is_leaf + self.key = key + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("tree-select", "tree-node") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/antd/typography/__init__.py b/backend/modelscope_studio/components/antd/typography/__init__.py new file mode 100644 index 00000000..213b9805 --- /dev/null +++ b/backend/modelscope_studio/components/antd/typography/__init__.py @@ -0,0 +1,11 @@ +from .link import AntdTypographyLink +from .paragraph import AntdTypographyParagraph +from .text import AntdTypographyText +from .title import AntdTypographyTitle + + +class AntdTypography: + Text = AntdTypographyText + Title = AntdTypographyTitle + Paragraph = AntdTypographyParagraph + Link = AntdTypographyLink diff --git a/backend/modelscope_studio/components/antd/typography/link/__init__.py b/backend/modelscope_studio/components/antd/typography/link/__init__.py new file mode 100644 index 00000000..9adfa26d --- /dev/null +++ b/backend/modelscope_studio/components/antd/typography/link/__init__.py @@ -0,0 +1,144 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTypographyLink(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/typography + + Basic text writing, including headings, body text, lists, and more. + + When to use: + - When you need to display a title or paragraph contents in Articles/Blogs/Notes. + - When you need copyable/editable/ellipsis texts. + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event."), + EventListener("copyable_copy", + callback=lambda block: block._internal.update( + bind_copyable_copy_event=True), + doc="Called when copied text."), + EventListener("editable_change", + callback=lambda block: block._internal.update( + bind_editable_change_event=True), + doc="Called when input at textarea."), + EventListener("editable_cancel", + callback=lambda block: block._internal.update( + bind_editable_cancel_event=True), + doc="Called when type ESC to exit editable state."), + EventListener("editable_start", + callback=lambda block: block._internal.update( + bind_editable_start_event=True), + doc="Called when enter editable state."), + EventListener("editable_end", + callback=lambda block: block._internal.update( + bind_editable_end_event=True), + doc="Called when type ENTER to exit editable state."), + ] + + # supported slots + SLOTS = [ + 'copyable.icon', + 'copyable.tooltips', + 'editable.icon', + 'editable.tooltip', + 'editable.enterIcon', + ] + + def __init__( + self, + value: str | None = "", + props: dict | None = None, + *, + href: str | None = None, + href_target: str | None = None, + code: bool = False, + copyable: bool | dict = False, + delete: bool = False, + disabled: bool = False, + editable: bool | dict = False, + ellipsis: bool = False, + keyboard: bool = False, + mark: bool = False, + strong: bool = False, + italic: bool = False, + type: Literal['secondary', 'success', 'warning', 'danger'] + | None = None, + underline: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + code: Code style. + copyable: Whether to be copyable, customize it via setting an object. + delete: Deleted line style. + disabled: Disabled content. + editable: If editable. Can control edit state when is object. + ellipsis: Display ellipsis when text overflows. + keyboard: Keyboard style. + mark: Marked style. + strong: Bold style. + italic: Italic style. + type: Content type. + underline: Underlined style. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.code = code + self.copyable = copyable + self.delete = delete + self.disabled = disabled + self.editable = editable + self.ellipsis = ellipsis + self.keyboard = keyboard + self.mark = mark + self.strong = strong + self.italic = italic + self.type = type + self.underline = underline + self.href = href + self.href_target = href_target + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("typography", "link") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Hello" + + def example_value(self) -> Any: + return "Hello" diff --git a/backend/modelscope_studio/components/antd/typography/paragraph/__init__.py b/backend/modelscope_studio/components/antd/typography/paragraph/__init__.py new file mode 100644 index 00000000..48f07710 --- /dev/null +++ b/backend/modelscope_studio/components/antd/typography/paragraph/__init__.py @@ -0,0 +1,155 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTypographyParagraph(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/typography + + Basic text writing, including headings, body text, lists, and more. + + When to use: + - When you need to display a title or paragraph contents in Articles/Blogs/Notes. + - When you need copyable/editable/ellipsis texts. + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event."), + EventListener("copyable_copy", + callback=lambda block: block._internal.update( + bind_copyable_copy_event=True), + doc="Called when copied text."), + EventListener("editable_change", + callback=lambda block: block._internal.update( + bind_editable_change_event=True), + doc="Called when input at textarea."), + EventListener("editable_cancel", + callback=lambda block: block._internal.update( + bind_editable_cancel_event=True), + doc="Called when type ESC to exit editable state."), + EventListener("editable_start", + callback=lambda block: block._internal.update( + bind_editable_start_event=True), + doc="Called when enter editable state."), + EventListener("editable_end", + callback=lambda block: block._internal.update( + bind_editable_end_event=True), + doc="Called when type ENTER to exit editable state."), + EventListener("ellipsis_ellipsis", + callback=lambda block: block._internal.update( + bind_ellipsis_ellipsis_event=True), + doc="Called when enter or leave ellipsis state."), + EventListener( + "ellipsis_tooltip_open_change", + callback=lambda block: block._internal.update( + bind_ellipsis_tooltip_openChange_event=True), + doc= + "Callback executed when visibility of the tooltip card is changed." + ), + EventListener("ellipsis_expand", + callback=lambda block: block._internal.update( + bind_ellipsis_expand_event=True), + doc="Called when expand content."), + ] + + # supported slots + SLOTS = [ + 'copyable.icon', + 'copyable.tooltips', + 'editable.icon', + 'editable.tooltip', + 'editable.enterIcon', + 'ellipsis.symbol', + 'ellipsis.tooltip', + 'ellipsis.tooltip.title', + ] + + def __init__( + self, + value: str | None = "", + props: dict | None = None, + *, + code: bool = False, + copyable: bool | dict = False, + delete: bool = False, + disabled: bool = False, + editable: bool | dict = False, + ellipsis: bool | dict = False, + mark: bool = False, + strong: bool = False, + italic: bool = False, + type: Literal['secondary', 'success', 'warning', 'danger'] + | None = None, + underline: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + code: Code style. + copyable: Whether to be copyable, customize it via setting an object. + delete: Deleted line style. + disabled: Disabled content. + editable: If editable. Can control edit state when is object. + ellipsis: Display ellipsis when text overflows, can configure rows and expandable by using object. + mark: Marked style. + strong: Bold style. + italic: Italic style. + type: Content type. + underline: Underlined style. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.code = code + self.copyable = copyable + self.delete = delete + self.disabled = disabled + self.editable = editable + self.ellipsis = ellipsis + self.mark = mark + self.strong = strong + self.italic = italic + self.type = type + self.underline = underline + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("typography", "paragraph") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Hello" + + def example_value(self) -> Any: + return "Hello" diff --git a/backend/modelscope_studio/components/antd/typography/text/__init__.py b/backend/modelscope_studio/components/antd/typography/text/__init__.py new file mode 100644 index 00000000..f3734322 --- /dev/null +++ b/backend/modelscope_studio/components/antd/typography/text/__init__.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTypographyText(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/typography + + Basic text writing, including headings, body text, lists, and more. + + When to use: + - When you need to display a title or paragraph contents in Articles/Blogs/Notes. + - When you need copyable/editable/ellipsis texts. + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event."), + EventListener("copyable_copy", + callback=lambda block: block._internal.update( + bind_copyable_copy_event=True), + doc="Called when copied text."), + EventListener("editable_change", + callback=lambda block: block._internal.update( + bind_editable_change_event=True), + doc="Called when input at textarea."), + EventListener("editable_cancel", + callback=lambda block: block._internal.update( + bind_editable_cancel_event=True), + doc="Called when type ESC to exit editable state."), + EventListener("editable_start", + callback=lambda block: block._internal.update( + bind_editable_start_event=True), + doc="Called when enter editable state."), + EventListener("editable_end", + callback=lambda block: block._internal.update( + bind_editable_end_event=True), + doc="Called when type ENTER to exit editable state."), + EventListener("ellipsis_ellipsis", + callback=lambda block: block._internal.update( + bind_ellipsis_ellipsis_event=True), + doc="Called when enter or leave ellipsis state."), + EventListener( + "ellipsis_tooltip_open_change", + callback=lambda block: block._internal.update( + bind_ellipsis_tooltip_openChange_event=True), + doc= + "Callback executed when visibility of the tooltip card is changed." + ), + ] + + # supported slots + SLOTS = [ + 'copyable.icon', + 'copyable.tooltips', + 'editable.icon', + 'editable.tooltip', + 'editable.enterIcon', + 'ellipsis.symbol', + 'ellipsis.tooltip', + 'ellipsis.tooltip.title', + ] + + def __init__( + self, + value: str | None = "", + props: dict | None = None, + *, + code: bool = False, + copyable: bool | dict = False, + delete: bool = False, + disabled: bool = False, + editable: bool | dict = False, + ellipsis: bool | dict = False, + keyboard: bool = False, + mark: bool = False, + strong: bool = False, + italic: bool = False, + type: Literal['secondary', 'success', 'warning', 'danger'] + | None = None, + underline: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + code: Code style. + copyable: Whether to be copyable, customize it via setting an object. + delete: Deleted line style. + disabled: Disabled content. + editable: If editable. Can control edit state when is object. + ellipsis: Display ellipsis when text overflows, can't configure expandable、rows and onExpand by using object. Diff with Typography.Paragraph, Text do not have 100% width style which means it will fix width on the first ellipsis. If you want to have responsive ellipsis, please set width manually. + keyboard: Keyboard style. + mark: Marked style. + strong: Bold style. + italic: Italic style. + type: Content type. + underline: Underlined style. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.code = code + self.copyable = copyable + self.delete = delete + self.disabled = disabled + self.editable = editable + self.ellipsis = ellipsis + self.keyboard = keyboard + self.mark = mark + self.strong = strong + self.italic = italic + self.type = type + self.underline = underline + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("typography", "text") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Hello" + + def example_value(self) -> Any: + return "Hello" diff --git a/backend/modelscope_studio/components/antd/typography/title/__init__.py b/backend/modelscope_studio/components/antd/typography/title/__init__.py new file mode 100644 index 00000000..cffcde10 --- /dev/null +++ b/backend/modelscope_studio/components/antd/typography/title/__init__.py @@ -0,0 +1,155 @@ +from __future__ import annotations + +from typing import Any, Literal + +from gradio.events import EventListener + +from .....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdTypographyTitle(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/typography + + Basic text writing, including headings, body text, lists, and more. + + When to use: + - When you need to display a title or paragraph contents in Articles/Blogs/Notes. + - When you need copyable/editable/ellipsis texts. + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True), + doc="Set the handler to handle click event."), + EventListener("copyable_copy", + callback=lambda block: block._internal.update( + bind_copyable_copy_event=True), + doc="Called when copied text."), + EventListener("editable_change", + callback=lambda block: block._internal.update( + bind_editable_change_event=True), + doc="Called when input at textarea."), + EventListener("editable_cancel", + callback=lambda block: block._internal.update( + bind_editable_cancel_event=True), + doc="Called when type ESC to exit editable state."), + EventListener("editable_start", + callback=lambda block: block._internal.update( + bind_editable_start_event=True), + doc="Called when enter editable state."), + EventListener("editable_end", + callback=lambda block: block._internal.update( + bind_editable_end_event=True), + doc="Called when type ENTER to exit editable state."), + EventListener("ellipsis_ellipsis", + callback=lambda block: block._internal.update( + bind_ellipsis_ellipsis_event=True), + doc="Called when enter or leave ellipsis state."), + EventListener( + "ellipsis_tooltip_open_change", + callback=lambda block: block._internal.update( + bind_ellipsis_tooltip_openChange_event=True), + doc= + "Callback executed when visibility of the tooltip card is changed." + ), + EventListener("ellipsis_expand", + callback=lambda block: block._internal.update( + bind_ellipsis_expand_event=True), + doc="Called when expand content."), + ] + + # supported slots + SLOTS = [ + 'copyable.icon', + 'copyable.tooltips', + 'editable.icon', + 'editable.tooltip', + 'editable.enterIcon', + 'ellipsis.symbol', + 'ellipsis.tooltip', + 'ellipsis.tooltip.title', + ] + + def __init__( + self, + value: str | None = "", + props: dict | None = None, + *, + code: bool = False, + copyable: bool | dict = False, + delete: bool = False, + disabled: bool = False, + editable: bool | dict = False, + ellipsis: bool | dict = False, + level: Literal[1, 2, 3, 4, 5] = 1, + mark: bool = False, + italic: bool = False, + type: Literal['secondary', 'success', 'warning', 'danger'] + | None = None, + underline: bool = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + """ + Parameters: + code: Code style. + copyable: Whether to be copyable, customize it via setting an object. + delete: Deleted line style. + disabled: Disabled content. + editable: If editable. Can control edit state when is object. + ellipsis: Display ellipsis when text overflows, can configure rows and expandable by using object. + level: Set content importance. Match with h1, h2, h3, h4, h5. + mark: Marked style. + italic: Italic style. + type: Content type. + underline: Underlined style. + """ + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.value = value + self.props = props + self.code = code + self.copyable = copyable + self.delete = delete + self.disabled = disabled + self.editable = editable + self.ellipsis = ellipsis + self.level = level + self.mark = mark + self.italic = italic + self.type = type + self.underline = underline + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("typography", "title") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return "Hello" + + def example_value(self) -> Any: + return "Hello" diff --git a/backend/modelscope_studio/components/antd/upload/__init__.py b/backend/modelscope_studio/components/antd/upload/__init__.py new file mode 100644 index 00000000..362428a6 --- /dev/null +++ b/backend/modelscope_studio/components/antd/upload/__init__.py @@ -0,0 +1,205 @@ +from __future__ import annotations + +import tempfile +from pathlib import Path +from typing import TYPE_CHECKING, Any, Callable, Literal + +import gradio_client.utils as client_utils +from gradio import processing_utils +from gradio.components.base import Component +from gradio.data_classes import FileData, ListFiles +from gradio.events import EventListener +from gradio.utils import NamedString +from gradio_client import handle_file + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir +from .dragger import AntdUploadDragger + +if TYPE_CHECKING: + from gradio.components import Timer + + +# as inputs, outputs +class AntdUpload(ModelScopeDataLayoutComponent): + """ + Ant Design: https://ant.design/components/upload + """ + Dragger = AntdUploadDragger + + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("drop", + callback=lambda block: block._internal.update( + bind_drop_event=True)), + EventListener("download", + callback=lambda block: block._internal.update( + bind_download_event=True)), + EventListener("preview", + callback=lambda block: block._internal.update( + bind_preview_event=True)), + EventListener("remove", + callback=lambda block: block._internal.update( + bind_remove_event=True)) + ] + + # supported slots + SLOTS = [ + 'showUploadList.extra', + 'showUploadList.previewIcon', + 'showUploadList.removeIcon', + 'showUploadList.downloadIcon', + 'iconRender', + 'itemRender', + ] + + data_model = ListFiles + + def __init__( + self, + value: list[str] | Callable | None = None, + props: dict | None = None, + *, + accept: str | None = None, + action: str | None = None, + before_upload: str | None = None, + custom_request: str | None = None, + data: dict | str | None = None, + default_file_list: list[dict] | None = None, + directory: bool | None = False, + disabled: bool = False, + file_list: list[dict] | None = None, + headers: dict | None = None, + icon_render: str | None = None, + is_image_url: str | None = None, + item_render: str | None = None, + list_type: Literal['text', 'picture', 'picture-card', + 'picture-circle'] | None = None, + max_count: int | None = None, + method: str | None = None, + multiple: bool | None = False, + form_name: str | None = None, + open_file_dialog_on_click: bool | None = True, + preview_file: str | None = None, + progress: dict | None = None, + show_upload_list: bool | dict | None = True, + with_credentials: bool | None = False, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + key: int | str | None = None, + every: Timer | float | None = None, + inputs: Component | list[Component] | set[Component] | None = None, + render: bool = True, + **kwargs): + + super().__init__(as_item=as_item, + visible=visible, + value=value, + elem_id=elem_id, + elem_classes=elem_classes, + key=key, + elem_style=elem_style, + every=every, + inputs=inputs, + render=render, + **kwargs) + self.props = props + self.accept = accept + self.action = action + self.before_upload = before_upload + self.custom_request = custom_request + self.data = data + self.default_file_list = default_file_list + self.directory = directory + self.disabled = disabled + self.file_list = file_list + self.headers = headers + self.icon_render = icon_render + self.is_image_url = is_image_url + self.item_render = item_render + self.list_type = list_type + self.max_count = max_count + self.method = method + self.multiple = multiple + self.form_name = form_name + self.open_file_dialog_on_click = open_file_dialog_on_click + self.preview_file = preview_file + self.progress = progress + self.show_upload_list = show_upload_list + self.with_credentials = with_credentials + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("upload") + + def _process_single_file(self, f: FileData) -> NamedString: + file_name = f.path + file = tempfile.NamedTemporaryFile(delete=False, dir=self.GRADIO_CACHE) + file.name = file_name + return NamedString(file_name) + + def preprocess(self, payload: ListFiles | None) -> list[str] | None: + """ + Parameters: + payload: File information as a list of FileData objects. + Returns: + Passes the file as a list of `str`. + """ + if payload is None: + return None + + return [self._process_single_file(f) for f in payload] # type: ignore + + def _download_files(self, value: list[str]) -> list[str]: + downloaded_files = [] + for file in value: + if client_utils.is_http_url_like(file): + downloaded_file = processing_utils.save_url_to_cache( + file, self.GRADIO_CACHE) + downloaded_files.append(downloaded_file) + else: + downloaded_files.append(file) + return downloaded_files + + def postprocess(self, value: list[str] | None) -> ListFiles | None: + """ + Parameters: + value: a `list[str]` of filepaths/URLs. + Returns: + File information as a list of FileData objects. + """ + if value is None: + return None + value = self._download_files(value) + return ListFiles(root=[ + FileData( + path=file, + orig_name=Path(file).name, + size=Path(file).stat().st_size, + ) for file in value + ]) + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, list[str]]: + return ListFiles.model_json_schema() + + def example_payload(self) -> Any: + return [ + handle_file( + "https://github.com/gradio-app/gradio/raw/main/test/test_files/sample_file.pdf" + ) + ] + + def example_value(self) -> Any: + return [ + "https://github.com/gradio-app/gradio/raw/main/test/test_files/sample_file.pdf" + ] diff --git a/backend/modelscope_studio/components/antd/upload/dragger/__init__.py b/backend/modelscope_studio/components/antd/upload/dragger/__init__.py new file mode 100644 index 00000000..d291d675 --- /dev/null +++ b/backend/modelscope_studio/components/antd/upload/dragger/__init__.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +import tempfile +from pathlib import Path +from typing import TYPE_CHECKING, Any, Callable + +import gradio_client.utils as client_utils +from gradio import processing_utils +from gradio.components.base import Component +from gradio.data_classes import FileData, ListFiles +from gradio.events import EventListener +from gradio.utils import NamedString +from gradio_client import handle_file + +from .....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + +if TYPE_CHECKING: + from gradio.components import Timer + + +# as inputs, outputs +class AntdUploadDragger(ModelScopeDataLayoutComponent): + """ + """ + EVENTS = [ + EventListener("change", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("drop", + callback=lambda block: block._internal.update( + bind_drop_event=True)), + EventListener("download", + callback=lambda block: block._internal.update( + bind_download_event=True)), + EventListener("preview", + callback=lambda block: block._internal.update( + bind_preview_event=True)), + EventListener("remove", + callback=lambda block: block._internal.update( + bind_remove_event=True)) + ] + + # supported slots + SLOTS = [ + 'showUploadList.extra', + 'showUploadList.previewIcon', + 'showUploadList.removeIcon', + 'showUploadList.downloadIcon', + 'iconRender', + 'itemRender', + ] + + data_model = ListFiles + + def __init__( + self, + value: list[str] | Callable | None = None, + props: dict | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + key: int | str | None = None, + every: Timer | float | None = None, + inputs: Component | list[Component] | set[Component] | None = None, + render: bool = True, + **kwargs): + + super().__init__(as_item=as_item, + visible=visible, + value=value, + elem_id=elem_id, + elem_classes=elem_classes, + key=key, + elem_style=elem_style, + every=every, + inputs=inputs, + render=render, + **kwargs) + + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("upload", "dragger") + + def _process_single_file(self, f: FileData) -> NamedString: + file_name = f.path + file = tempfile.NamedTemporaryFile(delete=False, dir=self.GRADIO_CACHE) + file.name = file_name + return NamedString(file_name) + + def preprocess(self, payload: ListFiles | None) -> list[str] | None: + """ + Parameters: + payload: File information as a list of FileData objects. + Returns: + Passes the file as a list of `str`. + """ + if payload is None: + return None + + return [self._process_single_file(f) for f in payload] # type: ignore + + def _download_files(self, value: list[str]) -> list[str]: + downloaded_files = [] + for file in value: + if client_utils.is_http_url_like(file): + downloaded_file = processing_utils.save_url_to_cache( + file, self.GRADIO_CACHE) + downloaded_files.append(downloaded_file) + else: + downloaded_files.append(file) + return downloaded_files + + def postprocess(self, value: list[str] | None) -> ListFiles | None: + """ + Parameters: + value: a `list[str]` of filepaths/URLs. + Returns: + File information as a list of FileData objects. + """ + if value is None: + return None + value = self._download_files(value) + return ListFiles(root=[ + FileData( + path=file, + orig_name=Path(file).name, + size=Path(file).stat().st_size, + ) for file in value + ]) + + @property + def skip_api(self): + return False + + def api_info(self) -> dict[str, list[str]]: + return ListFiles.model_json_schema() + + def example_payload(self) -> Any: + return [ + handle_file( + "https://github.com/gradio-app/gradio/raw/main/test/test_files/sample_file.pdf" + ) + ] + + def example_value(self) -> Any: + return [ + "https://github.com/gradio-app/gradio/raw/main/test/test_files/sample_file.pdf" + ] diff --git a/backend/modelscope_studio/components/antd/watermark/__init__.py b/backend/modelscope_studio/components/antd/watermark/__init__.py new file mode 100644 index 00000000..1854fc40 --- /dev/null +++ b/backend/modelscope_studio/components/antd/watermark/__init__.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class AntdWatermark(ModelScopeLayoutComponent): + """ + Ant Design: https://ant.design/components/watermark + """ + EVENTS = [] + + def __init__( + self, + content: str | list[str] | None = "", + props: dict | None = None, + *, + width: int | float | None = None, + height: int | float | None = None, + inherit: bool | None = None, + rotate: int | float | None = None, + z_index: int | None = None, + image: str | None = None, + font: dict | None = None, + gap: list[int | float] | None = None, + offset: list[int | float] | None = None, + root_class_name: str | None = None, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + self.props = props + self.content = content + self.width = width + self.height = height + self.inherit = inherit + self.rotate = rotate + self.z_index = z_index + self.image = image + self.font = font + self.gap = gap + self.offset = offset + self.root_class_name = root_class_name + + FRONTEND_DIR = resolve_frontend_dir("watermark") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> None: + return None + + def example_value(self) -> None: + return None diff --git a/backend/modelscope_studio/components/base/__init__.py b/backend/modelscope_studio/components/base/__init__.py new file mode 100644 index 00000000..60d3a873 --- /dev/null +++ b/backend/modelscope_studio/components/base/__init__.py @@ -0,0 +1,8 @@ +from .application import ModelScopeApplication as Application +from .div import ModelScopeDiv as Div +from .each import ModelScopeEach as Each +from .filter import ModelScopeFilter as Filter +from .fragment import ModelScopeFragment as Fragment +from .slot import ModelScopeSlot as Slot +from .span import ModelScopeSpan as Span +from .text import ModelScopeText as Text diff --git a/backend/modelscope_studio/components/base/application/__init__.py b/backend/modelscope_studio/components/base/application/__init__.py new file mode 100644 index 00000000..47df9842 --- /dev/null +++ b/backend/modelscope_studio/components/base/application/__init__.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +from typing import Any + +from gradio.data_classes import GradioModel +from gradio.events import EventListener + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +class ApplicationPageScreenData(GradioModel): + width: float + height: float + scrollX: float + scrollY: float + + +class ApplicationPageData(GradioModel): + screen: ApplicationPageScreenData + language: str + theme: str + userAgent: str + + +class ModelScopeApplication(ModelScopeDataLayoutComponent): + """ + """ + + EVENTS = [ + EventListener( + "custom", + doc= + "This listener is triggered when the `window.ms_globals.dispatch` is called in javascript.", + callback=lambda block: block._internal.update(bind_custom_event= + True)), + EventListener( + "mount", + doc= + "This listener is triggered when the application initially mount in the browser.", + callback=lambda block: block._internal.update(bind_mount_event=True + )), + EventListener( + "resize", + doc= + "This listener is triggered when the user resizes the browser window.", + callback=lambda block: block._internal.update(bind_resize_event= + True)), + EventListener( + "unmount", + doc="This listener is triggered when the user leaves the page.", + callback=lambda block: block._internal.update(bind_unmount_event= + True)), + ] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: ApplicationPageData | dict | None = None, + *, + _internal: None = None, + # gradio properties + visible: bool = True, + key: int | str | None = None, + render: bool = True, + **kwargs): + super().__init__(value=value, + visible=visible, + render=render, + key=key, + **kwargs) + + FRONTEND_DIR = resolve_frontend_dir("application", type="base") + + data_model = ApplicationPageData + + def preprocess( + self, payload: ApplicationPageData | dict | None + ) -> ApplicationPageData | dict | None: + return payload + + def postprocess( + self, value: ApplicationPageData | dict | None + ) -> ApplicationPageData | dict | None: + + return value + + def example_payload(self) -> Any: + return { + "screen": { + "width": 1920, + "height": 1080, + "scrollX": 0, + "scrollY": 0, + }, + "theme": + "light", + "language": + "en", + "userAgent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + } + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/div/__init__.py b/backend/modelscope_studio/components/base/div/__init__.py new file mode 100644 index 00000000..7fdd1b62 --- /dev/null +++ b/backend/modelscope_studio/components/base/div/__init__.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from ...antd.carousel import AntdCarousel +from ...antd.space import AntdSpace +from ..slot import ModelScopeSlot + + +class ModelScopeDiv(ModelScopeLayoutComponent): + """ + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("dblclick", + callback=lambda block: block._internal.update( + bind_dblclick_event=True)), + EventListener("mousedown", + callback=lambda block: block._internal.update( + bind_mousedown_event=True)), + EventListener("mouseup", + callback=lambda block: block._internal.update( + bind_mouseup_event=True)), + EventListener("mouseover", + callback=lambda block: block._internal.update( + bind_mouseover_event=True)), + EventListener("mouseout", + callback=lambda block: block._internal.update( + bind_mouseout_event=True)), + EventListener("mousemove", + callback=lambda block: block._internal.update( + bind_mousemove_event=True)), + EventListener("scroll", + callback=lambda block: block._internal.update( + bind_scroll_event=True)), + ] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + + if self.parent and self._internal and (any( + isinstance(self.parent, component) + for component in [AntdCarousel, AntdSpace, ModelScopeSlot])): + self._internal.update(fragment=True) + self.value = value + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("div", type="base") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/each/__init__.py b/backend/modelscope_studio/components/base/each/__init__.py new file mode 100644 index 00000000..c740b2e0 --- /dev/null +++ b/backend/modelscope_studio/components/base/each/__init__.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from timeit import Timer +from typing import Callable + +from gradio.components.base import Component +from gradio.data_classes import GradioRootModel + +from ....utils.dev import ModelScopeDataLayoutComponent, resolve_frontend_dir + + +class ModelScopeEachData(GradioRootModel): + root: list = [] + + +# as inputs, outputs +class ModelScopeEach(ModelScopeDataLayoutComponent): + """ + """ + EVENTS = [] + data_model = ModelScopeEachData + + def __init__( + self, + value: list[dict] | Callable = None, + *, + context_value: dict | None = None, + as_item: str | None = None, + _internal: None = None, + + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + key: int | str | None = None, + every: Timer | float | None = None, + inputs: Component | list[Component] | set[Component] | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + render=render, + value=value, + as_item=as_item, + elem_id=elem_id, + elem_classes=elem_classes, + key=key, + elem_style=elem_style, + every=every, + inputs=inputs, + **kwargs) + self.context_value = context_value + + FRONTEND_DIR = resolve_frontend_dir("each", type='base') + + @property + def skip_api(self): + return False + + def preprocess(self, payload: list | ModelScopeEachData) -> list: + if isinstance(payload, ModelScopeEachData): + return payload.root + return payload + + def postprocess(self, value: list) -> list: + return value + + def example_payload(self) -> list: + return [] + + def example_value(self) -> list: + return [] diff --git a/backend/modelscope_studio/components/base/filter/__init__.py b/backend/modelscope_studio/components/base/filter/__init__.py new file mode 100644 index 00000000..2cefc6fc --- /dev/null +++ b/backend/modelscope_studio/components/base/filter/__init__.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class ModelScopeFilter(ModelScopeLayoutComponent): + """ + """ + EVENTS = [] + + def __init__(self, + params_mapping: str | None = None, + *, + as_item: str | None = None, + _internal: None = None, + visible: bool = True, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + render=render, + as_item=as_item, + **kwargs) + self.params_mapping = params_mapping + + FRONTEND_DIR = resolve_frontend_dir("filter", type='base') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/fragment/__init__.py b/backend/modelscope_studio/components/base/fragment/__init__.py new file mode 100644 index 00000000..bce7db61 --- /dev/null +++ b/backend/modelscope_studio/components/base/fragment/__init__.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class ModelScopeFragment(ModelScopeLayoutComponent): + """ + """ + + EVENTS = [] + + # supported slots + SLOTS = [] + + def __init__( + self, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + render=render, + as_item=as_item, + **kwargs) + + FRONTEND_DIR = resolve_frontend_dir("fragment", type="base") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: None) -> None: + return payload + + def postprocess(self, value: None) -> None: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/slot/__init__.py b/backend/modelscope_studio/components/base/slot/__init__.py new file mode 100644 index 00000000..da27db0e --- /dev/null +++ b/backend/modelscope_studio/components/base/slot/__init__.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir + + +class ModelScopeSlot(ModelScopeLayoutComponent): + """ + """ + EVENTS = [] + + def __init__(self, + value: str = '', + params_mapping: str | None = None, + *, + skip_context_value: bool = True, + as_item: str | None = None, + _internal: None = None, + visible: bool = True, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + render=render, + as_item=as_item, + **kwargs) + self.params_mapping = params_mapping + self.skip_context_value = skip_context_value + if isinstance(self.parent, ModelScopeSlot): + self.value = f"{self.parent.value}.{value}" + else: + self.value = value + + FRONTEND_DIR = resolve_frontend_dir("slot", type='base') + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str) -> str: + return payload + + def postprocess(self, value: str) -> str: + + return value + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/span/__init__.py b/backend/modelscope_studio/components/base/span/__init__.py new file mode 100644 index 00000000..eda853d1 --- /dev/null +++ b/backend/modelscope_studio/components/base/span/__init__.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +from typing import Any + +from gradio.events import EventListener + +from ....utils.dev import ModelScopeLayoutComponent, resolve_frontend_dir +from ...antd.carousel import AntdCarousel +from ...antd.space import AntdSpace +from ..slot import ModelScopeSlot + + +class ModelScopeSpan(ModelScopeLayoutComponent): + """ + """ + + EVENTS = [ + EventListener("click", + callback=lambda block: block._internal.update( + bind_click_event=True)), + EventListener("dblclick", + callback=lambda block: block._internal.update( + bind_dblclick_event=True)), + EventListener("mousedown", + callback=lambda block: block._internal.update( + bind_mousedown_event=True)), + EventListener("mouseup", + callback=lambda block: block._internal.update( + bind_mouseup_event=True)), + EventListener("mouseover", + callback=lambda block: block._internal.update( + bind_mouseover_event=True)), + EventListener("mouseout", + callback=lambda block: block._internal.update( + bind_mouseout_event=True)), + EventListener("mousemove", + callback=lambda block: block._internal.update( + bind_mousemove_event=True)), + EventListener("scroll", + callback=lambda block: block._internal.update( + bind_scroll_event=True)), + ] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: str | None = None, + props: dict | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + if self.parent and self._internal and (any( + isinstance(self.parent, component) + for component in [AntdCarousel, AntdSpace, ModelScopeSlot])): + self._internal.update(fragment=True) + self.value = value + self.props = props + + FRONTEND_DIR = resolve_frontend_dir("span", type="base") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/base/text/__init__.py b/backend/modelscope_studio/components/base/text/__init__.py new file mode 100644 index 00000000..a13ac3d7 --- /dev/null +++ b/backend/modelscope_studio/components/base/text/__init__.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from typing import Any + +from ....utils.dev import ModelScopeComponent, resolve_frontend_dir +from ...antd.carousel import AntdCarousel +from ...antd.space import AntdSpace + + +class ModelScopeText(ModelScopeComponent): + """ + """ + + EVENTS = [] + + # supported slots + SLOTS = [] + + def __init__( + self, + value: str | None = None, + *, + as_item: str | None = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: str | None = None, + elem_classes: list[str] | str | None = None, + elem_style: dict | None = None, + render: bool = True, + **kwargs): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render, + as_item=as_item, + elem_style=elem_style, + **kwargs) + if self.parent and self._internal and (any( + isinstance(self.parent, component) + for component in [AntdCarousel, AntdSpace])): + self._internal.update(fragment=True) + self.value = value + + FRONTEND_DIR = resolve_frontend_dir("text", type="base") + + @property + def skip_api(self): + return True + + def preprocess(self, payload: str | None) -> str | None: + return payload + + def postprocess(self, value: str | None) -> str | None: + + return str(value) + + def example_payload(self) -> Any: + return None + + def example_value(self) -> Any: + return None diff --git a/backend/modelscope_studio/components/Chatbot/__init__.py b/backend/modelscope_studio/components/legacy/Chatbot/__init__.py similarity index 99% rename from backend/modelscope_studio/components/Chatbot/__init__.py rename to backend/modelscope_studio/components/legacy/Chatbot/__init__.py index b6d89299..853cbcf1 100644 --- a/backend/modelscope_studio/components/Chatbot/__init__.py +++ b/backend/modelscope_studio/components/legacy/Chatbot/__init__.py @@ -11,7 +11,8 @@ from gradio_client import utils as client_utils from gradio_client.documentation import document, set_documentation_group -from ...utils import CustomComponentDict, process_links, resolve_frontend_dir +from ....utils.dev import (CustomComponentDict, process_links, + resolve_frontend_dir) from ..MultimodalInput import MultimodalInputData @@ -57,7 +58,7 @@ class ModelScopeChatbot(Component): Demos: chatbot_simple, chatbot_multimodal Guides: creating-a-chatbot """ - FRONTEND_DIR = resolve_frontend_dir("Chatbot") + FRONTEND_DIR = resolve_frontend_dir("Chatbot", type='legacy') EVENTS = [Events.change, Events.select, Events.like, 'flushed', 'custom'] data_model = ChatbotData diff --git a/backend/modelscope_studio/components/Chatbot/llm_thinking_presets.py b/backend/modelscope_studio/components/legacy/Chatbot/llm_thinking_presets.py similarity index 100% rename from backend/modelscope_studio/components/Chatbot/llm_thinking_presets.py rename to backend/modelscope_studio/components/legacy/Chatbot/llm_thinking_presets.py diff --git a/backend/modelscope_studio/components/Flow/__init__.py b/backend/modelscope_studio/components/legacy/Flow/__init__.py similarity index 97% rename from backend/modelscope_studio/components/Flow/__init__.py rename to backend/modelscope_studio/components/legacy/Flow/__init__.py index bbcec0fc..5de50c11 100644 --- a/backend/modelscope_studio/components/Flow/__init__.py +++ b/backend/modelscope_studio/components/legacy/Flow/__init__.py @@ -9,7 +9,7 @@ from gradio.events import Events from gradio_client.documentation import document -from ...utils import CustomComponentDict, resolve_frontend_dir +from ....utils.dev import CustomComponentDict, resolve_frontend_dir from .edge import * from .edge import Edge from .node import * @@ -43,7 +43,7 @@ class BackgroundPropsDict(TypedDict): @document() class ModelScopeFlow(Component): data_model = FlowData - FRONTEND_DIR = resolve_frontend_dir("Flow") + FRONTEND_DIR = resolve_frontend_dir("Flow", type='legacy') EVENTS = [Events.change, 'data_change', 'custom'] def __init__( diff --git a/backend/modelscope_studio/components/Flow/edge.py b/backend/modelscope_studio/components/legacy/Flow/edge.py similarity index 100% rename from backend/modelscope_studio/components/Flow/edge.py rename to backend/modelscope_studio/components/legacy/Flow/edge.py diff --git a/backend/modelscope_studio/components/Flow/node.py b/backend/modelscope_studio/components/legacy/Flow/node.py similarity index 100% rename from backend/modelscope_studio/components/Flow/node.py rename to backend/modelscope_studio/components/legacy/Flow/node.py diff --git a/backend/modelscope_studio/components/Flow/node_schema.py b/backend/modelscope_studio/components/legacy/Flow/node_schema.py similarity index 100% rename from backend/modelscope_studio/components/Flow/node_schema.py rename to backend/modelscope_studio/components/legacy/Flow/node_schema.py diff --git a/backend/modelscope_studio/components/Lifecycle/__init__.py b/backend/modelscope_studio/components/legacy/Lifecycle/__init__.py similarity index 93% rename from backend/modelscope_studio/components/Lifecycle/__init__.py rename to backend/modelscope_studio/components/legacy/Lifecycle/__init__.py index cbaa3d4f..cbcf1e30 100644 --- a/backend/modelscope_studio/components/Lifecycle/__init__.py +++ b/backend/modelscope_studio/components/legacy/Lifecycle/__init__.py @@ -7,7 +7,7 @@ from gradio.events import EventListener from gradio_client.documentation import document, set_documentation_group -from ...utils import resolve_frontend_dir +from ....utils.dev import resolve_frontend_dir set_documentation_group("component") @@ -28,7 +28,7 @@ class LifecycleData(GradioModel): @document() class ModelScopeLifecycle(Component): - FRONTEND_DIR = resolve_frontend_dir("Lifecycle") + FRONTEND_DIR = resolve_frontend_dir("Lifecycle", type='legacy') EVENTS = [ EventListener( @@ -56,6 +56,7 @@ class ModelScopeLifecycle(Component): def __init__( self, + value: LifecycleData | dict | None = None, *, every: float | None = None, _bind_mount_event: bool | None = None, @@ -69,7 +70,7 @@ def __init__( self._bind_mount_event = _bind_mount_event self._bind_resize_event = _bind_resize_event self._bind_unmount_event = _bind_unmount_event - super().__init__(every=every) + super().__init__(value=value, every=every) def preprocess( self, payload: LifecycleData | dict | None diff --git a/backend/modelscope_studio/components/Markdown/__init__.py b/backend/modelscope_studio/components/legacy/Markdown/__init__.py similarity index 97% rename from backend/modelscope_studio/components/Markdown/__init__.py rename to backend/modelscope_studio/components/legacy/Markdown/__init__.py index b6bed0a6..58e0ce14 100644 --- a/backend/modelscope_studio/components/Markdown/__init__.py +++ b/backend/modelscope_studio/components/legacy/Markdown/__init__.py @@ -7,7 +7,8 @@ from gradio.events import Events from gradio_client.documentation import document, set_documentation_group -from ...utils import CustomComponentDict, process_links, resolve_frontend_dir +from ....utils.dev import (CustomComponentDict, process_links, + resolve_frontend_dir) set_documentation_group("component") @@ -22,7 +23,7 @@ class ModelScopeMarkdown(Component): Demos: blocks_hello, blocks_kinematics Guides: key-features """ - FRONTEND_DIR = resolve_frontend_dir("Markdown") + FRONTEND_DIR = resolve_frontend_dir("Markdown", type='legacy') EVENTS = [Events.change, "custom"] @staticmethod diff --git a/backend/modelscope_studio/components/MultimodalInput/__init__.py b/backend/modelscope_studio/components/legacy/MultimodalInput/__init__.py similarity index 98% rename from backend/modelscope_studio/components/MultimodalInput/__init__.py rename to backend/modelscope_studio/components/legacy/MultimodalInput/__init__.py index 1dab2e4e..cde41580 100644 --- a/backend/modelscope_studio/components/MultimodalInput/__init__.py +++ b/backend/modelscope_studio/components/legacy/MultimodalInput/__init__.py @@ -9,7 +9,7 @@ from gradio_client import utils as client_utils from gradio_client.documentation import document, set_documentation_group -from ...utils import resolve_frontend_dir +from ....utils.dev import resolve_frontend_dir set_documentation_group("component") @@ -30,7 +30,7 @@ class ModelScopeMultimodalInput(FormComponent): Demos: hello_world, diff_texts, sentence_builder Guides: creating-a-chatbot, real-time-speech-recognition """ - FRONTEND_DIR = resolve_frontend_dir("MultimodalInput") + FRONTEND_DIR = resolve_frontend_dir("MultimodalInput", type='legacy') EVENTS = [ Events.change, diff --git a/backend/modelscope_studio/components/WaterfallGallery/__init__.py b/backend/modelscope_studio/components/legacy/WaterfallGallery/__init__.py similarity index 99% rename from backend/modelscope_studio/components/WaterfallGallery/__init__.py rename to backend/modelscope_studio/components/legacy/WaterfallGallery/__init__.py index e41b017c..7a258efa 100644 --- a/backend/modelscope_studio/components/WaterfallGallery/__init__.py +++ b/backend/modelscope_studio/components/legacy/WaterfallGallery/__init__.py @@ -14,7 +14,7 @@ from gradio_client.utils import is_http_url_like from PIL import Image as _Image # using _ to minimize namespace pollution -from ...utils import resolve_frontend_dir +from ....utils.dev import resolve_frontend_dir set_documentation_group("component") @@ -53,7 +53,7 @@ class ModelScopeWaterfallGallery(Component): doc="Triggered when the image action button is clicked."), "load_more" ] - FRONTEND_DIR = resolve_frontend_dir("WaterfallGallery") + FRONTEND_DIR = resolve_frontend_dir("WaterfallGallery", type='legacy') data_model = GalleryData def __init__(self, diff --git a/backend/modelscope_studio/components/legacy/__init__.py b/backend/modelscope_studio/components/legacy/__init__.py new file mode 100644 index 00000000..6c2db370 --- /dev/null +++ b/backend/modelscope_studio/components/legacy/__init__.py @@ -0,0 +1,6 @@ +from .Chatbot import ModelScopeChatbot as Chatbot +from .Flow import ModelScopeFlow as Flow +from .Lifecycle import ModelScopeLifecycle as Lifecycle +from .Markdown import ModelScopeMarkdown as Markdown +from .MultimodalInput import ModelScopeMultimodalInput as MultimodalInput +from .WaterfallGallery import ModelScopeWaterfallGallery as WaterfallGallery diff --git a/backend/modelscope_studio/utils/__init__.py b/backend/modelscope_studio/utils/dev/__init__.py similarity index 69% rename from backend/modelscope_studio/utils/__init__.py rename to backend/modelscope_studio/utils/dev/__init__.py index e392f4d3..393cd789 100644 --- a/backend/modelscope_studio/utils/__init__.py +++ b/backend/modelscope_studio/utils/dev/__init__.py @@ -1,13 +1,11 @@ from typing import List, Optional, TypedDict +from .component import * from .process_links import process_links +from .resolve_frontend_dir import * class CustomComponentDict(TypedDict): props: Optional[List[str]] template: Optional[str] js: Optional[str] - - -def resolve_frontend_dir(component: str): - return f"../../../../frontend/{component}" diff --git a/backend/modelscope_studio/utils/dev/component.py b/backend/modelscope_studio/utils/dev/component.py new file mode 100644 index 00000000..ed9d90a7 --- /dev/null +++ b/backend/modelscope_studio/utils/dev/component.py @@ -0,0 +1,150 @@ +from timeit import Timer +from typing import Any, Callable, List, Set, Union + +from gradio.component_meta import ComponentMeta +from gradio.components.base import BlockContext, Component + + +class ModelScopeLayoutComponent(BlockContext, metaclass=ComponentMeta): + """ + """ + + EVENTS = [] + + # supported slots + SLOTS = [] + + def __exit__(self, *args, **kwargs): + self._internal.update(layout=True) + super().__exit__(*args, **kwargs) + + def __init__( + self, + *, + as_item: Union[str, None] = None, + # gradio properties + visible: bool = True, + elem_id: Union[str, None] = None, + elem_classes: Union[List[str], str, None] = None, + elem_style: Union[dict, None] = None, + render: bool = True): + super().__init__(visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render) + self.as_item = as_item + if self.parent: + self._internal = dict(index=len(self.parent.children) - 1) + else: + self._internal = dict() + + self.elem_style = elem_style + + @property + def skip_api(self): + return True + + +class ModelScopeComponent(Component): + """ + """ + + def __init__( + self, + value: Any = None, + *, + as_item: Union[str, None] = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: Union[str, None] = None, + elem_classes: Union[List[str], str, None] = None, + elem_style: Union[dict, None] = None, + key: Union[int, str, None] = None, + every: Union[Timer, float, None] = None, + inputs: Union[Component, List[Component], Set[Component], + None] = None, + load_fn: Union[Callable, None] = None, + render: bool = True): + super().__init__(visible=visible, + value=value, + elem_id=elem_id, + elem_classes=elem_classes, + key=key, + every=every, + inputs=inputs, + load_fn=load_fn, + render=render) + if self.parent: + self._internal = dict(index=len(self.parent.children) - 1) + else: + self._internal = dict() + self.as_item = as_item + self.elem_style = elem_style + + +class ModelScopeDataLayoutComponent(Component, + BlockContext, + metaclass=ComponentMeta): + """ + """ + EVENTS = [] + # supported slots + SLOTS = [] + + # fix gradio’s bug + @property + def component_class_id(self): + return self.get_component_class_id() + + @component_class_id.setter + def component_class_id(self, value): + pass + + @property + def skip_api(self): + return False + + def __exit__(self, *args, **kwargs): + self._internal.update(layout=True) + super().__exit__(*args, **kwargs) + + def __init__( + self, + value: Any = None, + *, + as_item: Union[str, None] = None, + _internal: None = None, + # gradio properties + visible: bool = True, + elem_id: Union[str, None] = None, + elem_classes: Union[List[str], str, None] = None, + elem_style: Union[dict, None] = None, + key: Union[int, str, None] = None, + every: Union[Timer, float, None] = None, + inputs: Union[Component, List[Component], Set[Component], + None] = None, + load_fn: Union[Callable, None] = None, + render: bool = True): + super().__init__( + visible=visible, + value=value, + elem_id=elem_id, + elem_classes=elem_classes, + key=key, + every=every, + inputs=inputs, + load_fn=load_fn, + # disable render twice + render=False) + BlockContext.__init__(self, + visible=visible, + elem_id=elem_id, + elem_classes=elem_classes, + render=render) + if self.parent: + self._internal = dict(index=len(self.parent.children) - 1) + else: + self._internal = dict() + self.as_item = as_item + self.elem_style = elem_style diff --git a/backend/modelscope_studio/utils/process_links.py b/backend/modelscope_studio/utils/dev/process_links.py similarity index 100% rename from backend/modelscope_studio/utils/process_links.py rename to backend/modelscope_studio/utils/dev/process_links.py diff --git a/backend/modelscope_studio/utils/dev/resolve_frontend_dir.py b/backend/modelscope_studio/utils/dev/resolve_frontend_dir.py new file mode 100644 index 00000000..676c9c01 --- /dev/null +++ b/backend/modelscope_studio/utils/dev/resolve_frontend_dir.py @@ -0,0 +1,15 @@ +from typing import Literal, Union + + +def resolve_frontend_dir(component: str, + sub_component: Union[str, list, tuple] = None, + type: Literal['antd', 'base'] = 'antd'): + if isinstance(sub_component, list) or isinstance(sub_component, tuple): + dir = '' + for c in sub_component: + dir = dir + f"/{c}" + return f"{'../' * len(sub_component)}../../../../../frontend/{type}/{component}{dir}" + + if (sub_component): + return f"../../../../../../frontend/{type}/{component}/{sub_component}" + return f"../../../../../frontend/{type}/{component}" diff --git a/backend/modelscope_studio/version.py b/backend/modelscope_studio/version.py index 72251527..81a2814f 100644 --- a/backend/modelscope_studio/version.py +++ b/backend/modelscope_studio/version.py @@ -1 +1 @@ -__version__ = "0.5.2" +__version__ = "1.0.0-beta.3" diff --git a/config/changelog/CHANGELOG.md b/config/changelog/CHANGELOG.md index c5819025..0970a8e6 100644 --- a/config/changelog/CHANGELOG.md +++ b/config/changelog/CHANGELOG.md @@ -1,5 +1,29 @@ # @modelscope-studio/changelog +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! + ## 0.5.2 No significant changes to this package were made in this release. diff --git a/config/changelog/package.json b/config/changelog/package.json index aa4622c1..2a08709e 100644 --- a/config/changelog/package.json +++ b/config/changelog/package.json @@ -1,15 +1,15 @@ { "name": "@modelscope-studio/changelog", - "version": "0.5.2", + "version": "1.0.0-beta.3", "private": false, "description": "ModelScope Studio Changelog", "repository": "git@github.com:modelscope/modelscope-studio.git", "license": "Apache-2.0", "exports": { ".": { + "types": "./dist/index.d.ts", "import": "./dist/index.mjs", - "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" + "require": "./dist/index.cjs" } }, "main": "dist/index.cjs", @@ -20,12 +20,12 @@ }, "dependencies": { "@changesets/get-github-info": "^0.6.0", - "@manypkg/get-packages": "^2.2.1", + "@manypkg/get-packages": "^2.2.2", "detect-indent": "^7.0.1" }, "devDependencies": { "@changesets/types": "^6.0.0", - "@types/node": "^20.14.9", - "tsup": "^8.1.0" + "@types/node": "^22.7.5", + "tsup": "^8.3.0" } } diff --git a/config/lint-config/CHANGELOG.md b/config/lint-config/CHANGELOG.md index c4e86d04..789af92b 100644 --- a/config/lint-config/CHANGELOG.md +++ b/config/lint-config/CHANGELOG.md @@ -1,5 +1,29 @@ # @modelscope-studio/lint-config +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! + ## 0.5.2 No significant changes to this package were made in this release. diff --git a/config/lint-config/configs/eslint/basic.mjs b/config/lint-config/configs/eslint/basic.mjs index 0ce9c94f..2f10e72d 100644 --- a/config/lint-config/configs/eslint/basic.mjs +++ b/config/lint-config/configs/eslint/basic.mjs @@ -5,11 +5,12 @@ import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended' import simpleImportSort from 'eslint-plugin-simple-import-sort'; import globals from 'globals'; /** - * @type {import('eslint').Linter.FlatConfig[]} + * @type {import('eslint').Linter.Config[]} */ export const basic = [ { ignores: [ + '**/backend/**', '**/.git/**', '**/node_modules/**', '**/*.min.*', diff --git a/config/lint-config/configs/eslint/react.mjs b/config/lint-config/configs/eslint/react.mjs index 25dafd9f..a36a4278 100644 --- a/config/lint-config/configs/eslint/react.mjs +++ b/config/lint-config/configs/eslint/react.mjs @@ -4,7 +4,7 @@ import reactRefresh from 'eslint-plugin-react-refresh'; import { fixupPluginRules } from '@eslint/compat'; import jsxA11y from 'eslint-plugin-jsx-a11y'; /** - * @type {import('eslint').Linter.FlatConfig[]} + * @type {import('eslint').Linter.Config[]} */ export const react = [ eslintPluginReactRecommendedConfig, diff --git a/config/lint-config/configs/eslint/svelte.mjs b/config/lint-config/configs/eslint/svelte.mjs index 18ca2469..2bbdf834 100644 --- a/config/lint-config/configs/eslint/svelte.mjs +++ b/config/lint-config/configs/eslint/svelte.mjs @@ -1,7 +1,7 @@ import eslintPluginSvelte from 'eslint-plugin-svelte'; /** - * @type {import('eslint').Linter.FlatConfig[]} + * @type {import('eslint').Linter.Config[]} */ export const svelte = [ ...eslintPluginSvelte.configs['flat/recommended'], @@ -14,6 +14,7 @@ export const svelte = [ }, rules: { 'svelte/no-at-html-tags': 'off', + 'svelte/valid-compile': 'warn', }, }, ]; diff --git a/config/lint-config/configs/eslint/typescript.mjs b/config/lint-config/configs/eslint/typescript.mjs index 40103e6d..51b0dce5 100644 --- a/config/lint-config/configs/eslint/typescript.mjs +++ b/config/lint-config/configs/eslint/typescript.mjs @@ -1,7 +1,7 @@ import eslintPluginImport from 'eslint-plugin-import'; import tseslint from 'typescript-eslint'; /** - * @type {import('eslint').Linter.FlatConfig[]} + * @type {import('eslint').Linter.Config[]} */ export const typescript = [ ...tseslint.configs.recommended.map((config) => ({ @@ -43,15 +43,11 @@ export const typescript = [ 'warn', { vars: 'all', varsIgnorePattern: '^_' }, ], - '@typescript-eslint/ban-types': [ - 'error', - { - types: { - '{}': false, - }, - extendDefaults: true, - }, - ], + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-wrapper-object-types': 'error', + '@typescript-eslint/no-unsafe-function-type': 'error', // import type '@typescript-eslint/consistent-type-imports': [ 'error', diff --git a/config/lint-config/eslint.mjs b/config/lint-config/eslint.mjs index 75119b48..9deefb5b 100644 --- a/config/lint-config/eslint.mjs +++ b/config/lint-config/eslint.mjs @@ -5,6 +5,6 @@ import { svelte } from './configs/eslint/svelte.mjs'; import { typescript } from './configs/eslint/typescript.mjs'; /** - * @type {import('eslint').Linter.FlatConfig[]} + * @type {import('eslint').Linter.Config[]} */ export default [].concat(basic, react, typescript, svelte); diff --git a/config/lint-config/package.json b/config/lint-config/package.json index 3c3f5d58..37410bf3 100644 --- a/config/lint-config/package.json +++ b/config/lint-config/package.json @@ -1,6 +1,6 @@ { "name": "@modelscope-studio/lint-config", - "version": "0.5.2", + "version": "1.0.0-beta.3", "private": false, "description": "ModelScope Studio Lint Config", "repository": "git@github.com:modelscope/modelscope-studio.git", @@ -16,33 +16,33 @@ } }, "dependencies": { - "@eslint/compat": "^1.1.0", - "@eslint/js": "^9.5.0", - "@typescript-eslint/parser": "^7.14.1", + "@eslint/compat": "^1.2.0", + "@eslint/js": "^9.12.0", + "@typescript-eslint/parser": "^8.8.1", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.0", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.9.0", - "eslint-plugin-prettier": "5.1.3", - "eslint-plugin-react": "^7.34.3", + "eslint-plugin-prettier": "5.2.1", + "eslint-plugin-react": "^7.37.1", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", + "eslint-plugin-react-refresh": "^0.4.12", "eslint-plugin-simple-import-sort": "^12.1.0", - "eslint-plugin-svelte": "^2.41.0", - "globals": "^15.6.0", - "postcss": "^8.4.38", + "eslint-plugin-svelte": "^2.44.1", + "globals": "^15.11.0", + "postcss": "^8.4.47", "postcss-less": "^6.0.0", "stylelint-config-ali": "^2.1.1", "stylelint-config-rational-order": "^0.1.2", "stylelint-config-standard": "^36.0.1", "stylelint-declaration-block-no-ignored-properties": "^2.8.0", "stylelint-order": "^6.0.4", - "stylelint-prettier": "^5.0.0", - "svelte-eslint-parser": "^0.39.2", - "typescript-eslint": "^7.14.1" + "stylelint-prettier": "^5.0.2", + "svelte-eslint-parser": "^0.41.1", + "typescript-eslint": "^8.8.1" }, "devDependencies": { - "@types/eslint": "^8.56.10", + "@types/eslint": "^9.6.1", "@types/eslint__js": "^8.42.3" } } diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 02d9fbef..00000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.9 - -WORKDIR /code - -COPY --link --chown=1000 . . - -RUN mkdir -p /tmp/cache/ -RUN chmod a+rwx -R /tmp/cache/ -ENV TRANSFORMERS_CACHE=/tmp/cache/ - -RUN pip install --no-cache-dir -r requirements.txt - -ENV PYTHONUNBUFFERED=1 GRADIO_ALLOW_FLAGGING=never GRADIO_NUM_PORTS=1 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 SYSTEM=spaces - -CMD ["python", "app.py"] diff --git a/docs/README-zh_CN.md b/docs/README-zh_CN.md index fa6b2694..f569b710 100644 --- a/docs/README-zh_CN.md +++ b/docs/README-zh_CN.md @@ -1,4 +1,4 @@ -

ModelScope Studio

+# ModelScope Studio

@@ -9,25 +9,46 @@

-GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space +GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space -`modelscope_studio` 是一套基于 gradio 4.x 的扩展组件库,致力于服务于 ModelScope 创空间中对于 gradio 应用的各类扩展需求,目前主要聚集在对话场景增强、多模态场景以及一些其他垂直场景支持。 +`modelscope_studio`是一个基于 Gradio 的三方组件库,在原有 Gradio 组件的基础上延伸了更多的组件和使用形式。 -## Install +目前支持的 UI 库: + +- [Ant Design](https://ant.design/) + +## 何时使用 + +比起 Gradio 自身的组件,`modelscope_studio`更加注重页面布局和组件的灵活性,如果您想要构建更漂亮的用户界面,我们非常推荐您使用`modelscope_studio`。然而,当您的应用需要 Gradio 在 Python 端更多地处理内置数据时,`modelscope_studio`可能不是最好的选择,但仍然可以使用`modelscope_studio`的布局和展示组件来帮助您构建页面。 + +## 依赖 + +- Gradio >= 4.0 + +## 安装 + +> 目前`modelscope_studio` 1.0 版本仍在开发中,您可以通过安装`beta`版本提前使用。 ```sh -pip install modelscope_studio +pip install modelscope_studio~=1.0.0b ``` -## API +## 示例 + + + +## 迁移到 1.0 -- load +如果您在之前使用了`modelscope_studio`的组件,并且想要在新版本中继续使用。不需要对原有组件做任何修改,只需要在外层引入`ms.Application`即可。 -## Components +```python +import gradio as gr +import modelscope_studio.components.base as ms +import modelscope_studio.components.legacy as mgr -- Chatbot -- MultimodalInput -- Markdown -- WaterfallGallery -- Lifecycle -- Flow +with gr.Blocks() as demo: + with ms.Application(): + mgr.Chatbot() + +demo.launch() +``` diff --git a/docs/README.md b/docs/README.md index d66732f7..b862f3d4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,20 +1,21 @@ --- tags: - gradio-custom-component - - Chatbot - - MutilmodalInput - - Markdown - - gradio-template-Chatbot - - gradio-template-Markdown + - component library + - Ant Design + - modelscope-studio title: modelscope-studio colorFrom: blue colorTo: gray -sdk: docker +short_description: A third-party component library based on Gradio. +sdk: gradio pinned: false +header: mini +app_file: app.py license: apache-2.0 --- -

ModelScope Studio

+# ModelScope Studio

@@ -25,25 +26,46 @@ license: apache-2.0

-GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space +GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space -`modelscope_studio` is a set of extension component libraries based on gradio 4.x, dedicated to serving the various extension needs of gradio applications within the ModelScope Studio. It mainly focuses on enhancing conversational scenarios, supporting multimodal contexts, and providing assistance for various other specialized scenarios. +`modelscope_studio` is a third-party component library based on Gradio, extending more components and usage forms on top of the original Gradio components. -## Install +Currently supported UI libraries: + +- [Ant Design](https://ant.design/) + +## When to Use + +Compared to Gradio's own components, `modelscope_studio` focuses more on page layout and component flexibility. If you want to build a more beautiful user interface, we highly recommend using `modelscope_studio`. However, when your application needs Gradio to handle more built-in data on the Python side, `modelscope_studio` may not be the best choice, but you can still use `modelscope_studio`'s layout and display components to help you build pages. + +## Dependencies + +- Gradio >= 4.0 + +## Installation + +> Currently, `modelscope_studio` version 1.0 is still under development. You can use the `beta` version in advance. ```sh -pip install modelscope_studio +pip install modelscope_studio~=1.0.0b ``` -## API +## Examples + + + +## Migration to 1.0 -- load +If you have previously used `modelscope_studio` components and want to continue using them in the new version, no modifications to the original components are needed. You just need to introduce `ms.Application` in the outer layer. -## Components +```python +import gradio as gr +import modelscope_studio.components.base as ms +import modelscope_studio.components.legacy as mgr -- Chatbot -- MultimodalInput -- Markdown -- Lifecycle -- WaterfallGallery -- Flow +with gr.Blocks() as demo: + with ms.Application(): + mgr.Chatbot() + +demo.launch() +``` diff --git a/docs/api/app.py b/docs/api/app.py index 85d6e013..6f651d0b 100644 --- a/docs/api/app.py +++ b/docs/api/app.py @@ -1,6 +1,6 @@ import os -from components.Docs import Docs +from components.legacy.Docs import Docs def resolve(relative_path: str): diff --git a/docs/app.py b/docs/app.py index 1d93e6b4..bd9e1604 100644 --- a/docs/app.py +++ b/docs/app.py @@ -1,30 +1,195 @@ -import gradio as gr -from api.app import docs as api_docs -from components.Chatbot.app import docs as chatbot_docs -from components.Docs import Docs -from components.Flow.app import docs as flow_docs -from components.Lifecycle.app import docs as lifecycle_docs -from components.Markdown.app import docs as markdown_docs -from components.MultimodalInput.app import docs as multimodel_input_docs -from components.WaterfallGallery.app import docs as waterfall_gallery_docs - -readme_docs = Docs(__file__) - -docs = [ - ["Quick Start", readme_docs], - ["API", api_docs], - ["Chatbot", chatbot_docs], - ["MultimodalInput", multimodel_input_docs], - ["Markdown", markdown_docs], - ["Lifecycle", lifecycle_docs], - ["WaterfallGallery", waterfall_gallery_docs], - ["Flow", flow_docs], +import os +from typing import Literal + +from helper.Docs import Docs +from helper.env import is_modelscope_studio +from helper.Site import Site +from legacy_app import legacy_demo + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def get_text(text: str, cn_text: str): + if is_modelscope_studio: + return cn_text + return text + + +def get_docs(file_path: str, type: Literal["antd", "base"]): + import importlib.util + + components = [] + components_dir = os.path.join(os.path.dirname(file_path), "components", + type) + for dir in os.listdir(components_dir): + abs_dir = os.path.join(components_dir, dir) + if os.path.isdir(abs_dir): + app_file = os.path.join(abs_dir, "app.py") + if os.path.exists(app_file): + components.append(dir) + + docs = {} + for component in components: + spec = importlib.util.spec_from_file_location( + "doc", os.path.join(components_dir, component, "app.py")) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + docs[component] = module.docs + return docs + + +index_docs = {"modelscope_studio": Docs(__file__)} + +base_docs = get_docs(__file__, "base") +antd_docs = get_docs(__file__, "antd") + +default_active_tab = "index" + +index_menu_items = [{ + "label": get_text("ModelScope-Studio", "ModelScope-Studio"), + "key": "modelscope_studio" +}] + +base_menu_items = [{ + "label": + get_text("Core", "核心"), + "type": + "group", + "children": [{ + "label": "Application", + "key": "application" + }, { + "label": "Slot", + "key": "slot" + }, { + "label": "Fragment", + "key": "fragment" + }] +}, { + "label": + get_text("Layout", "布局"), + "type": + "group", + "children": [{ + "label": "Div", + "key": "div" + }, { + "label": "Span", + "key": "span" + }, { + "label": "Text", + "key": "text" + }] +}, { + "label": + get_text("Render", "渲染"), + "type": + "group", + "children": [{ + "label": "Each", + "key": "each" + }, { + "label": "Filter", + "key": "filter" + }] +}] + +antd_menu_items = [{ + "label": get_text("Overview", "概览"), + "key": "overview" +}, { + "label": + get_text("General", "通用"), + "type": + "group", + "children": [{ + "label": get_text("Button", "Button 按钮"), + "key": "button" + }, { + "label": get_text("FloatButton", "FloatButton 悬浮按钮"), + "key": "float_button" + }, { + "label": get_text("Icon", "Icon 图标"), + "key": "icon" + }, { + "label": get_text("Typography", "Typography 排版"), + "key": "typography" + }] +}, { + "label": + get_text("Layout", "布局"), + "type": + "group", + "children": [{ + "label": get_text("Divider", "Divider 分割线"), + "key": "divider" + }] +}] + + +def logo(): + with antd.Flex(align='center', gap=8): + antd.Image(os.path.join(os.path.dirname(__file__), + "./resources/modelscope.png"), + preview=False, + height=20) + ms.Span('✖️') + antd.Image(os.path.join(os.path.dirname(__file__), + "./resources/gradio.png"), + preview=False, + height=40) + + +def more_components(): + with antd.Button(type="link", + href="https://ant.design/components/overview/", + href_target="_blank"): + ms.Text(get_text("More Components", "更多组件")) + + with ms.Slot("icon"): + antd.Icon("ExportOutlined") + + +tabs = [ + { + "label": get_text("Overview", "预览"), + "key": "index", + "default_active_key": "modelscope_studio", + "menus": index_menu_items + }, + { + "label": get_text("Base Components", "基础组件"), + "key": "base", + "default_active_key": "application", + "menus": base_menu_items + }, + { + "label": get_text("Antd Components", "Antd 组件"), + "key": "antd", + "default_active_key": "overview", + "menus": antd_menu_items, + "extra_menu_footer": more_components + }, + { + "label": get_text("Version 0.x", "0.x 版本"), + "key": "legacy", + "content": legacy_demo + }, ] -with gr.Blocks() as demo: - with gr.Tabs() as components_tabs: - for doc in docs: - with gr.TabItem(doc[0], id=doc[0]): - doc[1].render(components_tabs) +site = Site( + tabs=tabs, + docs={ + # match the key of tabs + "index": index_docs, + "antd": antd_docs, + "base": base_docs + }, + default_active_tab=default_active_tab, + logo=logo) + +demo = site.render() -demo.queue().launch() +if __name__ == "__main__": + demo.queue().launch(ssr_mode=False) diff --git a/docs/components/WaterfallGallery/app.py b/docs/components/WaterfallGallery/app.py deleted file mode 100644 index 77372ef2..00000000 --- a/docs/components/WaterfallGallery/app.py +++ /dev/null @@ -1,6 +0,0 @@ -from components.Docs import Docs - -docs = Docs(__file__) - -if __name__ == "__main__": - docs.render().queue().launch() diff --git a/docs/components/antd/button/README-zh_CN.md b/docs/components/antd/button/README-zh_CN.md new file mode 100644 index 00000000..065a0795 --- /dev/null +++ b/docs/components/antd/button/README-zh_CN.md @@ -0,0 +1,7 @@ +# Button + +To trigger an operation. See [Ant Design](https://ant.design/components/button/) for more information. + +## Examples + + diff --git a/docs/components/antd/button/README.md b/docs/components/antd/button/README.md new file mode 100644 index 00000000..065a0795 --- /dev/null +++ b/docs/components/antd/button/README.md @@ -0,0 +1,7 @@ +# Button + +To trigger an operation. See [Ant Design](https://ant.design/components/button/) for more information. + +## Examples + + diff --git a/docs/components/Chatbot/app.py b/docs/components/antd/button/app.py similarity index 72% rename from docs/components/Chatbot/app.py rename to docs/components/antd/button/app.py index 77372ef2..0018b7c1 100644 --- a/docs/components/Chatbot/app.py +++ b/docs/components/antd/button/app.py @@ -1,4 +1,4 @@ -from components.Docs import Docs +from helper.Docs import Docs docs = Docs(__file__) diff --git a/docs/components/antd/button/demos/basic.py b/docs/components/antd/button/demos/basic.py new file mode 100644 index 00000000..887efeeb --- /dev/null +++ b/docs/components/antd/button/demos/basic.py @@ -0,0 +1,26 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Flex(gap="small", wrap=True): + btn = antd.Button("Primary Button", type="primary") + btn.click(lambda: print("clicked")) + with antd.Button(): + ms.Text("Default Button") + antd.Button("Dashed Button", type="dashed") + antd.Button("Text Button", type="text") + antd.Button("Link Button", type="link") + antd.Button("Filled", color="default", variant="filled") + antd.Button("Filled", color="danger", variant="filled") + with antd.Button(type="primary", loading=True): + ms.Text("Loading") + with ms.Slot("icon"): + antd.Icon("PoweroffOutlined") + antd.Button("Block", type="primary", block=True) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/divider/README-zh_CN.md b/docs/components/antd/divider/README-zh_CN.md new file mode 100644 index 00000000..36464d04 --- /dev/null +++ b/docs/components/antd/divider/README-zh_CN.md @@ -0,0 +1,7 @@ +# Divider + +A divider line separates different content. See [Ant Design](https://ant.design/components/divider/) for more information. + +## Examples + + diff --git a/docs/components/antd/divider/README.md b/docs/components/antd/divider/README.md new file mode 100644 index 00000000..36464d04 --- /dev/null +++ b/docs/components/antd/divider/README.md @@ -0,0 +1,7 @@ +# Divider + +A divider line separates different content. See [Ant Design](https://ant.design/components/divider/) for more information. + +## Examples + + diff --git a/docs/components/Flow/app.py b/docs/components/antd/divider/app.py similarity index 72% rename from docs/components/Flow/app.py rename to docs/components/antd/divider/app.py index 77372ef2..0018b7c1 100644 --- a/docs/components/Flow/app.py +++ b/docs/components/antd/divider/app.py @@ -1,4 +1,4 @@ -from components.Docs import Docs +from helper.Docs import Docs docs = Docs(__file__) diff --git a/docs/components/antd/divider/demos/basic.py b/docs/components/antd/divider/demos/basic.py new file mode 100644 index 00000000..70ecf62a --- /dev/null +++ b/docs/components/antd/divider/demos/basic.py @@ -0,0 +1,29 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + ms.Div( + " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi istaprobare, quae sunt a te dicta? Refert tamen, quo modo." + ) + antd.Divider("Solid", elem_style=dict(borderColor='#7cb305')) + ms.Div( + " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi istaprobare, quae sunt a te dicta? Refert tamen, quo modo." + ) + with antd.Divider(elem_style=dict(borderColor='#7cb305'), + variant="dotted"): + ms.Text("Dotted") + ms.Div( + " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi istaprobare, quae sunt a te dicta? Refert tamen, quo modo." + ) + with antd.Divider(elem_style=dict(borderColor='#7cb305'), + variant="dashed"): + ms.Text("Dashed") + ms.Div( + " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi istaprobare, quae sunt a te dicta? Refert tamen, quo modo." + ) +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/float_button/README-zh_CN.md b/docs/components/antd/float_button/README-zh_CN.md new file mode 100644 index 00000000..0c7d28f3 --- /dev/null +++ b/docs/components/antd/float_button/README-zh_CN.md @@ -0,0 +1,7 @@ +# FloatButton + +A button that floats at the top of the page. See [Ant Design](https://ant.design/components/float-button/) for more information. + +## Examples + + diff --git a/docs/components/antd/float_button/README.md b/docs/components/antd/float_button/README.md new file mode 100644 index 00000000..0c7d28f3 --- /dev/null +++ b/docs/components/antd/float_button/README.md @@ -0,0 +1,7 @@ +# FloatButton + +A button that floats at the top of the page. See [Ant Design](https://ant.design/components/float-button/) for more information. + +## Examples + + diff --git a/docs/components/Lifecycle/app.py b/docs/components/antd/float_button/app.py similarity index 72% rename from docs/components/Lifecycle/app.py rename to docs/components/antd/float_button/app.py index 77372ef2..0018b7c1 100644 --- a/docs/components/Lifecycle/app.py +++ b/docs/components/antd/float_button/app.py @@ -1,4 +1,4 @@ -from components.Docs import Docs +from helper.Docs import Docs docs = Docs(__file__) diff --git a/docs/components/antd/float_button/demos/basic.py b/docs/components/antd/float_button/demos/basic.py new file mode 100644 index 00000000..c0ab7f93 --- /dev/null +++ b/docs/components/antd/float_button/demos/basic.py @@ -0,0 +1,30 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.FloatButton.Group(shape="circle", + elem_style=dict(insetInlineEnd=24)): + with antd.FloatButton(badge=dict(count=12)): + antd.Icon("QuestionCircleOutlined") + antd.FloatButton(badge=dict(count=123, overflowCount=999)) + antd.FloatButton.BackTop(visibility_height=0) + + antd.FloatButton(type="primary", + elem_style=dict(insetInlineEnd=24 + 70)) + + with antd.FloatButton(elem_style=dict(insetInlineEnd=24 + 70 + + 70)): + with ms.Slot("icon"): + antd.Icon("QuestionCircleOutlined") + with antd.FloatButton(type="primary", + description="Tooltip", + elem_style=dict(insetInlineEnd=24 + 140 + + 70)): + with ms.Slot("tooltip"): + ms.Div("Documents") +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/icon/README-zh_CN.md b/docs/components/antd/icon/README-zh_CN.md new file mode 100644 index 00000000..4305174e --- /dev/null +++ b/docs/components/antd/icon/README-zh_CN.md @@ -0,0 +1,9 @@ +# Icon + +Semantic vector graphics. See [Ant Design](https://ant.design/components/icon/) for more information. + +## Examples + + + + diff --git a/docs/components/antd/icon/README.md b/docs/components/antd/icon/README.md new file mode 100644 index 00000000..4305174e --- /dev/null +++ b/docs/components/antd/icon/README.md @@ -0,0 +1,9 @@ +# Icon + +Semantic vector graphics. See [Ant Design](https://ant.design/components/icon/) for more information. + +## Examples + + + + diff --git a/docs/components/MultimodalInput/app.py b/docs/components/antd/icon/app.py similarity index 72% rename from docs/components/MultimodalInput/app.py rename to docs/components/antd/icon/app.py index 77372ef2..0018b7c1 100644 --- a/docs/components/MultimodalInput/app.py +++ b/docs/components/antd/icon/app.py @@ -1,4 +1,4 @@ -from components.Docs import Docs +from helper.Docs import Docs docs = Docs(__file__) diff --git a/docs/components/antd/icon/demos/basic.py b/docs/components/antd/icon/demos/basic.py new file mode 100644 index 00000000..edb488dd --- /dev/null +++ b/docs/components/antd/icon/demos/basic.py @@ -0,0 +1,20 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Space(): + antd.Icon("HomeOutlined") + antd.Icon("SettingFilled") + antd.Icon("SmileOutlined") + antd.Icon("SyncOutlined", spin=True) + antd.Icon("SmileOutlined", rotate=180) + antd.Icon("LoadingOutlined") + antd.Icon("SmileTwoTone") + icon = antd.Icon("HeartTwoTone", two_tone_color="#eb2f96") + icon.click(lambda: print("clicked")) +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/icon/demos/iconfont.py b/docs/components/antd/icon/demos/iconfont.py new file mode 100644 index 00000000..d724724e --- /dev/null +++ b/docs/components/antd/icon/demos/iconfont.py @@ -0,0 +1,22 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + # If you are using [iconfont.cn](https://www.iconfont.cn/), you can use the icons in your project gracefully. + with antd.Icon.IconfontProvider(script_url=[ + "//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js", + "//at.alicdn.com/t/font_1788592_a5xf2bdic3u.js" + ]): + with antd.Space(): + antd.Icon("icon-python") + antd.Icon("icon-tuichu") + antd.Icon("icon-facebook", + elem_style=dict(color="#1877F2")) + antd.Icon("icon-twitter") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/README-zh_CN.md b/docs/components/antd/overview/README-zh_CN.md new file mode 100644 index 00000000..e4ab567a --- /dev/null +++ b/docs/components/antd/overview/README-zh_CN.md @@ -0,0 +1,73 @@ +# 概览 + +`modelscope_studio`集成了 [Ant Design](https://ant.design/) 的组件,并支持大部分的组件属性,您只需要引入`antd`模块即可直接使用。 + +```python +import modelscope_studio.components.antd as antd +``` + +## 快速开始 + + + +注意:其中`ms.Application`与`antd.ConfigProvider`是必须的。 + +- `Application` 包含了`modelscope_studio`中所有的组件依赖,请确保`modelscope_studio`所有导出的组件都被其包裹,否则页面将会无法成功预览。 +- `ConfigProvider` 与 Ant Design 中的功能一致,除此之外,我们还加了一些额外的适配来兼容 Gradio 的样式。因此,为了保证页面样式正常,所有的`antd`组件需要包裹在该组件下。 + +## 属性限制 + +由于 Python 的类型限制,一些组件属性的支持形式有所不同。 + +### 事件 + +在`antd`中,所有以`onXxx`形式绑定的事件,均改为了`gradio`的事件绑定形式,如`onClick`、`onChange`等。如果您想要获取事件参数,也需要绑定`gr.EventData`,所有的事件参数都通过数组的形式保存在`e._data["payload"]`中。 + + + +### ReactNode + +在 Python 中无法直接将某个组件作为参数,因此我们提供了插槽机制,您可以使用`ms.Slot`来包裹需要被渲染的模块。 + + + +**注:** + +- 您可以通过查看组件的`SLOTS`属性获取所有支持的插槽。 +- 如果您只想渲染一段字符串或数字,您依然可以直接将其作为组件的属性传入,无需使用`ms.Slot`。下面两种写法效果是一样的,并且更推荐直接作为组件属性传入: + + ```python + antd.Card(title="Card Title") + + with antd.Card(): + ms.Slot("title"): + ms.Text("Card Title") + ``` + +### 普通函数((...args) => {}) + +为了支持在 Python 直接传入 Javascript 函数,我们将其改为了`str`类型。因此,您只需要传递普通的函数字符串即可,它会在前端被自动编译为 Javascript 函数。 + + + +我们在全局注入了事件通知对象,您可以通过在函数中调用`window.ms_globals.dispatch`来主动向 Python 端发送事件,在 Python 端可以通过`ms.Application.custom`事件接收。 + + + +### 返回 ReactNode 的函数 ((...args) => ReactNode) + +当您的 Javascript 函数返回值为 ReactNode 时,我们提供了两种处理方式: + +1. 将其当做普通的 ReactNode 值,继续使用`ms.Slot`来渲染模块,在此基础上,`ms.Slot`还支持传入`params_mapping`参数,该参数同样接收一个 Javascript 函数字符串,它可以将函数的参数映射为当前`slot`环境的上下文(具体请参考`ms.Each`)。 + + + +2. 将其当做普通函数,通过`window.ms_globals.React`与`window.ms_globals.antd`等全局变量在前端生成 ReactNode(注意此时不能使用 jsx,需要使用 `React.createElement`)。 + + + +## 集成其他 Gradio 组件 + +某些组件的插槽可能只支持`modelscope_studio`中的组件,如果您想要支持其他的 Gradio 组件,您需要使用`Fragment`来将其包裹。 + + diff --git a/docs/components/antd/overview/README.md b/docs/components/antd/overview/README.md new file mode 100644 index 00000000..82bb9278 --- /dev/null +++ b/docs/components/antd/overview/README.md @@ -0,0 +1,73 @@ +# Overview + +`modelscope_studio` integrates [Ant Design](https://ant.design/) components and supports most component properties. You can use them directly by importing the `antd` module. + +```python +import modelscope_studio.components.antd as antd +``` + +## Quick Start + + + +Note: Both `ms.Application` and `antd.ConfigProvider` are required. + +- `Application` contains all component dependencies in `modelscope_studio`. Please ensure that all components exported from `modelscope_studio` are wrapped by it, otherwise the page will not be successfully previewed. +- `ConfigProvider` functions the same as in Ant Design. Additionally, we have added some extra adaptations to be compatible with Gradio's styles. Therefore, to ensure normal page styling, all `antd` components need to be wrapped within this component. + +## Property Limitations + +Due to Python's type restrictions, the support for some component properties differs. + +### Events + +In `antd`, all events bound in the form of `onXxx` have been changed to Gradio's event binding form, such as `onClick`, `onChange`, etc. If you want to get event parameters, you also need to bind `gr.EventData`. All event parameters are stored in the form of an array in `e._data["payload"]`. + + + +### ReactNode + +In Python, it's not possible to directly pass a component as a parameter, so we provide a slot mechanism. You can use `ms.Slot` to wrap the module that needs to be rendered. + + + +**Note:** + +- You can view the `SLOTS` property of the component to get all supported slots. +- If you only want to render a string or number, you can still pass it directly as a component property without using `ms.Slot`. The following two ways of writing have the same effect, and it's more recommended to pass it directly as a component property: + + ```python + antd.Card(title="Card Title") + + with antd.Card(): + ms.Slot("title"): + ms.Text("Card Title") + ``` + +### Regular Functions ((...args) => {}) + +To support passing JavaScript functions directly in Python, we have changed them to `str` type. Therefore, you only need to pass a regular function string, and it will be automatically compiled into a JavaScript function on the frontend. + + + +We have injected a global event notification object. You can actively send events to the Python side by calling `window.ms_globals.dispatch` in the function, which can be received on the Python side through the `ms.Application.custom` event. + + + +### Functions Returning ReactNode ((...args) => ReactNode) + +When your JavaScript function returns a ReactNode, we provide two handling methods: + +1. Treat it as a regular ReactNode value and continue using `ms.Slot` to render the module. Additionally, `ms.Slot` supports passing a `params_mapping` parameter, which also accepts a JavaScript function string. It can map the function's parameters to the context of the current `slot` environment (refer to `ms.Each` for details). + + + +2. Treat it as a regular function and generate ReactNode on the frontend using global variables like `window.ms_globals.React` and `window.ms_globals.antd` (note that JSX cannot be used here, you need to use `React.createElement`). + + + +## Integrating Other Gradio Components + +Some component slots may only support components from `modelscope_studio`. If you want to support other Gradio components, you need to wrap them with `Fragment`. + + diff --git a/docs/components/antd/overview/app.py b/docs/components/antd/overview/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/antd/overview/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/antd/overview/demos/integrate_other_components.py b/docs/components/antd/overview/demos/integrate_other_components.py new file mode 100644 index 00000000..5749b5c1 --- /dev/null +++ b/docs/components/antd/overview/demos/integrate_other_components.py @@ -0,0 +1,17 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Space(): + antd.Button("1") + antd.Button("2") + # other gradio components + with ms.Fragment(): + gr.Button("3") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_event.py b/docs/components/antd/overview/demos/limit_event.py new file mode 100644 index 00000000..f41e652b --- /dev/null +++ b/docs/components/antd/overview/demos/limit_event.py @@ -0,0 +1,18 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def on_change(e: gr.EventData): + print(e._data["payload"]) + + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + rate = antd.Rate() + rate.change(on_change) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_function.py b/docs/components/antd/overview/demos/limit_function.py new file mode 100644 index 00000000..646efb1f --- /dev/null +++ b/docs/components/antd/overview/demos/limit_function.py @@ -0,0 +1,14 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.Input(show_count=dict(formatter="""({ count }) => { + return `${count} characters`; + }""")) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_function_with_event.py b/docs/components/antd/overview/demos/limit_function_with_event.py new file mode 100644 index 00000000..61eb45a8 --- /dev/null +++ b/docs/components/antd/overview/demos/limit_function_with_event.py @@ -0,0 +1,21 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def on_custom(e: gr.EventData): + print(e._data) + + +with gr.Blocks() as demo: + with ms.Application() as app: + with antd.ConfigProvider(): + antd.Input(show_count=dict(formatter="""({ count }) => { + window.ms_globals.dispatch({ type: "input_count_change", payload: count }); + return `${count} characters`; + }""")) + app.custom(on_custom) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_react_node.py b/docs/components/antd/overview/demos/limit_react_node.py new file mode 100644 index 00000000..70cf6f4b --- /dev/null +++ b/docs/components/antd/overview/demos/limit_react_node.py @@ -0,0 +1,22 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Card(): + ms.Div("Card Content") + ms.Div("Card Content") + ms.Div("Card Content") + # slots + with ms.Slot("title"): + ms.Text("Card Title") + with ms.Slot("extra"): + with antd.Button(): + ms.Text("GitHub") + with ms.Slot("icon"): + antd.Icon("GithubOutlined") +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_react_node_function_by_function.py b/docs/components/antd/overview/demos/limit_react_node_function_by_function.py new file mode 100644 index 00000000..d0046788 --- /dev/null +++ b/docs/components/antd/overview/demos/limit_react_node_function_by_function.py @@ -0,0 +1,75 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def on_custom(e: gr.EventData): + print(e._data) + + +with gr.Blocks() as demo: + with ms.Application() as app: + with antd.ConfigProvider(): + with antd.Table([ + { + "key": '1', + "name": 'Mike', + "age": 32, + "address": '10 Downing Street', + }, + { + "key": '2', + "name": 'John', + "age": 42, + "address": '11 Downing Street', + }, + ], + pagination=False): + antd.Table.Column(title="Name", data_index="name", key="name") + antd.Table.Column(title="Age", data_index="age", key="age") + antd.Table.Column(title="Address", + data_index="address", + key="address") + antd.Table.Column(title="Action", + key="action", + column_render="""(_, record) => { + const React = window.ms_globals.React; + const antd = window.ms_globals.antd; + const dispatch = window.ms_globals.dispatch; + return React.createElement(antd.Space, { + size: "middle", + children: [ + React.createElement(antd.Button, { + type: "link", + onClick: () => { + dispatch({ + type: "table_column_action", + payload: { + action: "invite", + record, + }, + }); + }, + children: "Invite " + record.name + }), + React.createElement(antd.Button, { + type: "link", + children: "Delete", + onClick: () => { + dispatch({ + type: "table_column_action", + payload: { + action: "delete", + record, + }, + }); + }, + }), + ], + }); + }""") + + app.custom(on_custom) +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/limit_react_node_function_by_slot.py b/docs/components/antd/overview/demos/limit_react_node_function_by_slot.py new file mode 100644 index 00000000..6d543362 --- /dev/null +++ b/docs/components/antd/overview/demos/limit_react_node_function_by_slot.py @@ -0,0 +1,15 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Statistic(title="Active Users", value=112893): + with ms.Slot("formatter", + params_mapping="(value) => ({ text: { value }})"): + antd.Typography.Text(type="success", as_item="text") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/overview/demos/quick_start.py b/docs/components/antd/overview/demos/quick_start.py new file mode 100644 index 00000000..e2e76aea --- /dev/null +++ b/docs/components/antd/overview/demos/quick_start.py @@ -0,0 +1,12 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.Button("Hello Ant Design", type="primary") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/antd/typography/README-zh_CN.md b/docs/components/antd/typography/README-zh_CN.md new file mode 100644 index 00000000..809ae866 --- /dev/null +++ b/docs/components/antd/typography/README-zh_CN.md @@ -0,0 +1,7 @@ +# Button + +See [Ant Design](https://ant.design/components/float-button/) for more information. + +## Examples + + diff --git a/docs/components/antd/typography/README.md b/docs/components/antd/typography/README.md new file mode 100644 index 00000000..cefa66ef --- /dev/null +++ b/docs/components/antd/typography/README.md @@ -0,0 +1,7 @@ +# Typography + +Basic text writing, including headings, body text, lists, and more. See [Ant Design](https://ant.design/components/typography/) for more information. + +## Examples + + diff --git a/docs/components/antd/typography/app.py b/docs/components/antd/typography/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/antd/typography/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/antd/typography/demos/basic.py b/docs/components/antd/typography/demos/basic.py new file mode 100644 index 00000000..0bb2e584 --- /dev/null +++ b/docs/components/antd/typography/demos/basic.py @@ -0,0 +1,23 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def on_edit(e: gr.EventData): + return gr.update(value=e._data["payload"][0]) + + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.Typography.Title("Hello, World!", level=3) + antd.Typography.Text("Hello, World!", disabled=True) + antd.Typography.Text("Hello, World!", type="danger") + antd.Typography.Paragraph('This is a copyable text.', + copyable=True) + p = antd.Typography.Paragraph('This is an editable text.') + p.editable_change(on_edit, outputs=[p]) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/application/README-zh_CN.md b/docs/components/base/application/README-zh_CN.md new file mode 100644 index 00000000..d73dbb8c --- /dev/null +++ b/docs/components/base/application/README-zh_CN.md @@ -0,0 +1,20 @@ +# Application + +应用的根组件,该组件包含了所有`modelscope_studio`的组件依赖,需要确保所有从`modelscope_studio`导出的组件都被其包裹,否则页面将会无法成功预览。 + +该组件还可以监听用户页面的生命周期,并获取当前用户的环境信息,您可以 + +- 获取当前用户的语言、页面主题、user agent 和屏幕状态。 +- 监听页面行为并触发相应事件(页面加载、尺寸变化、页面关闭等)。 + +另外,该组件还提供了`custom`事件,您可以通过在任意 Javascript 函数中调用`window.ms_globals.dispatch`主动向 Python 端发送事件,在 Python 端可以通过`ms.Application.custom`事件接收。 + +## 示例 + + + + + + + + diff --git a/docs/components/base/application/README.md b/docs/components/base/application/README.md new file mode 100644 index 00000000..49721844 --- /dev/null +++ b/docs/components/base/application/README.md @@ -0,0 +1,20 @@ +# Application + +The root component of the application, this component contains all the component dependencies of `modelscope_studio`. It is necessary to ensure that all components exported from `modelscope_studio` are wrapped by it, otherwise the page will not be successfully previewed. + +In addition, this component can also listen to the lifecycle of the user's page and obtain the current user's environment information, you can: + +- Obtain the current user's language, page theme, user agent, and screen status. +- Listen to page behaviors and trigger corresponding events (page loading, size changes, page closing, etc.). + +In addition, this component provides the `custom` event, you can send events to the Python side by calling `window.ms_globals.dispatch` in any Javascript function, and receive the events on the Python side through the `ms.Application.custom` event. + +## Examples + + + + + + + + diff --git a/docs/components/base/application/app.py b/docs/components/base/application/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/application/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/application/demos/basic.py b/docs/components/base/application/demos/basic.py new file mode 100644 index 00000000..14d84d05 --- /dev/null +++ b/docs/components/base/application/demos/basic.py @@ -0,0 +1,14 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.Button("Primary Button", type="primary") + antd.Divider() + antd.Input() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/application/demos/custom_event.py b/docs/components/base/application/demos/custom_event.py new file mode 100644 index 00000000..3251dca2 --- /dev/null +++ b/docs/components/base/application/demos/custom_event.py @@ -0,0 +1,20 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def on_custom(e: gr.EventData): + print(e._data) + + +with gr.Blocks() as demo: + with ms.Application() as app: + with antd.ConfigProvider(): + gr.HTML( + """""" + ) + + app.custom(on_custom) +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/application/demos/language_adaptation.py b/docs/components/base/application/demos/language_adaptation.py new file mode 100644 index 00000000..b1ae2170 --- /dev/null +++ b/docs/components/base/application/demos/language_adaptation.py @@ -0,0 +1,39 @@ +import time + +import gradio as gr + +import modelscope_studio.components.base as ms + +messages = { + 'en': { + "hello": "Hello" + }, + 'en-US': { + "hello": "Hello" + }, + 'zh-CN': { + "hello": "你好" + } +} + +default_lang = "en" + + +def mount(e: gr.EventData, _state): + lang = e._data["language"] + if (lang in messages): + _state["current_lang"] = lang + yield 'Switch Language...', _state + time.sleep(2) + yield messages[lang]["hello"], _state + + +with gr.Blocks() as demo: + with ms.Application() as app: + state = gr.State({"current_lang": default_lang}) + markdown = gr.Markdown(value=messages[default_lang]["hello"]) + + app.mount(fn=mount, inputs=[state], outputs=[markdown, state]) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/application/demos/theme_adaptation.py b/docs/components/base/application/demos/theme_adaptation.py new file mode 100644 index 00000000..4d9cb2ef --- /dev/null +++ b/docs/components/base/application/demos/theme_adaptation.py @@ -0,0 +1,34 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +def mount(e: gr.EventData, _state): + _state["theme"] = e._data["theme"] + yield _state + + +def fn(_state): + theme = _state["theme"] + color = '000/fff' if theme == 'dark' else 'fff/000' + yield gr.update( + value=f"https://dummyimage.com/200x100/{color}.png&text={theme}") + + +with gr.Blocks() as demo: + state = gr.State({"theme": "light"}) + with ms.Application() as app: + with antd.ConfigProvider(): + btn = antd.Button( + "Run", + type="primary", + block=True, + ) + image = antd.Image() + + app.mount(fn=mount, inputs=[state], outputs=[state]) + btn.click(fn=fn, inputs=[state], outputs=[image]) + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/div/README-zh_CN.md b/docs/components/base/div/README-zh_CN.md new file mode 100644 index 00000000..34937273 --- /dev/null +++ b/docs/components/base/div/README-zh_CN.md @@ -0,0 +1,7 @@ +# Div + +同 HTML 中的`div`标签,用于辅助布局,可以绑定常用的 HTML 事件,具体事件请查看`EVENTS`属性。 + +## 示例 + + diff --git a/docs/components/base/div/README.md b/docs/components/base/div/README.md new file mode 100644 index 00000000..76615738 --- /dev/null +++ b/docs/components/base/div/README.md @@ -0,0 +1,7 @@ +# Div + +Same as the `div` tag in HTML, used for layout assistance, can bind common HTML events, please refer to the `EVENTS` property for specific events. + +## Examples + + diff --git a/docs/components/base/div/app.py b/docs/components/base/div/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/div/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/div/demos/basic.py b/docs/components/base/div/demos/basic.py new file mode 100644 index 00000000..ca614f9b --- /dev/null +++ b/docs/components/base/div/demos/basic.py @@ -0,0 +1,12 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with ms.Div(elem_style=dict(color="red", fontSize=22)): + ms.Text("Hello Div") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/each/README-zh_CN.md b/docs/components/base/each/README-zh_CN.md new file mode 100644 index 00000000..d2fb4257 --- /dev/null +++ b/docs/components/base/each/README-zh_CN.md @@ -0,0 +1,27 @@ +# Each + +辅助渲染组件,该组件支持传入列表作为参数,并会在前端遍历被包裹的组件,将列表的每一项注入当前遍历的上下文中,被包裹的组件属性会在前端被相应的上下文属性替换(只支持从`modelscope_studio`中导出的组件)。 + +## 何时使用 + +- 当被遍历的组件中全部都是`modelscope_studio`组件或非`modelscope_studio`的组件值不与被遍历的值绑定时; +- 当需要遍历展示的列表长度无法确定时; + +## 示例 + + + +`modelscope_studio`中的每个组件都有一个`as_item`参数(包括`Each`组件本身),指定该参数值后可以直接基于上下文的值做过滤,逻辑上类似`ctx_value = ctx_value["as_item"]`。该特性通常在需要遍历多个组件时使用,可以有效避免属性冲突。 + + + +如果您需要为所有的列表项的组件都添加某些统一的属性,您还可以传入`context_value`参数,该参数会与列表项的上下文深度合并,共同传递给前端组件。 + + + +### API + +| 属性 | 类型 | 默认值 | 描述 | +| ------------- | ---- | ------ | ---------------- | +| value | list | None | 组件的数据源 | +| context_value | dict | None | 统一的上下文参数 | diff --git a/docs/components/base/each/README.md b/docs/components/base/each/README.md new file mode 100644 index 00000000..2c22674d --- /dev/null +++ b/docs/components/base/each/README.md @@ -0,0 +1,27 @@ +# Each + +A helper rendering component that supports passing a list as a parameter and will traverse the wrapped components on the front end, injecting each item of the list into the current traversal context. The attributes of the wrapped components will be replaced by corresponding context properties on the front end (only supports components exported from `modelscope_studio`). + +## When to Use + +- When all components being traversed are `modelscope_studio` components or non-`modelscope_studio` components whose values do not bind to the traversed values. +- When the length of the list to be traversed is uncertain. + +## Examples + + + +Each component within `modelscope_studio` has an `as_item` parameter (including the `Each` component itself). Specifying this parameter value allows filtering based directly on the context value, similar logically to `ctx_value = ctx_value["as_item"]`. This feature is typically used when multiple components need to be iterated over, effectively avoiding property conflicts. + + + +If you need to add certain unified properties to all list item components, you can also pass in the `context_value` parameter. This parameter will be deeply merged with the list item's context and passed together to the front-end component. + + + +### API + +| Attribute | Type | Default Value | Description | +| ------------- | ---- | ------------- | ----------------------------- | +| value | list | None | Data source for the component | +| context_value | dict | None | Unified context parameters | diff --git a/docs/components/base/each/app.py b/docs/components/base/each/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/each/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/each/demos/basic.py b/docs/components/base/each/demos/basic.py new file mode 100644 index 00000000..ca274360 --- /dev/null +++ b/docs/components/base/each/demos/basic.py @@ -0,0 +1,35 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{ + "message": "Success Text", + "description": + "Success Description Success Description Success Description Success Description", + "type": "success" +}, { + "message": "Info Text", + "description": + "Info Description Info Description Info Description Info Description", + "type": "info" +}, { + "message": "Warning Text", + "description": + "Warning Description Warning Description Warning Description Warning Description", + "type": "warning" +}, { + "message": "Error Text", + "description": + "Error Description Error Description Error Description Error Description", + "type": "error" +}] + +with gr.Blocks() as demo: + with ms.Application(): + with antd.Space(direction="vertical"): + with ms.Each(value=data): + antd.Alert() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/each/demos/use_as_item.py b/docs/components/base/each/demos/use_as_item.py new file mode 100644 index 00000000..a2982911 --- /dev/null +++ b/docs/components/base/each/demos/use_as_item.py @@ -0,0 +1,69 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{ + "card": { + "title": "Success Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Info Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Warning Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Error Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}] + +with gr.Blocks() as demo: + with ms.Application(): + with ms.Each(value=data): + with antd.Card(as_item="card"): + # Inner loop + with ms.Each(as_item="each"): + antd.Typography.Paragraph() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/each/demos/use_context_value.py b/docs/components/base/each/demos/use_context_value.py new file mode 100644 index 00000000..2e6e0f19 --- /dev/null +++ b/docs/components/base/each/demos/use_context_value.py @@ -0,0 +1,69 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{ + "card": { + "title": "Success Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Info Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Warning Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}, { + "card": { + "title": "Error Card Title", + }, + "each": { + "value": [{ + "value": "Card Content" + }, { + "value": "Card Content" + }, { + "value": "Card Content" + }] + } +}] + +with gr.Blocks() as demo: + with ms.Application(): + with ms.Each(value=data, context_value={"card": {"hoverable": True}}): + with antd.Card(as_item="card"): + # Inner loop + with ms.Each(as_item="each"): + antd.Typography.Paragraph() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/filter/README-zh_CN.md b/docs/components/base/filter/README-zh_CN.md new file mode 100644 index 00000000..488c422f --- /dev/null +++ b/docs/components/base/filter/README-zh_CN.md @@ -0,0 +1,21 @@ +# Filter + +辅助渲染组件,该组件需要与`Each`组件配合使用,用于过滤`Each`组件中的上下文信息。 + +该组件的`as_item`参数有所不同,它会将过滤后的上下文信息作为基础继续往下传递,适合在多个模块组件的`Each`组件遍历中使用。 + +同时,您也可以传入`params_mapping`参数,该参数允许用户通过 Javascript 函数的形式自定义过滤上下文信息。 + +而如果不传入任何参数,该组件会阻断`Each`组件的上下文传递,让属性的覆盖失效。 + +## 示例 + + + + + + + +### API + +| Property | Type | Default Value | Description | +| -------------- | ---- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| params_mapping | str | None | This value is a string of a Javascript function, allowing users to customize the filtering of context information via a JavaScript function. | diff --git a/docs/components/base/filter/app.py b/docs/components/base/filter/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/filter/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/filter/demos/basic.py b/docs/components/base/filter/demos/basic.py new file mode 100644 index 00000000..54f66581 --- /dev/null +++ b/docs/components/base/filter/demos/basic.py @@ -0,0 +1,20 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{"value": "Hello"}, {"value": "World"}] + +with gr.Blocks() as demo: + with ms.Application(): + with antd.Space(direction="vertical"): + antd.Divider("Without Filter") + with ms.Each(value=data): + antd.Button() + antd.Divider("With Filter") + with ms.Each(value=data): + with ms.Filter(): + antd.Button("Run") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/filter/demos/use_as_item.py b/docs/components/base/filter/demos/use_as_item.py new file mode 100644 index 00000000..a6fc55c0 --- /dev/null +++ b/docs/components/base/filter/demos/use_as_item.py @@ -0,0 +1,27 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{ + "title": "Card Title", + "btn": { + "value": "Hello" + } +}, { + "title": "Card Title", + "btn": { + "value": "World" + } +}] + +with gr.Blocks() as demo: + with ms.Application(): + with antd.Space(direction="vertical"): + with ms.Each(value=data): + with antd.Card(): + with ms.Filter(as_item="btn"): + antd.Button() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/filter/demos/use_params_mapping.py b/docs/components/base/filter/demos/use_params_mapping.py new file mode 100644 index 00000000..e048ca7d --- /dev/null +++ b/docs/components/base/filter/demos/use_params_mapping.py @@ -0,0 +1,26 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +data = [{ + "title": "Card Title", + "desc": "Hello" +}, { + "title": "Card Title", + "desc": "World" +}] + +with gr.Blocks() as demo: + with ms.Application(): + with antd.Space(direction="vertical"): + with ms.Each(value=data): + with antd.Card(): + with ms.Filter( + params_mapping= + """(props) => ({ value: props.desc, type: props.desc === 'World' ? 'primary' : 'default' })""" + ): + antd.Button() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/fragment/README-zh_CN.md b/docs/components/base/fragment/README-zh_CN.md new file mode 100644 index 00000000..c6018905 --- /dev/null +++ b/docs/components/base/fragment/README-zh_CN.md @@ -0,0 +1,9 @@ +# Fragment + +分段组件,该组件本身不会参与页面布局,它的主要作用是组合多个子组件,并将它们共同包装为`modelscope_studio`组件。 + +> 部分组件的插槽仅支持从`modelscope_studio`中导出的组件,如果您需要插入其他组件,就需要使用`Fragment`组件进行包裹。 + +## 示例 + + diff --git a/docs/components/base/fragment/README.md b/docs/components/base/fragment/README.md new file mode 100644 index 00000000..02bc4b45 --- /dev/null +++ b/docs/components/base/fragment/README.md @@ -0,0 +1,9 @@ +# Fragment + +A fragment component that does not participate in page layout itself. Its main purpose is to combine multiple child components and wrap them together as a `modelscope_studio` component. + +> Some component slots only support components exported from `modelscope_studio`. If you need to insert other components, you'll need to wrap them with the `Fragment` component. + +## Examples + + diff --git a/docs/components/base/fragment/app.py b/docs/components/base/fragment/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/fragment/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/fragment/demos/basic.py b/docs/components/base/fragment/demos/basic.py new file mode 100644 index 00000000..4f82b3ea --- /dev/null +++ b/docs/components/base/fragment/demos/basic.py @@ -0,0 +1,22 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.Divider("Without Fragment") + with antd.Space(): + antd.Button("Antd Button") + antd.Button("Antd Button") + gr.Button("Gradio Button") + antd.Divider("With Fragment") + with antd.Space(): + antd.Button("Antd Button") + antd.Button("Antd Button") + with ms.Fragment(): + gr.Button("Gradio Button") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/slot/README-zh_CN.md b/docs/components/base/slot/README-zh_CN.md new file mode 100644 index 00000000..376a2617 --- /dev/null +++ b/docs/components/base/slot/README-zh_CN.md @@ -0,0 +1,16 @@ +# Slot + +插槽组件,需要与`modelscope_studio`中的其他组件一起使用,可以传入指定插槽名称,从而将该组件插入到目标组件的指定位置。 + +`modelscope_studio`中组件的插槽可以通过获取`SLOTS`属性查看。 + +## 示例 + + + +### API + +| 属性 | 类型 | 默认值 | 描述 | +| -------------- | ---- | ------ | -------------------------------------------------------------------------------------------------------------------------- | +| value | str | None | 插槽名称 | +| params_mapping | str | None | 该值为一个 Javascript 的函数字符串,当对应插槽可以接受参数时,通过此参数可以将参数映射为插槽的上下文,具体请参考`Each`组件 | diff --git a/docs/components/base/slot/README.md b/docs/components/base/slot/README.md new file mode 100644 index 00000000..a8c4fc4b --- /dev/null +++ b/docs/components/base/slot/README.md @@ -0,0 +1,16 @@ +# Slot + +A slot component that needs to be used with other components in `modelscope_studio`. You can pass in a specified slot name to insert this component into the specified position of the target component. + +The slots of components in `modelscope_studio` can be viewed by getting the `SLOTS` property. + +## Examples + + + +### API + +| Attribute | Type | Default Value | Description | +| -------------- | ---- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| value | str | None | Slot name | +| params_mapping | str | None | This value is a string of a Javascript function. When the corresponding slot can accept parameters, the parameters can be mapped to the slot context through this parameter, please refer to the `Each` component for details. | diff --git a/docs/components/base/slot/app.py b/docs/components/base/slot/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/slot/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/slot/demos/basic.py b/docs/components/base/slot/demos/basic.py new file mode 100644 index 00000000..7123e0a3 --- /dev/null +++ b/docs/components/base/slot/demos/basic.py @@ -0,0 +1,23 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Card(): + ms.Div("Card Content") + ms.Div("Card Content") + ms.Div("Card Content") + # slots + with ms.Slot("title"): + ms.Text("Card Title") + with ms.Slot("extra"): + with antd.Button(): + ms.Text("GitHub") + with ms.Slot("icon"): + antd.Icon("GithubOutlined") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/span/README-zh_CN.md b/docs/components/base/span/README-zh_CN.md new file mode 100644 index 00000000..22ed1ed9 --- /dev/null +++ b/docs/components/base/span/README-zh_CN.md @@ -0,0 +1,7 @@ +# Span + +同 HTML 中的`span`标签,用于辅助布局,可以绑定常用的 HTML 事件,具体事件请查看`EVENTS`属性。 + +## 示例 + + diff --git a/docs/components/base/span/README.md b/docs/components/base/span/README.md new file mode 100644 index 00000000..df2c4b44 --- /dev/null +++ b/docs/components/base/span/README.md @@ -0,0 +1,7 @@ +# Span + +Same as the `span` tag in HTML, used for layout assistance, can bind common HTML events, please refer to the `EVENTS` property for specific events. + +## Examples + + diff --git a/docs/components/base/span/app.py b/docs/components/base/span/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/span/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/span/demos/basic.py b/docs/components/base/span/demos/basic.py new file mode 100644 index 00000000..ed722ca8 --- /dev/null +++ b/docs/components/base/span/demos/basic.py @@ -0,0 +1,12 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with ms.Span(elem_style=dict(color="red", fontSize=22)): + ms.Text("Hello Span") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/base/text/README-zh_CN.md b/docs/components/base/text/README-zh_CN.md new file mode 100644 index 00000000..d932c34b --- /dev/null +++ b/docs/components/base/text/README-zh_CN.md @@ -0,0 +1,7 @@ +# Text + +纯文本字符串,类似 HTML 中的`textNode`,用于辅助布局。 + +## 示例 + + diff --git a/docs/components/base/text/README.md b/docs/components/base/text/README.md new file mode 100644 index 00000000..902e8054 --- /dev/null +++ b/docs/components/base/text/README.md @@ -0,0 +1,7 @@ +# Text + +Plain text string, similar to `textNode` in HTML, used for layout assistance. + +## Examples + + diff --git a/docs/components/base/text/app.py b/docs/components/base/text/app.py new file mode 100644 index 00000000..0018b7c1 --- /dev/null +++ b/docs/components/base/text/app.py @@ -0,0 +1,6 @@ +from helper.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/base/text/demos/basic.py b/docs/components/base/text/demos/basic.py new file mode 100644 index 00000000..e6ec5d4e --- /dev/null +++ b/docs/components/base/text/demos/basic.py @@ -0,0 +1,11 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + ms.Text("Hello Text") + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/components/Chatbot/README-zh_CN.md b/docs/components/legacy/Chatbot/README-zh_CN.md similarity index 99% rename from docs/components/Chatbot/README-zh_CN.md rename to docs/components/legacy/Chatbot/README-zh_CN.md index d88ea4a8..307e40d8 100644 --- a/docs/components/Chatbot/README-zh_CN.md +++ b/docs/components/legacy/Chatbot/README-zh_CN.md @@ -30,7 +30,7 @@ ```python import modelscope_studio as mgr -from modelscope_studio.components.Chatbot.llm_thinking_presets import qwen +from modelscope_studio.components.legacy.Chatbot.llm_thinking_presets import qwen # 添加 qwen 解析预设 mgr.Chatbot(llm_thinking_presets=[qwen()]) diff --git a/docs/components/Chatbot/README.md b/docs/components/legacy/Chatbot/README.md similarity index 99% rename from docs/components/Chatbot/README.md rename to docs/components/legacy/Chatbot/README.md index 21d1904d..5aeb32e1 100644 --- a/docs/components/Chatbot/README.md +++ b/docs/components/legacy/Chatbot/README.md @@ -29,7 +29,7 @@ Additionally, to adapt to the toolchain usage of large models, some preset confi ```python import modelscope_studio as mgr -from modelscope_studio.components.Chatbot.llm_thinking_presets import qwen +from modelscope_studio.components.legacy.Chatbot.llm_thinking_presets import qwen # Add qwen preset mgr.Chatbot(llm_thinking_presets=[qwen()]) diff --git a/docs/components/legacy/Chatbot/app.py b/docs/components/legacy/Chatbot/app.py new file mode 100644 index 00000000..ea841f78 --- /dev/null +++ b/docs/components/legacy/Chatbot/app.py @@ -0,0 +1,6 @@ +from components.legacy.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/Chatbot/demos/accordion.py b/docs/components/legacy/Chatbot/demos/accordion.py similarity index 93% rename from docs/components/Chatbot/demos/accordion.py rename to docs/components/legacy/Chatbot/demos/accordion.py index 2f6430bd..ed3ca9e2 100644 --- a/docs/components/Chatbot/demos/accordion.py +++ b/docs/components/legacy/Chatbot/demos/accordion.py @@ -3,7 +3,8 @@ import gradio as gr import modelscope_studio as mgr -from modelscope_studio.components.Chatbot.llm_thinking_presets import qwen +from modelscope_studio.components.legacy.Chatbot.llm_thinking_presets import \ + qwen def resolve_assets(relative_path): diff --git a/docs/components/Chatbot/demos/basic.py b/docs/components/legacy/Chatbot/demos/basic.py similarity index 100% rename from docs/components/Chatbot/demos/basic.py rename to docs/components/legacy/Chatbot/demos/basic.py diff --git a/docs/components/Chatbot/demos/chart.py b/docs/components/legacy/Chatbot/demos/chart.py similarity index 100% rename from docs/components/Chatbot/demos/chart.py rename to docs/components/legacy/Chatbot/demos/chart.py diff --git a/docs/components/Chatbot/demos/message_config.py b/docs/components/legacy/Chatbot/demos/message_config.py similarity index 100% rename from docs/components/Chatbot/demos/message_config.py rename to docs/components/legacy/Chatbot/demos/message_config.py diff --git a/docs/components/Chatbot/demos/multi_bots.py b/docs/components/legacy/Chatbot/demos/multi_bots.py similarity index 100% rename from docs/components/Chatbot/demos/multi_bots.py rename to docs/components/legacy/Chatbot/demos/multi_bots.py diff --git a/docs/components/Chatbot/demos/multimodal.py b/docs/components/legacy/Chatbot/demos/multimodal.py similarity index 100% rename from docs/components/Chatbot/demos/multimodal.py rename to docs/components/legacy/Chatbot/demos/multimodal.py diff --git a/docs/components/Chatbot/demos/select-box.py b/docs/components/legacy/Chatbot/demos/select-box.py similarity index 88% rename from docs/components/Chatbot/demos/select-box.py rename to docs/components/legacy/Chatbot/demos/select-box.py index 6035ba30..89b7b6f7 100644 --- a/docs/components/Chatbot/demos/select-box.py +++ b/docs/components/legacy/Chatbot/demos/select-box.py @@ -11,9 +11,9 @@ None, f""" Single Select: -Multiple Select: +Multiple Select: -Vertical Direction: +Vertical Direction: diff --git a/docs/components/Docs.py b/docs/components/legacy/Docs.py similarity index 97% rename from docs/components/Docs.py rename to docs/components/legacy/Docs.py index 71d863bb..ca095155 100644 --- a/docs/components/Docs.py +++ b/docs/components/legacy/Docs.py @@ -3,6 +3,7 @@ from typing import Callable import gradio as gr +from helper.env import is_modelscope_studio import modelscope_studio as mgr @@ -62,9 +63,6 @@ def get_demo_modules(file_path: str): return demo_modules -is_modelscope_studio = os.getenv('MODELSCOPE_ENVIRONMENT') == 'studio' - - class Docs: def __init__(self, file_path: str, markdown_files: list = None): @@ -153,7 +151,7 @@ def render_markdown(self, def render(self, components_tabs=None): def tab_link_click(data: gr.EventData): - tab: str = data._data["value"].get("tab", '') + tab: str = data._data.get("value", {}).get("tab", '') component_tab: str = data._data["value"].get("component_tab", '') if tab and tabs: return {tabs: gr.update(selected=tab)} diff --git a/docs/components/Flow/README-zh_CN.md b/docs/components/legacy/Flow/README-zh_CN.md similarity index 100% rename from docs/components/Flow/README-zh_CN.md rename to docs/components/legacy/Flow/README-zh_CN.md diff --git a/docs/components/Flow/README.md b/docs/components/legacy/Flow/README.md similarity index 100% rename from docs/components/Flow/README.md rename to docs/components/legacy/Flow/README.md diff --git a/docs/components/legacy/Flow/app.py b/docs/components/legacy/Flow/app.py new file mode 100644 index 00000000..ea841f78 --- /dev/null +++ b/docs/components/legacy/Flow/app.py @@ -0,0 +1,6 @@ +from components.legacy.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/Flow/define_schema-zh_CN.md b/docs/components/legacy/Flow/define_schema-zh_CN.md similarity index 100% rename from docs/components/Flow/define_schema-zh_CN.md rename to docs/components/legacy/Flow/define_schema-zh_CN.md diff --git a/docs/components/Flow/define_schema.md b/docs/components/legacy/Flow/define_schema.md similarity index 100% rename from docs/components/Flow/define_schema.md rename to docs/components/legacy/Flow/define_schema.md diff --git a/docs/components/Flow/demos/basic.py b/docs/components/legacy/Flow/demos/basic.py similarity index 92% rename from docs/components/Flow/demos/basic.py rename to docs/components/legacy/Flow/demos/basic.py index 920e7fc5..3505892f 100644 --- a/docs/components/Flow/demos/basic.py +++ b/docs/components/legacy/Flow/demos/basic.py @@ -4,7 +4,7 @@ import gradio as gr import modelscope_studio as mgr -from modelscope_studio.components.Flow import Edge, Node +from modelscope_studio.components.legacy.Flow import Edge, Node with open((os.path.join(os.path.dirname(__file__), "../schema/agents_schema.json"))) as f: diff --git a/docs/components/Flow/demos/component_options.py b/docs/components/legacy/Flow/demos/component_options.py similarity index 96% rename from docs/components/Flow/demos/component_options.py rename to docs/components/legacy/Flow/demos/component_options.py index b080470f..6182594f 100644 --- a/docs/components/Flow/demos/component_options.py +++ b/docs/components/legacy/Flow/demos/component_options.py @@ -4,7 +4,8 @@ import gradio as gr import modelscope_studio as mgr -from modelscope_studio.components.Flow import BackgroundPropsDict, Edge, Node +from modelscope_studio.components.legacy.Flow import (BackgroundPropsDict, + Edge, Node) with open((os.path.join(os.path.dirname(__file__), "../schema/agents_schema.json"))) as f: diff --git a/docs/components/Flow/demos/custom_node_type.py b/docs/components/legacy/Flow/demos/custom_node_type.py similarity index 87% rename from docs/components/Flow/demos/custom_node_type.py rename to docs/components/legacy/Flow/demos/custom_node_type.py index e40d3e40..c3f59e74 100644 --- a/docs/components/Flow/demos/custom_node_type.py +++ b/docs/components/legacy/Flow/demos/custom_node_type.py @@ -1,9 +1,9 @@ import gradio as gr import modelscope_studio as mgr -from modelscope_studio.components.Flow import (FlowSchemaDict, Node, - NodeSchemaAttributeDict, - NodeSchemaDict) +from modelscope_studio.components.legacy.Flow import (FlowSchemaDict, Node, + NodeSchemaAttributeDict, + NodeSchemaDict) def on_data_change(_flow): diff --git a/docs/components/Flow/schema/agents_schema.json b/docs/components/legacy/Flow/schema/agents_schema.json similarity index 100% rename from docs/components/Flow/schema/agents_schema.json rename to docs/components/legacy/Flow/schema/agents_schema.json diff --git a/docs/components/Flow/schema/agents_schema.py b/docs/components/legacy/Flow/schema/agents_schema.py similarity index 97% rename from docs/components/Flow/schema/agents_schema.py rename to docs/components/legacy/Flow/schema/agents_schema.py index 9cc1f6c8..d80f7848 100644 --- a/docs/components/Flow/schema/agents_schema.py +++ b/docs/components/legacy/Flow/schema/agents_schema.py @@ -1,6 +1,6 @@ import os -from modelscope_studio.components.Flow import ( +from modelscope_studio.components.legacy.Flow import ( FlowSchemaDict, NodeSchemaAttributeDict, NodeSchemaAttributeListDict, NodeSchemaAttributeRequiredDict, NodeSchemaDict, NodeSchemaPortsDict, NodeSchemaTemplateDict) diff --git a/docs/components/Lifecycle/README-zh_CN.md b/docs/components/legacy/Lifecycle/README-zh_CN.md similarity index 100% rename from docs/components/Lifecycle/README-zh_CN.md rename to docs/components/legacy/Lifecycle/README-zh_CN.md diff --git a/docs/components/Lifecycle/README.md b/docs/components/legacy/Lifecycle/README.md similarity index 100% rename from docs/components/Lifecycle/README.md rename to docs/components/legacy/Lifecycle/README.md diff --git a/docs/components/legacy/Lifecycle/app.py b/docs/components/legacy/Lifecycle/app.py new file mode 100644 index 00000000..ea841f78 --- /dev/null +++ b/docs/components/legacy/Lifecycle/app.py @@ -0,0 +1,6 @@ +from components.legacy.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/Lifecycle/demos/basic.py b/docs/components/legacy/Lifecycle/demos/basic.py similarity index 100% rename from docs/components/Lifecycle/demos/basic.py rename to docs/components/legacy/Lifecycle/demos/basic.py diff --git a/docs/components/Lifecycle/demos/language_adaptation.py b/docs/components/legacy/Lifecycle/demos/language_adaptation.py similarity index 100% rename from docs/components/Lifecycle/demos/language_adaptation.py rename to docs/components/legacy/Lifecycle/demos/language_adaptation.py diff --git a/docs/components/Lifecycle/demos/theme_adaptation.py b/docs/components/legacy/Lifecycle/demos/theme_adaptation.py similarity index 100% rename from docs/components/Lifecycle/demos/theme_adaptation.py rename to docs/components/legacy/Lifecycle/demos/theme_adaptation.py diff --git a/docs/components/Markdown/README-zh_CN.md b/docs/components/legacy/Markdown/README-zh_CN.md similarity index 100% rename from docs/components/Markdown/README-zh_CN.md rename to docs/components/legacy/Markdown/README-zh_CN.md diff --git a/docs/components/Markdown/README.md b/docs/components/legacy/Markdown/README.md similarity index 100% rename from docs/components/Markdown/README.md rename to docs/components/legacy/Markdown/README.md diff --git a/docs/components/Markdown/app.py b/docs/components/legacy/Markdown/app.py similarity index 90% rename from docs/components/Markdown/app.py rename to docs/components/legacy/Markdown/app.py index 4e59b254..7b991a9d 100644 --- a/docs/components/Markdown/app.py +++ b/docs/components/legacy/Markdown/app.py @@ -1,6 +1,6 @@ import os -from components.Docs import Docs +from components.legacy.Docs import Docs def resolve(relative_path: str): diff --git a/docs/components/Markdown/custom_tags/accordion-zh_CN.md b/docs/components/legacy/Markdown/custom_tags/accordion-zh_CN.md similarity index 100% rename from docs/components/Markdown/custom_tags/accordion-zh_CN.md rename to docs/components/legacy/Markdown/custom_tags/accordion-zh_CN.md diff --git a/docs/components/Markdown/custom_tags/accordion.md b/docs/components/legacy/Markdown/custom_tags/accordion.md similarity index 100% rename from docs/components/Markdown/custom_tags/accordion.md rename to docs/components/legacy/Markdown/custom_tags/accordion.md diff --git a/docs/components/Markdown/custom_tags/chart-zh_CN.md b/docs/components/legacy/Markdown/custom_tags/chart-zh_CN.md similarity index 100% rename from docs/components/Markdown/custom_tags/chart-zh_CN.md rename to docs/components/legacy/Markdown/custom_tags/chart-zh_CN.md diff --git a/docs/components/Markdown/custom_tags/chart.md b/docs/components/legacy/Markdown/custom_tags/chart.md similarity index 100% rename from docs/components/Markdown/custom_tags/chart.md rename to docs/components/legacy/Markdown/custom_tags/chart.md diff --git a/docs/components/Markdown/custom_tags/select-box-zh_CN.md b/docs/components/legacy/Markdown/custom_tags/select-box-zh_CN.md similarity index 100% rename from docs/components/Markdown/custom_tags/select-box-zh_CN.md rename to docs/components/legacy/Markdown/custom_tags/select-box-zh_CN.md diff --git a/docs/components/Markdown/custom_tags/select-box.md b/docs/components/legacy/Markdown/custom_tags/select-box.md similarity index 100% rename from docs/components/Markdown/custom_tags/select-box.md rename to docs/components/legacy/Markdown/custom_tags/select-box.md diff --git a/docs/components/Markdown/demos/accordion.py b/docs/components/legacy/Markdown/demos/accordion.py similarity index 89% rename from docs/components/Markdown/demos/accordion.py rename to docs/components/legacy/Markdown/demos/accordion.py index 924b3548..dc92779e 100644 --- a/docs/components/Markdown/demos/accordion.py +++ b/docs/components/legacy/Markdown/demos/accordion.py @@ -12,7 +12,7 @@ -Use `::accordion-title` to support markdown: +Use `::accordion-title` to support markdown: diff --git a/docs/components/Markdown/demos/basic.py b/docs/components/legacy/Markdown/demos/basic.py similarity index 100% rename from docs/components/Markdown/demos/basic.py rename to docs/components/legacy/Markdown/demos/basic.py diff --git a/docs/components/Markdown/demos/chart.py b/docs/components/legacy/Markdown/demos/chart.py similarity index 100% rename from docs/components/Markdown/demos/chart.py rename to docs/components/legacy/Markdown/demos/chart.py diff --git a/docs/components/Markdown/demos/custom-tag.py b/docs/components/legacy/Markdown/demos/custom-tag.py similarity index 100% rename from docs/components/Markdown/demos/custom-tag.py rename to docs/components/legacy/Markdown/demos/custom-tag.py diff --git a/docs/components/Markdown/demos/custom-tag2.py b/docs/components/legacy/Markdown/demos/custom-tag2.py similarity index 100% rename from docs/components/Markdown/demos/custom-tag2.py rename to docs/components/legacy/Markdown/demos/custom-tag2.py diff --git a/docs/components/Markdown/demos/custom-tag3.py b/docs/components/legacy/Markdown/demos/custom-tag3.py similarity index 100% rename from docs/components/Markdown/demos/custom-tag3.py rename to docs/components/legacy/Markdown/demos/custom-tag3.py diff --git a/docs/components/Markdown/demos/custom-tag4.py b/docs/components/legacy/Markdown/demos/custom-tag4.py similarity index 100% rename from docs/components/Markdown/demos/custom-tag4.py rename to docs/components/legacy/Markdown/demos/custom-tag4.py diff --git a/docs/components/Markdown/demos/custom_tags/accordion/accordion-title.py b/docs/components/legacy/Markdown/demos/custom_tags/accordion/accordion-title.py similarity index 100% rename from docs/components/Markdown/demos/custom_tags/accordion/accordion-title.py rename to docs/components/legacy/Markdown/demos/custom_tags/accordion/accordion-title.py diff --git a/docs/components/Markdown/demos/custom_tags/accordion/basic.py b/docs/components/legacy/Markdown/demos/custom_tags/accordion/basic.py similarity index 100% rename from docs/components/Markdown/demos/custom_tags/accordion/basic.py rename to docs/components/legacy/Markdown/demos/custom_tags/accordion/basic.py diff --git a/docs/components/Markdown/demos/custom_tags/chart/basic.py b/docs/components/legacy/Markdown/demos/custom_tags/chart/basic.py similarity index 100% rename from docs/components/Markdown/demos/custom_tags/chart/basic.py rename to docs/components/legacy/Markdown/demos/custom_tags/chart/basic.py diff --git a/docs/components/Markdown/demos/custom_tags/select-box/basic.py b/docs/components/legacy/Markdown/demos/custom_tags/select-box/basic.py similarity index 75% rename from docs/components/Markdown/demos/custom_tags/select-box/basic.py rename to docs/components/legacy/Markdown/demos/custom_tags/select-box/basic.py index eb03c2fe..faa90914 100644 --- a/docs/components/Markdown/demos/custom_tags/select-box/basic.py +++ b/docs/components/legacy/Markdown/demos/custom_tags/select-box/basic.py @@ -10,9 +10,9 @@ mgr.Markdown( f"""Single Select: -Multiple Select: +Multiple Select: -Vertical Direction: +Vertical Direction: """, ) diff --git a/docs/components/Markdown/demos/custom_tags/select-box/card_shape.py b/docs/components/legacy/Markdown/demos/custom_tags/select-box/card_shape.py similarity index 95% rename from docs/components/Markdown/demos/custom_tags/select-box/card_shape.py rename to docs/components/legacy/Markdown/demos/custom_tags/select-box/card_shape.py index b2813b85..6142f959 100644 --- a/docs/components/Markdown/demos/custom_tags/select-box/card_shape.py +++ b/docs/components/legacy/Markdown/demos/custom_tags/select-box/card_shape.py @@ -20,11 +20,11 @@ mgr.Markdown( f""" -Custom Columns: +Custom Columns: -Vertical Direction: +Vertical Direction: """) diff --git a/docs/components/Markdown/demos/custom_tags/select-box/card_shape_width_auto.py b/docs/components/legacy/Markdown/demos/custom_tags/select-box/card_shape_width_auto.py similarity index 100% rename from docs/components/Markdown/demos/custom_tags/select-box/card_shape_width_auto.py rename to docs/components/legacy/Markdown/demos/custom_tags/select-box/card_shape_width_auto.py diff --git a/docs/components/Markdown/demos/custom_tags/select-box/python_events.py b/docs/components/legacy/Markdown/demos/custom_tags/select-box/python_events.py similarity index 100% rename from docs/components/Markdown/demos/custom_tags/select-box/python_events.py rename to docs/components/legacy/Markdown/demos/custom_tags/select-box/python_events.py diff --git a/docs/components/Markdown/demos/multimodal.py b/docs/components/legacy/Markdown/demos/multimodal.py similarity index 100% rename from docs/components/Markdown/demos/multimodal.py rename to docs/components/legacy/Markdown/demos/multimodal.py diff --git a/docs/components/Markdown/demos/select-box.py b/docs/components/legacy/Markdown/demos/select-box.py similarity index 85% rename from docs/components/Markdown/demos/select-box.py rename to docs/components/legacy/Markdown/demos/select-box.py index 9b69862b..5aca51aa 100644 --- a/docs/components/Markdown/demos/select-box.py +++ b/docs/components/legacy/Markdown/demos/select-box.py @@ -11,9 +11,9 @@ mgr.Markdown(f""" Single Select: -Multiple Select: +Multiple Select: -Vertical Direction: +Vertical Direction: diff --git a/docs/components/MultimodalInput/README-zh_CN.md b/docs/components/legacy/MultimodalInput/README-zh_CN.md similarity index 100% rename from docs/components/MultimodalInput/README-zh_CN.md rename to docs/components/legacy/MultimodalInput/README-zh_CN.md diff --git a/docs/components/MultimodalInput/README.md b/docs/components/legacy/MultimodalInput/README.md similarity index 100% rename from docs/components/MultimodalInput/README.md rename to docs/components/legacy/MultimodalInput/README.md diff --git a/docs/components/legacy/MultimodalInput/app.py b/docs/components/legacy/MultimodalInput/app.py new file mode 100644 index 00000000..ea841f78 --- /dev/null +++ b/docs/components/legacy/MultimodalInput/app.py @@ -0,0 +1,6 @@ +from components.legacy.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/MultimodalInput/demos/basic.py b/docs/components/legacy/MultimodalInput/demos/basic.py similarity index 100% rename from docs/components/MultimodalInput/demos/basic.py rename to docs/components/legacy/MultimodalInput/demos/basic.py diff --git a/docs/components/MultimodalInput/demos/config_buttons.py b/docs/components/legacy/MultimodalInput/demos/config_buttons.py similarity index 100% rename from docs/components/MultimodalInput/demos/config_buttons.py rename to docs/components/legacy/MultimodalInput/demos/config_buttons.py diff --git a/docs/components/MultimodalInput/demos/upload_sources.py b/docs/components/legacy/MultimodalInput/demos/upload_sources.py similarity index 100% rename from docs/components/MultimodalInput/demos/upload_sources.py rename to docs/components/legacy/MultimodalInput/demos/upload_sources.py diff --git a/docs/components/MultimodalInput/demos/with_chatbot.py b/docs/components/legacy/MultimodalInput/demos/with_chatbot.py similarity index 100% rename from docs/components/MultimodalInput/demos/with_chatbot.py rename to docs/components/legacy/MultimodalInput/demos/with_chatbot.py diff --git a/docs/components/legacy/README-zh_CN.md b/docs/components/legacy/README-zh_CN.md new file mode 100644 index 00000000..578a1739 --- /dev/null +++ b/docs/components/legacy/README-zh_CN.md @@ -0,0 +1,33 @@ +

ModelScope Studio

+ +

+ + + ✖️ + + +

+ +

+GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space + +`modelscope_studio` 是一套基于 gradio 4.x 的扩展组件库,致力于服务于 ModelScope 创空间中对于 gradio 应用的各类扩展需求,目前主要聚集在对话场景增强、多模态场景以及一些其他垂直场景支持。 + +## Install + +```sh +pip install modelscope_studio +``` + +## API + +- load + +## Components + +- Chatbot +- MultimodalInput +- Markdown +- WaterfallGallery +- Lifecycle +- Flow diff --git a/docs/components/legacy/README.md b/docs/components/legacy/README.md new file mode 100644 index 00000000..821b96fa --- /dev/null +++ b/docs/components/legacy/README.md @@ -0,0 +1,33 @@ +

ModelScope Studio

+ +

+ + + ✖️ + + +

+ +

+GitHub | 🤖 ModelScope Studio | 🤗 Hugging Face Space + +`modelscope_studio` is a set of extension component libraries based on gradio 4.x, dedicated to serving the various extension needs of gradio applications within the ModelScope Studio. It mainly focuses on enhancing conversational scenarios, supporting multimodal contexts, and providing assistance for various other specialized scenarios. + +## Install + +```sh +pip install modelscope_studio +``` + +## API + +- load + +## Components + +- Chatbot +- MultimodalInput +- Markdown +- Lifecycle +- WaterfallGallery +- Flow diff --git a/docs/components/WaterfallGallery/README-zh_CN.md b/docs/components/legacy/WaterfallGallery/README-zh_CN.md similarity index 100% rename from docs/components/WaterfallGallery/README-zh_CN.md rename to docs/components/legacy/WaterfallGallery/README-zh_CN.md diff --git a/docs/components/WaterfallGallery/README.md b/docs/components/legacy/WaterfallGallery/README.md similarity index 100% rename from docs/components/WaterfallGallery/README.md rename to docs/components/legacy/WaterfallGallery/README.md diff --git a/docs/components/legacy/WaterfallGallery/app.py b/docs/components/legacy/WaterfallGallery/app.py new file mode 100644 index 00000000..ea841f78 --- /dev/null +++ b/docs/components/legacy/WaterfallGallery/app.py @@ -0,0 +1,6 @@ +from components.legacy.Docs import Docs + +docs = Docs(__file__) + +if __name__ == "__main__": + docs.render().queue().launch() diff --git a/docs/components/WaterfallGallery/demos/basic.py b/docs/components/legacy/WaterfallGallery/demos/basic.py similarity index 100% rename from docs/components/WaterfallGallery/demos/basic.py rename to docs/components/legacy/WaterfallGallery/demos/basic.py diff --git a/docs/components/WaterfallGallery/demos/like_click_feedback.py b/docs/components/legacy/WaterfallGallery/demos/like_click_feedback.py similarity index 100% rename from docs/components/WaterfallGallery/demos/like_click_feedback.py rename to docs/components/legacy/WaterfallGallery/demos/like_click_feedback.py diff --git a/docs/components/WaterfallGallery/demos/load_more.py b/docs/components/legacy/WaterfallGallery/demos/load_more.py similarity index 100% rename from docs/components/WaterfallGallery/demos/load_more.py rename to docs/components/legacy/WaterfallGallery/demos/load_more.py diff --git a/docs/components/WaterfallGallery/demos/responsive_columns.py b/docs/components/legacy/WaterfallGallery/demos/responsive_columns.py similarity index 100% rename from docs/components/WaterfallGallery/demos/responsive_columns.py rename to docs/components/legacy/WaterfallGallery/demos/responsive_columns.py diff --git a/docs/components/legacy/app.py b/docs/components/legacy/app.py new file mode 100644 index 00000000..b379d049 --- /dev/null +++ b/docs/components/legacy/app.py @@ -0,0 +1,35 @@ +import gradio as gr +from api.app import docs as api_docs +from components.legacy.Chatbot.app import docs as chatbot_docs +from components.legacy.Docs import Docs +from components.legacy.Flow.app import docs as flow_docs +from components.legacy.Lifecycle.app import docs as lifecycle_docs +from components.legacy.Markdown.app import docs as markdown_docs +from components.legacy.MultimodalInput.app import docs as multimodel_input_docs +from components.legacy.WaterfallGallery.app import \ + docs as waterfall_gallery_docs + +import modelscope_studio.components.base as ms + +readme_docs = Docs(__file__) + +docs = [ + ["Quick Start", readme_docs], + ["API", api_docs], + ["Chatbot", chatbot_docs], + ["MultimodalInput", multimodel_input_docs], + ["Markdown", markdown_docs], + ["Lifecycle", lifecycle_docs], + ["WaterfallGallery", waterfall_gallery_docs], + ["Flow", flow_docs], +] + +with gr.Blocks() as legacy_demo: + with ms.Application(): + with gr.Tabs() as components_tabs: + for doc in docs: + with gr.TabItem(doc[0], id=doc[0]): + doc[1].render(components_tabs) + +if __name__ == "__main__": + legacy_demo.launch() diff --git a/docs/components/parse_markdown.py b/docs/components/legacy/parse_markdown.py similarity index 100% rename from docs/components/parse_markdown.py rename to docs/components/legacy/parse_markdown.py diff --git a/docs/components/resources/audio.wav b/docs/components/legacy/resources/audio.wav similarity index 100% rename from docs/components/resources/audio.wav rename to docs/components/legacy/resources/audio.wav diff --git a/docs/components/resources/bot.jpeg b/docs/components/legacy/resources/bot.jpeg similarity index 100% rename from docs/components/resources/bot.jpeg rename to docs/components/legacy/resources/bot.jpeg diff --git a/docs/components/resources/custom_components/custom_select.js b/docs/components/legacy/resources/custom_components/custom_select.js similarity index 100% rename from docs/components/resources/custom_components/custom_select.js rename to docs/components/legacy/resources/custom_components/custom_select.js diff --git a/docs/components/resources/dog.mp4 b/docs/components/legacy/resources/dog.mp4 similarity index 100% rename from docs/components/resources/dog.mp4 rename to docs/components/legacy/resources/dog.mp4 diff --git a/docs/components/resources/image-bot.jpeg b/docs/components/legacy/resources/image-bot.jpeg similarity index 100% rename from docs/components/resources/image-bot.jpeg rename to docs/components/legacy/resources/image-bot.jpeg diff --git a/docs/components/resources/modelscope.svg b/docs/components/legacy/resources/modelscope.svg similarity index 100% rename from docs/components/resources/modelscope.svg rename to docs/components/legacy/resources/modelscope.svg diff --git a/docs/components/resources/music-bot.jpeg b/docs/components/legacy/resources/music-bot.jpeg similarity index 100% rename from docs/components/resources/music-bot.jpeg rename to docs/components/legacy/resources/music-bot.jpeg diff --git a/docs/components/resources/screen.jpeg b/docs/components/legacy/resources/screen.jpeg similarity index 100% rename from docs/components/resources/screen.jpeg rename to docs/components/legacy/resources/screen.jpeg diff --git a/docs/components/resources/user.jpeg b/docs/components/legacy/resources/user.jpeg similarity index 100% rename from docs/components/resources/user.jpeg rename to docs/components/legacy/resources/user.jpeg diff --git a/docs/components/tab-link.js b/docs/components/legacy/tab-link.js similarity index 100% rename from docs/components/tab-link.js rename to docs/components/legacy/tab-link.js diff --git a/docs/demos/example.py b/docs/demos/example.py new file mode 100644 index 00000000..a5551f18 --- /dev/null +++ b/docs/demos/example.py @@ -0,0 +1,12 @@ +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + +with gr.Blocks() as demo: + with ms.Application(): + with antd.ConfigProvider(): + antd.DatePicker() + +if __name__ == "__main__": + demo.queue().launch() diff --git a/docs/helper/Docs.py b/docs/helper/Docs.py new file mode 100644 index 00000000..c072332e --- /dev/null +++ b/docs/helper/Docs.py @@ -0,0 +1,128 @@ +import os +import re + +import gradio as gr + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms +import modelscope_studio.components.legacy as mgr + +from .env import is_modelscope_studio +from .parse_markdown import parse_markdown + + +class Docs: + + def __init__(self, file_path: str): + self.file_path = file_path + # default current directory + self.markdown_files = [ + filename for filename in os.listdir(os.path.dirname(file_path)) + if filename.endswith(".md") + ] + self.demo_modules = self._get_demo_modules() + if is_modelscope_studio: + self.markdown_files = list( + filter( + lambda x: x.endswith("-zh_CN.md") or + (f"{'.'.join(x.split('.')[:-1])}-zh_CN.md" not in self. + markdown_files), self.markdown_files)) + else: + self.markdown_files = list( + filter(lambda x: not x.endswith("-zh_CN.md"), + self.markdown_files)) + + def _remove_formatter(self, markdown_text): + pattern = r"^ *---[\s\S]*?---" + replaced_text = re.sub(pattern, "", markdown_text) + return replaced_text + + def _list_demos(self, dir_path: str, prefix=''): + result = [] + if (not os.path.isdir(dir_path)): + return result + for name in os.listdir(dir_path): + path = os.path.join(dir_path, name) + + if os.path.isfile(path): + result.append(prefix + name) + elif os.path.isdir(path): + sub_prefix = prefix + name + '/' + result.extend(self._list_demos(path, sub_prefix)) + + return result + + def _get_demo_modules(self): + import importlib.util + + demos = [ + demo for demo in self._list_demos( + os.path.join(os.path.dirname(self.file_path), "demos")) + if demo.endswith(".py") and not demo.startswith("__") + ] + demo_modules = {} + for demo in demos: + demo_name = demo.split(".")[0] + spec = importlib.util.spec_from_file_location( + "demo", + os.path.join(os.path.dirname(self.file_path), "demos", demo)) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + demo_modules[demo_name] = module + return demo_modules + + def _read_file(self, relative_path: str): + with open(os.path.join(os.path.dirname(self.file_path), relative_path), + "r") as f: + return f.read() + + def _render_demo(self, + demo_name, + prefix='', + suffix='', + fixed=False, + title=''): + content = self._read_file(f"./demos/{demo_name}.py") + module = self.demo_modules[demo_name] + with antd.Card(styles=dict(body=dict(padding=10)), + elem_style=dict(margin="8px 0")): + if title: + with ms.Slot("title"): + ms.Text(title) + with antd.Row(align="stretch", wrap=False): + with antd.Col(span=10): + with antd.Flex(elem_style=dict(height='100%')): + prefix = prefix + "\n" if prefix else "" + suffix = "\n" + suffix if suffix else "" + gr.Markdown(f"""{prefix}```python +{content} +```{suffix}""", + header_links=True) + antd.Divider(type="vertical", + variant="dashed", + elem_style=dict(height='100%')) + with antd.Col( + span=14, + elem_style=dict( + width='100%', + transform="translate(0, 0)" if fixed else None)): + module.demo.render() + + def _render_markdown(self, markdown_file): + items = parse_markdown(self._remove_formatter( + self._read_file(markdown_file)), + read_file=self._read_file) + for item in items: + if item["type"] == "text": + mgr.Markdown(item["value"], header_links=True, preview=False) + elif item["type"] == "demo": + self._render_demo(item["name"], + prefix=item["prefix"], + suffix=item["suffix"], + fixed=item["fixed"], + title=item["title"]) + + def render(self): + with gr.Blocks() as demo: + self._render_markdown(self.markdown_files[0]) + return demo diff --git a/docs/helper/Site.py b/docs/helper/Site.py new file mode 100644 index 00000000..2b8bda34 --- /dev/null +++ b/docs/helper/Site.py @@ -0,0 +1,197 @@ +from typing import Callable + +import gradio as gr +from gradio.components.base import Component + +import modelscope_studio.components.antd as antd +import modelscope_studio.components.base as ms + + +class Site: + + def __init__(self, + tabs: list, + docs: dict, + default_active_tab: str | None = None, + logo: Component | Callable | None = None): + self.tabs = tabs + self.docs = docs + self.default_active_tab = default_active_tab + self.default_active_tab_item = next( + (item for item in self.tabs if item["key"] == default_active_tab), + {}) + self.logo = logo + + def _render_docs(self, items: list, tab: dict): + docs_tabs = [] + for item in items: + if "children" in item: + docs_tabs.extend(self._render_docs(item["children"], tab)) + elif "key" in item: + key = item["key"].replace("-", "_") + tab_docs = self.docs.get(tab["key"], {}) + if key in tab_docs: + with antd.Tabs.Item( + key=key, + visible=True if tab.get("default_active_key") + == key else False) as docs_tab: + docs_tabs.append(docs_tab) + tab_docs[key].render() + return docs_tabs + + def render(self): + + def on_tab_menu_select(e: gr.EventData): + selected_tab = e._data["payload"][0]["key"] + item = next( + (item for item in tab_components if item.key == selected_tab), + tab_components[0]) + + return { + tab_menu: gr.update(selected_keys=[selected_tab]), + tabs: gr.update(active_key=selected_tab), + item: gr.update(visible=True) + } + + with gr.Blocks(css=""" +.gradio-container { + max-width: 100% !important; + padding: 0 !important; +} +""") as demo: + with ms.Application(): + with antd.ConfigProvider(): + with antd.Layout(elem_style=dict( + height= + "calc(100vh - var(--size-4) - var(--body-text-size) * 1.5)" + )): + with antd.Layout.Header(elem_style=dict( + padding='0 16px', + backgroundColor= + "var(--ms-gr-ant-color-bg-container)")): + with antd.Flex(align='center', gap=8): + if self.logo: + with antd.Flex( + justify="center", + align='center', + elem_style=dict(height='100%')): + if callable(self.logo): + self.logo() + else: + self.logo.render() + tab_menu = antd.Menu( + mode="horizontal", + selected_keys=[self.default_active_tab], + items=self.tabs, + elem_style=dict(flex=1, minWidth=0)) + + with antd.Tabs( + active_key=self.default_active_tab, + render_tab_bar="() => null", + ) as tabs: + tab_components = [] + for tab in self.tabs: + with antd.Tabs.Item( + key=tab["key"], + elem_style=dict( + height= + "calc(100vh - var(--size-4) - var(--body-text-size) * 1.5 - 64px)" + ), + visible=True if self.default_active_tab + == tab["key"] else False) as tab_item: + tab_components.append(tab_item) + if "content" in tab: + # custom render + with ms.Div(elem_style=dict( + maxHeight="100%", + overflow="auto")): + tab["content"].render() + elif "menus" in tab: + # menus render + with antd.Layout(elem_style=dict( + height='100%')): + with antd.Layout.Sider( + elem_style=dict( + height= + "calc(100vh - 64px)", + overflow="auto", + position="relative", + backgroundColor= + "var(--ms-gr-ant-color-bg-container)" + )): + sider_menu = antd.Menu( + selected_keys=[ + tab.get( + "default_active_key", + None) + ], + mode="inline", + items=tab.get("menus", [])) + if "extra_menu_footer" in tab: + if callable(tab[ + "extra_menu_footer"] + ): + tab["extra_menu_footer"]( + ) + else: + tab["extra_menu_footer"].render( + ) + + with antd.Layout(elem_style=dict( + width=0)): + with antd.Layout.Content( + elem_style=dict( + padding='12px 28px', + overflow="auto")): + with antd.Tabs( + active_key=tab.get( + "default_active_key", + None), + render_tab_bar= + "() => null" + ) as layout_content_tabs: + docs_tabs = self._render_docs( + tab.get( + "menus", []), + tab) + + def on_layout_menu_select_wrapper( + tabs, sider_menu, + layout_content_tabs): + + def on_layout_menu_select( + e: gr.EventData): + selected_menu = e._data["payload"][ + 0]["key"] + + item = next( + (item for item in tabs + if item.key == selected_menu), + tabs[0]) + + return { + sider_menu: + gr.update(selected_keys=[ + selected_menu + ]), + layout_content_tabs: + gr.update( + active_key=selected_menu), + item: + gr.update(visible=True) + } + + return on_layout_menu_select + + sider_menu.select( + fn=on_layout_menu_select_wrapper( + docs_tabs, sider_menu, + layout_content_tabs), + outputs=[ + sider_menu, layout_content_tabs, + *docs_tabs + ]) + tab_menu.select( + fn=on_tab_menu_select, + outputs=[tab_menu, tabs, *tab_components]) + return demo diff --git a/docs/helper/env.py b/docs/helper/env.py new file mode 100644 index 00000000..f8bcd124 --- /dev/null +++ b/docs/helper/env.py @@ -0,0 +1,3 @@ +import os + +is_modelscope_studio = os.getenv('MODELSCOPE_ENVIRONMENT') == 'studio' diff --git a/docs/helper/parse_markdown.py b/docs/helper/parse_markdown.py new file mode 100644 index 00000000..73f58104 --- /dev/null +++ b/docs/helper/parse_markdown.py @@ -0,0 +1,81 @@ +from html.parser import HTMLParser + + +def default_read_file(path): + with open(path, "r") as f: + return f.read() + + +enable_tags = ["demo", "demo-prefix", "demo-suffix", "file"] + + +class MarkdownParser(HTMLParser): + + def __init__(self, read_file=None): + super().__init__() + self.value = [{"type": "text", "value": ""}] + self.tag_stack = [] + self.read_file = read_file or default_read_file + self.current_tag = None + + def get_value(self): + return self.value + + def handle_data(self, data: str) -> None: + if self.value[-1]["type"] == "text": + self.value[-1]["value"] += data + elif self.current_tag is None: + self.value.append({"type": "text", "value": data}) + elif self.current_tag == "demo-prefix": + self.value[-1]["prefix"] += data + elif self.current_tag == "demo-suffix": + self.value[-1]["suffix"] += data + + def handle_startendtag(self, tag: str, attrs) -> None: + if tag not in enable_tags: + self.handle_data(self.get_starttag_text()) + return + + def handle_starttag(self, tag: str, attrs) -> None: + if (tag not in enable_tags): + self.handle_data(self.get_starttag_text()) + return + if tag == "demo": + self.value.append({ + "type": "demo", + "name": dict(attrs)["name"], + "fixed": "fixed" in dict(attrs), + "prefix": "", + "suffix": "", + "title": dict(attrs).get("title", "") + }) + elif tag == "file": + content = self.read_file(dict(attrs)["src"]) + if self.value[-1]["type"] == "text": + self.value[-1]["value"] += content + elif self.current_tag == "demo-prefix": + self.value[-1]["prefix"] += content + elif self.current_tag == "demo-suffix": + self.value[-1]["suffix"] += content + self.current_tag = tag + self.tag_stack.append(self.current_tag) + + def handle_endtag(self, tag: str) -> None: + + if (tag not in enable_tags): + self.handle_data(f"") + return + if (len(self.tag_stack) > 0): + self.tag_stack.pop() + if (len(self.tag_stack) > 0): + self.current_tag = self.tag_stack[-1] + else: + self.current_tag = None + else: + self.current_tag = None + + +def parse_markdown(markdown: str, read_file=None): + parser = MarkdownParser(read_file=read_file) + parser.feed(markdown) + return parser.get_value() diff --git a/docs/legacy_app.py b/docs/legacy_app.py new file mode 100644 index 00000000..d7b855df --- /dev/null +++ b/docs/legacy_app.py @@ -0,0 +1,6 @@ +from components.legacy.app import legacy_demo + +demo = legacy_demo + +if __name__ == "__main__": + demo.launch() diff --git a/docs/requirements.txt b/docs/requirements.txt index b4f81f0e..793fbae6 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ modelscope_studio -modelscope_studio-0.4.0-py3-none-any.whl +modelscope_studio-1.0.0b3-py3-none-any.whl diff --git a/docs/resources/gradio.png b/docs/resources/gradio.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0eedf4af724e36d28caa72882695cb0a5e5e06 GIT binary patch literal 52484 zcmeFZ_g9nK(>@%Ef+8RyqEdpQf*^v@L?GAz0R>Td3yOerkq&{xic&?SNQ+97E?ruJ zpdejpq$Ys$l28)@NxnOHp7&39fBKxWT&{Ii_TIB+&&)M*&D`hB9er)?{m1u1AP{by zn>X%4ARGh;gcZxV7yK7bGM z-f`!v{gM0V+n0}$te;PY3CNlm@?F)uy6=>HX>5A{Zn4geb>Bn04faM7pRnvsfgn_mVhE|X7eq=oh`847BOF;*A5 zJQe=?@$A_GA18EEO^;skOh%r#KVG=s8J85=m(D>dXbP(ApXQt>ii(!)pd+-8{o5Wj z;#{B;?N+N=@VZ(xw_L^_odgNV=ybu2My~aSEfT%@{@eOjq*)Bc(N&(&$~j7O<{;WB z2D9v#jrOZ))Lq=(PTljL)~biHN_)K?)NB=Lm-}+!9nYXVe(F;4G1eNg>iEI`e)Msn zuS@?W=P0iHIk`Bg4uY{RK2FbV8uHF4W&8J&E6pycNusz*s@$4xLnjbK6!?u`h6DRb zUb@B(f2z!X8(r3SkzDFlQx$=J-yStA@bz(kXqaHXz~AckK}ErDW{+?k5#ILK26qsf zd4-Ql8})aj4pk89R9Pu8)pEgk7$q8}loR~YJE>7G4nu#kL80HZzYWg`3_|7veoAMB zK;GUH>eBCuAOySh4SX?4*h{i2$ApB;dzpYuQRc;nt+bafT9r^Nk!4Q z_jwEAR#*>-r!^2DyjYP%fkJkG!+L;*^r%2T&_b6s1n+G1-eM!XN8OOx$W+xm2V2`g zdT?gz+DTVv7=f0{*{i&yML3V*0OzN3j^*)H{NgY`%oIzhdW`+qitwY zc05w=rDdhw=jKt{$`?+mdFYEh7OV&R{%vWJ?;UCS&^<$IpIyTQQ^vSh5GF3e{;i9!|cnf{y-^ekC-Nv9|a>iW<`Qm*>H!T^%Gt&L7McrwgyzOuFPdbHiFh z)?nla6e;XOd_#b0a!mS< zYP_+dt(_|)TAH;TvE`g(fuOW;%WEN87RSo(Tav&cW^Z?~I zx-Nj7saK8itXU~7>?AuM$F)PWabU+Edo@2+=jbsNl0GaxtOSedkj`dBm;%gW&J9~Th`?lFWLbfUjn#UmoeN87V^w71$!Fun# zEC|!&UenyPffF<0LfXi`@4>mzU(oS3eV1fLMVY=MSl{&!cuy_X+8jxlv@B3){>2VV zb?`Kbc(*NqXfA2oweZ!eq^ig)sLC7!GnD}~brF&A?eZl;a6UV!RHQz-Kj9S~9e+F% zoG2H>PO^52raxJFE)r-{v7V6EoNNw4g*t!8on)CgJx#m{9}#*^R~_pab6EV22tr11ZxQXHp|Y< zU`g7yt*g6lYn#PMsL{q>$vg!2t8?iztfDrGM}2|)JjVt>o$p0xTO7_C(}0c#F^yuG zo1pQnz&%1NIIvd_f)|(OJMQ()bB-!| zaN+lm0`?I~hmMzTKJ}TajPPX&D+>1eZJJ99N=VB#K`hJ4^#VhCUOtdfHyk`>a2p%u zymSya&)VU7N6Q|^jVteWLxdbRJ1Mp3PGLt!V6LAF1YIx!uW%i-aS#IU{1F7yd%eg? zfEtJDXVifqs3t-6o0FN~Bj>|hS7fAK;L=DgE|?83Pxt^V^Y_)`9=ElX#^MVj{v8)| z7UiKhkZIy&U43R=vXmKE&KN-OgVQ|c)Wt9Z+@qrP+QHJ86cq0-|AI`FQ|FqOU8I0t2=OWUBMBl^Ht0 znr#+D4bTkQX~$72`8GJ}D=^s9ydtx$SmBq%C8+~_Y4!u)GzFK`c%DaThl0mUGsi<; z5?TFOb}q3}IPs-Jhsu2$wR^8JO%tMakp(d`FKuklW(mQY=F{uU!3}#)Evx}k-?w2r zm&S>=Tsj1xpPgT0vHO|ae| z7`P=O!@5%QV3CFzIBf9+1e4y?L0%QC#}&#gKp?jJ`|(LfZjeIEnSl#PxXwXZat=|j z9{r{e*M1Ewp>VSxw9(00Jf`({XXd>QKT3UAL zr@AcK98~sKWclm;vaahktE&KDt#c3om~e*{37%VKPUv66V5M|&0t~9zh|UsBDgdXg zOR*pvlT^R1qf+*guosyZOLoXG)5uiVN;KbBeuMvs-!?L44ygf@=L&Q9uJp0|Hj zDdV+!NH6a$4Krm_3*#IkKfPWAa`e zH2h|1njB3Cmdq9HXIj;oXuUFQtk7YN-^pjeZce9=>9l{}Krmh#aZ<>b8UfPOY3*bm zAcEF*E%pSp7JGqKCQ=(62V4O!#Egay%9u}=oyS}lAci7Zy?o;4-pNXVXHT`M-vgj~ zyU3u+srE#$dT#mkU2`E@Kr{|DIBpbBC3@DZ!CfG;zTinsB#p6Y=@2@N86DK!dhc95 zb#3!Mj9{APCddsn=l#mT?>|}sl!yl`MD_Jan)W<%j%NSr0O8*Rs$n)~<)XuUs3taX4EjEZ4*`g>C zM!XIJp(M4|aTmqGy(u~S2->;bwQAHxcuX207nsl$i9_{%Edf$cuRDkivd?$`^$CJH zw7~*-3om#-tw2|o@z~L(cJu58IpCR55KRBKT5CT=Sv`reflPJlm&|uM1#rhua=>Q5 ze&$i*{hz0`lk9=Hn0QGVi$BDkXds)^uMzPIh9H@5UYTL#XW0l;9{HRNJle!s4lRUHsI(Ft6) z?4wmGw3!ej;%_s+&BL?o<^Xgi)Pc*?eX)d7wyCrR-q&>PLmz9p+75LE3S|0jW3lXy_j zEPMt94N!*{f4wp;BX82qX?som_z(CQRF^SC<1WasqrZK9t3IGx2k=avEkLbb`rtJg21#vy@A#h5<=g~TMq>> z!M1uIVeQkM{2hDY*lmY#HAH2RnKd)N{Jl{EBSyydu6}{u*o91(EXz)?p|quARJRt@RB20=r;IO0Wr!wU`LwT zMlqVMRb5u_7%OSMvAlK-Ot65Q#g;Ua+0TdJ z1sXX705H2ZAygwZ%4Y+Zv~4bsJG-c?tPfsT7-^@VHWfUk*UwS%77J1wp9~hrY#=XB z=5ydw{CQ&_vVt^v9|08aT|c@KvLB?}c#XWlPD%h9AFfB{T3e73ju-@qW`~#{~ec$|xSxfw~ZMD1;ug zGC9?I!F_&48%bH~DPX0HfMQ_7HvcueA0Pm6p1J$OeT1Ov6%W)+im(c-TYj4f&Za+C zwy*Y0rwZd7ki~(Ph}w%GG}Vbos0i#5#Yp=g1U2$nfG8VAq5+CxH}@T8qi`EuuNj^R z{tVLCZXx;)P6F~Ys_Qlc?WTk7k4`qt+|9(}02rg*9I7W*T>JEu$SfRE`b+HFHlN%8 zZd5Rh%}QTjBo(>=&H*gG4#A#wUScEa7$mo>^i@l$X9k3C%S`MU*{adDbP

sbPDiNJA?I{Y$Sk{q+s9lQ{VW3f>Y{Up=<1TTU5 z%HyV*ND7l>FrGVTY6#4u={kfL#E-imJ?Hl8w38@H@7LT)BtHN~vWh@q#q){A{~i z*(j9$%ztk3*(|Rt3iyG>UDIYg=x*}#Rfrvw%vanM40OZiB{I7-|3B*TCN^h5s!?7%3P^>yk{*%?+!2P-9oog{t&kr!~A>dL;tWu3|5V9KoOyE%SE zUMpU8jN*jI_3o zex>S8ZVDFE`*p%Hy8#neKotM|Ek2N!u8#7Ify*AM_lP6}k7j}7HF7mHh{QHWpl*X~ zbNhji*RFB+DrzLadcP^fMLt30RN8(oj*b>shT}UzTN661tGzX}xgm-AyZ5#$qn{O# z8=49B9~lSImaj4CN!P$7BU~WZg>j$Vqo3(xewswGTlO zSGNx{4O&iUUb^QQXA90i2f!(@3=%@i>g`oaN6fp{N~(*qQp)+NJp^_!)pTubZk}Rx zv6aOa4lkxQ_+P0F*e`mK@%c`njOPs&RL&`;VLKQtWUT*f3M-RhU2A&(3Pc8dPJ+jA zo75=z)@*~d38Ob+^uS#eb{{W9!U~+MlX(5p#&` z{IV(2y6X?T79|8lZU!*6-gAI02YCp{9yMz;`B<`^9c^4zM+213yRh$utBaJqfuvaW z!n7`v?mU0~JgC`uscJB6=~~WaDBlhA!SR(=Q1^ELd{Ld8)Li-PJ?fF`YrMnYjiyts zGa0=6{XgexCdlX>cz#_)k2L17t&&Ldf9P%!B9UCQ64c6dL?nn*Uw=g#A$uCdku}W3oLXiMMNZQu z^Y*2!B?rB04fm~e%&C188kF?F$J1AK2o9V62mq=`d>_QxwKr^CmG3RmZU_XW9oIdi z$Z01~oV2gArz55#H$wpz8=MY-DFcc;IGg@*{aU(kU~lcyRu6mLxKb42ltNL+nfa(M z1@h~J4f+?$&*x>{OJ!@z(W3eKumsXeJ@kd-=1h;rq&F)n!CuF)%Q7p68a0kSU6g}H zU!K=lO0Ws*$3_MO%+GSkDE}DQ(Ftn5)qnm#=6vePN)uqE#4pTrzNR7v^-h?7T=+iw zLnQDop_f-$HYXB>qGLS~rrN=Bg>L95J9^v~qV}kABrZ;?&)Se7U^kuAo$$G{)g~>B zgMjR={OW79`5;E{!tCim+Ko?U+jWbY4HQ4}Z9w4;B?{u2YQF`qi$0W^9xF=62yXmb zJpF@n4u4nD6dtq3Xf0Z8`Zq-(D|iJ35lsY7C`hI1g`=Ue`V8XYaiu2(`Bwa1>otaC z{gv7x?a@)w!VsClxP?h7!W|(Th9we95>lvp_wv5!a*FC@g@|O(yXL-fHsNju0rx{k zGTrZ9FCrbW=~jEGBT_8Hjh$qYZD{w|3Tde-Jeh+1X9LT<&yriO))hUjWgKE>`O+2+q57E6cgKaNXo@`0pm({*KP}>5nm9o6p^`uVC|?!Yiwqn^$10 z?a0n+0jei|=adxSO9iGqqt}|c1@A8tOSV67lq4J&Ry8_cBo$l7d$68Om4-P}5fUvZ z#eiWXYW=+xw+GH+O}ET9PX-)mg_`8IsnR$AvOwC zwMTuUGMnFW;azBVsv1YS24d~`93ZlY|I)&og&tY)*BTd|QR*VRXV06PT^!=S9Q127 zJS9}KU{h(OIBe(Z(^kWKt8a6SRGi{5QF=4yt*hb6us$It>)*kO$nlB!Tf*sEQ$M*T zh})HkvGA_$+O}tfK7$q0gPq4!st}!L0jU<}hD_RXEj@3@QtDcrna;@AUDb+}&5y~0 z3OzyJR_7D5p}?pUeX~OZHj4eXriz%Pqit=o7DS_E`@@5!snI|U`Fm4Tyhw?_^2)^( zbaU`bzy)kbA3ynQ=KM^F%%V1Ni7dAtV*5@h^?jPqC$dcGAtoI!kMdB!f9eXVbSk(V z9S#YRyhgtLUsk_F^_knFrQ%(yGB~hWynpeT)3WTypn#>6c3r^d`-qAT+PR|rRZ2mR z25z&-S_bs|tT|ijT^*%&M7Oy$1^Wg&LlsR7!bYWS5R-BfY#r`0WAfxs0AlmvRkbhl z%&);@lcgrzYJ(eMjNI<}H@UsF2z^8xv@hMNClQn3~XB;qxv?`aZ4awNufiT{3P}rV_{y+y=9ML7u*4CUD{)|a)20(uB({{^BRfwl| zn-8w-4Q?R6PRB}v;o)k@xW$l?w9 z$SwF$w3{*X>Nwoev+3cohgL;R=ji6@y^VKc1|_K>(<0>$#~KU0SSdPufZ(b5d4KA3 zdH2HKqKG!ne(OQKk~Q7u+DA1Za?Uj{qQ+7pCjphd{X&2Npyhmc~!W%sN2)jap`*kI3`9UV{<1y2DUty-zLQuBkLV z68Pxip7PT{kAlrSTVmMQ*tWeXT--uKmS=pw+He!NUJmh3kg?+QlvgU{z0RGwNRt2C zA!d9;=J;wNc#=~?qY@p_VIeEnN%#}d5D}Th)w?bZPgs*^-B`e1$vzsFS&9lYAeiD`<$JJ z)_nGgI$4AFz`0@kESp#*;Q8W8#Dm9_eGmYMKN(f#>P{N zhLWZ>sT*Az2X8E8j3w|8}9UVzsdYd=X@#Bvw@V~WpcTI8jG&Vgh z`XG^;*}6OuRxW#t%+!|SOo{b_#lO8Omc80-B?;a`WNV0=dk0ddoU;`B$CwFTfN6K2 z6*%2qSenbxQmN^ong!lvC+2;g|F0^^^j;%z&kbs+EMgiOTCX5Vk#!uR^M)0h7_nhY z<-I1iF*eHPk&jdJ7L)FkF5m75r{q*9cuf#%+Aa|1hx$ObCN$1rOVQ7Ej>R*r>&?)E zT4~TPNJ|~j6HE{WZBLk6gwJ%LI_QCi8ScM=8!YVF9w>;j=5`{}H-66YGUECi-#3bzVGvzr0-Lfc+#!wEdCD!NBii~m%;iS-c)7iV z>$_xSZ4P3Wu@O}(bz&D|CuOLgKFAdvWDq=yXy+&T$N!pGqT`34b&&mAUZtd6b z8(CXJsdAm%yLa!Vr{C|<-D;Yz7TJ?%0$fn7<{R?7Y|hUMw0O^cW4!VR3~RP+oi2!q z>I+l;D4t;>`h6q18U~C?Ljf37a2$+ytGoO`zQztR3%!p?k4E<;^jP!#K!4Owi;#Tp zB0I2PeY?axlK!GArJv)q$^in`RBPVG5%iUxCNz1`bx;iV4-5q4wVG}pG2!(~_?=4C zjl;fP^DpuQO=wns(esuYqOy{89l;K`fq`!Z=DlZCV_2?OdTHh=nPdn(;Rne;v-3C5 zdX$;FlAe+?P<={Wg_Ue<2pVL7nu?)50d#jl4@0hX&e)u>3@U{saeRHy+fQe#{SNPS z?n)|HNhyVd=p(D1hJtYW5pgVCTm(r2Sgp9K^|N6w@7@}u+6+o9Sd zW`qK56y>Ws)Z1{~wa6!dI)FScqr9SdiCTQgSwdTF)w@Q{fyWK{(Uoeab~}H6=KRl6 z#l7jo9ii0cRs->WjK}|8`sp>I?p*t635~ zi(jtWiNCcuc4Fg|)m~zqNIkNW9uG>gln*A1n}Ig$BnIFWjhS;6O{P7$13oRvYkwIm z8%%FYr?c@&_Z>Eo7o9C=ZNtXJIM9B7d@(3ZT~I zo#l!4(8#aNP#U&VsRTjvtR z=q14CyZ`;!B`fh^aU}C#drFpfilIJ66l27Yvdmfh{vxSF3J3e6e2MZy|0o{x)0>N} z+-}`=PbM{7Su!t0rWOSMsQN|I(?&y&npI$H!gx6Gf-;xorbm35GXF*LN2(@KL>Art~fT`iT=T>46x*tN|zc2d>; z-8lsJUL2UkNpZ)S7S^4?9K+8)eUbDz@avsI%;(r9e`OAmq4KeNv4y-o4VNM~(j+bk zsvDXPPy56dZGnc-Jh^b!+wPwe$diqjEdQQ3*E00mv~VZN98#ZAPCvV(3|esXG_J8V zXg&T2qi#eJ{a08;Rvoi7X5>~YQTHvtJN!OZ zkjvV=%Dbhi_I%d5ZC~y{L5s6Q^k$w+AXB*yQa8DLPX{t;5!S`?GKI zF&)IUdBplH>s*PQbE7y=ZtyoVV0L$Q-_z=oS&+GK-u=nU>^xD~aYoJ{r2a=^VceW1 z-xbD3$LHjoy(F?G1ykbVFocstUm=8qT$W=cCukEw4EvVAkXGvUTZ^@~m$R)awXF|7 z-D#VoKxZH66DUPGL6zH$@T6tXZD8{2szCacZfHnUj6O~can{&0fbub`km0$ssBgV- z7Db$s`K~cyjvF1SOid6y7Bn>r6{ zlNbAnsq$EyO%iP@YV})J3rmL{m`A~f{-@czxwb~QUh~l@?+}VjKwT)0vy_z0Uy41l znA)7G2G~$_OUqJvR;t30?eIAHlmyXgSiE$RZ}WxgWJNHHWYL|&PSS-Cw>1`w(*qxCUjF8|T|1)&tnX}a#n!8`-;z+rUo~gcD?CFix-ZF&j`ECF7PWAYhQSDB z>Aw-mW{HM%@sp3SpwW~Ef#nrMCIcmQ%-u;((eE?OP5FEOdD1&66YOtgIscp4(E%)o zXp^eV7=58|TISC#Kli}gq+l+W=Bl;C*x{u!5z7DCuYMs6!+cB&-;t(lko!)~nf#+w1Ld5*_*@_AlFasMK)1q&eec}vh<{nG?5!7V$Aa)EoKRk@8A?=^-Ab`L#b>S!|ns zJ7;ulFFo5F*~9FBfTrqGm6fse&zxh(3NU#($ecXY#}{Iy!Kmm_biM|HHo0=KyScXr zxb-fr1IvRddkjF+c>Hf#=hJK|j(4%`Rcxs)y<=69pWK9jU?diLI=K%>qkTgH-IZVQ zR +D@9s@5h4_V;=!}0wFtK<6`w?bhKPzIHx6_cgqC6P+dO<3f9-Pai_-B;L!-QZ-JYiz=5zaB?U0S~~k6yn1a@w@_qhaTw+E+`9 zFppg1()VXcx4^g{dbTMpg_Sa9NwblZRjKxZzA~kwz51Th2zth^Zw z&p_ndJ}nh_`!Pdp^|P1{^fZqB&WDVnf0Lkgmwcx5L2qR&$S@-v`Z_^SFg05=|G`EY zbJnO@`ol97qkOujaPR#|-F<{ONQj_arWx&dOuS*!i{pMY3X`$Ce}rW{aXfDB8z5Z{ z=FXf)F+%##$Hyl_j@d^yy>!xiv79^v@XqJ=eu~I^>YU(4Y0n#Kqk-6K#tmvO=O`9H z%5Bj9QqER=g-wf+Z}`9xbhx#DL-f=aoj$+)T!OOm(>h>uqY4t@8OqzDVlK@wlPj?x zTzNY70G{IrRH)fAy*PvEvDom1hdD||n;$%1`FI8)Yh4)P#w3Q9FGB)Pqb!bHoorP& zcL(4-5}A+C&_R<|h7low_i4{&*FwJge%}_~Ln1D{W)59}x{s(DK8YBg2rKhoCrW6J z0vUCHjE#oU5s$MrSZ-AXmV|OTU*t_$Bay%m<2|1M<%pJ9HYCQYKel{uppah~TkC&S zxDkF-TNeVXSXG($<@DObr4hGtUs{MG_qI@~yr|kx{kGn;4S~7QXX{pbNS5LV_;&pr zs*E@Sp;T~tEm<&2cAykYAy&(Rq07=9Dz)Y=y7Y3V%LH}3Z<<VMjLfu+WtHzAt-xV*2-!rY{9E|_0UY7W94VYwfP=j z(Nb!Ut}DJMHHrzoAn{l7o9m%X9362L{&M!fIHOyH^NP*$tWRa8?7yIVpJyacMZB3V zV5X;Ai+pM3+Q1C$bD2^_3V!Gh3_)B5@l9(j6-@Zts{7h3eT|a7kdW!J8<9(?Hy4u1 z61qE#&L*@)hllP|20Z?F=8n*IRIW&T_7-^C57i|uqVIUmsbBFJNOO-RUGtNw@ffSM zk3M_Y1%A=@Jtz}oQTXy}Ie~93e9Zcm#Mc0w)Mpp-cxsoAhz=nV1wR6aVqEP*9~+!Z z;V4j$xV9N*xWODwYc+-73#lLGL}}v^XBsv&!Xb2yU8N01<2^*>j2|p)`32d2JR{5# z=Zq9bnU0#Q5CWW(Bik@{H?(F7w40q@v@9Dn2}q?nj)33>1YvO6r2`DxGVL|efK9xf zzc&&I`FqyL;)A|G+RRB5Qtlb~(}0tcMtUIPm8>op>AUUc#x({iB9A=zUenO7o7knr z=rzqqFt1OYn)?AlpbUz*3bbe0GaTW3Mg+rq4yJ@L9GkfRH0cIy=WUOt!IApBGQ;s)<{WB`2<)^0|Rz=f(SDDI_O7domAl6VAMyVtEHznkIfFK9yI>77e zI>gsn zlKc%)5&tV+ulJ{8dg1vY7w11S2l+uE-|wMD!p5x#1|6|OHV`g#6QJd| zJZJUq-{a$B%F{m8MvmyB*~}D$>cRW1TPtcJ?Yy%+KmVH)5=RhC3xj_L;O*T+>bj^Q zh-h*oh4Pa!Hl0hM6n96%7o|=jt`%l8PK#&>uB5zm(84iZi3aY zNW4pX%#nuQo>;3^pJterCJ1Rk@4}S=LvWgpcAjpw-Qv6Hwq131DXbgr7u@Gps?n%6 z80j`^H})-PQ1eS4&&>$F|I!i>jA^uAXJ!BBQc%yo1|s~SEMG#~RCDA4swq5%tF?a% zOtIrThR_kUUq&%Sw75xClXB^iPY~~%>9BQW*0sU|1ZaeX0LvU*YlQ*^*VFbe$3Kvd zz|5gCcaeVcF~!LP6Sz#;Nd)|u4|ccvo}YxjiF7+G-x=EPxJfYa=Y2SC@ZxA&GwrQC zd5MqrTUzqVh!sCt^$hFhiFfv_l(a(lL*AWX-jnIgkC^lN&0dS81%{=97NDz%Z+hO{ zFRpsqNcr~Q4CqW%BsV*JvI_or3zPA_T=LD@${YVnw9ZR{(xpo`hU@G&;*ap06(Rr4 z*%@Mf(E(fk^*vj#RWB;)H~lo<5W_O1sC-GlQ5@&KCOw>)iDX5U*2ZxWa-~w%;w~eyEca##O}f2z?Qb%ksKl#=bUK=gRyXp!*7)E{Y6z zT%{_2a_4$;vNrN7<^0nCQ-C&;&4M1nx)tbS*|!rit_ulf%PNn7c`=wZ%T53@>57ye z0$+X1Ii(pYz=Vo!dWm~uFFEHyFhQ)8**!?p1ru52;$+@DakXOs2fO9JZ!Zn9O@0XZ z6<-h)9Vfszh;9^7U;j7-=wy&0mY8r4dbWvP)^Ap8ZTOha{bM%%qx$xlCZTg|eroz<5}zHy9KKW4JK|vy8!C_LZXS?{jB1 zw6G)dZcCNR*(VMQM?Zb~G+4`YmXjAp*!W`g4{!_@En@YJsrCj^NTh9^&Mm{3nr8_5r0VJHoYQ`?rD z6ap7z@hk<`$J1{0XCfTAy|4BCxGXi#-fQy5-SF?ruDWe|e;6@-oXsXYm)bl?vfRg) z*5hyja=l+$pAC8a;m(MA+!datE-O@|_e_Im#IQzbozB#8|ID$-Sgt3zIP7`o%SrKU z3z)ma{Z$-r)F14o~X8J||zT=SWyQexQw`elw`#)iP6^Qan$~pE4uM@(XEJ5Qu`9q6JOZP}H9VYxCf)gMviVTBd#c zWrcv}2-}PI3Mbq3S4CLxmMrLS35)ZePhQ77oYvKR6_ly5Q|HXh3ae+uST`^tj&WHw zEabUTxabc&HtjpazT+^dUZnl??)UA)Zq>Q7#%HqZl_}MQuU6h( z=qYYe$xqH~g_7AbC9)fzAcrMl{it`@58Qrvt-|Z1 zG}3pe(A}~Yf!35~SOm47d zeb>Rcu~#VGER=yp!I6vi?tA&uh=2F^N9Mo>w(C60zj#lWp7d|{6M3Yq>MqXb8TgLJ z7Jjdj{$Vt;Cs+MS$e55S`Zc-j?eXs@Dph34&jS0Q*uvO;&~ffDH80UW8&yi1nC!$J zu#P1vD=4gUtsUK->S#=i?lq40D(IBhM~i-)cB4L-1?ZRjOdwj?O;p4D(P>Gi*8)u> zwxUq7S*Wgz^X*NSw-$6hv>78E>_W=U8F7R^f`f|^_EF+;eLBE5W2J|yN4|E(SId{~ zn(bHCty3)b&*kDmprgE$Ed-?^dso!@W%blN5|G?cr2itK*(iLt)G z7WCL}=Nz`~N7ot7ZLlIsnf+zkzgp-HkI?q#$l3P~6Yow$D3~Du+P6pH{aJd47sF1%;GQ zx1l;K=ei|++KQ<)q?u;~d70GCu(H6NfvHyZ2!4sN!FoA3kXtrG;a`qx)?=Tdc;AED zo94!}-a|R2 zB=>CBiH8su9EvV}uQwY#=?`L^1=zA9N`H~xd^n@e zGo!b9#3%6=*>CD^kOM#Sxw4th^{Z*J2Z~8EPlA5fHb%xQ^Pf)QBYi(eI#inY;r9pK zHkBXsMYC|l357(QkmB-~E#XXC>}4Jf)-hGSCEp_-Yo0S0zG!b*S7;#kryjo1hlIto^x>_**fwz!ft(zNNrpEx;cDn@7vWW~s= zy&sAkfpx44T+`W5UFXJ!Kv9<>bE>V|_Z9rJjOAdlI07< zxgEGBO^6{LJo$I>BNw+>W%MhpYd`p(PmxD${adyibJI8YOdPjcx?WGUYu0l>nfmp6 zt&t>&7mufHf1PfmO^CxJa0Hdf++%&;#J>%*K-f8BzDIJdzT={JQ%@qCeQ2il`u z(d6VlRiU4%tTv7;c+r`h<{Lk77i!kTz0gDE?1Y@FV3(h>j zV`~!f+T1ts`SBrI0NrmNB-xbdw3`JLQdvvYyM!@j#%~^>pQB_`Q3kMddVTwI;nio` zxhJw4O>UfwS-O5w=$2G@P`*A6=E@2?7O>Jar>3CqVJuW z7nQ`i}4Ih0YYARju&Xn@Fxl8 z?BydFoFM3l5lnOWKX?+x6WkQXPX{;Fe^FOBH#tpyj%<5dTw|T>0=>wh!MnnCKTFDa zcd} z?!fB-qJI2~ul#Rn99>3W4{}=U?io)WxVW)i^OwM77Hk>BbFH33gdK6^iTwyI{=UlU z=<6vSF)m-lfzIH)k!z}NZm{yQKn}8BVu3gClkEDHKX_VZPnqJx_8y=2|iK> zU*59V#Zy-bJqp)eWx1#*e#C@m+i6~JuS*$#o(Opb`~@iP&OlhruYBJ3BOWm<%B9oi zvhSYSvG5xD`c3135etMBqE47&fgUai9&^lVRtob=-LqrFjySC-n7j6mj7hMb0 zc{i@Hg{w*)fR64;BFv6}47@QGip6JkeC2&_t49p=obi9Y9PTIg83gky8IQ%E)xKcG zsQ1jp_Wf-?S}raBo45wEyv@HgCWUmUkRo_!)ra1ycf3&_RD5O_Nq~+aBJhDD2Bc z&fiY*s)q(`2AYzS3g_%@3-iYi?GC7I(Y+Ohexn6&9W!R^2m)}7iD2S`=c|8nb8kFT zpDj26^=v7(aQKy&y_eT_)AkMvr1e%{ehJ^-(}KXhbOtGMD*7S`PDY<-x~jp+mz7j3 z3%bI{R$_!2kl?+vsh^q1>>JFzkneIP)-bpyyzgcVk*NDnDTc^NdB;gv#~aHS@QTTn z;c@g#wP~xyOG8*iTdye<>%z)$R(g8a7uuc@@p?x-6)G~x#x=)Bs@~6wpOZ4j1eEMZG}GsR8_x`^X(i2!T7|38%(LEyPTEzez@IS zE#ahCm57ui3d0QkOc~onltjO z-jSwmngcC+X#*9s2q!zfH#Kx7NyV)U}kdv?B*WM)<*E`;wJk^v}l|>HiYJU$SR_dVr445fbG>Z5XMNT)?Z|pMj zN*ikX>r)znIsVq-i^I(_H|A}o4w7V7`yhjndTn*)YY8j3zqr}Pn}JiOQx`VyW_giw zj|(~kNSmN6MHRR@G^cJWSm9;1PaRS{=F=5E?DxSqa7;b9zdtqrASMv?BEGbp?`uog zCm(@_b+yg-_xDI{&z3134)5KJ||5NVR zK8h9M+{us#C)&6?IgfsFR6LOE;so`>sUV6|6()#@s~%iepC`m1g6 zasm8@%Lv~AJJpb5R7DGrhB)<%TL=NyeJH@%F)Gwr8?8VL-vfuLlC*n~SmoV4bz?|5Gs z?mnn>ni_2EUpRs-ZKcPOT}rdJJ>bNtcjmo6gDZ|EcT0OOGu&n&!V&+XyX{2?uv8v` z)3x29n2mSNeOxn)yE!waU2yizCayj@xc-b#zO*v~g#88m`rJdsiU803{Q~a1yu!<8uU4Q4Yjw>%`B1v*j7q_?NpLq#+S%N8!0A+na*hQrR5?SZBD@ zO1IQrto}B0Eo@0;_NeIzq}i*=&sbA5rc;E~4qwUsZAQwa8NoUm*=P}qLhI3Xk~=Sj zLDzH++9Yq-I$@op&)ZTPb7#c&dgqvo`A^h75M(u~&JLdA3Y}6)pfUrwv}lmhf{>1x*BMIY?kG3TnAfKkKjaUUl zAuh%EqKqOU#=j){D6rG7L#QCuRh7?!Xll#E=gsWuzTLH#8DYJ_PwdcuQczMbv}Q)n znNjbBQ}5kbzObXx=_UCo)jenK<&H-*&efsSSA-rU+6Slio@gNUR5u?LrmpZQ=ne5P zYor98ywV~Eh4n&VwFYVJ_n=SwXrjh#D`7GYqt><;;L7Z^QY$a6nq2WAB=JmhixD&u zXcYqt&#^S26P#gY?0pAy=9N^JVts}2ZG~A_Fx$eY_xcBVdwcZ)cJyH zS?`?fAXfw51h>gTRLQB}7bt0DTC_5g|wkY}(9-RDUAp}9m(V}&2V(<*AVhie37(yBdrE^PL zYaQfgV5JATQUpKdZd*s)k_o5@woXmk-l!7T%j2vbRqxWtL%}qHF+XF- zQ6lOm^#EVhk$HE?KBEs>IadZep)MiyLL_)h>9>#rb{H|LGXYBerpwY+KrVn#Lyj#( zfMMj(XJ(ZaM8WiaMI(lw&xJM7B$t5^t!C||eO~cMe{Wf&Zi>V`$$)*UHfk3ai?k$J z*L*KGxy6xRmmuurLFG0SJ~bg%Jktm7I^G%F#a?{w89l}MRB_FpInS`yBly_ZvcfR+ zN>Pccp2ghXnQUDKuevn*Z=Y0Sq~PGViTWt0%37k9>MSrlo~bG9{Mg{+=;b>-MpGJC zfg+lLrNmX{RY< zdjVtm3XHXFP5naP!7*s~>8yqshjWzuSRSP#sTXUOJ-o5qAJ|y4h8bVO8 zJ^Sw?lEpW>d1El@f5?aiik{1o}@sB-*}mT)PX?$wJ^3-xRDb~WE5 z$h~rH(~2aD{V9`j(Ap1>4k;<4f54Sfov%;pb*mKw?=7t)55g3ZP9&uaCdPQ?Ws`@; zs}R>3B%V7BW~r0l#G&AG!_qTxOkIVrJt%LANSg!Gr6`0H{>hW|iOay|#R%($sRxwx zYJzMQErI6G#Z;QDF;1`C%1Q5Am>aDsqd)jp1h3y~DEq`Uh+}3UHgpY0+FNjUn~3{{*eWSPB-E0LI1S%wXrq%%gWDRkV|tF~33tIsEmhS);%zYe-x<4l znElhOct@|GWcbNsd&q6ycZc2~hllVj*oEF_tLRUqj{c(*5EA9+$LTF7g#8))I&T2o zm(=HD3tF9N$}fd%u;HVKe)R3v5|PoMC!|kOtBlatV`EqxJL6Tt)5u(+`Q*9#%Oi3I z5CIt=gxq*ni%jQoPSajkuk{k~PL}o4UQx3nMCbY1`OksmYUK(c#nqM8vs)?NS1ppz zo{C^u@KF2Wta8@!BR(fZLL5XG1!Stq+OK8dzVO{R->~iFo}Vu}Sw!7e&xJ@wT)X0; zRygon*PH#>hi69x*YUT+RbHtwLSgG1)7njZYkk(uR3uBqm4%AWz8@j@K{*yp3M7)# z{sSRIG5w8-^zG(H+@o0uSt)}`SK4a#ukOSTPA&_Fbn$`G8--K{-EOWuDOHGnra-PZ zW!u8z?&j4>m04dtHfpc)l!vKZNBQiYh+mthB21P|#uL{NVy`XlF}aJ5_zkRn0Lg3h zq+geJbUgH(4Y?D@YuHdgAGNxL&<4BM89c-}@6yrM>YVwJ2E&gmn^^Le+p6^yRLHEAm( z9Aj?W(+uk+X|(YRREI@e#WWOQ@6p`b7G>Dm+mMj!K`|IHvWs zvRBi{<@74>>r@#MK8fD-?4Y{tPHq<()}T$QHa9)J+ieFn86&Lg2EreVI8K@=#$sm= zP{?Z1H?3EG!D^Y~Ms3b?iTBp-*`I5SY9GGeJW|7b)6dG=kmQVu*&=B9h{v=Gmps z*-8@YMJM66t=PDx!9K!Fp+JReyc3hwPaIQU;pU0wlHUSm(LtNyR=%cxL>qb_RDo4o z(}4^3Z@SDA5AZGcnmZrqsN0 zecC)$FHaz;ZBS%lh!dgjOi~5bEoD22g<86(l??hyv=SY9OGw5w>EkHnUQ#J(S zgZhOGU)SH-_8RDSQ*-ja&9xQ~rvKN*0#sl8=|tmft=n<}+_*lm%`m8Ivf- zqDDc{O;3Y(t1)lFunIZ9uG93kvHT5(N;5eE%$e6s_S^|BlnoD|#P01_Cp*6HodVl0 zV{>+&bz9ewg7hcic46Ho}FrJ;`VGnC}a`&lHUQHB=I~$!a5e`FAC%&nfap z+L=nxyvx-H-710PXa6eMV+|h0@t>ISPu@)pL50RY4Cc%uI7@;Ys&G7k@Yx1@cEBThXp&r13o! z*=jCqC&x7Z{%cu&3V<|tQ63JT^ee{rF4RULM=YDGJM!?O-JL@L6KSt#OC$Mzrc$xA z>O^m@!iOyl4GnMprQcpDEJv1lC;E5~#>-jk3rX5v_yI`w`?YY%(LlWz(3Xg4fs?=nahA7!?KL`#wIfyCxC zUJfYsG6a6|*j-g{DbGE3Hi&Bs(t3C^jw(Wq|OGSf#eFTBe;^s^dzVtpqEsyXy;KcgOP;#6Rn~zdLf)D`y`DT=RfF>CaFk zS6W+eF!2J!S`mWC5N(kA3Hp2nC`?Axp94X(u!#xAUw}3tp#f#^M{A2VF5J@|7uQ#K z`0Ue-j%rtKYf6dC*(D4^Ve^NP`hRN}o}!Dq^RT{PE;Ku{_rVt`#Cv_eQHsx&c;j2r z;sv3d=o3Bq2WPzSZFZS9Fg(ZcSZL?``(^jmT$^15V~I{@-e6Ncoi8{C=TH{VFeY7b z^!tnecu)pDO3ZF_kdjKIo^?^o=ECD7z9H#qml%`JCsdlI-XL+=Nca@{N~Ak8*?+EJ z-+CCAKP_^G7h5Q!zLmIE&(iwx)Q{yrN6|o=9!WC`=SJ;b(yJjGDe~gF-Awl054ngZ zd@t5CMcCuh3JE*K!ThIU<3kU~2v*&!a&w}Su>2=)-?+ARN8TKeoNIU4Zcd%K75|Eo z;>L$qikS-63wE6O$y{BM)JCwvUp02gF;`BsE+?864AKu zLd=t4z3$8&zga>7!-P@BWy980lyj45`EaaGxZTS?tM^aL_BviEuIzy}39b=ihHOLv zI@S# z5Q?+>nTG5PeG!Z$+|$)u)BJm79#+ho=O86$B-%_Nw&4!#@^D?!rz#yi{md8>%@7~T z!-SKEqeRJ?%I_0kQOq?xl>ozKW?_7-*K+Pknc5CreW18h>nag5N*gCfdn;-G1h5nf z#qP5dv?|VCh}}-U+Lq_}iESf84PQxB5dbSq&DGFVMR8N_AwlXLHM?K3)7at0AKRxD zW%$F#YDG#^j3A}PK*7PIk++(5NL+WOUr(bv>}cw3D1Vc>QiMdSpMb#Scz{=TGJ?0c zeJWgvjp}nt3_%-0?r-VWnF(7Tw}7!LBGV(Cd3epF>}7O~?`?`jA<>co$*C_%=XaF~ z0bDW^@JCoKp;GKhu{885w9?zD_Jo}UyUO+Rli?n$9Y&J{GF^PiO#YGoYQ7x~l8ioa z>raQHeS1biz2R1E`CE{WsadQLUJL^gD#q2E)BYj1>d(joA?X5nNg=>;ixv0$zF?JrghY3RqqnY7~YTHheE=GIhe zHja1w1~~SrrW|f9l@}!S%M)*f(F`c2;IBF=lyOw2yLLiW(Gk- zTKABublpK{p^?@(#uf6#=YFqIEAcRT@;$Z=gsp|s?9X?c7>mkK%l2Vdrw{gEFDI#V zcz@z&h)}COb8uL7-TBcGO6PB>UH&IH>7Uc~49SUTBBe=BO{f#r?2(K~F#?4`F?jSB zdqB7k_f06#4virk>Tc4K>lH#uMu+zLa$PiWy`yvJITsdA6M=-c!S@l`%v<1*)`N}w z(FZW!7ghZ(rdCpw3Z@%E4EzZ2RrEiKe0UkHRj^A@d#b1|Dx(^b)hVgotZW(`fQ#A6 z;fM)IKVFx;VlL=A2!`;+M{z!6@=pKPH&NoCV)&J@h0YHOso}%xsP<5JWs`r`)pwcq1fcs~)#!)_Vf_cKOW-5KU7bxmh%8Qe{x zxeqs^?QMelnLvq8tQ9@uoXLHXpHIG4)g2@LN8)q79~pkbRBT>7hZ1j-d_2=lsJ)I( z9%eeZY|h=bedi_EYehaE zHu4aCac_aKV6DE+`jJe$Q*>>pNYuZ4^BVu^13_qVYi{~$&sFj(?6u8X26w@JM8h;| zxyspxteR2F+Eec=LHp|ond0N0!o4pWeI>9UWWN;keqdb`aAPoAga*v+0xh{TlWKg* z?2`@<6LX54iLRY8eblA&?tFnyCW>#WP#5j~bXswnWLUrJknJV&*rnVF8E;1?;zHh0@k?kx zL(5Q;VP}WLan~tZS>~ObPd!`Lu@i*8bMSrT+O#OXt?^HTQZpEO;dfv;k(n4dM{tJp zcFEAL23`1=vU1tOnDw7)EN%z>O}ZmjA#~YUmQCYA^ld61TAuN&5tX)9CIr!H*5da| zfnM&vUsdMM3$!RNfTaHA6!-AmA&0=TQz+0BBfDc{lvWFk5PKa>?^mv4=-0srytF}7 za;rP2y14RVg$|JfBA09($F%51oAXQNty9NuE|(qXGdqWhC%T*8>vYWpw!h;i7Y7!Y zh5sDh!Xfl5qkz0xZdepDDCTLt`h?|soXXdCG1Ovj4f<>qSPFSC#s6`hk=TOa3E2JD zZe3S8Wwh{*k~OaDcLT_?+1M0r<==s$W52Tj>tObmkqJafYc}Van%9J&;~UZ~~ZU+9tYEpJii;bF-#M_EwH z$Gs+Fu!ceR-`?Om9S~J90Z~Gcu>KZXD~AlGg_LB&$lZFY>@&>t8{Wm=a&u7?qDt&~ zXB_|r@^SoTlo2gg1L}0R7iPyBcfAe7DfOOI^!HcGTiAOsi2!}o9uj)Ru)aWe%IdOa zqsuYv!Mu*)W!ImYbvdclgj7FI=+J(W!udKwm=REFo~H^rJ6+j7GMJCM{n84s80gpU zLJ!)6X&5ZRn#hGK6*&}H6%W0)@<<(8WUOLT}lGfQI#;vGDpR!p5- zY2g<(bWxr+5ZnW9M2EYkTb1$pxj(WtSmb|=em_6V7s8=ewkUNDgefub^T69{e7A+C z!QQ_crDVk$8$Vsk1Y!50U(fbJxMM~Ro3=&EOq0^3om0QRK;*Dostgj30msX@Rj%#g z3E%m(u?zl6{QK{a0Ibfj{&!(lm6((TpB+y2+QhH#b#ywt!G{Pkt1|W`gh)%Hv7Id z*fPF_iS5=B*ZWW6@Sraj9X@QT2z_FlQ)??@Jw&u!`}|abY@ASxt&vL0-rrAQcy~Wj ze6`3dpba@gQ0W=TbGWvk$CFv2_oy@P_ z;Z}B2H}6O_ln^xccCC7Q6i$VH^fa=~d>O9_zUXzqz+t2ITmHd3e2WlVSO1|bTvJWx zl|0z?gU$Lz^rQMSl9)u-=5xqL$`&LGmKIGRgC_wV8@KJZyjVS}U$UJ?W-#aP7eKsfRnki6Aa+c)TDA*QHV~mipB=iTEvt_FXb<;{ zF@2uHOAI*FMSxZ=S(8%gE&-CD`(@*33JVm^a5I8 zb>Z*$HD?#BT=FUN3-df)Sa1U)fBHn#KjIFep==P1o9S5vAraK!#GAzb-z1XYpD@3_ zdA`iFc0Q80x~iWCvE>G@!Mq3CEn8eOB_F;PqEH1YM12m=zhjlpv>09Q|w2ZdRi= zqqM(*@Jb;8%Zoy4{1dSwqgF}|Lap*(PXU-80>iI->*n#k9|a;_{l)bx2e$;2=~sKw&0Sg-s4=MUjKmot>N8R*{f9n6 zY8y|i&KD-6xN-f(Y?3_UXY&X;hxDQ6*Lg!8b-4V$kM$gXVG_3i{=x1v>t*7ddtw#E zugS&e(}290zYZlq!u;=6K)Go4ntC%E-?aH$$%2>tuqn+XKOj4(6iSCaLHLJ3iB6=k zsbHk^oo4iVi%(76S`@$f&(zlDPRq4$b3Jcj4L*bYRine>z`lyY-aM*9*q9FY)D_cG z%3olNZa7c>H>IU5CXsY8WSrTX?K>dAeAM76^OtFBFG%KMSGytz9|_rnG+*CmK@HT} zygCQP78qyl%LlysYaDtQa=f{pIUiEXzZ8H=w9XV|DY`DRjd+2QJ6_$B!-EGDf`Fw` zCquVzACiPWmNcxS#W~$gzbB?$LN1Di+_;dU zQ~lUuy^Wu?{iXUP9w53m#K{2bY`E$*_v>(@B_=NNGB5mlX9mL)u?35?5wH(F{m#>= zO{kI8?Kd&6MZqADB%1zY#QwZhz&wt7I?T)8c2_6a#M?XNtVzs&mN*8p+6z%*D4R8V zCbq?m#$CO!#E*JBFUc_f$1J-a`IzhYDUIvB~fxuvA&W3W}x6z)%6O1 zH>&7; z^X+nH#&ZUlt?egc(j>vWLJ=1}Xu!m@Pwaa1Q-phZ2XIFPwgpT#uvS-(W}Xx#eu$G% zKVmLNFW71KVqzG#C9)}xxeW${>kFK966%?y^l_T6QDTI{w z36^T{^uNLW$P3QWWaxYxgJuWde!#*`Zzs`XLV=fnYF*89`*su{6Tey4)A;(#<&K}6 z-|-{2cb;-SjF6+C9CLRjq|sSzIka|z;_fJ7VHxCLQnNep18 zBBx*)!I<$Yap-+pUB_pbn?IXs9XefTH3})M(hSv*Y(0gr|ZSis_q zS0Q6?c*|eZd-5=b>aDL#BHTK5CFl6U5$DdUR3FSSz3Sl19!mfUe@0Hlle}*asX$Ho zC5@qsHcf{ovvwIaV5(XN)efBp+|%6*>sXKEU;Z0df&NkAIzm6y0P+iJ;BYjqVfSf) z&3TO`r|=}D{5CnW-~I8ayUW96>gMO1fT_FT+|Z^P1I0C#gG9rZ=eYkcSzhHlUQz7* zWoF-ySp_l+QaX929m5LhOwmo+^h}c9^M$xU@ue-|d$a#JRH4>4zU5@vtZx8d=!xi) zfjtqEBU4EOVVkNk{kMcmA$sLA3e3koRj}Ok#yviilTo|Ezk2zg)QLi>nsd$K%^f}; zdW0Upu9M5o(XaQ)JR(T$M=FZA*b{_o+m40!WvY`ozC3qH(I-&6CKejqz2ditgDEt!q8AH-$ z?LB#KC$)2r( z@T5++(4xg1HKC2MxY{Db9Ph#%as%M=Ze+nSi@=hXEhv0Ul?B*xH}fL%i_qINd!&}K zgbpXK55u}Xby~rG)-nHk!q1cMUf3Xl@6DfgqV_!G#n^PnuzEuPHrW1C3cp#-hpJP+ ziD9&xBr#|I`YkE|IA8ivs?yBtTSQ*%v)0BHnrx?r{@bq#N7tH=cp_Dr9H z*0N9KL$WAf#JbscWT9&&4BvC~d%$++n6K%{izIOz4L5O%HWszp+X!uhim)Z_BauN? zPu|0y^d2-RutvBr50h;?lF2kCNZQo8xBIAK^8SU+klC{Z=X8n0=svB(%jZ2=cS>&B zvXeRG@*vuf~iN{84ErNocn_ z0dWNw+X7}q%szsy{OC8^kkmvrg&Ui~ZU?o4&6&~+Su@`+Az%war|>grbx3(E{Qi^} zA%|SSGO#sj&CK!njyCWU!#~UInrz@<|7c0z0}BHDISAm-7?w_!l15~d+z#1`FW3a6 z(T|q(LC6HB8ukF91R2$JKx69p$1y_nNY|*&!IY)W?nOFODxW_#x4;DOY{`FvCE$xi z%*e0My`ywFWulbAEk$AXf{H|GQvYCXiY$&{z4v@WKyP3nPW_wTrvD!=5GA1_W6j9Q zegpl!FDFJzK43s;{RlD-?WUi!8a~xDUgNIEm$-ciat=?;3m&t60D6N51$OC1;~`#f zqZVH?uJRDTlwA>>&L#98Hk@Msl#Z~rev{9#S4MPw@@22dSSoyI{4qc#d^7;4mJM|e z%8QkbCVMz= zqXY573EfQvFTmoe8f0?%G1eJ>(VEU7=d*%plitOpriWy{FFDsw;R`9kJi)nezf&Mo zziT}D7A1X(m(e#_et}{AJ)SRD(oeLOSX76a&mLSrC^jdmoNLHJuzM|BGS=2#p#Hb^ zR<_qE$~>a+>O5jFEy~*8QXXpnhs#T|5(Uid2xr_j6@b%3-yso-0A02|0YQvAP#)@l z^zAOEvVPK!&%;}4SnH;JPM%`I&+{8iMR6%`5lNkc2E7#y5LqDATcGfzW9?)sUo;D` zEXMPy!Gd7JDus1#?w~*^YDdHl5Z@8~rB=f(b&!xq(U8k~1w<%T0X1YWDD(O_iWw(k z18E5jyZhqv>59fe`fE=}Hw^Lk9&hp+^b7RR9)fX=;@U%Z)sGa(j!~%fi4gsT88U8O zu!#qFmWDGwxI&-oBXdlF10g)Mg7;?6E%L)%(yL1S+|-qJ?ptWJ5^v+|)!Vm&q@)a6 zQ*mz}7IRN$P{labtz|DPb&qMj1Qi+)@n_d?Rqw@*G{Svh)$Stj0MYD#@KAddHcU{4 zFUXd$Vs3c1@RIF%!UGxzv7HaH+FXtLK-&On*$83g@G^Xxd7VW-6BUhJ$A<-rI4KRxfdkay3)p+>Y*C>cM>5($rjuCG(K(AuqrisC zvA88QSlZSoZT`TldLIwGs2?g@XpvfWTRX^?(WoZ~!QC zS7d3d)@n6+bqi*6(BKPzT(DTh2jprp@&gVHfU$Np>FNRPsBBcQWi8RREZmjHJQK7vC1@!NN)0#qP5t{L?{_N%wm$$c#c%2+z~!!ya;;XGmrAhCfGTr!x~=Nc+dt;2&tFbgz`kwufGC4aX+E| z`GLux+e-TrUT;0?%zcZ;nUahEz&9lYkD0U(u9%Jzz5bsoS32=GX!eApe`s&wBUuDI1&LjYOm~x3ZWdi9H0UjIV83%uyO-WR_|E?A3ghi->5+-dv&Jfwd7G0>*TT10 zA#~m}T#cQ60jwc4hTz0F@nU(DS~K@rohhFugHVpfJ`)5ZtJdtACFsKLq}U^$&}BS} z|L|F15b0eO3g%U6PQXIRowr}U9*q+=-5}nAVy{8qlZkV&vZ{NOep3A=d1%eS3pT4+ zIiJ7gIS(C@*=?YnphwU-x%;`;ws&UDu7ByK{9fnJM$%-&Tri&Woa5a;|F-h^=21nj ziv{O2XUXNouAv${AwGQCp>0PROcb{5Tgnpl@nKS69Zlwp$_m=9VNcC=F4C6I>5&{D6OvFASyaJV^psY`D)9*(zIK{7ECO48l zIWPjQw>Zyb#ykHfVFyH_FaGcd{c>h+_dbfXh|KCG&73=(G0G7!tUi15a3I*3`;(5A z1yQDJiv{@d^e3aSp2QDZPt~54|M9sFTCS0OeQuapSnbqHgO!~%C8-+-t5YY?b!u9QvceN+n2}z(=q-`<-v-7Xvvrxf_1kx92vAW z6Yo0W)yOa0IhLe9(RHe7E;Se_`js_w{GLt?LTjz@z0ti3qyI>b{am&4#*^^vD<sDYYk&G|4WBz zFeC5fh@8=*WI5i>#r3TtG5JL3&Fl9PHBw|9 zZa}Zr>DdqFWw=&m%!tmXh5;izhWC_%bT<+XW&K{5FOmro^3;0SG5g7iROo*4Sq z_%hdXyf2@jEgJxC-}Hesaa@;HrTYPm$E$Yy#gMa5><#cZndcvQP*eKBpfI*20l;r( z!PUHs8Ob{_`#sS2pXG96315mtX?u z!ElM{E0pqYA7udgi}aioYsiq~7q`>b*%-(Xj*)Ppo4HtK zUYc%s_Osx5cPlda_H4__mWTot!TtJZpwJ6*lAKu(nWA<4FM(QM?<&pS6N@6Vev<<2 zSd+Y0SQOWUIa%RC9=Dz#notv*^y`fg9-y(+$%lJdQA7L-YmoR3WvZ60RVB`(5>~(oeZa6f4(4VteY{y356|!$`dvss}`_U z0iZm76iU_FFCIfY>4q zId!vmi3?~UPw&Yc$w*|xg1&-T9IF+j&n=;~^IPO>PJdILi{5+YB{~Mcu!t(SzHrT9 z`H@nya`oK%x%841i#$LAka%r=0YL(d&tEgNO*;S<$>PvbpVP9^|KdHtW8(`kH+A(l zAfFmMmI?Zxuk&MHG851%s8jf_2kO10CLZ{}|A=acO!QSgFh%(-9egLL_90j*az1@}NG0$HW@VLX!d-KM4g2eI z!RMw@0HF6;=7W(kxhFpHQe*e|5Z?Ssm_kkpvO4uVE#tbVfm!Xx+cd|O*}fymTJqz` z;g!vTZQf3%Kr&=8S63`O4LcAAKKdvIAS>4c%^e{D8MN6y0;D_T;T`J$)TjU;&;$O^ z{K>;2;$?+aI!Zrp!uKd69WrTUqErcPsy{*>Qjg)Td2`(^wKmlUcNNq(<#P(3mMpwq z_lBP&c{CEmnE@{bO2Ak(qD-b)pzO9M6C30pIHmq6akwvVl_6@T{XG z??9H9*t?HUgRcrjtG%EquP$$|obuv7os_3=0+gxQZ`C*B-$;x3q-2+DZx9t12#VyR z3`fH;{$&sGGl{iy%sg%X$k6g$-q>)9$E1WiBP;SUnBZlx=L;~k^Aw8QX6eSO|fIRGP*{=NDJRz{0Yf1%}FP-O~bpW!*b;C zE9%7mHzQ;k2Vc5!eX~*X6U%Wzay4qs9dHK|KU2QoWENkT*Ax;dEtq4kmiM%FMOo8& zt?0LJN7zQJ22N2Wj2gdhg}{>)Qsw1<63rPEp=YTbFY2%@<%xDrbP^4))h)^yAvz4K zjr#rV?$s&CR`{(~&J*`5gpRAsk4~o~O_QdSLlU`yvLy^M$&J|Jo zEeYK3wQI&EQUBG~HK}!ZsfWqHIsVM4TH{Q6KKjm;o)w@_L~iIdg*`#*Q~H6mI~u7s zl{w6h(>MQ{IP8~v5ZaE<{TGyK8$^puk)3YgB2aGCLth{O&*hHw9-Bl&s1@d}A$f|` zlEFSYJ3&t}3@E8Saky0!T^4g@Zg!$(`GdlQPsP3~7OQTA*JHqIgxPGvw2dYd zT7!Kp29H7`N2UnPUBPr5b%Ltaf6m&x+tCpD7a|jQVc$Z|+D*+?fxWdT->&^MC45I* z^+NM!AcMHXu)1JRmNGa)M0v~2Rhy@-u^ayVmG(Sw0OdcBTM)e@F^DG1mgvvy(Wy4D zFZc%!c9YlC7d%qi@k4-O!gE+Fe^RmZcmR@$V3$~&3rI^Xu7NQYINyzk7)^Z)mO3Xg zckh9Q@Fli6%vp$?9}N!8N13gCK?GS8<8rLC*0xeaa5G@FRagv3RMV4 zTzT&KkWxCMBrz(YX3BI|dM949=S`q-nYXcLpGo?Ebfn@7U5+;BzXZym+qacLmI&RA z>WHX?W4|8%chP_0<77U%+37ty0;)4*A@9gnoC>VEnK!UJ(PRd%GSBqDQhhdt0B(fp z4R_b^RYs)-qeS`}nII+p9OfU_gDEbSzDVR0-N6MLvY=d-cFEKPlgOH~oZ%3#+XrG6 z=UTq=vk06)iC$5ve2uwO=*4|@0eOK9t)RW27B}m8%=xeI0>OE!wY1_mIAX3N+NnUw zm<;K}3VQ*#dED*VynNP*1&iZQZTK`Ic<@$G(tu~fTK!n$8+#J=*GqA*ntc9E0!{vp zLC7c;#!{W_h-JsYc{WtVr!FpWk325b$E%HjA26d#oR7~p$RgxYd-CYqU#nB6 zv*q!VgHd=(IIutMIudf2Qkx&Q(LH4Uz7|H>g!w$O0~!?#zRUwYlhB*X2%jPFBxtmNy?f6U{W6tRvFraHUR9%+8qNrr` z7o=%cbW647_0Qq8){l5Ha*q>FuiVXq3JI346aISnF_%30$7IxS9&fUck)^BGX!j=NoOamhPh zQpS2Rxz>6|bpEh?Hwbm@=r_g?#|g^HDe650IFvh8a=_#if`Wu!==>aYq)^7f)&BKRq6@DA~=ih#R4!ZpEDp4N5U* z*AQ&N({r{;9aq}Qx2w)UVS8Xc+maXWNWJ_RZAq5Sp8fUE4>TD8VG^-x?}U#Rn=i-? zo;O|EKMMDuf|Mj8^?dxX%%4MJdgA#iQ#A0JjG7>4S}8+Ny4Z{yyZL+t?OK;%={yM6 z_@hvyt8%k56HcRN1#=I&9Y@AUH@Obq28!aMjMXPgZoIyG4K#ZGGPCI!cmWAQX9l~n zjIaxq#u+R*+jziz3{iBO(|6v6IJ1{}TwyN4phyFeCye9I1F*LuRItWzGjByts~xCa ze^mSm|8?}NFomKb!#+$_h#aHTd$Z6Tt4@XGFK#_avn);@+jmFF??41>&x5wT(dMe1 zwJ!aCjGk`VRbGIU7zrGl_trwDySj~?zv=tfn*Vv>;iCT~g=;(@ONs!_lBdrZ#f8wj zQ+S)*#93KCn~zAe6~1(1K4%FEt3K68$I+3K;wuF%CxCYABX(|0ydW*q|ElSY6e^6^ z1`#x&Vs$_T!?Oi&%|ANyMolBWd!jisdcy)R=f-J~caA3<`6xHtGt^G$V?P@|PV9bcP!XDfY zn7I427EU`ysGU3f@udoS<?etIuq_AIr1myhV=~2;;PZ_y^%KQx1b4KRZK# zQ+dd3(1=2jCjfk>q91;TvFALGjp~WK>3L6%%{5s}cMTD=2()ej`(87%UlOxQB8RVD zADOw*-R9A@zv&Q}x}wzLRdMXJjal56T>}$F#G2 zo%K&1x>5S+QTiRgc1jXX&aIMpWeb3I-hfdBE(Yfk2C55M^W=;y+B^o_Vr1{XC5Th{ zab$XsrS0jgAII6!o-e$Nu=>Sr-}3Pn$XS@n2YRb|U)xsm9&EQ)YZkgWD*Xw(u>Y9K}h5|uZa>$R27h(`bodYSXCRyr>iCe_M+t_6+PFrYF9i?_bR;6e`E6o86+=V_lWHa=NKQ`xcXbWr-;j^ zLh8vc_|7GXyxwPi)F=IXN9StXhsbwKZp`+Pmy`ihXx5tn1K-`~z+kgco3;Dw&D?4& zxw+=vdI0zwMiWh4+jLzQa>0)PzXn~TDL_T3_l!f>#KEBizV6bl3zbg+fr@7b0;-oa zC4}@GD1ZGb8}(OmGU7!+4FqPFc@lcA3eSqBwH_ zm=CV(O>E8V9-UffMJEr-{yR&xLh}drIAO~Odzpd)8cvN*1P3Po^+MIj-YtXGanqvH z;`2*j7dSL@hHNp=6bg#jcCR`lp0oxGUHT=M@+Vq|^{!V4F!+@Joa!EJx79?6&9CE! zz&=~ipK&Vfx~~{$Nbl5-?AsTOf8%ihazpj`U>^K7Xu~Z0W{n_Y2#uLAzVIca<8X=hWUEV#O1S}b4l_nq+O_UrXQ?)j> zDa=2CxbItUJ(ASRaV+H&VDpIvNs_GX-E?PPp`ny%^-K%?SR3H_!({eC^9nJrbNL+l zk1Pr0&m+ELgqw<`%~>cXUFozGL|_GC{<4NhsD3##ot?sPOZGg(K2~>CPD!#v>S$BS z&z3)DeeNmtcY9taUO5ow`t6tD*`k8?Qwy(doHj2JerXtUTmc{|{AlWo?lSyy<= zs;Cfc=iWiCylC`(?eO~ZsXs-Zz#!Q576>I~jZRRcypahIti zYHOGR9JTA$6Cg;CFCnl((08+wnezv97LOwvT%gcgHU-fFql1uQRBZ2$gp*0bx)B$a zh$7IYJO0z^1!n12A80R{Ny#|AE|qma*#Wdg!%gvU>pw?oC2c0BtqP~ zB=p7>Ond%%rTW2TK(Q?zLy{r4_qZZPiDB&LU5EG=(cjyEi1nL0{h#cx*-JZA4p*P( zU#d)mkL;)hG^Wau()e4$o<9{7WPSNLbgT;TdQ*_}V#Vi#_678EeA!M`k;zP=QQtY} z)y-BpVVCtEOU_n8v`o`(BOxj_=D6=%CxjTb`Irlhk}IAp?Ye6d6p}Vp)slSB_7QPD zo(P#6PINoN8huosL1xT5eRG2FOr3~Eo!!6mpYQvm!84iu^pr!%s)XZh1Bl3oDHp1h7ArmTdM+bp_$$NljP%dk;T)deVyHO{TDapC+v$C6$@kq(lAyE zumf1efbF0Sk9VJTuik^IuMX0k*K_-8N>&;prao-FZ`nzIzu_~{i6SwV{+%Kqgh^dZ zcZid6N3o{tWl9aBjlPN=n0ILo} zEmqIBHq@^%8@3KEa#%dt3HOcmxz?7-te}aTB+XqQaP6<0WGtUc#%vzot4K@N*M)Qn zXOhX2#lf^c&-c2nfCopx_`XW&eVkWJ1O1Rv!=qS@h%522Yw!fdt;C=&GtKihX`T_@ z%78Gf+UyQ(GUQ!EX^R+7+5MOkxX=hlsenDZl?4Y`>?|~(NadbG^4P0U6niRifl{9G zgv^dzses~(>IuYd<|%M&3}m~jRbOf+vA*(8_J0o)zAsOGZpA{pZH!r$s%Tv1!)jW} zD7}n6+^;U=;o)E4o)(pQUew|D;V0O0l3|%9f|q|^-o8}kRG8Mro(PBx z-V=1N3Mg#6zbecRPN6ShLy^)3&DDIa#v=eNruxsxvIjJ31wHn*$VDX}Ih;h1hrXK!Pe!JCryYd64kb&})(K3dWr&hjfWB=FQcYih2Y=4KMpgf9sKv5B* zU|k2f|X80q)4>^0zyQZv?NLsDUsfLuc3q_5R$x;=)K>+ z;a%%yEtWqVXU?2Gv-{qkLBq-HWtLywh0yVMnF*cV0d(lHkIIDQ%Udp^w{wbLkabHv z{>0~}f>A~ctInfW-`{$BTvHhGR?M9j59L9c@{o1aDz98_mNhLu!?!9O_;~+ODHacZ z#Z_LGJSerUn{UQ8ZUfk5w>l2D$Ufc+f4FS}roeaC;}LJ_w4KJuGYf(oVylIoCsRb% z9}E7j*Sa=g8ar{I<}WF=NK>L&PBj~c!z=>p*6(l%dRK0Oo4AvHqYQdLOEt$PNU;1A z)zEme@3hFOG(b#4t!?MTbO;93jGsm?aLTLyl2^bbD9QUzv@!=ci5#1Xd(o1)PH#fL zsB*gMl>|cugVhPywfmj{R(lHHGPdTn!VCSJJdAGWUz_azwO8ctuIc~)N_4$f=ZUKk z_hVL=Lt~Mk`AGi_z^c6bEI^zW52EQYw-cBix($`HyXhF8}>>2`D8r~9WT(V;=Xg9pc! z%)ok*lkXtyKVRIhG{3r{&I)%s%1sEMBufi2yc0GTn?7HAKO8tTk@8X*bc;qpzq9@Y zu*|&Z5j`j(p0%`Iuqd@wGydEuOpv|<1X6_PN})YX1s&+d-c3&T6xTMB(bm&jCLOx-?LS z3!(DQ#ZFI@*Y$GTUlTS2vh~X!Hwqw4T>&MAd$R51ggU-AwrXsdeD0)w;u1oS6TqSa zv^pChtAppgq z+1t9T24=r{lL+JX8o*z%mc;4>j)GhqXddF6lXg}k9-I^F1)0o2fGv9oMDibNF!3+n zY#%tUG+y_`@to*-`-DKOVi7O`cwliZg%655r7bNwowv$&mZ1Y7oIM%a0>n!0^H=NvC4eS{vR9-NO8vq}C)`KrHmYu@{A3k9B2ABo zizlSME{zKNXZ@8VeD^-%n}*yPRr)!7_s?q4Z-mw#nyRmMgH?#a^xgw62>{(qA4WB< zOU$JS>fBmfKV=;<38<~%vBYi7+_wF4mhaYl~|6|%!!a1Vzkzoa?;mTXb%+-#>7HEE}Gv(N}@pkrs+LS-synbk6+T`N_%@+Cb55?x^F~NM0pbKH|BW9B< zv*Hd87l|yD-il4kjCzki4X)xVIbBa){HSh$k29*m5d7t_=(v=f8YbXB8sGjr5o+1Ppl{gXo?HzgaW9^ zPSkGh%G@`6W#^D4j#eNK2rBx>iTTlsT9O%&p5((7T?KJ|Mt`|G%>q;olo~sBdWJ|( z8r?erfjrv_k`W-hDhHt7V+m>a#ZyJX3TlW>q*P@Y9JD#dU&JjgZKszuDO^8Na0t<< zm=$Px*{SRztuvC-L+lK45ws*3`{Y?^O4tn!`X5KeD2?m%ob4po&z+o1o{h9(I66&9 zNFT14h!E;&os%KZ(iI|^D;`d!yW&*={3||Qe5&kJ7RRNj%jZ<$XtN4TcC1SbNr;x@T%c8m6kwzX4F5@$Km1ot;>1{1 zpuI!4hHB%JG5H+e$bBH!lJu*NaRUKe@&M^ZLHdKkQ`tvmN@ow+`=mOLXcQF)(vLb;i$(dp~*x!1liQ`Q{4 z8sRIq_g;mhv@pMt^-{HIysd-k<*m$A_zjCH+V;MUoUmSRuYPorALv~T000t}he7Y~ zL|KaV5vWHFi(Bw-uLi1>I`9;`Te9pTjNz$d0Tw+`fcr*7~nXn>QKhd(?T_(BI@ z{(}T+cDBv+)yB}vP9_{2rwZ4fzkt9xA+M-l@UY>Z;P--ufKTAJZ2Wco-0MQoz|VPy zF3y2KcKQ$Y(hP3=@!O)hM`=Txpj6UsW2py5Gh4`Y9-N2`tawcs^d}(K2jWjpfw~FO zd17$Ptnb3e3Uoo>vzM*ZiH^Ih!`gkpJv$%}3*BnQ{m?yJv=Om1gNUX^vp$6?a3tTj z>k<(ez>oiG_X1RjB)~XTk6CRU-R+KFUEDb(UKa{4M%cg5&W~n&BG`&NIqs&h>!Ttl zNH_gARHr!Jo#OG6@BFp^08lnKTQ`K>=MjS@mrSsb;>BxSpfwbywwQXT>uqc)?A!e| z`s)SCm(PdzQNGIv8~-3nyK_g9za`z#DF4V}?3weYD?Xh|QvCGF{Y*Z|M4R=M;YDRgYAYC}7t=$bsJXrK1;+3ziRLl-QO6H(hQN&g0gpn&}4&757>y9{R za59STFdFopZr%8G>1*g~PdSgD!Moz@7WxOy$FQ3ZDpqCh zzYpi2p$DuN?Bjtw*tMiV__^8un^^ad^D`{JAB)`vZ=Na@fI#kCoB8&C1sU?7maM+K zgKtK?{ffO`s`C%fG+qjt#w|Ch1g?P`|22^R6fKhZ5DUvvXx{~0q`3gVSKn*z6;*Fv zj>g{iz8j~#Pw4~6#`ekayZw7#1K^%u_d~q&%m+5{jv}{>&*x~=c-S=#Sg^{;`@H3D z`e**A`o`L-Gv^a8yvzQJsd=es)2Yt0@0CB$b<=TyHZ=XfKxvKA=Ui)TBrBNLF)HRv* zLfPcVrw_$p`_Dc5BEWOxbMe9Z{k!;~Ja!^J*I(3Z(b=;5m8X~DrOKgPPyIXRF18Nb z@M5g0PWebhSDDfV4L-RJFankcH9kD}%*=cZs}2oWKheD@k>}HAEyfVPVU$D9--Hc3 z4Olb}xT%~>)A|4`l7Gz6L}pbWk{S ziB+C(Gk~97(MU>cXgi-v7ry17Ht_aJHrsr&ZX;0Z%jp;`0F&ZVr3xpuIra#A=&?P& zke*7>Z%#`aSgXjblX)^y?hZv57R6Ww+7f6d+I>Q4Z66BC^Q~mADIphRcFt43I2#6$ z{dqO8?aHT@3RwngpQyJ*$j$?2wLNIP4n7XYAu-~)_%wS(myr8jwi}g@v?K_@@su$l z6c(@AP_mR5qB++T)0QM%Hl$d?!^-pR-%MKY8*&Hhj~He#n?|gHNDZIEyY7EkgE{Iu zs9Mp^dpf>FXocWg1;p%MO>MZS3~li(o7A4)vc??!HaJ>&_s7&RsDQQn<6tMf{?Y(r zEa52Ps{pkn?|bj2??bJr#5e88l1^&;tg9jREANFMG8(LYmF4Hw2vWxqDdJz*#cq1M zr_(zJUR&?-sm6s3sNXeE-=Jwh5~Xlc~RE(wvE4+Rtl2}l20j1_tnq1_$q`Jtmn4XjA7*yYfwQizj)Jd#~QD?Wm#M>0jIt4sF_2ow+gm&9%>3a4I7uA@C0Q=?;aF$Dd6RAKRwBK}^ihK~~v#P}%^y5comg^VuuwUpClKv!> z-Wx?Vwc4Az^YZ0VbEJut8=?5$yeOK;aF3}iHUptGi6)1NDD}keKQ#;Q6n^xA=XYiP zTw)SYy~4Qd*o- zPuf&RuhN1hIXIJCRK=hRF0FU3qVL~^nkaVnm>XM*QU?RNzB#Y6Ygv6sf%Lma?{wPv zM0>9!?-`y6r49ZXjgJ_BB4z`}Mnnjb1AWMB39TNV3PhaPKmW|1rG6VYg&DoLP&nT3 zw(l_Gf>E+-ChgJj)Uf)&52tz)C93~?((OP#K9dHP_?f6GTBV80+U8L-nccEJ;gqJZ zJt#Gwl}PzfyOs}QZTLo%f&&5>O6}gkj*S*FtuZ$)30uPJS5rw?)Y2gi>ylDwRjmgc zRQ;52x2zHdE{nmo_MeH=y3X=@cb#otTz58nA2W9LDl@jXe01?!Ni~d(4Y`NuG0T%o zXsY-%>R&7%U#@)=y(qxAI*t~fDlC2NjYtGrrl1iH1p15~aU~8%b zGGyHcn~CY}-%mjJ*DVI@(7-q&&3N#PZA(Va0Q)5}%f@MEOnh^jb$e_l)tTvbknW>R zt{J+}QNk(W)G=b6)l$!c5O(FpW0TA&m4=x;VEbTU;4eaxY>pBeUOn4Ymr7$MPZ%ki zi-y%juyFapf{QaX>f3Gb;;S{XVRaP*oGG)*`wCX#MUOz#GEUXw46t~J6#EW2SnpvLlqt4*`*R5?2+IoP%S?ClHrur789+YY(qW@48Gjl1bvCs56C^>(`^yYiNTWTs%%SH}r)xn?AXT!g`&g%bUo!g|ZC%_^DpJIN&+)|m9V^5c5 z#;Q^Z3e@%cu!x999VKt^NU9*=L9lBHJ}ODlCu!gWvRtu_hjlFl6}iRNe;}jdUuY{uscKo_vy5PG*@li4?^&LJ}QoG?wGw6@Y=zL_3by6L69 zcuRu8Y#$=u93<}(*$B|*!Oww>egB48qsyobXpFW+h7GDTy=UNTn&rS%#WJF^m05;1t1`mO;J*)$+ei)>o3MbMsJ##l33 z>2Al-8j6g$>H~=bfqMgj*o9X<6MUP0JU1bAIGg1WPFk19xYHlEEu7ksu(v0w<3c*C zci!czBwkv%`~!Q|mk{7n{7X7Lb<=$;;(^?y&45kMStMcBXOwSKnKC^WC+-o}G4)VQ zpqHS(e#r!L^%TAldUgKk@j( z#qnKpycXh$xOxx{JNIyYGIQ5Cctfh*tD5d_7G8GV!6;NhpsScx{oRL*23;uKW=CDl zDrF+;0n)kpsq&s*YcS(U=e>1nlk@GxQf%w%LK=?sfper1HN)D*7Y&D z#m75#Vm)SY#dewMM4fuH>&x8o`Y)1j zL=T>RA&$8!DTE=|VxqRypqRKIr zT-4OEc>)&Zy3Zm_p@%@VXT;&c;nSAC(P39UPu6#?sGK|pXVQLG*m&Kgc2nt6Lzvq5 z*CZ$Q#;vS@md70qv`EdGh1DM1T94CPs@T@i@Rw1d5DlIrS`{*BQIvCzm7AUe$$gDl zrEs3S+csd(cF{4IwhSF!J?&FOtAHCyRtkDP&lg@$rl6l8DF*r?YVe!B8p;{3G##bO zJ=DV~=Car;1e-S7J2^SE@0nK^+LM=a&YjxN7&EbFV^DNv^o1-|6n#vY7MqPp8i-BN zjOxo_2=vTd{Upn3V3{%>_MjQ_Md9UaL?3?Dx6Rqlg;5mobCC63N2BJBb?L^}2L#m0 z{q-5QsOo`Kj!46#Z-mW9)n7>8h`W$ZZN4nylbzH1&atiZOgqc8A;WpuqXz~oWrfkY zYhUM-STsg&mzyQF2kC6>xNOa_uv%pPF$x}PyZ0E+3`o4Stu<8b0 zOrn=^lhCjr4{Sq_)j|FQCvaM3+zQW%sd(|(&m2)2>pOSJ*f&@1l(+XR92wuGHS2q zBb)$TR#pYz;6Na!n{wHDi4r_$FCAJWFUo}%6_BV6Hs;B7&$v|`#VDgyy{L=Y3rkvB z;32g_d8eUdouFsY{MBGhi4nshX$f7G}gq;TespV9eK%%3V^Q79b_)zyg(0fR%S8z~d#aC0(ULv0^;Sd1u1?quIy;4T|V zmtg>JbIJ9L9-Di}=a;cS?uXI(J^Ix#a#28IkAd$Z8G@^}$G%XuJE*=Cdk%~$%Do_5 z`{E-CXP%&AhpAPhMrxHZ&Y19*sr>R~Ha5F=Yu+>SJcS!r)+FoK7BPM=0rTJxv2S(f zcx!9AVM+Mgf$8spY#DtJQG!6arE+Cjn-`c%NNoB2Ep!w=eN~wxyg$tdvnWf#j(ixM z*{xsGCKDAl7SR5o8aSb5d=;AHbBnr-EN|hhbgw8-lLUc$xv{^iT5=}G7F!5O%LJZP zbGT;fRG;)fLnkc7`s_+{q1t;!Z4>94bc0+^nZ(y3#=-${2G`=};;DCnhK7HF^ce)w zcaJ_xIR+gj$PuSb5*^weq>A};r>1zj#nGausk9HH+jhe)RmtZDbKK!BzD;3q@rPS;5IDQlGjIkpL5>Tu;Fuhb9#E-6(|s3(>$v#FuA1uPR^1O9!1KuRR}I=^P-}7H|f=A z`bdXkUO~lbCoJ9`i#kiKfJp=l7SO?l9wh>e4>!?uP&LALE1;L8rJdecYJRvS+q^RC zxzXK@9t6{R|DE=1719unU1CY_XzBBy+ak`A@?rREw{u#Jp?w08S`X9+ zv#xS}Ez>P{GsrAQq%M=1Vg1k2GO4n*1t2&=AQ?Jy*_4QoMHw4CevZyxF1<_n43y#e zxT9oJHnbo2ALeZVr^Dx?Rm#L^FMGK8SKI2=xwJditPQUsDqrze?uc>S|39P2r}FwT!0?` zT=?G0-#@zmH3xJXEGbUk6Z7^zr;dGfQxOCp-YM9S85SjnzOX*wu3L=XNWQLMi`|H= z+&?@Pz8~iy$RT%7l;gn5Vpr>Zj1fX28ZgLFqHAJ7D?HJm22KBdw(SjmOP5aZ6tf$6 zYDQ(!=m(mzc%h|A$ze?2;3^B#y0h7HI-)dvBTetH#6ay&wcE$LZicXa`P`%<1_{n9*t7F}iHE&-S z40yFXXzfkKn~0@i3UIMJjWKSQ4*giK6rq1w7H9l2{2ZNd?zusrTSf7lzX}oCZ2k3~ zzCJ)Mfk3ABM>e!cx*gk`+CsP7LVutX_1RdvYU<-a$^?6$Y^+Uazf4OmVE(gKV z(v%U=JAYAAOuAOf-7NhtSJV2GgMsG{=6y_G6x!pRiyUf} zRTYFs0zHD@JLe~Va*3pAJN~QCOos*+TvFY>l*Ek|&Ay%!&h3(jNgYzr0&+(Td3Ya| z%!@k3i<Xe^7e~U%=;YPg>TuPhS=bM@9ci%veJ9d)C0LLF9;vSOyU`8fXmw&A8_k2B8lQM-|{B_YH z+iEwDzj^+xWJRl;`tPoEzr$HFgXuJaR^~{hrkiE_H#+APL8)D3vYI)5=JVi1l5>C$ zj{rWzX1bn5r0$`O`t@iWs{H77p={+YC-9&hG*mdnT$u42415=`7VE6<6Zl2011*94 zSH<21TsJ=FmSACCsIN1#TNTy5`Ju^V6zTUOhpU-?Moy+Xl6}uI&Hi#n?PqJo@}OX9 z?v0rq=#W`d@-C#H>c~}KSPeDsu*92uK9>1dOuIZcWx@j7e0-5v)WIK5obtPnZ2a>z zzvl)EDXQqk%@4-jo0frGVx3Yv6{?R$?#FKK8D9N&xXxkW=gjg?GS+8Gnjl@_I;0|h zQ!05EP&ixzP?C4kq(GA_=c9C?tHJxT{y!3n%L$AR31dRBv(8~P>FPcVXRY#Y<8PiD zFpHK+D1*k_wi9KDdy@ShOq1re^K)M5o}>8MUJ-vlp3)lf4#XvSQO@HL)XhRaf3;6Z z%_V|l+&lz-oicHZ9mH3=~K$5F6T&9AdYi2XQrQCnH04O zK0m&``+FcR0bb0Farp@@iH~7}U&Ln)RD@q}J-#QrU_)jNXA;xRU?e!(25;7l)@c`< zhRLJqx$&7hckVDA`t1-3AXhqL?5<`JDyCxt(>H+7TcZ`SwbFZUwB5rpZZ`EBETrdM z;C%m`+m7fHm4_EY2&NqC&y_UesNFbQ1T!S1{94WOy5N6vwHk z12*=w)4~PSr1+C|4lvQ_IlH*u-B$$UvNz<@6syoGjvf?5ud!Vr^_moGam%|yW;SUv-sC}{|>K$ zpr$>bqJXh6sV8yuz1MAj`_*wkMfd#!2Y}uHCaq7#oZe6@b$L;s(wX||h`Ju6(wbjM zBFSLko|zP9IwGuPP?(+W`8Uw36^B-Lce>5ep;ZApJ}Ia5d*roNoW8N&MPCp{+ck`F zA*ql5h!A``6-LZ>y4o=Ci=kPS&ZYR03a}5Opu_R{o&+RECk&mw@L`! zX;>MbEW_QF3Z#(Mg&^h)UcT3r)b0p85fAJt#0bYU*4OxHb2R@>+1=DRd|pjI<6)D}*3gQLeXp_8XP^c0Jydd7bSV0x9F1 zzC_Y)V14E3aK0;O=WUFe|5bi&aEm+cH-wNOpRiHUK%|_(75d^>?rVDT-A2on*N=;O zKl&rtJVPg^t^xPDh)X_Kk0630h3SYPpFACChlRkeJ3WQ!!bD#*eKg7P&Zq-rD&Xh& z&ew?AIGISvNI-610s{$lJot4yr2#}xGv?J+TzKzI#^%7o&-v$Ed~noJi5fdc4!!p9 zMGi=o1Dhlq_*9sq)GCY;C$9sBv%x0p8ws>?*7Z;H5gv}_THo(1Ek;0!>AOO|Ssv@D z%sJ3FB9YrBt1+uScsZOx!>T@lk#bV^pQ`h zY)F;}-nKcpe%|(U<&Sc{FGsd+-CB(G-N+01H23UYL99oM%LFrZ#EE;(r`>?m6U%&> zm=?<9tPv5&x9K_>Mbo~mJ#%SrcTldP4=&J~jBAIB#x(8GbjO<_4)@Tw9@tAbRMN)< z*bpj;{9xzzZ=u_-GN~1OA~}Rxh=V_7Y1MYCbs1Ok1~fn-VLFVv$e;PO4yK3RGhTu- zJf%rgM!Y-~iD1{{`QJHn51Wo9Zm?|@cPBMTXS9HPLb2ye>w@J84n-hs)k_X-X*wu& zF=yl{A_2iXEvd{tX{LI5H%Fn0ohXDyQ9`y0b{-Q1Y1m; zI!GJ>=Dk)zznh>@DK|bjI+q>t<%1NZFu8m~rs%09*HVRi?9`o^f%cl|pj-u)cu~N0 zw;x+7Jo$rBVAXUkvq?s7P)5=ax(!~(c+JlgNTw$#au1NAgFjxUbr5+Jf-xM^ zp6STD`L?eKSff(yss9!j7dBt=#kG@4rayIfm15V zPlwgXdUWvk(VjehoB}oh6E@8#N{Afwsk65|5Zo}fZ3|8uBs>P+aQBAz`hKoKpE5iG z9NG*d=bS$ipzoe3feyx(L>a1o>kXR8z^Qz(&>1eF-EbQEw>tBI3$}a!F)Y8zeYxj# z=i{0Me&=uRYYDs#mVWFY(KTcVzw!7(tB0i(WI1G`b+mH(#4Ka`L~oPS`ZJPdj|!3WS&v){^cg$6eKq%tDmr4a5VQq%xY#VNA8gNb<5SrK^0P8hgM?(_& zyToZRLN)Ko?TWK<7SzKIoYF1`#3~o~S=VM5oC&t@u#N$qdGJP)+D*#}Oz+JZTU@Y} zIu0CBdR?+!qa8DSqi?%Vwyp!0=OCKL`h57S?(iW$=8$q<~2GU`(TNq9>35F1gIZ-Xmo*vuvmyrT)Wo(O(_Rf;9N`J%oGc(%$&X#hK`m6*TFmB$j-GYqbY$E2Q>Q`fJx` z3PZ@^{B+B$^c|5OS{2yJ*LcMJE^92Zb>={m%srWk3j8_PTQ+l)2AKfedDYYv%zEUe^W z9<<%OA403iOX=^^FHMOK8Mmux&Kc%G1UE`I<%~X8JpkFgtq6Du$68ZVg_nF3O+qxu zK-Wfria_o!CZkAA^T-7TNLh>|Z=pvEl4UIF(yb2I{e7O%xS`M*&at~B86yD*BF-`S z^~Ql4f1j#l`00TJ16$8zD_x}R@`q#T%s-h2@VxAT^XaAsXekL%9@e7dwk3k&fwZ0Z z|NYcF4uSpWgAvlyDj$a+S0xh=ThD22J0SOW?y|w9*+PqF)DElN!zLhGUYCy62i0tx zUr?$7%3tl^lmApTy#`fHf1W^ow|xcmLT#-{(iMN|g(mA~nt;gr^Z2DqzE5DL?_uUU z=rB2T9D?!DaA*CVCr{n@JM+Pk(I|>JbN~tSsX^{RXsMj%VSWGB$Nc(jj=9!@9LnKZ zOdR*CRZV(f{~=Z+bbu65`cQ~(^P#+ho-f9B?ptAwnaJPO)D{|>m_!~#h6}QLC$nbc zphNK`Q?Cmvn01-eq_kviH3!!)`uqR?_s{<*@IMOte?ftuZB#bT4dY+mW9xVA=dAdW MuCY$ug*#9FA3CA^@&Et; literal 0 HcmV?d00001 diff --git a/docs/resources/modelscope.png b/docs/resources/modelscope.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb167d3fefdd804744be42404612032e4fc534f GIT binary patch literal 9547 zcmeHNc{r5q+eXM5$ueb$B*qfGw(LubeaITZ;FV>vyky^+iW1Rcm!)OwYql(74JC%G zWtYmn)R1kM-y_kap6~nXJH9`Duj3fc-E-Z~J@<88=Xssi{U}5Srb0_~go=oWh*nMY ztS%7|ISnxGpdbf+M=wsV0~ca9T@_`bTnyVJ@DDGWi)xp(w21hDF$EDR@ev}jttr4q zo|tuae4dz(Xy5nyBt%5F?1@N!%z**dt)F|qXX}~m>%J7?AG3jbDI`0y$!Svd?Tm>! zwjNtOt)K*4C|y*I-H3>odA2^pYP!c4h=`6~Q9G-o??pU2=pTkM@ZZ1SHb+CP%WqIH zt&th~YK}@UU+3K23z;R9GY1ZuhUMgJ7BHA1`W&=OAD*zfYu}mLQDlI$VHMNT8+P~9 zAwAb+cu;^^|6QD!MgJ3~iR+Bt96t|ribkqMFJUlf&pB)h_G_7R-23sQ@khh+*o3me z7NcAAvJ~{3ir0vUNl5n$kUi8drKu|aaa*frtdnxjMyrcA!MujWWyXXIGS!5#c=O#g z);8|d3Fn%VwVw8Vawxal#}*fJ`RY^Z-`A3$)a)sE&&G_?Rkw6wN95_Yo(h`06j76+ ze#W@fMAyrHv)pINA-er$p)YhGcAXv~W*O`A+rEl4Q#zjq6l?rxyIT${9;AmXD*Y4k z2XD5_MOupR_L7k47!dovkN+FGJtX)SHvi3(fxA8)Wf=-scTQuJ>_M&0`Ihs#f78~_ z9e~sqm!&)F=jQWJsV6S9@+7&I-6erud6Qgkk*+ljt%L@-7467##GY1d6V8;bYiU_JK?sk=lsw=V;8?YSFeY`B*_YrhE3a>1RH5i+Qvsn%?lO~zRcmDJ zvD?dA3efI_-1qPci;o+6IqJRLOllxzoRX&bY+kML`tngv*F4Xa4OH}zF|Acuq*BJj z0q*ZxSz=fa2$>QW?q>L{WPcYIq%tWfc~E{|BuL@y(olr!`vV) zQ9nd0#hirXhEJ_HS1G*p(w&>vs7SAEiB zuGOTNV|9fOYt!dV0JFRJLQXx>U+QUN35rKM2z!X4fcwn zz5#q=Ei_P~w`AdSfim)twrqe?Z*Ig;X`SN$?E6x|fZH?;HmCM%J3mrU6Ycqoaj2jR zn@e{xAAf&e>3DYnd3C+|cU{kSB}UdZ)6Q-Olb_pVtvrKTkEShMQ;Cd`;f(Cn<(cq6 zLHIOJ=|KMIgS3}o_)H!av5z6A4?0(@&#_k==?ItjrOLupfd%iuqqhmcPkr@_m+u5B z#;B|@s)yOSFJ_rfTx8;EdD|2Qg)lVn?VgW-Rtfa-iKMTkbg2*o1$mtmrx8JYy%;PJ z=?{TK!8&yX_ISJl3qDmKQS{l4V2MZs66GErZ31Rj0upr{?zlG-J87Rf&MA`KS=0rV zNGc#7jHC$D-@2#m?dtFXC{9d88G_mG0p4+5><8nZG$jSil$cO4nEg879a(K37zex5 zfZ(LrXGDQ<6!4CZqNfCmgD@aC(pnlhV0KQxJEi;*Fb=wJan#<#0nAPYct`a=rM~9x z#5)GNnOF2DJNaVd>+ALTvazBy51pK5ZST*ohbvY;Bj}h7y5CQq^uH|Gs!))=VT2f7 zEt_*QoSr$>Cg(iZ1-;erQ7=^XsgQ5eJE_HaU-`|!lEwbp^42f7Q@xzIeWad*MAnr? ztc<;rmmLe!NM@sJ%VX~k7J6qFaBM(E6#E)~*eJ_3(fxJX@`0OaVTfvp`Od_!bm@6BSKf+g$PR!@m3(q#p{9HBRX&bf{5FR`6zG<9tg=FfD_Ls&;9QZKJWowZ&pVgg}W zdKQ4y+=qISAa=;pYc=q&*peSg_e;6hV!S&OfChKhsS`WY-J?6!jP#JOgPn$8V9N!- zSPp{?g4p3qa36Sg@gy($8FG&7`dK!emTj*ym@OtU*MFd ztJRdrqji(+s?TU)lS$!`ww$u%mu|^xQN`%))4q|Sy|S(Yn-}KX=za^EB9@ecmIhX4 zKbrx)8PknI!+3F@#Csdsx==%zJ%`VD*(9wavP_2Gx}(f-%2kF5HJm|<0$k55WXdBl zH_KSYomz^!Pl&ACO8gScZ{kEd*%t{5uxCO{8|m=|J8tAwoQI!AuFOHkw1X>b7rRdd zuhLGZZ8|Kn2UizLCUe{_zoi&&V# zca7NbUeS_dlbt;1ZC@-{o>YLEm28{=)^{+T0BTlPPa_BnQse;`thK14!0aMG&9W?# z*l}s6(C@%?2{?{+*&6bL)vTbcn)S4JuK@30Iz0j)iF~0hSl_{?33vy|xeF#o{-h_S z^)l6enrQ^+=kId)d%vp)Ha}XA)uU?TSgTSWzGwCRQvKs}ok98&ZAajx%CM#gB zh8s&4=7Ml{HV*17?ou;q!@w+z#nd;)!){^mB9pdv;giY}h{0Z1-<`BSs8D>R#F)n=ugtHv46v zc)Lm5!SZgtNSVn<$wL{2eqrKI{vnyEDQHY&{c^zU=YVGK$<6O)jUAv96z`MmomyTocO@>Ci}>Ar?zk3!{t^?xVuKeK_E7Yw4}Os0*gkAGKK}8ci}fj zC9UtT_a|(}-0qqp)hE0^SHoRai7RpZCc^IZXW!bgp{r{~><$KQS0-zQiKUK4`es_1 z6Ea`Wo~<*L_L@R8MXfC@if;tBBo-M=`RpF1RY<6kX<4JVOw4g7jTeEC$fgofI(zW`_d#)s1CW1_58D5YQuk^V28n z>j`tI4wTf$x*7UCc;8t~#}WD3Atp_Fk2&Qe$tlg2o9zj?8t5B6ajw=}DC+%Y&g|b; z2I)o8V{7K*k~eiu+K=X3h+siabnwnp;A=L|i=z&IU%p+XChz#vjSmcj`y+7ME&;%z zo-r^v+r;o~(QmFxfc3umTksbUsCzf|W9od09=bBAE>O8ljVOv=im`S=>X)5S6@F9uwf*NBLpw^EnM%$oE&EL?$m2)i=mMNV(y~0Ia>{ai&Iy^lWi5R+ ztc7;LbO;!Z$Klo%mqK7G%~Ox$aT$qYb-lsWZ`gllt`?)0n8=IEDwPGWR>#3dsd^L% zS%z+5qoHM~eWc{2SNgo%ay>_Lm?K0b)9A*_s#BR8J|9c|a^Kc0aKl+{eat-RQ8dP(Aa=MEP~lvalYa1=01?|n5u%U1q7-3roUr;KPf@?5 z4|LYz)r|1&HyA#ddgwr&&q1mm%pzw|CXY=H+NoO1+nvO9VHoxtbYs5j~zz=HN+q( zybsK-M)Hs+aSXD}LTTXDhV*FSExMyV&T)4=>C&p-x%71z*d$4L`}w^tttuXCvPtwF z4N8;46+{ef4m`)0o=)qWWaG!m+HO_XpCCYX)6+w;gUdy?I;IpRk_r$1#j1gcI#c_I zrRmfpMqU1;Ta#{X|2!!o$125G1b7QqufyVOr9*!%vE^`)5>OW$>LZs_3DzczL^M#t z1owTk{{wWl0?i1L|Axpr{?}da z_O3-r@aMEzQ@i9yL6JbKyz0v{;+|A!L*>vDqJ8;+p1Gc8NxhGc`Oda3!}whB60?cQ zmB-qq&1h#<`$c^{ob2HisG=gEn=AcvV@SW*l857K&BlJKkR~QyeV{A*cCD(STALqf9p0M~DG0COfh`5>{ znP%W+7K--rPU=1?ws7cM6Uhy7n1RMF{_w*0l%-ES%TH2~BXwPHb&%sX_;kI-TFH2< z?m6T`C1sxKNMvMPIn(UOXDc$RO-$?^xepVASR?`)hlr>$Pf$o(iR|kt*MAI^EnKV> zHVB>8ppNbAkZAI0obD^Q8ti*A_#saH$>^(Wu(tm$&}4|YX2*jaUh4t&1Y@6rB|uCU zC{M2n9Ka5rG(dTRVBR=@z@r^_o2JCwlnDi~i#!70b6Pm-=doZn^;-i)Zh(Au*|JhW z$XDY6RKL;6f1M{}^iHh)_snY^C>{8bxs+y-Q$bEt1*V^lbW5Zw3I}!A#`)YZlx!}C z$UqzCaD2<<<7s48uPnZtlh>VUfV3dk8drv-S#01ovwU9D+Jc;i=A%{NGqmd*tl07M1%bRr4{hl5Gs>j_N101H z_3|vi$2j^w1SLaX7R(xcIBzPMHW^v>nIVF0A{|GkZ-H_5w@qnay2vOq+C1C&rH3l= zFCEGlEmVwq#i-Oiq1>7$xQ3;M+2jy~bVcaCDBusmJ{p_RSLYN%1@id<(dc7=Xt^vB zlx*%z81J@ZH<>N&{{c+JS`yYCGe2W0v?Q~ira(zsU<7`yC27*a`CMWAmO3JN$i6Q3 zRAcb#A*DiPDc5+V9~asz53%<$=Ek#7SzfxoAge~HYgeto~+{Yiom0hxP zB)Q=zGZy2Drgr8aqxjf195e1H424fCm$WST?4n)vgh-)nQweUgE@A&}GLiSma56OK zQ{A|CZ~Z#33kS4Ks<4al*W0^70x?#Ei~NDn6B38HyC*0+vs0vi;Cyb;T*3V5~=w z0IY-OgxnkI{anSc=gSrCyU>KP05?8_vTGD ./schema.json" - }, - "dependencies": { - "@gradio/atoms": "0.7.4", - "@gradio/client": "1.1.1", - "@gradio/icons": "0.4.1", - "@gradio/statustracker": "0.6.0", - "@gradio/utils": "0.4.2", - "@modelscope-studio/compiled": "workspace:*", - "@modelscope-studio/shared": "workspace:*" - }, - "devDependencies": { - "@gradio/preview": "0.9.1", - "typescript-json-schema": "^0.64.0" - }, - "main_changeset": true -} diff --git a/frontend/Flow/schema.ts b/frontend/Flow/schema.ts deleted file mode 100644 index ed21921d..00000000 --- a/frontend/Flow/schema.ts +++ /dev/null @@ -1 +0,0 @@ -export { FlowSchema } from '@modelscope-studio/compiled/src/Flow/type'; diff --git a/frontend/Lifecycle/CHANGELOG.md b/frontend/Lifecycle/CHANGELOG.md deleted file mode 100644 index 9f96bbf2..00000000 --- a/frontend/Lifecycle/CHANGELOG.md +++ /dev/null @@ -1,27 +0,0 @@ -# @modelscope-studio/lifecycle - -## 0.5.2 - -No significant changes to this package were made in this release. - -## 0.5.1 - -No significant changes to this package were made in this release. - -## 0.5.0 - -No significant changes to this package were made in this release. - -## 0.4.2 - -No significant changes to this package were made in this release. - -## 0.4.1 - -No significant changes to this package were made in this release. - -## 0.4.0 - -### Misc Changes - -- [#24](https://github.com/modelscope/modelscope-studio/pull/24) [`1b01a0b`](https://github.com/modelscope/modelscope-studio/commit/1b01a0b2e551d6afa26a9d8e6d34c2af2b92c57c) - add Lifecycle component. Thanks [@Col0ring](https://github.com/Col0ring)! diff --git a/frontend/Lifecycle/package.json b/frontend/Lifecycle/package.json deleted file mode 100644 index 9ebef378..00000000 --- a/frontend/Lifecycle/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@modelscope-studio/lifecycle", - "version": "0.5.2", - "private": false, - "description": "ModelScope Gradio Components", - "repository": "git@github.com:modelscope/modelscope-studio.git", - "license": "Apache-2.0", - "type": "module", - "exports": { - ".": "./Index.svelte", - "./package.json": "./package.json" - }, - "dependencies": { - "@gradio/utils": "0.4.2", - "svelte-i18n": "^4.0.0" - }, - "devDependencies": { - "@gradio/preview": "0.9.1" - }, - "main_changeset": true -} diff --git a/frontend/Markdown/gradio.config.js b/frontend/Markdown/gradio.config.js deleted file mode 100644 index a185f7a6..00000000 --- a/frontend/Markdown/gradio.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: [], - svelte: { - preprocess: [], - }, -}; diff --git a/frontend/Markdown/package.json b/frontend/Markdown/package.json deleted file mode 100644 index 31a90444..00000000 --- a/frontend/Markdown/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@modelscope-studio/markdown", - "version": "0.5.2", - "private": false, - "description": "ModelScope Gradio Components", - "repository": "git@github.com:modelscope/modelscope-studio.git", - "license": "Apache-2.0", - "type": "module", - "exports": { - ".": "./Index.svelte", - "./example": "./Example.svelte", - "./package.json": "./package.json" - }, - "dependencies": { - "@gradio/atoms": "0.7.4", - "@gradio/statustracker": "0.6.0", - "@gradio/utils": "0.4.2", - "@modelscope-studio/compiled": "workspace:*", - "@modelscope-studio/shared": "workspace:*" - }, - "devDependencies": { - "@gradio/preview": "0.9.1" - }, - "main_changeset": true -} diff --git a/frontend/MultimodalInput/gradio.config.js b/frontend/MultimodalInput/gradio.config.js deleted file mode 100644 index a185f7a6..00000000 --- a/frontend/MultimodalInput/gradio.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: [], - svelte: { - preprocess: [], - }, -}; diff --git a/frontend/MultimodalInput/package.json b/frontend/MultimodalInput/package.json deleted file mode 100644 index a779edf5..00000000 --- a/frontend/MultimodalInput/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "@modelscope-studio/multimodal-input", - "version": "0.5.2", - "private": false, - "description": "ModelScope Gradio Components", - "repository": "git@github.com:modelscope/modelscope-studio.git", - "license": "Apache-2.0", - "type": "module", - "exports": { - ".": "./Index.svelte", - "./example": "./Example.svelte", - "./package.json": "./package.json" - }, - "dependencies": { - "@gradio/atoms": "0.7.4", - "@gradio/button": "^0.2.43", - "@gradio/client": "1.1.1", - "@gradio/icons": "0.4.1", - "@gradio/statustracker": "0.6.0", - "@gradio/utils": "0.4.2", - "@modelscope-studio/compiled": "workspace:*", - "@modelscope-studio/shared": "workspace:*", - "wavesurfer.js": "^7.8.0" - }, - "devDependencies": { - "@gradio/preview": "0.9.1" - }, - "main_changeset": true -} diff --git a/frontend/WaterfallGallery/CHANGELOG.md b/frontend/WaterfallGallery/CHANGELOG.md deleted file mode 100644 index 5e8a2a9c..00000000 --- a/frontend/WaterfallGallery/CHANGELOG.md +++ /dev/null @@ -1,57 +0,0 @@ -# @modelscope-studio/waterfall-gallery - -## 0.5.2 - -No significant changes to this package were made in this release. - -## 0.5.2 - -### Patch Changes - -- Updated dependencies [[`c742328`](https://github.com/modelscope/modelscope-studio/commit/c742328f04992c5461211d8153f5166d784678ee)]: - - @modelscope-studio/shared@0.5.2 - -## 0.5.1 - -No significant changes to this package were made in this release. - -## 0.5.1 - -### Patch Changes - -- Updated dependencies [[`fca4451`](https://github.com/modelscope/modelscope-studio/commit/fca4451f433294e074507c62b4f5af7c1fb89be5)]: - - @modelscope-studio/shared@0.5.1 - -## 0.5.0 - -No significant changes to this package were made in this release. - -## 0.4.2 - -No significant changes to this package were made in this release. - -## 0.4.1 - -No significant changes to this package were made in this release. - -## 0.4.0 - -No significant changes to this package were made in this release. - -## 0.3.1 - -No significant changes to this package were made in this release. - -## 0.3.0 - -### Features - -- [#20](https://github.com/modelscope/modelscope-studio/pull/20) [`9a5dd22`](https://github.com/modelscope/modelscope-studio/commit/9a5dd226ee117d6130baa87cacdf902546ad952a) - upload logic with new gradio version. Thanks [@Col0ring](https://github.com/Col0ring)! - -## 0.2.1 - -No significant changes to this package were made in this release. - -## 0.2.0 - -No significant changes to this package were made in this release. diff --git a/frontend/WaterfallGallery/gradio.config.js b/frontend/WaterfallGallery/gradio.config.js deleted file mode 100644 index a185f7a6..00000000 --- a/frontend/WaterfallGallery/gradio.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: [], - svelte: { - preprocess: [], - }, -}; diff --git a/frontend/WaterfallGallery/package.json b/frontend/WaterfallGallery/package.json deleted file mode 100644 index 046cb834..00000000 --- a/frontend/WaterfallGallery/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "@modelscope-studio/waterfall-gallery", - "version": "0.5.2", - "description": "ModelScope Gradio Components", - "repository": "git@github.com:modelscope/modelscope-studio.git", - "license": "Apache-2.0", - "author": "", - "type": "module", - "exports": { - ".": "./Index.svelte", - "./package.json": "./package.json" - }, - "dependencies": { - "@gradio/atoms": "0.7.4", - "@gradio/button": "^0.2.43", - "@gradio/client": "1.1.1", - "@gradio/icons": "0.4.1", - "@gradio/statustracker": "0.6.0", - "@gradio/upload": "0.11.2", - "@gradio/utils": "0.4.2", - "@modelscope-studio/shared": "workspace:*", - "dequal": "^2.0.2" - }, - "devDependencies": { - "@gradio/preview": "0.9.1" - }, - "main_changeset": true -} diff --git a/frontend/antd/CHANGELOG.md b/frontend/antd/CHANGELOG.md new file mode 100644 index 00000000..84fdccf4 --- /dev/null +++ b/frontend/antd/CHANGELOG.md @@ -0,0 +1,25 @@ +# @modelscope-studio/antd + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! diff --git a/frontend/antd/affix/Index.svelte b/frontend/antd/affix/Index.svelte new file mode 100644 index 00000000..1e2cb70c --- /dev/null +++ b/frontend/antd/affix/Index.svelte @@ -0,0 +1,78 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedAffix then Affix} + + + + {/await} +{/if} + + diff --git a/frontend/antd/affix/affix.tsx b/frontend/antd/affix/affix.tsx new file mode 100644 index 00000000..b19b73a5 --- /dev/null +++ b/frontend/antd/affix/affix.tsx @@ -0,0 +1,13 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { Affix as AAffix, type GetProps } from 'antd'; + +export const Affix = sveltify>( + ({ target, ...props }) => { + const targetFunction = useFunction(target); + return ; + } +); + +export default Affix; diff --git a/frontend/antd/affix/gradio.config.js b/frontend/antd/affix/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/affix/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/affix/package.json b/frontend/antd/affix/package.json new file mode 100644 index 00000000..97da442b --- /dev/null +++ b/frontend/antd/affix/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-affix", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/alert/Index.svelte b/frontend/antd/alert/Index.svelte new file mode 100644 index 00000000..aa2c3668 --- /dev/null +++ b/frontend/antd/alert/Index.svelte @@ -0,0 +1,73 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedAlert then Alert} + + + + {/await} +{/if} + + diff --git a/frontend/antd/alert/alert.tsx b/frontend/antd/alert/alert.tsx new file mode 100644 index 00000000..3356eca7 --- /dev/null +++ b/frontend/antd/alert/alert.tsx @@ -0,0 +1,40 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { Alert as AAlert, type GetProps } from 'antd'; + +export const Alert = sveltify< + GetProps, + ['action', 'closable.closeIcon', 'description', 'icon', 'message'] +>(({ slots, afterClose, ...props }) => { + const afterCloseFunction = useFunction(afterClose); + return ( + : props.action} + closable={ + slots['closable.closeIcon'] + ? { + ...(typeof props.closable === 'object' ? props.closable : {}), + closeIcon: , + } + : props.closable + } + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + icon={slots.icon ? : props.icon} + message={ + slots.message ? : props.message + } + /> + ); +}); + +export default Alert; diff --git a/frontend/antd/alert/error-boundary/Index.svelte b/frontend/antd/alert/error-boundary/Index.svelte new file mode 100644 index 00000000..0dbd6224 --- /dev/null +++ b/frontend/antd/alert/error-boundary/Index.svelte @@ -0,0 +1,78 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedAlertErrorBoundary then AlertErrorBoundary} + + + + {/await} +{/if} + + diff --git a/frontend/antd/alert/error-boundary/alert.error-boundary.tsx b/frontend/antd/alert/error-boundary/alert.error-boundary.tsx new file mode 100644 index 00000000..a354c3b1 --- /dev/null +++ b/frontend/antd/alert/error-boundary/alert.error-boundary.tsx @@ -0,0 +1,27 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { Alert as AAlert, type GetProps } from 'antd'; + +export const AlertErrorBoundary = sveltify< + GetProps, + ['description', 'message'] +>(({ slots, ...props }) => { + return ( + + ) : ( + props.description + ) + } + message={ + slots.message ? : props.message + } + /> + ); +}); + +export default AlertErrorBoundary; diff --git a/frontend/antd/alert/error-boundary/gradio.config.js b/frontend/antd/alert/error-boundary/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/alert/error-boundary/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/alert/error-boundary/package.json b/frontend/antd/alert/error-boundary/package.json new file mode 100644 index 00000000..81358d1f --- /dev/null +++ b/frontend/antd/alert/error-boundary/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-alert.error-boundary", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/alert/gradio.config.js b/frontend/antd/alert/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/alert/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/alert/package.json b/frontend/antd/alert/package.json new file mode 100644 index 00000000..08fb77c3 --- /dev/null +++ b/frontend/antd/alert/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-alert", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/anchor/Index.svelte b/frontend/antd/anchor/Index.svelte new file mode 100644 index 00000000..61293226 --- /dev/null +++ b/frontend/antd/anchor/Index.svelte @@ -0,0 +1,77 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedAnchor then Anchor} + 0 ? $items : $children} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/anchor/anchor.tsx b/frontend/antd/anchor/anchor.tsx new file mode 100644 index 00000000..f01ff77e --- /dev/null +++ b/frontend/antd/anchor/anchor.tsx @@ -0,0 +1,45 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { Anchor as AAnchor, type GetProps } from 'antd'; + +import { type Item } from './context'; + +type AnchorProps = GetProps; +export const Anchor = sveltify< + AnchorProps & { + slotItems: Item[]; + } +>( + ({ + getContainer, + getCurrentAnchor, + children, + items, + slotItems, + ...props + }) => { + const getContainerFunction = useFunction(getContainer); + const getCurrentAnchorFunction = useFunction(getCurrentAnchor); + return ( + <> + {children} + { + // ["title"] + return ( + items || + renderItems[number]>(slotItems) + ); + }, [items, slotItems])} + getContainer={getContainerFunction} + getCurrentAnchor={getCurrentAnchorFunction} + /> + + ); + } +); + +export default Anchor; diff --git a/frontend/antd/anchor/context.ts b/frontend/antd/anchor/context.ts new file mode 100644 index 00000000..5512087d --- /dev/null +++ b/frontend/antd/anchor/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('anchor'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/anchor/gradio.config.js b/frontend/antd/anchor/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/anchor/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/anchor/item/Index.svelte b/frontend/antd/anchor/item/Index.svelte new file mode 100644 index 00000000..29f06320 --- /dev/null +++ b/frontend/antd/anchor/item/Index.svelte @@ -0,0 +1,86 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/anchor/item/gradio.config.js b/frontend/antd/anchor/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/anchor/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/anchor/item/package.json b/frontend/antd/anchor/item/package.json new file mode 100644 index 00000000..8a407e76 --- /dev/null +++ b/frontend/antd/anchor/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-anchor.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/anchor/package.json b/frontend/antd/anchor/package.json new file mode 100644 index 00000000..40ee8290 --- /dev/null +++ b/frontend/antd/anchor/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-anchor", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/auto-complete/Index.svelte b/frontend/antd/auto-complete/Index.svelte new file mode 100644 index 00000000..58657881 --- /dev/null +++ b/frontend/antd/auto-complete/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedAutoComplete then AutoComplete} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/auto-complete/auto-complete.tsx b/frontend/antd/auto-complete/auto-complete.tsx new file mode 100644 index 00000000..36b6cd1b --- /dev/null +++ b/frontend/antd/auto-complete/auto-complete.tsx @@ -0,0 +1,127 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { AutoCompleteContext } from '@svelte-preprocess-react/context'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { forwardRef, useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { AutoComplete as AAutoComplete, type GetProps } from 'antd'; + +import { type Item } from './context'; + +// eslint-disable-next-line react/display-name +const AutoCompleteChildrenWrapper = forwardRef< + HTMLElement, + { children?: React.ReactNode } +>(({ children, ...props }, ref) => { + return ( + { + return { + ...props, + elRef: ref, + }; + }, [props, ref])} + > + {children} + + ); +}); + +export const AutoComplete = sveltify< + GetProps & { + optionItems: Item[]; + onValueChange: (value: string) => void; + setSlotParams: SetSlotParams; + }, + ['allowClear.clearIcon', 'children', 'dropdownRender', 'notFoundContent'] +>( + ({ + slots, + children, + onValueChange, + filterOption, + onChange, + options, + optionItems, + getPopupContainer, + dropdownRender, + elRef, + setSlotParams, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const filterOptionFunction = useFunction(filterOption); + const dropdownRenderFunction = useFunction(dropdownRender); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> + {slots.children ? null : ( +

{children}
+ )} + + , + } + : props.allowClear + } + options={useMemo(() => { + return ( + options || + renderItems< + NonNullable['options']>[number] + >(optionItems, { + children: 'options', + }) + ); + }, [optionItems, options])} + onChange={(v, ...args) => { + onChange?.(v, ...args); + setValue(v as string); + }} + notFoundContent={ + slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ) + } + filterOption={filterOptionFunction || filterOption} + getPopupContainer={getPopupContainerFunction} + dropdownRender={ + slots.dropdownRender + ? renderParamsSlot( + { + slots, + setSlotParams, + key: 'dropdownRender', + }, + { clone: true } + ) + : dropdownRenderFunction + } + > + {slots.children ? ( + +
{children}
+ +
+ ) : null} +
+ + ); + } +); + +export default AutoComplete; diff --git a/frontend/antd/auto-complete/context.ts b/frontend/antd/auto-complete/context.ts new file mode 100644 index 00000000..f592e218 --- /dev/null +++ b/frontend/antd/auto-complete/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('auto-complete'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/auto-complete/gradio.config.js b/frontend/antd/auto-complete/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/auto-complete/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/auto-complete/option/Index.svelte b/frontend/antd/auto-complete/option/Index.svelte new file mode 100644 index 00000000..a9dae884 --- /dev/null +++ b/frontend/antd/auto-complete/option/Index.svelte @@ -0,0 +1,94 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/auto-complete/option/gradio.config.js b/frontend/antd/auto-complete/option/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/auto-complete/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/auto-complete/option/package.json b/frontend/antd/auto-complete/option/package.json new file mode 100644 index 00000000..cc09764f --- /dev/null +++ b/frontend/antd/auto-complete/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-auto-complete.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/auto-complete/package.json b/frontend/antd/auto-complete/package.json new file mode 100644 index 00000000..511f48a1 --- /dev/null +++ b/frontend/antd/auto-complete/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-auto-complete", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/avatar/Index.svelte b/frontend/antd/avatar/Index.svelte new file mode 100644 index 00000000..c5068973 --- /dev/null +++ b/frontend/antd/avatar/Index.svelte @@ -0,0 +1,87 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedAvatar then Avatar} + + + + {/await} +{/if} + + diff --git a/frontend/antd/avatar/avatar.tsx b/frontend/antd/avatar/avatar.tsx new file mode 100644 index 00000000..e4171fce --- /dev/null +++ b/frontend/antd/avatar/avatar.tsx @@ -0,0 +1,23 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { Avatar as AAvatar, type GetProps } from 'antd'; + +export const Avatar = sveltify, ['icon', 'src']>( + ({ slots, children, ...props }) => { + return ( + <> + {slots.icon ? children : null} + : props.icon} + src={slots.src ? : props.src} + > + {slots.icon ? null : children} + + + ); + } +); + +export default Avatar; diff --git a/frontend/antd/avatar/gradio.config.js b/frontend/antd/avatar/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/avatar/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/avatar/group/Index.svelte b/frontend/antd/avatar/group/Index.svelte new file mode 100644 index 00000000..8a0568c1 --- /dev/null +++ b/frontend/antd/avatar/group/Index.svelte @@ -0,0 +1,74 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedAvatarGroup then AvatarGroup} + + + + {/await} +{/if} + + diff --git a/frontend/antd/avatar/group/avatar.group.tsx b/frontend/antd/avatar/group/avatar.group.tsx new file mode 100644 index 00000000..ecc93959 --- /dev/null +++ b/frontend/antd/avatar/group/avatar.group.tsx @@ -0,0 +1,44 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useTargets } from '@utils/hooks/useTargets'; +import { Avatar as AAvatar, type GetProps } from 'antd'; + +export const AvatarGroup = sveltify< + GetProps, + ['max.popover.title', 'max.popover.content'] +>(({ slots, children, ...props }) => { + const targets = useTargets(children); + return ( + <> +
{children}
+ + ) : ( + props.max?.popover?.title + ), + content: slots['max.popover.content'] ? ( + + ) : ( + props.max?.popover?.content + ), + }, + }} + > + {targets.map((target, index) => { + return ; + })} + + + ); +}); + +export default AvatarGroup; diff --git a/frontend/antd/avatar/group/gradio.config.js b/frontend/antd/avatar/group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/avatar/group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/avatar/group/package.json b/frontend/antd/avatar/group/package.json new file mode 100644 index 00000000..9353d3bd --- /dev/null +++ b/frontend/antd/avatar/group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-avatar.group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/avatar/package.json b/frontend/antd/avatar/package.json new file mode 100644 index 00000000..433e0199 --- /dev/null +++ b/frontend/antd/avatar/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-avatar", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/badge/Index.svelte b/frontend/antd/badge/Index.svelte new file mode 100644 index 00000000..88aeeadf --- /dev/null +++ b/frontend/antd/badge/Index.svelte @@ -0,0 +1,80 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedBadge then Badge} + {#if $mergedProps._internal.layout} + + + + {:else} + + {/if} + {/await} +{/if} + + diff --git a/frontend/antd/badge/badge.tsx b/frontend/antd/badge/badge.tsx new file mode 100644 index 00000000..5be3d850 --- /dev/null +++ b/frontend/antd/badge/badge.tsx @@ -0,0 +1,20 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { Badge as ABadge, type GetProps } from 'antd'; + +export const Badge = sveltify, ['count', 'text']>( + ({ slots, ...props }) => { + return ( + <> + : props.count} + text={slots.text ? : props.text} + /> + + ); + } +); + +export default Badge; diff --git a/frontend/antd/badge/gradio.config.js b/frontend/antd/badge/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/badge/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/badge/package.json b/frontend/antd/badge/package.json new file mode 100644 index 00000000..5ff82104 --- /dev/null +++ b/frontend/antd/badge/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-badge", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/badge/ribbon/Index.svelte b/frontend/antd/badge/ribbon/Index.svelte new file mode 100644 index 00000000..44dd3e19 --- /dev/null +++ b/frontend/antd/badge/ribbon/Index.svelte @@ -0,0 +1,77 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedBadgeRibbon then BadgeRibbon} + + + + {/await} +{/if} + + diff --git a/frontend/antd/badge/ribbon/badge.ribbon.tsx b/frontend/antd/badge/ribbon/badge.ribbon.tsx new file mode 100644 index 00000000..4eb1d5cb --- /dev/null +++ b/frontend/antd/badge/ribbon/badge.ribbon.tsx @@ -0,0 +1,21 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { Badge as ABadge, type GetProps } from 'antd'; + +export const BadgeRibbon = sveltify, ['text']>( + ({ slots, children, ...props }) => { + return ( + <> + : props.text} + > + {children} + + + ); + } +); + +export default BadgeRibbon; diff --git a/frontend/antd/badge/ribbon/gradio.config.js b/frontend/antd/badge/ribbon/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/badge/ribbon/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/badge/ribbon/package.json b/frontend/antd/badge/ribbon/package.json new file mode 100644 index 00000000..2ca52113 --- /dev/null +++ b/frontend/antd/badge/ribbon/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-badge.ribbon", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/breadcrumb/Index.svelte b/frontend/antd/breadcrumb/Index.svelte new file mode 100644 index 00000000..6da140f0 --- /dev/null +++ b/frontend/antd/breadcrumb/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedBreadcrumb then Breadcrumb} + 0 ? $items : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/breadcrumb/breadcrumb.tsx b/frontend/antd/breadcrumb/breadcrumb.tsx new file mode 100644 index 00000000..e4895d4d --- /dev/null +++ b/frontend/antd/breadcrumb/breadcrumb.tsx @@ -0,0 +1,51 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Breadcrumb as ABreadcrumb, type GetProps } from 'antd'; +import type { ItemType } from 'antd/es/breadcrumb/Breadcrumb'; + +import { type Item } from './context'; + +export const Breadcrumb = sveltify< + GetProps & { + slotItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['separator', 'itemRender'] +>(({ slots, items, slotItems, setSlotParams, children, ...props }) => { + return ( + <> +
{children}
+ { + return items || renderItems(slotItems); + }, [items, slotItems])} + separator={ + slots.separator ? ( + + ) : ( + props.separator + ) + } + /> + + ); +}); + +export default Breadcrumb; diff --git a/frontend/antd/breadcrumb/context.ts b/frontend/antd/breadcrumb/context.ts new file mode 100644 index 00000000..3d66a13d --- /dev/null +++ b/frontend/antd/breadcrumb/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('breadcrumb'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/breadcrumb/gradio.config.js b/frontend/antd/breadcrumb/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/breadcrumb/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/breadcrumb/item/BreadcrumbItem.svelte b/frontend/antd/breadcrumb/item/BreadcrumbItem.svelte new file mode 100644 index 00000000..e82d644c --- /dev/null +++ b/frontend/antd/breadcrumb/item/BreadcrumbItem.svelte @@ -0,0 +1,173 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/breadcrumb/item/Index.svelte b/frontend/antd/breadcrumb/item/Index.svelte new file mode 100644 index 00000000..4b643c58 --- /dev/null +++ b/frontend/antd/breadcrumb/item/Index.svelte @@ -0,0 +1,42 @@ + + + + +{#await AwaitedBreadcrumbItem then BreadcrumbItem} + + + +{/await} + + diff --git a/frontend/antd/breadcrumb/item/gradio.config.js b/frontend/antd/breadcrumb/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/breadcrumb/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/breadcrumb/item/package.json b/frontend/antd/breadcrumb/item/package.json new file mode 100644 index 00000000..5bc17e02 --- /dev/null +++ b/frontend/antd/breadcrumb/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-breadcrumb.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/breadcrumb/package.json b/frontend/antd/breadcrumb/package.json new file mode 100644 index 00000000..79d543ea --- /dev/null +++ b/frontend/antd/breadcrumb/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-breadcrumb", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/button/Index.svelte b/frontend/antd/button/Index.svelte new file mode 100644 index 00000000..3ca3e94f --- /dev/null +++ b/frontend/antd/button/Index.svelte @@ -0,0 +1,86 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedButton then Button} + + {/await} +{/if} + + diff --git a/frontend/antd/button/button.tsx b/frontend/antd/button/button.tsx new file mode 100644 index 00000000..e305597a --- /dev/null +++ b/frontend/antd/button/button.tsx @@ -0,0 +1,17 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { Button as AButton, type GetProps } from 'antd'; + +export const Button = sveltify, ['icon']>( + ({ slots, ...props }) => { + return ( + : props.icon} + /> + ); + } +); + +export default Button; diff --git a/frontend/antd/button/gradio.config.js b/frontend/antd/button/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/button/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/button/group/Index.svelte b/frontend/antd/button/group/Index.svelte new file mode 100644 index 00000000..ff762b60 --- /dev/null +++ b/frontend/antd/button/group/Index.svelte @@ -0,0 +1,74 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedButtonGroup then ButtonGroup} + + + + {/await} +{/if} + + diff --git a/frontend/antd/button/group/button.group.less b/frontend/antd/button/group/button.group.less new file mode 100644 index 00000000..d37b5513 --- /dev/null +++ b/frontend/antd/button/group/button.group.less @@ -0,0 +1,20 @@ +.ms-gr-antd-container { + .ms-gr-antd-button-group { + react-portal-target { + &:not(:first-child) { + .ms-gr-antd-button { + border-start-start-radius: 0; + border-end-start-radius: 0; + margin-inline-start: calc(var(--ms-gr-antd-line-width) * -1); + } + } + + &:not(:last-child) { + .ms-gr-antd-button { + border-start-end-radius: 0; + border-end-end-radius: 0; + } + } + } + } +} diff --git a/frontend/antd/button/group/button.group.tsx b/frontend/antd/button/group/button.group.tsx new file mode 100644 index 00000000..a37d5a64 --- /dev/null +++ b/frontend/antd/button/group/button.group.tsx @@ -0,0 +1,26 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { Button as AButton, type GetProps, theme } from 'antd'; + +import './button.group.less'; + +export const ButtonGroup = sveltify< + GetProps & { + id?: string; + } +>(({ style, ...props }) => { + const { token } = theme.useToken(); + + return ( + + ); +}); + +export default ButtonGroup; diff --git a/frontend/antd/button/group/gradio.config.js b/frontend/antd/button/group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/button/group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/button/group/package.json b/frontend/antd/button/group/package.json new file mode 100644 index 00000000..2a274c55 --- /dev/null +++ b/frontend/antd/button/group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-button.group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/button/package.json b/frontend/antd/button/package.json new file mode 100644 index 00000000..7c409d28 --- /dev/null +++ b/frontend/antd/button/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-button", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/calendar/Index.svelte b/frontend/antd/calendar/Index.svelte new file mode 100644 index 00000000..e5b45b82 --- /dev/null +++ b/frontend/antd/calendar/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCalender then Calender} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} diff --git a/frontend/antd/calendar/calendar.tsx b/frontend/antd/calendar/calendar.tsx new file mode 100644 index 00000000..8a705495 --- /dev/null +++ b/frontend/antd/calendar/calendar.tsx @@ -0,0 +1,96 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Calendar as ACalendar, type GetProps } from 'antd'; +import dayjs from 'dayjs'; + +type CalendarProps = GetProps; + +function formatDayjs(date: any) { + if (typeof date === 'number') { + return dayjs(date * 1000); + } + return dayjs(date); +} + +export const Calendar = sveltify< + Omit & { + onChange?: (date: number, ...args: any[]) => void; + onPanelChange?: (date: number, ...args: any[]) => void; + onSelect?: (date: number, ...args: any[]) => void; + onValueChange: (date: number) => void; + setSlotParams: SetSlotParams; + }, + ['cellRender', 'fullCellRender', 'headerRender'] +>( + ({ + disabledDate, + value, + defaultValue, + validRange, + onChange, + onPanelChange, + onSelect, + onValueChange, + setSlotParams, + cellRender, + fullCellRender, + headerRender, + slots, + ...props + }) => { + const disabledDateFunction = useFunction(disabledDate); + const cellRenderFunction = useFunction(cellRender); + const fullCellRenderFunction = useFunction(fullCellRender); + const headerRenderFunction = useFunction(headerRender); + const validValue = useMemo(() => { + return value ? formatDayjs(value) : undefined; + }, [value]); + const validDefaultValue = useMemo(() => { + return defaultValue ? formatDayjs(defaultValue) : undefined; + }, [defaultValue]); + const validValidRange = useMemo(() => { + return Array.isArray(validRange) + ? (validRange.map((v) => formatDayjs(v)) as [dayjs.Dayjs, dayjs.Dayjs]) + : undefined; + }, [validRange]); + return ( + { + onValueChange(date.valueOf() / 1000); + onChange?.(date.valueOf() / 1000, ...args); + }} + onPanelChange={(date, ...args) => { + onPanelChange?.(date.valueOf() / 1000, ...args); + }} + onSelect={(date, ...args) => { + onSelect?.(date.valueOf() / 1000, ...args); + }} + /> + ); + } +); + +export default Calendar; diff --git a/frontend/antd/calendar/gradio.config.js b/frontend/antd/calendar/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/calendar/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/calendar/package.json b/frontend/antd/calendar/package.json new file mode 100644 index 00000000..08c25085 --- /dev/null +++ b/frontend/antd/calendar/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-calendar", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/card/Index.svelte b/frontend/antd/card/Index.svelte new file mode 100644 index 00000000..ee0d524d --- /dev/null +++ b/frontend/antd/card/Index.svelte @@ -0,0 +1,68 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCard then Card} + + + + {/await} +{/if} + + diff --git a/frontend/antd/card/card.tsx b/frontend/antd/card/card.tsx new file mode 100644 index 00000000..af34731b --- /dev/null +++ b/frontend/antd/card/card.tsx @@ -0,0 +1,41 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useTargets } from '@utils/hooks/useTargets'; +import { Card as ACard, type GetProps } from 'antd'; + +export const Card = sveltify< + GetProps & { + containsGrid?: boolean; + }, + ['actions', 'cover', 'extra', 'tabBarExtraContent', 'title'] +>(({ children, containsGrid, slots, ...props }) => { + const targets = useTargets(children, 'actions'); + return ( + : props.title} + extra={slots.extra ? : props.extra} + cover={slots.cover ? : props.cover} + tabBarExtraContent={ + slots.tabBarExtraContent ? ( + + ) : ( + props.tabBarExtraContent + ) + } + actions={ + targets.length > 0 + ? targets.map((target, index) => { + return ; + }) + : props.actions + } + > + {containsGrid ? : null} + {children} + + ); +}); + +export default Card; diff --git a/frontend/antd/card/gradio.config.js b/frontend/antd/card/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/card/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/card/grid/Index.svelte b/frontend/antd/card/grid/Index.svelte new file mode 100644 index 00000000..67b08232 --- /dev/null +++ b/frontend/antd/card/grid/Index.svelte @@ -0,0 +1,68 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCardGrid then CardGrid} + + + + {/await} +{/if} + + diff --git a/frontend/antd/card/grid/card.grid.tsx b/frontend/antd/card/grid/card.grid.tsx new file mode 100644 index 00000000..fa8389a2 --- /dev/null +++ b/frontend/antd/card/grid/card.grid.tsx @@ -0,0 +1,6 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { Card as ACard, type GetProps } from 'antd'; + +export const CardGrid = sveltify>(ACard.Grid); + +export default CardGrid; diff --git a/frontend/antd/card/grid/gradio.config.js b/frontend/antd/card/grid/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/card/grid/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/card/grid/package.json b/frontend/antd/card/grid/package.json new file mode 100644 index 00000000..3289638e --- /dev/null +++ b/frontend/antd/card/grid/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-card.grid", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/card/meta/Index.svelte b/frontend/antd/card/meta/Index.svelte new file mode 100644 index 00000000..18c1b36c --- /dev/null +++ b/frontend/antd/card/meta/Index.svelte @@ -0,0 +1,70 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCardMeta then CardMeta} + + + + {/await} +{/if} + + diff --git a/frontend/antd/card/meta/card.meta.tsx b/frontend/antd/card/meta/card.meta.tsx new file mode 100644 index 00000000..968acb61 --- /dev/null +++ b/frontend/antd/card/meta/card.meta.tsx @@ -0,0 +1,27 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { Card as ACard, type GetProps } from 'antd'; + +export const CardMeta = sveltify< + GetProps & { + id?: string; + }, + ['avatar', 'description', 'title'] +>(({ slots, ...props }) => { + return ( + : props.title} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + avatar={slots.avatar ? : props.avatar} + /> + ); +}); + +export default CardMeta; diff --git a/frontend/antd/card/meta/gradio.config.js b/frontend/antd/card/meta/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/card/meta/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/card/meta/package.json b/frontend/antd/card/meta/package.json new file mode 100644 index 00000000..ccd84493 --- /dev/null +++ b/frontend/antd/card/meta/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-card.meta", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/card/package.json b/frontend/antd/card/package.json new file mode 100644 index 00000000..e4606ae9 --- /dev/null +++ b/frontend/antd/card/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-card", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/carousel/Index.svelte b/frontend/antd/carousel/Index.svelte new file mode 100644 index 00000000..35df4afc --- /dev/null +++ b/frontend/antd/carousel/Index.svelte @@ -0,0 +1,73 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCarousel then Carousel} + + + + {/await} +{/if} + + diff --git a/frontend/antd/carousel/carousel.tsx b/frontend/antd/carousel/carousel.tsx new file mode 100644 index 00000000..c4936611 --- /dev/null +++ b/frontend/antd/carousel/carousel.tsx @@ -0,0 +1,30 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useTargets } from '@utils/hooks/useTargets'; +import { Carousel as ACarousel, type GetProps } from 'antd'; + +export const Carousel = sveltify>( + ({ afterChange, beforeChange, children, ...props }) => { + const afterChangeFunction = useFunction(afterChange); + const beforeChangeFunction = useFunction(beforeChange); + const targets = useTargets(children); + return ( + <> +
{children}
+ + {targets.map((target, index) => { + return ; + })} + + + ); + } +); + +export default Carousel; diff --git a/frontend/antd/carousel/gradio.config.js b/frontend/antd/carousel/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/carousel/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/carousel/package.json b/frontend/antd/carousel/package.json new file mode 100644 index 00000000..90bdf99f --- /dev/null +++ b/frontend/antd/carousel/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-carousel", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/cascader/Index.svelte b/frontend/antd/cascader/Index.svelte new file mode 100644 index 00000000..9cdb2328 --- /dev/null +++ b/frontend/antd/cascader/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCascader then Cascader} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/cascader/cascader.tsx b/frontend/antd/cascader/cascader.tsx new file mode 100644 index 00000000..888c21a1 --- /dev/null +++ b/frontend/antd/cascader/cascader.tsx @@ -0,0 +1,190 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Cascader as ACascader, type CascaderProps } from 'antd'; + +import { type Item } from './context'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} + +export const Cascader = sveltify< + CascaderProps & { + onValueChange: (value: string[] | number[]) => void; + onLoadData?: (...args: any[]) => void; + optionItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'suffixIcon', + 'maxTagPlaceholder', + 'notFoundContent', + 'expandIcon', + 'removeIcon', + 'displayRender', + 'tagRender', + 'dropdownRender', + 'showSearch.render', + ] +>( + ({ + slots, + children, + onValueChange, + onChange, + displayRender, + elRef, + getPopupContainer, + tagRender, + maxTagPlaceholder, + dropdownRender, + optionRender, + showSearch, + optionItems, + options, + setSlotParams, + onLoadData, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const displayRenderFunction = useFunction(displayRender); + const tagRenderFunction = useFunction(tagRender); + const optionRenderFunction = useFunction(optionRender); + const dropdownRenderFunction = useFunction(dropdownRender); + const maxTagPlaceholderFunction = useFunction(maxTagPlaceholder); + const supportShowSearchConfig = + typeof showSearch === 'object' || slots['showSearch.render']; + const showSearchConfig = getConfig(showSearch); + const showSearchFilterFunction = useFunction(showSearchConfig.filter); + const showSearchRenderFunction = useFunction(showSearchConfig.render); + const showSearchSortFunction = useFunction(showSearchConfig.sort); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + return ( + options || + renderItems[number]>( + optionItems + ) + ); + }, [options, optionItems])} + showSearch={ + supportShowSearchConfig + ? { + ...showSearchConfig, + filter: showSearchFilterFunction || showSearchConfig.filter, + render: slots['showSearch.render'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showSearch.render', + }) + : showSearchRenderFunction || showSearchConfig.render, + sort: showSearchSortFunction || showSearchConfig.sort, + } + : showSearch + } + loadData={onLoadData} + optionRender={optionRenderFunction} + getPopupContainer={getPopupContainerFunction} + dropdownRender={ + slots.dropdownRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'dropdownRender', + }) + : dropdownRenderFunction + } + displayRender={ + slots.displayRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'displayRender', + }) + : displayRenderFunction + } + tagRender={ + slots.tagRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'tagRender', + }) + : tagRenderFunction + } + onChange={(v, ...args) => { + onChange?.(v, ...args); + setValue(v); + }} + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + expandIcon={ + slots.expandIcon ? ( + + ) : ( + props.expandIcon + ) + } + removeIcon={ + slots.removeIcon ? ( + + ) : ( + props.removeIcon + ) + } + notFoundContent={ + slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ) + } + maxTagPlaceholder={ + slots.maxTagPlaceholder + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'maxTagPlaceholder', + }) + : maxTagPlaceholderFunction || maxTagPlaceholder + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + /> + + ); + } +); + +export default Cascader; diff --git a/frontend/antd/cascader/context.ts b/frontend/antd/cascader/context.ts new file mode 100644 index 00000000..4620c4bf --- /dev/null +++ b/frontend/antd/cascader/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('cascader'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/cascader/gradio.config.js b/frontend/antd/cascader/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/cascader/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/cascader/option/Index.svelte b/frontend/antd/cascader/option/Index.svelte new file mode 100644 index 00000000..ebf6958a --- /dev/null +++ b/frontend/antd/cascader/option/Index.svelte @@ -0,0 +1,90 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/cascader/option/gradio.config.js b/frontend/antd/cascader/option/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/cascader/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/cascader/option/package.json b/frontend/antd/cascader/option/package.json new file mode 100644 index 00000000..34248320 --- /dev/null +++ b/frontend/antd/cascader/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-cascader.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/cascader/package.json b/frontend/antd/cascader/package.json new file mode 100644 index 00000000..da29c32a --- /dev/null +++ b/frontend/antd/cascader/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-cascader", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/cascader/panel/Index.svelte b/frontend/antd/cascader/panel/Index.svelte new file mode 100644 index 00000000..24caf22a --- /dev/null +++ b/frontend/antd/cascader/panel/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCascaderPanel then CascaderPanel} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/cascader/panel/cascader.panel.tsx b/frontend/antd/cascader/panel/cascader.panel.tsx new file mode 100644 index 00000000..eac65d3c --- /dev/null +++ b/frontend/antd/cascader/panel/cascader.panel.tsx @@ -0,0 +1,72 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useMemo } from 'react'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { renderItems } from '@utils/renderItems'; +import { Cascader as ACascader, type CascaderPanelProps } from 'antd'; + +import { type Item } from '../context'; + +export const CascaderPanel = sveltify< + CascaderPanelProps & { + onValueChange: (value: string[] | number[]) => void; + onLoadData?: (...args: any[]) => void; + optionItems: Item[]; + children?: React.ReactNode; + }, + ['notFoundContent', 'expandIcon'] +>( + ({ + slots, + children, + onValueChange, + onChange, + onLoadData, + optionItems, + options, + ...props + }) => { + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + return ( + options || + renderItems[number]>( + optionItems + ) + ); + }, [options, optionItems])} + loadData={onLoadData} + onChange={(v, ...args) => { + onChange?.(v, ...args); + setValue(v); + }} + expandIcon={ + slots.expandIcon ? ( + + ) : ( + props.expandIcon + ) + } + notFoundContent={ + slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ) + } + /> + + ); + } +); + +export default CascaderPanel; diff --git a/frontend/antd/cascader/panel/gradio.config.js b/frontend/antd/cascader/panel/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/cascader/panel/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/cascader/panel/package.json b/frontend/antd/cascader/panel/package.json new file mode 100644 index 00000000..9bb1a881 --- /dev/null +++ b/frontend/antd/cascader/panel/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-cascader.panel", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/checkbox/Index.svelte b/frontend/antd/checkbox/Index.svelte new file mode 100644 index 00000000..bb98b92d --- /dev/null +++ b/frontend/antd/checkbox/Index.svelte @@ -0,0 +1,79 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCheckbox then Checkbox} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/checkbox/checkbox.tsx b/frontend/antd/checkbox/checkbox.tsx new file mode 100644 index 00000000..9695d686 --- /dev/null +++ b/frontend/antd/checkbox/checkbox.tsx @@ -0,0 +1,21 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { Checkbox as ACheckbox, type GetProps } from 'antd'; + +export const Checkbox = sveltify< + GetProps & { + onValueChange: (value: boolean) => void; + } +>(({ onValueChange, onChange, elRef, ...props }) => { + return ( + { + onChange?.(e); + onValueChange(e.target.checked); + }} + /> + ); +}); + +export default Checkbox; diff --git a/frontend/antd/checkbox/context.ts b/frontend/antd/checkbox/context.ts new file mode 100644 index 00000000..0905e21c --- /dev/null +++ b/frontend/antd/checkbox/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('checkbox-group'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/checkbox/gradio.config.js b/frontend/antd/checkbox/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/checkbox/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/checkbox/group/Index.svelte b/frontend/antd/checkbox/group/Index.svelte new file mode 100644 index 00000000..6ce0e365 --- /dev/null +++ b/frontend/antd/checkbox/group/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCheckboxGroup then CheckboxGroup} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/checkbox/group/checkbox.group.tsx b/frontend/antd/checkbox/group/checkbox.group.tsx new file mode 100644 index 00000000..7020542a --- /dev/null +++ b/frontend/antd/checkbox/group/checkbox.group.tsx @@ -0,0 +1,47 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { Checkbox as ACheckbox, type GetProps } from 'antd'; + +import { type Item } from '../context'; + +export const CheckboxGroup = sveltify< + GetProps & { + onValueChange: (value: (string | number | boolean)[]) => void; + optionItems: Item[]; + } +>( + ({ + onValueChange, + onChange, + elRef, + optionItems, + options, + children, + ...props + }) => { + return ( + <> +
{children}
+ { + return ( + options || + renderItems< + NonNullable['options']>[number] + >(optionItems) + ); + }, [optionItems, options])} + onChange={(v: any[]) => { + onChange?.(v); + onValueChange(v); + }} + /> + + ); + } +); + +export default CheckboxGroup; diff --git a/frontend/antd/checkbox/group/gradio.config.js b/frontend/antd/checkbox/group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/checkbox/group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/checkbox/group/option/Index.svelte b/frontend/antd/checkbox/group/option/Index.svelte new file mode 100644 index 00000000..1449b22e --- /dev/null +++ b/frontend/antd/checkbox/group/option/Index.svelte @@ -0,0 +1,95 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/checkbox/group/option/gradio.config.js b/frontend/antd/checkbox/group/option/gradio.config.js new file mode 100644 index 00000000..7b2fe8dd --- /dev/null +++ b/frontend/antd/checkbox/group/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/checkbox/group/option/package.json b/frontend/antd/checkbox/group/option/package.json new file mode 100644 index 00000000..2518ecef --- /dev/null +++ b/frontend/antd/checkbox/group/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-checkbox.group.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/checkbox/group/package.json b/frontend/antd/checkbox/group/package.json new file mode 100644 index 00000000..caca02f0 --- /dev/null +++ b/frontend/antd/checkbox/group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-checkbox.group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/checkbox/package.json b/frontend/antd/checkbox/package.json new file mode 100644 index 00000000..aad1d284 --- /dev/null +++ b/frontend/antd/checkbox/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-checkbox", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/collapse/Index.svelte b/frontend/antd/collapse/Index.svelte new file mode 100644 index 00000000..4ab19a1a --- /dev/null +++ b/frontend/antd/collapse/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedCollapse then Collapse} + 0 ? $items : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/collapse/collapse.tsx b/frontend/antd/collapse/collapse.tsx new file mode 100644 index 00000000..f7511cf5 --- /dev/null +++ b/frontend/antd/collapse/collapse.tsx @@ -0,0 +1,58 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Collapse as ACollapse, type GetProps } from 'antd'; + +import { type Item } from './context'; + +type CollapseProps = GetProps; +export const Collapse = sveltify< + CollapseProps & { + slotItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['expandIcon'] +>( + ({ + slots, + items, + slotItems, + children, + onChange, + setSlotParams, + expandIcon, + ...props + }) => { + const expandIconFunction = useFunction(expandIcon); + return ( + <> + {children} + { + onChange?.(key); + }} + expandIcon={ + slots.expandIcon + ? renderParamsSlot({ slots, setSlotParams, key: 'expandIcon' }) + : expandIconFunction + } + items={useMemo(() => { + // ['label','extra', 'children'] + return ( + items || + renderItems[number]>( + slotItems + ) + ); + }, [items, slotItems])} + /> + + ); + } +); + +export default Collapse; diff --git a/frontend/antd/collapse/context.ts b/frontend/antd/collapse/context.ts new file mode 100644 index 00000000..98a19d3d --- /dev/null +++ b/frontend/antd/collapse/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('collapse'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/collapse/gradio.config.js b/frontend/antd/collapse/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/collapse/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/collapse/item/Index.svelte b/frontend/antd/collapse/item/Index.svelte new file mode 100644 index 00000000..efcee324 --- /dev/null +++ b/frontend/antd/collapse/item/Index.svelte @@ -0,0 +1,93 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/collapse/item/gradio.config.js b/frontend/antd/collapse/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/collapse/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/collapse/item/package.json b/frontend/antd/collapse/item/package.json new file mode 100644 index 00000000..0da9d083 --- /dev/null +++ b/frontend/antd/collapse/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-collapse.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/collapse/package.json b/frontend/antd/collapse/package.json new file mode 100644 index 00000000..bd26edfa --- /dev/null +++ b/frontend/antd/collapse/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-collapse", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/color-picker/Index.svelte b/frontend/antd/color-picker/Index.svelte new file mode 100644 index 00000000..d301d182 --- /dev/null +++ b/frontend/antd/color-picker/Index.svelte @@ -0,0 +1,91 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedColorPicker then ColorPicker} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/color-picker/color-picker.tsx b/frontend/antd/color-picker/color-picker.tsx new file mode 100644 index 00000000..9d914c0f --- /dev/null +++ b/frontend/antd/color-picker/color-picker.tsx @@ -0,0 +1,84 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useTargets } from '@utils/hooks/useTargets'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { ColorPicker as AColorPicker, type GetProps } from 'antd'; + +import { type Item } from './context'; + +export const ColorPicker = sveltify< + GetProps & { + onValueChange: (value: string) => void; + onChange?: (value: string, ...args: any[]) => void; + value_format: 'rgb' | 'hex' | 'hsb'; + presetItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['panelRender', 'showText'] +>( + ({ + onValueChange, + onChange, + panelRender, + showText, + value, + presets, + presetItems, + children, + value_format, + setSlotParams, + slots, + ...props + }) => { + const panelRenderFunction = useFunction(panelRender); + const showTextFunction = useFunction(showText); + const targets = useTargets(children); + + return ( + <> + {targets.length === 0 && ( +
{children}
+ )} + + { + return ( + presets || + renderItems< + NonNullable['presets']>[number] + >(presetItems) + ); + }, [presets, presetItems])} + showText={ + slots.showText + ? renderParamsSlot({ slots, setSlotParams, key: 'showText' }) + : showTextFunction || showText + } + panelRender={ + slots.panelRender + ? renderParamsSlot({ slots, setSlotParams, key: 'panelRender' }) + : panelRenderFunction + } + onChange={(v, ...args) => { + const color = { + rgb: v.toRgbString(), + hex: v.toHexString(), + hsb: v.toHsbString(), + }; + onChange?.(color[value_format], ...args); + onValueChange(color[value_format]); + }} + > + {targets.length === 0 ? null : children} + + + ); + } +); + +export default ColorPicker; diff --git a/frontend/antd/color-picker/context.ts b/frontend/antd/color-picker/context.ts new file mode 100644 index 00000000..6c841d56 --- /dev/null +++ b/frontend/antd/color-picker/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('color-picker'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/color-picker/gradio.config.js b/frontend/antd/color-picker/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/color-picker/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/color-picker/package.json b/frontend/antd/color-picker/package.json new file mode 100644 index 00000000..f725b70b --- /dev/null +++ b/frontend/antd/color-picker/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-color-picker", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/color-picker/preset/Index.svelte b/frontend/antd/color-picker/preset/Index.svelte new file mode 100644 index 00000000..cf485d41 --- /dev/null +++ b/frontend/antd/color-picker/preset/Index.svelte @@ -0,0 +1,95 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/color-picker/preset/gradio.config.js b/frontend/antd/color-picker/preset/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/color-picker/preset/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/color-picker/preset/package.json b/frontend/antd/color-picker/preset/package.json new file mode 100644 index 00000000..742ac13e --- /dev/null +++ b/frontend/antd/color-picker/preset/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-color-picker.preset", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/config-provider/Index.svelte b/frontend/antd/config-provider/Index.svelte new file mode 100644 index 00000000..7ddc556f --- /dev/null +++ b/frontend/antd/config-provider/Index.svelte @@ -0,0 +1,70 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedConfigProvider then ConfigProvider} + + + + {/await} +{/if} diff --git a/frontend/antd/config-provider/config-provider.tsx b/frontend/antd/config-provider/config-provider.tsx new file mode 100644 index 00000000..97010d58 --- /dev/null +++ b/frontend/antd/config-provider/config-provider.tsx @@ -0,0 +1,139 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useEffect, useState } from 'react'; +import { StyleProvider } from '@ant-design/cssinjs'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { ConfigProvider as AConfigProvider, type GetProps, theme } from 'antd'; +import type { Locale } from 'antd/es/locale'; +import dayjs from 'dayjs'; +import { produce } from 'immer'; + +import 'dayjs/locale/zh-cn'; + +import { locales } from './locales'; + +const combinePropsAndSlots = ( + props: Record, + slots: Record +) => { + return produce(props, (draft) => { + Object.keys(slots).forEach((slot) => { + const splits = slot.split('.'); + let current = draft; + for (let i = 0; i < splits.length - 1; i++) { + const split = splits[i]; + if (!current[split]) { + current[split] = {}; + } + current = current[split]; + } + current[splits[splits.length - 1]] = ( + + ); + }); + }); +}; + +type ConfigProviderProps = GetProps; + +export const ConfigProvider = sveltify< + Omit & { + themeMode: string; + theme?: Omit & { + algorithm?: { + // Auto recognition + dark?: boolean; + compact?: boolean; + }; + }; + locale?: string; + className?: string; + style?: React.CSSProperties; + id?: string; + setSlotParams: SetSlotParams; + }, + ['renderEmpty'] +>( + ({ + slots, + themeMode, + id, + className, + style, + locale: localeProp, + getTargetContainer, + getPopupContainer, + renderEmpty, + setSlotParams, + children, + ...props + }) => { + const [locale, setLocale] = useState(); + const algorithm = { + dark: themeMode === 'dark' ? true : false, + ...(props.theme?.algorithm || {}), + }; + const getPopupContainerFunction = useFunction(getPopupContainer); + const getTargetContainerFunction = useFunction(getTargetContainer); + const renderEmptyFunction = useFunction(renderEmpty); + useEffect(() => { + if (localeProp && locales[localeProp]) { + locales[localeProp]().then((m) => { + setLocale(m.default); + if (localeProp === 'zh_CN') { + dayjs.locale('zh-cn'); + } + }); + } + }, [localeProp]); + + return ( +
+ + { + switch (algo) { + case 'dark': + return algorithm[algo] + ? theme.darkAlgorithm + : theme.defaultAlgorithm; + case 'compact': + return algorithm[algo] ? theme.compactAlgorithm : null; + default: + return null; + } + }) + .filter(Boolean) as NonNullable< + ConfigProviderProps['theme'] + >['algorithm'], + }} + > + {children} + + +
+ ); + } +); + +export default ConfigProvider; diff --git a/frontend/antd/config-provider/gradio.config.js b/frontend/antd/config-provider/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/config-provider/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/config-provider/locales.ts b/frontend/antd/config-provider/locales.ts new file mode 100644 index 00000000..2d0cb08a --- /dev/null +++ b/frontend/antd/config-provider/locales.ts @@ -0,0 +1,74 @@ +import type { Locale } from 'antd/es/locale'; + +export const locales: Record Promise<{ default: Locale }>> = { + ar_EG: () => import('antd/locale/ar_EG'), + az_AZ: () => import('antd/locale/az_AZ'), + bg_BG: () => import('antd/locale/bg_BG'), + bn_BD: () => import('antd/locale/bn_BD'), + by_BY: () => import('antd/locale/by_BY'), + ca_ES: () => import('antd/locale/ca_ES'), + cs_CZ: () => import('antd/locale/cs_CZ'), + da_DK: () => import('antd/locale/da_DK'), + de_DE: () => import('antd/locale/de_DE'), + el_GR: () => import('antd/locale/el_GR'), + en_GB: () => import('antd/locale/en_GB'), + en_US: () => import('antd/locale/en_US'), + es_ES: () => import('antd/locale/es_ES'), + et_EE: () => import('antd/locale/et_EE'), + eu_ES: () => import('antd/locale/eu_ES'), + fa_IR: () => import('antd/locale/fa_IR'), + fi_FI: () => import('antd/locale/fi_FI'), + fr_BE: () => import('antd/locale/fr_BE'), + fr_CA: () => import('antd/locale/fr_CA'), + fr_FR: () => import('antd/locale/fr_FR'), + ga_IE: () => import('antd/locale/ga_IE'), + gl_ES: () => import('antd/locale/gl_ES'), + he_IL: () => import('antd/locale/he_IL'), + hi_IN: () => import('antd/locale/hi_IN'), + hr_HR: () => import('antd/locale/hr_HR'), + hu_HU: () => import('antd/locale/hu_HU'), + hy_AM: () => import('antd/locale/hy_AM'), + id_ID: () => import('antd/locale/id_ID'), + is_IS: () => import('antd/locale/is_IS'), + it_IT: () => import('antd/locale/it_IT'), + ja_JP: () => import('antd/locale/ja_JP'), + ka_GE: () => import('antd/locale/ka_GE'), + kk_KZ: () => import('antd/locale/kk_KZ'), + km_KH: () => import('antd/locale/km_KH'), + kmr_IQ: () => import('antd/locale/kmr_IQ'), + kn_IN: () => import('antd/locale/kn_IN'), + ko_KR: () => import('antd/locale/ko_KR'), + ku_IQ: () => import('antd/locale/ku_IQ'), + lt_LT: () => import('antd/locale/lt_LT'), + lv_LV: () => import('antd/locale/lv_LV'), + mk_MK: () => import('antd/locale/mk_MK'), + ml_IN: () => import('antd/locale/ml_IN'), + mn_MN: () => import('antd/locale/mn_MN'), + ms_MY: () => import('antd/locale/ms_MY'), + my_MM: () => import('antd/locale/my_MM'), + nb_NO: () => import('antd/locale/nb_NO'), + ne_NP: () => import('antd/locale/ne_NP'), + nl_BE: () => import('antd/locale/nl_BE'), + nl_NL: () => import('antd/locale/nl_NL'), + pl_PL: () => import('antd/locale/pl_PL'), + pt_BR: () => import('antd/locale/pt_BR'), + pt_PT: () => import('antd/locale/pt_PT'), + ro_RO: () => import('antd/locale/ro_RO'), + ru_RU: () => import('antd/locale/ru_RU'), + si_LK: () => import('antd/locale/si_LK'), + sk_SK: () => import('antd/locale/sk_SK'), + sl_SI: () => import('antd/locale/sl_SI'), + sr_RS: () => import('antd/locale/sr_RS'), + sv_SE: () => import('antd/locale/sv_SE'), + ta_IN: () => import('antd/locale/ta_IN'), + th_TH: () => import('antd/locale/th_TH'), + tk_TK: () => import('antd/locale/tk_TK'), + tr_TR: () => import('antd/locale/tr_TR'), + uk_UA: () => import('antd/locale/uk_UA'), + ur_PK: () => import('antd/locale/ur_PK'), + uz_UZ: () => import('antd/locale/uz_UZ'), + vi_VN: () => import('antd/locale/vi_VN'), + zh_CN: () => import('antd/locale/zh_CN'), + zh_HK: () => import('antd/locale/zh_HK'), + zh_TW: () => import('antd/locale/zh_TW'), +}; diff --git a/frontend/antd/config-provider/package.json b/frontend/antd/config-provider/package.json new file mode 100644 index 00000000..b5b1a6fc --- /dev/null +++ b/frontend/antd/config-provider/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-config-provider", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/date-picker/Index.svelte b/frontend/antd/date-picker/Index.svelte new file mode 100644 index 00000000..49074b0e --- /dev/null +++ b/frontend/antd/date-picker/Index.svelte @@ -0,0 +1,88 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDatePicker then DatePicker} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} diff --git a/frontend/antd/date-picker/context.ts b/frontend/antd/date-picker/context.ts new file mode 100644 index 00000000..d90d80aa --- /dev/null +++ b/frontend/antd/date-picker/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('date-picker'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/date-picker/date-picker.tsx b/frontend/antd/date-picker/date-picker.tsx new file mode 100644 index 00000000..7d4bbc3d --- /dev/null +++ b/frontend/antd/date-picker/date-picker.tsx @@ -0,0 +1,225 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { DatePicker as ADatePicker, type GetProps } from 'antd'; +import dayjs from 'dayjs'; + +import { type Item } from './context'; + +type DatePickerProps = GetProps; + +function formatDayjs(date: any): dayjs.Dayjs { + if (Array.isArray(date)) { + return date.map((d) => { + return formatDayjs(d) as dayjs.Dayjs; + }) as unknown as dayjs.Dayjs; + } + if (typeof date === 'number') { + return dayjs(date * 1000); + } + return dayjs(date); +} + +function formatDate(dates: (dayjs.Dayjs | null | undefined)[] | dayjs.Dayjs) { + if (Array.isArray(dates)) { + return dates.map((date) => { + return date ? date.valueOf() / 1000 : null; + }); + } + if (typeof dates === 'object' && dates !== null) { + return dates.valueOf() / 1000; + } + return dates; +} + +export const DatePicker = sveltify< + Omit & { + onChange?: (date: ReturnType, ...args: any[]) => void; + onPanelChange?: ( + date: ReturnType, + ...args: any[] + ) => void; + onValueChange: (date: ReturnType) => void; + presetItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'cellRender', + 'panelRender', + ] +>( + ({ + slots, + disabledDate, + disabledTime, + value, + defaultValue, + defaultPickerValue, + pickerValue, + showTime, + presets, + presetItems, + onChange, + minDate, + maxDate, + cellRender, + panelRender, + getPopupContainer, + onValueChange, + onPanelChange, + children, + setSlotParams, + elRef, + ...props + }) => { + const disabledDateFunction = useFunction(disabledDate); + const disabledTimeFunction = useFunction(disabledTime); + const getPopupContainerFunction = useFunction(getPopupContainer); + const cellRenderFunction = useFunction(cellRender); + const panelRenderFunction = useFunction(panelRender); + const validShowTime = useMemo(() => { + if (typeof showTime === 'object') { + return { + ...showTime, + defaultValue: showTime.defaultValue + ? formatDayjs(showTime.defaultValue) + : undefined, + }; + } + return showTime; + }, [showTime]); + const validValue = useMemo(() => { + return value ? formatDayjs(value) : undefined; + }, [value]); + const validDefaultValue = useMemo(() => { + return defaultValue ? formatDayjs(defaultValue) : undefined; + }, [defaultValue]); + const validDefaultPickerValue = useMemo(() => { + return defaultPickerValue ? formatDayjs(defaultPickerValue) : undefined; + }, [defaultPickerValue]); + const validPickerValue = useMemo(() => { + return pickerValue ? formatDayjs(pickerValue) : undefined; + }, [pickerValue]); + const validMinDate = useMemo(() => { + return minDate ? formatDayjs(minDate) : undefined; + }, [minDate]); + const validMaxDate = useMemo(() => { + return maxDate ? formatDayjs(maxDate) : undefined; + }, [maxDate]); + return ( + <> +
{children}
+ { + return ( + presets || + renderItems[number]>( + presetItems + ) + ).map((preset) => { + return { + ...preset, + value: formatDayjs(preset.value), + }; + }); + }, [presets, presetItems])} + onPanelChange={(date, ...args) => { + const formattedDates = formatDate(date); + onPanelChange?.(formattedDates, ...args); + }} + onChange={(date, ...args) => { + const formattedDate = formatDate(date); + onChange?.(formattedDate, ...args); + onValueChange(formattedDate); + }} + renderExtraFooter={ + slots.renderExtraFooter + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'renderExtraFooter', + }) + : props.renderExtraFooter + } + prevIcon={ + slots.prevIcon ? ( + + ) : ( + props.prevIcon + ) + } + nextIcon={ + slots.nextIcon ? ( + + ) : ( + props.nextIcon + ) + } + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + superNextIcon={ + slots.superNextIcon ? ( + + ) : ( + props.superNextIcon + ) + } + superPrevIcon={ + slots.superPrevIcon ? ( + + ) : ( + props.superPrevIcon + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + /> + + ); + } +); + +export default DatePicker; diff --git a/frontend/antd/date-picker/gradio.config.js b/frontend/antd/date-picker/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/date-picker/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/date-picker/package.json b/frontend/antd/date-picker/package.json new file mode 100644 index 00000000..255df8a9 --- /dev/null +++ b/frontend/antd/date-picker/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-date-picker", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/date-picker/preset/Index.svelte b/frontend/antd/date-picker/preset/Index.svelte new file mode 100644 index 00000000..7c3ceed2 --- /dev/null +++ b/frontend/antd/date-picker/preset/Index.svelte @@ -0,0 +1,91 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/date-picker/preset/gradio.config.js b/frontend/antd/date-picker/preset/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/date-picker/preset/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/date-picker/preset/package.json b/frontend/antd/date-picker/preset/package.json new file mode 100644 index 00000000..645a8c87 --- /dev/null +++ b/frontend/antd/date-picker/preset/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-date-picker.preset", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/date-picker/range-picker/Index.svelte b/frontend/antd/date-picker/range-picker/Index.svelte new file mode 100644 index 00000000..8388ad47 --- /dev/null +++ b/frontend/antd/date-picker/range-picker/Index.svelte @@ -0,0 +1,93 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDatePickerRangePicker then DateRangePicker} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} diff --git a/frontend/antd/date-picker/range-picker/date-picker.range-picker.tsx b/frontend/antd/date-picker/range-picker/date-picker.range-picker.tsx new file mode 100644 index 00000000..3847f372 --- /dev/null +++ b/frontend/antd/date-picker/range-picker/date-picker.range-picker.tsx @@ -0,0 +1,241 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { DatePicker as ADatePicker, type GetProps } from 'antd'; +import dayjs from 'dayjs'; + +import { type Item } from '../context'; + +type RangePickerProps = GetProps; + +function formatDayjs(date: any) { + if (typeof date === 'number') { + return dayjs(date * 1000); + } + return dayjs(date); +} + +function formatDates( + dates: [dayjs.Dayjs | null | undefined, dayjs.Dayjs | null | undefined] | null +): [number | null, number | null] { + return (dates?.map((date) => { + return date ? date.valueOf() / 1000 : null; + }) || [null, null]) as [number | null, number | null]; +} + +export const DateRangePicker = sveltify< + Omit & { + onChange?: (dates: [number | null, number | null], ...args: any[]) => void; + onPanelChange?: ( + dates: [number | null, number | null], + ...args: any[] + ) => void; + onCalendarChange?: ( + dates: [number | null, number | null], + ...args: any[] + ) => void; + onValueChange: (dates: [number | null, number | null]) => void; + presetItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'separator', + 'cellRender', + 'panelRender', + ] +>( + ({ + slots, + disabledDate, + value, + defaultValue, + defaultPickerValue, + pickerValue, + presets, + presetItems, + showTime, + onChange, + minDate, + maxDate, + cellRender, + panelRender, + getPopupContainer, + onValueChange, + onPanelChange, + onCalendarChange, + children, + setSlotParams, + elRef, + ...props + }) => { + const disabledDateFunction = useFunction(disabledDate); + const getPopupContainerFunction = useFunction(getPopupContainer); + const cellRenderFunction = useFunction(cellRender); + const panelRenderFunction = useFunction(panelRender); + const validShowTime = useMemo(() => { + if (typeof showTime === 'object') { + return { + ...showTime, + defaultValue: showTime.defaultValue?.map((v) => formatDayjs(v)), + }; + } + return showTime; + }, [showTime]); + const validValue = useMemo(() => { + return value?.map((v) => formatDayjs(v)) as RangePickerProps['value']; + }, [value]); + + const validDefaultValue = useMemo(() => { + return defaultValue?.map((v) => + formatDayjs(v) + ) as RangePickerProps['defaultValue']; + }, [defaultValue]); + const validDefaultPickerValue = useMemo(() => { + if (Array.isArray(defaultPickerValue)) { + return defaultPickerValue.map((v) => + formatDayjs(v) + ) as RangePickerProps['defaultPickerValue']; + } + return defaultPickerValue ? formatDayjs(defaultPickerValue) : undefined; + }, [defaultPickerValue]); + const validPickerValue = useMemo(() => { + if (Array.isArray(pickerValue)) { + return pickerValue.map((v) => + formatDayjs(v) + ) as RangePickerProps['pickerValue']; + } + return pickerValue ? formatDayjs(pickerValue) : undefined; + }, [pickerValue]); + const validMinDate = useMemo(() => { + return minDate ? formatDayjs(minDate) : undefined; + }, [minDate]); + const validMaxDate = useMemo(() => { + return maxDate ? formatDayjs(maxDate) : undefined; + }, [maxDate]); + return ( + <> +
{children}
+ { + return ( + presets || + renderItems[number]>( + presetItems + ) + ).map((preset) => { + return { + ...preset, + value: formatDates(preset.value as any), + }; + }) as NonNullable; + }, [presets, presetItems])} + onPanelChange={(dates, ...args) => { + const formattedDates = formatDates(dates); + onPanelChange?.(formattedDates, ...args); + }} + onChange={(dates, ...args) => { + const formattedDates = formatDates(dates); + onChange?.(formattedDates, ...args); + onValueChange(formattedDates); + }} + onCalendarChange={(dates, ...args) => { + const formattedDates = formatDates(dates); + onCalendarChange?.(formattedDates, ...args); + }} + renderExtraFooter={ + slots.renderExtraFooter + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'renderExtraFooter', + }) + : props.renderExtraFooter + } + prevIcon={ + slots.prevIcon ? ( + + ) : ( + props.prevIcon + ) + } + nextIcon={ + slots.nextIcon ? ( + + ) : ( + props.nextIcon + ) + } + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + superNextIcon={ + slots.superNextIcon ? ( + + ) : ( + props.superNextIcon + ) + } + superPrevIcon={ + slots.superPrevIcon ? ( + + ) : ( + props.superPrevIcon + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + separator={ + slots.separator ? ( + + ) : ( + props.separator + ) + } + /> + + ); + } +); + +export default DateRangePicker; diff --git a/frontend/antd/date-picker/range-picker/gradio.config.js b/frontend/antd/date-picker/range-picker/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/date-picker/range-picker/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/date-picker/range-picker/package.json b/frontend/antd/date-picker/range-picker/package.json new file mode 100644 index 00000000..cf035a9e --- /dev/null +++ b/frontend/antd/date-picker/range-picker/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-date-picker.range-picker", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/descriptions/Index.svelte b/frontend/antd/descriptions/Index.svelte new file mode 100644 index 00000000..fc1b327d --- /dev/null +++ b/frontend/antd/descriptions/Index.svelte @@ -0,0 +1,81 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDescriptions then Descriptions} + 0 ? $items : $children} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/descriptions/context.ts b/frontend/antd/descriptions/context.ts new file mode 100644 index 00000000..8ad59e83 --- /dev/null +++ b/frontend/antd/descriptions/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('descriptions'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/descriptions/descriptions.tsx b/frontend/antd/descriptions/descriptions.tsx new file mode 100644 index 00000000..4d9b3991 --- /dev/null +++ b/frontend/antd/descriptions/descriptions.tsx @@ -0,0 +1,37 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React, { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { Descriptions as ADescriptions, type GetProps } from 'antd'; + +import { type Item } from './context'; + +type DescriptionsProps = GetProps; +export const Descriptions = sveltify< + DescriptionsProps & { + slotItems: Item[]; + }, + ['extra', 'title'] +>(({ slots, items, slotItems, children, ...props }) => { + return ( + <> +
{children}
+ : props.extra} + title={slots.title ? : props.title} + items={useMemo(() => { + // ['label', 'children'] + return ( + items || + renderItems[number]>( + slotItems + ) + ); + }, [items, slotItems])} + /> + + ); +}); + +export default Descriptions; diff --git a/frontend/antd/descriptions/gradio.config.js b/frontend/antd/descriptions/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/descriptions/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/descriptions/item/Index.svelte b/frontend/antd/descriptions/item/Index.svelte new file mode 100644 index 00000000..ecb77fed --- /dev/null +++ b/frontend/antd/descriptions/item/Index.svelte @@ -0,0 +1,93 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/descriptions/item/gradio.config.js b/frontend/antd/descriptions/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/descriptions/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/descriptions/item/package.json b/frontend/antd/descriptions/item/package.json new file mode 100644 index 00000000..dec14896 --- /dev/null +++ b/frontend/antd/descriptions/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-descriptions.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/descriptions/package.json b/frontend/antd/descriptions/package.json new file mode 100644 index 00000000..0b4c4628 --- /dev/null +++ b/frontend/antd/descriptions/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-descriptions", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/divider/Index.svelte b/frontend/antd/divider/Index.svelte new file mode 100644 index 00000000..b9ef09c0 --- /dev/null +++ b/frontend/antd/divider/Index.svelte @@ -0,0 +1,86 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedDivider then Divider} + {#if $mergedProps._internal.layout} + + + + {:else if $mergedProps.value} + + {$mergedProps.value} + + {:else} + + {/if} + {/await} +{/if} + + diff --git a/frontend/antd/divider/divider.tsx b/frontend/antd/divider/divider.tsx new file mode 100644 index 00000000..e61d6ddc --- /dev/null +++ b/frontend/antd/divider/divider.tsx @@ -0,0 +1,10 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { Divider as ADivider, type GetProps } from 'antd'; + +export const Divider = sveltify, ['children']>( + ({ ...props }) => { + return ; + } +); + +export default Divider; diff --git a/frontend/antd/divider/gradio.config.js b/frontend/antd/divider/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/divider/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/divider/package.json b/frontend/antd/divider/package.json new file mode 100644 index 00000000..1d726c4d --- /dev/null +++ b/frontend/antd/divider/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-divider", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/drawer/Index.svelte b/frontend/antd/drawer/Index.svelte new file mode 100644 index 00000000..fe0e849c --- /dev/null +++ b/frontend/antd/drawer/Index.svelte @@ -0,0 +1,79 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDrawer then Drawer} + + + + {/await} +{/if} + + diff --git a/frontend/antd/drawer/drawer.tsx b/frontend/antd/drawer/drawer.tsx new file mode 100644 index 00000000..8c069d0f --- /dev/null +++ b/frontend/antd/drawer/drawer.tsx @@ -0,0 +1,53 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Drawer as ADrawer, type GetProps } from 'antd'; + +export const Drawer = sveltify< + GetProps & { + setSlotParams: SetSlotParams; + }, + ['closeIcon', 'extra', 'footer', 'title', 'drawerRender'] +>( + ({ + slots, + afterOpenChange, + getContainer, + drawerRender, + setSlotParams, + ...props + }) => { + const afterOpenChangeFunction = useFunction(afterOpenChange); + const getContainerFunction = useFunction(getContainer); + const drawerRenderFunction = useFunction(drawerRender); + return ( + + ) : ( + props.closeIcon + ) + } + extra={slots.extra ? : props.extra} + footer={slots.footer ? : props.footer} + title={slots.title ? : props.title} + drawerRender={ + slots.drawerRender + ? renderParamsSlot({ slots, setSlotParams, key: 'drawerRender' }) + : drawerRenderFunction + } + getContainer={ + typeof getContainer === 'string' ? getContainerFunction : getContainer + } + /> + ); + } +); + +export default Drawer; diff --git a/frontend/antd/drawer/gradio.config.js b/frontend/antd/drawer/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/drawer/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/drawer/package.json b/frontend/antd/drawer/package.json new file mode 100644 index 00000000..b0bd9ab3 --- /dev/null +++ b/frontend/antd/drawer/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-drawer", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/dropdown/Index.svelte b/frontend/antd/dropdown/Index.svelte new file mode 100644 index 00000000..4fd369b9 --- /dev/null +++ b/frontend/antd/dropdown/Index.svelte @@ -0,0 +1,82 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDropdown then Dropdown} + + + + {/await} +{/if} + + diff --git a/frontend/antd/dropdown/button/Index.svelte b/frontend/antd/dropdown/button/Index.svelte new file mode 100644 index 00000000..ccfa0fab --- /dev/null +++ b/frontend/antd/dropdown/button/Index.svelte @@ -0,0 +1,92 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedDropdownButton then DropdownButton} + + {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.value} + {/if} + + {/await} +{/if} + + diff --git a/frontend/antd/dropdown/button/dropdown.button.tsx b/frontend/antd/dropdown/button/dropdown.button.tsx new file mode 100644 index 00000000..851674d2 --- /dev/null +++ b/frontend/antd/dropdown/button/dropdown.button.tsx @@ -0,0 +1,85 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { type Item } from '@utils/createItemsContext'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useTargets } from '@utils/hooks/useTargets'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Dropdown as ADropdown, type GetProps } from 'antd'; +import type { ItemType } from 'antd/es/menu/interface'; + +export const DropdownButton = sveltify< + GetProps & { + menuItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'icon', + 'buttonsRender', + 'dropdownRender', + 'menu.expandIcon', + 'menu.overflowedIndicator', + ] +>( + ({ + getPopupContainer, + slots, + menuItems, + children, + dropdownRender, + buttonsRender, + setSlotParams, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const dropdownRenderFunction = useFunction(dropdownRender); + const buttonsRenderFunction = useFunction(buttonsRender); + const buttonsRenderTargets = useTargets(children, 'buttonsRender'); + return ( + { + setSlotParams('buttonsRender', args); + return buttonsRenderTargets.map((item, index) => { + return ; + }); + } + : buttonsRenderFunction + } + menu={{ + ...props.menu, + items: useMemo(() => { + return props.menu?.items || renderItems(menuItems); + }, [menuItems, props.menu?.items]), + expandIcon: slots['menu.expandIcon'] + ? renderParamsSlot( + { slots, setSlotParams, key: 'menu.expandIcon' }, + { clone: true } + ) + : props.menu?.expandIcon, + overflowedIndicator: slots['menu.overflowedIndicator'] ? ( + + ) : ( + props.menu?.overflowedIndicator + ), + }} + getPopupContainer={getPopupContainerFunction} + dropdownRender={ + slots.dropdownRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'dropdownRender', + }) + : dropdownRenderFunction + } + /> + ); + } +); + +export default DropdownButton; diff --git a/frontend/antd/dropdown/button/gradio.config.js b/frontend/antd/dropdown/button/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/dropdown/button/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/dropdown/button/package.json b/frontend/antd/dropdown/button/package.json new file mode 100644 index 00000000..f104ebef --- /dev/null +++ b/frontend/antd/dropdown/button/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-dropdown.button", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/dropdown/dropdown.tsx b/frontend/antd/dropdown/dropdown.tsx new file mode 100644 index 00000000..f2337411 --- /dev/null +++ b/frontend/antd/dropdown/dropdown.tsx @@ -0,0 +1,82 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { type Item } from '@utils/createItemsContext'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Dropdown as ADropdown, type GetProps } from 'antd'; +import type { ItemType } from 'antd/es/menu/interface'; + +export const Dropdown = sveltify< + GetProps & { + menuItems: Item[]; + innerStyle?: React.CSSProperties; + setSlotParams: SetSlotParams; + }, + ['menu.expandIcon', 'dropdownRender', 'menu.overflowedIndicator'] +>( + ({ + getPopupContainer, + innerStyle, + children, + slots, + menuItems, + dropdownRender, + setSlotParams, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const dropdownRenderFunction = useFunction(dropdownRender); + return ( + <> + { + return props.menu?.items || renderItems(menuItems); + }, [menuItems, props.menu?.items]), + expandIcon: slots['menu.expandIcon'] + ? renderParamsSlot( + { slots, setSlotParams, key: 'menu.expandIcon' }, + { clone: true } + ) + : props.menu?.expandIcon, + overflowedIndicator: slots['menu.overflowedIndicator'] ? ( + + ) : ( + props.menu?.overflowedIndicator + ), + }} + getPopupContainer={getPopupContainerFunction} + dropdownRender={ + slots.dropdownRender + ? renderParamsSlot( + { + slots, + setSlotParams, + key: 'dropdownRender', + }, + { clone: true } + ) + : dropdownRenderFunction + } + > +
+ {children} +
+
+ + ); + } +); + +export default Dropdown; diff --git a/frontend/antd/dropdown/gradio.config.js b/frontend/antd/dropdown/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/dropdown/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/dropdown/package.json b/frontend/antd/dropdown/package.json new file mode 100644 index 00000000..5cbe4a0f --- /dev/null +++ b/frontend/antd/dropdown/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-dropdown", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/empty/Index.svelte b/frontend/antd/empty/Index.svelte new file mode 100644 index 00000000..521a0c6b --- /dev/null +++ b/frontend/antd/empty/Index.svelte @@ -0,0 +1,73 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedEmpty then Empty} + + + + {/await} +{/if} + + diff --git a/frontend/antd/empty/empty.tsx b/frontend/antd/empty/empty.tsx new file mode 100644 index 00000000..a7a7bdf4 --- /dev/null +++ b/frontend/antd/empty/empty.tsx @@ -0,0 +1,28 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { Empty as AEmpty, type GetProps } from 'antd'; + +export const Empty = sveltify< + GetProps, + ['description', 'image'] +>(({ slots, imageStyle, ...props }) => { + return ( + + ) : ( + props.description + ) + } + imageStyle={{ + display: 'inline-block', + ...imageStyle, + }} + image={slots.image ? : props.image} + /> + ); +}); + +export default Empty; diff --git a/frontend/antd/empty/gradio.config.js b/frontend/antd/empty/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/empty/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/empty/package.json b/frontend/antd/empty/package.json new file mode 100644 index 00000000..968ab06e --- /dev/null +++ b/frontend/antd/empty/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-flex", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/flex/Index.svelte b/frontend/antd/flex/Index.svelte new file mode 100644 index 00000000..76182e64 --- /dev/null +++ b/frontend/antd/flex/Index.svelte @@ -0,0 +1,73 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFlex then Flex} + + + + {/await} +{/if} + + diff --git a/frontend/antd/flex/flex.tsx b/frontend/antd/flex/flex.tsx new file mode 100644 index 00000000..f63efbba --- /dev/null +++ b/frontend/antd/flex/flex.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { Flex as AFlex, type GetProps } from 'antd'; + +export const Flex = sveltify>((props) => { + return ; +}); + +export default Flex; diff --git a/frontend/antd/flex/gradio.config.js b/frontend/antd/flex/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/flex/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/flex/package.json b/frontend/antd/flex/package.json new file mode 100644 index 00000000..968ab06e --- /dev/null +++ b/frontend/antd/flex/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-flex", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/float-button/Index.svelte b/frontend/antd/float-button/Index.svelte new file mode 100644 index 00000000..b3e73778 --- /dev/null +++ b/frontend/antd/float-button/Index.svelte @@ -0,0 +1,75 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFloatButton then FloatButton} + + + + {/await} +{/if} diff --git a/frontend/antd/float-button/back-top/Index.svelte b/frontend/antd/float-button/back-top/Index.svelte new file mode 100644 index 00000000..8251b193 --- /dev/null +++ b/frontend/antd/float-button/back-top/Index.svelte @@ -0,0 +1,81 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFloatButtonBackTop then FloatButtonBackTop} + + {/await} +{/if} + + diff --git a/frontend/antd/float-button/back-top/float-button.back-top.tsx b/frontend/antd/float-button/back-top/float-button.back-top.tsx new file mode 100644 index 00000000..f4d1b483 --- /dev/null +++ b/frontend/antd/float-button/back-top/float-button.back-top.tsx @@ -0,0 +1,46 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { FloatButton as AFloatButton, type GetProps } from 'antd'; + +export const FloatButtonBackTop = sveltify< + GetProps, + ['icon', 'description', 'tooltip', 'badge.count'] +>(({ slots, children, target, ...props }) => { + const targetFunction = useFunction(target); + return ( + <> +
{children}
+ : props.icon} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + tooltip={ + slots.tooltip ? ( + + ) : ( + props.tooltip + ) + } + badge={{ + ...props.badge, + count: slots['badge.count'] ? ( + + ) : ( + props.badge?.count + ), + }} + /> + + ); +}); + +export default FloatButtonBackTop; diff --git a/frontend/antd/float-button/back-top/gradio.config.js b/frontend/antd/float-button/back-top/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/float-button/back-top/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/float-button/back-top/package.json b/frontend/antd/float-button/back-top/package.json new file mode 100644 index 00000000..6ec6d243 --- /dev/null +++ b/frontend/antd/float-button/back-top/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-float-button.back-top", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/float-button/float-button.tsx b/frontend/antd/float-button/float-button.tsx new file mode 100644 index 00000000..a65e101f --- /dev/null +++ b/frontend/antd/float-button/float-button.tsx @@ -0,0 +1,45 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { FloatButton as AFloatButton, type GetProps } from 'antd'; + +export const FloatButton = sveltify< + GetProps & { + id?: string; + }, + ['icon', 'description', 'tooltip', 'badge.count'] +>(({ slots, children, ...props }) => { + return ( + <> +
{children}
+ : props.icon} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + tooltip={ + slots.tooltip ? ( + + ) : ( + props.tooltip + ) + } + badge={{ + ...props.badge, + count: slots['badge.count'] ? ( + + ) : ( + props.badge?.count + ), + }} + /> + + ); +}); + +export default FloatButton; diff --git a/frontend/antd/float-button/gradio.config.js b/frontend/antd/float-button/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/float-button/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/float-button/group/Index.svelte b/frontend/antd/float-button/group/Index.svelte new file mode 100644 index 00000000..414f8ae4 --- /dev/null +++ b/frontend/antd/float-button/group/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFloatButtonGroup then FloatButtonGroup} + + + + {/await} +{/if} + + diff --git a/frontend/antd/float-button/group/float-button.group.less b/frontend/antd/float-button/group/float-button.group.less new file mode 100644 index 00000000..4125d193 --- /dev/null +++ b/frontend/antd/float-button/group/float-button.group.less @@ -0,0 +1,30 @@ +.ms-gr-antd-container { + .ms-gr-antd-float-button-group { + &.ms-gr-antd-float-button-group-square { + react-portal-target { + .ms-gr-antd-float-button { + border-start-start-radius: 0 !important; + border-start-end-radius: 0 !important; + } + + &:first-child { + .ms-gr-antd-float-button { + border-start-start-radius: var( + --ms-gr-antd-border-radius-lg + ) !important; + border-start-end-radius: var( + --ms-gr-antd-border-radius-lg + ) !important; + } + } + + &:last-child { + .ms-gr-antd-float-button { + border-end-start-radius: var(--ms-gr-antd-border-radius-lg); + border-end-end-radius: var(--ms-gr-antd-border-radius-lg); + } + } + } + } + } +} diff --git a/frontend/antd/float-button/group/float-button.group.tsx b/frontend/antd/float-button/group/float-button.group.tsx new file mode 100644 index 00000000..1cb83e74 --- /dev/null +++ b/frontend/antd/float-button/group/float-button.group.tsx @@ -0,0 +1,69 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useSlotsChildren } from '@utils/hooks/useSlotsChildren'; +import { FloatButton as AFloatButton, type GetProps, theme } from 'antd'; +import cls from 'classnames'; + +import './float-button.group.less'; + +export const FloatButtonGroup = sveltify< + GetProps & { + id?: string; + }, + ['icon', 'closeIcon', 'description', 'tooltip', 'badge.count'] +>(({ children, slots, style, shape = 'circle', className, ...props }) => { + const { token } = theme.useToken(); + + const [slotsChildren, restChildren] = useSlotsChildren(children); + return ( + <> +
{slotsChildren}
+ + ) : ( + props.closeIcon + ) + } + icon={slots.icon ? : props.icon} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + tooltip={ + slots.tooltip ? ( + + ) : ( + props.tooltip + ) + } + badge={{ + ...props.badge, + count: slots['badge.count'] ? ( + + ) : ( + props.badge?.count + ), + }} + > + {restChildren} + + + ); +}); + +export default FloatButtonGroup; diff --git a/frontend/antd/float-button/group/gradio.config.js b/frontend/antd/float-button/group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/float-button/group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/float-button/group/package.json b/frontend/antd/float-button/group/package.json new file mode 100644 index 00000000..934ecfe7 --- /dev/null +++ b/frontend/antd/float-button/group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-float-button.group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/float-button/package.json b/frontend/antd/float-button/package.json new file mode 100644 index 00000000..942fb12d --- /dev/null +++ b/frontend/antd/float-button/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-float-button", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/form/Index.svelte b/frontend/antd/form/Index.svelte new file mode 100644 index 00000000..7e5d612b --- /dev/null +++ b/frontend/antd/form/Index.svelte @@ -0,0 +1,90 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedForm then Form} +
{ + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/form/context.ts b/frontend/antd/form/context.ts new file mode 100644 index 00000000..10e6362a --- /dev/null +++ b/frontend/antd/form/context.ts @@ -0,0 +1,7 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems: getRuleItems, getSetItemFn: getSetRuleItemFn } = + createItemsContext('form-item-rule'); + +export { getRuleItems, getSetRuleItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/form/form.tsx b/frontend/antd/form/form.tsx new file mode 100644 index 00000000..bfbebce8 --- /dev/null +++ b/frontend/antd/form/form.tsx @@ -0,0 +1,58 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useEffect } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { Form as AForm, type GetProps } from 'antd'; + +export const Form = sveltify< + GetProps & { + value: Record; + onValueChange: (value: Record) => void; + setSlotParams: SetSlotParams; + }, + ['requiredMark'] +>( + ({ + value, + onValueChange, + requiredMark, + onValuesChange, + feedbackIcons, + setSlotParams, + slots, + ...props + }) => { + const [form] = AForm.useForm(); + const feedbackIconsFunction = useFunction(feedbackIcons); + const requiredMarkFunction = useFunction(requiredMark); + useEffect(() => { + form.setFieldsValue(value); + }, [form, value]); + return ( + { + onValueChange(values); + onValuesChange?.(changedValues, values); + }} + /> + ); + } +); + +export default Form; diff --git a/frontend/antd/form/gradio.config.js b/frontend/antd/form/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/form/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/form/item/Index.svelte b/frontend/antd/form/item/Index.svelte new file mode 100644 index 00000000..7c069f4d --- /dev/null +++ b/frontend/antd/form/item/Index.svelte @@ -0,0 +1,80 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFormItem then FormItem} + + + + {/await} +{/if} + + diff --git a/frontend/antd/form/item/form.item.tsx b/frontend/antd/form/item/form.item.tsx new file mode 100644 index 00000000..513ff3ee --- /dev/null +++ b/frontend/antd/form/item/form.item.tsx @@ -0,0 +1,130 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { FormItemContext } from '@svelte-preprocess-react/context'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { Form as AForm, type GetProps } from 'antd'; + +import { type Item } from '../context'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} + +const FormItemWrapper: React.FC<{ + children?: React.ReactNode; +}> = ({ children, ...props }) => { + return ( + { + return props; + }, [props])} + > + {children} + + ); +}; + +export const FormItem = sveltify< + GetProps & { + ruleItems: Item[]; + }, + ['extra', 'help', 'label', 'tooltip', 'tooltip.title', 'tooltip.icon'] +>( + ({ + slots, + getValueFromEvent, + getValueProps, + normalize, + shouldUpdate, + tooltip, + ruleItems, + rules, + children, + hasFeedback, + ...props + }) => { + const supportTooltipConfig = + slots['tooltip.icon'] || + slots['tooltip.title'] || + typeof tooltip === 'object'; + const supportHasFeedbackConfig = typeof hasFeedback === 'object'; + const hasFeedbackConfig = getConfig(hasFeedback); + const hasFeedbackIconsFunction = useFunction(hasFeedbackConfig.icons); + const getValueFromEventFunction = useFunction(getValueFromEvent); + const getValuePropsFunction = useFunction(getValueProps); + const normalizeFunction = useFunction(normalize); + const shouldUpdateFunction = useFunction(shouldUpdate); + + const tooltipConfig = getConfig(tooltip); + const tooltipAfterOpenChangeFunction = useFunction( + tooltipConfig.afterOpenChange + ); + const tooltipGetPopupContainerFunction = useFunction( + tooltipConfig.getPopupContainer + ); + return ( + { + return ( + rules || + renderItems< + NonNullable['rules']>[number] + >(ruleItems) + ); + }, [ruleItems, rules])} + tooltip={ + slots['tooltip'] ? ( + + ) : supportTooltipConfig ? ( + { + ...tooltipConfig, + afterOpenChange: tooltipAfterOpenChangeFunction, + getPopupContainer: tooltipGetPopupContainerFunction, + icon: slots['tooltip.icon'] ? ( + + ) : ( + tooltipConfig.icon + ), + title: slots['tooltip.title'] ? ( + + ) : ( + tooltipConfig.title + ), + } + ) : ( + tooltip + ) + } + extra={slots.extra ? : props.extra} + help={slots.help ? : props.help} + label={slots.label ? : props.label} + > + {shouldUpdateFunction || shouldUpdate ? ( + () => {children as React.ReactNode} + ) : ( + {children as React.ReactNode} + )} + + ); + } +); + +export default FormItem; diff --git a/frontend/antd/form/item/gradio.config.js b/frontend/antd/form/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/form/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/form/item/package.json b/frontend/antd/form/item/package.json new file mode 100644 index 00000000..70a0a7e5 --- /dev/null +++ b/frontend/antd/form/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-form.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/form/item/rule/Index.svelte b/frontend/antd/form/item/rule/Index.svelte new file mode 100644 index 00000000..e1289d08 --- /dev/null +++ b/frontend/antd/form/item/rule/Index.svelte @@ -0,0 +1,94 @@ + + + + + diff --git a/frontend/antd/form/item/rule/global.css b/frontend/antd/form/item/rule/global.css new file mode 100644 index 00000000..9d7608a9 --- /dev/null +++ b/frontend/antd/form/item/rule/global.css @@ -0,0 +1,3 @@ +.ms-gr-antd-noop-class { + display: none; +} diff --git a/frontend/antd/form/item/rule/gradio.config.js b/frontend/antd/form/item/rule/gradio.config.js new file mode 100644 index 00000000..7b2fe8dd --- /dev/null +++ b/frontend/antd/form/item/rule/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/form/item/rule/package.json b/frontend/antd/form/item/rule/package.json new file mode 100644 index 00000000..496f775d --- /dev/null +++ b/frontend/antd/form/item/rule/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-form.item.rule", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/form/package.json b/frontend/antd/form/package.json new file mode 100644 index 00000000..f0cd1c5d --- /dev/null +++ b/frontend/antd/form/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-form", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/grid/col/Index.svelte b/frontend/antd/grid/col/Index.svelte new file mode 100644 index 00000000..8b4d275c --- /dev/null +++ b/frontend/antd/grid/col/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/grid/col/gradio.config.js b/frontend/antd/grid/col/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/grid/col/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/grid/col/package.json b/frontend/antd/grid/col/package.json new file mode 100644 index 00000000..7fcfeb0b --- /dev/null +++ b/frontend/antd/grid/col/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-col", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/grid/context.ts b/frontend/antd/grid/context.ts new file mode 100644 index 00000000..38432560 --- /dev/null +++ b/frontend/antd/grid/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('grid'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/grid/row/Index.svelte b/frontend/antd/grid/row/Index.svelte new file mode 100644 index 00000000..2afd7575 --- /dev/null +++ b/frontend/antd/grid/row/Index.svelte @@ -0,0 +1,77 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedRow then Row} + + + + {/await} +{/if} + + diff --git a/frontend/antd/grid/row/gradio.config.js b/frontend/antd/grid/row/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/grid/row/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/grid/row/package.json b/frontend/antd/grid/row/package.json new file mode 100644 index 00000000..72bab38d --- /dev/null +++ b/frontend/antd/grid/row/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-row", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/grid/row/row.tsx b/frontend/antd/grid/row/row.tsx new file mode 100644 index 00000000..9efea067 --- /dev/null +++ b/frontend/antd/grid/row/row.tsx @@ -0,0 +1,30 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { Col as ACol, type GetProps, Row as ARow } from 'antd'; + +import { type Item } from '../context'; + +export const Row = sveltify< + GetProps & { + cols?: Item[]; + } +>(({ cols, children, ...props }) => { + return ( + + {children} + {cols?.map((item, index) => { + if (!item) { + return; + } + const { el, props: colProps } = item; + return ( + + {el && } + + ); + })} + + ); +}); + +export default Row; diff --git a/frontend/antd/icon/Index.svelte b/frontend/antd/icon/Index.svelte new file mode 100644 index 00000000..72bb08e2 --- /dev/null +++ b/frontend/antd/icon/Index.svelte @@ -0,0 +1,77 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedIcon then Icon} + + {/await} +{/if} diff --git a/frontend/antd/icon/gradio.config.js b/frontend/antd/icon/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/icon/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/icon/icon.tsx b/frontend/antd/icon/icon.tsx new file mode 100644 index 00000000..a58536ed --- /dev/null +++ b/frontend/antd/icon/icon.tsx @@ -0,0 +1,26 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React from 'react'; +import * as icons from '@ant-design/icons'; +import type { GetProps } from 'antd'; + +export const Icon = sveltify< + GetProps & { + name: string; + Iconfont?: ReturnType; + } +>(({ name, Iconfont, ...props }) => { + const icon = icons[name as keyof typeof icons] as React.ComponentType< + GetProps + >; + return ( + <> + {icon ? ( + React.createElement(icon, props) + ) : Iconfont ? ( + + ) : null} + + ); +}); + +export default Icon; diff --git a/frontend/antd/icon/iconfont-provider/Index.svelte b/frontend/antd/icon/iconfont-provider/Index.svelte new file mode 100644 index 00000000..4bd11211 --- /dev/null +++ b/frontend/antd/icon/iconfont-provider/Index.svelte @@ -0,0 +1,61 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/icon/iconfont-provider/context.ts b/frontend/antd/icon/iconfont-provider/context.ts new file mode 100644 index 00000000..019e379e --- /dev/null +++ b/frontend/antd/icon/iconfont-provider/context.ts @@ -0,0 +1,37 @@ +import { initialize } from '@svelte-preprocess-react/component'; +import type { createFromIconfontCN } from '@ant-design/icons'; +import type { CustomIconOptions } from '@ant-design/icons/es/components/IconFont'; +import { getContext, setContext } from 'svelte'; +import { type Writable, writable } from 'svelte/store'; + +const iconfontContextKey = '$$ms-gr-antd-iconfont-context-key'; + +let createFromIconfont: typeof createFromIconfontCN; +async function getCreateFromIconfont() { + if (createFromIconfont) { + return createFromIconfont; + } + await initialize(); + createFromIconfont = await import('./create-iconfont').then( + (m) => m.createFromIconfontCN + ); + return createFromIconfont; +} + +export function setIconfontContext() { + const writableOptions = writable(); + const writableIconfont = writable>(); + + writableOptions.subscribe(async (value) => { + const createFromIconfontCN = await getCreateFromIconfont(); + writableIconfont.set(createFromIconfontCN(value)); + }); + setContext(iconfontContextKey, writableIconfont); + return writableOptions; +} + +export function getIconfontContext() { + return getContext(iconfontContextKey) as + | Writable> + | undefined; +} diff --git a/frontend/antd/icon/iconfont-provider/create-iconfont.ts b/frontend/antd/icon/iconfont-provider/create-iconfont.ts new file mode 100644 index 00000000..b5d6dd49 --- /dev/null +++ b/frontend/antd/icon/iconfont-provider/create-iconfont.ts @@ -0,0 +1,3 @@ +import { createFromIconfontCN } from '@ant-design/icons'; + +export { createFromIconfontCN }; diff --git a/frontend/antd/icon/iconfont-provider/gradio.config.js b/frontend/antd/icon/iconfont-provider/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/icon/iconfont-provider/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/icon/iconfont-provider/package.json b/frontend/antd/icon/iconfont-provider/package.json new file mode 100644 index 00000000..4005caa8 --- /dev/null +++ b/frontend/antd/icon/iconfont-provider/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-iconfont-provider", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/icon/package.json b/frontend/antd/icon/package.json new file mode 100644 index 00000000..2cfbc4d0 --- /dev/null +++ b/frontend/antd/icon/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-icon", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/image/Index.svelte b/frontend/antd/image/Index.svelte new file mode 100644 index 00000000..83b4fa9b --- /dev/null +++ b/frontend/antd/image/Index.svelte @@ -0,0 +1,92 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedImage then Image} + + + + {/await} +{/if} + + diff --git a/frontend/antd/image/gradio.config.js b/frontend/antd/image/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/image/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/image/image.tsx b/frontend/antd/image/image.tsx new file mode 100644 index 00000000..aceacb5c --- /dev/null +++ b/frontend/antd/image/image.tsx @@ -0,0 +1,90 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useFunction } from '@utils/hooks/useFunction'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Image as AImage } from 'antd'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} +type ImageProps = GetProps; +export const Image = sveltify< + ImageProps & { + setSlotParams: SetSlotParams; + }, + [ + 'placeholder', + 'preview.mask', + 'preview.closeIcon', + 'preview.toolbarRender', + 'preview.imageRender', + ] +>(({ slots, preview, setSlotParams, ...props }) => { + const previewConfig = getConfig(preview); + const supportPreview = + slots['preview.mask'] || + slots['preview.closeIcon'] || + slots['preview.toolbarRender'] || + slots['preview.imageRender'] || + preview !== false; + const getContainerFunction = useFunction(previewConfig.getContainer); + const previewToolbarRenderFunction = useFunction(previewConfig.toolbarRender); + const previewImageRenderFunction = useFunction(previewConfig.imageRender); + + return ( + + ) : ( + previewConfig.mask + ), + } + : {}), + closeIcon: slots['preview.closeIcon'] ? ( + + ) : ( + previewConfig.closeIcon + ), + }) as ImageProps['preview']) + : false + } + placeholder={ + slots.placeholder ? ( + + ) : ( + props.placeholder + ) + } + /> + ); +}); + +export default Image; diff --git a/frontend/antd/image/package.json b/frontend/antd/image/package.json new file mode 100644 index 00000000..e7ba95d7 --- /dev/null +++ b/frontend/antd/image/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-image", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/image/preview-group/Index.svelte b/frontend/antd/image/preview-group/Index.svelte new file mode 100644 index 00000000..489df6c2 --- /dev/null +++ b/frontend/antd/image/preview-group/Index.svelte @@ -0,0 +1,82 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedImagePreviewGroup then ImagePreviewGroup} + + + + {/await} +{/if} + + diff --git a/frontend/antd/image/preview-group/gradio.config.js b/frontend/antd/image/preview-group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/image/preview-group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/image/preview-group/image.preview-group.tsx b/frontend/antd/image/preview-group/image.preview-group.tsx new file mode 100644 index 00000000..2451e3ee --- /dev/null +++ b/frontend/antd/image/preview-group/image.preview-group.tsx @@ -0,0 +1,54 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useFunction } from '@utils/hooks/useFunction'; +import { type GetProps, Image as AImage } from 'antd'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} + +type ImagePreviewGroupProps = GetProps; + +export const ImagePreviewGroup = sveltify< + GetProps, + ['preview.mask', 'preview.closeIcon'] +>(({ slots, preview, ...props }) => { + const previewConfig = getConfig(preview); + const supportPreview = + slots['preview.mask'] || slots['preview.closeIcon'] || preview !== false; + const getContainerFunction = useFunction(previewConfig.getContainer); + return ( + + ) : ( + previewConfig.mask + ), + } + : {}), + closeIcon: slots['preview.closeIcon'] ? ( + + ) : ( + previewConfig.closeIcon + ), + }, + } as ImagePreviewGroupProps['preview']) + : false + } + /> + ); +}); + +export default ImagePreviewGroup; diff --git a/frontend/antd/image/preview-group/package.json b/frontend/antd/image/preview-group/package.json new file mode 100644 index 00000000..5925e7d8 --- /dev/null +++ b/frontend/antd/image/preview-group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-image.preview-group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input-number/Index.svelte b/frontend/antd/input-number/Index.svelte new file mode 100644 index 00000000..865ed457 --- /dev/null +++ b/frontend/antd/input-number/Index.svelte @@ -0,0 +1,79 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInputNumber then InputNumber} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/input-number/gradio.config.js b/frontend/antd/input-number/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/input-number/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input-number/input-number.tsx b/frontend/antd/input-number/input-number.tsx new file mode 100644 index 00000000..ef4d9b4f --- /dev/null +++ b/frontend/antd/input-number/input-number.tsx @@ -0,0 +1,91 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { type GetProps, InputNumber as AInputNumber } from 'antd'; + +export const InputNumber = sveltify< + GetProps & { + onValueChange: (value: number | string | null) => void; + }, + [ + 'addonAfter', + 'addonBefore', + 'controls.upIcon', + 'controls.downIcon', + 'prefix', + 'suffix', + ] +>( + ({ + slots, + children, + onValueChange, + onChange, + formatter, + parser, + elRef, + ...props + }) => { + const formatterFunction = useFunction(formatter); + const parserFunction = useFunction(parser); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + onChange?.(v); + setValue(v); + }} + parser={parserFunction} + formatter={formatterFunction} + controls={ + slots['controls.upIcon'] || slots['controls.downIcon'] + ? { + upIcon: slots['controls.upIcon'] ? ( + + ) : typeof props.controls === 'object' ? ( + props.controls.upIcon + ) : undefined, + downIcon: slots['controls.downIcon'] ? ( + + ) : typeof props.controls === 'object' ? ( + props.controls.downIcon + ) : undefined, + } + : props.controls + } + addonAfter={ + slots.addonAfter ? ( + + ) : ( + props.addonAfter + ) + } + addonBefore={ + slots.addonBefore ? ( + + ) : ( + props.addonBefore + ) + } + prefix={ + slots.prefix ? : props.prefix + } + suffix={ + slots.suffix ? : props.suffix + } + /> + + ); + } +); + +export default InputNumber; diff --git a/frontend/antd/input-number/package.json b/frontend/antd/input-number/package.json new file mode 100644 index 00000000..38779fc3 --- /dev/null +++ b/frontend/antd/input-number/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input-number", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input/Index.svelte b/frontend/antd/input/Index.svelte new file mode 100644 index 00000000..5579b30d --- /dev/null +++ b/frontend/antd/input/Index.svelte @@ -0,0 +1,84 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInput then Input} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/input/gradio.config.js b/frontend/antd/input/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/input/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input/input.tsx b/frontend/antd/input/input.tsx new file mode 100644 index 00000000..2d801914 --- /dev/null +++ b/frontend/antd/input/input.tsx @@ -0,0 +1,122 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useEffect, useMemo, useState } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Input as AInput } from 'antd'; + +export const Input = sveltify< + GetProps & { + onValueChange: (value: string) => void; + setSlotParams: SetSlotParams; + }, + [ + 'addonAfter', + 'addonBefore', + 'allowClear.clearIcon', + 'prefix', + 'suffix', + 'showCount.formatter', + ] +>( + ({ + slots, + children, + count, + showCount, + onValueChange, + onChange, + setSlotParams, + elRef, + ...props + }) => { + const countStrategyFunction = useFunction(count?.strategy); + const countExceedFormatterFunction = useFunction(count?.exceedFormatter); + const countShowFunction = useFunction(count?.show); + const showCountFunction = useFunction( + typeof showCount === 'object' ? showCount.formatter : undefined + ); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + + return ( + <> +
{children}
+ { + onChange?.(e); + setValue(e.target.value); + }} + showCount={ + slots['showCount.formatter'] + ? { + formatter: renderParamsSlot({ + slots, + setSlotParams, + key: 'showCount.formatter', + }), + } + : typeof showCount === 'object' && showCountFunction + ? { + ...showCount, + formatter: showCountFunction, + } + : showCount + } + count={useMemo( + () => + omitUndefinedProps({ + ...count, + exceedFormatter: countExceedFormatterFunction, + strategy: countStrategyFunction, + show: countShowFunction || count?.show, + }), + [ + count, + countExceedFormatterFunction, + countStrategyFunction, + countShowFunction, + ] + )} + addonAfter={ + slots.addonAfter ? ( + + ) : ( + props.addonAfter + ) + } + addonBefore={ + slots.addonBefore ? ( + + ) : ( + props.addonBefore + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + prefix={ + slots.prefix ? : props.prefix + } + suffix={ + slots.suffix ? : props.suffix + } + /> + + ); + } +); + +export default Input; diff --git a/frontend/antd/input/otp/Index.svelte b/frontend/antd/input/otp/Index.svelte new file mode 100644 index 00000000..e5e27321 --- /dev/null +++ b/frontend/antd/input/otp/Index.svelte @@ -0,0 +1,77 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInputOTP then InputOTP} + { + value = v; + }} + /> + {/await} +{/if} + + diff --git a/frontend/antd/input/otp/gradio.config.js b/frontend/antd/input/otp/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/input/otp/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input/otp/input.otp.tsx b/frontend/antd/input/otp/input.otp.tsx new file mode 100644 index 00000000..b4938a04 --- /dev/null +++ b/frontend/antd/input/otp/input.otp.tsx @@ -0,0 +1,31 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { type GetProps, Input as AInput } from 'antd'; + +export const InputOTP = sveltify< + GetProps & { + onValueChange: (value: string) => void; + } +>(({ formatter, onValueChange, onChange, elRef, ...props }) => { + const formatterFunction = useFunction(formatter); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + + return ( + { + onChange?.(v); + setValue(v); + }} + /> + ); +}); + +export default InputOTP; diff --git a/frontend/antd/input/otp/package.json b/frontend/antd/input/otp/package.json new file mode 100644 index 00000000..4d7e5a6d --- /dev/null +++ b/frontend/antd/input/otp/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input.otp", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input/package.json b/frontend/antd/input/package.json new file mode 100644 index 00000000..1e06b44d --- /dev/null +++ b/frontend/antd/input/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input/password/Index.svelte b/frontend/antd/input/password/Index.svelte new file mode 100644 index 00000000..ebde2452 --- /dev/null +++ b/frontend/antd/input/password/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInputPassword then InputPassword} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/input/password/gradio.config.js b/frontend/antd/input/password/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/input/password/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input/password/input.password.tsx b/frontend/antd/input/password/input.password.tsx new file mode 100644 index 00000000..48b106f3 --- /dev/null +++ b/frontend/antd/input/password/input.password.tsx @@ -0,0 +1,133 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Input as AInput } from 'antd'; + +export const InputPassword = sveltify< + GetProps & { + onValueChange: (value: string) => void; + setSlotParams: SetSlotParams; + }, + [ + 'iconRender', + 'addonAfter', + 'addonBefore', + 'allowClear.clearIcon', + 'prefix', + 'suffix', + 'showCount.formatter', + ] +>( + ({ + slots, + children, + count, + showCount, + onValueChange, + onChange, + iconRender, + elRef, + setSlotParams, + ...props + }) => { + const countStrategyFunction = useFunction(count?.strategy); + const countExceedFormatterFunction = useFunction(count?.exceedFormatter); + const countShowFunction = useFunction(count?.show); + const showCountFunction = useFunction( + typeof showCount === 'object' ? showCount.formatter : undefined + ); + const iconRenderFunction = useFunction(iconRender); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + onChange?.(e); + setValue(e.target.value); + }} + iconRender={ + slots.iconRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'iconRender', + }) + : iconRenderFunction + } + showCount={ + slots['showCount.formatter'] + ? { + formatter: renderParamsSlot({ + slots, + setSlotParams, + key: 'showCount.formatter', + }), + } + : typeof showCount === 'object' && showCountFunction + ? { + ...showCount, + formatter: showCountFunction, + } + : showCount + } + count={useMemo( + () => + omitUndefinedProps({ + ...count, + exceedFormatter: countExceedFormatterFunction, + strategy: countStrategyFunction, + show: countShowFunction || count?.show, + }), + [ + count, + countExceedFormatterFunction, + countStrategyFunction, + countShowFunction, + ] + )} + addonAfter={ + slots.addonAfter ? ( + + ) : ( + props.addonAfter + ) + } + addonBefore={ + slots.addonBefore ? ( + + ) : ( + props.addonBefore + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + prefix={ + slots.prefix ? : props.prefix + } + suffix={ + slots.suffix ? : props.suffix + } + /> + + ); + } +); + +export default InputPassword; diff --git a/frontend/antd/input/password/package.json b/frontend/antd/input/password/package.json new file mode 100644 index 00000000..a1d844ab --- /dev/null +++ b/frontend/antd/input/password/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input.password", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input/search/Index.svelte b/frontend/antd/input/search/Index.svelte new file mode 100644 index 00000000..bb6caba2 --- /dev/null +++ b/frontend/antd/input/search/Index.svelte @@ -0,0 +1,87 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInputSearch then InputSearch} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/input/search/gradio.config.js b/frontend/antd/input/search/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/input/search/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input/search/input.search.tsx b/frontend/antd/input/search/input.search.tsx new file mode 100644 index 00000000..e4bd8dcf --- /dev/null +++ b/frontend/antd/input/search/input.search.tsx @@ -0,0 +1,129 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Input as AInput } from 'antd'; + +export const InputSearch = sveltify< + GetProps & { + onValueChange: (value: string) => void; + setSlotParams: SetSlotParams; + }, + [ + 'addonAfter', + 'addonBefore', + 'allowClear.clearIcon', + 'prefix', + 'suffix', + 'enterButton', + 'showCount.formatter', + ] +>( + ({ + slots, + children, + count, + showCount, + onValueChange, + onChange, + elRef, + setSlotParams, + ...props + }) => { + const countStrategyFunction = useFunction(count?.strategy); + const countExceedFormatterFunction = useFunction(count?.exceedFormatter); + const countShowFunction = useFunction(count?.show); + const showCountFunction = useFunction( + typeof showCount === 'object' ? showCount.formatter : undefined + ); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + onChange?.(e); + setValue(e.target.value); + }} + showCount={ + slots['showCount.formatter'] + ? { + formatter: renderParamsSlot({ + slots, + setSlotParams, + key: 'showCount.formatter', + }), + } + : typeof showCount === 'object' && showCountFunction + ? { + ...showCount, + formatter: showCountFunction, + } + : showCount + } + count={useMemo( + () => + omitUndefinedProps({ + ...count, + exceedFormatter: countExceedFormatterFunction, + strategy: countStrategyFunction, + show: countShowFunction || count?.show, + }), + [ + count, + countExceedFormatterFunction, + countStrategyFunction, + countShowFunction, + ] + )} + enterButton={ + slots.enterButton ? ( + + ) : ( + props.enterButton + ) + } + addonAfter={ + slots.addonAfter ? ( + + ) : ( + props.addonAfter + ) + } + addonBefore={ + slots.addonBefore ? ( + + ) : ( + props.addonBefore + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + prefix={ + slots.prefix ? : props.prefix + } + suffix={ + slots.suffix ? : props.suffix + } + /> + + ); + } +); + +export default InputSearch; diff --git a/frontend/antd/input/search/package.json b/frontend/antd/input/search/package.json new file mode 100644 index 00000000..199e28ca --- /dev/null +++ b/frontend/antd/input/search/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input.search", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/input/textarea/Index.svelte b/frontend/antd/input/textarea/Index.svelte new file mode 100644 index 00000000..bdb536a6 --- /dev/null +++ b/frontend/antd/input/textarea/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedInputTextarea then InputTextarea} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/input/textarea/gradio.config.js b/frontend/antd/input/textarea/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/input/textarea/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/input/textarea/input.textarea.tsx b/frontend/antd/input/textarea/input.textarea.tsx new file mode 100644 index 00000000..9f489b2b --- /dev/null +++ b/frontend/antd/input/textarea/input.textarea.tsx @@ -0,0 +1,95 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Input as AInput } from 'antd'; + +export const InputTextarea = sveltify< + GetProps & { + onValueChange: (value: string) => void; + setSlotParams: SetSlotParams; + }, + ['allowClear.clearIcon', 'showCount.formatter'] +>( + ({ + slots, + children, + count, + showCount, + onValueChange, + onChange, + elRef, + setSlotParams, + ...props + }) => { + const countStrategyFunction = useFunction(count?.strategy); + const countExceedFormatterFunction = useFunction(count?.exceedFormatter); + const countShowFunction = useFunction(count?.show); + const showCountFunction = useFunction( + typeof showCount === 'object' ? showCount.formatter : undefined + ); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + + return ( + <> +
{children}
+ { + onChange?.(e); + setValue(e.target.value); + }} + showCount={ + slots['showCount.formatter'] + ? { + formatter: renderParamsSlot({ + slots, + setSlotParams, + key: 'showCount.formatter', + }), + } + : typeof showCount === 'object' && showCountFunction + ? { + ...showCount, + formatter: showCountFunction, + } + : showCount + } + count={useMemo( + () => + omitUndefinedProps({ + ...count, + exceedFormatter: countExceedFormatterFunction, + strategy: countStrategyFunction, + show: countShowFunction || count?.show, + }), + [ + count, + countExceedFormatterFunction, + countStrategyFunction, + countShowFunction, + ] + )} + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + /> + + ); + } +); + +export default InputTextarea; diff --git a/frontend/antd/input/textarea/package.json b/frontend/antd/input/textarea/package.json new file mode 100644 index 00000000..cbf45dda --- /dev/null +++ b/frontend/antd/input/textarea/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-input.textarea", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/layout/Base.svelte b/frontend/antd/layout/Base.svelte new file mode 100644 index 00000000..c4eab932 --- /dev/null +++ b/frontend/antd/layout/Base.svelte @@ -0,0 +1,74 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedLayoutBase then LayoutBase} + + + + {/await} +{/if} + + diff --git a/frontend/antd/layout/Index.svelte b/frontend/antd/layout/Index.svelte new file mode 100644 index 00000000..bc283720 --- /dev/null +++ b/frontend/antd/layout/Index.svelte @@ -0,0 +1,10 @@ + + + + + + + diff --git a/frontend/antd/layout/content/Index.svelte b/frontend/antd/layout/content/Index.svelte new file mode 100644 index 00000000..33b0ffdf --- /dev/null +++ b/frontend/antd/layout/content/Index.svelte @@ -0,0 +1,10 @@ + + + + + + + diff --git a/frontend/antd/layout/content/gradio.config.js b/frontend/antd/layout/content/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/layout/content/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/layout/content/package.json b/frontend/antd/layout/content/package.json new file mode 100644 index 00000000..d1d8802b --- /dev/null +++ b/frontend/antd/layout/content/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-layout.content", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/layout/footer/Index.svelte b/frontend/antd/layout/footer/Index.svelte new file mode 100644 index 00000000..de1f73b4 --- /dev/null +++ b/frontend/antd/layout/footer/Index.svelte @@ -0,0 +1,10 @@ + + + + + + + diff --git a/frontend/antd/layout/footer/gradio.config.js b/frontend/antd/layout/footer/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/layout/footer/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/layout/footer/package.json b/frontend/antd/layout/footer/package.json new file mode 100644 index 00000000..081f6f0d --- /dev/null +++ b/frontend/antd/layout/footer/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-layout.footer", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/layout/gradio.config.js b/frontend/antd/layout/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/layout/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/layout/header/Index.svelte b/frontend/antd/layout/header/Index.svelte new file mode 100644 index 00000000..cedb6145 --- /dev/null +++ b/frontend/antd/layout/header/Index.svelte @@ -0,0 +1,10 @@ + + + + + + + diff --git a/frontend/antd/layout/header/gradio.config.js b/frontend/antd/layout/header/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/layout/header/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/layout/header/package.json b/frontend/antd/layout/header/package.json new file mode 100644 index 00000000..3a473715 --- /dev/null +++ b/frontend/antd/layout/header/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-layout.header", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/layout/layout.base.tsx b/frontend/antd/layout/layout.base.tsx new file mode 100644 index 00000000..9e02bb90 --- /dev/null +++ b/frontend/antd/layout/layout.base.tsx @@ -0,0 +1,39 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React, { useMemo } from 'react'; +import { type GetProps, Layout as ALayout } from 'antd'; +import cls from 'classnames'; + +export const Base = sveltify< + GetProps & + GetProps & + GetProps & + GetProps & { + component?: 'header' | 'footer' | 'content' | 'layout'; + } +>(({ component, className, ...props }) => { + const LayoutComponent = useMemo(() => { + switch (component) { + case 'content': + return ALayout.Content; + case 'footer': + return ALayout.Footer; + case 'header': + return ALayout.Header; + case 'layout': + return ALayout; + default: + return ALayout; + } + }, [component]); + return ( + + ); +}); + +export default Base; diff --git a/frontend/antd/layout/package.json b/frontend/antd/layout/package.json new file mode 100644 index 00000000..fb548851 --- /dev/null +++ b/frontend/antd/layout/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-layout", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/layout/sider/Index.svelte b/frontend/antd/layout/sider/Index.svelte new file mode 100644 index 00000000..ad309d83 --- /dev/null +++ b/frontend/antd/layout/sider/Index.svelte @@ -0,0 +1,74 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedLayoutSider then LayoutSider} + + + + {/await} +{/if} + + diff --git a/frontend/antd/layout/sider/gradio.config.js b/frontend/antd/layout/sider/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/layout/sider/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/layout/sider/layout.sider.tsx b/frontend/antd/layout/sider/layout.sider.tsx new file mode 100644 index 00000000..4b042ee9 --- /dev/null +++ b/frontend/antd/layout/sider/layout.sider.tsx @@ -0,0 +1,25 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Layout as ALayout } from 'antd'; + +export const LayoutSider = sveltify< + GetProps, + ['trigger'] +>(({ slots, ...props }) => { + return ( + + ) : props.trigger === undefined ? null : props.trigger === + 'default' ? undefined : ( + props.trigger + ) + } + /> + ); +}); + +export default LayoutSider; diff --git a/frontend/antd/layout/sider/package.json b/frontend/antd/layout/sider/package.json new file mode 100644 index 00000000..e93c644e --- /dev/null +++ b/frontend/antd/layout/sider/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-layout.sider", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/list/Index.svelte b/frontend/antd/list/Index.svelte new file mode 100644 index 00000000..285bae20 --- /dev/null +++ b/frontend/antd/list/Index.svelte @@ -0,0 +1,78 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedList then List} + + + + {/await} +{/if} + + diff --git a/frontend/antd/list/gradio.config.js b/frontend/antd/list/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/list/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/list/item/Index.svelte b/frontend/antd/list/item/Index.svelte new file mode 100644 index 00000000..94ff9edd --- /dev/null +++ b/frontend/antd/list/item/Index.svelte @@ -0,0 +1,68 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedListItem then ListItem} + + + + {/await} +{/if} + + diff --git a/frontend/antd/list/item/gradio.config.js b/frontend/antd/list/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/list/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/list/item/list.item.tsx b/frontend/antd/list/item/list.item.tsx new file mode 100644 index 00000000..1f95c792 --- /dev/null +++ b/frontend/antd/list/item/list.item.tsx @@ -0,0 +1,28 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useTargets } from '@utils/hooks/useTargets'; +import { type GetProps, List as AList } from 'antd'; + +export const ListItem = sveltify< + GetProps, + ['extra', 'actions'] +>(({ slots, children, ...props }) => { + const actionsSlots = useTargets(children, 'actions'); + return ( + : props.extra} + actions={ + actionsSlots.length > 0 + ? actionsSlots.map((slot, index) => { + return ; + }) + : props.actions + } + > + {children} + + ); +}); + +export default ListItem; diff --git a/frontend/antd/list/item/meta/Index.svelte b/frontend/antd/list/item/meta/Index.svelte new file mode 100644 index 00000000..6f86bc1d --- /dev/null +++ b/frontend/antd/list/item/meta/Index.svelte @@ -0,0 +1,68 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedListItemMeta then ListItemMeta} + + + + {/await} +{/if} + + diff --git a/frontend/antd/list/item/meta/gradio.config.js b/frontend/antd/list/item/meta/gradio.config.js new file mode 100644 index 00000000..7b2fe8dd --- /dev/null +++ b/frontend/antd/list/item/meta/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/list/item/meta/list.item.meta.tsx b/frontend/antd/list/item/meta/list.item.meta.tsx new file mode 100644 index 00000000..f86d219b --- /dev/null +++ b/frontend/antd/list/item/meta/list.item.meta.tsx @@ -0,0 +1,28 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { type GetProps, List as AList } from 'antd'; + +export const ListItemMeta = sveltify< + GetProps, + ['avatar', 'description', 'title'] +>(({ slots, children, ...props }) => { + return ( + <> + <>{children} + : props.avatar} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + title={slots.title ? : props.title} + /> + + ); +}); + +export default ListItemMeta; diff --git a/frontend/antd/list/item/meta/package.json b/frontend/antd/list/item/meta/package.json new file mode 100644 index 00000000..1cf251bb --- /dev/null +++ b/frontend/antd/list/item/meta/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-list.item.meta", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/list/item/package.json b/frontend/antd/list/item/package.json new file mode 100644 index 00000000..729c77ae --- /dev/null +++ b/frontend/antd/list/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-list.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/list/list.tsx b/frontend/antd/list/list.tsx new file mode 100644 index 00000000..1b8e79bd --- /dev/null +++ b/frontend/antd/list/list.tsx @@ -0,0 +1,33 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, List as AList } from 'antd'; + +export const List = sveltify< + GetProps & { + setSlotParams: SetSlotParams; + }, + ['footer', 'header', 'loadMore', 'renderItem'] +>(({ slots, renderItem, setSlotParams, ...props }) => { + const renderItemFunction = useFunction(renderItem); + return ( + : props.footer} + header={slots.header ? : props.header} + loadMore={ + slots.loadMore ? : props.loadMore + } + renderItem={ + slots.renderItem + ? renderParamsSlot({ slots, setSlotParams, key: 'renderItem' }) + : renderItemFunction + } + /> + ); +}); + +export default List; diff --git a/frontend/antd/list/package.json b/frontend/antd/list/package.json new file mode 100644 index 00000000..c6f617dd --- /dev/null +++ b/frontend/antd/list/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-list", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/mentions/Index.svelte b/frontend/antd/mentions/Index.svelte new file mode 100644 index 00000000..4e19a876 --- /dev/null +++ b/frontend/antd/mentions/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedMentions then Mentions} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/mentions/context.ts b/frontend/antd/mentions/context.ts new file mode 100644 index 00000000..4a5e0fcd --- /dev/null +++ b/frontend/antd/mentions/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('mentions'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/mentions/gradio.config.js b/frontend/antd/mentions/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/mentions/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/mentions/mentions.tsx b/frontend/antd/mentions/mentions.tsx new file mode 100644 index 00000000..114a013f --- /dev/null +++ b/frontend/antd/mentions/mentions.tsx @@ -0,0 +1,73 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useValueChange } from '@utils/hooks/useValueChange'; +import { renderItems } from '@utils/renderItems'; +import { type GetProps, Mentions as AMentions } from 'antd'; + +import { type Item } from './context'; + +export const Mentions = sveltify< + GetProps & { + optionItems: Item[]; + onValueChange: (value: string) => void; + }, + ['allowClear.clearIcon', 'notFoundContent'] +>( + ({ + slots, + children, + onValueChange, + filterOption, + onChange, + options, + validateSearch, + optionItems, + getPopupContainer, + elRef, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const filterOptionFunction = useFunction(filterOption); + const validateSearchFunction = useFunction(validateSearch); + const [value, setValue] = useValueChange({ + onValueChange, + value: props.value, + }); + return ( + <> +
{children}
+ { + return ( + options || + renderItems< + NonNullable['options']>[number] + >(optionItems) + ); + }, [optionItems, options])} + onChange={(v, ...args) => { + onChange?.(v, ...args); + setValue(v); + }} + validateSearch={validateSearchFunction} + notFoundContent={ + slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ) + } + filterOption={filterOptionFunction || filterOption} + getPopupContainer={getPopupContainerFunction} + /> + + ); + } +); + +export default Mentions; diff --git a/frontend/antd/mentions/option/Index.svelte b/frontend/antd/mentions/option/Index.svelte new file mode 100644 index 00000000..0683c8b0 --- /dev/null +++ b/frontend/antd/mentions/option/Index.svelte @@ -0,0 +1,99 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/mentions/option/gradio.config.js b/frontend/antd/mentions/option/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/mentions/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/mentions/option/package.json b/frontend/antd/mentions/option/package.json new file mode 100644 index 00000000..295cd4af --- /dev/null +++ b/frontend/antd/mentions/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-mentions.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/mentions/package.json b/frontend/antd/mentions/package.json new file mode 100644 index 00000000..4b99168f --- /dev/null +++ b/frontend/antd/mentions/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-mentions", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/menu/Index.svelte b/frontend/antd/menu/Index.svelte new file mode 100644 index 00000000..7e26f124 --- /dev/null +++ b/frontend/antd/menu/Index.svelte @@ -0,0 +1,82 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedMenu then Menu} + 0 ? $items : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/menu/context.ts b/frontend/antd/menu/context.ts new file mode 100644 index 00000000..705eb792 --- /dev/null +++ b/frontend/antd/menu/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('menu'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/menu/gradio.config.js b/frontend/antd/menu/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/menu/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/menu/item/Index.svelte b/frontend/antd/menu/item/Index.svelte new file mode 100644 index 00000000..451e1558 --- /dev/null +++ b/frontend/antd/menu/item/Index.svelte @@ -0,0 +1,98 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/menu/item/gradio.config.js b/frontend/antd/menu/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/menu/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/menu/item/package.json b/frontend/antd/menu/item/package.json new file mode 100644 index 00000000..f078a35d --- /dev/null +++ b/frontend/antd/menu/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-menu.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/menu/menu.less b/frontend/antd/menu/menu.less new file mode 100644 index 00000000..758f4b7f --- /dev/null +++ b/frontend/antd/menu/menu.less @@ -0,0 +1,44 @@ +.ms-gr-antd-container { + .ms-gr-ant-menu + .ms-gr-ant-menu-item + react-child:has(.ms-gr-ant-menu-item-icon) + + span, + .ms-gr-ant-menu + .ms-gr-ant-menu-submenu-title + react-child:has(.ms-gr-ant-menu-item-icon) + + span { + margin-inline-start: var(--ms-gr-ant-menu-icon-margin-inline-end); + opacity: 1; + transition: + opacity var(--ms-gr-ant-motion-duration-slow) + var(--ms-gr-ant-motion-ease-in-out), + margin var(--ms-gr-ant-motion-duration-slow), + color var(--ms-gr-ant-motion-duration-slow); + } + + .ms-gr-ant-menu-inline-collapsed + > .ms-gr-ant-menu-item + react-child:has(.ms-gr-ant-menu-item-icon) + + span, + .ms-gr-ant-menu-inline-collapsed + > .ms-gr-ant-menu-item-group + > .ms-gr-ant-menu-item-group-list + > .ms-gr-ant-menu-item + react-child:has(.ms-gr-ant-menu-item-icon) + + span, + .ms-gr-ant-menu-inline-collapsed + > .ms-gr-ant-menu-item-group + > .ms-gr-ant-menu-item-group-list + > .ms-gr-ant-menu-submenu + > .ms-gr-ant-menu-submenu-title + react-child:has(.ms-gr-ant-menu-item-icon) + + span, + .ms-gr-ant-menu-inline-collapsed + > .ms-gr-ant-menu-submenu + > .ms-gr-ant-menu-submenu-title + react-child:has(.ms-gr-ant-menu-item-icon) + + span { + display: inline-block; + opacity: 0; + } +} diff --git a/frontend/antd/menu/menu.tsx b/frontend/antd/menu/menu.tsx new file mode 100644 index 00000000..0b549159 --- /dev/null +++ b/frontend/antd/menu/menu.tsx @@ -0,0 +1,76 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Menu as AMenu } from 'antd'; +import type { ItemType } from 'antd/es/menu/interface'; + +import { type Item } from './context'; + +import './menu.less'; + +export const Menu = sveltify< + GetProps & { + slotItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['expandIcon', 'overflowedIndicator'] +>( + ({ + slots, + items, + slotItems, + children, + onOpenChange, + onSelect, + onDeselect, + setSlotParams, + ...props + }) => { + return ( + <> + {children} + { + onOpenChange?.(openKeys); + }} + onSelect={(e) => { + onSelect?.(e); + }} + onDeselect={(e) => { + onDeselect?.(e); + }} + items={useMemo(() => { + // ['label','icon',"title"] + return items || renderItems(slotItems); + }, [items, slotItems])} + expandIcon={ + slots.expandIcon + ? renderParamsSlot( + { + key: 'expandIcon', + slots, + setSlotParams, + }, + { clone: true } + ) + : props.expandIcon + } + overflowedIndicator={ + slots.overflowedIndicator ? ( + + ) : ( + props.overflowedIndicator + ) + } + /> + + ); + } +); + +export default Menu; diff --git a/frontend/antd/menu/package.json b/frontend/antd/menu/package.json new file mode 100644 index 00000000..21d1e57c --- /dev/null +++ b/frontend/antd/menu/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-menu", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/message/Index.svelte b/frontend/antd/message/Index.svelte new file mode 100644 index 00000000..00777e64 --- /dev/null +++ b/frontend/antd/message/Index.svelte @@ -0,0 +1,80 @@ + + + + +{#await AwaitedMessage then Message} + { + visible = v; + }} + > + + +{/await} + + diff --git a/frontend/antd/message/gradio.config.js b/frontend/antd/message/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/message/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/message/message.tsx b/frontend/antd/message/message.tsx new file mode 100644 index 00000000..0c2b7ee0 --- /dev/null +++ b/frontend/antd/message/message.tsx @@ -0,0 +1,66 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React, { useEffect } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { message } from 'antd'; +import { type ArgsProps } from 'antd/es/message'; +import type { ConfigOptions } from 'antd/es/message/interface'; + +export const Message = sveltify< + ArgsProps & + ConfigOptions & { + children?: React.ReactNode; + visible?: boolean; + onVisible?: (visible: boolean) => void; + }, + ['content', 'icon'] +>( + ({ + slots, + children, + visible, + onVisible, + onClose, + getContainer, + ...props + }) => { + const getContainerFunction = useFunction(getContainer); + const [messageApi, contextHolder] = message.useMessage({ + ...props, + getContainer: getContainerFunction, + }); + + useEffect(() => { + if (visible) { + messageApi.open({ + ...props, + icon: slots.icon ? : props.icon, + content: slots.content ? ( + + ) : ( + props.content + ), + onClose(...args) { + onVisible?.(false); + onClose?.(...args); + }, + }); + } else { + messageApi.destroy(props.key); + } + + return () => { + messageApi.destroy(props.key); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [visible]); + return ( + <> +
{children}
+ {contextHolder} + + ); + } +); + +export default Message; diff --git a/frontend/antd/message/package.json b/frontend/antd/message/package.json new file mode 100644 index 00000000..6690b00d --- /dev/null +++ b/frontend/antd/message/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-message", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/modal/Index.svelte b/frontend/antd/modal/Index.svelte new file mode 100644 index 00000000..c42604b0 --- /dev/null +++ b/frontend/antd/modal/Index.svelte @@ -0,0 +1,79 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedModal then Modal} + + + + {/await} +{/if} + + diff --git a/frontend/antd/modal/gradio.config.js b/frontend/antd/modal/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/modal/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/modal/modal.tsx b/frontend/antd/modal/modal.tsx new file mode 100644 index 00000000..a1c3be45 --- /dev/null +++ b/frontend/antd/modal/modal.tsx @@ -0,0 +1,104 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Modal as AModal } from 'antd'; + +export const Modal = sveltify< + GetProps & { + setSlotParams: SetSlotParams; + }, + [ + 'cancelButtonProps.icon', + 'cancelText', + 'closable.closeIcon', + 'closeIcon', + 'footer', + 'title', + 'okButtonProps.icon', + 'okText', + 'modalRender', + ] +>( + ({ + slots, + afterClose, + afterOpenChange, + getContainer, + children, + modalRender, + setSlotParams, + ...props + }) => { + const afterOpenChangeFunction = useFunction(afterOpenChange); + const afterCloseFunction = useFunction(afterClose); + const getContainerFunction = useFunction(getContainer); + const modalRenderFunction = useFunction(modalRender); + return ( + : props.okText} + okButtonProps={{ + ...(props.okButtonProps || {}), + icon: slots['okButtonProps.icon'] ? ( + + ) : ( + props.okButtonProps?.icon + ), + }} + cancelText={ + slots.cancelText ? ( + + ) : ( + props.cancelText + ) + } + cancelButtonProps={{ + ...(props.cancelButtonProps || {}), + icon: slots['cancelButtonProps.icon'] ? ( + + ) : ( + props.cancelButtonProps?.icon + ), + }} + closable={ + slots['closable.closeIcon'] + ? { + ...(typeof props.closable === 'object' ? props.closable : {}), + closeIcon: , + } + : props.closable + } + closeIcon={ + slots.closeIcon ? ( + + ) : ( + props.closeIcon + ) + } + footer={ + slots.footer + ? renderParamsSlot({ slots, setSlotParams, key: 'footer' }) + : props.footer + } + title={slots.title ? : props.title} + modalRender={ + slots.modalRender + ? renderParamsSlot({ slots, setSlotParams, key: 'modalRender' }) + : modalRenderFunction + } + getContainer={ + typeof getContainer === 'string' ? getContainerFunction : getContainer + } + > + {children} + + ); + } +); + +export default Modal; diff --git a/frontend/antd/modal/package.json b/frontend/antd/modal/package.json new file mode 100644 index 00000000..b12ba527 --- /dev/null +++ b/frontend/antd/modal/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-modal", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/notification/Index.svelte b/frontend/antd/notification/Index.svelte new file mode 100644 index 00000000..c453d175 --- /dev/null +++ b/frontend/antd/notification/Index.svelte @@ -0,0 +1,80 @@ + + + + +{#await AwaitedNotification then Notification} + { + visible = v; + }} + > + + +{/await} + + diff --git a/frontend/antd/notification/gradio.config.js b/frontend/antd/notification/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/notification/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/notification/notification.tsx b/frontend/antd/notification/notification.tsx new file mode 100644 index 00000000..ff06262a --- /dev/null +++ b/frontend/antd/notification/notification.tsx @@ -0,0 +1,80 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React, { useEffect } from 'react'; +import { notification } from 'antd'; +import { type ArgsProps } from 'antd/es/notification'; +import type { NotificationConfig } from 'antd/es/notification/interface'; + +export const Notification = sveltify< + ArgsProps & + NotificationConfig & { + children?: React.ReactNode; + visible?: boolean; + onVisible?: (visible: boolean) => void; + }, + ['btn', 'closeIcon', 'description', 'icon', 'message'] +>( + ({ + slots, + bottom, + rtl, + stack, + top, + children, + visible, + onClose, + onVisible, + ...props + }) => { + const [notificationApi, contextHolder] = notification.useNotification({ + bottom, + rtl, + stack, + top, + }); + + useEffect(() => { + if (visible) { + notificationApi.open({ + ...props, + btn: slots.btn ? : props.btn, + closeIcon: slots['closeIcon'] ? ( + + ) : ( + props.closeIcon + ), + description: slots.description ? ( + + ) : ( + props.description + ), + message: slots.message ? ( + + ) : ( + props.message + ), + icon: slots.icon ? : props.icon, + onClose(...args) { + onVisible?.(false); + onClose?.(...args); + }, + }); + } else { + notificationApi.destroy(props.key); + } + + return () => { + notificationApi.destroy(props.key); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [visible]); + return ( + <> + {children} + {contextHolder} + + ); + } +); + +export default Notification; diff --git a/frontend/antd/notification/package.json b/frontend/antd/notification/package.json new file mode 100644 index 00000000..70926955 --- /dev/null +++ b/frontend/antd/notification/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-notification", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/package.json b/frontend/antd/package.json new file mode 100644 index 00000000..4ff6028f --- /dev/null +++ b/frontend/antd/package.json @@ -0,0 +1,5 @@ +{ + "name": "@modelscope-studio/antd", + "version": "1.0.0-beta.3", + "type": "module" +} diff --git a/frontend/antd/pagination/Index.svelte b/frontend/antd/pagination/Index.svelte new file mode 100644 index 00000000..8c141378 --- /dev/null +++ b/frontend/antd/pagination/Index.svelte @@ -0,0 +1,84 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedPagination then Pagination} + + + + {/await} +{/if} + + diff --git a/frontend/antd/pagination/gradio.config.js b/frontend/antd/pagination/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/pagination/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/pagination/package.json b/frontend/antd/pagination/package.json new file mode 100644 index 00000000..e4670065 --- /dev/null +++ b/frontend/antd/pagination/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-pagination", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/pagination/pagination.tsx b/frontend/antd/pagination/pagination.tsx new file mode 100644 index 00000000..af3e7492 --- /dev/null +++ b/frontend/antd/pagination/pagination.tsx @@ -0,0 +1,60 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Pagination as APagination } from 'antd'; + +export const Pagination = sveltify< + GetProps & { + children?: React.ReactNode; + setSlotParams: SetSlotParams; + }, + ['showQuickJumper.goButton', 'itemRender'] +>( + ({ + slots, + showTotal, + showQuickJumper, + onChange, + children, + itemRender, + setSlotParams, + ...props + }) => { + const itemRenderFunction = useFunction(itemRender); + const showTotalFunction = useFunction(showTotal); + return ( + <> +
{children}
+ { + onChange?.(page, pageSize); + }} + showQuickJumper={ + slots['showQuickJumper.goButton'] + ? { + goButton: ( + + ), + } + : showQuickJumper + } + /> + + ); + } +); + +export default Pagination; diff --git a/frontend/antd/popconfirm/Index.svelte b/frontend/antd/popconfirm/Index.svelte new file mode 100644 index 00000000..52dc8ad4 --- /dev/null +++ b/frontend/antd/popconfirm/Index.svelte @@ -0,0 +1,76 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedPopconfirm then Popconfirm} + + + + {/await} +{/if} + + diff --git a/frontend/antd/popconfirm/gradio.config.js b/frontend/antd/popconfirm/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/popconfirm/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/popconfirm/package.json b/frontend/antd/popconfirm/package.json new file mode 100644 index 00000000..fe5fff9e --- /dev/null +++ b/frontend/antd/popconfirm/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-popconfirm", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/popconfirm/popconfirm.tsx b/frontend/antd/popconfirm/popconfirm.tsx new file mode 100644 index 00000000..a1708592 --- /dev/null +++ b/frontend/antd/popconfirm/popconfirm.tsx @@ -0,0 +1,64 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { type GetProps, Popconfirm as APopconfirm } from 'antd'; + +export const Popconfirm = sveltify< + GetProps, + [ + 'title', + 'cancelButtonProps.icon', + 'cancelText', + 'description', + 'okButtonProps.icon', + 'okText', + ] +>(({ slots, afterOpenChange, getPopupContainer, children, ...props }) => { + const afterOpenChangeFunction = useFunction(afterOpenChange); + const getPopupContainerFunction = useFunction(getPopupContainer); + + return ( + : props.okText} + okButtonProps={{ + ...(props.okButtonProps || {}), + icon: slots['okButtonProps.icon'] ? ( + + ) : ( + props.okButtonProps?.icon + ), + }} + cancelText={ + slots.cancelText ? ( + + ) : ( + props.cancelText + ) + } + cancelButtonProps={{ + ...(props.cancelButtonProps || {}), + icon: slots['cancelButtonProps.icon'] ? ( + + ) : ( + props.cancelButtonProps?.icon + ), + }} + title={slots.title ? : props.title} + description={ + slots.description ? ( + + ) : ( + props.description + ) + } + > + {children} + + ); +}); + +export default Popconfirm; diff --git a/frontend/antd/popover/Index.svelte b/frontend/antd/popover/Index.svelte new file mode 100644 index 00000000..1ca93eb0 --- /dev/null +++ b/frontend/antd/popover/Index.svelte @@ -0,0 +1,75 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedPopover then Popover} + + + + {/await} +{/if} + + diff --git a/frontend/antd/popover/gradio.config.js b/frontend/antd/popover/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/popover/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/popover/package.json b/frontend/antd/popover/package.json new file mode 100644 index 00000000..597b1773 --- /dev/null +++ b/frontend/antd/popover/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-popover", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/popover/popover.tsx b/frontend/antd/popover/popover.tsx new file mode 100644 index 00000000..f9fb0341 --- /dev/null +++ b/frontend/antd/popover/popover.tsx @@ -0,0 +1,30 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { type GetProps, Popover as APopover } from 'antd'; + +export const Popover = sveltify< + GetProps, + ['title', 'content'] +>(({ slots, afterOpenChange, getPopupContainer, children, ...props }) => { + const afterOpenChangeFunction = useFunction(afterOpenChange); + const getPopupContainerFunction = useFunction(getPopupContainer); + return ( + <> + : props.title} + content={ + slots.content ? : props.content + } + > + {children} + + + ); +}); + +export default Popover; diff --git a/frontend/antd/progress/Index.svelte b/frontend/antd/progress/Index.svelte new file mode 100644 index 00000000..e0e8c4a9 --- /dev/null +++ b/frontend/antd/progress/Index.svelte @@ -0,0 +1,73 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedProgress then Progress} + + {/await} +{/if} diff --git a/frontend/antd/progress/gradio.config.js b/frontend/antd/progress/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/progress/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/progress/package.json b/frontend/antd/progress/package.json new file mode 100644 index 00000000..ae96d020 --- /dev/null +++ b/frontend/antd/progress/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-progress", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/progress/progress.tsx b/frontend/antd/progress/progress.tsx new file mode 100644 index 00000000..36c31aba --- /dev/null +++ b/frontend/antd/progress/progress.tsx @@ -0,0 +1,12 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { type GetProps, Progress as AProgress } from 'antd'; + +export const Progress = sveltify>( + ({ format, ...props }) => { + const formatFunction = useFunction(format); + return ; + } +); + +export default Progress; diff --git a/frontend/antd/qr-code/Index.svelte b/frontend/antd/qr-code/Index.svelte new file mode 100644 index 00000000..3eaac18f --- /dev/null +++ b/frontend/antd/qr-code/Index.svelte @@ -0,0 +1,78 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedQRCode then QRCode} + + {/await} +{/if} diff --git a/frontend/antd/qr-code/gradio.config.js b/frontend/antd/qr-code/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/qr-code/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/qr-code/package.json b/frontend/antd/qr-code/package.json new file mode 100644 index 00000000..f1d43ad8 --- /dev/null +++ b/frontend/antd/qr-code/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-qr-code", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/qr-code/qr-code.tsx b/frontend/antd/qr-code/qr-code.tsx new file mode 100644 index 00000000..f87b4d16 --- /dev/null +++ b/frontend/antd/qr-code/qr-code.tsx @@ -0,0 +1,26 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, QRCode as AQRCode } from 'antd'; + +export const QRCode = sveltify< + GetProps & { + setSlotParams: SetSlotParams; + }, + ['statusRender'] +>(({ setSlotParams, slots, statusRender, ...props }) => { + const statusRenderFunction = useFunction(statusRender); + return ( + + ); +}); + +export default QRCode; diff --git a/frontend/antd/radio/Index.svelte b/frontend/antd/radio/Index.svelte new file mode 100644 index 00000000..effd3d17 --- /dev/null +++ b/frontend/antd/radio/Index.svelte @@ -0,0 +1,80 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedRadio then Radio} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/radio/button/Index.svelte b/frontend/antd/radio/button/Index.svelte new file mode 100644 index 00000000..7547c6d4 --- /dev/null +++ b/frontend/antd/radio/button/Index.svelte @@ -0,0 +1,80 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedRadioButton then RadioButton} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/radio/button/gradio.config.js b/frontend/antd/radio/button/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/radio/button/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/radio/button/package.json b/frontend/antd/radio/button/package.json new file mode 100644 index 00000000..ec80da14 --- /dev/null +++ b/frontend/antd/radio/button/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-radio.button", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/radio/button/radio.button.tsx b/frontend/antd/radio/button/radio.button.tsx new file mode 100644 index 00000000..e69adbbf --- /dev/null +++ b/frontend/antd/radio/button/radio.button.tsx @@ -0,0 +1,29 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Radio as ARadio, theme } from 'antd'; + +export const Radio = sveltify< + GetProps & { + onValueChange: (value: boolean) => void; + } +>(({ onValueChange, onChange, elRef, style, ...props }) => { + const { token } = theme.useToken(); + + return ( + { + onChange?.(e); + onValueChange(e.target.checked); + }} + /> + ); +}); + +export default Radio; diff --git a/frontend/antd/radio/context.ts b/frontend/antd/radio/context.ts new file mode 100644 index 00000000..10e92743 --- /dev/null +++ b/frontend/antd/radio/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('radio-group'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/radio/gradio.config.js b/frontend/antd/radio/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/radio/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/radio/group/Index.svelte b/frontend/antd/radio/group/Index.svelte new file mode 100644 index 00000000..ccb94267 --- /dev/null +++ b/frontend/antd/radio/group/Index.svelte @@ -0,0 +1,88 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedRadioGroup then RadioGroup} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/radio/group/gradio.config.js b/frontend/antd/radio/group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/radio/group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/radio/group/option/Index.svelte b/frontend/antd/radio/group/option/Index.svelte new file mode 100644 index 00000000..fa600c81 --- /dev/null +++ b/frontend/antd/radio/group/option/Index.svelte @@ -0,0 +1,103 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/radio/group/option/gradio.config.js b/frontend/antd/radio/group/option/gradio.config.js new file mode 100644 index 00000000..7b2fe8dd --- /dev/null +++ b/frontend/antd/radio/group/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/radio/group/option/package.json b/frontend/antd/radio/group/option/package.json new file mode 100644 index 00000000..c93c2d0d --- /dev/null +++ b/frontend/antd/radio/group/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-radio.group.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/radio/group/package.json b/frontend/antd/radio/group/package.json new file mode 100644 index 00000000..bc2654c9 --- /dev/null +++ b/frontend/antd/radio/group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-radio.group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/radio/group/radio.group.less b/frontend/antd/radio/group/radio.group.less new file mode 100644 index 00000000..d9a16208 --- /dev/null +++ b/frontend/antd/radio/group/radio.group.less @@ -0,0 +1,20 @@ +.ms-gr-antd-container { + .ms-gr-antd-radio-group { + react-portal-target { + &:not(:first-child) { + .ms-gr-antd-radio-button { + border-start-start-radius: 0; + border-end-start-radius: 0; + margin-inline-start: calc(var(--ms-gr-antd-line-width) * -1); + } + } + + &:not(:last-child) { + .ms-gr-antd-radio-button { + border-start-end-radius: 0; + border-end-end-radius: 0; + } + } + } + } +} diff --git a/frontend/antd/radio/group/radio.group.tsx b/frontend/antd/radio/group/radio.group.tsx new file mode 100644 index 00000000..7cf02e4b --- /dev/null +++ b/frontend/antd/radio/group/radio.group.tsx @@ -0,0 +1,53 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { FormItemContext } from '@svelte-preprocess-react/context'; +import { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { type GetProps, Radio as ARadio } from 'antd'; + +import { type Item } from '../context'; + +import './radio.group.less'; + +export const RadioGroup = sveltify< + GetProps & { + onValueChange: (value: any) => void; + optionItems: Item[]; + } +>( + ({ + onValueChange, + onChange, + elRef, + optionItems, + options, + children, + ...props + }) => { + return ( + <> + { + return ( + options || + renderItems< + NonNullable['options']>[number] + >(optionItems) + ); + }, [optionItems, options])} + onChange={(e) => { + onChange?.(e); + onValueChange(e.target.value); + }} + > + + {children} + + + + ); + } +); + +export default RadioGroup; diff --git a/frontend/antd/radio/package.json b/frontend/antd/radio/package.json new file mode 100644 index 00000000..23aef293 --- /dev/null +++ b/frontend/antd/radio/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-radio", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/radio/radio.tsx b/frontend/antd/radio/radio.tsx new file mode 100644 index 00000000..2ab5345c --- /dev/null +++ b/frontend/antd/radio/radio.tsx @@ -0,0 +1,21 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Radio as ARadio } from 'antd'; + +export const Radio = sveltify< + GetProps & { + onValueChange: (value: boolean) => void; + } +>(({ onValueChange, onChange, elRef, ...props }) => { + return ( + { + onChange?.(e); + onValueChange(e.target.checked); + }} + /> + ); +}); + +export default Radio; diff --git a/frontend/antd/rate/Index.svelte b/frontend/antd/rate/Index.svelte new file mode 100644 index 00000000..6e9098ca --- /dev/null +++ b/frontend/antd/rate/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedRate then Rate} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/rate/gradio.config.js b/frontend/antd/rate/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/rate/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/rate/package.json b/frontend/antd/rate/package.json new file mode 100644 index 00000000..fae33ef2 --- /dev/null +++ b/frontend/antd/rate/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-rate", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/rate/rate.tsx b/frontend/antd/rate/rate.tsx new file mode 100644 index 00000000..c3a857cc --- /dev/null +++ b/frontend/antd/rate/rate.tsx @@ -0,0 +1,45 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Rate as ARate } from 'antd'; + +export const Rate = sveltify< + GetProps & { + onValueChange: (value: number) => void; + children?: React.ReactNode; + setSlotParams: SetSlotParams; + }, + ['character'] +>( + ({ + slots, + children, + onValueChange, + character, + onChange, + setSlotParams, + elRef, + ...props + }) => { + return ( + <> +
{children}
+ { + onChange?.(v); + onValueChange(v); + }} + character={ + slots.character + ? renderParamsSlot({ slots, setSlotParams, key: 'character' }) + : character + } + /> + + ); + } +); + +export default Rate; diff --git a/frontend/antd/result/Index.svelte b/frontend/antd/result/Index.svelte new file mode 100644 index 00000000..5f28ee14 --- /dev/null +++ b/frontend/antd/result/Index.svelte @@ -0,0 +1,73 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedResult then Result} + + + + {/await} +{/if} + + diff --git a/frontend/antd/result/gradio.config.js b/frontend/antd/result/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/result/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/result/package.json b/frontend/antd/result/package.json new file mode 100644 index 00000000..7f3d2a90 --- /dev/null +++ b/frontend/antd/result/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-result", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/result/result.tsx b/frontend/antd/result/result.tsx new file mode 100644 index 00000000..e2ea9c5a --- /dev/null +++ b/frontend/antd/result/result.tsx @@ -0,0 +1,23 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Result as AResult } from 'antd'; + +export const Result = sveltify< + GetProps, + ['extra', 'icon', 'subTitle', 'title'] +>(({ slots, ...props }) => { + return ( + : props.extra} + icon={slots.icon ? : props.icon} + subTitle={ + slots.subTitle ? : props.subTitle + } + title={slots.title ? : props.title} + /> + ); +}); + +export default Result; diff --git a/frontend/antd/segmented/Index.svelte b/frontend/antd/segmented/Index.svelte new file mode 100644 index 00000000..7a66bcc9 --- /dev/null +++ b/frontend/antd/segmented/Index.svelte @@ -0,0 +1,83 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSegmented then Segmented} + 0 ? $options : $children} + onValueChange={(v) => { + value = v; + }} + > + + + {/await} +{/if} diff --git a/frontend/antd/segmented/context.ts b/frontend/antd/segmented/context.ts new file mode 100644 index 00000000..cc4a8e3c --- /dev/null +++ b/frontend/antd/segmented/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('segmented'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/segmented/gradio.config.js b/frontend/antd/segmented/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/segmented/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/segmented/option/Index.svelte b/frontend/antd/segmented/option/Index.svelte new file mode 100644 index 00000000..c37794b4 --- /dev/null +++ b/frontend/antd/segmented/option/Index.svelte @@ -0,0 +1,84 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/segmented/option/gradio.config.js b/frontend/antd/segmented/option/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/segmented/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/segmented/option/package.json b/frontend/antd/segmented/option/package.json new file mode 100644 index 00000000..e9e9c7ee --- /dev/null +++ b/frontend/antd/segmented/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-segmented.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/segmented/package.json b/frontend/antd/segmented/package.json new file mode 100644 index 00000000..f1d43ad8 --- /dev/null +++ b/frontend/antd/segmented/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-qr-code", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/segmented/segmented.tsx b/frontend/antd/segmented/segmented.tsx new file mode 100644 index 00000000..f521f14f --- /dev/null +++ b/frontend/antd/segmented/segmented.tsx @@ -0,0 +1,35 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { type GetProps, Segmented as ASegmented } from 'antd'; + +import type { Item } from './context'; + +type SegmentedProps = GetProps; +export const Segmented = sveltify< + SegmentedProps & { + slotItems: Item[]; + onValueChange: (value: string | number) => void; + } +>(({ slotItems, options, onChange, onValueChange, children, ...props }) => { + return ( + <> +
{children}
+ { + onChange?.(v); + onValueChange(v as string | number); + }} + options={useMemo(() => { + // ['label','icon'] + return ( + options || renderItems(slotItems) + ); + }, [options, slotItems])} + /> + + ); +}); + +export default Segmented; diff --git a/frontend/antd/select/Index.svelte b/frontend/antd/select/Index.svelte new file mode 100644 index 00000000..2d3ff656 --- /dev/null +++ b/frontend/antd/select/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSelect then Select} + + {/await} +{/if} + + diff --git a/frontend/antd/select/context.ts b/frontend/antd/select/context.ts new file mode 100644 index 00000000..3849fc4d --- /dev/null +++ b/frontend/antd/select/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('select'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/select/gradio.config.js b/frontend/antd/select/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/select/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/select/option/Index.svelte b/frontend/antd/select/option/Index.svelte new file mode 100644 index 00000000..549fd509 --- /dev/null +++ b/frontend/antd/select/option/Index.svelte @@ -0,0 +1,103 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/select/option/gradio.config.js b/frontend/antd/select/option/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/select/option/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/select/option/package.json b/frontend/antd/select/option/package.json new file mode 100644 index 00000000..527c382d --- /dev/null +++ b/frontend/antd/select/option/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-select.option", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/select/package.json b/frontend/antd/select/package.json new file mode 100644 index 00000000..03094c7a --- /dev/null +++ b/frontend/antd/select/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-select", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/select/select.tsx b/frontend/antd/select/select.tsx new file mode 100644 index 00000000..48c4d0f4 --- /dev/null +++ b/frontend/antd/select/select.tsx @@ -0,0 +1,168 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Select as ASelect } from 'antd'; + +import { type Item } from './context'; + +export const Select = sveltify< + GetProps & { + optionItems: Item[]; + onValueChange: (value: string | number | (string | number)[]) => void; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'maxTagPlaceholder', + 'menuItemSelectedIcon', + 'notFoundContent', + 'removeIcon', + 'suffixIcon', + 'dropdownRender', + 'optionRender', + 'tagRender', + 'labelRender', + ] +>( + ({ + slots, + children, + onValueChange, + filterOption, + onChange, + options, + optionItems, + getPopupContainer, + dropdownRender, + optionRender, + tagRender, + labelRender, + filterSort, + elRef, + setSlotParams, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const filterOptionFunction = useFunction(filterOption); + const dropdownRenderFunction = useFunction(dropdownRender); + const filterSortFunction = useFunction(filterSort); + const optionRenderFunction = useFunction(optionRender); + const tagRenderFunction = useFunction(tagRender); + const labelRenderFunction = useFunction(labelRender); + + return ( + <> +
{children}
+ + { + return ( + options || + renderItems< + NonNullable['options']>[number] + >(optionItems, { + children: 'options', + clone: true, + }) + ); + }, [optionItems, options])} + onChange={(v, ...args) => { + onChange?.(v, ...args); + onValueChange(v as string); + }} + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + removeIcon={ + slots.removeIcon ? ( + + ) : ( + props.removeIcon + ) + } + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + notFoundContent={ + slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ) + } + menuItemSelectedIcon={ + slots['menuItemSelectedIcon'] ? ( + + ) : ( + props.menuItemSelectedIcon + ) + } + filterOption={filterOptionFunction || filterOption} + maxTagPlaceholder={ + slots.maxTagPlaceholder + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'maxTagPlaceholder', + }) + : props.maxTagPlaceholder + } + getPopupContainer={getPopupContainerFunction} + dropdownRender={ + slots.dropdownRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'dropdownRender', + }) + : dropdownRenderFunction + } + optionRender={ + slots.optionRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'optionRender', + }) + : optionRenderFunction + } + tagRender={ + slots.tagRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'tagRender', + }) + : tagRenderFunction + } + labelRender={ + slots.labelRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'labelRender', + }) + : labelRenderFunction + } + filterSort={filterSortFunction} + /> + + ); + } +); + +export default Select; diff --git a/frontend/antd/skeleton/Index.svelte b/frontend/antd/skeleton/Index.svelte new file mode 100644 index 00000000..52f891ca --- /dev/null +++ b/frontend/antd/skeleton/Index.svelte @@ -0,0 +1,73 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeleton then Skeleton} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/avatar/Index.svelte b/frontend/antd/skeleton/avatar/Index.svelte new file mode 100644 index 00000000..75e7bb1e --- /dev/null +++ b/frontend/antd/skeleton/avatar/Index.svelte @@ -0,0 +1,75 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeletonAvatar then SkeletonAvatar} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/avatar/gradio.config.js b/frontend/antd/skeleton/avatar/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/skeleton/avatar/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/avatar/package.json b/frontend/antd/skeleton/avatar/package.json new file mode 100644 index 00000000..35aa5482 --- /dev/null +++ b/frontend/antd/skeleton/avatar/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton.avatar", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/avatar/skeleton.avatar.tsx b/frontend/antd/skeleton/avatar/skeleton.avatar.tsx new file mode 100644 index 00000000..eca73bfb --- /dev/null +++ b/frontend/antd/skeleton/avatar/skeleton.avatar.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const SkeletonAvatar = sveltify>( + ASkeleton.Avatar +); + +export default SkeletonAvatar; diff --git a/frontend/antd/skeleton/button/Index.svelte b/frontend/antd/skeleton/button/Index.svelte new file mode 100644 index 00000000..1417e492 --- /dev/null +++ b/frontend/antd/skeleton/button/Index.svelte @@ -0,0 +1,75 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeletonButton then SkeletonButton} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/button/gradio.config.js b/frontend/antd/skeleton/button/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/skeleton/button/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/button/package.json b/frontend/antd/skeleton/button/package.json new file mode 100644 index 00000000..415a6d95 --- /dev/null +++ b/frontend/antd/skeleton/button/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton.button", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/button/skeleton.button.tsx b/frontend/antd/skeleton/button/skeleton.button.tsx new file mode 100644 index 00000000..085804e3 --- /dev/null +++ b/frontend/antd/skeleton/button/skeleton.button.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const SkeletonButton = sveltify>( + ASkeleton.Button +); + +export default SkeletonButton; diff --git a/frontend/antd/skeleton/gradio.config.js b/frontend/antd/skeleton/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/skeleton/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/image/Index.svelte b/frontend/antd/skeleton/image/Index.svelte new file mode 100644 index 00000000..c4fb677a --- /dev/null +++ b/frontend/antd/skeleton/image/Index.svelte @@ -0,0 +1,75 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeletonImage then SkeletonImage} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/image/gradio.config.js b/frontend/antd/skeleton/image/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/skeleton/image/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/image/package.json b/frontend/antd/skeleton/image/package.json new file mode 100644 index 00000000..6467b271 --- /dev/null +++ b/frontend/antd/skeleton/image/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton.image", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/image/skeleton.image.tsx b/frontend/antd/skeleton/image/skeleton.image.tsx new file mode 100644 index 00000000..30ca59f3 --- /dev/null +++ b/frontend/antd/skeleton/image/skeleton.image.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const SkeletonImage = sveltify>( + ASkeleton.Image +); + +export default SkeletonImage; diff --git a/frontend/antd/skeleton/input/Index.svelte b/frontend/antd/skeleton/input/Index.svelte new file mode 100644 index 00000000..d673621c --- /dev/null +++ b/frontend/antd/skeleton/input/Index.svelte @@ -0,0 +1,75 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeletonInput then SkeletonNodeInput} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/input/gradio.config.js b/frontend/antd/skeleton/input/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/skeleton/input/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/input/package.json b/frontend/antd/skeleton/input/package.json new file mode 100644 index 00000000..011e2611 --- /dev/null +++ b/frontend/antd/skeleton/input/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton.input", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/input/skeleton.input.tsx b/frontend/antd/skeleton/input/skeleton.input.tsx new file mode 100644 index 00000000..e0a760d4 --- /dev/null +++ b/frontend/antd/skeleton/input/skeleton.input.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const SkeletonInput = sveltify>( + ASkeleton.Input +); + +export default SkeletonInput; diff --git a/frontend/antd/skeleton/node/Index.svelte b/frontend/antd/skeleton/node/Index.svelte new file mode 100644 index 00000000..dae77478 --- /dev/null +++ b/frontend/antd/skeleton/node/Index.svelte @@ -0,0 +1,73 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSkeletonNode then SkeletonNode} + + + + {/await} +{/if} + + diff --git a/frontend/antd/skeleton/node/gradio.config.js b/frontend/antd/skeleton/node/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/skeleton/node/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/skeleton/node/package.json b/frontend/antd/skeleton/node/package.json new file mode 100644 index 00000000..a4a7b24c --- /dev/null +++ b/frontend/antd/skeleton/node/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton.node", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/node/skeleton.node.tsx b/frontend/antd/skeleton/node/skeleton.node.tsx new file mode 100644 index 00000000..7197790e --- /dev/null +++ b/frontend/antd/skeleton/node/skeleton.node.tsx @@ -0,0 +1,8 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const SkeletonNode = sveltify>( + ASkeleton.Node +); + +export default SkeletonNode; diff --git a/frontend/antd/skeleton/package.json b/frontend/antd/skeleton/package.json new file mode 100644 index 00000000..a8848a90 --- /dev/null +++ b/frontend/antd/skeleton/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-skeleton", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/skeleton/skeleton.tsx b/frontend/antd/skeleton/skeleton.tsx new file mode 100644 index 00000000..4afebe9a --- /dev/null +++ b/frontend/antd/skeleton/skeleton.tsx @@ -0,0 +1,6 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Skeleton as ASkeleton } from 'antd'; + +export const Skeleton = sveltify>(ASkeleton); + +export default Skeleton; diff --git a/frontend/antd/slider/Index.svelte b/frontend/antd/slider/Index.svelte new file mode 100644 index 00000000..13195362 --- /dev/null +++ b/frontend/antd/slider/Index.svelte @@ -0,0 +1,89 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSlider then Slider} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/slider/context.ts b/frontend/antd/slider/context.ts new file mode 100644 index 00000000..15f4b3d8 --- /dev/null +++ b/frontend/antd/slider/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('slider'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/slider/gradio.config.js b/frontend/antd/slider/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/slider/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/slider/mark/Index.svelte b/frontend/antd/slider/mark/Index.svelte new file mode 100644 index 00000000..bfddc478 --- /dev/null +++ b/frontend/antd/slider/mark/Index.svelte @@ -0,0 +1,94 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/slider/mark/gradio.config.js b/frontend/antd/slider/mark/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/slider/mark/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/slider/mark/package.json b/frontend/antd/slider/mark/package.json new file mode 100644 index 00000000..f7302d2a --- /dev/null +++ b/frontend/antd/slider/mark/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-slider.mark", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/slider/package.json b/frontend/antd/slider/package.json new file mode 100644 index 00000000..7cb4695d --- /dev/null +++ b/frontend/antd/slider/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-slider", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/slider/slider.tsx b/frontend/antd/slider/slider.tsx new file mode 100644 index 00000000..cfe67dd2 --- /dev/null +++ b/frontend/antd/slider/slider.tsx @@ -0,0 +1,96 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Slider as ASlider } from 'antd'; + +import { type Item } from './context'; + +type SliderProps = GetProps; + +const renderMarks = (items: Item[]) => { + return items.reduce( + (acc, v) => { + const number = v?.props.number; + if (number !== undefined) { + acc[number] = + v?.slots.label instanceof Element ? ( + { + ...v.props, + label: , + } + ) : v?.slots.children instanceof Element ? ( + + ) : ( + { + ...v?.props, + } + ); + } + return acc; + }, + {} as NonNullable + ); +}; + +export const Slider = sveltify< + SliderProps & { + onValueChange: (value: number | number[]) => void; + children?: React.ReactNode; + markItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['tooltip.formatter'] +>( + ({ + marks, + markItems, + children, + onValueChange, + onChange, + elRef, + tooltip, + step, + slots, + setSlotParams, + ...props + }) => { + const onSliderChange = (v: number | number[]) => { + onChange?.(v as any); + onValueChange(v); + }; + const tooltipGetPopupContainerFunction = useFunction( + tooltip?.getPopupContainer + ); + const tooltipFormatterFunction = useFunction(tooltip?.formatter); + return ( + <> +
{children}
+ { + return marks || renderMarks(markItems); + }, [markItems, marks])} + step={step === undefined ? null : step} + ref={elRef} + onChange={onSliderChange} + /> + + ); + } +); + +export default Slider; diff --git a/frontend/antd/space/Index.svelte b/frontend/antd/space/Index.svelte new file mode 100644 index 00000000..00a37121 --- /dev/null +++ b/frontend/antd/space/Index.svelte @@ -0,0 +1,72 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSpace then Space} + + + + {/await} +{/if} + + diff --git a/frontend/antd/space/compact/Index.svelte b/frontend/antd/space/compact/Index.svelte new file mode 100644 index 00000000..2a118b09 --- /dev/null +++ b/frontend/antd/space/compact/Index.svelte @@ -0,0 +1,73 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSpaceCompact then SpaceCompact} + + + + {/await} +{/if} + + diff --git a/frontend/antd/space/compact/gradio.config.js b/frontend/antd/space/compact/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/space/compact/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/space/compact/package.json b/frontend/antd/space/compact/package.json new file mode 100644 index 00000000..c6865718 --- /dev/null +++ b/frontend/antd/space/compact/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-space.compact", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/space/compact/space.compact.tsx b/frontend/antd/space/compact/space.compact.tsx new file mode 100644 index 00000000..3e11b3f4 --- /dev/null +++ b/frontend/antd/space/compact/space.compact.tsx @@ -0,0 +1,23 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useTargets } from '@utils/hooks/useTargets'; +import { type GetProps, Space as ASpace } from 'antd'; + +export const Space = sveltify>( + ({ children, ...props }) => { + const targets = useTargets(children); + return ( + <> +
{children}
+ + {targets.map((target, index) => { + return ; + })} + + + ); + } +); + +export default Space; diff --git a/frontend/antd/space/gradio.config.js b/frontend/antd/space/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/space/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/space/package.json b/frontend/antd/space/package.json new file mode 100644 index 00000000..2f2bb790 --- /dev/null +++ b/frontend/antd/space/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-space", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/space/space.tsx b/frontend/antd/space/space.tsx new file mode 100644 index 00000000..ed5e4993 --- /dev/null +++ b/frontend/antd/space/space.tsx @@ -0,0 +1,28 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useTargets } from '@utils/hooks/useTargets'; +import { type GetProps, Space as ASpace } from 'antd'; + +export const Space = sveltify, ['split']>( + ({ slots, children, ...props }) => { + const targets = useTargets(children); + return ( + <> +
{children}
+ : props.split + } + > + {targets.map((target, index) => { + return ; + })} + + + ); + } +); + +export default Space; diff --git a/frontend/antd/spin/Index.svelte b/frontend/antd/spin/Index.svelte new file mode 100644 index 00000000..48309203 --- /dev/null +++ b/frontend/antd/spin/Index.svelte @@ -0,0 +1,73 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSpin then Spin} + + + + {/await} +{/if} + + diff --git a/frontend/antd/spin/gradio.config.js b/frontend/antd/spin/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/spin/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/spin/package.json b/frontend/antd/spin/package.json new file mode 100644 index 00000000..ae3028cc --- /dev/null +++ b/frontend/antd/spin/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-spin", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/spin/spin.tsx b/frontend/antd/spin/spin.tsx new file mode 100644 index 00000000..73d82845 --- /dev/null +++ b/frontend/antd/spin/spin.tsx @@ -0,0 +1,23 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Spin as ASpin } from 'antd'; + +export const Spin = sveltify< + GetProps & { + id?: string; + }, + ['tip', 'indicator'] +>(({ slots, ...props }) => { + return ( + : props.tip} + indicator={ + slots.indicator ? : props.indicator + } + /> + ); +}); + +export default Spin; diff --git a/frontend/antd/splitter/Index.svelte b/frontend/antd/splitter/Index.svelte new file mode 100644 index 00000000..7ba98150 --- /dev/null +++ b/frontend/antd/splitter/Index.svelte @@ -0,0 +1,76 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSplitter then Splitter} + + + + {/await} +{/if} + + diff --git a/frontend/antd/splitter/context.ts b/frontend/antd/splitter/context.ts new file mode 100644 index 00000000..16c5391a --- /dev/null +++ b/frontend/antd/splitter/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('splitter'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/splitter/gradio.config.js b/frontend/antd/splitter/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/splitter/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/splitter/package.json b/frontend/antd/splitter/package.json new file mode 100644 index 00000000..f81675f0 --- /dev/null +++ b/frontend/antd/splitter/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-splitter", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/splitter/panel/Index.svelte b/frontend/antd/splitter/panel/Index.svelte new file mode 100644 index 00000000..1897ac84 --- /dev/null +++ b/frontend/antd/splitter/panel/Index.svelte @@ -0,0 +1,86 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/splitter/panel/gradio.config.js b/frontend/antd/splitter/panel/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/splitter/panel/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/splitter/panel/package.json b/frontend/antd/splitter/panel/package.json new file mode 100644 index 00000000..79840404 --- /dev/null +++ b/frontend/antd/splitter/panel/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-panel", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/splitter/splitter.tsx b/frontend/antd/splitter/splitter.tsx new file mode 100644 index 00000000..2a0daf70 --- /dev/null +++ b/frontend/antd/splitter/splitter.tsx @@ -0,0 +1,32 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import { type GetProps, Splitter as ASplitter } from 'antd'; + +import { type Item } from './context'; + +export const Splitter = sveltify< + GetProps & { + items?: Item[]; + } +>(({ items, children, ...props }) => { + return ( + <> +
{children}
+ + {items?.map((item, index) => { + if (!item) { + return; + } + const { el, props: panelProps } = item; + return ( + + {el && } + + ); + })} + + + ); +}); + +export default Splitter; diff --git a/frontend/antd/statistic/Index.svelte b/frontend/antd/statistic/Index.svelte new file mode 100644 index 00000000..e34cc794 --- /dev/null +++ b/frontend/antd/statistic/Index.svelte @@ -0,0 +1,78 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedStatistic then Statistic} + + + + {/await} +{/if} + + diff --git a/frontend/antd/statistic/countdown/Index.svelte b/frontend/antd/statistic/countdown/Index.svelte new file mode 100644 index 00000000..608e608b --- /dev/null +++ b/frontend/antd/statistic/countdown/Index.svelte @@ -0,0 +1,76 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedStatisticCountdown then StatisticCountdown} + + + + {/await} +{/if} + + diff --git a/frontend/antd/statistic/countdown/gradio.config.js b/frontend/antd/statistic/countdown/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/statistic/countdown/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/statistic/countdown/package.json b/frontend/antd/statistic/countdown/package.json new file mode 100644 index 00000000..8e94d069 --- /dev/null +++ b/frontend/antd/statistic/countdown/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-statistic.countdown", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/statistic/countdown/statistic.countdown.tsx b/frontend/antd/statistic/countdown/statistic.countdown.tsx new file mode 100644 index 00000000..ec52c319 --- /dev/null +++ b/frontend/antd/statistic/countdown/statistic.countdown.tsx @@ -0,0 +1,26 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Statistic as AStatistic } from 'antd'; + +export const StatisticCountdown = sveltify< + GetProps & { + children: React.ReactNode; + }, + ['prefix', 'suffix', 'title'] +>(({ children, value, slots, ...props }) => { + return ( + <> +
{children}
+ : props.title} + prefix={slots.prefix ? : props.prefix} + suffix={slots.suffix ? : props.suffix} + /> + + ); +}); + +export default StatisticCountdown; diff --git a/frontend/antd/statistic/gradio.config.js b/frontend/antd/statistic/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/statistic/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/statistic/package.json b/frontend/antd/statistic/package.json new file mode 100644 index 00000000..6e457ec3 --- /dev/null +++ b/frontend/antd/statistic/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-statistic", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/statistic/statistic.tsx b/frontend/antd/statistic/statistic.tsx new file mode 100644 index 00000000..adaf1d4c --- /dev/null +++ b/frontend/antd/statistic/statistic.tsx @@ -0,0 +1,35 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Statistic as AStatistic } from 'antd'; + +export const Statistic = sveltify< + GetProps & { + children: React.ReactNode; + setSlotParams: SetSlotParams; + }, + ['prefix', 'suffix', 'title', 'formatter'] +>(({ children, slots, setSlotParams, formatter, ...props }) => { + const formatterFunction = useFunction(formatter); + return ( + <> +
{children}
+ : props.title} + prefix={slots.prefix ? : props.prefix} + suffix={slots.suffix ? : props.suffix} + /> + + ); +}); + +export default Statistic; diff --git a/frontend/antd/steps/Index.svelte b/frontend/antd/steps/Index.svelte new file mode 100644 index 00000000..833da03f --- /dev/null +++ b/frontend/antd/steps/Index.svelte @@ -0,0 +1,83 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedSteps then Steps} + 0 ? $items : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/steps/context.ts b/frontend/antd/steps/context.ts new file mode 100644 index 00000000..0c3e267d --- /dev/null +++ b/frontend/antd/steps/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('steps'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/steps/gradio.config.js b/frontend/antd/steps/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/steps/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/steps/item/Index.svelte b/frontend/antd/steps/item/Index.svelte new file mode 100644 index 00000000..e3612ddd --- /dev/null +++ b/frontend/antd/steps/item/Index.svelte @@ -0,0 +1,76 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/steps/item/gradio.config.js b/frontend/antd/steps/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/steps/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/steps/item/package.json b/frontend/antd/steps/item/package.json new file mode 100644 index 00000000..533045f0 --- /dev/null +++ b/frontend/antd/steps/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-steps.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/steps/package.json b/frontend/antd/steps/package.json new file mode 100644 index 00000000..c6cbdd10 --- /dev/null +++ b/frontend/antd/steps/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-steps", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/steps/steps.tsx b/frontend/antd/steps/steps.tsx new file mode 100644 index 00000000..fd078ceb --- /dev/null +++ b/frontend/antd/steps/steps.tsx @@ -0,0 +1,55 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Steps as ASteps } from 'antd'; + +import { type Item } from './context'; + +export const Steps = sveltify< + GetProps & { + slotItems: Item[]; + setSlotParams: SetSlotParams; + }, + ['progressDot'] +>( + ({ + slots, + items, + slotItems, + setSlotParams, + children, + progressDot, + ...props + }) => { + const progressDotFunction = useFunction(progressDot); + return ( + <> +
{children}
+ { + return ( + items || + renderItems< + NonNullable['items']>[number] + >(slotItems) + ); + }, [items, slotItems])} + progressDot={ + slots.progressDot + ? renderParamsSlot( + { slots, setSlotParams, key: 'progressDot' }, + { clone: true } + ) + : progressDotFunction || progressDot + } + /> + + ); + } +); + +export default Steps; diff --git a/frontend/antd/switch/Index.svelte b/frontend/antd/switch/Index.svelte new file mode 100644 index 00000000..776e2160 --- /dev/null +++ b/frontend/antd/switch/Index.svelte @@ -0,0 +1,78 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedSwitch then Switch} + { + value = v; + }} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/switch/gradio.config.js b/frontend/antd/switch/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/switch/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/switch/package.json b/frontend/antd/switch/package.json new file mode 100644 index 00000000..3a81efa0 --- /dev/null +++ b/frontend/antd/switch/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-switch", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/switch/switch.tsx b/frontend/antd/switch/switch.tsx new file mode 100644 index 00000000..a638b7d5 --- /dev/null +++ b/frontend/antd/switch/switch.tsx @@ -0,0 +1,41 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Switch as ASwitch } from 'antd'; + +export const Switch = sveltify< + GetProps & { + children?: React.ReactNode; + onValueChange?: (value: boolean) => void; + }, + ['checkedChildren', 'unCheckedChildren'] +>(({ slots, children, onValueChange, onChange, ...props }) => { + return ( + <> +
{children}
+ { + onValueChange?.(value); + onChange?.(value, ...args); + }} + checkedChildren={ + slots.checkedChildren ? ( + + ) : ( + props.checkedChildren + ) + } + unCheckedChildren={ + slots.unCheckedChildren ? ( + + ) : ( + props.unCheckedChildren + ) + } + /> + + ); +}); + +export default Switch; diff --git a/frontend/antd/table/Index.svelte b/frontend/antd/table/Index.svelte new file mode 100644 index 00000000..f3007e0f --- /dev/null +++ b/frontend/antd/table/Index.svelte @@ -0,0 +1,92 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedTable then Table} + + +
+ {/await} +{/if} + + diff --git a/frontend/antd/table/column-group/Index.svelte b/frontend/antd/table/column-group/Index.svelte new file mode 100644 index 00000000..ff87a2be --- /dev/null +++ b/frontend/antd/table/column-group/Index.svelte @@ -0,0 +1,86 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/table/column-group/gradio.config.js b/frontend/antd/table/column-group/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/table/column-group/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/column-group/package.json b/frontend/antd/table/column-group/package.json new file mode 100644 index 00000000..0b211b78 --- /dev/null +++ b/frontend/antd/table/column-group/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table.column-group", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/column/Index.svelte b/frontend/antd/table/column/Index.svelte new file mode 100644 index 00000000..9e848fbc --- /dev/null +++ b/frontend/antd/table/column/Index.svelte @@ -0,0 +1,183 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/table/column/gradio.config.js b/frontend/antd/table/column/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/table/column/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/column/package.json b/frontend/antd/table/column/package.json new file mode 100644 index 00000000..4d346167 --- /dev/null +++ b/frontend/antd/table/column/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table.column", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/context.ts b/frontend/antd/table/context.ts new file mode 100644 index 00000000..9246517b --- /dev/null +++ b/frontend/antd/table/context.ts @@ -0,0 +1,27 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems: getColumnItems, getSetItemFn: getSetColumnItemFn } = + createItemsContext('table-column'); + +const { getItems: getSelectionItems, getSetItemFn: getSetSelectionItemFn } = + createItemsContext('table-row-selection-selection'); + +const { + getItems: getRowSelectionItems, + getSetItemFn: getSetRowSelectionItemFn, +} = createItemsContext('table-row-selection'); + +const { getItems: getExpandableItems, getSetItemFn: getSetExpandableItemFn } = + createItemsContext('table-expandable'); + +export { + getColumnItems, + getExpandableItems, + getRowSelectionItems, + getSelectionItems, + getSetColumnItemFn, + getSetExpandableItemFn, + getSetRowSelectionItemFn, + getSetSelectionItemFn, +}; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/table/expandable/Expandable.svelte b/frontend/antd/table/expandable/Expandable.svelte new file mode 100644 index 00000000..07a8dcb6 --- /dev/null +++ b/frontend/antd/table/expandable/Expandable.svelte @@ -0,0 +1,119 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/table/expandable/Index.svelte b/frontend/antd/table/expandable/Index.svelte new file mode 100644 index 00000000..a4c9db3e --- /dev/null +++ b/frontend/antd/table/expandable/Index.svelte @@ -0,0 +1,42 @@ + + + + +{#await AwaitedExpandable then Expandable} + + + +{/await} + + diff --git a/frontend/antd/table/expandable/gradio.config.js b/frontend/antd/table/expandable/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/table/expandable/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/expandable/package.json b/frontend/antd/table/expandable/package.json new file mode 100644 index 00000000..7903774c --- /dev/null +++ b/frontend/antd/table/expandable/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table.expandable", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/gradio.config.js b/frontend/antd/table/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/table/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/package.json b/frontend/antd/table/package.json new file mode 100644 index 00000000..30aa7610 --- /dev/null +++ b/frontend/antd/table/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/row-selection/Index.svelte b/frontend/antd/table/row-selection/Index.svelte new file mode 100644 index 00000000..28c413a8 --- /dev/null +++ b/frontend/antd/table/row-selection/Index.svelte @@ -0,0 +1,40 @@ + + + + +{#await AwaitedRowSelection then RowSelection} + + + +{/await} + + diff --git a/frontend/antd/table/row-selection/RowSelection.svelte b/frontend/antd/table/row-selection/RowSelection.svelte new file mode 100644 index 00000000..af37a97c --- /dev/null +++ b/frontend/antd/table/row-selection/RowSelection.svelte @@ -0,0 +1,119 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/table/row-selection/gradio.config.js b/frontend/antd/table/row-selection/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/table/row-selection/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/row-selection/package.json b/frontend/antd/table/row-selection/package.json new file mode 100644 index 00000000..bf1eafd4 --- /dev/null +++ b/frontend/antd/table/row-selection/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table.row-selection", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/row-selection/selection/Index.svelte b/frontend/antd/table/row-selection/selection/Index.svelte new file mode 100644 index 00000000..0f1521b0 --- /dev/null +++ b/frontend/antd/table/row-selection/selection/Index.svelte @@ -0,0 +1,96 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/table/row-selection/selection/gradio.config.js b/frontend/antd/table/row-selection/selection/gradio.config.js new file mode 100644 index 00000000..7b2fe8dd --- /dev/null +++ b/frontend/antd/table/row-selection/selection/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/table/row-selection/selection/package.json b/frontend/antd/table/row-selection/selection/package.json new file mode 100644 index 00000000..975c06b9 --- /dev/null +++ b/frontend/antd/table/row-selection/selection/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-table.selection", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/table/table.tsx b/frontend/antd/table/table.tsx new file mode 100644 index 00000000..f60a2948 --- /dev/null +++ b/frontend/antd/table/table.tsx @@ -0,0 +1,221 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Table as ATable } from 'antd'; + +import type { Item } from './context'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} + +type TableProps = GetProps; +export const Table = sveltify< + TableProps & { + rowSelectionItems: Item[]; + expandableItems: Item[]; + columnItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'footer', + 'title', + 'loading.tip', + 'loading.indicator', + 'pagination.showQuickJumper.goButton', + 'pagination.itemRender', + 'showSorterTooltip.title', + 'summary', + ] +>( + ({ + children, + slots, + columnItems, + columns, + getPopupContainer, + pagination, + loading, + rowKey, + rowClassName, + summary, + rowSelection, + rowSelectionItems, + expandableItems, + expandable, + sticky, + footer, + showSorterTooltip, + onRow, + onHeaderRow, + setSlotParams, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + + const supportLoadingConfig = + slots['loading.tip'] || slots['loading.indicator']; + const loadingConfig = getConfig(loading); + const supportPaginationConfig = + slots['pagination.showQuickJumper.goButton'] || + slots['pagination.itemRender']; + const paginationConfig = getConfig(pagination); + const paginationShowTotalFunction = useFunction(paginationConfig.showTotal); + const rowClassNameFunction = useFunction(rowClassName); + const rowKeyFunction = useFunction(rowKey); + const supportShowSorterTooltipConfig = + slots['showSorterTooltip.title'] || typeof showSorterTooltip === 'object'; + const showSorterTooltipConfig = getConfig(showSorterTooltip); + const showSorterTooltipAfterOpenChangeFunction = useFunction( + showSorterTooltipConfig.afterOpenChange + ); + const showSorterTooltipGetPopupContainerFunction = useFunction( + showSorterTooltipConfig.getPopupContainer + ); + const supportStickyConfig = typeof sticky === 'object'; + const stickyConfig = getConfig(sticky); + const stickyGetContainerFunction = useFunction(stickyConfig.getContainer); + const onRowFunction = useFunction(onRow); + const onHeaderRowFunction = useFunction(onHeaderRow); + const summaryFunction = useFunction(summary); + const footerFunction = useFunction(footer); + return ( + <> +
{children}
+ { + return ( + columns?.map((item) => { + if ((item as any) === 'EXPAND_COLUMN') { + return ATable.EXPAND_COLUMN; + } else if ((item as any) === 'SELECTION_COLUMN') { + return ATable.SELECTION_COLUMN; + } + return item; + }) || + renderItems[number]>( + columnItems, + { + fallback: (item) => { + if (item === 'EXPAND_COLUMN') { + return ATable.EXPAND_COLUMN; + } else if (item === 'SELECTION_COLUMN') { + return ATable.SELECTION_COLUMN; + } + return item; + }, + } + ) + ); + }, [columnItems, columns])} + onRow={onRowFunction} + onHeaderRow={onHeaderRowFunction} + summary={ + slots.summary + ? renderParamsSlot({ slots, setSlotParams, key: 'summary' }) + : summaryFunction + } + rowSelection={useMemo(() => { + return ( + rowSelection || + renderItems(rowSelectionItems)[0] + ); + }, [rowSelection, rowSelectionItems])} + expandable={useMemo(() => { + return ( + expandable || + renderItems(expandableItems)[0] + ); + }, [expandable, expandableItems])} + rowClassName={rowClassNameFunction} + rowKey={rowKeyFunction || rowKey} + sticky={ + supportStickyConfig + ? { + ...stickyConfig, + getContainer: stickyGetContainerFunction, + } + : sticky + } + showSorterTooltip={ + supportShowSorterTooltipConfig + ? { + ...showSorterTooltipConfig, + afterOpenChange: showSorterTooltipAfterOpenChangeFunction, + getPopupContainer: showSorterTooltipGetPopupContainerFunction, + title: slots['showSorterTooltip.title'] ? ( + + ) : ( + showSorterTooltipConfig.title + ), + } + : showSorterTooltip + } + pagination={ + supportPaginationConfig + ? omitUndefinedProps({ + ...paginationConfig, + showTotal: paginationShowTotalFunction, + showQuickJumper: slots['pagination.showQuickJumper.goButton'] + ? { + goButton: ( + + ), + } + : paginationConfig.showQuickJumper, + itemRender: slots['pagination.itemRender'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'pagination.itemRender', + }) + : paginationConfig.itemRender, + }) + : pagination + } + getPopupContainer={getPopupContainerFunction} + loading={ + supportLoadingConfig + ? { + ...loadingConfig, + tip: slots['loading.tip'] ? ( + + ) : ( + loadingConfig.tip + ), + indicator: slots['loading.indicator'] ? ( + + ) : ( + loadingConfig.indicator + ), + } + : loading + } + footer={ + slots.footer + ? renderParamsSlot({ slots, setSlotParams, key: 'footer' }) + : footerFunction + } + title={ + slots.title + ? renderParamsSlot({ slots, setSlotParams, key: 'title' }) + : props.title + } + /> + + ); + } +); + +export default Table; diff --git a/frontend/antd/tabs/Index.svelte b/frontend/antd/tabs/Index.svelte new file mode 100644 index 00000000..e2c1289b --- /dev/null +++ b/frontend/antd/tabs/Index.svelte @@ -0,0 +1,82 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTabs then Tabs} + 0 ? $items : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/tabs/context.ts b/frontend/antd/tabs/context.ts new file mode 100644 index 00000000..f1924a05 --- /dev/null +++ b/frontend/antd/tabs/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('timeline'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/tabs/gradio.config.js b/frontend/antd/tabs/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tabs/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tabs/item/Index.svelte b/frontend/antd/tabs/item/Index.svelte new file mode 100644 index 00000000..dc351dc0 --- /dev/null +++ b/frontend/antd/tabs/item/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/tabs/item/gradio.config.js b/frontend/antd/tabs/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tabs/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tabs/item/package.json b/frontend/antd/tabs/item/package.json new file mode 100644 index 00000000..cefe2bfb --- /dev/null +++ b/frontend/antd/tabs/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tabs.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tabs/package.json b/frontend/antd/tabs/package.json new file mode 100644 index 00000000..c52cec1f --- /dev/null +++ b/frontend/antd/tabs/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tabs", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tabs/tabs.tsx b/frontend/antd/tabs/tabs.tsx new file mode 100644 index 00000000..30c63dcb --- /dev/null +++ b/frontend/antd/tabs/tabs.tsx @@ -0,0 +1,119 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Tabs as ATabs } from 'antd'; + +import { type Item } from './context'; + +export const Tabs = sveltify< + GetProps & { + slotItems: Item[]; + setSlotParams: SetSlotParams; + }, + [ + 'addIcon', + 'removeIcon', + 'renderTabBar', + 'tabBarExtraContent', + 'tabBarExtraContent.left', + 'tabBarExtraContent.right', + 'more.icon', + ] +>( + ({ + slots, + indicator, + items, + onChange, + slotItems, + more, + children, + renderTabBar, + setSlotParams, + ...props + }) => { + const indicatorSizeFunction = useFunction(indicator?.size); + const getMorePopupContainerFunction = useFunction(more?.getPopupContainer); + const renderTabBarFunction = useFunction(renderTabBar); + return ( + <> +
{children}
+ { + return ( + items || + renderItems['items']>[number]>( + slotItems + ) + ); + }, [items, slotItems])} + more={omitUndefinedProps({ + ...(more || {}), + getPopupContainer: + getMorePopupContainerFunction || more?.getPopupContainer, + icon: slots['more.icon'] ? ( + + ) : ( + more?.icon + ), + })} + tabBarExtraContent={ + slots['tabBarExtraContent'] ? ( + + ) : slots['tabBarExtraContent.left'] || + slots['tabBarExtraContent.right'] ? ( + { + left: slots['tabBarExtraContent.left'] ? ( + + ) : undefined, + right: slots['tabBarExtraContent.right'] ? ( + + ) : undefined, + } + ) : ( + props.tabBarExtraContent + ) + } + addIcon={ + slots.addIcon ? : props.addIcon + } + removeIcon={ + slots.removeIcon ? ( + + ) : ( + props.removeIcon + ) + } + onChange={(activeKey) => { + onChange?.(activeKey); + }} + /> + + ); + } +); + +export default Tabs; diff --git a/frontend/antd/tag/Index.svelte b/frontend/antd/tag/Index.svelte new file mode 100644 index 00000000..eafaed74 --- /dev/null +++ b/frontend/antd/tag/Index.svelte @@ -0,0 +1,83 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTag then Tag} + + {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.value} + {/if} + + {/await} +{/if} + + diff --git a/frontend/antd/tag/checkable-tag/Index.svelte b/frontend/antd/tag/checkable-tag/Index.svelte new file mode 100644 index 00000000..5a20646a --- /dev/null +++ b/frontend/antd/tag/checkable-tag/Index.svelte @@ -0,0 +1,92 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedCheckableTag then CheckableTag} + { + value = checked; + }} + > + {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.label} + {/if} + + {/await} +{/if} + + diff --git a/frontend/antd/tag/checkable-tag/gradio.config.js b/frontend/antd/tag/checkable-tag/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tag/checkable-tag/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tag/checkable-tag/package.json b/frontend/antd/tag/checkable-tag/package.json new file mode 100644 index 00000000..ce1b1c46 --- /dev/null +++ b/frontend/antd/tag/checkable-tag/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tag-checkable-tag", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tag/checkable-tag/tag.checkable-tag.tsx b/frontend/antd/tag/checkable-tag/tag.checkable-tag.tsx new file mode 100644 index 00000000..3410949c --- /dev/null +++ b/frontend/antd/tag/checkable-tag/tag.checkable-tag.tsx @@ -0,0 +1,21 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React from 'react'; +import { type GetProps, Tag as ATag } from 'antd'; + +export const CheckableTag = sveltify< + GetProps & { + onValueChange: (checked: boolean) => void; + } +>(({ onChange, onValueChange, ...props }) => { + return ( + { + onChange?.(v); + onValueChange(v); + }} + /> + ); +}); + +export default CheckableTag; diff --git a/frontend/antd/tag/gradio.config.js b/frontend/antd/tag/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tag/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tag/package.json b/frontend/antd/tag/package.json new file mode 100644 index 00000000..72f0afe1 --- /dev/null +++ b/frontend/antd/tag/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tag", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tag/tag.tsx b/frontend/antd/tag/tag.tsx new file mode 100644 index 00000000..685e4667 --- /dev/null +++ b/frontend/antd/tag/tag.tsx @@ -0,0 +1,24 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { type GetProps, Tag as ATag } from 'antd'; + +export const Tag = sveltify, ['closeIcon', 'icon']>( + ({ slots, ...props }) => { + return ( + : props.icon} + closeIcon={ + slots.closeIcon ? ( + + ) : ( + props.closeIcon + ) + } + /> + ); + } +); + +export default Tag; diff --git a/frontend/antd/time-picker/Index.svelte b/frontend/antd/time-picker/Index.svelte new file mode 100644 index 00000000..5f606f75 --- /dev/null +++ b/frontend/antd/time-picker/Index.svelte @@ -0,0 +1,84 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedTimePicker then TimePicker} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} diff --git a/frontend/antd/time-picker/gradio.config.js b/frontend/antd/time-picker/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/time-picker/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/time-picker/package.json b/frontend/antd/time-picker/package.json new file mode 100644 index 00000000..32687b6b --- /dev/null +++ b/frontend/antd/time-picker/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-time-picker", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/time-picker/range-picker/Index.svelte b/frontend/antd/time-picker/range-picker/Index.svelte new file mode 100644 index 00000000..60021229 --- /dev/null +++ b/frontend/antd/time-picker/range-picker/Index.svelte @@ -0,0 +1,88 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedTimePickerRangePicker then TimeRangePicker} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} diff --git a/frontend/antd/time-picker/range-picker/gradio.config.js b/frontend/antd/time-picker/range-picker/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/time-picker/range-picker/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/time-picker/range-picker/package.json b/frontend/antd/time-picker/range-picker/package.json new file mode 100644 index 00000000..60da7ac4 --- /dev/null +++ b/frontend/antd/time-picker/range-picker/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-time-picker.range-picker", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/time-picker/range-picker/time-picker.range-picker.tsx b/frontend/antd/time-picker/range-picker/time-picker.range-picker.tsx new file mode 100644 index 00000000..ed952a15 --- /dev/null +++ b/frontend/antd/time-picker/range-picker/time-picker.range-picker.tsx @@ -0,0 +1,213 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, TimePicker as ATimePicker } from 'antd'; +import dayjs from 'dayjs'; + +type RangePickerProps = GetProps; + +function formatDayjs(date: any) { + if (typeof date === 'number') { + return dayjs(date * 1000); + } + return dayjs(date); +} + +function formatDates( + dates: [dayjs.Dayjs | null | undefined, dayjs.Dayjs | null | undefined] | null +): [number | null, number | null] { + return (dates?.map((date) => { + return date ? date.valueOf() / 1000 : null; + }) || [null, null]) as [number | null, number | null]; +} + +export const TimeRangePicker = sveltify< + Omit & { + onChange?: (dates: [number | null, number | null], ...args: any[]) => void; + onPanelChange?: ( + dates: [number | null, number | null], + ...args: any[] + ) => void; + onCalendarChange?: ( + dates: [number | null, number | null], + ...args: any[] + ) => void; + onValueChange: (dates: [number | null, number | null]) => void; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'separator', + 'cellRender', + 'panelRender', + ] +>( + ({ + slots, + disabledDate, + disabledTime, + value, + defaultValue, + defaultPickerValue, + pickerValue, + onChange, + minDate, + maxDate, + cellRender, + panelRender, + getPopupContainer, + onValueChange, + onPanelChange, + onCalendarChange, + children, + setSlotParams, + elRef, + ...props + }) => { + const disabledDateFunction = useFunction(disabledDate); + const getPopupContainerFunction = useFunction(getPopupContainer); + const cellRenderFunction = useFunction(cellRender); + const panelRenderFunction = useFunction(panelRender); + const disabledTimeFunction = useFunction(disabledTime); + const validValue = useMemo(() => { + return value?.map((v) => formatDayjs(v)) as RangePickerProps['value']; + }, [value]); + + const validDefaultValue = useMemo(() => { + return defaultValue?.map((v) => + formatDayjs(v) + ) as RangePickerProps['defaultValue']; + }, [defaultValue]); + const validDefaultPickerValue = useMemo(() => { + if (Array.isArray(defaultPickerValue)) { + return defaultPickerValue.map((v) => + formatDayjs(v) + ) as RangePickerProps['defaultPickerValue']; + } + return defaultPickerValue ? formatDayjs(defaultPickerValue) : undefined; + }, [defaultPickerValue]); + const validPickerValue = useMemo(() => { + if (Array.isArray(pickerValue)) { + return pickerValue.map((v) => + formatDayjs(v) + ) as RangePickerProps['pickerValue']; + } + return pickerValue ? formatDayjs(pickerValue) : undefined; + }, [pickerValue]); + const validMinDate = useMemo(() => { + return minDate ? formatDayjs(minDate) : undefined; + }, [minDate]); + const validMaxDate = useMemo(() => { + return maxDate ? formatDayjs(maxDate) : undefined; + }, [maxDate]); + return ( + <> +
{children}
+ { + const formattedDates = formatDates(dates); + onPanelChange?.(formattedDates, ...args); + }} + onChange={(dates, ...args) => { + const formattedDates = formatDates(dates); + onChange?.(formattedDates, ...args); + onValueChange(formattedDates); + }} + onCalendarChange={(dates, ...args) => { + const formattedDates = formatDates(dates); + onCalendarChange?.(formattedDates, ...args); + }} + renderExtraFooter={ + slots.renderExtraFooter + ? () => + slots.renderExtraFooter ? ( + + ) : null + : props.renderExtraFooter + } + prevIcon={ + slots.prevIcon ? ( + + ) : ( + props.prevIcon + ) + } + nextIcon={ + slots.nextIcon ? ( + + ) : ( + props.nextIcon + ) + } + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + superNextIcon={ + slots.superNextIcon ? ( + + ) : ( + props.superNextIcon + ) + } + superPrevIcon={ + slots.superPrevIcon ? ( + + ) : ( + props.superPrevIcon + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + separator={ + slots.separator ? ( + + ) : ( + props.separator + ) + } + /> + + ); + } +); + +export default TimeRangePicker; diff --git a/frontend/antd/time-picker/time-picker.tsx b/frontend/antd/time-picker/time-picker.tsx new file mode 100644 index 00000000..39f78f1d --- /dev/null +++ b/frontend/antd/time-picker/time-picker.tsx @@ -0,0 +1,201 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, TimePicker as ATimePicker } from 'antd'; +import dayjs from 'dayjs'; + +type TimePickerProps = GetProps; + +function formatDayjs(date: any): dayjs.Dayjs { + if (Array.isArray(date)) { + return date.map((d) => { + return formatDayjs(d) as dayjs.Dayjs; + }) as unknown as dayjs.Dayjs; + } + if (typeof date === 'number') { + return dayjs(date * 1000); + } + return dayjs(date); +} + +function formatDate(dates: (dayjs.Dayjs | null | undefined)[] | dayjs.Dayjs) { + if (Array.isArray(dates)) { + return dates.map((date) => { + return date ? date.valueOf() / 1000 : null; + }); + } + if (typeof dates === 'object' && dates !== null) { + return dates.valueOf() / 1000; + } + return dates; +} + +export const TimePicker = sveltify< + Omit & { + onChange?: (date: ReturnType, ...args: any[]) => void; + onPanelChange?: ( + date: ReturnType, + ...args: any[] + ) => void; + onCalendarChange?: ( + date: ReturnType, + ...args: any[] + ) => void; + onValueChange: (date: number | string) => void; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'prevIcon', + 'nextIcon', + 'suffixIcon', + 'superNextIcon', + 'superPrevIcon', + 'renderExtraFooter', + 'cellRender', + 'panelRender', + ] +>( + ({ + slots, + disabledDate, + disabledTime, + value, + defaultValue, + defaultPickerValue, + pickerValue, + onChange, + minDate, + maxDate, + cellRender, + panelRender, + getPopupContainer, + onValueChange, + onPanelChange, + onCalendarChange, + children, + setSlotParams, + elRef, + ...props + }) => { + const disabledDateFunction = useFunction(disabledDate); + const disabledTimeFunction = useFunction(disabledTime); + const getPopupContainerFunction = useFunction(getPopupContainer); + const cellRenderFunction = useFunction(cellRender); + const panelRenderFunction = useFunction(panelRender); + const validValue = useMemo(() => { + return value ? formatDayjs(value) : undefined; + }, [value]); + const validDefaultValue = useMemo(() => { + return defaultValue ? formatDayjs(defaultValue) : undefined; + }, [defaultValue]); + const validDefaultPickerValue = useMemo(() => { + return defaultPickerValue ? formatDayjs(defaultPickerValue) : undefined; + }, [defaultPickerValue]); + const validPickerValue = useMemo(() => { + return pickerValue ? formatDayjs(pickerValue) : undefined; + }, [pickerValue]); + const validMinDate = useMemo(() => { + return minDate ? formatDayjs(minDate) : undefined; + }, [minDate]); + const validMaxDate = useMemo(() => { + return maxDate ? formatDayjs(maxDate) : undefined; + }, [maxDate]); + return ( + <> +
{children}
+ { + const formattedDates = formatDate(date); + onPanelChange?.(formattedDates, ...args); + }} + onChange={(date, ...args) => { + const formattedDate = formatDate(date); + onChange?.(formattedDate, ...args); + onValueChange(formattedDate as number); + }} + onCalendarChange={(date, ...args) => { + const formattedDate = formatDate(date); + onCalendarChange?.(formattedDate, ...args); + }} + renderExtraFooter={ + slots.renderExtraFooter + ? () => + slots.renderExtraFooter ? ( + + ) : null + : props.renderExtraFooter + } + prevIcon={ + slots.prevIcon ? ( + + ) : ( + props.prevIcon + ) + } + nextIcon={ + slots.nextIcon ? ( + + ) : ( + props.nextIcon + ) + } + suffixIcon={ + slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ) + } + superNextIcon={ + slots.superNextIcon ? ( + + ) : ( + props.superNextIcon + ) + } + superPrevIcon={ + slots.superPrevIcon ? ( + + ) : ( + props.superPrevIcon + ) + } + allowClear={ + slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear + } + /> + + ); + } +); + +export default TimePicker; diff --git a/frontend/antd/timeline/Index.svelte b/frontend/antd/timeline/Index.svelte new file mode 100644 index 00000000..0e585b21 --- /dev/null +++ b/frontend/antd/timeline/Index.svelte @@ -0,0 +1,76 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTimeline then Timeline} + 0 ? $items : $children} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/timeline/context.ts b/frontend/antd/timeline/context.ts new file mode 100644 index 00000000..f1924a05 --- /dev/null +++ b/frontend/antd/timeline/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('timeline'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/timeline/gradio.config.js b/frontend/antd/timeline/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/timeline/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/timeline/item/Index.svelte b/frontend/antd/timeline/item/Index.svelte new file mode 100644 index 00000000..43abe853 --- /dev/null +++ b/frontend/antd/timeline/item/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + + + +{/if} + + diff --git a/frontend/antd/timeline/item/gradio.config.js b/frontend/antd/timeline/item/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/timeline/item/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/timeline/item/package.json b/frontend/antd/timeline/item/package.json new file mode 100644 index 00000000..397ceb79 --- /dev/null +++ b/frontend/antd/timeline/item/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-timeline.item", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/timeline/package.json b/frontend/antd/timeline/package.json new file mode 100644 index 00000000..401e27e8 --- /dev/null +++ b/frontend/antd/timeline/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-timeline", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/timeline/timeline.tsx b/frontend/antd/timeline/timeline.tsx new file mode 100644 index 00000000..16b7664d --- /dev/null +++ b/frontend/antd/timeline/timeline.tsx @@ -0,0 +1,43 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React, { useMemo } from 'react'; +import { renderItems } from '@utils/renderItems'; +import { type GetProps, Timeline as ATimeline } from 'antd'; + +import { type Item } from './context'; + +export const Timeline = sveltify< + GetProps & { + slotItems: Item[]; + }, + ['pending', 'pendingDot'] +>(({ slots, items, slotItems, children, ...props }) => { + return ( + <> +
{children}
+ { + return ( + items || + renderItems< + NonNullable['items']>[number] + >(slotItems) + ); + }, [items, slotItems])} + pending={ + slots.pending ? : props.pending + } + pendingDot={ + slots.pendingDot ? ( + + ) : ( + props.pendingDot + ) + } + /> + + ); +}); + +export default Timeline; diff --git a/frontend/antd/tooltip/Index.svelte b/frontend/antd/tooltip/Index.svelte new file mode 100644 index 00000000..7ac8e79c --- /dev/null +++ b/frontend/antd/tooltip/Index.svelte @@ -0,0 +1,75 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedTooltip then Tooltip} + + + + {/await} +{/if} + + diff --git a/frontend/antd/tooltip/gradio.config.js b/frontend/antd/tooltip/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tooltip/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tooltip/package.json b/frontend/antd/tooltip/package.json new file mode 100644 index 00000000..11f0309f --- /dev/null +++ b/frontend/antd/tooltip/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tooltip", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tooltip/tooltip.tsx b/frontend/antd/tooltip/tooltip.tsx new file mode 100644 index 00000000..b06d47b6 --- /dev/null +++ b/frontend/antd/tooltip/tooltip.tsx @@ -0,0 +1,26 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { type GetProps, Tooltip as ATooltip } from 'antd'; + +export const Tooltip = sveltify, ['title']>( + ({ slots, afterOpenChange, getPopupContainer, children, ...props }) => { + const afterOpenChangeFunction = useFunction(afterOpenChange); + const getPopupContainerFunction = useFunction(getPopupContainer); + return ( + <> + : props.title} + > + {children} + + + ); + } +); + +export default Tooltip; diff --git a/frontend/antd/tour/Index.svelte b/frontend/antd/tour/Index.svelte new file mode 100644 index 00000000..b6471e65 --- /dev/null +++ b/frontend/antd/tour/Index.svelte @@ -0,0 +1,83 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTour then Tour} + 0 ? $steps : $children} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/tour/context.ts b/frontend/antd/tour/context.ts new file mode 100644 index 00000000..1e3b613e --- /dev/null +++ b/frontend/antd/tour/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('tour'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/tour/gradio.config.js b/frontend/antd/tour/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tour/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tour/package.json b/frontend/antd/tour/package.json new file mode 100644 index 00000000..c3510ef4 --- /dev/null +++ b/frontend/antd/tour/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tour", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tour/step/Index.svelte b/frontend/antd/tour/step/Index.svelte new file mode 100644 index 00000000..8f381fc9 --- /dev/null +++ b/frontend/antd/tour/step/Index.svelte @@ -0,0 +1,85 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/tour/step/gradio.config.js b/frontend/antd/tour/step/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tour/step/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tour/step/package.json b/frontend/antd/tour/step/package.json new file mode 100644 index 00000000..c2f358e2 --- /dev/null +++ b/frontend/antd/tour/step/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tour.step", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tour/tour.tsx b/frontend/antd/tour/tour.tsx new file mode 100644 index 00000000..b596be63 --- /dev/null +++ b/frontend/antd/tour/tour.tsx @@ -0,0 +1,76 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Tour as ATour } from 'antd'; + +import { type Item } from './context'; + +export const Tour = sveltify< + GetProps & { + slotItems: Item[]; + children?: React.ReactNode; + setSlotParams: SetSlotParams; + }, + ['closeIcon', 'indicatorsRender'] +>( + ({ + slots, + steps, + slotItems, + children, + onChange, + onClose, + getPopupContainer, + setSlotParams, + indicatorsRender, + ...props + }) => { + const getPopupContainerFunction = useFunction(getPopupContainer); + const indicatorsRenderFunction = useFunction(indicatorsRender); + return ( + <> +
{children}
+ { + return ( + steps || + renderItems['steps']>[number]>( + slotItems + ) + ); + }, [steps, slotItems])} + onChange={(current) => { + onChange?.(current); + }} + closeIcon={ + slots.closeIcon ? ( + + ) : ( + props.closeIcon + ) + } + indicatorsRender={ + slots.indicatorsRender + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'indicatorsRender', + }) + : indicatorsRenderFunction + } + getPopupContainer={getPopupContainerFunction} + onClose={(current, ...args) => { + onClose?.(current, ...args); + }} + /> + + ); + } +); + +export default Tour; diff --git a/frontend/antd/transfer/Index.svelte b/frontend/antd/transfer/Index.svelte new file mode 100644 index 00000000..a18a12ce --- /dev/null +++ b/frontend/antd/transfer/Index.svelte @@ -0,0 +1,89 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTransfer then Transfer} + { + value = v; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/transfer/gradio.config.js b/frontend/antd/transfer/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/transfer/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/transfer/package.json b/frontend/antd/transfer/package.json new file mode 100644 index 00000000..7bdd6254 --- /dev/null +++ b/frontend/antd/transfer/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-transfer", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/transfer/transfer.tsx b/frontend/antd/transfer/transfer.tsx new file mode 100644 index 00000000..ba4cd1a9 --- /dev/null +++ b/frontend/antd/transfer/transfer.tsx @@ -0,0 +1,105 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { useTargets } from '@utils/hooks/useTargets'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Transfer as ATransfer } from 'antd'; + +export const Transfer = sveltify< + GetProps & { + children?: React.ReactNode; + onValueChange: (value: (string | number)[]) => void; + setSlotParams: SetSlotParams; + }, + [ + 'selectionsIcon', + 'titles', + 'footer', + 'locale.notFoundContent', + 'selectAllLabels', + 'render', + ] +>( + ({ + slots, + children, + render, + filterOption, + footer, + listStyle, + locale, + onChange, + onValueChange, + setSlotParams, + ...props + }) => { + const titles = useTargets(children, 'titles'); + const selectAllLabels = useTargets(children, 'selectAllLabels'); + const renderFunction = useFunction(render); + const listStyleFunction = useFunction(listStyle); + const footerFunction = useFunction(footer); + const filterOptionFunction = useFunction(filterOption); + return ( + <> +
{children}
+ { + onChange?.(targetKeys, ...args); + onValueChange(targetKeys as (string | number)[]); + }} + selectionsIcon={ + slots.selectionsIcon ? ( + + ) : ( + props.selectionsIcon + ) + } + locale={ + slots['locale.notFoundContent'] + ? { + ...locale, + notFoundContent: ( + + ), + } + : locale + } + render={ + slots.render + ? renderParamsSlot({ slots, setSlotParams, key: 'render' }) + : renderFunction || + ((item) => ({ + label: item.title || item.label, + value: item.value || item.title || item.label, + })) + } + filterOption={filterOptionFunction} + footer={ + slots.footer + ? renderParamsSlot({ slots, setSlotParams, key: 'footer' }) + : footerFunction || footer + } + titles={ + titles.length > 0 + ? titles.map((target, index) => { + return ; + }) + : props.titles + } + listStyle={listStyleFunction || listStyle} + selectAllLabels={ + selectAllLabels.length > 0 + ? selectAllLabels.map((target, index) => { + return ; + }) + : props.selectAllLabels + } + /> + + ); + } +); +export default Transfer; diff --git a/frontend/antd/tree-select/Index.svelte b/frontend/antd/tree-select/Index.svelte new file mode 100644 index 00000000..c3ce72c7 --- /dev/null +++ b/frontend/antd/tree-select/Index.svelte @@ -0,0 +1,88 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTreeSelect then TreeSelect} + { + value = val; + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/tree-select/context.ts b/frontend/antd/tree-select/context.ts new file mode 100644 index 00000000..6f0734d6 --- /dev/null +++ b/frontend/antd/tree-select/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('tree-select'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/tree-select/gradio.config.js b/frontend/antd/tree-select/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tree-select/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tree-select/package.json b/frontend/antd/tree-select/package.json new file mode 100644 index 00000000..00b433f7 --- /dev/null +++ b/frontend/antd/tree-select/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tree-select", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tree-select/tree-node/Index.svelte b/frontend/antd/tree-select/tree-node/Index.svelte new file mode 100644 index 00000000..491287af --- /dev/null +++ b/frontend/antd/tree-select/tree-node/Index.svelte @@ -0,0 +1,90 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/tree-select/tree-node/gradio.config.js b/frontend/antd/tree-select/tree-node/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tree-select/tree-node/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tree-select/tree-node/package.json b/frontend/antd/tree-select/tree-node/package.json new file mode 100644 index 00000000..b2b3e659 --- /dev/null +++ b/frontend/antd/tree-select/tree-node/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tree-select.tree-node", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tree-select/tree-select.tsx b/frontend/antd/tree-select/tree-select.tsx new file mode 100644 index 00000000..182226e3 --- /dev/null +++ b/frontend/antd/tree-select/tree-select.tsx @@ -0,0 +1,133 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, TreeSelect as ATreeSelect } from 'antd'; + +import { type Item } from './context'; + +type TreeSelectProps = GetProps; + +export const TreeSelect = sveltify< + TreeSelectProps & { + slotItems: Item[]; + onValueChange: (options: string | string[]) => void; + onLoadData?: (...args: any[]) => Promise; + setSlotParams: SetSlotParams; + }, + [ + 'allowClear.clearIcon', + 'maxTagPlaceholder', + 'notFoundContent', + 'suffixIcon', + 'switcherIcon', + 'dropdownRender', + 'tagRender', + 'treeTitleRender', + ] +>( + ({ + slots, + filterTreeNode, + getPopupContainer, + dropdownRender, + tagRender, + treeTitleRender, + treeData, + onValueChange, + onChange, + children, + slotItems, + maxTagPlaceholder, + elRef, + setSlotParams, + onLoadData, + ...props + }) => { + const filterTreeNodeFunction = useFunction(filterTreeNode); + const getPopupContainerFunction = useFunction(getPopupContainer); + const tagRenderFunction = useFunction(tagRender); + const dropdownRenderFunction = useFunction(dropdownRender); + const treeTitleRenderFunction = useFunction(treeTitleRender); + + const componentProps: TreeSelectProps = useMemo(() => { + return { + ...props, + loadData: onLoadData, + treeData: + treeData || + renderItems[number]>( + slotItems + ), + dropdownRender: slots.dropdownRender + ? renderParamsSlot({ slots, setSlotParams, key: 'dropdownRender' }) + : dropdownRenderFunction, + allowClear: slots['allowClear.clearIcon'] + ? { + clearIcon: , + } + : props.allowClear, + suffixIcon: slots.suffixIcon ? ( + + ) : ( + props.suffixIcon + ), + switcherIcon: slots.switcherIcon + ? renderParamsSlot({ slots, setSlotParams, key: 'switcherIcon' }) + : props.switcherIcon, + getPopupContainer: getPopupContainerFunction, + tagRender: slots.tagRender + ? renderParamsSlot({ slots, setSlotParams, key: 'tagRender' }) + : tagRenderFunction, + treeTitleRender: slots.treeTitleRender + ? renderParamsSlot({ slots, setSlotParams, key: 'treeTitleRender' }) + : treeTitleRenderFunction, + filterTreeNode: filterTreeNodeFunction || filterTreeNode, + maxTagPlaceholder: slots.maxTagPlaceholder + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'maxTagPlaceholder', + }) + : maxTagPlaceholder, + notFoundContent: slots.notFoundContent ? ( + + ) : ( + props.notFoundContent + ), + }; + }, [ + dropdownRenderFunction, + filterTreeNode, + filterTreeNodeFunction, + getPopupContainerFunction, + maxTagPlaceholder, + onLoadData, + props, + setSlotParams, + slotItems, + slots, + tagRenderFunction, + treeData, + treeTitleRenderFunction, + ]); + return ( + <> +
{children}
+ { + onChange?.(v, ...args); + onValueChange(v as string | string[]); + }} + /> + + ); + } +); +export default TreeSelect; diff --git a/frontend/antd/tree/Index.svelte b/frontend/antd/tree/Index.svelte new file mode 100644 index 00000000..d8e7b3a7 --- /dev/null +++ b/frontend/antd/tree/Index.svelte @@ -0,0 +1,82 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTree then Tree} + + + + {/await} +{/if} + + diff --git a/frontend/antd/tree/context.ts b/frontend/antd/tree/context.ts new file mode 100644 index 00000000..1a18e5f6 --- /dev/null +++ b/frontend/antd/tree/context.ts @@ -0,0 +1,6 @@ +import { createItemsContext } from '@utils/createItemsContext'; + +const { getItems, getSetItemFn } = createItemsContext('tree'); + +export { getItems, getSetItemFn }; +export * from '@utils/createItemsContext'; diff --git a/frontend/antd/tree/directory-tree/Index.svelte b/frontend/antd/tree/directory-tree/Index.svelte new file mode 100644 index 00000000..54e02bca --- /dev/null +++ b/frontend/antd/tree/directory-tree/Index.svelte @@ -0,0 +1,84 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedDirectoryTree then DirectoryTree} + + + + {/await} +{/if} + + diff --git a/frontend/antd/tree/directory-tree/gradio.config.js b/frontend/antd/tree/directory-tree/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tree/directory-tree/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tree/directory-tree/package.json b/frontend/antd/tree/directory-tree/package.json new file mode 100644 index 00000000..bd4c7e70 --- /dev/null +++ b/frontend/antd/tree/directory-tree/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tree.directory-tree", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tree/gradio.config.js b/frontend/antd/tree/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/tree/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tree/package.json b/frontend/antd/tree/package.json new file mode 100644 index 00000000..e4245db8 --- /dev/null +++ b/frontend/antd/tree/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tree", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tree/tree-node/Index.svelte b/frontend/antd/tree/tree-node/Index.svelte new file mode 100644 index 00000000..4014a198 --- /dev/null +++ b/frontend/antd/tree/tree-node/Index.svelte @@ -0,0 +1,95 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/antd/tree/tree-node/gradio.config.js b/frontend/antd/tree/tree-node/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/tree/tree-node/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/tree/tree-node/package.json b/frontend/antd/tree/tree-node/package.json new file mode 100644 index 00000000..c6843cfa --- /dev/null +++ b/frontend/antd/tree/tree-node/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-tree.tree-node", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/tree/tree.tsx b/frontend/antd/tree/tree.tsx new file mode 100644 index 00000000..488115ae --- /dev/null +++ b/frontend/antd/tree/tree.tsx @@ -0,0 +1,128 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useFunction } from '@utils/hooks/useFunction'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderItems } from '@utils/renderItems'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Tree as ATree } from 'antd'; + +import { type Item } from './context'; + +type TreeProps = GetProps; + +export const Tree = sveltify< + TreeProps & { + slotItems: Item[]; + directory?: boolean; + setSlotParams: SetSlotParams; + onLoadData?: (...args: any[]) => Promise; + }, + [ + 'switcherLoadingIcon', + 'switcherIcon', + 'showLine.showLeafIcon', + 'icon', + 'draggable.icon', + 'titleRender', + ] +>( + ({ + slots, + filterTreeNode, + treeData, + draggable, + allowDrop, + onCheck, + onSelect, + onExpand, + children, + directory, + slotItems, + setSlotParams, + onLoadData, + ...props + }) => { + const filterTreeNodeFunction = useFunction(filterTreeNode); + const draggableFunction = useFunction(draggable); + const draggableNodeDraggableFunction = useFunction( + typeof draggable === 'object' ? draggable.nodeDraggable : undefined + ); + const allowDropFunction = useFunction(allowDrop); + const TreeComponent = directory ? ATree.DirectoryTree : ATree; + const componentProps = useMemo(() => { + return { + ...props, + treeData: + treeData || + renderItems[number]>(slotItems), + showLine: slots['showLine.showLeafIcon'] + ? { + showLeafIcon: renderParamsSlot({ + slots, + setSlotParams, + key: 'showLine.showLeafIcon', + }), + } + : props.showLine, + icon: slots.icon + ? renderParamsSlot({ slots, setSlotParams, key: 'icon' }) + : props.icon, + switcherLoadingIcon: slots.switcherLoadingIcon ? ( + + ) : ( + props.switcherLoadingIcon + ), + switcherIcon: slots.switcherIcon + ? renderParamsSlot({ slots, setSlotParams, key: 'switcherIcon' }) + : props.switcherIcon, + titleRender: slots.titleRender + ? renderParamsSlot({ slots, setSlotParams, key: 'titleRender' }) + : props.titleRender, + draggable: + slots['draggable.icon'] || draggableNodeDraggableFunction + ? { + icon: slots['draggable.icon'] ? ( + + ) : typeof draggable === 'object' ? ( + draggable.icon + ) : undefined, + nodeDraggable: draggableNodeDraggableFunction, + } + : draggableFunction || draggable, + loadData: onLoadData, + }; + }, [ + props, + treeData, + slotItems, + slots, + setSlotParams, + draggableNodeDraggableFunction, + draggable, + draggableFunction, + onLoadData, + ]); + return ( + <> +
{children}
+ { + onSelect?.(selected, ...args); + }} + onExpand={(expanded, ...args) => { + onExpand?.(expanded, ...args); + }} + onCheck={(checked, ...args) => { + onCheck?.(checked, ...args); + }} + /> + + ); + } +); +export default Tree; diff --git a/frontend/antd/typography/Base.svelte b/frontend/antd/typography/Base.svelte new file mode 100644 index 00000000..bab3ee82 --- /dev/null +++ b/frontend/antd/typography/Base.svelte @@ -0,0 +1,96 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedTypographyBase then TypographyBase} + + {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.value} + {/if} + + {/await} +{/if} + + diff --git a/frontend/antd/typography/link/Index.svelte b/frontend/antd/typography/link/Index.svelte new file mode 100644 index 00000000..aa30731f --- /dev/null +++ b/frontend/antd/typography/link/Index.svelte @@ -0,0 +1,12 @@ + + + + + + + diff --git a/frontend/antd/typography/link/gradio.config.js b/frontend/antd/typography/link/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/typography/link/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/typography/link/package.json b/frontend/antd/typography/link/package.json new file mode 100644 index 00000000..20f412c9 --- /dev/null +++ b/frontend/antd/typography/link/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-typography.link", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/typography/paragraph/Index.svelte b/frontend/antd/typography/paragraph/Index.svelte new file mode 100644 index 00000000..ea4edc6e --- /dev/null +++ b/frontend/antd/typography/paragraph/Index.svelte @@ -0,0 +1,12 @@ + + + + + + + diff --git a/frontend/antd/typography/paragraph/gradio.config.js b/frontend/antd/typography/paragraph/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/typography/paragraph/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/typography/paragraph/package.json b/frontend/antd/typography/paragraph/package.json new file mode 100644 index 00000000..7e2a86e1 --- /dev/null +++ b/frontend/antd/typography/paragraph/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-typography.paragraph", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/typography/text/Index.svelte b/frontend/antd/typography/text/Index.svelte new file mode 100644 index 00000000..3877ea92 --- /dev/null +++ b/frontend/antd/typography/text/Index.svelte @@ -0,0 +1,12 @@ + + + + + + + diff --git a/frontend/antd/typography/text/gradio.config.js b/frontend/antd/typography/text/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/typography/text/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/typography/text/package.json b/frontend/antd/typography/text/package.json new file mode 100644 index 00000000..f35ede67 --- /dev/null +++ b/frontend/antd/typography/text/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-typography.text", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/typography/title/Index.svelte b/frontend/antd/typography/title/Index.svelte new file mode 100644 index 00000000..c5f2f89c --- /dev/null +++ b/frontend/antd/typography/title/Index.svelte @@ -0,0 +1,12 @@ + + + + + + + diff --git a/frontend/antd/typography/title/gradio.config.js b/frontend/antd/typography/title/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/typography/title/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/typography/title/package.json b/frontend/antd/typography/title/package.json new file mode 100644 index 00000000..221fd14d --- /dev/null +++ b/frontend/antd/typography/title/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-typography.title", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/typography/typography.base.tsx b/frontend/antd/typography/typography.base.tsx new file mode 100644 index 00000000..ef60ab6e --- /dev/null +++ b/frontend/antd/typography/typography.base.tsx @@ -0,0 +1,173 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import React, { useMemo } from 'react'; +import { useSlotsChildren } from '@utils/hooks/useSlotsChildren'; +import { omitUndefinedProps } from '@utils/omitUndefinedProps'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Typography } from 'antd'; +import type { EllipsisConfig } from 'antd/es/typography/Base'; +import cls from 'classnames'; + +import { useTargets } from '../../utils/hooks/useTargets'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} + +export const TypographyBase = sveltify< + GetProps & + GetProps & + GetProps & + GetProps & { + component: 'title' | 'paragraph' | 'text' | 'link'; + setSlotParams: SetSlotParams; + value?: string; + }, + [ + // list + 'copyable.icon', + // list + 'copyable.tooltips', + 'editable.icon', + 'editable.tooltip', + 'editable.enterIcon', + 'ellipsis.symbol', + 'ellipsis.tooltip', + 'ellipsis.tooltip.title', + ] +>( + ({ + component, + className, + slots, + children, + copyable, + editable, + ellipsis, + setSlotParams, + value, + ...props + }) => { + const copyableTooltipsTargets = useTargets(children, 'copyable.tooltips'); + const copyableIconTargets = useTargets(children, 'copyable.icon'); + const supportCopy = + slots['copyable.icon'] || copyableTooltipsTargets.length > 0 || copyable; + const supportEdit = + slots['editable.icon'] || + slots['editable.tooltip'] || + slots['editable.enterIcon'] || + editable; + const supportEllipsis = + slots['ellipsis.symbol'] || + slots['ellipsis.tooltip'] || + slots['ellipsis.tooltip.title'] || + ellipsis; + const copyableConfig = getConfig(copyable); + const editableConfig = getConfig(editable); + const ellipsisConfig = getConfig(ellipsis); + + const TypographyComponent = useMemo(() => { + switch (component) { + case 'title': + return Typography.Title; + case 'paragraph': + return Typography.Paragraph; + case 'text': + return Typography.Text; + case 'link': + return Typography.Link; + } + }, [component]); + const [slotsChildren, restChildren] = useSlotsChildren(children); + return ( + <> +
{slotsChildren}
+ 0 + ? copyableTooltipsTargets.map((slot, index) => { + return ; + }) + : copyableConfig.tooltips, + icon: + copyableIconTargets.length > 0 + ? copyableIconTargets.map((slot, index) => { + return ; + }) + : copyableConfig.icon, + }) + : undefined + } + editable={ + supportEdit + ? { + ...editableConfig, + icon: slots['editable.icon'] ? ( + + ) : ( + editableConfig.icon + ), + tooltip: slots['editable.tooltip'] ? ( + + ) : ( + editableConfig.tooltip + ), + enterIcon: slots['editable.enterIcon'] ? ( + + ) : ( + editableConfig.enterIcon + ), + } + : undefined + } + ellipsis={ + (component === 'link' + ? !!supportEllipsis + : supportEllipsis + ? ({ + ...ellipsisConfig, + symbol: slots['ellipsis.symbol'] + ? renderParamsSlot( + { + key: 'ellipsis.symbol', + setSlotParams, + slots, + }, + { clone: true } + ) + : ellipsisConfig.symbol, + tooltip: slots['ellipsis.tooltip'] ? ( + + ) : ( + { + ...ellipsisConfig.tooltip, + title: slots['ellipsis.tooltip.title'] ? ( + + ) : ( + ellipsisConfig.tooltip?.title + ), + } + ), + } as EllipsisConfig) + : undefined) as boolean + } + > + {restChildren} + + + ); + } +); + +export default TypographyBase; diff --git a/frontend/antd/upload/Index.svelte b/frontend/antd/upload/Index.svelte new file mode 100644 index 00000000..63e73777 --- /dev/null +++ b/frontend/antd/upload/Index.svelte @@ -0,0 +1,96 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedUpload then Upload} + { + value = v; + }} + upload={async (files) => { + return ( + (await gradio.client.upload(await prepare_files(files), root)) || [] + ); + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/upload/dragger/Index.svelte b/frontend/antd/upload/dragger/Index.svelte new file mode 100644 index 00000000..0c75d548 --- /dev/null +++ b/frontend/antd/upload/dragger/Index.svelte @@ -0,0 +1,94 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedUploadDragger then UploadDragger} + { + value = v; + }} + upload={async (files) => { + return ( + (await gradio.client.upload(await prepare_files(files), root)) || [] + ); + }} + {setSlotParams} + > + + + {/await} +{/if} + + diff --git a/frontend/antd/upload/dragger/gradio.config.js b/frontend/antd/upload/dragger/gradio.config.js new file mode 100644 index 00000000..1992403d --- /dev/null +++ b/frontend/antd/upload/dragger/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/upload/dragger/package.json b/frontend/antd/upload/dragger/package.json new file mode 100644 index 00000000..b68a119d --- /dev/null +++ b/frontend/antd/upload/dragger/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-upload.dragger", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/upload/dragger/upload.dragger.tsx b/frontend/antd/upload/dragger/upload.dragger.tsx new file mode 100644 index 00000000..a8bafb09 --- /dev/null +++ b/frontend/antd/upload/dragger/upload.dragger.tsx @@ -0,0 +1,185 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import type { FileData } from '@gradio/client'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Upload as AUpload } from 'antd'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} +export const UploadDragger = sveltify< + Omit, 'fileList' | 'onChange'> & { + onValueChange?: (value: FileData[]) => void; + onChange?: (value: string[]) => void; + upload: (files: File[]) => Promise<(FileData | null)[]>; + fileList: FileData[]; + setSlotParams: SetSlotParams; + }, + [ + 'showUploadList.extra', + 'showUploadList.previewIcon', + 'showUploadList.removeIcon', + 'showUploadList.downloadIcon', + 'iconRender', + 'itemRender', + ] +>( + ({ + slots, + upload, + showUploadList, + progress, + beforeUpload, + customRequest, + previewFile, + isImageUrl, + itemRender, + iconRender, + data, + onChange, + onValueChange, + onRemove, + fileList, + setSlotParams, + ...props + }) => { + const supportShowUploadListConfig = + slots['showUploadList.downloadIcon'] || + slots['showUploadList.removeIcon'] || + slots['showUploadList.previewIcon'] || + slots['showUploadList.extra'] || + typeof showUploadList === 'object'; + const showUploadListConfig = getConfig(showUploadList); + const showUploadListShowPreviewIconFunction = useFunction( + showUploadListConfig.showPreviewIcon + ); + const showUploadListShowRemoveIconFunction = useFunction( + showUploadListConfig.showRemoveIcon + ); + const showUploadListShowDownloadIconFunction = useFunction( + showUploadListConfig.showDownloadIcon + ); + const beforeUploadFunction = useFunction(beforeUpload); + const customRequestFunction = useFunction(customRequest); + const progressFormatFunction = useFunction(progress?.format); + const previewFileFunction = useFunction(previewFile); + const isImageUrlFunction = useFunction(isImageUrl); + const itemRenderFunction = useFunction(itemRender); + const iconRenderFunction = useFunction(iconRender); + const dataFunction = useFunction(data); + const validFileList = useMemo(() => { + return ( + fileList?.map((file) => ({ + ...file, + name: file.orig_name || file.path, + uid: file.url || file.path, + status: 'done' as const, + })) || [] + ); + }, [fileList]); + return ( + { + onRemove?.(file); + const index = validFileList.findIndex((v) => v.uid === file.uid); + const newFileList = fileList.slice(); + newFileList.splice(index, 1); + onValueChange?.(newFileList); + onChange?.(newFileList.map((v) => v.path)); + }} + beforeUpload={async (file, files) => { + if (beforeUploadFunction) { + if (!(await beforeUploadFunction(file, files))) { + return false; + } + } + const fileDataList = (await upload([file])).filter( + (v) => v + ) as FileData[]; + + onValueChange?.([...fileList, ...fileDataList]); + onChange?.([ + ...fileList.map((v) => v.path), + ...fileDataList.map((v) => v.path), + ]); + return false; + }} + customRequest={customRequestFunction} + progress={ + progress + ? { + ...progress, + format: progressFormatFunction, + } + : progress + } + showUploadList={ + supportShowUploadListConfig + ? { + ...showUploadListConfig, + showDownloadIcon: + showUploadListShowDownloadIconFunction || + showUploadListConfig.showDownloadIcon, + showRemoveIcon: + showUploadListShowRemoveIconFunction || + showUploadListConfig.showRemoveIcon, + showPreviewIcon: + showUploadListShowPreviewIconFunction || + showUploadListConfig.showPreviewIcon, + downloadIcon: slots['showUploadList.downloadIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.downloadIcon', + }) + : showUploadListConfig.downloadIcon, + removeIcon: slots['showUploadList.removeIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.removeIcon', + }) + : showUploadListConfig.removeIcon, + previewIcon: slots['showUploadList.previewIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.previewIcon', + }) + : showUploadListConfig.previewIcon, + extra: slots['showUploadList.extra'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.extra', + }) + : showUploadListConfig.extra, + } + : showUploadList + } + /> + ); + } +); + +export default UploadDragger; diff --git a/frontend/antd/upload/gradio.config.js b/frontend/antd/upload/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/upload/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/upload/package.json b/frontend/antd/upload/package.json new file mode 100644 index 00000000..d07c445d --- /dev/null +++ b/frontend/antd/upload/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-upload", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/upload/upload.tsx b/frontend/antd/upload/upload.tsx new file mode 100644 index 00000000..31236005 --- /dev/null +++ b/frontend/antd/upload/upload.tsx @@ -0,0 +1,185 @@ +import { sveltify } from '@svelte-preprocess-react'; +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; +import { useMemo } from 'react'; +import type { FileData } from '@gradio/client'; +import { useFunction } from '@utils/hooks/useFunction'; +import { renderParamsSlot } from '@utils/renderParamsSlot'; +import { type GetProps, Upload as AUpload } from 'antd'; + +function getConfig(value: T): Partial> { + if (typeof value === 'object' && value !== null) { + return value as any; + } + return {} as any; +} +export const Upload = sveltify< + Omit, 'fileList' | 'onChange'> & { + onValueChange?: (value: FileData[]) => void; + onChange?: (value: string[]) => void; + upload: (files: File[]) => Promise<(FileData | null)[]>; + fileList: FileData[]; + setSlotParams: SetSlotParams; + }, + [ + 'showUploadList.extra', + 'showUploadList.previewIcon', + 'showUploadList.removeIcon', + 'showUploadList.downloadIcon', + 'iconRender', + 'itemRender', + ] +>( + ({ + slots, + upload, + showUploadList, + progress, + beforeUpload, + customRequest, + previewFile, + isImageUrl, + itemRender, + iconRender, + data, + onChange, + onValueChange, + onRemove, + fileList, + setSlotParams, + ...props + }) => { + const supportShowUploadListConfig = + slots['showUploadList.downloadIcon'] || + slots['showUploadList.removeIcon'] || + slots['showUploadList.previewIcon'] || + slots['showUploadList.extra'] || + typeof showUploadList === 'object'; + const showUploadListConfig = getConfig(showUploadList); + const showUploadListShowPreviewIconFunction = useFunction( + showUploadListConfig.showPreviewIcon + ); + const showUploadListShowRemoveIconFunction = useFunction( + showUploadListConfig.showRemoveIcon + ); + const showUploadListShowDownloadIconFunction = useFunction( + showUploadListConfig.showDownloadIcon + ); + const beforeUploadFunction = useFunction(beforeUpload); + const customRequestFunction = useFunction(customRequest); + const progressFormatFunction = useFunction(progress?.format); + const previewFileFunction = useFunction(previewFile); + const isImageUrlFunction = useFunction(isImageUrl); + const itemRenderFunction = useFunction(itemRender); + const iconRenderFunction = useFunction(iconRender); + const dataFunction = useFunction(data); + const validFileList = useMemo(() => { + return ( + fileList?.map((file) => ({ + ...file, + name: file.orig_name || file.path, + uid: file.url || file.path, + status: 'done' as const, + })) || [] + ); + }, [fileList]); + return ( + { + onRemove?.(file); + const index = validFileList.findIndex((v) => v.uid === file.uid); + const newFileList = fileList.slice(); + newFileList.splice(index, 1); + onValueChange?.(newFileList); + onChange?.(newFileList.map((v) => v.path)); + }} + beforeUpload={async (file, files) => { + if (beforeUploadFunction) { + if (!(await beforeUploadFunction(file, files))) { + return false; + } + } + const fileDataList = (await upload([file])).filter( + (v) => v + ) as FileData[]; + + onValueChange?.([...fileList, ...fileDataList]); + onChange?.([ + ...fileList.map((v) => v.path), + ...fileDataList.map((v) => v.path), + ]); + return false; + }} + customRequest={customRequestFunction} + progress={ + progress + ? { + ...progress, + format: progressFormatFunction, + } + : progress + } + showUploadList={ + supportShowUploadListConfig + ? { + ...showUploadListConfig, + showDownloadIcon: + showUploadListShowDownloadIconFunction || + showUploadListConfig.showDownloadIcon, + showRemoveIcon: + showUploadListShowRemoveIconFunction || + showUploadListConfig.showRemoveIcon, + showPreviewIcon: + showUploadListShowPreviewIconFunction || + showUploadListConfig.showPreviewIcon, + downloadIcon: slots['showUploadList.downloadIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.downloadIcon', + }) + : showUploadListConfig.downloadIcon, + removeIcon: slots['showUploadList.removeIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.removeIcon', + }) + : showUploadListConfig.removeIcon, + previewIcon: slots['showUploadList.previewIcon'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.previewIcon', + }) + : showUploadListConfig.previewIcon, + extra: slots['showUploadList.extra'] + ? renderParamsSlot({ + slots, + setSlotParams, + key: 'showUploadList.extra', + }) + : showUploadListConfig.extra, + } + : showUploadList + } + /> + ); + } +); + +export default Upload; diff --git a/frontend/antd/watermark/Index.svelte b/frontend/antd/watermark/Index.svelte new file mode 100644 index 00000000..eb78d15d --- /dev/null +++ b/frontend/antd/watermark/Index.svelte @@ -0,0 +1,76 @@ + + + + + +{#if $mergedProps.visible} + {#await AwaitedWatermark then Watermark} + + + + {/await} +{/if} + + diff --git a/frontend/antd/watermark/gradio.config.js b/frontend/antd/watermark/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/antd/watermark/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/antd/watermark/package.json b/frontend/antd/watermark/package.json new file mode 100644 index 00000000..26c38a1e --- /dev/null +++ b/frontend/antd/watermark/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-watermark", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/antd/watermark/watermark.tsx b/frontend/antd/watermark/watermark.tsx new file mode 100644 index 00000000..6b768081 --- /dev/null +++ b/frontend/antd/watermark/watermark.tsx @@ -0,0 +1,5 @@ +import { sveltify } from '@svelte-preprocess-react'; +import { type GetProps, Watermark as AWatermark } from 'antd'; + +export const Watermark = sveltify>(AWatermark); +export default Watermark; diff --git a/frontend/base/CHANGELOG.md b/frontend/base/CHANGELOG.md new file mode 100644 index 00000000..62b1e37f --- /dev/null +++ b/frontend/base/CHANGELOG.md @@ -0,0 +1,25 @@ +# @modelscope-studio/base + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! diff --git a/frontend/base/application/Application.svelte b/frontend/base/application/Application.svelte new file mode 100644 index 00000000..304e19da --- /dev/null +++ b/frontend/base/application/Application.svelte @@ -0,0 +1,117 @@ + + + + +{#if visible} +
+ +
+{/if} + + diff --git a/frontend/base/application/Index.svelte b/frontend/base/application/Index.svelte new file mode 100644 index 00000000..04b327f3 --- /dev/null +++ b/frontend/base/application/Index.svelte @@ -0,0 +1,17 @@ + + + + +{#await awaitedApplication then Application} + + + +{/await} diff --git a/frontend/base/application/gradio.config.js b/frontend/base/application/gradio.config.js new file mode 100644 index 00000000..3cf1a1f7 --- /dev/null +++ b/frontend/base/application/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: false }); diff --git a/frontend/base/application/package.json b/frontend/base/application/package.json new file mode 100644 index 00000000..1b09e517 --- /dev/null +++ b/frontend/base/application/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-application", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/div/Index.svelte b/frontend/base/div/Index.svelte new file mode 100644 index 00000000..2fb5b12d --- /dev/null +++ b/frontend/base/div/Index.svelte @@ -0,0 +1,111 @@ + + + + +{#if $mergedProps.visible} + +
+ {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.value} + {/if} +
+
+{/if} + + diff --git a/frontend/base/div/gradio.config.js b/frontend/base/div/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/div/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/div/package.json b/frontend/base/div/package.json new file mode 100644 index 00000000..b5ba6623 --- /dev/null +++ b/frontend/base/div/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-div", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/each/Each.svelte b/frontend/base/each/Each.svelte new file mode 100644 index 00000000..7dc7783b --- /dev/null +++ b/frontend/base/each/Each.svelte @@ -0,0 +1,26 @@ + + + + + + + diff --git a/frontend/base/each/Index.svelte b/frontend/base/each/Index.svelte new file mode 100644 index 00000000..a37efda5 --- /dev/null +++ b/frontend/base/each/Index.svelte @@ -0,0 +1,50 @@ + + + + +{#if $mergedProps.visible} + {#each $mergedProps.value as item, i} + + + + {/each} +{/if} + + diff --git a/frontend/base/each/gradio.config.js b/frontend/base/each/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/each/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/each/package.json b/frontend/base/each/package.json new file mode 100644 index 00000000..08434ea0 --- /dev/null +++ b/frontend/base/each/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-each", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/filter/Index.svelte b/frontend/base/filter/Index.svelte new file mode 100644 index 00000000..a928800e --- /dev/null +++ b/frontend/base/filter/Index.svelte @@ -0,0 +1,60 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/base/filter/gradio.config.js b/frontend/base/filter/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/filter/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/filter/package.json b/frontend/base/filter/package.json new file mode 100644 index 00000000..98988955 --- /dev/null +++ b/frontend/base/filter/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-filter", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/fragment/Index.svelte b/frontend/base/fragment/Index.svelte new file mode 100644 index 00000000..2ae17131 --- /dev/null +++ b/frontend/base/fragment/Index.svelte @@ -0,0 +1,40 @@ + + + + +{#if $mergedProps.visible} + {#await AwaitedFragment then Fragment} + + + + {/await} +{/if} + + diff --git a/frontend/base/fragment/ShowFragment.svelte b/frontend/base/fragment/ShowFragment.svelte new file mode 100644 index 00000000..e680b493 --- /dev/null +++ b/frontend/base/fragment/ShowFragment.svelte @@ -0,0 +1,15 @@ + + + + +{#if show} + + + +{:else} + +{/if} diff --git a/frontend/base/fragment/fragment.tsx b/frontend/base/fragment/fragment.tsx new file mode 100644 index 00000000..4225728a --- /dev/null +++ b/frontend/base/fragment/fragment.tsx @@ -0,0 +1,10 @@ +import { sveltify } from '@svelte-preprocess-react'; +import React from 'react'; + +export const Fragment = sveltify<{ + children?: React.ReactNode; +}>(({ children }) => { + return <>{children}; +}); + +export default Fragment; diff --git a/frontend/base/fragment/gradio.config.js b/frontend/base/fragment/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/fragment/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/fragment/package.json b/frontend/base/fragment/package.json new file mode 100644 index 00000000..eff5dd12 --- /dev/null +++ b/frontend/base/fragment/package.json @@ -0,0 +1,15 @@ +{ + "name": "@modelscope-studio/antd-fragment", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + }, + "./ShowFragment": "./ShowFragment.svelte" + } +} diff --git a/frontend/base/package.json b/frontend/base/package.json new file mode 100644 index 00000000..cf6bd982 --- /dev/null +++ b/frontend/base/package.json @@ -0,0 +1,5 @@ +{ + "name": "@modelscope-studio/base", + "version": "1.0.0-beta.3", + "type": "module" +} diff --git a/frontend/base/slot/Index.svelte b/frontend/base/slot/Index.svelte new file mode 100644 index 00000000..e106693d --- /dev/null +++ b/frontend/base/slot/Index.svelte @@ -0,0 +1,77 @@ + + + + +{#if $mergedProps.visible} + +{/if} + + diff --git a/frontend/base/slot/gradio.config.js b/frontend/base/slot/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/slot/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/slot/package.json b/frontend/base/slot/package.json new file mode 100644 index 00000000..fe61cc1b --- /dev/null +++ b/frontend/base/slot/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-slot", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/span/Index.svelte b/frontend/base/span/Index.svelte new file mode 100644 index 00000000..10e369cc --- /dev/null +++ b/frontend/base/span/Index.svelte @@ -0,0 +1,111 @@ + + + + +{#if $mergedProps.visible} + + + {#if $mergedProps._internal.layout} + + {:else} + {$mergedProps.value} + {/if} + + +{/if} + + diff --git a/frontend/base/span/gradio.config.js b/frontend/base/span/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/span/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/span/package.json b/frontend/base/span/package.json new file mode 100644 index 00000000..c3a83e32 --- /dev/null +++ b/frontend/base/span/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-span", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/base/text/Index.svelte b/frontend/base/text/Index.svelte new file mode 100644 index 00000000..8674dfce --- /dev/null +++ b/frontend/base/text/Index.svelte @@ -0,0 +1,36 @@ + + + + +{#if $mergedProps.visible} + + {$mergedProps.value} + +{/if} diff --git a/frontend/base/text/global.css b/frontend/base/text/global.css new file mode 100644 index 00000000..ef5f61b6 --- /dev/null +++ b/frontend/base/text/global.css @@ -0,0 +1,3 @@ +.ms-gr-noop-class { + display: none; +} diff --git a/frontend/base/text/gradio.config.js b/frontend/base/text/gradio.config.js new file mode 100644 index 00000000..916857c0 --- /dev/null +++ b/frontend/base/text/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config(); diff --git a/frontend/base/text/package.json b/frontend/base/text/package.json new file mode 100644 index 00000000..44cfecdb --- /dev/null +++ b/frontend/base/text/package.json @@ -0,0 +1,14 @@ +{ + "name": "@modelscope-studio/antd-text", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + } +} diff --git a/frontend/compiled/package.json b/frontend/compiled/package.json deleted file mode 100644 index 6c6da088..00000000 --- a/frontend/compiled/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "@modelscope-studio/compiled", - "version": "0.5.2", - "private": false, - "description": "ModelScope Gradio Components", - "repository": "git@github.com:modelscope/modelscope-studio.git", - "license": "Apache-2.0", - "sideEffects": [ - "*.css" - ], - "type": "module", - "main": "./index.ts", - "scripts": { - "build": "vite build", - "dev": "vite build --watch" - }, - "dependencies": { - "@ant-design/cssinjs": "^1.21.0", - "@ant-design/icons": "^5.3.7", - "@gradio/client": "1.1.1", - "@subscribe-kit/core": "^2.1.1", - "@subscribe-kit/react": "^2.1.1", - "@ungap/structured-clone": "^1.2.0", - "@xyflow/react": "12.0.0-next.24", - "ajv": "^8.16.0", - "ajv-i18n": "^4.2.0", - "antd": "^5.18.3", - "classnames": "^2.5.1", - "deepmerge": "^4.3.1", - "echarts": "^5.5.0", - "elkjs": "^0.9.3", - "github-markdown-css": "^5.6.1", - "github-slugger": "^2.0.0", - "hastscript": "^9.0.0", - "katex": "^0.16.10", - "lodash-es": "^4.17.21", - "pdfjs-dist": "^3.11.174", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-markdown": "^9.0.1", - "react-syntax-highlighter": "^15.5.0", - "rehype-katex": "^7.0.0", - "rehype-raw": "^7.0.0", - "remark-breaks": "^4.0.0", - "remark-directive": "^3.0.0", - "remark-gfm": "^4.0.0", - "remark-math": "^6.0.0", - "svelte-i18n": "^4.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/types": "^7.24.7", - "@types/babel__core": "^7.20.5", - "@types/lodash-es": "^4.17.12", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@types/react-syntax-highlighter": "^15.5.13", - "@vitejs/plugin-react-swc": "^3.7.0", - "less": "^4.2.0", - "vite": "^5.3.1", - "vite-plugin-dts": "^3.9.1", - "vite-plugin-lib-inject-css": "^2.1.1" - }, - "main_changeset": true -} diff --git a/frontend/compiled/tsconfig.build.json b/frontend/compiled/tsconfig.build.json deleted file mode 100644 index 0933fc76..00000000 --- a/frontend/compiled/tsconfig.build.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "types": ["vite/client"], - - /* Linting */ - "strict": true - // "noUnusedLocals": true, - // "noUnusedParameters": true, - // "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/frontend/compiled/tsconfig.json b/frontend/compiled/tsconfig.json deleted file mode 100644 index 75d6e0f8..00000000 --- a/frontend/compiled/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "types": ["vite/client"], - /* Linting */ - "strict": true - // "noUnusedLocals": true, - // "noUnusedParameters": true, - // "noFallthroughCasesInSwitch": true - }, - "include": ["src", "components", "index.ts", "global.d.ts"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/frontend/compiled/tsconfig.node.json b/frontend/compiled/tsconfig.node.json deleted file mode 100644 index 397a3a3a..00000000 --- a/frontend/compiled/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "strict": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/frontend/compiled/vite.config.ts b/frontend/compiled/vite.config.ts deleted file mode 100644 index 59d9ca8a..00000000 --- a/frontend/compiled/vite.config.ts +++ /dev/null @@ -1,72 +0,0 @@ -import react from '@vitejs/plugin-react-swc'; -import path from 'path'; -import { defineConfig } from 'vite'; -import dts from 'vite-plugin-dts'; -import { libInjectCss } from 'vite-plugin-lib-inject-css'; - -const libEntryFile = path.resolve(__dirname, 'src/index.ts'); -const libEntryFileDir = path.dirname(libEntryFile); - -const libOutDir = path.resolve(__dirname, 'build-assets'); -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - react(), - libInjectCss(), - dts({ - rollupTypes: true, - tsconfigPath: path.resolve(__dirname, 'tsconfig.build.json'), - outDir: libOutDir, - }), - { - name: 'inject-polyfill', - }, - ], - define: { - 'process.env.NODE_ENV': JSON.stringify('production'), - }, - build: { - minify: true, - lib: { - entry: libEntryFile, - formats: ['es'], - fileName() { - return 'index.js'; - }, - }, - outDir: libOutDir, - rollupOptions: { - // external: ['react'], - // css tree shaking - output: { - assetFileNames: '[name]/index[extname]', - chunkFileNames: (chunk) => { - const entryModuleId = chunk.moduleIds[chunk.moduleIds.length - 1]; - if (entryModuleId.includes('node_modules')) { - const slices = entryModuleId.split('node_modules/'); - return slices[slices.length - 1]; - } - if ( - path.basename(entryModuleId, path.extname(entryModuleId)) === - 'index' - ) { - return '[name]/index.js'; - } - return '[name].js'; - }, - manualChunks(id, { getModuleInfo }) { - const entryModuleInfo = getModuleInfo(libEntryFile); - const entryModuleImportedIds = entryModuleInfo?.importedIds; - if (entryModuleImportedIds?.includes(id)) { - const filenameWithoutExt = path.basename(id, path.extname(id)); - if (filenameWithoutExt === 'index') { - return path.dirname(id).replace(libEntryFileDir + path.sep, ''); - } else { - return filenameWithoutExt; - } - } - }, - }, - }, - }, -}); diff --git a/frontend/defineConfig.js b/frontend/defineConfig.js new file mode 100644 index 00000000..e05a0aa1 --- /dev/null +++ b/frontend/defineConfig.js @@ -0,0 +1,18 @@ +import react from '@vitejs/plugin-react-swc'; + +import { ModelScopeStudioVitePlugin } from './plugin.js'; + +/** + * @type {(options:{ external?:boolean; }) => any} + */ +export default ({ external } = { external: true }) => { + return { + plugins: [react(), ModelScopeStudioVitePlugin({ external })], + svelte: { + preprocess: [], + }, + build: { + target: 'modules', + }, + }; +}; diff --git a/frontend/fixtures.d.ts b/frontend/fixtures.d.ts new file mode 100644 index 00000000..ecd94893 --- /dev/null +++ b/frontend/fixtures.d.ts @@ -0,0 +1,15 @@ +declare module 'virtual:component-loader' { + export const load_component; +} +declare module '*?inline' { + const string: string; + export default string; +} + +interface Window { + __gradio_space__: any; +} + +interface Element { + _reactElement: React.ReactElement; +} diff --git a/frontend/Chatbot/Index.svelte b/frontend/legacy/Chatbot/Awaited.svelte similarity index 98% rename from frontend/Chatbot/Index.svelte rename to frontend/legacy/Chatbot/Awaited.svelte index c972722d..d0260566 100644 --- a/frontend/Chatbot/Index.svelte +++ b/frontend/legacy/Chatbot/Awaited.svelte @@ -13,8 +13,8 @@ CustomComponents, MarkdownCustomData, MarkdownProps, - } from '@modelscope-studio/compiled'; - import { gradio_version, normalise_file } from '@modelscope-studio/shared'; + } from '@modelscope-studio/legacy-compiled'; + import { gradio_version, normalise_file } from '@utils/upload'; import ChatBot from './shared/ChatBot.svelte'; import { @@ -58,6 +58,7 @@ export let enable_latex: boolean; export let latex_single_dollar_delimiter: boolean; export let latex_delimiters: MarkdownProps['latex_delimiters']; + export let gradio: Gradio<{ change: typeof value; select: SelectData; @@ -69,6 +70,7 @@ index: [number, number, number]; }; }>; + export let avatar_images: [AvatarImageItem, AvatarImageItem] = [null, null]; export let avatar_image_align: 'top' | 'middle' | 'bottom' = 'bottom'; export let avatar_image_width: number; diff --git a/frontend/Markdown/CHANGELOG.md b/frontend/legacy/Chatbot/CHANGELOG.md similarity index 66% rename from frontend/Markdown/CHANGELOG.md rename to frontend/legacy/Chatbot/CHANGELOG.md index 66f78086..13602641 100644 --- a/frontend/Markdown/CHANGELOG.md +++ b/frontend/legacy/Chatbot/CHANGELOG.md @@ -1,4 +1,28 @@ -# @modelscope-studio/markdown +# @modelscope-studio/legacy-chatbot + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! ## 0.5.2 @@ -54,7 +78,7 @@ No significant changes to this package were made in this release. ### Patch Changes - Updated dependencies [[`68400a3`](https://github.com/modelscope/modelscope-studio/commit/68400a366d5a8af9a8d14f51577d8db1ebdcceb3)]: - - @modelscope-studio/compiled@0.2.1 + - @modelscope-studio/legacy-compiled@0.2.1 ## 0.2.0 diff --git a/frontend/legacy/Chatbot/Index.svelte b/frontend/legacy/Chatbot/Index.svelte new file mode 100644 index 00000000..9888cea2 --- /dev/null +++ b/frontend/legacy/Chatbot/Index.svelte @@ -0,0 +1,15 @@ + + + + +{#await AwaitedChatbot then Chatbot} + + + +{/await} diff --git a/frontend/legacy/Chatbot/gradio.config.js b/frontend/legacy/Chatbot/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/Chatbot/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/legacy/Chatbot/package.json b/frontend/legacy/Chatbot/package.json new file mode 100644 index 00000000..b01f370c --- /dev/null +++ b/frontend/legacy/Chatbot/package.json @@ -0,0 +1,24 @@ +{ + "name": "@modelscope-studio/legacy-chatbot", + "version": "1.0.0-beta.3", + "private": false, + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "dependencies": { + "@modelscope-studio/legacy-compiled": "workspace:*" + }, + "devDependencies": {}, + "main_changeset": true +} diff --git a/frontend/Chatbot/shared/ChatBot.svelte b/frontend/legacy/Chatbot/shared/ChatBot.svelte similarity index 99% rename from frontend/Chatbot/shared/ChatBot.svelte rename to frontend/legacy/Chatbot/shared/ChatBot.svelte index 7e5c0fe6..2a32a051 100644 --- a/frontend/Chatbot/shared/ChatBot.svelte +++ b/frontend/legacy/Chatbot/shared/ChatBot.svelte @@ -7,8 +7,8 @@ FileView, type MarkdownCustomData, type MarkdownProps, - } from '@modelscope-studio/compiled'; - import { get_fetchable_url_or_file } from '@modelscope-studio/shared'; + } from '@modelscope-studio/legacy-compiled'; + import { get_fetchable_url_or_file } from '@utils/upload'; import { dequal } from 'dequal/lite'; import { afterUpdate, createEventDispatcher } from 'svelte'; diff --git a/frontend/Chatbot/shared/Copy.svelte b/frontend/legacy/Chatbot/shared/Copy.svelte similarity index 97% rename from frontend/Chatbot/shared/Copy.svelte rename to frontend/legacy/Chatbot/shared/Copy.svelte index 7ceac05c..7c96cc70 100644 --- a/frontend/Chatbot/shared/Copy.svelte +++ b/frontend/legacy/Chatbot/shared/Copy.svelte @@ -19,7 +19,7 @@ try { await copy_to_clipboard(value); copy_feedback(); - } catch (error) { + } catch { // } } diff --git a/frontend/Chatbot/shared/FlushingMarkdown.svelte b/frontend/legacy/Chatbot/shared/FlushingMarkdown.svelte similarity index 98% rename from frontend/Chatbot/shared/FlushingMarkdown.svelte rename to frontend/legacy/Chatbot/shared/FlushingMarkdown.svelte index cbf3fd5d..4ddc827a 100644 --- a/frontend/Chatbot/shared/FlushingMarkdown.svelte +++ b/frontend/legacy/Chatbot/shared/FlushingMarkdown.svelte @@ -2,7 +2,7 @@ import { Markdown, type MarkdownCustomData, - } from '@modelscope-studio/compiled'; + } from '@modelscope-studio/legacy-compiled'; import { afterUpdate, createEventDispatcher, onDestroy } from 'svelte'; export let message = ''; diff --git a/frontend/Chatbot/shared/LikeDislike.svelte b/frontend/legacy/Chatbot/shared/LikeDislike.svelte similarity index 100% rename from frontend/Chatbot/shared/LikeDislike.svelte rename to frontend/legacy/Chatbot/shared/LikeDislike.svelte diff --git a/frontend/Chatbot/shared/Pending.svelte b/frontend/legacy/Chatbot/shared/Pending.svelte similarity index 100% rename from frontend/Chatbot/shared/Pending.svelte rename to frontend/legacy/Chatbot/shared/Pending.svelte diff --git a/frontend/Chatbot/shared/llm-thinking-presets.ts b/frontend/legacy/Chatbot/shared/llm-thinking-presets.ts similarity index 100% rename from frontend/Chatbot/shared/llm-thinking-presets.ts rename to frontend/legacy/Chatbot/shared/llm-thinking-presets.ts diff --git a/frontend/Chatbot/shared/utils.ts b/frontend/legacy/Chatbot/shared/utils.ts similarity index 100% rename from frontend/Chatbot/shared/utils.ts rename to frontend/legacy/Chatbot/shared/utils.ts diff --git a/frontend/Flow/Index.svelte b/frontend/legacy/Flow/Awaited.svelte similarity index 96% rename from frontend/Flow/Index.svelte rename to frontend/legacy/Flow/Awaited.svelte index 615e03bd..479294c3 100644 --- a/frontend/Flow/Index.svelte +++ b/frontend/legacy/Flow/Awaited.svelte @@ -9,8 +9,8 @@ type CustomComponents, type FlowCustomData, type FlowProps, - } from '@modelscope-studio/compiled'; - import { get_fetchable_url_or_file } from '@modelscope-studio/shared'; + } from '@modelscope-studio/legacy-compiled'; + import { get_fetchable_url_or_file } from '@utils/upload'; import Flow from './shared/Flow.svelte'; import { type FlowData } from './shared/utils'; diff --git a/frontend/Flow/CHANGELOG.md b/frontend/legacy/Flow/CHANGELOG.md similarity index 68% rename from frontend/Flow/CHANGELOG.md rename to frontend/legacy/Flow/CHANGELOG.md index f32de657..53bb8756 100644 --- a/frontend/Flow/CHANGELOG.md +++ b/frontend/legacy/Flow/CHANGELOG.md @@ -1,4 +1,28 @@ -# @modelscope-studio/flow +# @modelscope-studio/legacy-flow + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! ## 0.5.2 diff --git a/frontend/legacy/Flow/Index.svelte b/frontend/legacy/Flow/Index.svelte new file mode 100644 index 00000000..ed37b002 --- /dev/null +++ b/frontend/legacy/Flow/Index.svelte @@ -0,0 +1,15 @@ + + + + +{#await AwaitedFlow then Flow} + + + +{/await} diff --git a/frontend/legacy/Flow/gradio.config.js b/frontend/legacy/Flow/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/Flow/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/legacy/Flow/package.json b/frontend/legacy/Flow/package.json new file mode 100644 index 00000000..17e97ef6 --- /dev/null +++ b/frontend/legacy/Flow/package.json @@ -0,0 +1,27 @@ +{ + "name": "@modelscope-studio/legacy-flow", + "version": "1.0.0-beta.3", + "private": false, + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "scripts": { + "build": "typescript-json-schema --skipLibCheck ./schema.ts FlowSchema > ./schema.json" + }, + "dependencies": { + "@modelscope-studio/legacy-compiled": "workspace:*" + }, + "devDependencies": {}, + "main_changeset": true +} diff --git a/frontend/Flow/schema.json b/frontend/legacy/Flow/schema.json similarity index 100% rename from frontend/Flow/schema.json rename to frontend/legacy/Flow/schema.json diff --git a/frontend/legacy/Flow/schema.ts b/frontend/legacy/Flow/schema.ts new file mode 100644 index 00000000..8b61b4ff --- /dev/null +++ b/frontend/legacy/Flow/schema.ts @@ -0,0 +1 @@ +export { FlowSchema } from '@modelscope-studio/legacy-compiled/src/Flow/type'; diff --git a/frontend/Flow/shared/Flow.svelte b/frontend/legacy/Flow/shared/Flow.svelte similarity index 96% rename from frontend/Flow/shared/Flow.svelte rename to frontend/legacy/Flow/shared/Flow.svelte index 599d0a7b..74f3bdd8 100644 --- a/frontend/Flow/shared/Flow.svelte +++ b/frontend/legacy/Flow/shared/Flow.svelte @@ -7,8 +7,8 @@ type FlowCustomData, type FlowProps, type UploadFile, - } from '@modelscope-studio/compiled'; - import { upload } from '@modelscope-studio/shared'; + } from '@modelscope-studio/legacy-compiled'; + import { upload } from '@utils/upload'; import { createEventDispatcher, getContext } from 'svelte'; import { type FlowData } from './utils'; diff --git a/frontend/Flow/shared/utils.ts b/frontend/legacy/Flow/shared/utils.ts similarity index 63% rename from frontend/Flow/shared/utils.ts rename to frontend/legacy/Flow/shared/utils.ts index a89ef822..565293b3 100644 --- a/frontend/Flow/shared/utils.ts +++ b/frontend/legacy/Flow/shared/utils.ts @@ -1,4 +1,4 @@ -import type { FlowRenderData } from '@modelscope-studio/compiled'; +import type { FlowRenderData } from '@modelscope-studio/legacy-compiled'; export interface FlowData { nodes?: NonNullable; diff --git a/frontend/legacy/Lifecycle/CHANGELOG.md b/frontend/legacy/Lifecycle/CHANGELOG.md new file mode 100644 index 00000000..9debc9fe --- /dev/null +++ b/frontend/legacy/Lifecycle/CHANGELOG.md @@ -0,0 +1,43 @@ +# @modelscope-studio/legacy-lifecycle + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 0.5.0 + +No significant changes to this package were made in this release. + +## 0.4.2 + +No significant changes to this package were made in this release. + +## 0.4.1 + +No significant changes to this package were made in this release. + +## 0.4.0 + +### Misc Changes + +- [#24](https://github.com/modelscope/modelscope-studio/pull/24) [`1b01a0b`](https://github.com/modelscope/modelscope-studio/commit/1b01a0b2e551d6afa26a9d8e6d34c2af2b92c57c) - add Lifecycle component. Thanks [@Col0ring](https://github.com/Col0ring)! diff --git a/frontend/legacy/Lifecycle/gradio.config.js b/frontend/legacy/Lifecycle/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/Lifecycle/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/Lifecycle/index.svelte b/frontend/legacy/Lifecycle/index.svelte similarity index 100% rename from frontend/Lifecycle/index.svelte rename to frontend/legacy/Lifecycle/index.svelte diff --git a/frontend/legacy/Lifecycle/package.json b/frontend/legacy/Lifecycle/package.json new file mode 100644 index 00000000..9ec85375 --- /dev/null +++ b/frontend/legacy/Lifecycle/package.json @@ -0,0 +1,22 @@ +{ + "name": "@modelscope-studio/legacy-lifecycle", + "version": "1.0.0-beta.3", + "private": false, + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "dependencies": {}, + "devDependencies": {}, + "main_changeset": true +} diff --git a/frontend/Lifecycle/shared/utils.ts b/frontend/legacy/Lifecycle/shared/utils.ts similarity index 100% rename from frontend/Lifecycle/shared/utils.ts rename to frontend/legacy/Lifecycle/shared/utils.ts diff --git a/frontend/Markdown/Index.svelte b/frontend/legacy/Markdown/Awaited.svelte similarity index 94% rename from frontend/Markdown/Index.svelte rename to frontend/legacy/Markdown/Awaited.svelte index 1419bf22..206d8663 100644 --- a/frontend/Markdown/Index.svelte +++ b/frontend/legacy/Markdown/Awaited.svelte @@ -7,8 +7,8 @@ CustomComponents, MarkdownCustomData, MarkdownProps, - } from '@modelscope-studio/compiled'; - import { gradio_version } from '@modelscope-studio/shared'; + } from '@modelscope-studio/legacy-compiled'; + import { gradio_version } from '@utils/upload'; import Markdown from './shared/Markdown.svelte'; @@ -32,13 +32,13 @@ // custom export let enable_latex: boolean; export let latex_single_dollar_delimiter: boolean; - export let latex_delimiters: MarkdownProps['latex_delimiters']; + export let latex_delimiters: MarkdownProps['latex_delimiters'] = []; export let enable_base64 = false; export let preview = true; export let custom_components: CustomComponents = {}; const redirect_src_url = (src: string): string => { const replaceStr = `${root}${proxy_url ? `/proxy=${proxy_url.endsWith('/') ? proxy_url.slice(0, -1) : proxy_url}` : ''}${gradio_version >= 5 ? '/gradio_api' : ''}/file=`; - return src.includes(replaceStr) + return src?.includes(replaceStr) ? src : src.replaceAll('/file=', replaceStr); }; diff --git a/frontend/Chatbot/CHANGELOG.md b/frontend/legacy/Markdown/CHANGELOG.md similarity index 66% rename from frontend/Chatbot/CHANGELOG.md rename to frontend/legacy/Markdown/CHANGELOG.md index b6f0f5e3..778274ab 100644 --- a/frontend/Chatbot/CHANGELOG.md +++ b/frontend/legacy/Markdown/CHANGELOG.md @@ -1,4 +1,28 @@ -# @modelscope-studio/chatbot +# @modelscope-studio/legacy-markdown + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! ## 0.5.2 @@ -55,7 +79,7 @@ No significant changes to this package were made in this release. ### Patch Changes - Updated dependencies [[`68400a3`](https://github.com/modelscope/modelscope-studio/commit/68400a366d5a8af9a8d14f51577d8db1ebdcceb3)]: - - @modelscope-studio/compiled@0.2.1 + - @modelscope-studio/legacy-compiled@0.2.1 ## 0.2.0 diff --git a/frontend/Markdown/Example.svelte b/frontend/legacy/Markdown/Example.svelte similarity index 89% rename from frontend/Markdown/Example.svelte rename to frontend/legacy/Markdown/Example.svelte index c8d6b0b1..faeb8f69 100644 --- a/frontend/Markdown/Example.svelte +++ b/frontend/legacy/Markdown/Example.svelte @@ -1,5 +1,8 @@ + +{#await AwaitedMarkdown then Markdown} + + + +{/await} diff --git a/frontend/legacy/Markdown/gradio.config.js b/frontend/legacy/Markdown/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/Markdown/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/legacy/Markdown/package.json b/frontend/legacy/Markdown/package.json new file mode 100644 index 00000000..210e089e --- /dev/null +++ b/frontend/legacy/Markdown/package.json @@ -0,0 +1,28 @@ +{ + "name": "@modelscope-studio/legacy-markdown", + "version": "1.0.0-beta.3", + "private": false, + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "type": "module", + "exports": { + "./example": { + "default": "./Example.svelte", + "gradio": "./Example.svelte" + }, + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "dependencies": { + "@modelscope-studio/legacy-compiled": "workspace:*" + }, + "devDependencies": {}, + "main_changeset": true +} diff --git a/frontend/Markdown/shared/Markdown.svelte b/frontend/legacy/Markdown/shared/Markdown.svelte similarity index 97% rename from frontend/Markdown/shared/Markdown.svelte rename to frontend/legacy/Markdown/shared/Markdown.svelte index a1b59fa3..41a2c165 100644 --- a/frontend/Markdown/shared/Markdown.svelte +++ b/frontend/legacy/Markdown/shared/Markdown.svelte @@ -4,7 +4,7 @@ Markdown, type MarkdownCustomData, type MarkdownProps, - } from '@modelscope-studio/compiled'; + } from '@modelscope-studio/legacy-compiled'; import { createEventDispatcher } from 'svelte'; export let elem_classes: string[] = []; diff --git a/frontend/MultimodalInput/Index.svelte b/frontend/legacy/MultimodalInput/Awaited.svelte similarity index 98% rename from frontend/MultimodalInput/Index.svelte rename to frontend/legacy/MultimodalInput/Awaited.svelte index ff9b6967..82a91f9b 100644 --- a/frontend/MultimodalInput/Index.svelte +++ b/frontend/legacy/MultimodalInput/Awaited.svelte @@ -15,7 +15,7 @@ import type { LoadingStatus } from '@gradio/statustracker'; import { StatusTracker } from '@gradio/statustracker'; import type { Gradio, SelectData } from '@gradio/utils'; - import { upload as gradio_upload } from '@modelscope-studio/shared'; + import { upload as gradio_upload } from '@utils/upload'; import { getContext } from 'svelte'; import AudioRecorder from './shared/AudioRecorder.svelte'; @@ -116,7 +116,7 @@ undefined )); return (val?.filter(Boolean) as FileData[]) || []; - } catch (error) { + } catch { return []; } finally { uploading = false; diff --git a/frontend/MultimodalInput/CHANGELOG.md b/frontend/legacy/MultimodalInput/CHANGELOG.md similarity index 67% rename from frontend/MultimodalInput/CHANGELOG.md rename to frontend/legacy/MultimodalInput/CHANGELOG.md index 31f363c6..d428d4d5 100644 --- a/frontend/MultimodalInput/CHANGELOG.md +++ b/frontend/legacy/MultimodalInput/CHANGELOG.md @@ -1,4 +1,28 @@ -# @modelscope-studio/multimodal-input +# @modelscope-studio/legacy-multimodal-input + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! ## 0.5.2 @@ -67,7 +91,7 @@ No significant changes to this package were made in this release. ### Patch Changes - Updated dependencies [[`68400a3`](https://github.com/modelscope/modelscope-studio/commit/68400a366d5a8af9a8d14f51577d8db1ebdcceb3)]: - - @modelscope-studio/compiled@0.2.1 + - @modelscope-studio/legacy-compiled@0.2.1 ## 0.2.0 diff --git a/frontend/MultimodalInput/Example.svelte b/frontend/legacy/MultimodalInput/Example.svelte similarity index 100% rename from frontend/MultimodalInput/Example.svelte rename to frontend/legacy/MultimodalInput/Example.svelte diff --git a/frontend/legacy/MultimodalInput/Index.svelte b/frontend/legacy/MultimodalInput/Index.svelte new file mode 100644 index 00000000..2a27f751 --- /dev/null +++ b/frontend/legacy/MultimodalInput/Index.svelte @@ -0,0 +1,17 @@ + + + + +{#await AwaitedMultimodalInput then MultimodalInput} + + + +{/await} diff --git a/frontend/legacy/MultimodalInput/gradio.config.js b/frontend/legacy/MultimodalInput/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/MultimodalInput/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/legacy/MultimodalInput/package.json b/frontend/legacy/MultimodalInput/package.json new file mode 100644 index 00000000..9ba4cc53 --- /dev/null +++ b/frontend/legacy/MultimodalInput/package.json @@ -0,0 +1,28 @@ +{ + "name": "@modelscope-studio/legacy-multimodal-input", + "version": "1.0.0-beta.3", + "private": false, + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "type": "module", + "exports": { + "./example": { + "default": "./Example.svelte", + "gradio": "./Example.svelte" + }, + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "dependencies": { + "@modelscope-studio/legacy-compiled": "workspace:*" + }, + "devDependencies": {}, + "main_changeset": true +} diff --git a/frontend/MultimodalInput/shared/AudioRecorder.svelte b/frontend/legacy/MultimodalInput/shared/AudioRecorder.svelte similarity index 100% rename from frontend/MultimodalInput/shared/AudioRecorder.svelte rename to frontend/legacy/MultimodalInput/shared/AudioRecorder.svelte diff --git a/frontend/MultimodalInput/shared/FilePreview.svelte b/frontend/legacy/MultimodalInput/shared/FilePreview.svelte similarity index 98% rename from frontend/MultimodalInput/shared/FilePreview.svelte rename to frontend/legacy/MultimodalInput/shared/FilePreview.svelte index 95333202..956aba89 100644 --- a/frontend/MultimodalInput/shared/FilePreview.svelte +++ b/frontend/legacy/MultimodalInput/shared/FilePreview.svelte @@ -2,7 +2,7 @@ import IconButton from '@gradio/atoms/src/IconButton.svelte'; import type { FileData } from '@gradio/client'; import type { I18nFormatter, SelectData } from '@gradio/utils'; - import { FileView } from '@modelscope-studio/compiled'; + import { FileView } from '@modelscope-studio/legacy-compiled'; import { createEventDispatcher } from 'svelte'; import Loader from './Loader.svelte'; diff --git a/frontend/MultimodalInput/shared/Input.svelte b/frontend/legacy/MultimodalInput/shared/Input.svelte similarity index 100% rename from frontend/MultimodalInput/shared/Input.svelte rename to frontend/legacy/MultimodalInput/shared/Input.svelte diff --git a/frontend/MultimodalInput/shared/Loader.svelte b/frontend/legacy/MultimodalInput/shared/Loader.svelte similarity index 100% rename from frontend/MultimodalInput/shared/Loader.svelte rename to frontend/legacy/MultimodalInput/shared/Loader.svelte diff --git a/frontend/MultimodalInput/shared/RemoveIcon.svelte b/frontend/legacy/MultimodalInput/shared/RemoveIcon.svelte similarity index 100% rename from frontend/MultimodalInput/shared/RemoveIcon.svelte rename to frontend/legacy/MultimodalInput/shared/RemoveIcon.svelte diff --git a/frontend/MultimodalInput/shared/SubmitButton.svelte b/frontend/legacy/MultimodalInput/shared/SubmitButton.svelte similarity index 100% rename from frontend/MultimodalInput/shared/SubmitButton.svelte rename to frontend/legacy/MultimodalInput/shared/SubmitButton.svelte diff --git a/frontend/MultimodalInput/shared/UploadButton.svelte b/frontend/legacy/MultimodalInput/shared/UploadButton.svelte similarity index 100% rename from frontend/MultimodalInput/shared/UploadButton.svelte rename to frontend/legacy/MultimodalInput/shared/UploadButton.svelte diff --git a/frontend/MultimodalInput/shared/UploadIcon.svelte b/frontend/legacy/MultimodalInput/shared/UploadIcon.svelte similarity index 100% rename from frontend/MultimodalInput/shared/UploadIcon.svelte rename to frontend/legacy/MultimodalInput/shared/UploadIcon.svelte diff --git a/frontend/MultimodalInput/shared/Webcam.svelte b/frontend/legacy/MultimodalInput/shared/Webcam.svelte similarity index 100% rename from frontend/MultimodalInput/shared/Webcam.svelte rename to frontend/legacy/MultimodalInput/shared/Webcam.svelte diff --git a/frontend/MultimodalInput/shared/context.ts b/frontend/legacy/MultimodalInput/shared/context.ts similarity index 100% rename from frontend/MultimodalInput/shared/context.ts rename to frontend/legacy/MultimodalInput/shared/context.ts diff --git a/frontend/MultimodalInput/shared/global.d.ts b/frontend/legacy/MultimodalInput/shared/global.d.ts similarity index 100% rename from frontend/MultimodalInput/shared/global.d.ts rename to frontend/legacy/MultimodalInput/shared/global.d.ts diff --git a/frontend/MultimodalInput/shared/utils.ts b/frontend/legacy/MultimodalInput/shared/utils.ts similarity index 100% rename from frontend/MultimodalInput/shared/utils.ts rename to frontend/legacy/MultimodalInput/shared/utils.ts diff --git a/frontend/legacy/WaterfallGallery/CHANGELOG.md b/frontend/legacy/WaterfallGallery/CHANGELOG.md new file mode 100644 index 00000000..84374802 --- /dev/null +++ b/frontend/legacy/WaterfallGallery/CHANGELOG.md @@ -0,0 +1,59 @@ +# @modelscope-studio/legacy-waterfall-gallery + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 0.5.0 + +No significant changes to this package were made in this release. + +## 0.4.2 + +No significant changes to this package were made in this release. + +## 0.4.1 + +No significant changes to this package were made in this release. + +## 0.4.0 + +No significant changes to this package were made in this release. + +## 0.3.1 + +No significant changes to this package were made in this release. + +## 0.3.0 + +### Features + +- [#20](https://github.com/modelscope/modelscope-studio/pull/20) [`9a5dd22`](https://github.com/modelscope/modelscope-studio/commit/9a5dd226ee117d6130baa87cacdf902546ad952a) - upload logic with new gradio version. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 0.2.1 + +No significant changes to this package were made in this release. + +## 0.2.0 + +No significant changes to this package were made in this release. diff --git a/frontend/WaterfallGallery/Index.svelte b/frontend/legacy/WaterfallGallery/Index.svelte similarity index 100% rename from frontend/WaterfallGallery/Index.svelte rename to frontend/legacy/WaterfallGallery/Index.svelte diff --git a/frontend/legacy/WaterfallGallery/gradio.config.js b/frontend/legacy/WaterfallGallery/gradio.config.js new file mode 100644 index 00000000..abd9137f --- /dev/null +++ b/frontend/legacy/WaterfallGallery/gradio.config.js @@ -0,0 +1,3 @@ +import config from '../../defineConfig.js'; + +export default config({ external: true }); diff --git a/frontend/legacy/WaterfallGallery/package.json b/frontend/legacy/WaterfallGallery/package.json new file mode 100644 index 00000000..46eefcb2 --- /dev/null +++ b/frontend/legacy/WaterfallGallery/package.json @@ -0,0 +1,20 @@ +{ + "name": "@modelscope-studio/legacy-waterfall-gallery", + "version": "1.0.0-beta.3", + "description": "ModelScope Gradio Components", + "repository": "git@github.com:modelscope/modelscope-studio.git", + "license": "Apache-2.0", + "author": "", + "type": "module", + "exports": { + ".": { + "default": "./Index.svelte", + "gradio": "./Index.svelte" + }, + "./package.json": { + "default": "./package.json", + "gradio": "./package.json" + } + }, + "main_changeset": true +} diff --git a/frontend/WaterfallGallery/shared/Dislike.svelte b/frontend/legacy/WaterfallGallery/shared/Dislike.svelte similarity index 100% rename from frontend/WaterfallGallery/shared/Dislike.svelte rename to frontend/legacy/WaterfallGallery/shared/Dislike.svelte diff --git a/frontend/WaterfallGallery/shared/Gallery.svelte b/frontend/legacy/WaterfallGallery/shared/Gallery.svelte similarity index 99% rename from frontend/WaterfallGallery/shared/Gallery.svelte rename to frontend/legacy/WaterfallGallery/shared/Gallery.svelte index 77913716..26705d93 100644 --- a/frontend/WaterfallGallery/shared/Gallery.svelte +++ b/frontend/legacy/WaterfallGallery/shared/Gallery.svelte @@ -11,7 +11,7 @@ SelectData, ShareData, } from '@gradio/utils'; - import { normalise_file } from '@modelscope-studio/shared'; + import { normalise_file } from '@utils/upload'; import { dequal } from 'dequal'; import { createEventDispatcher, onDestroy, tick } from 'svelte'; diff --git a/frontend/WaterfallGallery/shared/Image.svelte b/frontend/legacy/WaterfallGallery/shared/Image.svelte similarity index 100% rename from frontend/WaterfallGallery/shared/Image.svelte rename to frontend/legacy/WaterfallGallery/shared/Image.svelte diff --git a/frontend/WaterfallGallery/shared/Waterfall/createWaterfall.ts b/frontend/legacy/WaterfallGallery/shared/Waterfall/createWaterfall.ts similarity index 100% rename from frontend/WaterfallGallery/shared/Waterfall/createWaterfall.ts rename to frontend/legacy/WaterfallGallery/shared/Waterfall/createWaterfall.ts diff --git a/frontend/WaterfallGallery/shared/Waterfall/index.ts b/frontend/legacy/WaterfallGallery/shared/Waterfall/index.ts similarity index 100% rename from frontend/WaterfallGallery/shared/Waterfall/index.ts rename to frontend/legacy/WaterfallGallery/shared/Waterfall/index.ts diff --git a/frontend/WaterfallGallery/shared/Waterfall/layout.ts b/frontend/legacy/WaterfallGallery/shared/Waterfall/layout.ts similarity index 100% rename from frontend/WaterfallGallery/shared/Waterfall/layout.ts rename to frontend/legacy/WaterfallGallery/shared/Waterfall/layout.ts diff --git a/frontend/WaterfallGallery/shared/utils.ts b/frontend/legacy/WaterfallGallery/shared/utils.ts similarity index 100% rename from frontend/WaterfallGallery/shared/utils.ts rename to frontend/legacy/WaterfallGallery/shared/utils.ts diff --git a/frontend/compiled/CHANGELOG.md b/frontend/legacy/compiled/CHANGELOG.md similarity index 61% rename from frontend/compiled/CHANGELOG.md rename to frontend/legacy/compiled/CHANGELOG.md index e444ba15..b3fd9c93 100644 --- a/frontend/compiled/CHANGELOG.md +++ b/frontend/legacy/compiled/CHANGELOG.md @@ -1,4 +1,28 @@ -# @modelscope-studio/compiled +# @modelscope-studio/legacy-compiled + +## 1.0.0-beta.3 + +### Features + +- [`9f3c59c`](https://github.com/modelscope/modelscope-studio/commit/9f3c59c9c5a0bf8af3980588cb07a467323b1d17) - add new features. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.2 + +### Features + +- [`9e5da52`](https://github.com/modelscope/modelscope-studio/commit/9e5da52fc739c6862225192fecf95f6bfd7923ad) - complete components params in Python. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.1 + +### Features + +- [`025f728`](https://github.com/modelscope/modelscope-studio/commit/025f72825bdafbc60b4a09e577a363e43189bd1d) - migrate to gradio 5. Thanks [@Col0ring](https://github.com/Col0ring)! + +## 1.0.0-beta.0 + +### Features + +- [`4a46970`](https://github.com/modelscope/modelscope-studio/commit/4a46970007452af606abe02cdfa54a4959b2f3db) - integrate ant design. Thanks [@Col0ring](https://github.com/Col0ring)! ## 0.5.2 diff --git a/frontend/compiled/components/FileView/index.svelte b/frontend/legacy/compiled/components/FileView/index.svelte similarity index 100% rename from frontend/compiled/components/FileView/index.svelte rename to frontend/legacy/compiled/components/FileView/index.svelte diff --git a/frontend/compiled/components/FileView/shared/FileView.svelte b/frontend/legacy/compiled/components/FileView/shared/FileView.svelte similarity index 83% rename from frontend/compiled/components/FileView/shared/FileView.svelte rename to frontend/legacy/compiled/components/FileView/shared/FileView.svelte index d95e4d6f..f9cf9a88 100644 --- a/frontend/compiled/components/FileView/shared/FileView.svelte +++ b/frontend/legacy/compiled/components/FileView/shared/FileView.svelte @@ -1,5 +1,5 @@ + + + +{#if $$slots.default} + +{/if} + + diff --git a/frontend/svelte-preprocess-react/internal/types.ts b/frontend/svelte-preprocess-react/internal/types.ts new file mode 100644 index 00000000..73298829 --- /dev/null +++ b/frontend/svelte-preprocess-react/internal/types.ts @@ -0,0 +1,67 @@ +import type { ComponentClass, FunctionComponent } from 'react'; +import type { Readable } from 'svelte/store'; + +export type HandlerName = `on${Capitalize}`; +export type EventName = T extends `on${infer N}` + ? Uncapitalize + : never; + +export type SvelteEventHandlers = + T extends Record + ? Partial, (e: Value) => void | boolean>> + : never; + +type Uppercase = + | 'A' + | 'B' + | 'C' + | 'D' + | 'E' + | 'F' + | 'G' + | 'H' + | 'I' + | 'J' + | 'K' + | 'L' + | 'M' + | 'N' + | 'S' + | 'T' + | 'U' + | 'V' + | 'W' + | 'X' + | 'Y' + | 'Z'; + +type ReactEventProp = `on${Uppercase}${string}`; +type ExcludeProps = T extends ReactEventProp ? T : never; +type ExcludeEvents = T extends ReactEventProp ? never : T; + +export type EventProps = Omit< + ReactProps, + ExcludeEvents +>; +export type OmitEventProps = Omit< + ReactProps, + ExcludeProps +>; + +export type TreeNode = Omit & { + svelteInstance: Readable; + reactComponent: FunctionComponent | ComponentClass; + key: number; + nodes: TreeNode[]; +}; + +export type SvelteInit = { + parent?: TreeNode; + props: Readable>; + target: Readable; + slot: Readable; + slotKey: Readable | undefined; + slotIndex: Readable | undefined; + subSlotIndex: Readable | undefined; + onDestroy: (callback: () => void) => void; +}; diff --git a/frontend/svelte-preprocess-react/polyfills.ts b/frontend/svelte-preprocess-react/polyfills.ts new file mode 100644 index 00000000..f720760a --- /dev/null +++ b/frontend/svelte-preprocess-react/polyfills.ts @@ -0,0 +1,4 @@ +// Object.hasOwn +if (!Object.hasOwn) { + Object.hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key); +} diff --git a/frontend/svelte-preprocess-react/react-slot.tsx b/frontend/svelte-preprocess-react/react-slot.tsx new file mode 100644 index 00000000..ab7b114b --- /dev/null +++ b/frontend/svelte-preprocess-react/react-slot.tsx @@ -0,0 +1,183 @@ +import React, { forwardRef, useEffect, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; +import { styleObject2HtmlStyle } from '@utils/styleObject2String'; + +export interface ReactSlotProps { + slot: HTMLElement; + clone?: boolean; + style?: React.CSSProperties; + className?: string; +} + +function cloneElementWithEvents(element: HTMLElement) { + const portals: React.ReactPortal[] = []; + + const clonedElement = element.cloneNode(false) as HTMLElement; + + if (element._reactElement) { + portals.push( + createPortal( + React.cloneElement(element._reactElement, { + ...element._reactElement.props, + children: React.Children.toArray( + element._reactElement.props.children + ).map((child) => { + // get svelte-slot + if (React.isValidElement(child) && child.props.__slot__) { + const { + portals: childPortals, + clonedElement: childClonedElement, + } = cloneElementWithEvents(child.props.el); + // Child Component + return React.cloneElement(child, { + ...child.props, + el: childClonedElement, + children: [ + ...React.Children.toArray(child.props.children), + ...childPortals, + ], + }); + } + return null; + }), + }), + clonedElement + ) + ); + return { + clonedElement, + portals, + }; + } + // clone eventListener + Object.keys(element.getEventListeners()).forEach((eventName) => { + const listeners = element.getEventListeners( + eventName as keyof ElementEventMap + ); + listeners.forEach(({ listener, type, useCapture }) => { + clonedElement.addEventListener(type, listener, useCapture); + }); + }); + const elementsChildrenArray = Array.from(element.childNodes); + + for (let i = 0; i < elementsChildrenArray.length; i++) { + const child = elementsChildrenArray[i]; + // element + if (child.nodeType === 1) { + const { clonedElement: clonedChild, portals: portalsChildren } = + cloneElementWithEvents(child as HTMLElement); + portals.push(...portalsChildren); + clonedElement.appendChild(clonedChild); + // clonedElement.replaceChild(clonedChild, clonedElement.children[i]); + + // text + } else if (child.nodeType === 3) { + clonedElement.appendChild(child.cloneNode()); + } + } + + return { + clonedElement, + portals, + }; +} + +function mountElRef(elRef: React.ForwardedRef, el: HTMLElement) { + if (elRef) { + if (typeof elRef === 'function') { + elRef(el); + } else { + elRef.current = el; + } + } +} + +// eslint-disable-next-line react/display-name +export const ReactSlot = forwardRef( + ({ slot, clone, className, style }, elRef) => { + const ref = useRef(); + const [children, setChildren] = useState([]); + useEffect(() => { + if (!ref.current || !slot) { + return; + } + let cloned = slot; + + function mountElementProps() { + let child = cloned as Element; + if ( + cloned.tagName.toLowerCase() === 'svelte-slot' && + cloned.children.length === 1 && + cloned.children[0] + ) { + child = cloned.children[0]; + if ( + child.tagName.toLowerCase() === 'react-portal-target' && + child.children[0] + ) { + child = child.children[0]; + } + } + + mountElRef(elRef, child as HTMLElement); + + if (className) { + child.classList.add(...className.split(' ')); + } + if (style) { + const htmlStyle = styleObject2HtmlStyle(style); + + Object.keys(htmlStyle).forEach((key) => { + ((child as HTMLElement).style as any)[key] = htmlStyle[key]; + }); + } + } + let observer: MutationObserver | null = null; + if (clone && window.MutationObserver) { + function render() { + const { portals, clonedElement } = cloneElementWithEvents(slot); + cloned = clonedElement; + setChildren(portals); + cloned.style.display = 'contents'; + mountElementProps(); + ref.current?.appendChild(cloned); + } + render(); + observer = new window.MutationObserver(() => { + if (ref.current?.contains(cloned)) { + ref.current?.removeChild(cloned); + } + render(); + }); + observer.observe(slot, { + attributes: true, + childList: true, + subtree: true, + }); + } else { + cloned.style.display = 'contents'; + mountElementProps(); + ref.current?.appendChild(cloned); + } + + return () => { + cloned.style.display = ''; + + if (ref.current?.contains(cloned)) { + // eslint-disable-next-line react-hooks/exhaustive-deps + ref.current?.removeChild(cloned); + } + observer?.disconnect(); + }; + }, [slot, clone, className, style, elRef]); + + return React.createElement( + 'react-child', + { + ref, + style: { display: 'contents' }, + }, + ...children + ); + } +); diff --git a/frontend/svelte-preprocess-react/slot.ts b/frontend/svelte-preprocess-react/slot.ts new file mode 100644 index 00000000..91f1f911 --- /dev/null +++ b/frontend/svelte-preprocess-react/slot.ts @@ -0,0 +1,238 @@ +import { isUndefined } from 'lodash-es'; +import { getContext, setContext } from 'svelte'; +import { get, type Writable, writable } from 'svelte/store'; + +import { getComponentRestProps } from './component'; + +const slotsKey = '$$ms-gr-slots-key'; + +export function getSlots() { + const slots = writable({} as Record); + + return setContext(slotsKey, slots); +} + +export function getSetSlotFn() { + const slots = + (getContext(slotsKey) as Writable>) || + writable({}); + + return (prevSlot: string, slot: string, el: HTMLElement) => { + slots.update((v) => { + const newValue = { ...v }; + if (prevSlot) { + Reflect.deleteProperty(newValue, prevSlot); + } + return { ...newValue, [slot]: el }; + }); + }; +} + +const slotParamsKey = '$$ms-gr-render-slot-context-key'; + +export type SetSlotParams = ( + key: string, + params: any[] | ((prevValue: any[]) => any[]) +) => void; + +export function getSetSlotParamsFn(): SetSlotParams { + const slotParams = setContext( + slotParamsKey, + writable>({}) + ); + return (key, params) => { + slotParams.update((v) => { + if (typeof params === 'function') { + return { + ...v, + [key]: params(v[key]), + }; + } + return { + ...v, + [key]: params, + }; + }); + }; +} +export function getSlotParams() { + const slotParams = getContext(slotParamsKey) as + | Writable> + | undefined; + setContext(slotParamsKey, undefined); + return slotParams; +} + +const slotContextKey = '$$ms-gr-context-key'; +export function getSetSlotContextFn() { + const value = writable(); + setContext(slotContextKey, value); + return (v: any) => { + value.set(v); + }; +} + +function ensureObjectCtxValue(ctxValue: any) { + if (isUndefined(ctxValue)) { + return {}; + } + + return typeof ctxValue === 'object' && !Array.isArray(ctxValue) + ? ctxValue + : { value: ctxValue }; +} + +/** + * + * will run `resetSlotKey` inside + */ +export function getSlotContext< + T extends { + as_item?: string; + _internal: Record; + restProps?: Record; + }, +>( + props: T, + restPropsMapping?: Record, + options?: { + shouldRestSlotKey?: boolean; + } +): [ + Writable< + T & { + originalRestProps?: Record; + } + >, + (props: T) => void, +] { + const shouldRestSlotKey = options?.shouldRestSlotKey ?? true; + if (!Reflect.has(props, 'as_item') || !Reflect.has(props, '_internal')) { + throw new Error('`as_item` and `_internal` is required'); + } + const slotKey = getSlotKey(); + const componentSlotContext = setComponentSlotContext({ + slot: undefined, + index: props._internal.index, + subIndex: props._internal.subIndex, + }); + if (slotKey) { + slotKey.subscribe((v) => { + componentSlotContext.slotKey.set(v as string); + }); + } + // reset slot key to make sure the sub component does not be affected by gr.Slot() + if (shouldRestSlotKey) { + resetSlotKey(); + } + const ctx = getContext(slotContextKey) as Writable; + const as_item = get(ctx)?.as_item || props.as_item; + const initialCtxValue: Record = ensureObjectCtxValue( + ctx + ? as_item + ? (get(ctx)?.[as_item as keyof T] as Record) || {} + : get(ctx) || {} + : {} + ); + + const mergeRestProps = ( + restProps?: Record, + ctxValue?: Record + ) => { + return restProps + ? getComponentRestProps( + { + ...restProps, + ...(ctxValue || {}), + }, + restPropsMapping + ) + : undefined; + }; + const mergedProps = writable({ + ...props, + ...initialCtxValue, + restProps: mergeRestProps(props.restProps, initialCtxValue), + originalRestProps: props.restProps, + }); + if (!ctx) { + return [ + mergedProps, + (v) => { + mergedProps.set({ + ...v, + restProps: mergeRestProps(v.restProps), + originalRestProps: v.restProps, + }); + }, + ]; + } + ctx.subscribe((ctxValue) => { + const { as_item: merged_as_item } = get(mergedProps); + if (merged_as_item) { + ctxValue = (ctxValue as Record)?.[merged_as_item]; + } + ctxValue = ensureObjectCtxValue(ctxValue); + mergedProps.update((prev) => ({ + ...prev, + ...(ctxValue || {}), + restProps: mergeRestProps(prev.restProps, ctxValue), + })); + }); + + return [ + mergedProps, + (v) => { + const ctxValue: Record = ensureObjectCtxValue( + v.as_item + ? (get(ctx)?.[v.as_item as keyof T] as Record) || {} + : get(ctx) || {} + ); + return mergedProps.set({ + ...v, + ...ctxValue, + restProps: mergeRestProps(v.restProps, ctxValue), + originalRestProps: v.restProps, + }); + }, + ]; +} + +const slotKey = '$$ms-gr-slot-key'; + +export function resetSlotKey() { + setContext(slotKey, writable(undefined)); +} +export function setSlotKey(slot: string) { + return setContext(slotKey, writable(slot)); +} +export function getSlotKey() { + return getContext(slotKey) as Writable | undefined; +} + +const componentSlotContextKey = '$$ms-gr-component-slot-context-key'; + +export function setComponentSlotContext({ + slot, + index, + subIndex, +}: { + slot: string | undefined; + index: number | undefined; + subIndex: number | undefined; +}) { + return setContext(componentSlotContextKey, { + slotKey: writable(slot), + slotIndex: writable(index), + subSlotIndex: writable(subIndex), + }); +} +export function getComponentSlotContext() { + return getContext(componentSlotContextKey) as + | { + slotKey: Writable; + slotIndex: Writable; + subSlotIndex: Writable; + } + | undefined; +} diff --git a/frontend/svelte-preprocess-react/sveltify.ts b/frontend/svelte-preprocess-react/sveltify.ts new file mode 100644 index 00000000..7be19c09 --- /dev/null +++ b/frontend/svelte-preprocess-react/sveltify.ts @@ -0,0 +1,88 @@ +import type React from 'react'; +import { createPortal } from 'react-dom'; +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +import { SvelteComponent } from 'svelte'; +import { type Writable, writable } from 'svelte/store'; + +import ReactWrapper from './internal/ReactWrapper.svelte'; +import type { SvelteInit } from './internal/types'; + +export type Sveltified

> = { + new (args: { target: any; props?: P }): SvelteComponent

; +}; + +const rerender = window.ms_globals.rerender; +const tree = window.ms_globals.tree; + +type CommonProps = S extends [] + ? { + slots: {}; + elRef?: React.ForwardedRef; + style?: React.CSSProperties; + className?: string; + id?: string; + } + : { + slots: { + [P in S[number]]?: HTMLElement; + }; + elRef?: React.ForwardedRef; + style?: React.CSSProperties; + className?: string; + id?: string; + }; + +/** + * Convert a React component into a Svelte component. + */ +export function sveltify( + reactComponent: React.ComponentType

> +): + | Promise, 'children'>>> + | Sveltified, 'children'>> { + // svelte components options + function Sveltified(options: any) { + const svelteInstance: Writable = writable(); + const instance = new ReactWrapper({ + ...options, + props: { + svelteInit(init: SvelteInit) { + window.ms_globals.autokey += 1; + const node = { + key: window.ms_globals.autokey, + svelteInstance, + reactComponent, + props: init.props, + slot: init.slot, + target: init.target, + slotIndex: init.slotIndex, + subSlotIndex: init.subSlotIndex, + slotKey: init.slotKey, + nodes: [], + }; + // Here will be two trees on the page, one is the html view and the other is the React context. + const parent = init.parent ?? tree; + parent.nodes = [...parent.nodes, node]; + rerender({ createPortal, node: tree }); + init.onDestroy(() => { + parent.nodes = parent.nodes.filter( + (n) => n.svelteInstance !== svelteInstance + ); + rerender({ createPortal, node: tree }); + }); + return node; + }, + ...options.props, + }, + }); + svelteInstance.set(instance); + + return instance; + } + + return new Promise((resolve) => { + window.ms_globals.initializePromise.then(() => { + resolve(Sveltified as any); + }); + }); +} diff --git a/frontend/svelte-preprocess-react/useStore.ts b/frontend/svelte-preprocess-react/useStore.ts new file mode 100644 index 00000000..2e08f202 --- /dev/null +++ b/frontend/svelte-preprocess-react/useStore.ts @@ -0,0 +1,37 @@ +import { useEffect, useMemo, useState } from 'react'; +import { derived, get, type Readable } from 'svelte/store'; + +/** + * Hook for using Svelte stores in React. + * + * Usage: + * + * const User: React.FC = () => { + * const $user = useStore(userStore); + * return

Hello, {$user.name}

; + * } + */ +export function useStore(store: Readable): T { + const [value, setValue] = useState(() => get(store)); + useEffect(() => { + let first = true; + const cancel = store.subscribe((next) => { + if (first) { + first = false; + if (next === value) { + return; + } + } + setValue(next); + }); + return cancel; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [store]); + return value; +} + +export function useStores(stores: Readable[]): T[] { + const store = useMemo(() => derived(stores, ($stores) => $stores), [stores]); + return useStore(store); +} +export default useStore; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..81e4b4bb --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": ["../tsconfig.json"], + "compilerOptions": { + "module": "ESNext", + "types": ["vite/client"] + } +} diff --git a/frontend/utils/createFunction.ts b/frontend/utils/createFunction.ts new file mode 100644 index 00000000..379b27ca --- /dev/null +++ b/frontend/utils/createFunction.ts @@ -0,0 +1,11 @@ +export function createFunction any>( + target: any +): T | undefined { + try { + return typeof target == 'string' + ? (new Function(`return (...args) => (${target})(...args)`)() as T) + : undefined; + } catch { + return undefined; + } +} diff --git a/frontend/utils/createItemsContext.tsx b/frontend/utils/createItemsContext.tsx new file mode 100644 index 00000000..e91fce5a --- /dev/null +++ b/frontend/utils/createItemsContext.tsx @@ -0,0 +1,86 @@ +import { getContext, setContext } from 'svelte'; +import { type Writable, writable } from 'svelte/store'; + +export type Item = + | ({ + props: Record; + slots: Record< + string, + | HTMLElement + | { + el?: HTMLElement; + // slot key, render args + callback?: (key: string, params: any[]) => void; + clone?: boolean; + } + >; + el?: HTMLElement; + } & { + [K in T]?: Item[]; + }) + | undefined; + +export function createItemsContext(key: string) { + const itemKey = `$$ms-gr-${key}-context-key`; + function getItems( + allowedSlots: T = ['default'] as T + ): { + [key in T[number]]: Writable; + } { + const itemsMap = allowedSlots.reduce( + (acc, slotKey) => { + acc[slotKey as T[number]] = writable([] as V[]); + return acc; + }, + {} as { + [key in T[number]]: Writable; + } + ); + setContext(itemKey, { + itemsMap, + allowedSlots, + }); + return itemsMap; + } + + function getSetItemFn() { + const { itemsMap, allowedSlots } = getContext(itemKey) as { + itemsMap: Record>; + allowedSlots: string[]; + }; + + return function ( + slotKey: string | undefined, + index: number, + value: T + ) { + if (!itemsMap) { + return; + } + if (slotKey) { + itemsMap[slotKey].update((v) => { + const newValue = [...v]; + if (allowedSlots.includes(slotKey)) { + newValue[index] = value; + } else { + newValue[index] = undefined; + } + return newValue; + }); + } else { + if (allowedSlots.includes('default')) { + itemsMap['default'].update((v) => { + const newValue = [...v]; + newValue[index] = value; + return newValue; + }); + } + } + }; + } + + return { + getItems, + getSetItemFn, + }; +} diff --git a/frontend/utils/hooks/useFunction.ts b/frontend/utils/hooks/useFunction.ts new file mode 100644 index 00000000..030ec2fb --- /dev/null +++ b/frontend/utils/hooks/useFunction.ts @@ -0,0 +1,9 @@ +import { useMemo } from 'react'; + +import { createFunction } from '../createFunction'; + +export function useFunction any>(target: any) { + return useMemo(() => { + return createFunction(target); + }, [target]); +} diff --git a/frontend/utils/hooks/useSlotsChildren.ts b/frontend/utils/hooks/useSlotsChildren.ts new file mode 100644 index 00000000..7658c792 --- /dev/null +++ b/frontend/utils/hooks/useSlotsChildren.ts @@ -0,0 +1,23 @@ +import { type TreeNode } from '@svelte-preprocess-react'; +import React, { useMemo } from 'react'; + +export function useSlotsChildren( + children: React.ReactNode +): [slotsChildren: React.ReactNode[], restChildren: React.ReactNode[]] { + return useMemo(() => { + const array = React.Children.toArray(children) as React.ReactElement<{ + node: TreeNode; + nodeSlotKey?: string; + }>[]; + const slotsChildren: React.ReactNode[] = []; + const restChildren: React.ReactNode[] = []; + array.forEach((child) => { + if (child.props.node && child.props.nodeSlotKey) { + slotsChildren.push(child); + } else { + restChildren.push(child); + } + }); + return [slotsChildren, restChildren]; + }, [children]); +} diff --git a/frontend/utils/hooks/useTargets.ts b/frontend/utils/hooks/useTargets.ts new file mode 100644 index 00000000..a9392dc9 --- /dev/null +++ b/frontend/utils/hooks/useTargets.ts @@ -0,0 +1,43 @@ +import { type TreeNode, useStores } from '@svelte-preprocess-react'; +import React, { useMemo } from 'react'; +import { get, type Writable } from 'svelte/store'; + +export function useTargets(children: React.ReactNode, slotKey?: string) { + const $targets = useMemo(() => { + const array = React.Children.toArray(children); + return ( + array as React.ReactElement<{ + node: TreeNode; + nodeSlotKey?: string; + }>[] + ) + .filter((child) => { + return ( + child.props.node && + ((!slotKey && !child.props.nodeSlotKey) || + (slotKey && slotKey === child.props.nodeSlotKey)) + ); + }) + .sort((a, b) => { + if (a.props.node.slotIndex && b.props.node.slotIndex) { + const slotIndexA = get(a.props.node.slotIndex) || 0; + const slotIndexB = get(b.props.node.slotIndex) || 0; + if ( + slotIndexA - slotIndexB === 0 && + a.props.node.subSlotIndex && + b.props.node.subSlotIndex + ) { + return ( + (get(a.props.node.subSlotIndex) || 0) - + (get(b.props.node.subSlotIndex) || 0) + ); + } + return slotIndexA - slotIndexB; + } + return 0; + }) + .map((child) => child.props.node.target) as Writable[]; + }, [children, slotKey]); + const targets = useStores($targets); + return targets; +} diff --git a/frontend/utils/hooks/useValueChange.ts b/frontend/utils/hooks/useValueChange.ts new file mode 100644 index 00000000..0dacc936 --- /dev/null +++ b/frontend/utils/hooks/useValueChange.ts @@ -0,0 +1,28 @@ +import { useEffect, useRef, useState } from 'react'; + +export interface UseValueChangeProps { + value: T; + onValueChange: (value: P) => void; +} + +export function useValueChange({ + value, + onValueChange, +}: UseValueChangeProps) { + const [mergedValue, setMergedValue] = useState(value); + const onValueChangeRef = useRef(onValueChange); + onValueChangeRef.current = onValueChange; + const mergedValueRef = useRef(mergedValue); + mergedValueRef.current = mergedValue; + useEffect(() => { + onValueChangeRef.current(mergedValue as unknown as P); + }, [mergedValue]); + + useEffect(() => { + if (value !== mergedValueRef.current) { + setMergedValue(value); + } + }, [value]); + + return [mergedValue, setMergedValue] as const; +} diff --git a/frontend/utils/omitUndefinedProps.ts b/frontend/utils/omitUndefinedProps.ts new file mode 100644 index 00000000..16e3f625 --- /dev/null +++ b/frontend/utils/omitUndefinedProps.ts @@ -0,0 +1,10 @@ +export function omitUndefinedProps>( + props: T +): T { + return Object.keys(props).reduce((acc, key) => { + if (props[key] !== undefined) { + acc[key as keyof T] = props[key]; + } + return acc; + }, {} as T); +} diff --git a/frontend/utils/renderItems.tsx b/frontend/utils/renderItems.tsx new file mode 100644 index 00000000..a5f64aea --- /dev/null +++ b/frontend/utils/renderItems.tsx @@ -0,0 +1,79 @@ +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; + +import { type Item } from './createItemsContext'; + +export function renderItems( + items: Item[], + options?: { + children?: string; + fallback?: (item: any) => R; + clone?: boolean; + } +): R[] { + return items.filter(Boolean).map((item) => { + if (typeof item !== 'object') { + if (options?.fallback) { + return options.fallback(item); + } + return item; + } + const result = { + ...item.props, + }; + let current = result; + Object.keys(item.slots).forEach((slotKey) => { + if ( + !item.slots[slotKey] || + (!(item.slots[slotKey] instanceof Element) && !item.slots[slotKey].el) + ) { + return; + } + + const splits = slotKey.split('.'); + splits.forEach((split, index) => { + if (!current[split]) { + current[split] = {}; + } + if (index !== splits.length - 1) { + current = result[split]; + } + }); + const elOrObject = item.slots[slotKey]; + + let el: HTMLElement | undefined; + let callback: ((key: string, params: any[]) => void) | undefined; + let clone = false; + if (elOrObject instanceof Element) { + el = elOrObject; + } else { + el = elOrObject.el; + callback = elOrObject.callback; + clone = elOrObject.clone || false; + } + + current[splits[splits.length - 1]] = el ? ( + callback ? ( + (...args: any[]) => { + callback(splits[splits.length - 1], args); + return ; + } + ) : ( + + ) + ) : ( + current[splits[splits.length - 1]] + ); + + current = result; + }); + const childrenKey = options?.children || 'children'; + if (item[childrenKey as keyof typeof item]) { + result[childrenKey] = renderItems( + item[childrenKey as keyof typeof item] as Item[], + options + ); + } + return result as R; + }) as R[]; +} diff --git a/frontend/utils/renderParamsSlot.tsx b/frontend/utils/renderParamsSlot.tsx new file mode 100644 index 00000000..3ed74ea7 --- /dev/null +++ b/frontend/utils/renderParamsSlot.tsx @@ -0,0 +1,21 @@ +import type { SetSlotParams } from '@svelte-preprocess-react/slot'; + +import { renderSlot, type RenderSlotOptions } from './renderSlot'; + +export function renderParamsSlot( + { + key, + setSlotParams, + slots, + }: { + key: string; + setSlotParams: SetSlotParams; + slots: Record; + }, + options?: RenderSlotOptions +) { + return (...args: any[]) => { + setSlotParams(key, args); + return renderSlot(slots[key], { clone: true, ...options }); + }; +} diff --git a/frontend/utils/renderSlot.tsx b/frontend/utils/renderSlot.tsx new file mode 100644 index 00000000..80771d59 --- /dev/null +++ b/frontend/utils/renderSlot.tsx @@ -0,0 +1,10 @@ +import { ReactSlot } from '@svelte-preprocess-react/react-slot'; +import React from 'react'; + +export interface RenderSlotOptions { + clone?: boolean; +} + +export function renderSlot(el?: HTMLElement, options?: RenderSlotOptions) { + return el ? : null; +} diff --git a/frontend/utils/styleObject2String.ts b/frontend/utils/styleObject2String.ts new file mode 100644 index 00000000..a19284f9 --- /dev/null +++ b/frontend/utils/styleObject2String.ts @@ -0,0 +1,66 @@ +import type React from 'react'; + +const NO_UNIT_PROP = [ + 'animationIterationCount', + 'borderImageOutset', + 'borderImageSlice', + 'borderImageWidth', + 'boxFlex', + 'boxFlexGroup', + 'boxOrdinalGroup', + 'columnCount', + 'columns', + 'flex', + 'flexGrow', + 'flexPositive', + 'flexShrink', + 'flexNegative', + 'flexOrder', + 'gridArea', + 'gridColumn', + 'gridColumnEnd', + 'gridColumnStart', + 'gridRow', + 'gridRowEnd', + 'gridRowStart', + 'lineClamp', + 'lineHeight', + 'opacity', + 'order', + 'orphans', + 'tabSize', + 'widows', + 'zIndex', + 'zoom', + 'fontWeight', + 'letterSpacing', + 'lineHeight', +]; +export function styleObject2String(styleObj: React.CSSProperties) { + if (!styleObj) { + return ''; + } + return Object.entries(styleObj).reduce((acc, [propName, propValue]) => { + // Convert camelCase to kebab-case and add the value + acc += `${propName.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase()}: ${typeof propValue === 'number' && !NO_UNIT_PROP.includes(propName) ? propValue + 'px' : propValue};`; + return acc; + }, ''); +} + +export function styleObject2HtmlStyle(styleObj: React.CSSProperties) { + if (!styleObj) { + return {}; + } + return Object.keys(styleObj).reduce( + (acc, next) => { + const value = styleObj[next as keyof React.CSSProperties]; + if (typeof value === 'number' && !NO_UNIT_PROP.includes(next)) { + acc[next] = value + 'px'; + } else { + acc[next] = value; + } + return acc; + }, + {} as Record + ); +} diff --git a/frontend/shared/src/index.ts b/frontend/utils/upload.ts similarity index 100% rename from frontend/shared/src/index.ts rename to frontend/utils/upload.ts diff --git a/package.json b/package.json index e46c1f10..d01e1887 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,18 @@ { "name": "modelscope_studio", - "version": "0.5.2", + "version": "1.0.0-beta.3", "private": true, "description": "ModelScope Gradio Components", "repository": "git@github.com:modelscope/modelscope-studio.git", "license": "Apache-2.0", "scripts": { - "prepare": "husky || true", + "prepare": "husky", "dev": "gradio cc dev", - "dev:compiled": "pnpm -F '@modelscope-studio/compiled' dev", - "build:compiled": "pnpm -F '@modelscope-studio/compiled' build", - "build": "rimraf dist && pnpm run build:compiled && pnpm -F '@modelscope-studio/flow' build && gradio cc build --no-generate-docs", - "build:pure": "rimraf dist && gradio cc build --no-generate-docs", + "build": "rimraf dist && gradio cc build --no-generate-docs", "lint": "npm-run-all --parallel lint:* && npm run format", "format": "prettier --cache --write '**/*.{js,jsx,tsx,ts,svelte,less,md,yaml,yml,json}' --no-error-on-unmatched-pattern", "lint:js": "eslint . --fix --cache", - "lint:ts": "tsc", + "lint:ts": "tsc && svelte-check --tsconfig ./tsconfig.json", "lint:py": "flake8 . && isort . && yapf --in-place --recursive --exclude=node_modules/ .", "lint:style": "stylelint --allow-empty-input --cache --fix \"**/*.{less,css}\" ", "changeset": "changeset", @@ -26,29 +23,30 @@ "ci:version": "pnpm run version" }, "devDependencies": { - "@actions/core": "^1.10.1", + "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", "@actions/github": "^6.0.0", - "@changesets/cli": "^2.27.6", - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", - "@manypkg/get-packages": "^2.2.1", + "@changesets/cli": "^2.27.9", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", + "@manypkg/get-packages": "^2.2.2", "@modelscope-studio/changelog": "workspace:*", "@modelscope-studio/lint-config": "workspace:*", - "eslint": "^9.5.0", - "husky": "^9.0.11", - "lint-staged": "^15.2.7", + "eslint": "^9.12.0", + "husky": "^9.1.6", + "lint-staged": "^15.2.10", "node-fetch": "^3.3.2", "npm-run-all": "^4.1.5", - "prettier": "^3.3.2", - "prettier-plugin-packagejson": "^2.5.0", - "prettier-plugin-svelte": "^3.2.5", - "rimraf": "^5.0.7", - "stylelint": "^16.6.1", - "svelte": "^4.2.18", - "tslib": "^2.6.3", - "tsx": "^4.15.7", - "typescript": "^5.5.2" + "prettier": "^3.3.3", + "prettier-plugin-packagejson": "^2.5.3", + "prettier-plugin-svelte": "^3.2.7", + "rimraf": "^6.0.1", + "stylelint": "^16.9.0", + "svelte": "^4.2.19", + "svelte-check": "^4.0.4", + "tslib": "^2.7.0", + "tsx": "^4.19.1", + "typescript": "^5.6.3" }, "main_changeset": true } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c1ac197..8fe709b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@actions/core': - specifier: ^1.10.1 - version: 1.10.1 + specifier: ^1.11.1 + version: 1.11.1 '@actions/exec': specifier: ^1.1.1 version: 1.1.1 @@ -18,17 +18,17 @@ importers: specifier: ^6.0.0 version: 6.0.0 '@changesets/cli': - specifier: ^2.27.6 - version: 2.27.6 + specifier: ^2.27.9 + version: 2.27.9 '@commitlint/cli': - specifier: ^19.3.0 - version: 19.3.0(@types/node@20.14.9)(typescript@5.5.2) + specifier: ^19.5.0 + version: 19.5.0(@types/node@22.7.5)(typescript@5.6.3) '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.5.0 + version: 19.5.0 '@manypkg/get-packages': - specifier: ^2.2.1 - version: 2.2.1 + specifier: ^2.2.2 + version: 2.2.2 '@modelscope-studio/changelog': specifier: workspace:* version: link:config/changelog @@ -36,14 +36,14 @@ importers: specifier: workspace:* version: link:config/lint-config eslint: - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.12.0 + version: 9.12.0(jiti@2.3.3) husky: - specifier: ^9.0.11 - version: 9.0.11 + specifier: ^9.1.6 + version: 9.1.6 lint-staged: - specifier: ^15.2.7 - version: 15.2.7 + specifier: ^15.2.10 + version: 15.2.10 node-fetch: specifier: ^3.3.2 version: 3.3.2 @@ -51,32 +51,35 @@ importers: specifier: ^4.1.5 version: 4.1.5 prettier: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.3.3 + version: 3.3.3 prettier-plugin-packagejson: - specifier: ^2.5.0 - version: 2.5.0(prettier@3.3.2) + specifier: ^2.5.3 + version: 2.5.3(prettier@3.3.3) prettier-plugin-svelte: - specifier: ^3.2.5 - version: 3.2.5(prettier@3.3.2)(svelte@4.2.18) + specifier: ^3.2.7 + version: 3.2.7(prettier@3.3.3)(svelte@4.2.19) rimraf: - specifier: ^5.0.7 - version: 5.0.7 + specifier: ^6.0.1 + version: 6.0.1 stylelint: - specifier: ^16.6.1 - version: 16.6.1(typescript@5.5.2) + specifier: ^16.9.0 + version: 16.9.0(typescript@5.6.3) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: ^4.2.19 + version: 4.2.19 + svelte-check: + specifier: ^4.0.4 + version: 4.0.4(picomatch@4.0.2)(svelte@4.2.19)(typescript@5.6.3) tslib: - specifier: ^2.6.3 - version: 2.6.3 + specifier: ^2.7.0 + version: 2.7.0 tsx: - specifier: ^4.15.7 - version: 4.15.7 + specifier: ^4.19.1 + version: 4.19.1 typescript: - specifier: ^5.5.2 - version: 5.5.2 + specifier: ^5.6.3 + version: 5.6.3 config/changelog: dependencies: @@ -84,8 +87,8 @@ importers: specifier: ^0.6.0 version: 0.6.0 '@manypkg/get-packages': - specifier: ^2.2.1 - version: 2.2.1 + specifier: ^2.2.2 + version: 2.2.2 detect-indent: specifier: ^7.0.1 version: 7.0.1 @@ -94,62 +97,62 @@ importers: specifier: ^6.0.0 version: 6.0.0 '@types/node': - specifier: ^20.14.9 - version: 20.14.9 + specifier: ^22.7.5 + version: 22.7.5 tsup: - specifier: ^8.1.0 - version: 8.1.0(@microsoft/api-extractor@7.47.0(@types/node@20.14.9))(@swc/core@1.6.5)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2))(typescript@5.5.2) + specifier: ^8.3.0 + version: 8.3.0(@microsoft/api-extractor@7.47.9(@types/node@22.7.5))(@swc/core@1.7.26)(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.5.1) config/lint-config: dependencies: '@eslint/compat': - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.2.0 + version: 1.2.0(eslint@9.12.0(jiti@2.3.3)) '@eslint/js': - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.12.0 + version: 9.12.0 '@typescript-eslint/parser': - specifier: ^7.14.1 - version: 7.14.1(eslint@9.5.0)(typescript@5.5.2) + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) eslint-config-prettier: specifier: ^9.0.0 - version: 9.1.0(eslint@9.5.0) + version: 9.1.0(eslint@9.12.0(jiti@2.3.3)) eslint-import-resolver-typescript: specifier: ^3.6.0 - version: 3.6.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-plugin-import@2.29.1)(eslint@9.5.0) + version: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0) + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-jsx-a11y: specifier: ^6.9.0 - version: 6.9.0(eslint@9.5.0) + version: 6.10.0(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-prettier: - specifier: 5.1.3 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.5.0))(eslint@9.5.0)(prettier@3.3.2) + specifier: 5.2.1 + version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3) eslint-plugin-react: - specifier: ^7.34.3 - version: 7.34.3(eslint@9.5.0) + specifier: ^7.37.1 + version: 7.37.1(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-react-hooks: specifier: ^4.6.2 - version: 4.6.2(eslint@9.5.0) + version: 4.6.2(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-react-refresh: - specifier: ^0.4.7 - version: 0.4.7(eslint@9.5.0) + specifier: ^0.4.12 + version: 0.4.12(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-simple-import-sort: specifier: ^12.1.0 - version: 12.1.0(eslint@9.5.0) + version: 12.1.1(eslint@9.12.0(jiti@2.3.3)) eslint-plugin-svelte: - specifier: ^2.41.0 - version: 2.41.0(eslint@9.5.0)(svelte@4.2.18)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)) + specifier: ^2.44.1 + version: 2.44.1(eslint@9.12.0(jiti@2.3.3))(svelte@4.2.19)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3)) globals: - specifier: ^15.6.0 - version: 15.6.0 + specifier: ^15.11.0 + version: 15.11.0 postcss: - specifier: ^8.4.38 - version: 8.4.38 + specifier: ^8.4.47 + version: 8.4.47 postcss-less: specifier: ^6.0.0 - version: 6.0.0(postcss@8.4.38) + version: 6.0.0(postcss@8.4.47) stylelint-config-ali: specifier: ^2.1.1 version: 2.1.1(stylelint@9.10.1) @@ -166,240 +169,180 @@ importers: specifier: ^6.0.4 version: 6.0.4(stylelint@9.10.1) stylelint-prettier: - specifier: ^5.0.0 - version: 5.0.0(prettier@3.3.2)(stylelint@9.10.1) + specifier: ^5.0.2 + version: 5.0.2(prettier@3.3.3)(stylelint@9.10.1) svelte-eslint-parser: - specifier: ^0.39.2 - version: 0.39.2(svelte@4.2.18) + specifier: ^0.41.1 + version: 0.41.1(svelte@4.2.19) typescript-eslint: - specifier: ^7.14.1 - version: 7.14.1(eslint@9.5.0)(typescript@5.5.2) + specifier: ^8.8.1 + version: 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) devDependencies: '@types/eslint': - specifier: ^8.56.10 - version: 8.56.10 + specifier: ^9.6.1 + version: 9.6.1 '@types/eslint__js': specifier: ^8.42.3 version: 8.42.3 frontend: - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) - - frontend/Chatbot: dependencies: + '@ant-design/cssinjs': + specifier: ^1.21.1 + version: 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': + specifier: ^5.5.1 + version: 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@gradio/atoms': specifier: 0.7.4 - version: 0.7.4(svelte@4.2.18) + version: 0.7.4(svelte@4.2.19) + '@gradio/button': + specifier: ^0.2.43 + version: 0.2.43(svelte@4.2.19) '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 + specifier: ^1.6.0 + version: 1.6.0 '@gradio/icons': specifier: 0.4.1 version: 0.4.1 '@gradio/statustracker': - specifier: 0.6.0 - version: 0.6.0(svelte@4.2.18) + specifier: ^0.7.6 + version: 0.7.6(svelte@4.2.19) '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - '@modelscope-studio/compiled': - specifier: workspace:* - version: link:../compiled - '@modelscope-studio/shared': - specifier: workspace:* - version: link:../shared - dequal: - specifier: ^2.0.3 - version: 2.0.3 + specifier: 0.7.0 + version: 0.7.0(svelte@4.2.19) + antd: + specifier: ^5.21.3 + version: 5.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: + specifier: ^2.5.1 + version: 2.5.1 + dayjs: + specifier: ^1.11.12 + version: 1.11.13 + immer: + specifier: ^10.1.1 + version: 10.1.1 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + svelte: + specifier: ^4.2.19 + version: 4.2.19 + svelte-i18n: + specifier: ^4.0.0 + version: 4.0.0(svelte@4.2.19) + wavesurfer.js: + specifier: ^7.8.6 + version: 7.8.6 devDependencies: + '@babel/core': + specifier: ^7.25.7 + version: 7.25.7 '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) + specifier: 0.12.0 + version: 0.12.0(@babel/core@7.25.7)(@types/node@18.19.55)(less@4.2.0)(postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)))(postcss@8.4.47)(rollup@4.24.0) + '@gradio/upload': + specifier: 0.11.2 + version: 0.11.2(svelte@4.2.19) + '@types/babel__core': + specifier: ^7.20.5 + version: 7.20.5 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@vitejs/plugin-react-swc': + specifier: ^3.7.1 + version: 3.7.1(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))) + dequal: + specifier: ^2.0.2 + version: 2.0.3 + less: + specifier: ^4.2.0 + version: 4.2.0 + typescript-json-schema: + specifier: ^0.65.1 + version: 0.65.1(@swc/core@1.7.26) + vite: + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) + + frontend/antd: {} + + frontend/base: {} - frontend/Flow: + frontend/legacy/Chatbot: dependencies: - '@gradio/atoms': - specifier: 0.7.4 - version: 0.7.4(svelte@4.2.18) - '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 - '@gradio/icons': - specifier: 0.4.1 - version: 0.4.1 - '@gradio/statustracker': - specifier: 0.6.0 - version: 0.6.0(svelte@4.2.18) - '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - '@modelscope-studio/compiled': + '@modelscope-studio/legacy-compiled': specifier: workspace:* version: link:../compiled - '@modelscope-studio/shared': - specifier: workspace:* - version: link:../shared - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@16.18.101)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) - typescript-json-schema: - specifier: ^0.64.0 - version: 0.64.0(@swc/core@1.6.5) - - frontend/Lifecycle: - dependencies: - '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - svelte-i18n: - specifier: ^4.0.0 - version: 4.0.0(svelte@4.2.18) - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) - frontend/Markdown: + frontend/legacy/Flow: dependencies: - '@gradio/atoms': - specifier: 0.7.4 - version: 0.7.4(svelte@4.2.18) - '@gradio/statustracker': - specifier: 0.6.0 - version: 0.6.0(svelte@4.2.18) - '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - '@modelscope-studio/compiled': + '@modelscope-studio/legacy-compiled': specifier: workspace:* version: link:../compiled - '@modelscope-studio/shared': - specifier: workspace:* - version: link:../shared - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) - frontend/MultimodalInput: + frontend/legacy/Lifecycle: {} + + frontend/legacy/Markdown: dependencies: - '@gradio/atoms': - specifier: 0.7.4 - version: 0.7.4(svelte@4.2.18) - '@gradio/button': - specifier: ^0.2.43 - version: 0.2.43(svelte@4.2.18) - '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 - '@gradio/icons': - specifier: 0.4.1 - version: 0.4.1 - '@gradio/statustracker': - specifier: 0.6.0 - version: 0.6.0(svelte@4.2.18) - '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - '@modelscope-studio/compiled': + '@modelscope-studio/legacy-compiled': specifier: workspace:* version: link:../compiled - '@modelscope-studio/shared': - specifier: workspace:* - version: link:../shared - wavesurfer.js: - specifier: ^7.8.0 - version: 7.8.0 - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) - frontend/WaterfallGallery: + frontend/legacy/MultimodalInput: dependencies: - '@gradio/atoms': - specifier: 0.7.4 - version: 0.7.4(svelte@4.2.18) - '@gradio/button': - specifier: ^0.2.43 - version: 0.2.43(svelte@4.2.18) - '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 - '@gradio/icons': - specifier: 0.4.1 - version: 0.4.1 - '@gradio/statustracker': - specifier: 0.6.0 - version: 0.6.0(svelte@4.2.18) - '@gradio/upload': - specifier: 0.11.2 - version: 0.11.2(svelte@4.2.18) - '@gradio/utils': - specifier: 0.4.2 - version: 0.4.2(svelte@4.2.18) - '@modelscope-studio/shared': + '@modelscope-studio/legacy-compiled': specifier: workspace:* - version: link:../shared - dequal: - specifier: ^2.0.2 - version: 2.0.3 - devDependencies: - '@gradio/preview': - specifier: 0.9.1 - version: 0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18) + version: link:../compiled + + frontend/legacy/WaterfallGallery: {} - frontend/compiled: + frontend/legacy/compiled: dependencies: - '@ant-design/cssinjs': - specifier: ^1.21.0 - version: 1.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@ant-design/icons': - specifier: ^5.3.7 - version: 5.3.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 '@subscribe-kit/core': specifier: ^2.1.1 - version: 2.1.1(typescript@5.5.2) + version: 2.1.1(typescript@5.6.3) '@subscribe-kit/react': specifier: ^2.1.1 - version: 2.1.1(@subscribe-kit/core@2.1.1(typescript@5.5.2))(react@18.3.1)(typescript@5.5.2) + version: 2.1.1(@subscribe-kit/core@2.1.1(typescript@5.6.3))(react@18.3.1)(typescript@5.6.3) '@ungap/structured-clone': specifier: ^1.2.0 version: 1.2.0 '@xyflow/react': - specifier: 12.0.0-next.24 - version: 12.0.0-next.24(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 12.3.1 + version: 12.3.1(@types/react@18.3.11)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ajv: - specifier: ^8.16.0 - version: 8.16.0 + specifier: ^8.17.1 + version: 8.17.1 ajv-i18n: specifier: ^4.2.0 - version: 4.2.0(ajv@8.16.0) - antd: - specifier: ^5.18.3 - version: 5.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - classnames: - specifier: ^2.5.1 - version: 2.5.1 + version: 4.2.0(ajv@8.17.1) deepmerge: specifier: ^4.3.1 version: 4.3.1 echarts: - specifier: ^5.5.0 - version: 5.5.0 + specifier: ^5.5.1 + version: 5.5.1 elkjs: specifier: ^0.9.3 version: 0.9.3 github-markdown-css: - specifier: ^5.6.1 - version: 5.6.1 + specifier: ^5.7.0 + version: 5.7.0 github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -407,29 +350,20 @@ importers: specifier: ^9.0.0 version: 9.0.0 katex: - specifier: ^0.16.10 - version: 0.16.10 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^0.16.11 + version: 0.16.11 pdfjs-dist: specifier: ^3.11.174 version: 3.11.174 - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.3)(react@18.3.1) + version: 9.0.1(@types/react@18.3.11)(react@18.3.1) react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.3.1) rehype-katex: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -445,9 +379,6 @@ importers: remark-math: specifier: ^6.0.0 version: 6.0.0 - svelte-i18n: - specifier: ^4.0.0 - version: 4.0.0(svelte@4.2.18) unist-util-position: specifier: ^5.0.0 version: 5.0.0 @@ -455,53 +386,14 @@ importers: specifier: ^5.0.0 version: 5.0.0 devDependencies: - '@babel/core': - specifier: ^7.24.7 - version: 7.24.7 - '@babel/types': - specifier: ^7.24.7 - version: 7.24.7 - '@types/babel__core': - specifier: ^7.20.5 - version: 7.20.5 - '@types/lodash-es': - specifier: ^4.17.12 - version: 4.17.12 - '@types/react': - specifier: ^18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 '@types/react-syntax-highlighter': specifier: ^15.5.13 version: 15.5.13 - '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.0(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - less: - specifier: ^4.2.0 - version: 4.2.0 - vite: - specifier: ^5.3.1 - version: 5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - vite-plugin-dts: - specifier: ^3.9.1 - version: 3.9.1(@types/node@20.14.9)(rollup@4.18.0)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - vite-plugin-lib-inject-css: - specifier: ^2.1.1 - version: 2.1.1(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - - frontend/shared: - dependencies: - '@gradio/client': - specifier: 1.1.1 - version: 1.1.1 packages: - '@actions/core@1.10.1': - resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} + '@actions/core@1.11.1': + resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} '@actions/exec@1.1.1': resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==} @@ -512,6 +404,9 @@ packages: '@actions/http-client@2.2.1': resolution: {integrity: sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==} + '@actions/http-client@2.2.3': + resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} + '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} @@ -522,20 +417,30 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@ant-design/colors@7.0.2': - resolution: {integrity: sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==} + '@ant-design/colors@7.1.0': + resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==} - '@ant-design/cssinjs@1.21.0': - resolution: {integrity: sha512-gIilraPl+9EoKdYxnupxjHB/Q6IHNRjEXszKbDxZdsgv4sAZ9pjkCq8yanDWNvyfjp4leir2OVAJm0vxwKK8YA==} + '@ant-design/cssinjs-utils@1.1.0': + resolution: {integrity: sha512-E9nOWObXx7Dy7hdyuYlOFaer/LtPO7oyZVxZphh0CYEslr5EmhJPM3WI0Q2RBHRtYg6dSNqeSK73kvZjPN3IMQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@ant-design/cssinjs@1.21.1': + resolution: {integrity: sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + '@ant-design/icons-svg@4.4.2': resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - '@ant-design/icons@5.3.7': - resolution: {integrity: sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew==} + '@ant-design/icons@5.5.1': + resolution: {integrity: sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==} engines: {node: '>=8'} peerDependencies: react: '>=16.0.0' @@ -546,177 +451,108 @@ packages: peerDependencies: react: '>=16.9.0' - '@ast-grep/napi-darwin-arm64@0.22.3': - resolution: {integrity: sha512-BD2uyj9UVii04G6YivQArwoeUvOhMFU+MHw5kbLdc0IBncAru65qOg/I6D/ggEAZIgfyw8e2b6ch4ywbIhMnZw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@ast-grep/napi-darwin-x64@0.22.3': - resolution: {integrity: sha512-w0kw+YYAjDW6Q5EB4I+hSU4Ax9FVxVDlPeZi3h94pRIgNjRMD8SjG/aglNImzPOACDp3bZg8m26iMc9RbZaduQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@ast-grep/napi-linux-arm64-gnu@0.22.3': - resolution: {integrity: sha512-859+EcrYLhmCCsBcQZtP3frNXgdxjyAT2zSJ0/QWVweJ//ArlW+lUf+smmp/4KZeWSZglFNRj5EYvcwUPJj6JA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@ast-grep/napi-linux-x64-gnu@0.22.3': - resolution: {integrity: sha512-amc+61OeDXguX7ZV5V4JCmtPw4Thcr8zIvmnUozP3vFhO/QCql3t8rjxt2kifqPgoGbYIwW7sTIhtpA4CBxUbw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@ast-grep/napi-linux-x64-musl@0.22.3': - resolution: {integrity: sha512-GmG4D7HTg5gPD0LT27WsOIIsOHZazcZ8nIlylVVN27WrxhVchLU+3fnybchgANbx7ojnMce/xWhKgP29vrseIA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@ast-grep/napi-win32-arm64-msvc@0.22.3': - resolution: {integrity: sha512-mJAZdQwFwLtNON6pUbwTfrw6+iKelvBCZGd38TAPC0b3zapwdY7z7oVp8KfENy32eHh4OsBiGeN3CpsKaTeT5Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@ast-grep/napi-win32-ia32-msvc@0.22.3': - resolution: {integrity: sha512-hJLvg9gSYh+GjNIol8ukgOWYnfpo4sIT+D0ExOZU/KgFDwhrTXZK/gBOKyO1IefzBl9GOjrjvaKxp8TItewM7Q==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@ast-grep/napi-win32-x64-msvc@0.22.3': - resolution: {integrity: sha512-JnJctkkGmX6MX/aI6fJ2wK4fnPSftiqZ1fUsiPLWaBnnjvJe+ibvIByUp3sigZiStDEsjUdQ5KUDF2n9CVShyw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@ast-grep/napi@0.22.3': - resolution: {integrity: sha512-Viv/PQo4H6heDt0lQ6R0S8INpHhvmhm3MAXCBhMNZbsrrW8hdd9zxJ0rfSgv7jUFqRqRLCxA0crO2ObeMlySjQ==} - engines: {node: '>= 10'} - - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.23.5': resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.24.4': - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.5': - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@bundled-es-modules/cookie@2.0.0': @@ -725,54 +561,57 @@ packages: '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - '@changesets/apply-release-plan@7.0.3': - resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==} + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@changesets/assemble-release-plan@6.0.2': - resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==} + '@changesets/apply-release-plan@7.0.5': + resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} + + '@changesets/assemble-release-plan@6.0.4': + resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - '@changesets/cli@2.27.6': - resolution: {integrity: sha512-PB7KS5JkCQ4WSXlnfThn8CXAHVwYxFdZvYTimhi12fls/tzj9iimUhKsYwkrKSbw1AiVlGCZtihj5Wkt6siIjA==} + '@changesets/cli@2.27.9': + resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} hasBin: true - '@changesets/config@3.0.1': - resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==} + '@changesets/config@3.0.3': + resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.1.0': - resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==} + '@changesets/get-dependents-graph@2.1.2': + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.2': - resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==} + '@changesets/get-release-plan@4.0.4': + resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.0': - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@changesets/git@3.0.1': + resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} - '@changesets/logger@0.1.0': - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} '@changesets/parse@0.4.0': resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - '@changesets/pre@2.0.0': - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@changesets/pre@2.0.1': + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.6.0': - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/read@0.6.1': + resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} - '@changesets/should-skip-package@0.1.0': - resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} + '@changesets/should-skip-package@0.1.1': + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} @@ -780,104 +619,104 @@ packages: '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - '@changesets/write@0.3.1': - resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} + '@changesets/write@0.3.2': + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@commitlint/cli@19.3.0': - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + '@commitlint/cli@19.5.0': + resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.5.0': + resolution: {integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==} engines: {node: '>=v18'} - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} engines: {node: '>=v18'} - '@commitlint/ensure@19.0.3': - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} engines: {node: '>=v18'} - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} engines: {node: '>=v18'} - '@commitlint/format@19.3.0': - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.2.2': - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + '@commitlint/is-ignored@19.5.0': + resolution: {integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.5.0': + resolution: {integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==} engines: {node: '>=v18'} - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + '@commitlint/load@19.5.0': + resolution: {integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==} engines: {node: '>=v18'} - '@commitlint/message@19.0.0': - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} engines: {node: '>=v18'} - '@commitlint/parse@19.0.3': - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} engines: {node: '>=v18'} - '@commitlint/read@19.2.1': - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.5.0': + resolution: {integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.0.0': - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} engines: {node: '>=v18'} - '@commitlint/top-level@19.0.0': - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} engines: {node: '>=v18'} - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/css-parser-algorithms@2.6.3': - resolution: {integrity: sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-parser-algorithms@3.0.1': + resolution: {integrity: sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==} + engines: {node: '>=18'} peerDependencies: - '@csstools/css-tokenizer': ^2.3.1 + '@csstools/css-tokenizer': ^3.0.1 - '@csstools/css-tokenizer@2.3.1': - resolution: {integrity: sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-tokenizer@3.0.1': + resolution: {integrity: sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==} + engines: {node: '>=18'} - '@csstools/media-query-list-parser@2.1.11': - resolution: {integrity: sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/media-query-list-parser@3.0.1': + resolution: {integrity: sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==} + engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.3 - '@csstools/css-tokenizer': ^2.3.1 + '@csstools/css-parser-algorithms': ^3.0.1 + '@csstools/css-tokenizer': ^3.0.1 - '@csstools/selector-specificity@3.1.1': - resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/selector-specificity@4.0.0': + resolution: {integrity: sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==} + engines: {node: '>=18'} peerDependencies: - postcss-selector-parser: ^6.0.13 + postcss-selector-parser: ^6.1.0 '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} @@ -892,35 +731,23 @@ packages: '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - '@esbuild/aix-ppc64@0.19.10': - resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.10': - resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.19.12': resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} @@ -928,22 +755,16 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.10': - resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.19.12': @@ -952,22 +773,16 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.10': - resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.19.12': @@ -976,23 +791,17 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.10': - resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.19.12': resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} @@ -1000,22 +809,16 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.10': - resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.19.12': @@ -1024,23 +827,17 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.10': - resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.19.12': resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} @@ -1048,22 +845,16 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.10': - resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.19.12': @@ -1072,23 +863,17 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.10': - resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.19.12': resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} @@ -1096,22 +881,16 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.10': - resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.19.12': @@ -1120,22 +899,16 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.10': - resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.19.12': @@ -1144,15 +917,15 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1162,34 +935,22 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.19.10': - resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.19.12': resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.10': - resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.19.12': @@ -1198,22 +959,16 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.10': - resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.19.12': @@ -1222,22 +977,16 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.10': - resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.19.12': @@ -1246,22 +995,16 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.10': - resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.19.12': @@ -1270,22 +1013,16 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.10': - resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.19.12': @@ -1294,23 +1031,17 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.10': - resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} cpu: [x64] - os: [netbsd] + os: [linux] '@esbuild/netbsd-x64@0.19.12': resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} @@ -1318,22 +1049,22 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.19.10': - resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.19.12': @@ -1342,23 +1073,17 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.10': - resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] '@esbuild/sunos-x64@0.19.12': resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} @@ -1366,23 +1091,17 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.10': - resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.19.12': resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} @@ -1390,22 +1109,16 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.10': - resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.19.12': @@ -1414,22 +1127,16 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.10': - resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.19.12': @@ -1438,15 +1145,15 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1456,30 +1163,43 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.1': - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.1.0': - resolution: {integrity: sha512-s9Wi/p25+KbzxKlDm3VshQdImhWk+cbdblhwGNnyCU5lpSwtWa4v7VQCxSki0FAUrGA3s8nCWgYzAH41mwQVKQ==} + '@eslint/compat@1.2.0': + resolution: {integrity: sha512-CkPWddN7J9JPrQedEr2X7AjK9y1jaMJtxZ4A/+jTMFA2+n5BWhcKHW/EbJyARqg2zzQfgtWUtVmG3hrG6+nGpg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.16.0': - resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==} + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.5.0': - resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} + '@eslint/js@9.12.0': + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -1517,24 +1237,43 @@ packages: '@gradio/atoms@0.7.4': resolution: {integrity: sha512-tBla0kYmNjh+h1Azbi+sL5RteQ2mMl2GUWToMfbUirQY9P8CrAWBLVvSWMa8dkZ8AlJUZ11tfOzTHH3dSeaWIw==} + '@gradio/atoms@0.8.1': + resolution: {integrity: sha512-TkZlao8Ow+JzKRYeX/yWWv040+aUL8/CffN9Ag5FJ6KfyaUYBfGQ3jov0uRehrlsozYajhgwKRlZCHnpEBWdtQ==} + peerDependencies: + svelte: ^4.0.0 + '@gradio/button@0.2.43': resolution: {integrity: sha512-T+SGySDKKsIhIMDat6Pqdrwd9BhaEeXpukLjmH3F3mnegXjwENB7s3C0zsfyiq3+ox8HxcO2Bt/IRARDG+gN0g==} - '@gradio/client@1.1.1': - resolution: {integrity: sha512-6Hzc+/wmNRkodefp0bvfOBQbEakwg31Ye9IVOjfoHkvunHoIzjupM+1m7VwhQXt8pMCjOw8Hc7zhvwnwy6f5GQ==} + '@gradio/client@1.6.0': + resolution: {integrity: sha512-1258LcF45FFjGCjcn37zDZD1dRrsApTogc7fD9jlSBN8x61s0MPzz6LRCefD2DZ1Is3G+pRu7M6w6XrBNyVVmA==} engines: {node: '>=18.0.0'} '@gradio/icons@0.4.1': resolution: {integrity: sha512-gC6f6UENPsvoN189eqmzDpJzWBrJe4K6vmL6Tdzifq/iPRFh/zIwovXjdudpnJkTWwTci7EP/C9QtdEkTMlMvA==} - '@gradio/preview@0.9.1': - resolution: {integrity: sha512-XTtuYNkCmYE8B3t3K1WeUxQreg0EYUzeMIO1ZoXxaEdY6ZZOd7TPQ5rGHMH4daGo0yNCfCByAmmWWJ076oifzg==} + '@gradio/icons@0.7.2': + resolution: {integrity: sha512-+oRKr46PGC2qXOsPiqYCIzOR16soBqZQTmP6Ea46ZeHJuasUxbZ1DXsHmn6gEy+I/7CDNo/t6ux6lE7rJ8jDFg==} + peerDependencies: + svelte: ^4.0.0 + + '@gradio/preview@0.12.0': + resolution: {integrity: sha512-VXmqZxieNuOZiXTFX/Bo+hOwoBRyJH7UaVcgZo5Cy1bXz1LsNZ1+EWNJB4L01u5Ga7UwLdSLrTaVrhF+GGHZ6A==} + + '@gradio/statustracker@0.7.6': + resolution: {integrity: sha512-Cmx2wEWIYQVxxf0r8YAspJ9w0gbp4Q6SVFp26PZR/PYkxwvelJpzIJLyys20P7OX1NVXRTEaI5NrHLskmWo7BA==} + peerDependencies: + svelte: ^4.0.0 - '@gradio/statustracker@0.6.0': - resolution: {integrity: sha512-Y89/ieo2CqhRgJM9U0Fisi1qMb86ul3BC4C2SvGAQ7d7BXN9KQqb9GsbhaqmAz9sO9xDv7zhnG63OH59MXXPMw==} + '@gradio/theme@0.2.5': + resolution: {integrity: sha512-EQ8kMoYqtk3UM8EvxC5q8TCwwahGduasyMikgMwP78Y60oTAlO+JsuOXy/1CRh6nrCK8lA8/rCqrnrVLIGGmuw==} + peerDependencies: + svelte: ^4.0.0 - '@gradio/theme@0.2.3': - resolution: {integrity: sha512-JUgKTscUD0R8qktHNUzRIbfvB6HWzbRYP1vct1FmWWaXHJkyc/Ib+gp1ccKRIKutlLpF7J4gbo8gfOhSw43nHg==} + '@gradio/theme@0.3.0': + resolution: {integrity: sha512-PNguiOQFZO4Vim9446b2VRa0wO0ulkz9MUkDJXIdk7Cdx6HZQaqc5hErp/mlDV1scFKQbwTsG+9IzcClTnLXTg==} + peerDependencies: + svelte: ^4.0.0 '@gradio/upload@0.11.2': resolution: {integrity: sha512-8jf0qQDY+GqmNFWGKTlvqBqDuH3gI6u+ATqvvM71vjFS3B4iqmJimJnTx/BAKn3DYwPwbM7AhiczKky6NiznGw==} @@ -1542,31 +1281,49 @@ packages: '@gradio/utils@0.4.2': resolution: {integrity: sha512-n2aQWhZb4azPzx/yknm8SLDsAiXdeMrYQIFbHGe5aR34jnGcUkDCVheO8i+XliBEKRipbXgcDC4J0wbW93fKCQ==} + '@gradio/utils@0.6.1': + resolution: {integrity: sha512-2PdDaoAesz9CSjRBUfg0W0tQiY8YbdfO1tpdTQ2ODmxsoSyPcI/jxOKLUSmqfYsouQp7ao/ogRKoYOuN7F3L0Q==} + + '@gradio/utils@0.7.0': + resolution: {integrity: sha512-cPVt/oz+tdEQ3ya1XoDe7VBX+q4Z1KDI68FxmindW5BWHIfOEVNWZ+6KQTIZhrgl+k4kSHqpZjnahGyFpes9+w==} + '@gradio/wasm@0.10.1': resolution: {integrity: sha512-FC+apnc9zMSVS2NUouwS7imoS+o7Vhe+P3mJrTSgWksNsFDauWYkSyp2ZajqGPgexg8wRNCUKe7yteTz8gypbg==} + '@humanfs/core@0.19.0': + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.5': + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@inquirer/confirm@3.1.9': - resolution: {integrity: sha512-UF09aejxCi4Xqm6N/jJAiFXArXfi9al52AFaSD+2uIHnhZGtd1d6lIGTRMPouVSJxbGEi+HkOWSYaiEY/+szUw==} + '@inquirer/confirm@3.2.0': + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} engines: {node: '>=18'} - '@inquirer/core@8.2.2': - resolution: {integrity: sha512-K8SuNX45jEFlX3EBJpu9B+S2TISzMPGXZIuJ9ME924SqbdW6Pt6fIkKvXg7mOEOKJ4WxpQsxj0UTfcL/A434Ww==} + '@inquirer/figures@1.0.7': + resolution: {integrity: sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==} engines: {node: '>=18'} - '@inquirer/figures@1.0.3': - resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} engines: {node: '>=18'} - '@inquirer/type@1.3.3': - resolution: {integrity: sha512-xTUt0NulylX27/zMx04ZYar/kr1raaiFTVvQ5feljQsiAgdm0WPj4S73/ye0fbslh+15QrIuDvfCXTek7pMY5A==} + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} engines: {node: '>=18'} '@isaacs/cliui@8.0.2': @@ -1588,6 +1345,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1597,48 +1357,35 @@ packages: '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} - '@manypkg/find-root@2.2.1': - resolution: {integrity: sha512-34NlypD5mmTY65cFAK7QPgY5Tzt0qXR4ZRXdg97xAlkiLuwXUPBEXy5Hsqzd+7S2acsLxUz6Cs50rlDZQr4xUA==} + '@manypkg/find-root@2.2.3': + resolution: {integrity: sha512-jtEZKczWTueJYHjGpxU3KJQ08Gsrf4r6Q2GjmPp/RGk5leeYAA1eyDADSAF+KVCsQ6EwZd/FMcOFCoMhtqdCtQ==} engines: {node: '>=14.18.0'} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@manypkg/get-packages@2.2.1': - resolution: {integrity: sha512-TrJd86paBkKEx6InhObcUhuoJNcATlbO6+s1dQdLd4+Y1SLDKJUAMhU46kTZ1SOFbegTuhDbIF3j+Jy564BERA==} + '@manypkg/get-packages@2.2.2': + resolution: {integrity: sha512-3+Zd8kLZmsyJFmWTBtY0MAuCErI7yKB2cjMBlujvSVKZ2R/BMXi0kjCXu2dtRlSq/ML86t1FkumT0yreQ3n8OQ==} engines: {node: '>=14.18.0'} - '@manypkg/tools@1.1.0': - resolution: {integrity: sha512-SkAyKAByB9l93Slyg8AUHGuM2kjvWioUTCckT/03J09jYnfEzMO/wSXmEhnKGYs6qx9De8TH4yJCl0Y9lRgnyQ==} + '@manypkg/tools@1.1.2': + resolution: {integrity: sha512-3lBouSuF7CqlseLB+FKES0K4FQ02JrbEoRtJhxnsyB1s5v4AP03gsoohN8jp7DcOImhaR9scYdztq3/sLfk/qQ==} engines: {node: '>=14.18.0'} '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@microsoft/api-extractor-model@7.28.13': - resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} + '@microsoft/api-extractor-model@7.29.8': + resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==} - '@microsoft/api-extractor-model@7.29.2': - resolution: {integrity: sha512-hAYajOjQan3uslhKJRwvvHIdLJ+ZByKqdSsJ/dgHFxPtEbdKpzMDO8zuW4K5gkSMYl5D0LbNwxkhxr51P2zsmw==} - - '@microsoft/api-extractor@7.43.0': - resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} - hasBin: true - - '@microsoft/api-extractor@7.47.0': - resolution: {integrity: sha512-LT8yvcWNf76EpDC+8/ArTVSYePvuDQ+YbAUrsTcpg3ptiZ93HIcMCozP/JOxDt+rrsFfFHcpfoselKfPyRI0GQ==} + '@microsoft/api-extractor@7.47.9': + resolution: {integrity: sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==} hasBin: true - '@microsoft/tsdoc-config@0.16.2': - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - '@microsoft/tsdoc-config@0.17.0': resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} - '@microsoft/tsdoc@0.14.2': - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - '@microsoft/tsdoc@0.15.0': resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} @@ -1646,12 +1393,8 @@ packages: resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} engines: {node: '>=4'} - '@mswjs/cookies@1.1.0': - resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} - engines: {node: '>=18'} - - '@mswjs/interceptors@0.29.1': - resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} + '@mswjs/interceptors@0.35.9': + resolution: {integrity: sha512-SSnyl/4ni/2ViHKkiZb8eajA/eN1DNFaHjhGiLUdZvDz6PKF4COSf/17xqSz64nOo2Ia29SA6B2KNCsyCbVmaQ==} engines: {node: '>=18'} '@nodelib/fs.scandir@2.1.5': @@ -1670,6 +1413,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -1736,8 +1483,8 @@ packages: resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} engines: {node: '>=14.x'} - '@rc-component/color-picker@1.5.3': - resolution: {integrity: sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==} + '@rc-component/color-picker@2.0.1': + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -1766,15 +1513,22 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/tour@1.15.0': - resolution: {integrity: sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g==} + '@rc-component/qrcode@1.0.0': + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tour@1.15.1': + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - '@rc-component/trigger@2.2.0': - resolution: {integrity: sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA==} + '@rc-component/trigger@2.2.3': + resolution: {integrity: sha512-X1oFIpKoXAMXNDYCviOmTfuNuYxE4h5laBsyCqVAVMjNHxoF3/uiyA7XdegK1XbCvBbCZ6P6byWrEoDRpKL8+A==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -1789,8 +1543,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1798,126 +1552,190 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + '@rollup/rollup-android-arm-eabi@4.22.4': + resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + '@rollup/rollup-android-arm64@4.22.4': + resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.22.4': + resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + '@rollup/rollup-darwin-x64@4.22.4': + resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': + resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + '@rollup/rollup-linux-arm-musleabihf@4.22.4': + resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.22.4': + resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.22.4': + resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + '@rollup/rollup-linux-x64-gnu@4.22.4': + resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.22.4': + resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + '@rollup/rollup-win32-arm64-msvc@4.22.4': + resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} - cpu: [x64] + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + cpu: [ia32] os: [win32] - '@rushstack/node-core-library@4.0.2': - resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true + '@rollup/rollup-win32-x64-msvc@4.22.4': + resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==} + cpu: [x64] + os: [win32] - '@rushstack/node-core-library@5.4.1': - resolution: {integrity: sha512-WNnwdS8r9NZ/2K3u29tNoSRldscFa7SxU0RT+82B6Dy2I4Hl2MeCSKm4EXLXPKeNzLGvJ1cqbUhTLviSF8E6iA==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + cpu: [x64] + os: [win32] - '@rushstack/rig-package@0.5.2': - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/terminal@0.10.0': - resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + '@rushstack/node-core-library@5.9.0': + resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/terminal@0.13.0': - resolution: {integrity: sha512-Ou44Q2s81BqJu3dpYedAX54am9vn245F0HzqVrfJCMQk5pGgoKKOBOjkbfZC9QKcGNaECh6pwH2s5noJt7X6ew==} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + + '@rushstack/terminal@0.14.2': + resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.19.1': - resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} - - '@rushstack/ts-command-line@4.22.0': - resolution: {integrity: sha512-Qj28t6MO3HRgAZ72FDeFsrpdE6wBWxF3VENgvrXh7JF2qIT+CrXiOJIesW80VFZB9QwObSpkB1ilx794fGQg6g==} + '@rushstack/ts-command-line@4.22.8': + resolution: {integrity: sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==} '@subscribe-kit/core@2.1.1': resolution: {integrity: sha512-wMTlt9+fchK9DQ+KGiWgIcG/8F12zJ7ujwAADUKPz9CRtsjDMverLuZEv43777T2bp/aUHHT/ZUmhMK6rU65AA==} @@ -1939,144 +1757,75 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@sveltejs/vite-plugin-svelte@3.1.1': - resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==} + '@sveltejs/vite-plugin-svelte@3.1.2': + resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@swc/core-darwin-arm64@1.5.29': - resolution: {integrity: sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-arm64@1.6.5': - resolution: {integrity: sha512-RGQhMdni2v1/ANQ/2K+F+QYdzaucekYBewZcX1ogqJ8G5sbPaBdYdDN1qQ4kHLCIkPtGP6qC7c71qPEqL2RidQ==} + '@swc/core-darwin-arm64@1.7.26': + resolution: {integrity: sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.5.29': - resolution: {integrity: sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-darwin-x64@1.6.5': - resolution: {integrity: sha512-/pSN0/Jtcbbb9+ovS9rKxR3qertpFAM3OEJr/+Dh/8yy7jK5G5EFPIrfsw/7Q5987ERPIJIH6BspK2CBB2tgcg==} + '@swc/core-darwin-x64@1.7.26': + resolution: {integrity: sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.5.29': - resolution: {integrity: sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm-gnueabihf@1.6.5': - resolution: {integrity: sha512-B0g/dROCE747RRegs/jPHuKJgwXLracDhnqQa80kFdgWEMjlcb7OMCgs5OX86yJGRS4qcYbiMGD0Pp7Kbqn3yw==} + '@swc/core-linux-arm-gnueabihf@1.7.26': + resolution: {integrity: sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.5.29': - resolution: {integrity: sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.6.5': - resolution: {integrity: sha512-W8meapgXTq8AOtSvDG4yKR8ant2WWD++yOjgzAleB5VAC+oC+aa8YJROGxj8HepurU8kurqzcialwoMeq5SZZQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.5.29': - resolution: {integrity: sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==} + '@swc/core-linux-arm64-gnu@1.7.26': + resolution: {integrity: sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.5': - resolution: {integrity: sha512-jyCKqoX50Fg8rJUQqh4u5PqnE7nqYKXHjVH2WcYr114/MU21zlsI+YL6aOQU1XP8bJQ2gPQ1rnlnGJdEHiKS/w==} + '@swc/core-linux-arm64-musl@1.7.26': + resolution: {integrity: sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.5.29': - resolution: {integrity: sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.6.5': - resolution: {integrity: sha512-G6HmUn/RRIlXC0YYFfBz2qh6OZkHS/KUPkhoG4X9ADcgWXXjOFh6JrefwsYj8VBAJEnr5iewzjNfj+nztwHaeA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.5.29': - resolution: {integrity: sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==} + '@swc/core-linux-x64-gnu@1.7.26': + resolution: {integrity: sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.5': - resolution: {integrity: sha512-AQpBjBnelQDSbeTJA50AXdS6+CP66LsXIMNTwhPSgUfE7Bx1ggZV11Fsi4Q5SGcs6a8Qw1cuYKN57ZfZC5QOuA==} + '@swc/core-linux-x64-musl@1.7.26': + resolution: {integrity: sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.5.29': - resolution: {integrity: sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-arm64-msvc@1.6.5': - resolution: {integrity: sha512-MZTWM8kUwS30pVrtbzSGEXtek46aXNb/mT9D6rsS7NvOuv2w+qZhjR1rzf4LNbbn5f8VnR4Nac1WIOYZmfC5ng==} + '@swc/core-win32-arm64-msvc@1.7.26': + resolution: {integrity: sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.5.29': - resolution: {integrity: sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.6.5': - resolution: {integrity: sha512-WZdu4gISAr3yOm1fVwKhhk6+MrP7kVX0KMP7+ZQFTN5zXQEiDSDunEJKVgjMVj3vlR+6mnAqa/L0V9Qa8+zKlQ==} + '@swc/core-win32-ia32-msvc@1.7.26': + resolution: {integrity: sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.5.29': - resolution: {integrity: sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core-win32-x64-msvc@1.6.5': - resolution: {integrity: sha512-ezXgucnMTzlFIxQZw7ls/5r2hseFaRoDL04cuXUOs97E8r+nJSmFsRQm/ygH5jBeXNo59nyZCalrjJAjwfgACA==} + '@swc/core-win32-x64-msvc@1.7.26': + resolution: {integrity: sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.5.29': - resolution: {integrity: sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/core@1.6.5': - resolution: {integrity: sha512-tyVvUK/HDOUUsK6/GmWvnqUtD9oDpPUA4f7f7JCOV8hXxtfjMtAZeBKf93yrB1XZet69TDR7EN0hFC6i4MF0Ig==} + '@swc/core@1.7.26': + resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -2087,11 +1836,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.8': - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} - - '@swc/types@0.1.9': - resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -2135,11 +1881,11 @@ packages: '@types/d3-interpolate@3.0.4': resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - '@types/d3-selection@3.0.10': - resolution: {integrity: sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==} + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} - '@types/d3-transition@3.0.8': - resolution: {integrity: sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==} + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} '@types/d3-zoom@3.0.8': resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} @@ -2147,8 +1893,11 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/dompurify@3.0.5': + resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/eslint__js@8.42.3': resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} @@ -2159,6 +1908,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/eventsource@1.1.15': resolution: {integrity: sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==} @@ -2168,8 +1920,8 @@ packages: '@types/hast@2.3.9': resolution: {integrity: sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw==} - '@types/hast@3.0.3': - resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2201,17 +1953,17 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@16.18.101': - resolution: {integrity: sha512-AAsx9Rgz2IzG8KJ6tXd6ndNkVcu+GYB6U/SnFAaokSPNx2N7dcIIfnighYUNumvj6YS2q39Dejz5tT0NCV7CWA==} + '@types/node@18.19.55': + resolution: {integrity: sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==} - '@types/node@20.14.9': - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/path-browserify@1.0.2': - resolution: {integrity: sha512-ZkC5IUqqIFPXx3ASTTybTzmQdwHwe2C0u3eL75ldQ6T9E9IWFJodn6hIfbZGab73DfyiHN4Xw15gNxUq2FbvBA==} + '@types/path-browserify@1.0.3': + resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} @@ -2222,20 +1974,23 @@ packages: '@types/react-syntax-highlighter@15.5.13': resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/react@18.3.11': + resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@types/vfile-message@2.0.0': resolution: {integrity: sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==} @@ -2250,106 +2005,79 @@ packages: '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@typescript-eslint/eslint-plugin@7.14.1': - resolution: {integrity: sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.8.1': + resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.14.1': - resolution: {integrity: sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.8.1': + resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.14.1': - resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.8.1': + resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.14.1': - resolution: {integrity: sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.8.1': + resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/types@7.14.1': - resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.8.1': + resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@7.14.1': - resolution: {integrity: sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.8.1': + resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.14.1': - resolution: {integrity: sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.8.1': + resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@7.14.1': - resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.8.1': + resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitejs/plugin-react-swc@3.7.0': - resolution: {integrity: sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==} + '@vitejs/plugin-react-swc@3.7.1': + resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} peerDependencies: vite: ^4 || ^5 - '@volar/language-core@1.11.1': - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} - - '@volar/source-map@1.11.1': - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} - - '@volar/typescript@1.11.1': - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} - - '@vue/compiler-core@3.4.27': - resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} - - '@vue/compiler-dom@3.4.27': - resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==} - - '@vue/language-core@1.8.27': - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@vue/shared@3.4.27': - resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} - - '@xyflow/react@12.0.0-next.24': - resolution: {integrity: sha512-FwvTUG7AxThzD4Y1Cuc0OX0eErAFpn7tBNJbCrzcSffrqQw9H4ZnFj+SUDtmxQnAISqs40dTf8szrC8+x9zQPg==} + '@xyflow/react@12.3.1': + resolution: {integrity: sha512-PurYFxwzJa0U6RRX9k4VbNRU+vQd6mRKFR8Uk1dF81diCKZDj495y6AupqsjMHtkO66tGHV0LdenLpIHvnOEFw==} peerDependencies: react: '>=17' react-dom: '>=17' - '@xyflow/system@0.0.30': - resolution: {integrity: sha512-/Tq9w6QzvjlyGHW+AWoYE68vtyGS8sdp5CYgbs857pfl1ZdLNFQ4lxXvV4nFv+5z2aPp/y1iOgXLdZJT3aHX0g==} + '@xyflow/system@0.0.43': + resolution: {integrity: sha512-1zHgad1cWr1mKm2xbFaarK0Jg8WRgaQ8ubSBIo/pRdq3fEgCuqgNkL9NSAP6Rvm8zi3+Lu4JPUMN+EEx5QgX9A==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -2363,8 +2091,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@7.4.1: @@ -2372,13 +2100,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2416,8 +2139,8 @@ packages: ajv@8.13.0: resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -2427,9 +2150,9 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} @@ -2439,8 +2162,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -2455,8 +2178,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - antd@5.18.3: - resolution: {integrity: sha512-Dm3P8HBxoo/DiR/QZLj5Mk+rQZsSXxCCArSZACHGiklkkjW6klzlebAElOUr9NyDeFX7UnQ6LVk7vznXlnjTqQ==} + antd@5.21.3: + resolution: {integrity: sha512-Yby3gU6jfuvhNFRPsrHB4Yc/G3LHLNHHy0kShwNmmZf1QTCiW5TmqP3DT5m/NHbJsTgEwJpwo3AaOWo+KQyEjw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -2474,6 +2197,7 @@ packages: are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} + deprecated: This package is no longer supported. arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -2487,8 +2211,9 @@ packages: aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -2555,9 +2280,6 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -2577,8 +2299,8 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - assert-never@1.2.1: - resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + assert-never@1.3.0: + resolution: {integrity: sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ==} assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} @@ -2612,15 +2334,13 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} - axobject-query@3.1.1: - resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} - - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} babel-walk@3.0.0-canary-5: resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} @@ -2663,10 +2383,6 @@ packages: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2676,8 +2392,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2689,11 +2405,11 @@ packages: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} - bundle-require@4.2.1: - resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.17' + esbuild: '>=0.18' cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -2740,8 +2456,8 @@ packages: caniuse-lite@1.0.30001582: resolution: {integrity: sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg==} - caniuse-lite@1.0.30001632: - resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -2799,6 +2515,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -2817,21 +2537,13 @@ packages: classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cli-color@2.0.3: - resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} - engines: {node: '>=0.10'} - cli-color@2.0.4: resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} engines: {node: '>=0.10'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} @@ -2905,10 +2617,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -2918,12 +2626,13 @@ packages: compute-scroll-into-view@3.1.0: resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} - computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -3053,9 +2762,6 @@ packages: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} engines: {node: '>=12'} - d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} - d@1.0.2: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} @@ -3086,11 +2792,8 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} - - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -3108,17 +2811,8 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3245,6 +2939,9 @@ packages: domhandler@2.4.2: resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + dompurify@3.1.6: + resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + domutils@1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} @@ -3255,20 +2952,20 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - echarts@5.5.0: - resolution: {integrity: sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==} + echarts@5.5.1: + resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} electron-to-chromium@1.4.654: resolution: {integrity: sha512-hjfFa+Vj4WGLRVTlCQa+IivBkpcp+boGxMQfusOC/me5Y5NfU4wX7wyw+K9p8Cw4tl0BVIZGH2n7y/jMc3w4pg==} - electron-to-chromium@1.4.800: - resolution: {integrity: sha512-G8yyAReBP8m0XaW9BBH5NOJe4ZGYDDsPYkgLCG8xU6HwGKzrT0Jj51uAHkt1D+9ZxHPoGFSSZqqSN7HxAiP+0g==} + electron-to-chromium@1.5.35: + resolution: {integrity: sha512-hOSRInrIDm0Brzp4IHW2F/VM+638qOL2CzE0DgpnGzKW27C95IqqeqgKz/hxHGnvPxvQGpHUGD5qRVC9EZY2+A==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} @@ -3279,8 +2976,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -3301,6 +2998,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true @@ -3312,10 +3013,6 @@ packages: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} - es-abstract@1.23.2: - resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} - engines: {node: '>= 0.4'} - es-abstract@1.23.3: resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} @@ -3335,6 +3032,10 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} + es-iterator-helpers@1.1.0: + resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} + engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -3354,10 +3055,6 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} - engines: {node: '>=0.10'} - es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} @@ -3368,9 +3065,6 @@ packages: es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} - es6-symbol@3.1.4: resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} engines: {node: '>=0.12'} @@ -3503,30 +3197,29 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.19.10: - resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -3554,15 +3247,21 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + eslint-module-utils@2.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3582,8 +3281,8 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3603,24 +3302,24 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-jsx-a11y@6.9.0: - resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} engines: {node: '>=4.0'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3639,28 +3338,28 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.7: - resolution: {integrity: sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==} + eslint-plugin-react-refresh@0.4.12: + resolution: {integrity: sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==} peerDependencies: eslint: '>=7' - eslint-plugin-react@7.34.3: - resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} + eslint-plugin-react@7.37.1: + resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-simple-import-sort@12.1.0: - resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} + eslint-plugin-simple-import-sort@12.1.1: + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: eslint: '>=5.0.0' - eslint-plugin-svelte@2.41.0: - resolution: {integrity: sha512-gjU9Q/psxbWG1VNwYbEb0Q6U4W5PBGaDpYmO2zlQ+zlAMVS3Qt0luAK0ACi/tMSwRK6JENiySvMyJbO0YWmXSg==} + eslint-plugin-svelte@2.44.1: + resolution: {integrity: sha512-w6wkoJPw1FJKFtM/2oln21rlu5+HTd2CSkkzhm32A+trNoW2EYQqTQAbDTU6k2GI/6Vh64rBHYQejqEgDld7fw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.155 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 peerDependenciesMeta: svelte: optional: true @@ -3669,29 +3368,34 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + eslint-scope@8.1.0: + resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.1.0: + resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.5.0: - resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==} + eslint@9.12.0: + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true esniff@2.0.1: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.2.0: + resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -3703,8 +3407,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3799,16 +3503,35 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fdir@6.3.0: + resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fdir@6.4.0: + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -3824,18 +3547,14 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-entry-cache@9.0.0: - resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} + file-entry-cache@9.1.0: + resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==} engines: {node: '>=18'} fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -3856,9 +3575,6 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - flat-cache@2.0.1: resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} engines: {node: '>=4'} @@ -3884,14 +3600,14 @@ packages: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - foreground-child@3.2.0: resolution: {integrity: sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==} engines: {node: '>=14'} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -3937,6 +3653,7 @@ packages: gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} + deprecated: This package is no longer supported. gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -3981,11 +3698,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} @@ -3999,8 +3713,8 @@ packages: engines: {node: '>=16'} hasBin: true - github-markdown-css@5.6.1: - resolution: {integrity: sha512-DItLFgHd+s7HQmk63YN4/TdvLeRqk1QP7pPKTTPrDTYoI5x7f/luJWSOZxesmuxBI2srHp8RDyoZd+9WF+WK8Q==} + github-markdown-css@5.7.0: + resolution: {integrity: sha512-GoYhaqELL4YUjz4tZ00PQ4JzFQkMfrBVuEeRB8W74HoikHWNiaGqSgynpwJEc+xom5uf04qoD/tUSS6ziZltaQ==} engines: {node: '>=10'} github-slugger@2.0.0: @@ -4020,18 +3734,19 @@ packages: glob-to-regexp@0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} - glob@10.3.15: - resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true - glob@10.4.1: resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -4053,8 +3768,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.6.0: - resolution: {integrity: sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==} + globals@15.11.0: + resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} engines: {node: '>=18'} globalthis@1.0.3: @@ -4100,8 +3815,8 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.8.2: - resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} has-bigints@1.0.2: @@ -4160,10 +3875,6 @@ packages: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -4174,8 +3885,8 @@ packages: hast-util-from-html-isomorphic@2.0.0: resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.2: + resolution: {integrity: sha512-HwOHwxdt2zC5KQ/CNoybBntRook2zJvfZE/u5/Ap7aLPe22bDqen7KwGkOqOyzL5zIqKwiYX/OTtE0FWgr6XXA==} hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} @@ -4198,8 +3909,8 @@ packages: hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - hast-util-to-text@4.0.0: - resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -4213,10 +3924,6 @@ packages: hastscript@9.0.0: resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -4258,8 +3965,8 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + husky@9.1.6: + resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} engines: {node: '>=18'} hasBin: true @@ -4279,19 +3986,20 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true - immer@10.0.4: - resolution: {integrity: sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==} - immer@10.1.1: resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} - immutable@4.3.6: - resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} import-fresh@2.0.0: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} @@ -4309,8 +4017,8 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -4325,6 +4033,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4409,15 +4118,15 @@ packages: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-data-descriptor@1.0.1: @@ -4533,10 +4242,6 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -4662,16 +4367,24 @@ packages: iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} jackspeak@3.4.0: resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jackspeak@4.0.1: + resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + engines: {node: 20 || >=22} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + jiti@2.3.3: + resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} hasBin: true jju@1.4.0: @@ -4695,9 +4408,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -4744,8 +4457,8 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - katex@0.16.10: - resolution: {integrity: sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==} + katex@0.16.11: + resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true keyv@4.5.4: @@ -4773,15 +4486,9 @@ packages: known-css-properties@0.29.0: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} - known-css-properties@0.31.0: - resolution: {integrity: sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==} - known-css-properties@0.34.0: resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -4802,62 +4509,68 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.25.1: - resolution: {integrity: sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==} + lightningcss-darwin-arm64@1.27.0: + resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.25.1: - resolution: {integrity: sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==} + lightningcss-darwin-x64@1.27.0: + resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.25.1: - resolution: {integrity: sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==} + lightningcss-freebsd-x64@1.27.0: + resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.25.1: - resolution: {integrity: sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==} + lightningcss-linux-arm-gnueabihf@1.27.0: + resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.25.1: - resolution: {integrity: sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==} + lightningcss-linux-arm64-gnu@1.27.0: + resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.25.1: - resolution: {integrity: sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==} + lightningcss-linux-arm64-musl@1.27.0: + resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.25.1: - resolution: {integrity: sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==} + lightningcss-linux-x64-gnu@1.27.0: + resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.25.1: - resolution: {integrity: sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==} + lightningcss-linux-x64-musl@1.27.0: + resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-x64-msvc@1.25.1: - resolution: {integrity: sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==} + lightningcss-win32-arm64-msvc@1.27.0: + resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.27.0: + resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.25.1: - resolution: {integrity: sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==} + lightningcss@1.27.0: + resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -4871,13 +4584,13 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.7: - resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==} + lint-staged@15.2.10: + resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.1: - resolution: {integrity: sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==} + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} load-json-file@4.0.0: @@ -4888,10 +4601,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -4917,12 +4626,6 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -4960,8 +4663,8 @@ packages: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} engines: {node: '>=4'} - log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} longest-streak@2.0.4: @@ -4985,6 +4688,10 @@ packages: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} + lru-cache@11.0.1: + resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} + engines: {node: 20 || >=22} + lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -4998,8 +4705,8 @@ packages: lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -5100,9 +4807,6 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - memoizee@0.4.17: resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} engines: {node: '>=0.12'} @@ -5224,12 +4928,8 @@ packages: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime@1.6.0: @@ -5245,6 +4945,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} @@ -5253,14 +4957,18 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist-options@3.0.2: @@ -5310,25 +5018,19 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.3.1: - resolution: {integrity: sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig==} + msw@2.4.9: + resolution: {integrity: sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg==} engines: {node: '>=18'} hasBin: true peerDependencies: - typescript: '>= 4.7.x' + typescript: '>= 4.8.x' peerDependenciesMeta: typescript: optional: true - muggle-string@0.3.1: - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} - mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5379,13 +5081,16 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -5420,6 +5125,7 @@ packages: npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. num2fraction@1.2.2: resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} @@ -5467,10 +5173,6 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} @@ -5490,6 +5192,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -5501,8 +5207,8 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - outvariant@1.4.2: - resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} @@ -5552,6 +5258,12 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + package-manager-detector@0.2.2: + resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5628,8 +5340,12 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -5653,16 +5369,17 @@ packages: picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -5685,10 +5402,6 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} @@ -5731,16 +5444,22 @@ packages: ts-node: optional: true - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true postcss-markdown@0.36.0: @@ -5759,6 +5478,9 @@ packages: postcss-resolve-nested-selector@0.1.1: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + postcss-safe-parser@4.0.2: resolution: {integrity: sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==} engines: {node: '>=6.0.0'} @@ -5796,8 +5518,8 @@ packages: resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-sorting@4.1.0: @@ -5840,14 +5562,10 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - preferred-pm@3.1.3: - resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} - engines: {node: '>=10'} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5856,16 +5574,16 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier-plugin-packagejson@2.5.0: - resolution: {integrity: sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==} + prettier-plugin-packagejson@2.5.3: + resolution: {integrity: sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: prettier: optional: true - prettier-plugin-svelte@3.2.5: - resolution: {integrity: sha512-vP/M/Goc8z4iVIvrwXwbrYVjJgA0Hf8PO1G4LBh/ocSt6vUP6sLvyu9F3ABEGr+dbKyxZjEKLkeFsWy/yYl0HQ==} + prettier-plugin-svelte@3.2.7: + resolution: {integrity: sha512-/Dswx/ea0lV34If1eDcG3nulQ63YNr5KPDfMsjbdtpSWOxKKJ7nAc2qlVuYwEvCr4raIuredNoR7K4JCkmTGaQ==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 @@ -5875,8 +5593,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true @@ -5906,6 +5624,9 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + pug-attrs@3.0.0: resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} @@ -5946,10 +5667,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qrcode.react@3.1.0: - resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5958,8 +5677,8 @@ packages: resolution: {integrity: sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==} engines: {node: '>=4'} - rc-cascader@3.26.0: - resolution: {integrity: sha512-L1dml383TPSJD1I11YwxuVbmqaJY64psZqFp1ETlgl3LEOwDu76Cyl11fw5dmjJhMlUWwM5dECQfqJgfebhUjg==} + rc-cascader@3.28.1: + resolution: {integrity: sha512-9+8oHIMWVLHxuaapDiqFNmD9KSyKN/P4bo9x/MBuDbyTqP8f2/POmmZxdXWBO3yq/uE3pKyQCXYNUxrNfHRv2A==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5970,14 +5689,14 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-collapse@3.7.3: - resolution: {integrity: sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==} + rc-collapse@3.8.0: + resolution: {integrity: sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-dialog@9.5.2: - resolution: {integrity: sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw==} + rc-dialog@9.6.0: + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5994,51 +5713,51 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' - rc-field-form@2.2.1: - resolution: {integrity: sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA==} + rc-field-form@2.4.0: + resolution: {integrity: sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-image@7.9.0: - resolution: {integrity: sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g==} + rc-image@7.11.0: + resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-input-number@9.1.0: - resolution: {integrity: sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA==} + rc-input-number@9.2.0: + resolution: {integrity: sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-input@1.5.1: - resolution: {integrity: sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g==} + rc-input@1.6.3: + resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' - rc-mentions@2.14.0: - resolution: {integrity: sha512-qKR59FMuF8PK4ZqsbWX3UuA5P1M/snzyqV6Yt3y1DCFbCEdqUGIBgQp6vEfLCO6Z0RoRFlzXtCeSlBTcDDpg1A==} + rc-mentions@2.16.1: + resolution: {integrity: sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-menu@9.14.1: - resolution: {integrity: sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ==} + rc-menu@9.15.1: + resolution: {integrity: sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-motion@2.9.2: - resolution: {integrity: sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==} + rc-motion@2.9.3: + resolution: {integrity: sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-notification@5.6.0: - resolution: {integrity: sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w==} + rc-notification@5.6.2: + resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -6050,14 +5769,14 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-pagination@4.0.4: - resolution: {integrity: sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==} + rc-pagination@4.3.0: + resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-picker@4.5.0: - resolution: {integrity: sha512-suqz9bzuhBQlf7u+bZd1bJLPzhXpk12w6AjQ9BTPTiFwexVZgUKViG1KNLyfFvW6tCUZZK0HmCCX7JAyM+JnCg==} + rc-picker@4.6.15: + resolution: {integrity: sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==} engines: {node: '>=8.x'} peerDependencies: date-fns: '>= 2.x' @@ -6095,21 +5814,21 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-segmented@2.3.0: - resolution: {integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==} + rc-segmented@2.5.0: + resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' - rc-select@14.14.0: - resolution: {integrity: sha512-Uo2wulrjoPPRLCPd7zlK4ZFVJxlTN//yp1xWP/U+TUOQCyXrT+Duvq/Si5OzVcmQyWAUSbsplc2OwNNhvbOeKQ==} + rc-select@14.15.2: + resolution: {integrity: sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==} engines: {node: '>=8.x'} peerDependencies: react: '*' react-dom: '*' - rc-slider@10.6.2: - resolution: {integrity: sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==} + rc-slider@11.1.7: + resolution: {integrity: sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -6128,53 +5847,47 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-table@7.45.7: - resolution: {integrity: sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg==} + rc-table@7.47.5: + resolution: {integrity: sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-tabs@15.1.1: - resolution: {integrity: sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw==} + rc-tabs@15.3.0: + resolution: {integrity: sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-textarea@1.7.0: - resolution: {integrity: sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg==} + rc-textarea@1.8.2: + resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-tooltip@6.2.0: - resolution: {integrity: sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==} + rc-tooltip@6.2.1: + resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-tree-select@5.21.0: - resolution: {integrity: sha512-w+9qEu6zh0G3wt9N/hzWNSnqYH1i9mH1Nqxo0caxLRRFXF5yZWYmpCDoDTMdQM1Y4z3Q5yj08qyrPH/d4AtumA==} + rc-tree-select@5.23.0: + resolution: {integrity: sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==} peerDependencies: react: '*' react-dom: '*' - rc-tree@5.8.8: - resolution: {integrity: sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag==} + rc-tree@5.9.0: + resolution: {integrity: sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==} engines: {node: '>=10.x'} peerDependencies: react: '*' react-dom: '*' - rc-upload@4.5.2: - resolution: {integrity: sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - - rc-util@5.40.1: - resolution: {integrity: sha512-wsYjO59DpyyZdMe1yCSqHiHU8sWjkP1wIfj2mR0aHaNmFFgw727kkOFY7FBukg4rXhIw131549SLxQXQoIB73A==} + rc-upload@4.8.1: + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -6185,8 +5898,8 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - rc-virtual-list@3.14.3: - resolution: {integrity: sha512-6+6wiEhdqakNBnbRJymgMlh+90qpkgqherTRo1l1cX7mK6F9hWsazPczmP0lA+64yhC9/t+M9Dh5pjvDWimn8A==} + rc-virtual-list@3.14.8: + resolution: {integrity: sha512-8D0KfzpRYi6YZvlOWIxiOm9BGt4Wf2hQyEaM6RXlDDiY2NhLheuYI+RA+7ZaZj1lq+XQqy3KHlaeeXQfzI5fGg==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -6238,6 +5951,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + redent@2.0.0: resolution: {integrity: sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==} engines: {node: '>=4'} @@ -6264,8 +5981,12 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} - rehype-katex@7.0.0: - resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -6320,6 +6041,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} @@ -6342,9 +6066,6 @@ packages: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6353,9 +6074,9 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} @@ -6370,6 +6091,7 @@ packages: rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@2.7.1: @@ -6379,15 +6101,21 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.7: - resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} - engines: {node: '>=14.18'} + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rollup@4.22.4: + resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6419,8 +6147,8 @@ packages: safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} - safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} safer-buffer@2.1.2: @@ -6429,13 +6157,8 @@ packages: sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - sass@1.77.5: - resolution: {integrity: sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg==} - engines: {node: '>=14.0.0'} - hasBin: true - - sass@1.77.6: - resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==} + sass@1.79.4: + resolution: {integrity: sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==} engines: {node: '>=14.0.0'} hasBin: true @@ -6465,13 +6188,8 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -6584,12 +6302,12 @@ packages: sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - sort-package-json@2.10.0: - resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} + sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} hasBin: true - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-resolve@0.5.3: @@ -6689,8 +6407,8 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} string.prototype.includes@2.0.0: @@ -6704,6 +6422,9 @@ packages: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -6819,8 +6540,8 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 - stylelint-prettier@5.0.0: - resolution: {integrity: sha512-RHfSlRJIsaVg5Br94gZVdWlz/rBTyQzZflNE6dXvSxt/GthWMY3gEHsWZEBaVGg7GM+XrtVSp4RznFlB7i0oyw==} + stylelint-prettier@5.0.2: + resolution: {integrity: sha512-qJ+BN+1T2ZcKz9WIrv0x+eFGHzSUnXfXd5gL///T6XoJvr3D8/ztzz2fhtmXef7Vb8P33zBXmLTTveByr0nwBw==} engines: {node: '>=18.12.0'} peerDependencies: prettier: '>=3.0.0' @@ -6832,8 +6553,8 @@ packages: peerDependencies: stylelint: ^16.0.2 - stylelint@16.6.1: - resolution: {integrity: sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==} + stylelint@16.9.0: + resolution: {integrity: sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==} engines: {node: '>=18.12.0'} hasBin: true @@ -6842,8 +6563,8 @@ packages: engines: {node: '>=6'} hasBin: true - stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} stylus@0.63.0: resolution: {integrity: sha512-OMlgrTCPzE/ibtRMoeLVhOY0RcNuNWh0rhAVqeKnk/QwcuUKQbnqhZ1kg2vzD8VU/6h3FoPTq4RJPHgLBvX6Bw==} @@ -6875,19 +6596,27 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@3.0.0: - resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + supports-hyperlinks@3.1.0: + resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} engines: {node: '>=14.18'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-eslint-parser@0.39.2: - resolution: {integrity: sha512-87UwLuWTtDIuzWOhOi1zBL5wYVd07M5BK1qZ57YmXJB5/UmjUNJqGy3XSOhPqjckY1dATNV9y+mx+nI0WH6HPA==} + svelte-check@4.0.4: + resolution: {integrity: sha512-AcHWIPuZb1mh/jKoIrww0ebBPpAvwWd1bfXCnwC2dx4OkydNMaiG//+Xnry91RJMHFH7CiE+6Y2p332DRIaOXQ==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte-eslint-parser@0.41.1: + resolution: {integrity: sha512-08ndI6zTghzI8SuJAFpvMbA/haPSGn3xz19pjre19yYMw8Nw/wQJ2PrZBI/L8ijGTgtkWCQQiLLy+Z1tfaCwNA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.115 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 peerDependenciesMeta: svelte: optional: true @@ -6949,19 +6678,19 @@ packages: typescript: optional: true - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} + svelte@4.2.19: + resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} engines: {node: '>=16'} svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} - synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} table@5.4.6: @@ -7001,16 +6730,13 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throttle-debounce@5.0.0: - resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} - timers-ext@0.1.8: resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} engines: {node: '>=0.12'} @@ -7018,6 +6744,13 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + + tinyglobby@0.2.6: + resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + engines: {node: '>=12.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -7048,6 +6781,10 @@ packages: token-stream@1.0.0: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -7109,11 +6846,11 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsup@8.1.0: - resolution: {integrity: sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==} + tsup@8.3.0: + resolution: {integrity: sha512-ALscEeyS03IomcuNdFdc0YWGVIkwH1Ws7nfTbAPuoILvEV2hpGQAY72LIOjglGo4ShWpZfpBqP/jpQVCzqYQag==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7131,8 +6868,8 @@ packages: typescript: optional: true - tsx@4.15.7: - resolution: {integrity: sha512-u3H0iSFDZM3za+VxkZ1kywdCeHCn+8/qHQS1MNoO2sONDgD95HlWtt8aB23OzeTmFP9IU4/8bZUdg58Uu5J4cg==} + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} hasBin: true @@ -7148,16 +6885,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.20.0: - resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} - type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - - type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - type@2.7.3: resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} @@ -7197,23 +6928,17 @@ packages: peerDependencies: typescript: '>=4.5.0' - typescript-eslint@7.14.1: - resolution: {integrity: sha512-Eo1X+Y0JgGPspcANKjeR6nIqXl4VL5ldXLc15k4m9upq+eY5fhU2IueiEZL6jmHrKH8aCfbIvM/v3IrX5Hg99w==} - engines: {node: ^18.18.0 || >=20.0.0} + typescript-eslint@8.8.1: + resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - typescript-json-schema@0.64.0: - resolution: {integrity: sha512-Sew8llkYSzpxaMoGjpjD6NMFCr6DoWFHLs7Bz1LU48pzzi8ok8W+GZs9cG87IMBpC0UI7qwBMUI2um0LGxxLOg==} - hasBin: true - - typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} + typescript-json-schema@0.65.1: + resolution: {integrity: sha512-tuGH7ff2jPaUYi6as3lHyHcKpSmXIqN7/mu50x3HlYn0EHzLpmt3nplZ7EuhUkO0eqDRc9GqWNkfjgBPIS9kxg==} hasBin: true typescript@5.4.2: @@ -7221,13 +6946,13 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -7237,10 +6962,17 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.3: resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} engines: {node: '>=14.0'} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + unherit@1.1.3: resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} @@ -7307,6 +7039,10 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} @@ -7317,8 +7053,8 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -7330,8 +7066,11 @@ packages: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated - use-sync-external-store@1.2.0: - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7342,20 +7081,12 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - vfile-location@2.0.6: resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} @@ -7371,26 +7102,11 @@ packages: vfile@3.0.1: resolution: {integrity: sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==} - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - - vite-plugin-dts@3.9.1: - resolution: {integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - - vite-plugin-lib-inject-css@2.1.1: - resolution: {integrity: sha512-RIMeVnqBK/8I0E9nnQWzws6pdj5ilRMPJSnXYb6nWxNR4EmDPnksnb/ACoR5Fy7QfzULqS4gtQMrjwnNCC9zoA==} - peerDependencies: - vite: '*' + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.2.13: - resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7398,6 +7114,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -7410,33 +7127,7 @@ packages: optional: true sass: optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.3.1: - resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: + sass-embedded: optional: true stylus: optional: true @@ -7457,17 +7148,8 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} - - vue-tsc@1.8.27: - resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} - hasBin: true - peerDependencies: - typescript: '*' - - wavesurfer.js@7.8.0: - resolution: {integrity: sha512-V9SIfE08VtSIl1KYHi+i+52gytEIxk0nDKlV98fjrK0UW+z37ojImgsYINEV015syLB9sZVAXDdGI8F4xmU7KQ==} + wavesurfer.js@7.8.6: + resolution: {integrity: sha512-EDexkMwkkQBTWruhfWQRkTtvRggtKFTPuJX/oZ5wbIZEfyww9EBeLr2mtkxzA1S8TlWPx6adY5WyjOlNYNyHSg==} web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -7491,18 +7173,14 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} engines: {node: '>= 0.4'} which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - which-typed-array@1.1.13: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} @@ -7563,8 +7241,8 @@ packages: resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} engines: {node: '>=4'} - ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7599,8 +7277,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -7623,23 +7301,22 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + yootils@0.3.1: resolution: {integrity: sha512-A7AMeJfGefk317I/3tBoUYRcDcNavKEkpiPN/nQsBz/viI2GvT7BtrqdPD6rGqBFN8Ax7v4obf+Cl32JF9DDVw==} - z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true + zrender@5.6.0: + resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} - zrender@5.5.0: - resolution: {integrity: sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==} - - zustand@4.5.2: - resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' @@ -7658,10 +7335,10 @@ packages: snapshots: - '@actions/core@1.10.1': + '@actions/core@1.11.1': dependencies: - '@actions/http-client': 2.2.1 - uuid: 8.3.2 + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 '@actions/exec@1.1.1': dependencies: @@ -7679,6 +7356,11 @@ snapshots: tunnel: 0.0.6 undici: 5.28.3 + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.28.4 + '@actions/io@1.1.3': {} '@adobe/css-tools@4.3.3': {} @@ -7688,13 +7370,21 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@ant-design/colors@7.0.2': + '@ant-design/colors@7.1.0': dependencies: '@ctrl/tinycolor': 3.6.1 - '@ant-design/cssinjs@1.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@ant-design/cssinjs-utils@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/cssinjs@1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.6 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 @@ -7702,231 +7392,179 @@ snapshots: rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - stylis: 4.3.2 + stylis: 4.3.4 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.25.7 '@ant-design/icons-svg@4.4.2': {} - '@ant-design/icons@5.3.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@ant-design/colors': 7.0.2 + '@ant-design/colors': 7.1.0 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.6 classnames: 2.5.1 - rc-util: 5.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@ant-design/react-slick@1.1.2(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 json2mq: 0.2.0 react: 18.3.1 resize-observer-polyfill: 1.5.1 - throttle-debounce: 5.0.0 - - '@ast-grep/napi-darwin-arm64@0.22.3': - optional: true - - '@ast-grep/napi-darwin-x64@0.22.3': - optional: true - - '@ast-grep/napi-linux-arm64-gnu@0.22.3': - optional: true - - '@ast-grep/napi-linux-x64-gnu@0.22.3': - optional: true - - '@ast-grep/napi-linux-x64-musl@0.22.3': - optional: true - - '@ast-grep/napi-win32-arm64-msvc@0.22.3': - optional: true - - '@ast-grep/napi-win32-ia32-msvc@0.22.3': - optional: true - - '@ast-grep/napi-win32-x64-msvc@0.22.3': - optional: true - - '@ast-grep/napi@0.22.3': - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.22.3 - '@ast-grep/napi-darwin-x64': 0.22.3 - '@ast-grep/napi-linux-arm64-gnu': 0.22.3 - '@ast-grep/napi-linux-x64-gnu': 0.22.3 - '@ast-grep/napi-linux-x64-musl': 0.22.3 - '@ast-grep/napi-win32-arm64-msvc': 0.22.3 - '@ast-grep/napi-win32-ia32-msvc': 0.22.3 - '@ast-grep/napi-win32-x64-msvc': 0.22.3 - - '@babel/code-frame@7.24.2': - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.1 + throttle-debounce: 5.0.2 '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.1.0 + + '@babel/code-frame@7.25.7': + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.25.7': {} - '@babel/core@7.24.7': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.7': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-string-parser@7.25.7': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/helper-validator-option@7.25.7': {} - '@babel/highlight@7.24.2': + '@babel/helpers@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.23.5': - dependencies: - '@babel/types': 7.24.7 + picocolors: 1.1.0 - '@babel/parser@7.24.5': + '@babel/highlight@7.25.7': dependencies: - '@babel/types': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 - '@babel/parser@7.24.7': + '@babel/parser@7.23.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 - '@babel/runtime@7.24.4': + '@babel/parser@7.25.7': dependencies: - regenerator-runtime: 0.14.1 + '@babel/types': 7.25.7 - '@babel/runtime@7.24.5': + '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.24.7': + '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - '@babel/traverse@7.24.7': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.25.6': dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.25.7': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + '@bundled-es-modules/cookie@2.0.0': dependencies: cookie: 0.5.0 @@ -7935,13 +7573,17 @@ snapshots: dependencies: statuses: 2.0.1 - '@changesets/apply-release-plan@7.0.3': + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@changesets/apply-release-plan@7.0.5': dependencies: - '@babel/runtime': 7.24.7 - '@changesets/config': 3.0.1 + '@changesets/config': 3.0.3 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.0 - '@changesets/should-skip-package': 0.1.0 + '@changesets/git': 3.0.1 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 @@ -7950,78 +7592,72 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.2': + '@changesets/assemble-release-plan@6.0.4': dependencies: - '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/should-skip-package': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.2 + semver: 7.6.3 '@changesets/changelog-git@0.2.0': dependencies: '@changesets/types': 6.0.0 - '@changesets/cli@2.27.6': + '@changesets/cli@2.27.9': dependencies: - '@babel/runtime': 7.24.7 - '@changesets/apply-release-plan': 7.0.3 - '@changesets/assemble-release-plan': 6.0.2 + '@changesets/apply-release-plan': 7.0.5 + '@changesets/assemble-release-plan': 6.0.4 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.1 + '@changesets/config': 3.0.3 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/get-release-plan': 4.0.2 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 - '@changesets/should-skip-package': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.4 + '@changesets/git': 3.0.1 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.1 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 - '@changesets/write': 0.3.1 + '@changesets/write': 0.3.2 '@manypkg/get-packages': 1.1.3 - '@types/semver': 7.5.8 ansi-colors: 4.1.3 - chalk: 2.4.2 ci-info: 3.9.0 enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 mri: 1.2.0 - outdent: 0.5.0 p-limit: 2.3.0 - preferred-pm: 3.1.3 + package-manager-detector: 0.2.2 + picocolors: 1.1.0 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.6.3 spawndamnit: 2.0.0 term-size: 2.2.1 - '@changesets/config@3.0.1': + '@changesets/config@3.0.3': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/logger': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - micromatch: 4.0.7 + micromatch: 4.0.8 '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.0': + '@changesets/get-dependents-graph@2.1.2': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 7.6.2 + picocolors: 1.1.0 + semver: 7.6.3 '@changesets/get-github-info@0.6.0': dependencies: @@ -8030,59 +7666,53 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.2': + '@changesets/get-release-plan@4.0.4': dependencies: - '@babel/runtime': 7.24.7 - '@changesets/assemble-release-plan': 6.0.2 - '@changesets/config': 3.0.1 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 + '@changesets/assemble-release-plan': 6.0.4 + '@changesets/config': 3.0.3 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.0': + '@changesets/git@3.0.1': dependencies: - '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 - micromatch: 4.0.7 + micromatch: 4.0.8 spawndamnit: 2.0.0 - '@changesets/logger@0.1.0': + '@changesets/logger@0.1.1': dependencies: - chalk: 2.4.2 + picocolors: 1.1.0 '@changesets/parse@0.4.0': dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.0': + '@changesets/pre@2.0.1': dependencies: - '@babel/runtime': 7.24.7 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.0': + '@changesets/read@0.6.1': dependencies: - '@babel/runtime': 7.24.7 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 + '@changesets/git': 3.0.1 + '@changesets/logger': 0.1.1 '@changesets/parse': 0.4.0 '@changesets/types': 6.0.0 - chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 + picocolors: 1.1.0 - '@changesets/should-skip-package@0.1.0': + '@changesets/should-skip-package@0.1.1': dependencies: - '@babel/runtime': 7.24.7 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -8090,74 +7720,73 @@ snapshots: '@changesets/types@6.0.0': {} - '@changesets/write@0.3.1': + '@changesets/write@0.3.2': dependencies: - '@babel/runtime': 7.24.7 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 - '@commitlint/cli@19.3.0(@types/node@20.14.9)(typescript@5.5.2)': + '@commitlint/cli@19.5.0(@types/node@22.7.5)(typescript@5.6.3)': dependencies: - '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.14.9)(typescript@5.5.2) - '@commitlint/read': 19.2.1 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.5.0 + '@commitlint/load': 19.5.0(@types/node@22.7.5)(typescript@5.6.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.0 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 - '@commitlint/config-validator@19.0.3': + '@commitlint/config-validator@19.5.0': dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.16.0 + '@commitlint/types': 19.5.0 + ajv: 8.17.1 - '@commitlint/ensure@19.0.3': + '@commitlint/ensure@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@19.0.0': {} + '@commitlint/execute-rule@19.5.0': {} - '@commitlint/format@19.3.0': + '@commitlint/format@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 chalk: 5.3.0 - '@commitlint/is-ignored@19.2.2': + '@commitlint/is-ignored@19.5.0': dependencies: - '@commitlint/types': 19.0.3 - semver: 7.6.0 + '@commitlint/types': 19.5.0 + semver: 7.6.3 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.5.0': dependencies: - '@commitlint/is-ignored': 19.2.2 - '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/is-ignored': 19.5.0 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.5.0 + '@commitlint/types': 19.5.0 - '@commitlint/load@19.2.0(@types/node@20.14.9)(typescript@5.5.2)': + '@commitlint/load@19.5.0(@types/node@22.7.5)(typescript@5.6.3)': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2) + cosmiconfig: 9.0.0(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -8165,46 +7794,45 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@19.0.0': {} + '@commitlint/message@19.5.0': {} - '@commitlint/parse@19.0.3': + '@commitlint/parse@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.2.1': + '@commitlint/read@19.5.0': dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 + tinyexec: 0.3.0 - '@commitlint/resolve-extends@19.1.0': + '@commitlint/resolve-extends@19.5.0': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 global-directory: 4.0.1 - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': + '@commitlint/rules@19.5.0': dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 - '@commitlint/to-lines@19.0.0': {} + '@commitlint/to-lines@19.5.0': {} - '@commitlint/top-level@19.0.0': + '@commitlint/top-level@19.5.0': dependencies: find-up: 7.0.0 - '@commitlint/types@19.0.3': + '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 @@ -8213,20 +7841,20 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1)': + '@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1)': dependencies: - '@csstools/css-tokenizer': 2.3.1 + '@csstools/css-tokenizer': 3.0.1 - '@csstools/css-tokenizer@2.3.1': {} + '@csstools/css-tokenizer@3.0.1': {} - '@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)': + '@csstools/media-query-list-parser@3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1)': dependencies: - '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) - '@csstools/css-tokenizer': 2.3.1 + '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) + '@csstools/css-tokenizer': 3.0.1 - '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.0)': + '@csstools/selector-specificity@4.0.0(postcss-selector-parser@6.1.2)': dependencies: - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.2 '@ctrl/tinycolor@3.6.1': {} @@ -8236,309 +7864,247 @@ snapshots: '@emotion/unitless@0.7.5': {} - '@esbuild/aix-ppc64@0.19.10': - optional: true - '@esbuild/aix-ppc64@0.19.12': optional: true - '@esbuild/aix-ppc64@0.20.2': - optional: true - '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/android-arm64@0.19.10': + '@esbuild/aix-ppc64@0.23.1': optional: true '@esbuild/android-arm64@0.19.12': optional: true - '@esbuild/android-arm64@0.20.2': - optional: true - '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm@0.19.10': + '@esbuild/android-arm64@0.23.1': optional: true '@esbuild/android-arm@0.19.12': optional: true - '@esbuild/android-arm@0.20.2': - optional: true - '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-x64@0.19.10': + '@esbuild/android-arm@0.23.1': optional: true '@esbuild/android-x64@0.19.12': optional: true - '@esbuild/android-x64@0.20.2': - optional: true - '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.19.10': + '@esbuild/android-x64@0.23.1': optional: true '@esbuild/darwin-arm64@0.19.12': optional: true - '@esbuild/darwin-arm64@0.20.2': - optional: true - '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-x64@0.19.10': + '@esbuild/darwin-arm64@0.23.1': optional: true '@esbuild/darwin-x64@0.19.12': optional: true - '@esbuild/darwin-x64@0.20.2': - optional: true - '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.19.10': + '@esbuild/darwin-x64@0.23.1': optional: true '@esbuild/freebsd-arm64@0.19.12': optional: true - '@esbuild/freebsd-arm64@0.20.2': - optional: true - '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.19.10': + '@esbuild/freebsd-arm64@0.23.1': optional: true '@esbuild/freebsd-x64@0.19.12': optional: true - '@esbuild/freebsd-x64@0.20.2': - optional: true - '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/linux-arm64@0.19.10': + '@esbuild/freebsd-x64@0.23.1': optional: true '@esbuild/linux-arm64@0.19.12': optional: true - '@esbuild/linux-arm64@0.20.2': - optional: true - '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm@0.19.10': + '@esbuild/linux-arm64@0.23.1': optional: true '@esbuild/linux-arm@0.19.12': optional: true - '@esbuild/linux-arm@0.20.2': - optional: true - '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-ia32@0.19.10': + '@esbuild/linux-arm@0.23.1': optional: true '@esbuild/linux-ia32@0.19.12': optional: true - '@esbuild/linux-ia32@0.20.2': - optional: true - '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-loong64@0.14.54': + '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-loong64@0.19.10': + '@esbuild/linux-loong64@0.14.54': optional: true '@esbuild/linux-loong64@0.19.12': optional: true - '@esbuild/linux-loong64@0.20.2': - optional: true - '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-mips64el@0.19.10': + '@esbuild/linux-loong64@0.23.1': optional: true '@esbuild/linux-mips64el@0.19.12': optional: true - '@esbuild/linux-mips64el@0.20.2': - optional: true - '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-ppc64@0.19.10': + '@esbuild/linux-mips64el@0.23.1': optional: true '@esbuild/linux-ppc64@0.19.12': optional: true - '@esbuild/linux-ppc64@0.20.2': - optional: true - '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.19.10': + '@esbuild/linux-ppc64@0.23.1': optional: true '@esbuild/linux-riscv64@0.19.12': optional: true - '@esbuild/linux-riscv64@0.20.2': - optional: true - '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-s390x@0.19.10': + '@esbuild/linux-riscv64@0.23.1': optional: true '@esbuild/linux-s390x@0.19.12': optional: true - '@esbuild/linux-s390x@0.20.2': - optional: true - '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-x64@0.19.10': + '@esbuild/linux-s390x@0.23.1': optional: true '@esbuild/linux-x64@0.19.12': optional: true - '@esbuild/linux-x64@0.20.2': - optional: true - '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.19.10': + '@esbuild/linux-x64@0.23.1': optional: true '@esbuild/netbsd-x64@0.19.12': optional: true - '@esbuild/netbsd-x64@0.20.2': - optional: true - '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.19.10': + '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.19.12': + '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.20.2': + '@esbuild/openbsd-x64@0.19.12': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.19.10': + '@esbuild/openbsd-x64@0.23.1': optional: true '@esbuild/sunos-x64@0.19.12': optional: true - '@esbuild/sunos-x64@0.20.2': - optional: true - '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/win32-arm64@0.19.10': + '@esbuild/sunos-x64@0.23.1': optional: true '@esbuild/win32-arm64@0.19.12': optional: true - '@esbuild/win32-arm64@0.20.2': - optional: true - '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-ia32@0.19.10': + '@esbuild/win32-arm64@0.23.1': optional: true '@esbuild/win32-ia32@0.19.12': optional: true - '@esbuild/win32-ia32@0.20.2': - optional: true - '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-x64@0.19.10': + '@esbuild/win32-ia32@0.23.1': optional: true '@esbuild/win32-x64@0.19.12': optional: true - '@esbuild/win32-x64@0.20.2': + '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.5.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@2.3.3))': dependencies: - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.1': {} + '@eslint-community/regexpp@4.11.1': {} - '@eslint/compat@1.1.0': {} + '@eslint/compat@1.2.0(eslint@9.12.0(jiti@2.3.3))': + optionalDependencies: + eslint: 9.12.0(jiti@2.3.3) - '@eslint/config-array@0.16.0': + '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.5 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color + '@eslint/core@0.6.0': {} + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.5 - espree: 10.1.0 + debug: 4.3.7 + espree: 10.2.0 globals: 14.0.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -8546,141 +8112,127 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.5.0': {} + '@eslint/js@9.12.0': {} '@eslint/object-schema@2.1.4': {} + '@eslint/plugin-kit@0.2.0': + dependencies: + levn: 0.4.1 + '@fastify/busboy@2.1.1': {} '@formatjs/ecma402-abstract@1.11.4': dependencies: '@formatjs/intl-localematcher': 0.2.25 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/ecma402-abstract@1.18.0': dependencies: '@formatjs/intl-localematcher': 0.5.2 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/fast-memoize@1.2.1': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/fast-memoize@2.2.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/icu-messageformat-parser@2.1.0': dependencies: '@formatjs/ecma402-abstract': 1.11.4 '@formatjs/icu-skeleton-parser': 1.3.6 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/icu-messageformat-parser@2.7.3': dependencies: '@formatjs/ecma402-abstract': 1.18.0 '@formatjs/icu-skeleton-parser': 1.7.0 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/icu-skeleton-parser@1.3.6': dependencies: '@formatjs/ecma402-abstract': 1.11.4 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/icu-skeleton-parser@1.7.0': dependencies: '@formatjs/ecma402-abstract': 1.18.0 - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/intl-localematcher@0.2.25': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@formatjs/intl-localematcher@0.5.2': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 - '@gradio/atoms@0.7.4(svelte@4.2.18)': + '@gradio/atoms@0.7.4(svelte@4.2.19)': dependencies: '@gradio/icons': 0.4.1 - '@gradio/utils': 0.4.2(svelte@4.2.18) + '@gradio/utils': 0.4.2(svelte@4.2.19) transitivePeerDependencies: - svelte - '@gradio/button@0.2.43(svelte@4.2.18)': + '@gradio/atoms@0.8.1(svelte@4.2.19)': + dependencies: + '@gradio/icons': 0.7.2(svelte@4.2.19) + '@gradio/utils': 0.6.1(svelte@4.2.19) + svelte: 4.2.19 + + '@gradio/button@0.2.43(svelte@4.2.19)': dependencies: - '@gradio/client': 1.1.1 - '@gradio/upload': 0.11.2(svelte@4.2.18) - '@gradio/utils': 0.4.2(svelte@4.2.18) + '@gradio/client': 1.6.0 + '@gradio/upload': 0.11.2(svelte@4.2.19) + '@gradio/utils': 0.4.2(svelte@4.2.19) transitivePeerDependencies: - svelte - utf-8-validate - '@gradio/client@1.1.1': + '@gradio/client@1.6.0': dependencies: '@types/eventsource': 1.1.15 bufferutil: 4.0.8 eventsource: 2.0.2 fetch-event-stream: 0.1.5 - msw: 2.3.1(typescript@5.4.5) + msw: 2.4.9(typescript@5.6.3) semiver: 1.1.0 textlinestream: 1.1.1 - typescript: 5.4.5 - ws: 8.17.0(bufferutil@4.0.8) + typescript: 5.6.3 + ws: 8.18.0(bufferutil@4.0.8) transitivePeerDependencies: - utf-8-validate '@gradio/icons@0.4.1': {} - '@gradio/preview@0.9.1(@babel/core@7.24.7)(@types/node@16.18.101)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18)': + '@gradio/icons@0.7.2(svelte@4.2.19)': dependencies: - '@originjs/vite-plugin-commonjs': 1.0.3 - '@rollup/plugin-sucrase': 5.0.2(rollup@4.18.0) - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - '@types/which': 3.0.4 - coffeescript: 2.7.0 - lightningcss: 1.25.1 - pug: 3.0.3 - sass: 1.77.5 - stylus: 0.63.0 - sucrase: 3.35.0 - sugarss: 4.0.1(postcss@8.4.38) - svelte-hmr: 0.16.0(svelte@4.2.18) - svelte-preprocess: 5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5) - typescript: 5.4.5 - vite: 5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - which: 4.0.0 - yootils: 0.3.1 - transitivePeerDependencies: - - '@babel/core' - - '@types/node' - - less - - postcss - - postcss-load-config - - rollup - - supports-color - - svelte - - terser + svelte: 4.2.19 - '@gradio/preview@0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18)': + '@gradio/preview@0.12.0(@babel/core@7.25.7)(@types/node@18.19.55)(less@4.2.0)(postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)))(postcss@8.4.47)(rollup@4.24.0)': dependencies: '@originjs/vite-plugin-commonjs': 1.0.3 - '@rollup/plugin-sucrase': 5.0.2(rollup@4.18.0) - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) + '@rollup/plugin-sucrase': 5.0.2(rollup@4.24.0) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))) '@types/which': 3.0.4 coffeescript: 2.7.0 - lightningcss: 1.25.1 + lightningcss: 1.27.0 pug: 3.0.3 - sass: 1.77.5 + sass: 1.79.4 stylus: 0.63.0 sucrase: 3.35.0 - sugarss: 4.0.1(postcss@8.4.38) - svelte-hmr: 0.16.0(svelte@4.2.18) - svelte-preprocess: 5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5) - typescript: 5.4.5 - vite: 5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) + sugarss: 4.0.1(postcss@8.4.47) + svelte-hmr: 0.16.0(svelte@4.2.19) + svelte-preprocess: 5.1.4(@babel/core@7.25.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)))(postcss@8.4.47)(pug@3.0.3)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))(svelte@4.2.19)(typescript@5.6.3) + typescript: 5.6.3 + vite: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) which: 4.0.0 yootils: 0.3.1 + optionalDependencies: + svelte: 4.2.19 transitivePeerDependencies: - '@babel/core' - '@types/node' @@ -8688,101 +8240,104 @@ snapshots: - postcss - postcss-load-config - rollup + - sass-embedded - supports-color - - svelte - terser - '@gradio/preview@0.9.1(@babel/core@7.24.7)(@types/node@20.14.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(rollup@4.18.0)(svelte@4.2.18)': + '@gradio/statustracker@0.7.6(svelte@4.2.19)': dependencies: - '@originjs/vite-plugin-commonjs': 1.0.3 - '@rollup/plugin-sucrase': 5.0.2(rollup@4.18.0) - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - '@types/which': 3.0.4 - coffeescript: 2.7.0 - lightningcss: 1.25.1 - pug: 3.0.3 - sass: 1.77.5 - stylus: 0.63.0 - sucrase: 3.35.0 - sugarss: 4.0.1(postcss@8.4.38) - svelte-hmr: 0.16.0(svelte@4.2.18) - svelte-preprocess: 5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5) - typescript: 5.4.5 - vite: 5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - which: 4.0.0 - yootils: 0.3.1 - transitivePeerDependencies: - - '@babel/core' - - '@types/node' - - less - - postcss - - postcss-load-config - - rollup - - supports-color - - svelte - - terser + '@gradio/atoms': 0.8.1(svelte@4.2.19) + '@gradio/icons': 0.7.2(svelte@4.2.19) + '@gradio/utils': 0.6.1(svelte@4.2.19) + '@types/dompurify': 3.0.5 + dompurify: 3.1.6 + svelte: 4.2.19 - '@gradio/statustracker@0.6.0(svelte@4.2.18)': + '@gradio/theme@0.2.5(svelte@4.2.19)': dependencies: - '@gradio/atoms': 0.7.4(svelte@4.2.18) - '@gradio/icons': 0.4.1 - '@gradio/utils': 0.4.2(svelte@4.2.18) - transitivePeerDependencies: - - svelte + svelte: 4.2.19 - '@gradio/theme@0.2.3': {} + '@gradio/theme@0.3.0(svelte@4.2.19)': + dependencies: + svelte: 4.2.19 - '@gradio/upload@0.11.2(svelte@4.2.18)': + '@gradio/upload@0.11.2(svelte@4.2.19)': dependencies: - '@gradio/atoms': 0.7.4(svelte@4.2.18) - '@gradio/client': 1.1.1 + '@gradio/atoms': 0.7.4(svelte@4.2.19) + '@gradio/client': 1.6.0 '@gradio/icons': 0.4.1 - '@gradio/utils': 0.4.2(svelte@4.2.18) + '@gradio/utils': 0.4.2(svelte@4.2.19) '@gradio/wasm': 0.10.1 transitivePeerDependencies: - svelte - utf-8-validate - '@gradio/utils@0.4.2(svelte@4.2.18)': + '@gradio/utils@0.4.2(svelte@4.2.19)': + dependencies: + '@gradio/theme': 0.2.5(svelte@4.2.19) + svelte-i18n: 3.7.4(svelte@4.2.19) + transitivePeerDependencies: + - svelte + + '@gradio/utils@0.6.1(svelte@4.2.19)': + dependencies: + '@gradio/theme': 0.2.5(svelte@4.2.19) + svelte-i18n: 3.7.4(svelte@4.2.19) + transitivePeerDependencies: + - svelte + + '@gradio/utils@0.7.0(svelte@4.2.19)': dependencies: - '@gradio/theme': 0.2.3 - svelte-i18n: 3.7.4(svelte@4.2.18) + '@gradio/theme': 0.3.0(svelte@4.2.19) + svelte-i18n: 3.7.4(svelte@4.2.19) transitivePeerDependencies: - svelte '@gradio/wasm@0.10.1': dependencies: - '@types/path-browserify': 1.0.2 + '@types/path-browserify': 1.0.3 path-browserify: 1.0.1 + '@humanfs/core@0.19.0': {} + + '@humanfs/node@0.16.5': + dependencies: + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} - '@inquirer/confirm@3.1.9': + '@inquirer/confirm@3.2.0': dependencies: - '@inquirer/core': 8.2.2 - '@inquirer/type': 1.3.3 + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 - '@inquirer/core@8.2.2': + '@inquirer/core@9.2.1': dependencies: - '@inquirer/figures': 1.0.3 - '@inquirer/type': 1.3.3 + '@inquirer/figures': 1.0.7 + '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 20.14.9 + '@types/node': 22.7.5 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-spinners: 2.9.2 cli-width: 4.1.0 mute-stream: 1.0.0 signal-exit: 4.1.0 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.7': {} - '@inquirer/figures@1.0.3': {} + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 - '@inquirer/type@1.3.3': {} + '@inquirer/type@2.0.0': + dependencies: + mute-stream: 1.0.0 '@isaacs/cliui@8.0.2': dependencies: @@ -8805,6 +8360,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -8813,41 +8370,38 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - '@manypkg/find-root@2.2.1': + '@manypkg/find-root@2.2.3': dependencies: - '@manypkg/tools': 1.1.0 - find-up: 4.1.0 - fs-extra: 8.1.0 + '@manypkg/tools': 1.1.2 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@manypkg/get-packages@2.2.1': + '@manypkg/get-packages@2.2.2': dependencies: - '@manypkg/find-root': 2.2.1 - '@manypkg/tools': 1.1.0 + '@manypkg/find-root': 2.2.3 + '@manypkg/tools': 1.1.2 - '@manypkg/tools@1.1.0': + '@manypkg/tools@1.1.2': dependencies: - fs-extra: 8.1.0 - globby: 11.1.0 + fast-glob: 3.3.2 jju: 1.4.0 - read-yaml-file: 1.1.0 + js-yaml: 4.1.0 '@mapbox/node-pre-gyp@1.0.11': dependencies: @@ -8858,57 +8412,31 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.6.2 + semver: 7.6.3 tar: 6.2.0 transitivePeerDependencies: - encoding - supports-color optional: true - '@microsoft/api-extractor-model@7.28.13(@types/node@20.14.9)': - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.14.9) - transitivePeerDependencies: - - '@types/node' - - '@microsoft/api-extractor-model@7.29.2(@types/node@20.14.9)': + '@microsoft/api-extractor-model@7.29.8(@types/node@22.7.5)': dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.4.1(@types/node@20.14.9) + '@rushstack/node-core-library': 5.9.0(@types/node@22.7.5) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor@7.43.0(@types/node@20.14.9)': - dependencies: - '@microsoft/api-extractor-model': 7.28.13(@types/node@20.14.9) - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.14.9) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0(@types/node@20.14.9) - '@rushstack/ts-command-line': 4.19.1(@types/node@20.14.9) - lodash: 4.17.21 - minimatch: 3.0.8 - resolve: 1.22.8 - semver: 7.5.4 - source-map: 0.6.1 - typescript: 5.4.2 - transitivePeerDependencies: - - '@types/node' - - '@microsoft/api-extractor@7.47.0(@types/node@20.14.9)': + '@microsoft/api-extractor@7.47.9(@types/node@22.7.5)': dependencies: - '@microsoft/api-extractor-model': 7.29.2(@types/node@20.14.9) + '@microsoft/api-extractor-model': 7.29.8(@types/node@22.7.5) '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.4.1(@types/node@20.14.9) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.13.0(@types/node@20.14.9) - '@rushstack/ts-command-line': 4.22.0(@types/node@20.14.9) + '@rushstack/node-core-library': 5.9.0(@types/node@22.7.5) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.2(@types/node@22.7.5) + '@rushstack/ts-command-line': 4.22.8(@types/node@22.7.5) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -8919,13 +8447,6 @@ snapshots: - '@types/node' optional: true - '@microsoft/tsdoc-config@0.16.2': - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - '@microsoft/tsdoc-config@0.17.0': dependencies: '@microsoft/tsdoc': 0.15.0 @@ -8934,8 +8455,6 @@ snapshots: resolve: 1.22.8 optional: true - '@microsoft/tsdoc@0.14.2': {} - '@microsoft/tsdoc@0.15.0': optional: true @@ -8944,15 +8463,13 @@ snapshots: call-me-maybe: 1.0.2 glob-to-regexp: 0.3.0 - '@mswjs/cookies@1.1.0': {} - - '@mswjs/interceptors@0.29.1': + '@mswjs/interceptors@0.35.9': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 '@open-draft/until': 2.1.0 is-node-process: 1.2.0 - outvariant: 1.4.2 + outvariant: 1.4.3 strict-event-emitter: 0.5.1 '@nodelib/fs.scandir@2.1.5': @@ -8967,7 +8484,9 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} '@octokit/auth-token@4.0.0': {} @@ -9026,7 +8545,7 @@ snapshots: '@open-draft/logger@0.3.0': dependencies: is-node-process: 1.2.0 - outvariant: 1.4.2 + outvariant: 1.4.3 '@open-draft/until@2.1.0': {} @@ -9041,12 +8560,12 @@ snapshots: '@rc-component/async-validator@5.0.4': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 - '@rc-component/color-picker@1.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 - '@ctrl/tinycolor': 3.6.1 + '@ant-design/fast-color': 2.0.6 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -9054,18 +8573,18 @@ snapshots: '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@rc-component/mini-decimal@1.1.0': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -9073,108 +8592,155 @@ snapshots: '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/tour@1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rc-component/trigger@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@rc-component/trigger@2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rollup/plugin-sucrase@5.0.2(rollup@4.18.0)': + '@rollup/plugin-sucrase@5.0.2(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) sucrase: 3.35.0 optionalDependencies: - rollup: 4.18.0 + rollup: 4.24.0 - '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.0 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.18.0': + '@rollup/rollup-android-arm-eabi@4.22.4': optional: true - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': + '@rollup/rollup-android-arm64@4.22.4': optional: true - '@rollup/rollup-darwin-x64@4.18.0': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@rollup/rollup-darwin-arm64@4.22.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@rollup/rollup-darwin-x64@4.22.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.22.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.22.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.22.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.22.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rushstack/node-core-library@4.0.2(@types/node@20.14.9)': - dependencies: - fs-extra: 7.0.1 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.8 - semver: 7.5.4 - z-schema: 5.0.5 - optionalDependencies: - '@types/node': 20.14.9 + '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.22.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.24.0': + optional: true - '@rushstack/node-core-library@5.4.1(@types/node@20.14.9)': + '@rollup/rollup-win32-arm64-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.22.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.24.0': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@rushstack/node-core-library@5.9.0(@types/node@22.7.5)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -9185,41 +8751,26 @@ snapshots: resolve: 1.22.8 semver: 7.5.4 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.5 optional: true - '@rushstack/rig-package@0.5.2': + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 + optional: true - '@rushstack/terminal@0.10.0(@types/node@20.14.9)': - dependencies: - '@rushstack/node-core-library': 4.0.2(@types/node@20.14.9) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 20.14.9 - - '@rushstack/terminal@0.13.0(@types/node@20.14.9)': + '@rushstack/terminal@0.14.2(@types/node@22.7.5)': dependencies: - '@rushstack/node-core-library': 5.4.1(@types/node@20.14.9) + '@rushstack/node-core-library': 5.9.0(@types/node@22.7.5) supports-color: 8.1.1 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.5 optional: true - '@rushstack/ts-command-line@4.19.1(@types/node@20.14.9)': - dependencies: - '@rushstack/terminal': 0.10.0(@types/node@20.14.9) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - - '@rushstack/ts-command-line@4.22.0(@types/node@20.14.9)': + '@rushstack/ts-command-line@4.22.8(@types/node@22.7.5)': dependencies: - '@rushstack/terminal': 0.13.0(@types/node@20.14.9) + '@rushstack/terminal': 0.14.2(@types/node@22.7.5) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -9227,182 +8778,107 @@ snapshots: - '@types/node' optional: true - '@subscribe-kit/core@2.1.1(typescript@5.5.2)': + '@subscribe-kit/core@2.1.1(typescript@5.6.3)': dependencies: - '@babel/runtime': 7.24.4 - '@subscribe-kit/shared': 2.1.1(typescript@5.5.2) - immer: 10.0.4 - types-kit: 0.0.11(typescript@5.5.2) + '@babel/runtime': 7.25.6 + '@subscribe-kit/shared': 2.1.1(typescript@5.6.3) + immer: 10.1.1 + types-kit: 0.0.11(typescript@5.6.3) transitivePeerDependencies: - typescript - '@subscribe-kit/react@2.1.1(@subscribe-kit/core@2.1.1(typescript@5.5.2))(react@18.3.1)(typescript@5.5.2)': + '@subscribe-kit/react@2.1.1(@subscribe-kit/core@2.1.1(typescript@5.6.3))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@babel/runtime': 7.24.4 - '@subscribe-kit/core': 2.1.1(typescript@5.5.2) - '@subscribe-kit/shared': 2.1.1(typescript@5.5.2) + '@babel/runtime': 7.25.6 + '@subscribe-kit/core': 2.1.1(typescript@5.6.3) + '@subscribe-kit/shared': 2.1.1(typescript@5.6.3) lodash: 4.17.21 react: 18.3.1 - use-sync-external-store: 1.2.0(react@18.3.1) + use-sync-external-store: 1.2.2(react@18.3.1) transitivePeerDependencies: - typescript - '@subscribe-kit/shared@2.1.1(typescript@5.5.2)': + '@subscribe-kit/shared@2.1.1(typescript@5.6.3)': dependencies: - '@babel/runtime': 7.24.4 - types-kit: 0.0.11(typescript@5.5.2) + '@babel/runtime': 7.25.6 + types-kit: 0.0.11(typescript@5.6.3) transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - debug: 4.3.5 - svelte: 4.2.18 - vite: 5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - debug: 4.3.5 - svelte: 4.2.18 - vite: 5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.18)(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - debug: 4.3.5 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.10 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) - vite: 5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - vitefu: 0.2.5(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))) + debug: 4.3.7 + svelte: 4.2.19 + vite: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) - debug: 4.3.5 + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))) + debug: 4.3.7 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.10 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) - vite: 5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - vitefu: 0.2.5(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))) + magic-string: 0.30.11 + svelte: 4.2.19 + svelte-hmr: 0.16.0(svelte@4.2.19) + vite: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) + vitefu: 0.2.5(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))) transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.5.29': - optional: true - - '@swc/core-darwin-arm64@1.6.5': - optional: true - - '@swc/core-darwin-x64@1.5.29': - optional: true - - '@swc/core-darwin-x64@1.6.5': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.5.29': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.6.5': - optional: true - - '@swc/core-linux-arm64-gnu@1.5.29': + '@swc/core-darwin-arm64@1.7.26': optional: true - '@swc/core-linux-arm64-gnu@1.6.5': + '@swc/core-darwin-x64@1.7.26': optional: true - '@swc/core-linux-arm64-musl@1.5.29': + '@swc/core-linux-arm-gnueabihf@1.7.26': optional: true - '@swc/core-linux-arm64-musl@1.6.5': + '@swc/core-linux-arm64-gnu@1.7.26': optional: true - '@swc/core-linux-x64-gnu@1.5.29': + '@swc/core-linux-arm64-musl@1.7.26': optional: true - '@swc/core-linux-x64-gnu@1.6.5': + '@swc/core-linux-x64-gnu@1.7.26': optional: true - '@swc/core-linux-x64-musl@1.5.29': + '@swc/core-linux-x64-musl@1.7.26': optional: true - '@swc/core-linux-x64-musl@1.6.5': + '@swc/core-win32-arm64-msvc@1.7.26': optional: true - '@swc/core-win32-arm64-msvc@1.5.29': + '@swc/core-win32-ia32-msvc@1.7.26': optional: true - '@swc/core-win32-arm64-msvc@1.6.5': + '@swc/core-win32-x64-msvc@1.7.26': optional: true - '@swc/core-win32-ia32-msvc@1.5.29': - optional: true - - '@swc/core-win32-ia32-msvc@1.6.5': - optional: true - - '@swc/core-win32-x64-msvc@1.5.29': - optional: true - - '@swc/core-win32-x64-msvc@1.6.5': - optional: true - - '@swc/core@1.5.29': + '@swc/core@1.7.26': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.5.29 - '@swc/core-darwin-x64': 1.5.29 - '@swc/core-linux-arm-gnueabihf': 1.5.29 - '@swc/core-linux-arm64-gnu': 1.5.29 - '@swc/core-linux-arm64-musl': 1.5.29 - '@swc/core-linux-x64-gnu': 1.5.29 - '@swc/core-linux-x64-musl': 1.5.29 - '@swc/core-win32-arm64-msvc': 1.5.29 - '@swc/core-win32-ia32-msvc': 1.5.29 - '@swc/core-win32-x64-msvc': 1.5.29 - - '@swc/core@1.6.5': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.9 - optionalDependencies: - '@swc/core-darwin-arm64': 1.6.5 - '@swc/core-darwin-x64': 1.6.5 - '@swc/core-linux-arm-gnueabihf': 1.6.5 - '@swc/core-linux-arm64-gnu': 1.6.5 - '@swc/core-linux-arm64-musl': 1.6.5 - '@swc/core-linux-x64-gnu': 1.6.5 - '@swc/core-linux-x64-musl': 1.6.5 - '@swc/core-win32-arm64-msvc': 1.6.5 - '@swc/core-win32-ia32-msvc': 1.6.5 - '@swc/core-win32-x64-msvc': 1.6.5 - optional: true + '@swc/core-darwin-arm64': 1.7.26 + '@swc/core-darwin-x64': 1.7.26 + '@swc/core-linux-arm-gnueabihf': 1.7.26 + '@swc/core-linux-arm64-gnu': 1.7.26 + '@swc/core-linux-arm64-musl': 1.7.26 + '@swc/core-linux-x64-gnu': 1.7.26 + '@swc/core-linux-x64-musl': 1.7.26 + '@swc/core-win32-arm64-msvc': 1.7.26 + '@swc/core-win32-ia32-msvc': 1.7.26 + '@swc/core-win32-x64-msvc': 1.7.26 - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.8': - dependencies: - '@swc/counter': 0.1.3 + '@swc/counter@0.1.3': {} - '@swc/types@0.1.9': + '@swc/types@0.1.12': dependencies: '@swc/counter': 0.1.3 - optional: true '@tsconfig/node10@1.0.11': {} @@ -9412,32 +8888,33 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@types/argparse@1.0.38': {} + '@types/argparse@1.0.38': + optional: true '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.23.5 - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 '@types/babel__generator@7.6.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.23.5 - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/babel__traverse@7.20.4': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.5 '@types/cookie@0.6.0': {} @@ -9445,35 +8922,39 @@ snapshots: '@types/d3-drag@3.0.7': dependencies: - '@types/d3-selection': 3.0.10 + '@types/d3-selection': 3.0.11 '@types/d3-interpolate@3.0.4': dependencies: '@types/d3-color': 3.1.3 - '@types/d3-selection@3.0.10': {} + '@types/d3-selection@3.0.11': {} - '@types/d3-transition@3.0.8': + '@types/d3-transition@3.0.9': dependencies: - '@types/d3-selection': 3.0.10 + '@types/d3-selection': 3.0.11 '@types/d3-zoom@3.0.8': dependencies: '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.10 + '@types/d3-selection': 3.0.11 '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - '@types/eslint@8.56.10': + '@types/dompurify@3.0.5': + dependencies: + '@types/trusted-types': 2.0.7 + + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 '@types/eslint__js@8.42.3': dependencies: - '@types/eslint': 8.56.10 + '@types/eslint': 9.6.1 '@types/estree-jsx@1.0.3': dependencies: @@ -9481,20 +8962,22 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/eventsource@1.1.15': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.9 + '@types/node': 22.7.5 '@types/hast@2.3.9': dependencies: '@types/unist': 2.0.10 - '@types/hast@3.0.3': + '@types/hast@3.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 '@types/json-schema@7.0.15': {} @@ -9510,7 +8993,7 @@ snapshots: '@types/mdast@4.0.3': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 '@types/minimatch@5.1.2': {} @@ -9518,42 +9001,46 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.5 '@types/node@12.20.55': {} - '@types/node@16.18.101': {} - - '@types/node@20.14.9': + '@types/node@18.19.55': dependencies: undici-types: 5.26.5 - '@types/path-browserify@1.0.2': {} + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/path-browserify@1.0.3': {} - '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.13': {} '@types/pug@2.0.10': {} '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.11 '@types/react-syntax-highlighter@15.5.13': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.11 - '@types/react@18.3.3': + '@types/react@18.3.11': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 - '@types/semver@7.5.8': {} - '@types/statuses@2.0.5': {} + '@types/tough-cookie@4.0.5': {} + + '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.10': {} - '@types/unist@3.0.2': {} + '@types/unist@3.0.3': {} '@types/vfile-message@2.0.0': dependencies: @@ -9561,162 +9048,120 @@ snapshots: '@types/vfile@3.0.2': dependencies: - '@types/node': 20.14.9 - '@types/unist': 3.0.2 + '@types/node': 22.7.5 + '@types/unist': 3.0.3 '@types/vfile-message': 2.0.0 '@types/which@3.0.4': {} '@types/wrap-ansi@3.0.0': {} - '@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/type-utils': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/utils': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.14.1 - eslint: 9.5.0 + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.8.1 + eslint: 9.12.0(jiti@2.3.3) graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.5 - eslint: 9.5.0 + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + eslint: 9.12.0(jiti@2.3.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.14.1': + '@typescript-eslint/scope-manager@8.8.1': dependencies: - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/visitor-keys': 7.14.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 - '@typescript-eslint/type-utils@7.14.1(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - '@typescript-eslint/utils': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - debug: 4.3.5 - eslint: 9.5.0 - ts-api-utils: 1.3.0(typescript@5.5.2) + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: + - eslint - supports-color - '@typescript-eslint/types@7.14.1': {} + '@typescript-eslint/types@8.8.1': {} - '@typescript-eslint/typescript-estree@7.14.1(typescript@5.5.2)': + '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.5 - globby: 11.1.0 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/visitor-keys': 8.8.1 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.2) + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.14.1(eslint@9.5.0)(typescript@5.5.2)': + '@typescript-eslint/utils@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - eslint: 9.5.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@typescript-eslint/scope-manager': 8.8.1 + '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.14.1': + '@typescript-eslint/visitor-keys@8.8.1': dependencies: - '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/types': 8.8.1 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.0(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)))': + '@vitejs/plugin-react-swc@3.7.1(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)))': dependencies: - '@swc/core': 1.5.29 - vite: 5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) + '@swc/core': 1.7.26 + vite: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) transitivePeerDependencies: - '@swc/helpers' - '@volar/language-core@1.11.1': - dependencies: - '@volar/source-map': 1.11.1 - - '@volar/source-map@1.11.1': - dependencies: - muggle-string: 0.3.1 - - '@volar/typescript@1.11.1': - dependencies: - '@volar/language-core': 1.11.1 - path-browserify: 1.0.1 - - '@vue/compiler-core@3.4.27': - dependencies: - '@babel/parser': 7.24.5 - '@vue/shared': 3.4.27 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.0 - - '@vue/compiler-dom@3.4.27': - dependencies: - '@vue/compiler-core': 3.4.27 - '@vue/shared': 3.4.27 - - '@vue/language-core@1.8.27(typescript@5.5.2)': - dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.4.27 - '@vue/shared': 3.4.27 - computeds: 0.0.1 - minimatch: 9.0.4 - muggle-string: 0.3.1 - path-browserify: 1.0.1 - vue-template-compiler: 2.7.16 - optionalDependencies: - typescript: 5.5.2 - - '@vue/shared@3.4.27': {} - - '@xyflow/react@12.0.0-next.24(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@xyflow/react@12.3.1(@types/react@18.3.11)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@xyflow/system': 0.0.30 + '@xyflow/system': 0.0.43 classcat: 5.0.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - zustand: 4.5.2(@types/react@18.3.3)(immer@10.1.1)(react@18.3.1) + zustand: 4.5.5(@types/react@18.3.11)(immer@10.1.1)(react@18.3.1) transitivePeerDependencies: - '@types/react' - immer - '@xyflow/system@0.0.30': + '@xyflow/system@0.0.43': dependencies: '@types/d3-drag': 3.0.7 - '@types/d3-selection': 3.0.10 - '@types/d3-transition': 3.0.8 + '@types/d3-selection': 3.0.11 + '@types/d3-transition': 3.0.9 '@types/d3-zoom': 3.0.8 d3-drag: 3.0.0 d3-selection: 3.0.0 @@ -9730,21 +9175,21 @@ snapshots: abbrev@1.1.1: optional: true - acorn-jsx@5.3.2(acorn@8.12.0): + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.12.0 + acorn: 8.12.1 - acorn-walk@8.3.2: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 acorn@7.4.1: {} - acorn@8.11.3: {} - - acorn@8.12.0: {} + acorn@8.12.1: {} agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color optional: true @@ -9759,9 +9204,9 @@ snapshots: ajv: 8.13.0 optional: true - ajv-i18n@4.2.0(ajv@8.16.0): + ajv-i18n@4.2.0(ajv@8.17.1): dependencies: - ajv: 8.16.0 + ajv: 8.17.1 ajv@6.12.6: dependencies: @@ -9786,12 +9231,12 @@ snapshots: uri-js: 4.4.1 optional: true - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-colors@4.1.3: {} @@ -9799,13 +9244,15 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@3.2.1: dependencies: @@ -9817,58 +9264,59 @@ snapshots: ansi-styles@6.2.1: {} - antd@5.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + antd@5.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@ant-design/colors': 7.0.2 - '@ant-design/cssinjs': 1.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@ant-design/icons': 5.3.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/colors': 7.1.0 + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/cssinjs-utils': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@ant-design/react-slick': 1.1.2(react@18.3.1) - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@ctrl/tinycolor': 3.6.1 - '@rc-component/color-picker': 1.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/tour': 1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 copy-to-clipboard: 3.3.3 - dayjs: 1.11.11 - qrcode.react: 3.1.0(react@18.3.1) - rc-cascader: 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + dayjs: 1.11.13 + rc-cascader: 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-collapse: 3.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-dialog: 9.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-collapse: 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-field-form: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-image: 7.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input: 1.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-input-number: 9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-mentions: 2.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-notification: 5.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-pagination: 4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-picker: 4.5.0(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-field-form: 2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input-number: 9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-mentions: 2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-notification: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-picker: 4.6.15(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-segmented: 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-select: 14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-slider: 10.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-slider: 11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-table: 7.45.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tabs: 15.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tooltip: 6.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree-select: 5.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-upload: 4.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-table: 7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tabs: 15.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree-select: 5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 - throttle-debounce: 5.0.0 + throttle-debounce: 5.0.2 transitivePeerDependencies: - date-fns - luxon @@ -9902,9 +9350,7 @@ snapshots: dependencies: deep-equal: 2.2.3 - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.1: {} arr-diff@4.0.0: {} @@ -9914,7 +9360,7 @@ snapshots: array-buffer-byte-length@1.0.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-array-buffer: 3.0.2 array-buffer-byte-length@1.0.1: @@ -9930,7 +9376,7 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 @@ -9960,26 +9406,19 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - array.prototype.toreversed@1.1.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -9997,9 +9436,9 @@ snapshots: arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -10009,7 +9448,7 @@ snapshots: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -10019,7 +9458,7 @@ snapshots: asap@2.0.6: {} - assert-never@1.2.1: {} + assert-never@1.3.0: {} assign-symbols@1.0.0: {} @@ -10047,19 +9486,13 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axe-core@4.9.1: {} - - axobject-query@3.1.1: - dependencies: - deep-equal: 2.2.3 + axe-core@4.10.0: {} - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 + axobject-query@4.1.0: {} babel-walk@3.0.0-canary-5: dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.7 bail@1.0.5: {} @@ -10111,10 +9544,6 @@ snapshots: transitivePeerDependencies: - supports-color - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -10126,22 +9555,22 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) - browserslist@4.23.1: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001632 - electron-to-chromium: 1.4.800 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.35 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) buffer-crc32@1.0.0: {} bufferutil@4.0.8: dependencies: - node-gyp-build: 4.8.1 + node-gyp-build: 4.8.2 - bundle-require@4.2.1(esbuild@0.21.5): + bundle-require@5.0.0(esbuild@0.23.1): dependencies: - esbuild: 0.21.5 + esbuild: 0.23.1 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -10196,7 +9625,7 @@ snapshots: caniuse-lite@1.0.30001582: {} - caniuse-lite@1.0.30001632: {} + caniuse-lite@1.0.30001667: {} canvas@2.11.2: dependencies: @@ -10259,6 +9688,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + chownr@2.0.0: optional: true @@ -10275,14 +9708,6 @@ snapshots: classnames@2.5.1: {} - cli-color@2.0.3: - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - cli-color@2.0.4: dependencies: d: 1.0.2 @@ -10291,16 +9716,14 @@ snapshots: memoizee: 0.4.17 timers-ext: 0.1.8 - cli-cursor@4.0.0: + cli-cursor@5.0.0: dependencies: - restore-cursor: 4.0.0 - - cli-spinners@2.9.2: {} + restore-cursor: 5.1.0 cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.1.0 + string-width: 7.2.0 cli-width@4.1.0: {} @@ -10317,9 +9740,9 @@ snapshots: code-red@1.0.4: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@types/estree': 1.0.5 - acorn: 8.12.0 + acorn: 8.12.1 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -10361,9 +9784,6 @@ snapshots: commander@8.3.0: {} - commander@9.5.0: - optional: true - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -10373,17 +9793,17 @@ snapshots: compute-scroll-into-view@3.1.0: {} - computeds@0.0.1: {} - concat-map@0.0.1: {} + consola@3.2.3: {} + console-control-strings@1.1.0: optional: true constantinople@4.0.1: dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 conventional-changelog-angular@7.0.0: dependencies: @@ -10414,12 +9834,12 @@ snapshots: dependencies: toggle-selection: 1.0.6 - cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: - '@types/node': 20.14.9 - cosmiconfig: 9.0.0(typescript@5.5.2) - jiti: 1.21.0 - typescript: 5.5.2 + '@types/node': 22.7.5 + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 1.21.6 + typescript: 5.6.3 cosmiconfig@5.2.1: dependencies: @@ -10428,14 +9848,14 @@ snapshots: js-yaml: 3.14.1 parse-json: 4.0.0 - cosmiconfig@9.0.0(typescript@5.5.2): + cosmiconfig@9.0.0(typescript@5.6.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 create-require@1.1.1: {} @@ -10464,7 +9884,7 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 cssesc@3.0.0: {} @@ -10510,11 +9930,6 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - d@1.0.1: - dependencies: - es5-ext: 0.10.62 - type: 1.2.0 - d@1.0.2: dependencies: es5-ext: 0.10.64 @@ -10546,9 +9961,7 @@ snapshots: dataloader@1.4.0: {} - dayjs@1.11.11: {} - - de-indent@1.0.2: {} + dayjs@1.11.13: {} debug@2.6.9: dependencies: @@ -10558,13 +9971,9 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.3.5: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 decamelize-keys@1.1.1: dependencies: @@ -10691,6 +10100,8 @@ snapshots: dependencies: domelementtype: 1.3.1 + dompurify@3.1.6: {} + domutils@1.7.0: dependencies: dom-serializer: 0.2.2 @@ -10702,18 +10113,18 @@ snapshots: eastasianwidth@0.2.0: {} - echarts@5.5.0: + echarts@5.5.1: dependencies: tslib: 2.3.0 - zrender: 5.5.0 + zrender: 5.6.0 electron-to-chromium@1.4.654: {} - electron-to-chromium@1.4.800: {} + electron-to-chromium@1.5.35: {} elkjs@0.9.3: {} - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@7.0.3: {} @@ -10721,7 +10132,7 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.15.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -10739,6 +10150,8 @@ snapshots: env-paths@2.2.1: {} + environment@1.1.0: {} + errno@0.1.8: dependencies: prr: 1.0.1 @@ -10753,7 +10166,7 @@ snapshots: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 @@ -10764,7 +10177,7 @@ snapshots: has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 @@ -10790,55 +10203,6 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.13 - es-abstract@1.23.2: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -10923,6 +10287,23 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + es-iterator-helpers@1.1.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.3 + safe-array-concat: 1.1.2 + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -10931,7 +10312,7 @@ snapshots: dependencies: get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 - hasown: 2.0.0 + hasown: 2.0.2 es-set-tostringtag@2.0.3: dependencies: @@ -10941,7 +10322,7 @@ snapshots: es-shim-unscopables@1.0.2: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 es-to-primitive@1.2.1: dependencies: @@ -10949,12 +10330,6 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es5-ext@0.10.62: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - next-tick: 1.1.0 - es5-ext@0.10.64: dependencies: es6-iterator: 2.0.3 @@ -10964,17 +10339,12 @@ snapshots: es6-iterator@2.0.3: dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-symbol: 3.1.3 + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 es6-promise@3.3.1: {} - es6-symbol@3.1.3: - dependencies: - d: 1.0.1 - ext: 1.7.0 - es6-symbol@3.1.4: dependencies: d: 1.0.2 @@ -10982,10 +10352,10 @@ snapshots: es6-weak-map@2.0.3: dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 esbuild-android-64@0.14.54: optional: true @@ -11071,32 +10441,6 @@ snapshots: esbuild-windows-64: 0.14.54 esbuild-windows-arm64: 0.14.54 - esbuild@0.19.10: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.10 - '@esbuild/android-arm': 0.19.10 - '@esbuild/android-arm64': 0.19.10 - '@esbuild/android-x64': 0.19.10 - '@esbuild/darwin-arm64': 0.19.10 - '@esbuild/darwin-x64': 0.19.10 - '@esbuild/freebsd-arm64': 0.19.10 - '@esbuild/freebsd-x64': 0.19.10 - '@esbuild/linux-arm': 0.19.10 - '@esbuild/linux-arm64': 0.19.10 - '@esbuild/linux-ia32': 0.19.10 - '@esbuild/linux-loong64': 0.19.10 - '@esbuild/linux-mips64el': 0.19.10 - '@esbuild/linux-ppc64': 0.19.10 - '@esbuild/linux-riscv64': 0.19.10 - '@esbuild/linux-s390x': 0.19.10 - '@esbuild/linux-x64': 0.19.10 - '@esbuild/netbsd-x64': 0.19.10 - '@esbuild/openbsd-x64': 0.19.10 - '@esbuild/sunos-x64': 0.19.10 - '@esbuild/win32-arm64': 0.19.10 - '@esbuild/win32-ia32': 0.19.10 - '@esbuild/win32-x64': 0.19.10 - esbuild@0.19.12: optionalDependencies: '@esbuild/aix-ppc64': 0.19.12 @@ -11123,32 +10467,6 @@ snapshots: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - esbuild@0.20.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -11175,108 +10493,141 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + escalade@3.1.2: {} + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.5.0): + eslint-compat-utils@0.5.1(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.5.0 - semver: 7.6.2 + eslint: 9.12.0(jiti@2.3.3) + semver: 7.6.3 - eslint-config-prettier@9.1.0(eslint@9.5.0): + eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-plugin-import@2.29.1)(eslint@9.5.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)): dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 9.5.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0) + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 9.12.0(jiti@2.3.3) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0): + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - eslint: 9.5.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-plugin-import@2.29.1)(eslint@9.5.0) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - eslint: 9.5.0 + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint: 9.12.0(jiti@2.3.3) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-plugin-import@2.29.1)(eslint@9.5.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.5.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.14.1(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.9.0(eslint@9.5.0): + eslint-plugin-jsx-a11y@6.10.0(eslint@9.12.0(jiti@2.3.3)): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.9.1 - axobject-query: 3.1.1 + axe-core: 4.10.0 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -11285,66 +10636,66 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.5.0))(eslint@9.5.0)(prettier@3.3.2): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3): dependencies: - eslint: 9.5.0 - prettier: 3.3.2 + eslint: 9.12.0(jiti@2.3.3) + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.1 optionalDependencies: - '@types/eslint': 8.56.10 - eslint-config-prettier: 9.1.0(eslint@9.5.0) + '@types/eslint': 9.6.1 + eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-react-hooks@4.6.2(eslint@9.5.0): + eslint-plugin-react-hooks@4.6.2(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-react-refresh@0.4.7(eslint@9.5.0): + eslint-plugin-react-refresh@0.4.12(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-react@7.34.3(eslint@9.5.0): + eslint-plugin-react@7.37.1(eslint@9.12.0(jiti@2.3.3)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 9.5.0 + es-iterator-helpers: 1.1.0 + eslint: 9.12.0(jiti@2.3.3) estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.hasown: 1.1.4 object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 - eslint-plugin-simple-import-sort@12.1.0(eslint@9.5.0): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.12.0(jiti@2.3.3)): dependencies: - eslint: 9.5.0 + eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-svelte@2.41.0(eslint@9.5.0)(svelte@4.2.18)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)): + eslint-plugin-svelte@2.44.1(eslint@9.12.0(jiti@2.3.3))(svelte@4.2.19)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@jridgewell/sourcemap-codec': 1.4.15 - eslint: 9.5.0 - eslint-compat-utils: 0.5.1(eslint@9.5.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@jridgewell/sourcemap-codec': 1.5.0 + eslint: 9.12.0(jiti@2.3.3) + eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@2.3.3)) esutils: 2.0.3 known-css-properties: 0.34.0 - postcss: 8.4.38 - postcss-load-config: 3.1.4(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)) - postcss-safe-parser: 6.0.0(postcss@8.4.38) - postcss-selector-parser: 6.1.0 - semver: 7.6.2 - svelte-eslint-parser: 0.39.2(svelte@4.2.18) + postcss: 8.4.47 + postcss-load-config: 3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3)) + postcss-safe-parser: 6.0.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 + semver: 7.6.3 + svelte-eslint-parser: 0.41.1(svelte@4.2.19) optionalDependencies: - svelte: 4.2.18 + svelte: 4.2.19 transitivePeerDependencies: - ts-node @@ -11353,51 +10704,54 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.1: + eslint-scope@8.1.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.1.0: {} - eslint@9.5.0: + eslint@9.12.0(jiti@2.3.3): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/config-array': 0.16.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.5.0 + '@eslint/js': 9.12.0 + '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 + '@humanwhocodes/retry': 0.3.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.0.1 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 - esquery: 1.5.0 + eslint-scope: 8.1.0 + eslint-visitor-keys: 4.1.0 + espree: 10.2.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 text-table: 0.2.0 + optionalDependencies: + jiti: 2.3.3 transitivePeerDependencies: - supports-color @@ -11408,21 +10762,21 @@ snapshots: event-emitter: 0.3.5 type: 2.7.3 - espree@10.1.0: + espree@10.2.0: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 4.0.0 + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.1.0 espree@9.6.1: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -11444,8 +10798,8 @@ snapshots: event-emitter@0.3.5: dependencies: - d: 1.0.1 - es5-ext: 0.10.62 + d: 1.0.2 + es5-ext: 0.10.64 eventemitter3@5.0.1: {} @@ -11493,7 +10847,7 @@ snapshots: ext@1.7.0: dependencies: - type: 2.7.2 + type: 2.7.3 extend-shallow@2.0.1: dependencies: @@ -11548,15 +10902,17 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fast-uri@3.0.1: {} + fastest-levenshtein@1.0.16: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -11564,6 +10920,14 @@ snapshots: dependencies: format: 0.2.2 + fdir@6.3.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fdir@6.4.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -11579,7 +10943,7 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-entry-cache@9.0.0: + file-entry-cache@9.1.0: dependencies: flat-cache: 5.0.0 @@ -11590,10 +10954,6 @@ snapshots: repeat-string: 1.6.1 to-regex-range: 2.1.1 - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -11618,11 +10978,6 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - find-yarn-workspace-root2@1.2.16: - dependencies: - micromatch: 4.0.7 - pkg-dir: 4.2.0 - flat-cache@2.0.1: dependencies: flatted: 2.0.2 @@ -11649,12 +11004,12 @@ snapshots: for-in@1.0.2: {} - foreground-child@3.1.1: + foreground-child@3.2.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - foreground-child@3.2.0: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -11695,9 +11050,9 @@ snapshots: function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 functions-have-names@1.2.3: {} @@ -11726,7 +11081,7 @@ snapshots: function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 get-intrinsic@1.2.4: dependencies: @@ -11746,7 +11101,7 @@ snapshots: get-symbol-description@1.0.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 get-symbol-description@1.0.2: @@ -11755,11 +11110,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.2: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-tsconfig@4.7.5: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -11773,7 +11124,7 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - github-markdown-css@5.6.1: {} + github-markdown-css@5.7.0: {} github-slugger@2.0.0: {} @@ -11792,22 +11143,23 @@ snapshots: glob-to-regexp@0.3.0: {} - glob@10.3.15: - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.1.1 - path-scurry: 1.11.1 - glob@10.4.1: dependencies: foreground-child: 3.2.0 jackspeak: 3.4.0 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 path-scurry: 1.11.1 + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -11835,7 +11187,7 @@ snapshots: globals@14.0.0: {} - globals@15.6.0: {} + globals@15.11.0: {} globalthis@1.0.3: dependencies: @@ -11853,7 +11205,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -11861,7 +11213,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -11894,7 +11246,7 @@ snapshots: graphemer@1.4.0: {} - graphql@16.8.2: {} + graphql@16.9.0: {} has-bigints@1.0.2: {} @@ -11946,61 +11298,57 @@ snapshots: is-number: 3.0.0 kind-of: 4.0.0 - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 hast-util-from-dom@5.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hastscript: 8.0.0 web-namespaces: 2.0.1 hast-util-from-html-isomorphic@2.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hast-util-from-dom: 5.0.0 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.2 unist-util-remove-position: 5.0.0 - hast-util-from-html@2.0.1: + hast-util-from-html@2.0.2: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 hast-util-from-parse5@8.0.1: dependencies: - '@types/hast': 3.0.3 - '@types/unist': 3.0.2 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 property-information: 6.4.0 - vfile: 6.0.1 + vfile: 6.0.3 vfile-location: 5.0.2 web-namespaces: 2.0.1 hast-util-is-element@3.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hast-util-parse-selector@2.2.5: {} hast-util-parse-selector@4.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hast-util-raw@9.0.1: dependencies: - '@types/hast': 3.0.3 - '@types/unist': 3.0.2 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 hast-util-to-parse5: 8.0.0 @@ -12009,15 +11357,15 @@ snapshots: parse5: 7.1.2 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 hast-util-to-jsx-runtime@2.3.0: dependencies: '@types/estree': 1.0.5 - '@types/hast': 3.0.3 - '@types/unist': 3.0.2 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -12035,7 +11383,7 @@ snapshots: hast-util-to-parse5@8.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 property-information: 6.4.0 @@ -12043,16 +11391,16 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-text@4.0.0: + hast-util-to-text@4.0.2: dependencies: - '@types/hast': 3.0.3 - '@types/unist': 3.0.2 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hastscript@6.0.0: dependencies: @@ -12064,7 +11412,7 @@ snapshots: hastscript@8.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.4.0 @@ -12072,14 +11420,12 @@ snapshots: hastscript@9.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.4.0 space-separated-tokens: 2.0.2 - he@1.2.0: {} - headers-polyfill@4.0.3: {} highlight.js@10.7.3: {} @@ -12106,7 +11452,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color optional: true @@ -12117,7 +11463,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.0.11: {} + husky@9.1.6: {} iconv-lite@0.4.24: dependencies: @@ -12132,15 +11478,14 @@ snapshots: ignore@5.3.1: {} + ignore@5.3.2: {} + image-size@0.5.5: optional: true - immer@10.0.4: {} - - immer@10.1.1: - optional: true + immer@10.1.1: {} - immutable@4.3.6: {} + immutable@4.3.7: {} import-fresh@2.0.0: dependencies: @@ -12154,9 +11499,10 @@ snapshots: import-lazy@3.1.0: {} - import-lazy@4.0.0: {} + import-lazy@4.0.0: + optional: true - import-meta-resolve@4.0.0: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -12180,7 +11526,7 @@ snapshots: internal-slot@1.0.6: dependencies: get-intrinsic: 1.2.2 - hasown: 2.0.0 + hasown: 2.0.2 side-channel: 1.0.4 internal-slot@1.0.7: @@ -12194,14 +11540,14 @@ snapshots: '@formatjs/ecma402-abstract': 1.18.0 '@formatjs/fast-memoize': 2.2.0 '@formatjs/icu-messageformat-parser': 2.7.3 - tslib: 2.6.3 + tslib: 2.7.0 intl-messageformat@9.13.0: dependencies: '@formatjs/ecma402-abstract': 1.11.4 '@formatjs/fast-memoize': 1.2.1 '@formatjs/icu-messageformat-parser': 2.1.0 - tslib: 2.6.3 + tslib: 2.7.0 is-accessor-descriptor@1.0.1: dependencies: @@ -12230,7 +11576,7 @@ snapshots: is-array-buffer@3.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 @@ -12255,20 +11601,20 @@ snapshots: is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 is-buffer@1.1.6: {} is-buffer@2.0.5: {} - is-callable@1.2.7: {} - - is-core-module@2.13.1: + is-bun-module@1.2.1: dependencies: - hasown: 2.0.0 + semver: 7.6.3 + + is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -12363,8 +11709,6 @@ snapshots: is-obj@2.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} is-plain-obj@4.1.0: {} @@ -12383,7 +11727,7 @@ snapshots: is-regex@1.1.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 is-regexp@1.0.0: {} @@ -12392,7 +11736,7 @@ snapshots: is-shared-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-shared-array-buffer@1.0.3: dependencies: @@ -12432,7 +11776,7 @@ snapshots: is-weakref@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-weakset@2.0.3: dependencies: @@ -12469,19 +11813,30 @@ snapshots: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - jackspeak@2.3.6: + iterator.prototype@1.1.3: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@3.4.0: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.0: + jackspeak@4.0.1: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.0: {} + jiti@1.21.6: {} + + jiti@2.3.3: + optional: true jju@1.4.0: {} @@ -12500,7 +11855,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -12542,7 +11897,7 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 - katex@0.16.10: + katex@0.16.11: dependencies: commander: 8.3.0 @@ -12566,12 +11921,8 @@ snapshots: known-css-properties@0.29.0: {} - known-css-properties@0.31.0: {} - known-css-properties@0.34.0: {} - kolorist@1.8.0: {} - language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -12599,46 +11950,50 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.25.1: + lightningcss-darwin-arm64@1.27.0: + optional: true + + lightningcss-darwin-x64@1.27.0: optional: true - lightningcss-darwin-x64@1.25.1: + lightningcss-freebsd-x64@1.27.0: optional: true - lightningcss-freebsd-x64@1.25.1: + lightningcss-linux-arm-gnueabihf@1.27.0: optional: true - lightningcss-linux-arm-gnueabihf@1.25.1: + lightningcss-linux-arm64-gnu@1.27.0: optional: true - lightningcss-linux-arm64-gnu@1.25.1: + lightningcss-linux-arm64-musl@1.27.0: optional: true - lightningcss-linux-arm64-musl@1.25.1: + lightningcss-linux-x64-gnu@1.27.0: optional: true - lightningcss-linux-x64-gnu@1.25.1: + lightningcss-linux-x64-musl@1.27.0: optional: true - lightningcss-linux-x64-musl@1.25.1: + lightningcss-win32-arm64-msvc@1.27.0: optional: true - lightningcss-win32-x64-msvc@1.25.1: + lightningcss-win32-x64-msvc@1.27.0: optional: true - lightningcss@1.25.1: + lightningcss@1.27.0: dependencies: detect-libc: 1.0.3 optionalDependencies: - lightningcss-darwin-arm64: 1.25.1 - lightningcss-darwin-x64: 1.25.1 - lightningcss-freebsd-x64: 1.25.1 - lightningcss-linux-arm-gnueabihf: 1.25.1 - lightningcss-linux-arm64-gnu: 1.25.1 - lightningcss-linux-arm64-musl: 1.25.1 - lightningcss-linux-x64-gnu: 1.25.1 - lightningcss-linux-x64-musl: 1.25.1 - lightningcss-win32-x64-msvc: 1.25.1 + lightningcss-darwin-arm64: 1.27.0 + lightningcss-darwin-x64: 1.27.0 + lightningcss-freebsd-x64: 1.27.0 + lightningcss-linux-arm-gnueabihf: 1.27.0 + lightningcss-linux-arm64-gnu: 1.27.0 + lightningcss-linux-arm64-musl: 1.27.0 + lightningcss-linux-x64-gnu: 1.27.0 + lightningcss-linux-x64-musl: 1.27.0 + lightningcss-win32-arm64-msvc: 1.27.0 + lightningcss-win32-x64-msvc: 1.27.0 lilconfig@2.1.0: {} @@ -12646,27 +12001,27 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@15.2.7: + lint-staged@15.2.10: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.5 + debug: 4.3.7 execa: 8.0.1 lilconfig: 3.1.2 - listr2: 8.2.1 - micromatch: 4.0.7 + listr2: 8.2.4 + micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.4.5 + yaml: 2.5.1 transitivePeerDependencies: - supports-color - listr2@8.2.1: + listr2@8.2.4: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 - log-update: 6.0.0 + log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.0 @@ -12679,13 +12034,6 @@ snapshots: load-tsconfig@0.2.5: {} - load-yaml-file@0.2.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - locate-character@3.0.0: {} locate-path@2.0.0: @@ -12709,10 +12057,6 @@ snapshots: lodash.camelcase@4.3.0: {} - lodash.get@4.4.2: {} - - lodash.isequal@4.5.0: {} - lodash.isplainobject@4.0.6: {} lodash.kebabcase@4.1.1: {} @@ -12739,10 +12083,10 @@ snapshots: dependencies: chalk: 2.4.2 - log-update@6.0.0: + log-update@6.1.0: dependencies: - ansi-escapes: 6.2.1 - cli-cursor: 4.0.0 + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 wrap-ansi: 9.0.0 @@ -12767,6 +12111,8 @@ snapshots: lru-cache@10.2.2: {} + lru-cache@11.0.1: {} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 @@ -12779,14 +12125,15 @@ snapshots: lru-cache@6.0.0: dependencies: yallist: 4.0.0 + optional: true lru-queue@0.1.0: dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 - magic-string@0.30.10: + magic-string@0.30.11: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-dir@2.1.0: dependencies: @@ -12826,7 +12173,7 @@ snapshots: mdast-util-directive@3.0.0: dependencies: '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 mdast-util-to-markdown: 2.1.0 @@ -12846,7 +12193,7 @@ snapshots: mdast-util-from-markdown@2.0.0: dependencies: '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -12919,7 +12266,7 @@ snapshots: mdast-util-math@3.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 devlop: 1.1.0 longest-streak: 3.1.0 @@ -12932,7 +12279,7 @@ snapshots: mdast-util-mdx-expression@2.0.0: dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 @@ -12943,9 +12290,9 @@ snapshots: mdast-util-mdx-jsx@3.0.0: dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 @@ -12961,7 +12308,7 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 @@ -12981,7 +12328,7 @@ snapshots: mdast-util-to-hast@13.0.2: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 @@ -12993,7 +12340,7 @@ snapshots: mdast-util-to-markdown@2.1.0: dependencies: '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.0.0 mdast-util-to-string: 4.0.0 @@ -13007,17 +12354,6 @@ snapshots: mdn-data@2.0.30: {} - memoizee@0.4.15: - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 - memoizee@0.4.17: dependencies: d: 1.0.2 @@ -13142,7 +12478,7 @@ snapshots: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.10 + katex: 0.16.11 micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 @@ -13243,7 +12579,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.5 + debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -13280,12 +12616,7 @@ snapshots: transitivePeerDependencies: - supports-color - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -13297,20 +12628,27 @@ snapshots: mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + mimic-response@2.1.0: optional: true min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 + optional: true minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -13355,33 +12693,29 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} - msw@2.3.1(typescript@5.4.5): + msw@2.4.9(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 3.1.9 - '@mswjs/cookies': 1.1.0 - '@mswjs/interceptors': 0.29.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 3.2.0 + '@mswjs/interceptors': 0.35.9 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 chalk: 4.1.2 - graphql: 16.8.2 + graphql: 16.9.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 - outvariant: 1.4.2 - path-to-regexp: 6.2.2 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 strict-event-emitter: 0.5.1 - type-fest: 4.20.0 + type-fest: 4.26.1 yargs: 17.7.2 optionalDependencies: - typescript: 5.4.5 - - muggle-string@0.3.1: {} + typescript: 5.6.3 mute-stream@1.0.0: {} @@ -13436,10 +12770,12 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp-build@4.8.1: {} + node-gyp-build@4.8.2: {} node-releases@2.0.14: {} + node-releases@2.0.18: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -13528,20 +12864,14 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 object.groupby@1.0.3: dependencies: call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - - object.hasown@1.1.4: - dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 - es-object-atoms: 1.0.0 object.pick@1.3.0: dependencies: @@ -13565,6 +12895,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -13578,7 +12912,7 @@ snapshots: outdent@0.5.0: {} - outvariant@1.4.2: {} + outvariant@1.4.3: {} p-filter@2.1.0: dependencies: @@ -13598,7 +12932,7 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 p-locate@2.0.0: dependencies: @@ -13622,6 +12956,10 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + + package-manager-detector@0.2.2: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -13662,7 +13000,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -13702,7 +13040,12 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.1 - path-to-regexp@6.2.2: {} + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.1 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} path-type@3.0.0: dependencies: @@ -13729,12 +13072,12 @@ snapshots: picocolors@0.2.1: {} - picocolors@1.0.0: {} - - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + pidtree@0.3.1: {} pidtree@0.6.0: {} @@ -13745,25 +13088,21 @@ snapshots: pirates@4.0.6: {} - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - posix-character-classes@0.1.1: {} possible-typed-array-names@1.0.0: {} - postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39): + postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39): dependencies: htmlparser2: 3.10.1 postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) - postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39): + postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.7 postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) transitivePeerDependencies: - supports-color @@ -13771,48 +13110,40 @@ snapshots: dependencies: postcss: 7.0.39 - postcss-less@6.0.0(postcss@8.4.38): + postcss-less@6.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-load-config@3.1.4(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)): + postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2) - - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)): - dependencies: - lilconfig: 3.1.2 - yaml: 2.4.5 - optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6) + postcss: 8.4.47 + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4) optional: true - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)): + postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3)): dependencies: - lilconfig: 3.1.2 - yaml: 2.4.5 + lilconfig: 2.1.0 + yaml: 1.10.2 optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5) - optional: true + postcss: 8.4.47 + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3) - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)): + postcss-load-config@6.0.1(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2) + jiti: 2.3.3 + postcss: 8.4.47 + tsx: 4.19.1 + yaml: 2.5.1 - postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39): + postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39): dependencies: postcss: 7.0.39 - postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) remark: 10.0.1 unist-util-find-all-after: 1.0.5 @@ -13827,17 +13158,19 @@ snapshots: postcss-resolve-nested-selector@0.1.1: {} + postcss-resolve-nested-selector@0.1.6: {} + postcss-safe-parser@4.0.2: dependencies: postcss: 7.0.39 - postcss-safe-parser@6.0.0(postcss@8.4.38): + postcss-safe-parser@6.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-safe-parser@7.0.0(postcss@8.4.38): + postcss-safe-parser@7.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-sass@0.3.5: dependencies: @@ -13848,9 +13181,9 @@ snapshots: dependencies: postcss: 7.0.39 - postcss-scss@4.0.9(postcss@8.4.38): + postcss-scss@4.0.9(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-selector-parser@3.1.2: dependencies: @@ -13863,7 +13196,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@6.1.0: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -13873,18 +13206,18 @@ snapshots: lodash: 4.17.21 postcss: 7.0.39 - postcss-sorting@8.0.2(postcss@8.4.38): + postcss-sorting@8.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39): + postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39): dependencies: postcss: 7.0.39 optionalDependencies: - postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) - postcss-jsx: 0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) + postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) + postcss-jsx: 0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) postcss-less: 3.1.4 - postcss-markdown: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) + postcss-markdown: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) postcss-scss: 2.1.1 postcss-value-parser@3.3.1: {} @@ -13896,18 +13229,11 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.4.38: + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - - preferred-pm@3.1.3: - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 + picocolors: 1.1.0 + source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -13915,21 +13241,21 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-packagejson@2.5.0(prettier@3.3.2): + prettier-plugin-packagejson@2.5.3(prettier@3.3.3): dependencies: - sort-package-json: 2.10.0 - synckit: 0.9.0 + sort-package-json: 2.10.1 + synckit: 0.9.2 optionalDependencies: - prettier: 3.3.2 + prettier: 3.3.3 - prettier-plugin-svelte@3.2.5(prettier@3.3.2)(svelte@4.2.18): + prettier-plugin-svelte@3.2.7(prettier@3.3.3)(svelte@4.2.19): dependencies: - prettier: 3.3.2 - svelte: 4.2.18 + prettier: 3.3.3 + svelte: 4.2.19 prettier@2.8.8: {} - prettier@3.3.2: {} + prettier@3.3.3: {} prismjs@1.27.0: {} @@ -13956,6 +13282,8 @@ snapshots: pseudomap@1.0.2: {} + psl@1.9.0: {} + pug-attrs@3.0.0: dependencies: constantinople: 4.0.1 @@ -14025,169 +13353,167 @@ snapshots: punycode@2.3.1: {} - qrcode.react@3.1.0(react@18.3.1): - dependencies: - react: 18.3.1 + querystringify@2.2.0: {} queue-microtask@1.2.3: {} quick-lru@1.1.0: {} - rc-cascader@3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-cascader@3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-collapse@3.7.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-collapse@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-dialog@9.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rc-dropdown@4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-field-form@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-field-form@2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/async-validator': 5.0.4 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-image@7.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-dialog: 9.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-input-number@9.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-input-number@9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 - rc-input: 1.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-input@1.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-input@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-mentions@2.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-mentions@2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-input: 1.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-textarea: 1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-menu@9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-menu@9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-motion@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-motion@2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-notification@5.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-notification@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rc-overflow@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-pagination@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-picker@4.5.0(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-picker@4.6.15(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -14195,11 +13521,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - dayjs: 1.11.11 + dayjs: 1.11.13 rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -14207,7 +13533,7 @@ snapshots: rc-rate@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -14215,37 +13541,37 @@ snapshots: rc-resize-observer@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) resize-observer-polyfill: 1.5.1 - rc-segmented@2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-select@14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-select@14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-slider@10.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-slider@11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -14253,7 +13579,7 @@ snapshots: rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -14261,98 +13587,91 @@ snapshots: rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-table@7.45.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-table@7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tabs@15.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-tabs@15.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-menu: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-textarea@1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-input: 1.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tooltip@6.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 - '@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.7 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tree-select@5.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-tree-select@5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-select: 14.14.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-tree: 5.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-tree@5.8.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-tree@5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 - rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-virtual-list: 3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-upload@4.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-util@5.40.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.24.5 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.3.1 - rc-util@5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 - rc-virtual-list@3.14.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-virtual-list@3.14.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.7 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -14369,10 +13688,10 @@ snapshots: react-is@18.3.1: {} - react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.11)(react@18.3.1): dependencies: - '@types/hast': 3.0.3 - '@types/react': 18.3.3 + '@types/hast': 3.0.4 + '@types/react': 18.3.11 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -14382,13 +13701,13 @@ snapshots: remark-rehype: 11.1.0 unified: 11.0.4 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: - supports-color react-syntax-highlighter@15.5.0(react@18.3.1): dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.25.6 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -14427,6 +13746,8 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.0.2: {} + redent@2.0.0: dependencies: indent-string: 3.2.0 @@ -14440,7 +13761,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.4 - which-builtin-type: 1.1.3 + which-builtin-type: 1.1.4 refractor@3.6.0: dependencies: @@ -14457,7 +13778,7 @@ snapshots: regexp.prototype.flags@1.5.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 set-function-name: 2.0.1 @@ -14468,21 +13789,28 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - rehype-katex@7.0.0: + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + rehype-katex@7.0.1: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.0 - katex: 0.16.10 + hast-util-to-text: 4.0.2 + katex: 0.16.11 unist-util-visit-parents: 6.0.1 - vfile: 6.0.1 + vfile: 6.0.3 rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 hast-util-raw: 9.0.1 - vfile: 6.0.1 + vfile: 6.0.3 remark-breaks@4.0.0: dependencies: @@ -14548,11 +13876,11 @@ snapshots: remark-rehype@11.1.0: dependencies: - '@types/hast': 3.0.3 + '@types/hast': 3.0.4 '@types/mdast': 4.0.3 mdast-util-to-hast: 13.0.2 unified: 11.0.4 - vfile: 6.0.1 + vfile: 6.0.3 remark-stringify@11.0.0: dependencies: @@ -14593,6 +13921,8 @@ snapshots: require-from-string@2.0.2: {} + requires-port@1.0.0: {} + resize-observer-polyfill@1.5.1: {} resolve-from@3.0.0: {} @@ -14605,27 +13935,22 @@ snapshots: resolve-url@0.2.1: {} - resolve@1.19.0: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@4.0.0: + restore-cursor@5.1.0: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + onetime: 7.0.0 + signal-exit: 4.1.0 ret@0.1.15: {} @@ -14646,30 +13971,53 @@ snapshots: glob: 7.2.3 optional: true - rimraf@5.0.7: + rimraf@6.0.1: dependencies: - glob: 10.3.15 + glob: 11.0.0 + package-json-from-dist: 1.0.0 - rollup@4.18.0: + rollup@4.22.4: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.22.4 + '@rollup/rollup-android-arm64': 4.22.4 + '@rollup/rollup-darwin-arm64': 4.22.4 + '@rollup/rollup-darwin-x64': 4.22.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.22.4 + '@rollup/rollup-linux-arm-musleabihf': 4.22.4 + '@rollup/rollup-linux-arm64-gnu': 4.22.4 + '@rollup/rollup-linux-arm64-musl': 4.22.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4 + '@rollup/rollup-linux-riscv64-gnu': 4.22.4 + '@rollup/rollup-linux-s390x-gnu': 4.22.4 + '@rollup/rollup-linux-x64-gnu': 4.22.4 + '@rollup/rollup-linux-x64-musl': 4.22.4 + '@rollup/rollup-win32-arm64-msvc': 4.22.4 + '@rollup/rollup-win32-ia32-msvc': 4.22.4 + '@rollup/rollup-win32-x64-msvc': 4.22.4 + fsevents: 2.3.3 + + rollup@4.24.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -14682,7 +14030,7 @@ snapshots: safe-array-concat@1.0.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 @@ -14698,7 +14046,7 @@ snapshots: safe-regex-test@1.0.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 is-regex: 1.1.4 @@ -14712,7 +14060,7 @@ snapshots: dependencies: ret: 0.1.15 - safe-stable-stringify@2.4.3: {} + safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} @@ -14723,18 +14071,11 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 - sass@1.77.5: - dependencies: - chokidar: 3.6.0 - immutable: 4.3.6 - source-map-js: 1.2.0 - - sass@1.77.6: + sass@1.79.4: dependencies: - chokidar: 3.6.0 - immutable: 4.3.6 - source-map-js: 1.2.0 - optional: true + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 sax@1.3.0: {} @@ -14755,12 +14096,9 @@ snapshots: semver@7.5.4: dependencies: lru-cache: 6.0.0 + optional: true - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.2: {} + semver@7.6.3: {} set-blocking@2.0.0: optional: true @@ -14817,7 +14155,7 @@ snapshots: side-channel@1.0.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 object-inspect: 1.13.1 @@ -14826,7 +14164,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@3.0.7: {} @@ -14895,14 +14233,14 @@ snapshots: sorcery@0.11.1: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 buffer-crc32: 1.0.0 minimist: 1.2.8 sander: 0.5.1 sort-object-keys@1.1.3: {} - sort-package-json@2.10.0: + sort-package-json@2.10.1: dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -14910,10 +14248,10 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 - semver: 7.6.0 + semver: 7.6.3 sort-object-keys: 1.1.3 - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-resolve@0.5.3: dependencies: @@ -15005,9 +14343,9 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.1.0: + string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 + emoji-regex: 10.4.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 @@ -15027,7 +14365,7 @@ snapshots: gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 side-channel: 1.0.6 @@ -15037,24 +14375,29 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.3 + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + string.prototype.trim@1.2.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 string.prototype.trimend@1.0.7: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 string.prototype.trimend@1.0.8: dependencies: @@ -15064,9 +14407,9 @@ snapshots: string.prototype.trimstart@1.0.7: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 string.prototype.trimstart@1.0.8: dependencies: @@ -15100,7 +14443,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-bom@3.0.0: {} @@ -15124,11 +14467,11 @@ snapshots: stylelint-config-ali@2.1.1(stylelint@9.10.1): dependencies: - postcss: 8.4.38 - postcss-less: 6.0.0(postcss@8.4.38) - postcss-scss: 4.0.9(postcss@8.4.38) + postcss: 8.4.47 + postcss-less: 6.0.0(postcss@8.4.47) + postcss-scss: 4.0.9(postcss@8.4.47) stylelint: 9.10.1 - stylelint-less: 3.0.1(postcss@8.4.38)(stylelint@9.10.1) + stylelint-less: 3.0.1(postcss@8.4.47)(stylelint@9.10.1) stylelint-scss: 6.2.1(stylelint@9.10.1) stylelint-config-rational-order@0.1.2: @@ -15151,9 +14494,9 @@ snapshots: dependencies: stylelint: 9.10.1 - stylelint-less@3.0.1(postcss@8.4.38)(stylelint@9.10.1): + stylelint-less@3.0.1(postcss@8.4.47)(stylelint@9.10.1): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-resolve-nested-selector: 0.1.1 postcss-value-parser: 4.2.0 stylelint: 9.10.1 @@ -15167,13 +14510,13 @@ snapshots: stylelint-order@6.0.4(stylelint@9.10.1): dependencies: - postcss: 8.4.38 - postcss-sorting: 8.0.2(postcss@8.4.38) + postcss: 8.4.47 + postcss-sorting: 8.0.2(postcss@8.4.47) stylelint: 9.10.1 - stylelint-prettier@5.0.0(prettier@3.3.2)(stylelint@9.10.1): + stylelint-prettier@5.0.2(prettier@3.3.3)(stylelint@9.10.1): dependencies: - prettier: 3.3.2 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 stylelint: 9.10.1 @@ -15186,44 +14529,44 @@ snapshots: postcss-value-parser: 4.2.0 stylelint: 9.10.1 - stylelint@16.6.1(typescript@5.5.2): + stylelint@16.9.0(typescript@5.6.3): dependencies: - '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) - '@csstools/css-tokenizer': 2.3.1 - '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1) - '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.0) + '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) + '@csstools/css-tokenizer': 3.0.1 + '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) + '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.2) '@dual-bundle/import-meta-resolve': 4.1.0 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.5.2) + cosmiconfig: 9.0.0(typescript@5.6.3) css-functions-list: 3.2.2 css-tree: 2.3.1 - debug: 4.3.5 + debug: 4.3.7 fast-glob: 3.3.2 fastest-levenshtein: 1.0.16 - file-entry-cache: 9.0.0 + file-entry-cache: 9.1.0 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 html-tags: 3.3.1 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.31.0 + known-css-properties: 0.34.0 mathml-tag-names: 2.1.3 meow: 13.2.0 - micromatch: 4.0.7 + micromatch: 4.0.8 normalize-path: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 7.0.0(postcss@8.4.38) - postcss-selector-parser: 6.1.0 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 7.0.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 strip-ansi: 7.1.0 - supports-hyperlinks: 3.0.0 + supports-hyperlinks: 3.1.0 svg-tags: 1.0.0 table: 6.8.2 write-file-atomic: 5.0.1 @@ -15237,7 +14580,7 @@ snapshots: balanced-match: 1.0.2 chalk: 2.4.2 cosmiconfig: 5.2.1 - debug: 4.3.4 + debug: 4.3.7 execall: 1.0.0 file-entry-cache: 4.0.0 get-stdin: 6.0.0 @@ -15258,10 +14601,10 @@ snapshots: normalize-selector: 0.2.0 pify: 4.0.1 postcss: 7.0.39 - postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) - postcss-jsx: 0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) + postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) + postcss-jsx: 0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) postcss-less: 3.1.4 - postcss-markdown: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39) + postcss-markdown: 0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39) postcss-media-query-parser: 0.2.3 postcss-reporter: 6.0.1 postcss-resolve-nested-selector: 0.1.1 @@ -15269,7 +14612,7 @@ snapshots: postcss-sass: 0.3.5 postcss-scss: 2.1.1 postcss-selector-parser: 3.1.2 - postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.38))(postcss@8.4.38))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) + postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-jsx@0.36.4(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-markdown@0.36.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.4.47))(postcss@8.4.47))(postcss@7.0.39))(postcss-scss@2.1.1)(postcss@7.0.39) postcss-value-parser: 3.3.1 resolve-from: 4.0.0 signal-exit: 3.0.7 @@ -15283,12 +14626,12 @@ snapshots: transitivePeerDependencies: - supports-color - stylis@4.3.2: {} + stylis@4.3.4: {} stylus@0.63.0: dependencies: '@adobe/css-tools': 4.3.3 - debug: 4.3.5 + debug: 4.3.7 glob: 7.2.3 sax: 1.3.0 source-map: 0.7.4 @@ -15309,9 +14652,9 @@ snapshots: dependencies: postcss: 7.0.39 - sugarss@4.0.1(postcss@8.4.38): + sugarss@4.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 supports-color@5.5.0: dependencies: @@ -15324,29 +14667,42 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 + optional: true - supports-hyperlinks@3.0.0: + supports-hyperlinks@3.1.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 supports-preserve-symlinks-flag@1.0.0: {} - svelte-eslint-parser@0.39.2(svelte@4.2.18): + svelte-check@4.0.4(picomatch@4.0.2)(svelte@4.2.19)(typescript@5.6.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + chokidar: 4.0.1 + fdir: 6.4.0(picomatch@4.0.2) + picocolors: 1.1.0 + sade: 1.8.1 + svelte: 4.2.19 + typescript: 5.6.3 + transitivePeerDependencies: + - picomatch + + svelte-eslint-parser@0.41.1(svelte@4.2.19): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.38 - postcss-scss: 4.0.9(postcss@8.4.38) + postcss: 8.4.47 + postcss-scss: 4.0.9(postcss@8.4.47) optionalDependencies: - svelte: 4.2.18 + svelte: 4.2.19 - svelte-hmr@0.16.0(svelte@4.2.18): + svelte-hmr@0.16.0(svelte@4.2.19): dependencies: - svelte: 4.2.18 + svelte: 4.2.19 - svelte-i18n@3.7.4(svelte@4.2.18): + svelte-i18n@3.7.4(svelte@4.2.19): dependencies: cli-color: 2.0.4 deepmerge: 4.3.1 @@ -15354,108 +14710,68 @@ snapshots: estree-walker: 2.0.2 intl-messageformat: 9.13.0 sade: 1.8.1 - svelte: 4.2.18 + svelte: 4.2.19 tiny-glob: 0.2.9 - svelte-i18n@4.0.0(svelte@4.2.18): + svelte-i18n@4.0.0(svelte@4.2.19): dependencies: - cli-color: 2.0.3 + cli-color: 2.0.4 deepmerge: 4.3.1 - esbuild: 0.19.10 + esbuild: 0.19.12 estree-walker: 2.0.2 intl-messageformat: 10.5.8 sade: 1.8.1 - svelte: 4.2.18 + svelte: 4.2.19 tiny-glob: 0.2.9 - svelte-preprocess@5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.10 - sorcery: 0.11.1 - strip-indent: 3.0.0 - svelte: 4.2.18 - optionalDependencies: - '@babel/core': 7.24.7 - coffeescript: 2.7.0 - less: 4.2.0 - postcss: 8.4.38 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6)) - pug: 3.0.3 - sass: 1.77.5 - stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - typescript: 5.4.5 - - svelte-preprocess@5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.10 - sorcery: 0.11.1 - strip-indent: 3.0.0 - svelte: 4.2.18 - optionalDependencies: - '@babel/core': 7.24.7 - coffeescript: 2.7.0 - less: 4.2.0 - postcss: 8.4.38 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5)) - pug: 3.0.3 - sass: 1.77.5 - stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - typescript: 5.4.5 - - svelte-preprocess@5.1.4(@babel/core@7.24.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)))(postcss@8.4.38)(pug@3.0.3)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))(svelte@4.2.18)(typescript@5.4.5): + svelte-preprocess@5.1.4(@babel/core@7.25.7)(coffeescript@2.7.0)(less@4.2.0)(postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)))(postcss@8.4.47)(pug@3.0.3)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))(svelte@4.2.19)(typescript@5.6.3): dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.10 + magic-string: 0.30.11 sorcery: 0.11.1 strip-indent: 3.0.0 - svelte: 4.2.18 + svelte: 4.2.19 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.7 coffeescript: 2.7.0 less: 4.2.0 - postcss: 8.4.38 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)) + postcss: 8.4.47 + postcss-load-config: 3.1.4(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4)) pug: 3.0.3 - sass: 1.77.5 + sass: 1.79.4 stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - typescript: 5.4.5 + sugarss: 4.0.1(postcss@8.4.47) + typescript: 5.6.3 - svelte@4.2.18: + svelte@4.2.19: dependencies: '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@types/estree': 1.0.5 - acorn: 8.12.0 - aria-query: 5.3.0 - axobject-query: 4.0.0 + acorn: 8.12.1 + aria-query: 5.3.1 + axobject-query: 4.1.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.10 + magic-string: 0.30.11 periscopic: 3.1.0 svg-tags@1.0.0: {} - synckit@0.8.8: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 - synckit@0.9.0: + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 table@5.4.6: dependencies: @@ -15466,7 +14782,7 @@ snapshots: table@6.8.2: dependencies: - ajv: 8.16.0 + ajv: 8.17.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -15500,15 +14816,10 @@ snapshots: dependencies: any-promise: 1.3.0 - throttle-debounce@5.0.0: {} + throttle-debounce@5.0.2: {} through@2.3.8: {} - timers-ext@0.1.7: - dependencies: - es5-ext: 0.10.62 - next-tick: 1.1.0 - timers-ext@0.1.8: dependencies: es5-ext: 0.10.64 @@ -15519,6 +14830,13 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 + tinyexec@0.3.0: {} + + tinyglobby@0.2.6: + dependencies: + fdir: 6.3.0(picomatch@4.0.2) + picomatch: 4.0.2 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -15549,6 +14867,13 @@ snapshots: token-stream@1.0.0: {} + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} tr46@1.0.1: @@ -15569,72 +14894,51 @@ snapshots: trough@2.1.0: {} - ts-api-utils@1.3.0(typescript@5.5.2): + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: - typescript: 5.5.2 + typescript: 5.6.3 ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.101 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.6 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.6.5 - - ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.9 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 18.19.55 + acorn: 8.12.1 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.6.5 - optional: true + '@swc/core': 1.7.26 - ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2): + ts-node@10.9.2(@swc/core@1.7.26)(@types/node@22.7.5)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.9 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 22.7.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.2 + typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.6.5 + '@swc/core': 1.7.26 optional: true tsconfig-paths@3.15.0: @@ -15648,37 +14952,41 @@ snapshots: tslib@2.6.2: {} - tslib@2.6.3: {} + tslib@2.7.0: {} - tsup@8.1.0(@microsoft/api-extractor@7.47.0(@types/node@20.14.9))(@swc/core@1.6.5)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2))(typescript@5.5.2): + tsup@8.3.0(@microsoft/api-extractor@7.47.9(@types/node@22.7.5))(@swc/core@1.7.26)(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.5.1): dependencies: - bundle-require: 4.2.1(esbuild@0.21.5) + bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.5 - esbuild: 0.21.5 + consola: 3.2.3 + debug: 4.3.7 + esbuild: 0.23.1 execa: 5.1.1 - globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.6.5)(@types/node@20.14.9)(typescript@5.5.2)) + picocolors: 1.1.0 + postcss-load-config: 6.0.1(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1) resolve-from: 5.0.0 - rollup: 4.18.0 + rollup: 4.22.4 source-map: 0.8.0-beta.0 sucrase: 3.35.0 + tinyglobby: 0.2.6 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.47.0(@types/node@20.14.9) - '@swc/core': 1.6.5 - postcss: 8.4.38 - typescript: 5.5.2 + '@microsoft/api-extractor': 7.47.9(@types/node@22.7.5) + '@swc/core': 1.7.26 + postcss: 8.4.47 + typescript: 5.6.3 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml - tsx@4.15.7: + tsx@4.19.1: dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 + esbuild: 0.23.1 + get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 @@ -15690,17 +14998,13 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.20.0: {} - - type@1.2.0: {} - - type@2.7.2: {} + type-fest@4.26.1: {} type@2.7.3: {} typed-array-buffer@1.0.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 @@ -15712,7 +15016,7 @@ snapshots: typed-array-byte-length@1.0.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -15728,7 +15032,7 @@ snapshots: typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -15744,7 +15048,7 @@ snapshots: typed-array-length@1.0.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.12 @@ -15757,56 +15061,61 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - types-kit@0.0.11(typescript@5.5.2): + types-kit@0.0.11(typescript@5.6.3): dependencies: - typescript: 5.5.2 + typescript: 5.6.3 - typescript-eslint@7.14.1(eslint@9.5.0)(typescript@5.5.2): + typescript-eslint@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/parser': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/utils': 7.14.1(eslint@9.5.0)(typescript@5.5.2) - eslint: 9.5.0 + '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: + - eslint - supports-color - typescript-json-schema@0.64.0(@swc/core@1.6.5): + typescript-json-schema@0.65.1(@swc/core@1.7.26): dependencies: '@types/json-schema': 7.0.15 - '@types/node': 16.18.101 + '@types/node': 18.19.55 glob: 7.2.3 path-equal: 1.2.5 - safe-stable-stringify: 2.4.3 - ts-node: 10.9.2(@swc/core@1.6.5)(@types/node@16.18.101)(typescript@5.1.6) - typescript: 5.1.6 + safe-stable-stringify: 2.5.0 + ts-node: 10.9.2(@swc/core@1.7.26)(@types/node@18.19.55)(typescript@5.5.4) + typescript: 5.5.4 yargs: 17.7.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - typescript@5.1.6: {} - - typescript@5.4.2: {} + typescript@5.4.2: + optional: true - typescript@5.4.5: {} + typescript@5.5.4: {} - typescript@5.5.2: {} + typescript@5.6.3: {} unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 undici-types@5.26.5: {} + undici-types@6.19.8: {} + undici@5.28.3: dependencies: '@fastify/busboy': 2.1.1 + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + unherit@1.1.3: dependencies: inherits: 2.0.4 @@ -15816,13 +15125,13 @@ snapshots: unified@11.0.4: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 trough: 2.1.0 - vfile: 6.0.1 + vfile: 6.0.3 unified@7.1.0: dependencies: @@ -15846,7 +15155,7 @@ snapshots: unist-util-find-after@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-find-all-after@1.0.5: @@ -15857,11 +15166,11 @@ snapshots: unist-util-is@6.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-remove-position@1.1.4: dependencies: @@ -15869,14 +15178,14 @@ snapshots: unist-util-remove-position@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-visit: 5.0.0 unist-util-stringify-position@1.1.2: {} unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-visit-parents@2.1.2: dependencies: @@ -15884,7 +15193,7 @@ snapshots: unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit@1.4.1: @@ -15893,7 +15202,7 @@ snapshots: unist-util-visit@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 @@ -15901,6 +15210,8 @@ snapshots: universalify@0.1.2: {} + universalify@0.2.0: {} + unset-value@1.0.0: dependencies: has-value: 0.3.1 @@ -15910,13 +15221,13 @@ snapshots: dependencies: browserslist: 4.22.3 escalade: 3.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 - update-browserslist-db@1.0.16(browserslist@4.23.1): + update-browserslist-db@1.1.1(browserslist@4.24.0): dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 uri-js@4.4.1: dependencies: @@ -15924,7 +15235,12 @@ snapshots: urix@0.1.0: {} - use-sync-external-store@1.2.0(react@18.3.1): + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-sync-external-store@1.2.2(react@18.3.1): dependencies: react: 18.3.1 @@ -15932,8 +15248,6 @@ snapshots: util-deprecate@1.0.2: {} - uuid@8.3.2: {} - v8-compile-cache-lib@3.0.1: {} validate-npm-package-license@3.0.4: @@ -15941,14 +15255,12 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validator@13.12.0: {} - vfile-location@2.0.6: {} vfile-location@5.0.2: dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 + '@types/unist': 3.0.3 + vfile: 6.0.3 vfile-message@1.1.1: dependencies: @@ -15956,7 +15268,7 @@ snapshots: vfile-message@4.0.2: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 vfile@3.0.1: @@ -15966,101 +15278,32 @@ snapshots: unist-util-stringify-position: 1.1.2 vfile-message: 1.1.1 - vfile@6.0.1: + vfile@6.0.3: dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 + '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-dts@3.9.1(@types/node@20.14.9)(rollup@4.18.0)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))): - dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.14.9) - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - '@vue/language-core': 1.8.27(typescript@5.5.2) - debug: 4.3.4 - kolorist: 1.8.0 - magic-string: 0.30.10 - typescript: 5.5.2 - vue-tsc: 1.8.27(typescript@5.5.2) - optionalDependencies: - vite: 5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-plugin-lib-inject-css@2.1.1(vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))): - dependencies: - '@ast-grep/napi': 0.22.3 - magic-string: 0.30.10 - picocolors: 1.0.1 - vite: 5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) - - vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)): - dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.18.0 - optionalDependencies: - '@types/node': 16.18.101 - fsevents: 2.3.3 - less: 4.2.0 - lightningcss: 1.25.1 - sass: 1.77.5 - stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - - vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)): - dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.18.0 - optionalDependencies: - '@types/node': 20.14.9 - fsevents: 2.3.3 - less: 4.2.0 - lightningcss: 1.25.1 - sass: 1.77.5 - stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - - vite@5.3.1(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.6)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)): + vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 - rollup: 4.18.0 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 18.19.55 fsevents: 2.3.3 less: 4.2.0 - lightningcss: 1.25.1 - sass: 1.77.6 + lightningcss: 1.27.0 + sass: 1.79.4 stylus: 0.63.0 - sugarss: 4.0.1(postcss@8.4.38) - - vitefu@0.2.5(vite@5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))): - optionalDependencies: - vite: 5.2.13(@types/node@16.18.101)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) + sugarss: 4.0.1(postcss@8.4.47) - vitefu@0.2.5(vite@5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38))): + vitefu@0.2.5(vite@5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47))): optionalDependencies: - vite: 5.2.13(@types/node@20.14.9)(less@4.2.0)(lightningcss@1.25.1)(sass@1.77.5)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.38)) + vite: 5.4.8(@types/node@18.19.55)(less@4.2.0)(lightningcss@1.27.0)(sass@1.79.4)(stylus@0.63.0)(sugarss@4.0.1(postcss@8.4.47)) void-elements@3.1.0: {} - vue-template-compiler@2.7.16: - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - vue-tsc@1.8.27(typescript@5.5.2): - dependencies: - '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.5.2) - semver: 7.6.2 - typescript: 5.5.2 - - wavesurfer.js@7.8.0: {} + wavesurfer.js@7.8.6: {} web-namespaces@2.0.1: {} @@ -16089,7 +15332,7 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -16111,15 +15354,10 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 - which-pm@2.0.0: - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - which-typed-array@1.1.13: dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -16151,9 +15389,9 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - assert-never: 1.2.1 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + assert-never: 1.3.0 babel-walk: 3.0.0-canary-5 word-wrap@1.2.5: {} @@ -16179,7 +15417,7 @@ snapshots: wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 7.1.0 + string-width: 7.2.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} @@ -16193,7 +15431,7 @@ snapshots: dependencies: mkdirp: 0.5.6 - ws@8.17.0(bufferutil@4.0.8): + ws@8.18.0(bufferutil@4.0.8): optionalDependencies: bufferutil: 4.0.8 @@ -16207,11 +15445,12 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} + yallist@4.0.0: + optional: true yaml@1.10.2: {} - yaml@2.4.5: {} + yaml@2.5.1: {} yargs-parser@10.1.0: dependencies: @@ -16233,27 +15472,21 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} + yocto-queue@1.1.1: {} - yootils@0.3.1: {} + yoctocolors-cjs@2.1.2: {} - z-schema@5.0.5: - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.12.0 - optionalDependencies: - commander: 9.5.0 + yootils@0.3.1: {} - zrender@5.5.0: + zrender@5.6.0: dependencies: tslib: 2.3.0 - zustand@4.5.2(@types/react@18.3.3)(immer@10.1.1)(react@18.3.1): + zustand@4.5.5(@types/react@18.3.11)(immer@10.1.1)(react@18.3.1): dependencies: - use-sync-external-store: 1.2.0(react@18.3.1) + use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.11 immer: 10.1.1 react: 18.3.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 88203ca0..8030269a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,4 +3,6 @@ packages: - 'config/*' # for https://github.com/gradio-app/gradio/issues/8162 - 'frontend' - - 'frontend/*' + - 'frontend/base' + - 'frontend/antd' + - 'frontend/legacy/*' diff --git a/pyproject.toml b/pyproject.toml index 00d29e42..c9501f4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "hatchling.build" [project] name = "modelscope_studio" -version = "0.5.2" +version = "1.0.0-beta.3" description = "A set of extension component, inluding components for conversational input and display in multimodal scenarios, as well as more components for vertical scenarios." readme = "README.md" license = "Apache-2.0" @@ -17,7 +17,8 @@ authors = [{ name = "YOUR NAME", email = "YOUREMAIL@domain.com" }] keywords = [ "gradio-custom-component", "modelscope-studio", - "gradio-template-Chatbot", + 'antd', + 'gradio-antd', ] # Add dependencies here dependencies = ["gradio>=4.0,<6.0"] @@ -42,17 +43,163 @@ dev = ["build", "twine"] [tool.hatch.build] artifacts = [ "*.pyi", - "backend/modelscope_studio/components/Chatbot/templates", - "backend/modelscope_studio/components/Flow/templates", - "backend/modelscope_studio/components/MultimodalInput/templates", - "backend/modelscope_studio/components/Markdown/templates", - "backend/modelscope_studio/components/WaterfallGallery/templates", - "/backend/modelscope_studio/components/Lifecycle/templates", - "/backend/modelscope_studio/components/Chatbot/templates", - "/backend/modelscope_studio/components/Flow/templates", - "/backend/modelscope_studio/components/Markdown/templates", - "/backend/modelscope_studio/components/MultimodalInput/templates", - "/backend/modelscope_studio/components/WaterfallGallery/templates", + "backend/modelscope_studio/components/legacy/Chatbot/templates", + "backend/modelscope_studio/components/legacy/Flow/templates", + "backend/modelscope_studio/components/legacy/MultimodalInput/templates", + "backend/modelscope_studio/components/legacy/Markdown/templates", + "backend/modelscope_studio/components/legacy/WaterfallGallery/templates", + "/backend/modelscope_studio/components/legacy/Lifecycle/templates", + "/backend/modelscope_studio/components/antd/button/templates", + "/backend/modelscope_studio/components/antd/card/templates", + "/backend/modelscope_studio/components/antd/card/grid/templates", + "/backend/modelscope_studio/components/antd/card/meta/templates", + "/backend/modelscope_studio/components/antd/config_provider/templates", + "/backend/modelscope_studio/components/base/fragment/templates", + "/backend/modelscope_studio/components/base/each/templates", + "/backend/modelscope_studio/components/base/slot/templates", + "/backend/modelscope_studio/components/base/application/templates", + "/backend/modelscope_studio/components/antd/message/templates", + "/backend/modelscope_studio/components/antd/spin/templates", + "/backend/modelscope_studio/components/antd/upload/templates", + "/backend/modelscope_studio/components/antd/icon/templates", + "/backend/modelscope_studio/components/antd/icon/iconfont_provider/templates", + "/backend/modelscope_studio/components/antd/button/group/templates", + "/backend/modelscope_studio/components/antd/float_button/templates", + "/backend/modelscope_studio/components/antd/affix/templates", + "/backend/modelscope_studio/components/base/filter/templates", + "/backend/modelscope_studio/components/antd/float_button/back_top/templates", + "/backend/modelscope_studio/components/antd/float_button/group/templates", + "/backend/modelscope_studio/components/antd/typography/link/templates", + "/backend/modelscope_studio/components/antd/typography/paragraph/templates", + "/backend/modelscope_studio/components/antd/typography/text/templates", + "/backend/modelscope_studio/components/antd/typography/title/templates", + "/backend/modelscope_studio/components/antd/anchor/templates", + "/backend/modelscope_studio/components/antd/anchor/item/templates", + "/backend/modelscope_studio/components/antd/breadcrumb/templates", + "/backend/modelscope_studio/components/antd/breadcrumb/item/templates", + "/backend/modelscope_studio/components/antd/grid/col/templates", + "/backend/modelscope_studio/components/antd/divider/templates", + "/backend/modelscope_studio/components/antd/dropdown/templates", + "/backend/modelscope_studio/components/antd/dropdown/button/templates", + "/backend/modelscope_studio/components/antd/flex/templates", + "/backend/modelscope_studio/components/antd/layout/templates", + "/backend/modelscope_studio/components/antd/layout/content/templates", + "/backend/modelscope_studio/components/antd/layout/footer/templates", + "/backend/modelscope_studio/components/antd/layout/header/templates", + "/backend/modelscope_studio/components/antd/layout/sider/templates", + "/backend/modelscope_studio/components/antd/menu/templates", + "/backend/modelscope_studio/components/antd/menu/item/templates", + "/backend/modelscope_studio/components/antd/grid/row/templates", + "/backend/modelscope_studio/components/antd/space/templates", + "/backend/modelscope_studio/components/antd/space/compact/templates", + "/backend/modelscope_studio/components/base/div/templates", + "/backend/modelscope_studio/components/antd/pagination/templates", + "/backend/modelscope_studio/components/base/span/templates", + "/backend/modelscope_studio/components/base/text/templates", + "/backend/modelscope_studio/components/antd/alert/templates", + "/backend/modelscope_studio/components/antd/alert/error_boundary/templates", + "/backend/modelscope_studio/components/antd/avatar/templates", + "/backend/modelscope_studio/components/antd/avatar/group/templates", + "/backend/modelscope_studio/components/antd/badge/templates", + "/backend/modelscope_studio/components/antd/badge/ribbon/templates", + "/backend/modelscope_studio/components/antd/calendar/templates", + "/backend/modelscope_studio/components/antd/carousel/templates", + "/backend/modelscope_studio/components/antd/collapse/templates", + "/backend/modelscope_studio/components/antd/collapse/item/templates", + "/backend/modelscope_studio/components/antd/descriptions/templates", + "/backend/modelscope_studio/components/antd/descriptions/item/templates", + "/backend/modelscope_studio/components/antd/drawer/templates", + "/backend/modelscope_studio/components/antd/empty/templates", + "/backend/modelscope_studio/components/antd/image/templates", + "/backend/modelscope_studio/components/antd/image/preview_group/templates", + "/backend/modelscope_studio/components/antd/list/templates", + "/backend/modelscope_studio/components/antd/list/item/templates", + "/backend/modelscope_studio/components/antd/list/item/meta/templates", + "/backend/modelscope_studio/components/antd/modal/templates", + "/backend/modelscope_studio/components/antd/notification/templates", + "/backend/modelscope_studio/components/antd/popconfirm/templates", + "/backend/modelscope_studio/components/antd/popover/templates", + "/backend/modelscope_studio/components/antd/progress/templates", + "/backend/modelscope_studio/components/antd/result/templates", + "/backend/modelscope_studio/components/antd/skeleton/templates", + "/backend/modelscope_studio/components/antd/skeleton/avatar/templates", + "/backend/modelscope_studio/components/antd/skeleton/button/templates", + "/backend/modelscope_studio/components/antd/skeleton/image/templates", + "/backend/modelscope_studio/components/antd/skeleton/input/templates", + "/backend/modelscope_studio/components/antd/skeleton/node/templates", + "/backend/modelscope_studio/components/antd/steps/templates", + "/backend/modelscope_studio/components/antd/steps/item/templates", + "/backend/modelscope_studio/components/antd/tooltip/templates", + "/backend/modelscope_studio/components/antd/tree/templates", + "/backend/modelscope_studio/components/antd/tree/directory_tree/templates", + "/backend/modelscope_studio/components/antd/tree/tree_node/templates", + "/backend/modelscope_studio/components/antd/watermark/templates", + "/backend/modelscope_studio/components/antd/qr_code/templates", + "/backend/modelscope_studio/components/antd/auto_complete/templates", + "/backend/modelscope_studio/components/antd/auto_complete/option/templates", + "/backend/modelscope_studio/components/antd/cascader/templates", + "/backend/modelscope_studio/components/antd/cascader/option/templates", + "/backend/modelscope_studio/components/antd/cascader/panel/templates", + "/backend/modelscope_studio/components/antd/checkbox/templates", + "/backend/modelscope_studio/components/antd/checkbox/group/templates", + "/backend/modelscope_studio/components/antd/checkbox/group/option/templates", + "/backend/modelscope_studio/components/antd/color_picker/templates", + "/backend/modelscope_studio/components/antd/color_picker/preset/templates", + "/backend/modelscope_studio/components/antd/date_picker/templates", + "/backend/modelscope_studio/components/antd/date_picker/preset/templates", + "/backend/modelscope_studio/components/antd/date_picker/range_picker/templates", + "/backend/modelscope_studio/components/antd/form/templates", + "/backend/modelscope_studio/components/antd/form/item/templates", + "/backend/modelscope_studio/components/antd/form/item/rule/templates", + "/backend/modelscope_studio/components/antd/input/templates", + "/backend/modelscope_studio/components/antd/input_number/templates", + "/backend/modelscope_studio/components/antd/input/otp/templates", + "/backend/modelscope_studio/components/antd/input/password/templates", + "/backend/modelscope_studio/components/antd/input/search/templates", + "/backend/modelscope_studio/components/antd/input/textarea/templates", + "/backend/modelscope_studio/components/antd/mentions/templates", + "/backend/modelscope_studio/components/antd/mentions/option/templates", + "/backend/modelscope_studio/components/antd/radio/templates", + "/backend/modelscope_studio/components/antd/radio/button/templates", + "/backend/modelscope_studio/components/antd/radio/group/templates", + "/backend/modelscope_studio/components/antd/radio/group/option/templates", + "/backend/modelscope_studio/components/antd/rate/templates", + "/backend/modelscope_studio/components/antd/segmented/templates", + "/backend/modelscope_studio/components/antd/segmented/option/templates", + "/backend/modelscope_studio/components/antd/select/templates", + "/backend/modelscope_studio/components/antd/statistic/templates", + "/backend/modelscope_studio/components/antd/statistic/countdown/templates", + "/backend/modelscope_studio/components/antd/table/templates", + "/backend/modelscope_studio/components/antd/table/column/templates", + "/backend/modelscope_studio/components/antd/table/column_group/templates", + "/backend/modelscope_studio/components/antd/table/expandable/templates", + "/backend/modelscope_studio/components/antd/table/row_selection/templates", + "/backend/modelscope_studio/components/antd/table/row_selection/selection/templates", + "/backend/modelscope_studio/components/antd/tabs/templates", + "/backend/modelscope_studio/components/antd/tabs/item/templates", + "/backend/modelscope_studio/components/antd/tag/templates", + "/backend/modelscope_studio/components/antd/tag/checkable_tag/templates", + "/backend/modelscope_studio/components/antd/time_picker/templates", + "/backend/modelscope_studio/components/antd/time_picker/range_picker/templates", + "/backend/modelscope_studio/components/antd/timeline/templates", + "/backend/modelscope_studio/components/antd/timeline/item/templates", + "/backend/modelscope_studio/components/antd/tour/templates", + "/backend/modelscope_studio/components/antd/tour/step/templates", + "/backend/modelscope_studio/components/antd/select/option/templates", + "/backend/modelscope_studio/components/antd/slider/templates", + "/backend/modelscope_studio/components/antd/slider/mark/templates", + "/backend/modelscope_studio/components/antd/switch/templates", + "/backend/modelscope_studio/components/antd/transfer/templates", + "/backend/modelscope_studio/components/antd/tree_select/templates", + "/backend/modelscope_studio/components/antd/tree_select/tree_node/templates", + "/backend/modelscope_studio/components/antd/upload/dragger/templates", + "/backend/modelscope_studio/components/antd/splitter/templates", + "/backend/modelscope_studio/components/antd/splitter/panel/templates", + "/backend/modelscope_studio/components/legacy/Chatbot/templates", + "/backend/modelscope_studio/components/legacy/Flow/templates", + "/backend/modelscope_studio/components/legacy/Markdown/templates", + "/backend/modelscope_studio/components/legacy/MultimodalInput/templates", + "/backend/modelscope_studio/components/legacy/WaterfallGallery/templates", ] [tool.hatch.build.targets.sdist] diff --git a/tsconfig.json b/tsconfig.json index 456e7b4f..eb4eb511 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,12 +8,29 @@ "importHelpers": true, "moduleResolution": "Node", "jsx": "preserve", + "noImplicitAny": false, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "resolveJsonModule": true, - "noImplicitOverride": true + "noImplicitOverride": true, + "baseUrl": "./frontend", + "paths": { + "@svelte-preprocess-react": ["svelte-preprocess-react/index.ts"], + "@svelte-preprocess-react/inject": ["svelte-preprocess-react/inject.ts"], + "@svelte-preprocess-react/component": [ + "svelte-preprocess-react/component.ts" + ], + "@svelte-preprocess-react/slot": ["svelte-preprocess-react/slot.ts"], + "@svelte-preprocess-react/react-slot": [ + "svelte-preprocess-react/react-slot.tsx" + ], + "@svelte-preprocess-react/context": [ + "svelte-preprocess-react/context.ts" + ], + "@utils/*": ["utils/*"] + } }, - "include": ["frontend", "config", "scripts", "fixtures.d.ts"], + "include": ["frontend", "config"], "exclude": ["node_modules"] }