ksaa 2025.9.post2__py3-none-any.whl → 2025.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kaa/__init__.py +0 -0
- kaa/application/__init__.py +0 -0
- kaa/application/core/misc_core.py +4 -1
- kaa/application/services/__init__.py +0 -0
- kaa/application/services/config_service.py +101 -0
- kaa/application/services/feedback_service.py +121 -0
- kaa/application/services/produce_solution_service.py +83 -0
- kaa/application/services/task_service.py +145 -0
- kaa/application/services/update_service.py +208 -0
- kaa/application/ui/__init__.py +0 -0
- kaa/application/ui/common.py +123 -0
- kaa/application/ui/components/alert.py +251 -0
- kaa/application/ui/components/alert.pyi +257 -0
- kaa/application/ui/components/categorized_select.pyi +697 -0
- kaa/application/ui/facade.py +189 -0
- kaa/application/ui/gradio_view.py +135 -0
- kaa/application/ui/views/__init__.py +0 -0
- kaa/application/ui/views/feedback_view.py +65 -0
- kaa/application/ui/views/produce_view.py +251 -0
- kaa/application/ui/views/settings_view.py +581 -0
- kaa/application/ui/views/status_view.py +171 -0
- kaa/application/ui/views/task_view.py +102 -0
- kaa/application/ui/views/update_view.py +106 -0
- kaa/config/schema.py +26 -6
- kaa/errors.py +75 -0
- kaa/main/dmm_host.py +60 -60
- kaa/main/gr.py +60 -3115
- kaa/main/kaa.py +11 -3
- kaa/metadata.py +10 -0
- kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/resources/game.db +0 -0
- kaa/resources/game_ver.txt +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_1.png +0 -0
- kaa/sprites/0cdd57aa-9bdd-4c83-9565-de7c229b34e3.png +0 -0
- kaa/sprites/16f04ca1-05a3-49c7-88ae-a0d02c1ec2ec.png +0 -0
- kaa/sprites/20ca6d42-c19e-4c3e-b82c-f6642bbe5069.png +0 -0
- kaa/sprites/276c0178-65af-4b69-a3c3-d04253b9ed91.png +0 -0
- kaa/sprites/32de6ba0-859f-4f40-a57e-92bed913e3a7.png +0 -0
- kaa/sprites/38613745-1cf2-4bf1-9f58-0474b1e46895.png +0 -0
- kaa/sprites/41904062-e218-4b28-972a-b5cfcd058d2c.png +0 -0
- kaa/sprites/44097699-487f-4932-846a-095a427f4ed8.png +0 -0
- kaa/sprites/459f532f-115c-4527-a897-affa7ddcbd76.png +0 -0
- kaa/sprites/46cb87f6-26f7-45f0-b10c-6491f115077e.png +0 -0
- kaa/sprites/4b02f8d4-7847-47a5-8f01-7ab5123709e5.png +0 -0
- kaa/sprites/4b7426e9-395a-410c-bb99-c6f0a7b81208.png +0 -0
- kaa/sprites/4c243ed4-9ac2-42ba-89c6-946ffef84120.png +0 -0
- kaa/sprites/527c3803-1ddd-4f6b-a896-815d3c2e4caa.png +0 -0
- kaa/sprites/54d67100-70c7-4a00-afaa-a80771d34893.png +0 -0
- kaa/sprites/5588396d-dd38-4ef1-8c37-3041a750b1cc.png +0 -0
- kaa/sprites/5933f6ab-7af4-4731-aac8-d95939a3fbbf.png +0 -0
- kaa/sprites/5c49d3b3-656e-4c8c-ae1a-9b0209b9dcc3.png +0 -0
- kaa/sprites/5c735cc5-7801-44e9-a8f1-2d44df4fa919.png +0 -0
- kaa/sprites/678073ec-6700-4d94-af41-b392af11201b.png +0 -0
- kaa/sprites/6a27faad-df3b-49d9-a20f-64ae8e8f9e22.png +0 -0
- kaa/sprites/6b63fca9-a1ec-490e-96e9-fc0beeeb8851.png +0 -0
- kaa/sprites/6baaecdd-2817-4ba3-a2da-346ef9ef92fd.png +0 -0
- kaa/sprites/6c82d28f-913c-4444-baa6-2e37c7e24bc6.png +0 -0
- kaa/sprites/6d302c9d-72cd-49b5-bb11-c39140ffbdd1.png +0 -0
- kaa/sprites/6e603eb6-2336-46d2-ad01-2ba2fc3d4cbd.png +0 -0
- kaa/sprites/7156a1b5-cdd7-446e-9caf-d9f6b313ef4d.png +0 -0
- kaa/sprites/7469d458-d308-4469-8bf1-b63e1ddc6a3c.png +0 -0
- kaa/sprites/78868e34-1c2a-40ee-b08c-c89e6a3aea54.png +0 -0
- kaa/sprites/7c8e37b7-173f-4c03-8f11-bbd47f2a02c2.png +0 -0
- kaa/sprites/7ce3a2d5-efa7-4091-b012-f2870d9df422.png +0 -0
- kaa/sprites/7db2d761-ab44-4b3b-85aa-9b9758f97d5d.png +0 -0
- kaa/sprites/7ddaa9db-2287-43ba-8531-065e618ac8ef.png +0 -0
- kaa/sprites/7def2661-0847-4459-88c6-5270c2e8a32c.png +0 -0
- kaa/sprites/821c86c1-bc35-40bc-95db-f66935a92299.png +0 -0
- kaa/sprites/8448237d-2db5-49ca-8d55-9fc0e56639a7.png +0 -0
- kaa/sprites/89663a2f-c6d3-4bb7-9935-a54d11d0a382.png +0 -0
- kaa/sprites/8a312cf5-c670-4a52-a03b-fe55e78f8f07.png +0 -0
- kaa/sprites/8b6a1eed-341d-4be1-b0ae-9adc52ed4543.png +0 -0
- kaa/sprites/8e024c75-c872-4e18-bb80-0c5894612815.png +0 -0
- kaa/sprites/92f7ef0b-7931-4cd3-afda-c553232eb443.png +0 -0
- kaa/sprites/9803a197-d873-43cc-9656-d63513e92fad.png +0 -0
- kaa/sprites/9934f05f-ee5f-4131-b08d-aa61d5f3505a.png +0 -0
- kaa/sprites/993f2140-77be-4fe2-8e11-f71c4531bc9a.png +0 -0
- kaa/sprites/9a8bfa87-0e37-4d54-888f-b79f8778d232.png +0 -0
- kaa/sprites/9b7eaa4c-2b67-4426-80da-b7538a87ed96.png +0 -0
- kaa/sprites/9bc6607d-ce44-467e-a5f4-b3cf30210c13.png +0 -0
- kaa/sprites/9db5de82-8fba-4b69-8faf-ffe7fcea32f8.png +0 -0
- kaa/sprites/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/sprites/a1251011-00a9-402b-82da-1d2744db26cf.png +0 -0
- kaa/sprites/a31e08c1-d3c3-4a99-a882-4a10de9ba815.png +0 -0
- kaa/sprites/a408adaa-bfab-4aaf-acf7-08a4a3ebdd4c.png +0 -0
- kaa/sprites/a408cdfd-e394-4ada-9f0e-5878e41b8e52.png +0 -0
- kaa/sprites/a4723b5b-2466-4ea4-b7ef-4185bb4dda74.png +0 -0
- kaa/sprites/a5ba613c-46f4-4442-88e1-fbda4dd65a55.png +0 -0
- kaa/sprites/a88e3da2-98d3-4a64-b7ac-040847028a83.png +0 -0
- kaa/sprites/a9868db0-b355-470e-9bbe-033c5efa4b5e.png +0 -0
- kaa/sprites/a9f020e9-0e4b-4ddc-b8b8-386009578c15.png +0 -0
- kaa/sprites/aa369159-cc3b-40f2-9fca-bca5b579cf97.png +0 -0
- kaa/sprites/aad1ac7d-cfa1-4459-9d46-d39c080bd78e.png +0 -0
- kaa/sprites/ab9e39ae-0856-4254-a6b6-585e82f8bf3b.png +0 -0
- kaa/sprites/ae4742aa-acda-442d-bf73-b3fe7b66e85c.png +0 -0
- kaa/sprites/aff3d8ac-d648-434c-9adb-6c1a10aa04b9.png +0 -0
- kaa/sprites/affc5006-4b67-4490-9fa7-557a7fecb133.png +0 -0
- kaa/sprites/b002896d-5093-48e5-9e01-d18bfb240961.png +0 -0
- kaa/sprites/b00b5890-3743-4064-8311-c5e35b3afbe6.png +0 -0
- kaa/sprites/b26ac4ff-42a0-45aa-b818-7d7603b52f12.png +0 -0
- kaa/sprites/b2a04604-15d4-4ff6-86f7-0823e642103f.png +0 -0
- kaa/sprites/b33bb89c-cabb-4fe0-822f-d911e8b42f82.png +0 -0
- kaa/sprites/b5584de5-650e-4fde-b743-ccbd02eab196.png +0 -0
- kaa/sprites/b5f80604-d7d3-49e0-9934-58f75c393ffb.png +0 -0
- kaa/sprites/b70b958a-9480-4b9b-86a4-5ea099535c36.png +0 -0
- kaa/sprites/b93b3c36-79a3-4c1a-944a-20fe6a88c46d.png +0 -0
- kaa/sprites/ba7676fe-4982-4e92-822d-9c1a623420ac.png +0 -0
- kaa/sprites/bb953e97-7185-4c2c-b177-48d743e90d96.png +0 -0
- kaa/sprites/bd176e60-3bb2-453f-b2ef-45305b7f21c1.png +0 -0
- kaa/sprites/c0478a52-d6c5-4029-848f-e3e22b2de858.png +0 -0
- kaa/sprites/c05baa1e-02c3-4d02-904f-76086edbb97f.png +0 -0
- kaa/sprites/c295af98-0b43-4f18-bbc3-e59d23055f1b.png +0 -0
- kaa/sprites/c424f4a1-d032-478d-ac82-b1127a429e52.png +0 -0
- kaa/sprites/c5356ad6-0f1e-42be-b090-059f33ea7cee.png +0 -0
- kaa/sprites/c54d4b7e-887c-4753-8a9e-6914fc408232.png +0 -0
- kaa/sprites/c68f1282-4d86-4b1a-b76b-dcf42f3f906b.png +0 -0
- kaa/sprites/c71f900b-9689-4800-89a0-e3371d33f47a.png +0 -0
- kaa/sprites/c7cad813-2326-4662-9f55-0a15e1dad3dc.png +0 -0
- kaa/sprites/c95e8a90-dd6e-4cca-b74b-85ee90dbd5c1.png +0 -0
- kaa/sprites/c98d6bc7-45ca-4877-8cd1-6f36d6a86a02.png +0 -0
- kaa/sprites/ca258eea-e69a-43c3-ad4c-ac7da0099011.png +0 -0
- kaa/sprites/cb8d5df6-300b-48e5-ae0b-2b4750c9c092.png +0 -0
- kaa/sprites/cc727107-139b-4092-bafb-4bc9787bcdfd.png +0 -0
- kaa/sprites/cd601176-0336-41c7-8d3f-31ddf8cf708d.png +0 -0
- kaa/sprites/cda022d1-7898-4006-95c5-b55eceda9d95.png +0 -0
- kaa/sprites/ce22506b-7410-4039-94de-dc1bdba8ac00.png +0 -0
- kaa/sprites/cea2d5c4-6e79-425e-9e98-7e7dbdee960b.png +0 -0
- kaa/sprites/cf302432-c592-4b6f-a6de-53c3e1bef23e.png +0 -0
- kaa/sprites/d0d9f650-bb30-4743-81f3-cd7ea8211d5c.png +0 -0
- kaa/sprites/d14a1c6c-339a-4dfe-9078-950d3518bc3b.png +0 -0
- kaa/sprites/d277a9c3-2b2c-42fc-9fbb-a836413c8cf4.png +0 -0
- kaa/sprites/d50d4438-65bc-4849-9a11-7e8b796e1b9d.png +0 -0
- kaa/sprites/d5407f49-fecc-404e-915a-22c9fa16a79a.png +0 -0
- kaa/sprites/d73e9e03-b910-42c0-9953-34980bff09f5.png +0 -0
- kaa/sprites/d8485972-4e67-4190-8d95-60fd3c68b2ce.png +0 -0
- kaa/sprites/d963e76b-3c25-4bc7-a307-78d97728a819.png +0 -0
- kaa/sprites/dab08e98-9053-4e2a-9e74-cf30298fea22.png +0 -0
- kaa/sprites/db25f60d-4772-44f9-85dc-aba4b20cffa2.png +0 -0
- kaa/sprites/dcbeb7cd-cd57-4daf-b023-ff2c7ef1621a.png +0 -0
- kaa/sprites/dd6f31d1-510d-4425-a160-958e7e984382.png +0 -0
- kaa/sprites/de047f08-cef2-4b22-846e-fba2a06f8996.png +0 -0
- kaa/sprites/df11b01f-2ab1-4bfb-831f-bb8dae6a092b.png +0 -0
- kaa/sprites/e2f64c10-4db0-47c8-b23d-94802493d6fb.png +0 -0
- kaa/sprites/e4be69f6-6030-4fd8-8a36-fd3938d1734b.png +0 -0
- kaa/sprites/e4d0719b-d127-41a0-a250-492f79bf5625.png +0 -0
- kaa/sprites/e5196344-d61a-48ff-bc48-63f8f63c3788.png +0 -0
- kaa/sprites/e6f8f2a8-39e3-45e1-8a52-f2dc250bcd95.png +0 -0
- kaa/sprites/e70ce43b-9b3b-4aa0-8b9c-1d5cc4a1d5b0.png +0 -0
- kaa/sprites/e7c00f25-b15a-4403-a201-07b9b168e9f5.png +0 -0
- kaa/sprites/e82b9645-ee3f-4f63-922e-c1d703344baf.png +0 -0
- kaa/sprites/e9fad64b-e4e2-46cb-a820-b2860b38da03.png +0 -0
- kaa/sprites/eab111a6-80bf-45c1-9a74-b44ca76508b7.png +0 -0
- kaa/sprites/ec0d03db-7c66-46b7-86cc-4acaa6eba1c9.png +0 -0
- kaa/sprites/edd2d38d-9071-4094-8931-1a68b6ebe1b8.png +0 -0
- kaa/sprites/eeff3d53-5a40-44c2-9d09-8f246157c72b.png +0 -0
- kaa/sprites/ef0db31a-fc44-4972-af7e-21c50f0b139c.png +0 -0
- kaa/sprites/f1fa2fc3-c3d4-4040-90f1-7941b98dcee5.png +0 -0
- kaa/sprites/f31531b4-79ea-41dc-b23f-e445b818139c.png +0 -0
- kaa/sprites/f35e19ca-7de7-4721-af53-b5f95c5e74fe.png +0 -0
- kaa/sprites/f5e1e7ed-fd35-42c3-97ed-5e9214a50733.png +0 -0
- kaa/sprites/f7246b84-e70b-47d3-8166-90f0dc4f2bb6.png +0 -0
- kaa/sprites/f7e8e937-1eda-4bd3-a3cf-d306cb1973e2.png +0 -0
- kaa/sprites/f8babf59-d55e-40c2-a0b7-5d743ab71799.png +0 -0
- kaa/sprites/f9697f23-07cf-4a14-8b22-d1fc95386c16.png +0 -0
- kaa/sprites/fad8b65b-7d9e-49d8-9f71-6d078aa672ca.png +0 -0
- kaa/sprites/fb017237-bac6-4b73-9437-4518e764ef45.png +0 -0
- kaa/sprites/fc86085c-d708-498a-bfa6-92e1a1364c60.png +0 -0
- kaa/tasks/R.py +140 -128
- kaa/tasks/common.py +5 -0
- kaa/tasks/daily/contest.py +2 -1
- kaa/tasks/daily/purchase.py +34 -2
- kaa/tasks/daily/upgrade_support_card.py +12 -2
- kaa/tasks/produce/cards.py +5 -4
- kaa/tasks/produce/common.py +202 -105
- kaa/tasks/produce/in_purodyuusu.py +35 -17
- kaa/tasks/produce/non_lesson_actions.py +10 -33
- kaa/tasks/produce/p_drink.py +5 -1
- kaa/tasks/produce/produce.py +12 -1
- kaa/tasks/start_game.py +61 -5
- kaa/util/reactive.py +182 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/METADATA +31 -27
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/RECORD +354 -176
- /kaa/sprites/{3504b421-58f2-4ca0-869e-764335d60406.png → 001486b2-f627-4ece-8c93-4dfec47da9b3.png} +0 -0
- /kaa/sprites/{7dc79a8b-bd59-4c93-a638-e49bca276c00.png → 011e352f-6e8b-4225-b104-d1b2ccf0761c.png} +0 -0
- /kaa/sprites/{69f15152-8ee9-4e39-9bfa-6cd1b051bc1e.png → 0240342e-b6f3-4ed6-8da5-a64092e6fcde.png} +0 -0
- /kaa/sprites/{15801cb7-24f6-4504-921b-5e5a37bdc064.png → 02df555c-b19c-4776-8f1b-d1a7e2ed2f82.png} +0 -0
- /kaa/sprites/{55a2ba58-2412-4c39-9c6e-2627092623a2.png → 0343a3b8-8cd6-47af-b956-760dd2c79711.png} +0 -0
- /kaa/sprites/{d62dab9b-d36d-490e-bca5-bfd4b66911d7.png → 04c287ed-9ab1-4cd1-af07-8ab61f7f49bc.png} +0 -0
- /kaa/sprites/{8d99cd97-ae34-488f-b62e-54d54f75e4e8.png → 05d7740b-c6ea-453a-b805-7d0a5fe18184.png} +0 -0
- /kaa/sprites/{66ccbeba-3291-4f1c-8669-d691f24ea9ed.png → 06a7097c-fef6-4f2c-bece-26eed414708e.png} +0 -0
- /kaa/sprites/{609a340b-2cfa-4cef-9e55-fb60c7cabdbb.png → 072b167f-a2f6-4458-815e-a92ca2e6c9eb.png} +0 -0
- /kaa/sprites/{e881ee18-154e-4f0c-91fe-4699d156671d.png → 0899a6e7-6617-4f11-a7a2-9ba377ad6cba.png} +0 -0
- /kaa/sprites/{689eebfd-984c-45c9-812f-26cf9c756bed.png → 0950d760-6d88-4265-b28c-0790a782a749.png} +0 -0
- /kaa/sprites/{76d5d7f7-b23d-4802-8f91-7058f7adcffd.png → 0a019c0d-26fa-4441-b281-b73060722bc9.png} +0 -0
- /kaa/sprites/{ac194536-54e4-49e7-992c-fc82ba401f10.png → 0a27a783-0ef8-4f99-8c26-cf89768b5146.png} +0 -0
- /kaa/sprites/{06ee3b1e-5c99-4ebf-8a23-d6f59cda32b8.png → 0af981f5-bcc9-48eb-a392-50f79ec5149a.png} +0 -0
- /kaa/sprites/{e7709d81-890b-438f-8acb-50492d63022e.png → 0afb71f5-0752-47af-9ba2-85bdbe4fcbf7.png} +0 -0
- /kaa/sprites/{62cc930f-acc2-424a-975f-164009a555f8.png → 0b83c2e5-ebb4-4a69-8b5f-658774d4c5a6.png} +0 -0
- /kaa/sprites/{ad63136d-2360-45e6-b7ef-00e01612c7ce.png → 0be5a84d-eb1e-4bb3-afcd-923e104190f4.png} +0 -0
- /kaa/sprites/{be2985ff-c3ac-4d94-9751-c652dd561db2.png → 0c192ca4-dd10-49b4-b0be-9b1fb4637910.png} +0 -0
- /kaa/sprites/{bca22a82-f72b-46ca-be06-c1e18b7ad27c.png → 0cae32b3-0248-49ad-98dd-d06a89308797.png} +0 -0
- /kaa/sprites/{a694f6e8-6ef9-4761-816a-ad586ce93654.png → 0d1fd6f0-3a6f-4008-a31a-8189dd09be50.png} +0 -0
- /kaa/sprites/{cde4da05-d654-4217-8443-752bc0709742.png → 0d2143fa-7e81-4e7a-8a94-c3839719de5b.png} +0 -0
- /kaa/sprites/{901b48f9-d7b7-46c2-85fa-b07e427ffdaa.png → 0dbb752b-e60a-459d-80fa-f5b49e8b8e4d.png} +0 -0
- /kaa/sprites/{80fa9c6e-fe05-4d3e-ae50-6b7e9a237e0b.png → 0e63e0b7-6874-46e9-86de-8c23e6491f24.png} +0 -0
- /kaa/sprites/{603c5369-9247-404d-bc6d-4719d11de6ea.png → 0f4ac9ae-5e4d-4f3f-b9e0-b76570f2b040.png} +0 -0
- /kaa/sprites/{7f90beb9-8712-4a53-a818-ff7a5e82d71d.png → 0f8026e8-62a9-49e5-97a6-0d78f33dcfcf.png} +0 -0
- /kaa/sprites/{6bcebf50-764b-4bf2-be8e-ba241d8550d7.png → 0f80ac6f-bdf8-4927-8393-c554209f517a.png} +0 -0
- /kaa/sprites/{4396a9b8-b7f0-45f3-8a8f-85773a10eecb.png → 116d3f3a-0255-47ed-b656-c26b41a5cfa8.png} +0 -0
- /kaa/sprites/{9a0172aa-9489-4985-9c65-c5f6db0a0325.png → 130cd7fd-767e-4177-9087-71f418f154dd.png} +0 -0
- /kaa/sprites/{333a1e30-82d3-45b9-8e48-4c127bcb5ec6.png → 138a527b-2191-4f0f-9e36-1d08bbf6ffb1.png} +0 -0
- /kaa/sprites/{cee6ca8f-219c-448d-9ba6-d6722f27b600.png → 1472da80-4cbb-41e1-94e8-3ea3defd3b6f.png} +0 -0
- /kaa/sprites/{94121408-8cd2-46fc-bf27-33b207e4cba8.png → 14875449-7478-4969-a2d5-91ce34c9d1e4.png} +0 -0
- /kaa/sprites/{15da6f78-d89f-480c-9cce-c95e009fd15a.png → 1539fcff-8842-478f-98a8-0d1a885d1b43.png} +0 -0
- /kaa/sprites/{97329116-4d2e-40d7-af96-938afdac4e60.png → 16113270-3f35-498a-a29a-52f190d77cc1.png} +0 -0
- /kaa/sprites/{545068ad-6f17-40d8-99e1-d26bd5700c67.png → 1617c180-ce9f-461a-bfdc-390337ecb205.png} +0 -0
- /kaa/sprites/{e38a2f35-9ac5-4363-bd6d-09893907ea71.png → 16cf9d8b-4f8e-47ce-a63d-fe9bfc3f31e8.png} +0 -0
- /kaa/sprites/{4fc6fae5-386d-434c-893d-5450bd5a6396.png → 1b485aa9-f0c0-4b49-ba75-363a8d6e292c.png} +0 -0
- /kaa/sprites/{4995d301-375b-4d23-a6e5-b26a771fcbe4.png → 1d560b06-feac-413d-bf90-07ac045f11fb.png} +0 -0
- /kaa/sprites/{e16b116c-6a2c-4e5d-8105-8dfc8c4c730f.png → 1d92cb8e-49a7-4166-9682-a5807e0c7912.png} +0 -0
- /kaa/sprites/{be04f096-c46b-4784-8e6c-c1217764f6dd.png → 1dadf765-ddd0-4768-9e91-6d3d08d0ca0d.png} +0 -0
- /kaa/sprites/{d0652541-e289-4bcd-98ec-a88715f5adef.png → 20cbf6b8-01db-45fe-a790-dbb7dd639b1d.png} +0 -0
- /kaa/sprites/{8c4f60d1-d707-4ae5-bd94-d96661ea7bbc.png → 20d01fc0-9a54-4ef5-9983-2bb8414dd94d.png} +0 -0
- /kaa/sprites/{011c52b9-613d-4865-afd3-1f0ddab2bc5b.png → 20e1e948-6920-44cd-965e-9e1e37b3fbf2.png} +0 -0
- /kaa/sprites/{5ee1b47b-f20d-431b-a0bb-d203b9f3e15b.png → 23922edd-22aa-4514-ba99-65bcd72c2ad1.png} +0 -0
- /kaa/sprites/{3d57da0a-b166-4acd-9a8a-b247ba5ad13a.png → 24c2db22-24e2-484e-8c16-8b1c9fe3ed14.png} +0 -0
- /kaa/sprites/{f5145781-949e-4012-9ea9-b0a277dac72b.png → 26683d54-74a9-4e7b-a839-c2e0850d1458.png} +0 -0
- /kaa/sprites/{2987cb9c-5975-41b3-87f7-cc26efdcee74.png → 27bcc513-9bab-468a-97b8-ed16f918e2a4.png} +0 -0
- /kaa/sprites/{c24394f6-ed02-4fb4-8d58-40a7e51b259d.png → 284a19c3-2c06-48a5-8f78-b4682e8ae19e.png} +0 -0
- /kaa/sprites/{da615a2f-3334-462c-8535-40067ad1c857.png → 2927cceb-29dc-4c35-8614-1df42fc0733b.png} +0 -0
- /kaa/sprites/{0a430b29-9841-407a-a102-ea6420beeaae.png → 2c5784df-e89b-4b95-a4b9-bac083c0ec08.png} +0 -0
- /kaa/sprites/{3867054e-a686-4dab-89fb-6a9def58dfe1.png → 2dfa926c-83c5-4f40-adfe-ff04ce448264.png} +0 -0
- /kaa/sprites/{d1a6547e-7c58-4500-a7f4-cf462f44395f.png → 2f7f70ea-f3f0-4d14-8885-1a735ff00545.png} +0 -0
- /kaa/sprites/{4a5e8c39-4e80-4202-9886-be1a58073fd6.png → 307fcb37-7a90-4a3e-bd3a-64a691aeb5d5.png} +0 -0
- /kaa/sprites/{151dc2ce-fce4-4741-ac6e-cc8213f54137.png → 3114b2d5-0a96-4eba-9143-b09eabb63612.png} +0 -0
- /kaa/sprites/{1aa14c42-8682-4a75-b4a2-4715481a2381.png → 31168fe2-8601-4de6-aa40-81e7ce452391.png} +0 -0
- /kaa/sprites/{f3400d73-4f61-4027-b5d8-03765a63a186.png → 31b025df-ed25-4bc4-a94a-d05388e9156e.png} +0 -0
- /kaa/sprites/{0c211c20-096e-4572-8e74-3867904db1f6.png → 32af48d2-fb5b-4288-930f-eb36edfe2116.png} +0 -0
- /kaa/sprites/{0803c844-7085-4492-ad68-0ce3b11f9840.png → 34e50d77-7b95-4bb7-8c62-ad6801dc0e55.png} +0 -0
- /kaa/sprites/{bd5b168a-de03-46b3-b1b7-9fa9667f4642.png → 3658a26d-98d3-462a-abf4-4d8b74aeb134.png} +0 -0
- /kaa/sprites/{562deb0a-99bd-4e95-80ff-f933a73c28ad.png → 36f11c55-e110-44b7-a800-85f4d7584560.png} +0 -0
- /kaa/sprites/{9c827df9-2e47-4bec-95b7-8ccad6377a28.png → 38bb2a90-b2a9-4f85-9025-662e83ab1ed1.png} +0 -0
- /kaa/sprites/{eebbccac-25a9-465e-b7c8-3bfdaf0bf0b9.png → 38f70a7e-5f7e-4ee6-a7c5-5f8014734719.png} +0 -0
- /kaa/sprites/{6f79221a-8c47-423e-ac72-27d97c559d63.png → 3aceddce-09db-422a-8023-e08d41070cc8.png} +0 -0
- /kaa/sprites/{3fe4ec28-3b2a-4042-ace1-ceec5c8f48b1.png → 3c224540-1571-435a-b8e6-2317e4411438.png} +0 -0
- /kaa/sprites/{f2913d0b-342c-4de0-8235-fe3f1c580d2e.png → 3d9a9493-7616-4b2b-867e-44e776d831c0.png} +0 -0
- /kaa/sprites/{a8bef06b-9287-4f54-b96e-19463031d26f.png → 3fd694ea-8396-4cf3-9ba6-eaf95b61e8c8.png} +0 -0
- /kaa/sprites/{fd16e035-699c-4dc9-9721-61443cd6fd63.png → 4055dbef-1523-43b7-9183-6b2721b4307b.png} +0 -0
- /kaa/sprites/{606d4740-8af9-40f6-af18-ad9f73cecf68.png → 4059ec2d-cd20-4dd3-8586-e49a4cfa8717.png} +0 -0
- /kaa/sprites/{9ea3c9b4-80f3-44b9-90e3-cfc406f814be.png → 4280fa1d-4223-4fc4-85f9-caf6157cb004.png} +0 -0
- /kaa/sprites/{436ec8e4-aa4a-4b1f-940a-2ab55baa098d.png → 43bc2116-7fe3-4b20-8c8b-3ab2a2b5dd7d.png} +0 -0
- /kaa/sprites/{39815c36-38c5-4066-aff5-2177c232b4f4.png → 43d3fe01-27c0-4d3f-a908-aebd00ab219d.png} +0 -0
- /kaa/sprites/{9c6378a9-62ed-4881-bc6f-2166bbb470c7.png → 45062c9b-a31d-457b-83a2-9b6891384a15.png} +0 -0
- /kaa/sprites/{e630b33a-e73e-4271-96b9-860b94fb48ca.png → 4516d0e4-9280-4f91-ba7d-fc8af83a9996.png} +0 -0
- /kaa/sprites/{916391a4-09b7-409c-ba25-391b61a65e62.png → 458b8bbe-9fa5-48d4-907b-66d36baf16a1.png} +0 -0
- /kaa/sprites/{9092a171-66f0-47dc-99dd-bb5d7359077a.png → 45af668c-2324-4fe4-83e0-11d65cfaa086.png} +0 -0
- /kaa/sprites/{297fb9e0-9553-40fb-ad08-f5ab718ef119.png → 45bdb006-bea5-4a1f-bf1a-c3bcb2e99abd.png} +0 -0
- /kaa/sprites/{1bf95df3-255f-4e89-9b17-0af77f4affd6.png → 47186b16-f478-4a53-8e49-a132ee4c78db.png} +0 -0
- /kaa/sprites/{1f6805bb-dff1-4d4c-82bf-74563056cc81.png → 4876c6f3-17a5-4858-b1d1-ebb5619516c5.png} +0 -0
- /kaa/sprites/{b2c8ac50-87a3-4cdd-a895-9704a9674163.png → 491bd489-7a08-47b4-b1b7-5d0f44cedbca.png} +0 -0
- /kaa/sprites/{484594b4-06a2-4ec3-8a85-e7af3b012125.png → 4a853ac5-24d5-44ac-8ddf-9f501c60a9be.png} +0 -0
- /kaa/sprites/{f6e26f3c-2548-4507-8651-53917e0fe82a.png → 4b88639e-1f17-4e11-90b6-bb122f8cb5ab.png} +0 -0
- /kaa/sprites/{935d8115-245f-42ff-ad74-55f4e6d140b1.png → 4dc5f817-86bc-4433-aeb5-b02c7b63fa8c.png} +0 -0
- /kaa/sprites/{b379d704-fc45-42f9-a45c-d81a6c5ee951.png → 4e3a9fd3-86aa-4e14-ae48-46e53a553da2.png} +0 -0
- /kaa/sprites/{7df9b645-ff88-4459-8ba7-450da538cfd9.png → 4e7f7b91-344c-4fb2-95fe-004831e81b11.png} +0 -0
- /kaa/sprites/{24b3cf5c-0586-41cc-abfb-df48de07fa77.png → 511232f6-01d6-482a-81a3-2bf79a6e88ed.png} +0 -0
- /kaa/sprites/{101a9c54-ab8c-4b5d-a4e0-686b93b4e1d9.png → 546cb160-f99b-4cda-9719-02b38a5393a0.png} +0 -0
- /kaa/sprites/{74e4c222-0006-4295-99d0-a01aa8b94dc2.png → 56bc2743-5dd9-4d09-a681-af9d1fec568b.png} +0 -0
- /kaa/sprites/{d11f07b1-f2e9-4c41-9ad9-81529121afd4.png → 5701ecbe-7fed-435c-b409-75f8b0f2df51.png} +0 -0
- /kaa/sprites/{6dd4ca2b-69ca-4099-9e69-2144ce9a4d28.png → 58de1cf0-4270-4987-9dc7-3f584f1119d1.png} +0 -0
- /kaa/sprites/{48eb2e27-7419-4136-9642-7af1a6f83ed9.png → 5a337f99-8554-48bf-acb7-364259fbf1b7.png} +0 -0
- /kaa/sprites/{ccad6a54-73f6-48b8-a86f-16b9e0f46e41.png → 5cb4deb9-2ec5-4452-aba4-390eae2071c7.png} +0 -0
- /kaa/sprites/{f136dd9f-43c8-44cc-b081-1f86d7ce38d4.png → 5d42f16f-3475-4ffb-ac85-3c86fa8fba46.png} +0 -0
- /kaa/sprites/{52aba1bd-1e82-46a7-8003-0aac11586a38.png → 6c5698a4-b211-4f38-83a7-51b5f3a36911.png} +0 -0
- /kaa/sprites/{0ec56b89-81f2-478d-907e-b04aab199e86.png → 771d1e17-8ef4-417a-b482-26db514e17c6.png} +0 -0
- /kaa/sprites/{c23c29cc-ef42-46d8-8b58-283b74a254cc.png → 7833fa1e-c842-4efd-a696-c67150a1dfa8.png} +0 -0
- /kaa/sprites/{2bb41b59-61f8-4109-a550-faa6a14708de.png → 791b3367-fb7c-48b5-9a0f-877908e51c4a.png} +0 -0
- /kaa/sprites/{47cbfa79-0b33-4ccc-b762-21e3a141a7bc.png → 7bb874a3-3fac-4138-83bd-d6461c5793d3.png} +0 -0
- /kaa/sprites/{fc77cc87-f8eb-4b33-834c-ee5d2af5ca44.png → 7d4d06a8-7903-4803-a20b-7f45ffbe9ca7.png} +0 -0
- /kaa/sprites/{b581ae5b-cb67-4bf9-8ffe-72b8ba56d887.png → 81553259-3b0a-42f7-b7b9-2c6e1dfec6c4.png} +0 -0
- /kaa/sprites/{eda88516-ac6b-4f26-b074-f8e6e2ae42a5.png → 827cec52-d883-46d1-b24b-c11c82b1b459.png} +0 -0
- /kaa/sprites/{9966acd5-973a-4afb-a006-c1fa66cfe679.png → 8473bc42-1909-4d70-b80d-7eba085c9978.png} +0 -0
- /kaa/sprites/{c16ae471-7d60-4c1f-9981-1090414a7ea0.png → 84797a78-97f3-44fa-b3c0-132c914f534a.png} +0 -0
- /kaa/sprites/{df54b1e4-035c-4937-9360-19b4733826e6.png → 861bd6b8-cca7-46b1-9346-83af080e211b.png} +0 -0
- /kaa/sprites/{436b9822-c946-4d2e-a432-8f3159705b37.png → 8f5081e4-ed3d-445b-bcf6-2e40c7d08298.png} +0 -0
- /kaa/sprites/{5bb33faa-8236-4e17-92bd-ad709795f261.png → 91dbaa9c-7881-4687-bd64-8f25c201d98c.png} +0 -0
- /kaa/sprites/{95e11d11-f330-4906-a128-6492f95176e8.png → 93f3f6a9-e9d2-45b7-a2b3-1e8b64d10e9b.png} +0 -0
- /kaa/sprites/{dd59548d-0800-49d3-8701-b2b2e8512c36.png → 943cde40-f190-40b6-9235-4439fbb4ae50.png} +0 -0
- /kaa/sprites/{7678902c-57df-4cf8-87ef-11c85f02214b.png → 97f3fb5a-fce2-4cc5-9da5-f0496e9dd294.png} +0 -0
- /kaa/sprites/{d051b4c3-354e-4d69-95f6-14f5017ed79e.png → 98a68736-c4ec-4af1-ac64-40eb48f9c000.png} +0 -0
- /kaa/sprites/{a9029026-7a7e-4f8e-9620-bd451bfdf284.png → 9af13381-661d-41cf-b704-e4a9c3691e14.png} +0 -0
- /kaa/sprites/{5a892ef3-543b-4fad-bdca-5358314d6be7.png → 9b91dc78-49e8-41b2-9500-c27cb46023c4.png} +0 -0
- /kaa/sprites/{920ea830-31a8-4256-b247-7b9507030783.png → 9d0bf64a-2684-43fa-b9bf-552e60c717b4.png} +0 -0
- /kaa/sprites/{b37685c3-74a8-4393-ad79-c445ab2d77be.png → a32fa779-2fb9-488e-9153-0b99e4352281.png} +0 -0
- /kaa/sprites/{9f81bc0f-da2c-4321-a185-b2d8a3f0d390.png → a6269fe5-e719-43ad-b674-ea728e43066b.png} +0 -0
- /kaa/sprites/{2beaba86-119e-4a1c-8cf4-e03c4d0d957a.png → a8ca6a10-ba0a-4416-a27b-3323d38040ab.png} +0 -0
- /kaa/sprites/{f258af39-e8be-4e19-aafc-bfedce9793c0.png → acaea032-45b8-4ad8-8b54-ff011750af80.png} +0 -0
- /kaa/sprites/{ed7adff5-1604-4ade-ac2b-a30167ef457c.png → ae5a051e-37f5-4e54-bfc7-64c445ad6fcc.png} +0 -0
- /kaa/sprites/{30604b47-7c8b-4dd5-b926-fd33bad575c7.png → af5a6ae7-a355-492e-86a8-62fa2b06bb54.png} +0 -0
- /kaa/sprites/{36e6c1ea-8de5-4640-8340-b8f532ef40c0.png → b406baf0-fa0b-4125-adc6-d370582a6104.png} +0 -0
- /kaa/sprites/{42bfc60c-0249-4910-ad04-80e559b52c6b.png → b62f9c30-1faf-47fc-be8f-36db3806c5dc.png} +0 -0
- /kaa/sprites/{56bcde1a-5cd7-493d-a2cd-2a63394c0c36.png → ba1983ce-bf63-4022-9ef3-dcf97030e6c5.png} +0 -0
- /kaa/sprites/{8e648675-1a52-4926-92cf-64c7cb5c2a59.png → ba971684-1fe3-47e1-8bdb-d20a0011ea68.png} +0 -0
- /kaa/sprites/{3af1e6de-e718-4a09-8ee9-88be21cd4b3d.png → bdbed86f-553c-458e-9435-d587005b367d.png} +0 -0
- /kaa/sprites/{e2944d47-159f-4200-b476-8d5db41d30c0.png → bee41ab5-c62e-4a79-a8d0-40f9efbc7e40.png} +0 -0
- /kaa/sprites/{bfaf3273-76bf-457a-88b7-6816af742a30.png → c344b05d-2707-43b0-9e3e-4ec433558dcb.png} +0 -0
- /kaa/sprites/{7df273dc-69f7-45b9-a782-b221783f851b.png → c3c495a2-1530-439f-a10e-76ca5d929cce.png} +0 -0
- /kaa/sprites/{76262c30-a2ee-45ba-8279-ca682cee0bd6.png → ccac6d8e-bca2-4ab6-b88b-c0f5ba83df84.png} +0 -0
- /kaa/sprites/{574b2741-c4ac-4ee4-a544-f4f499e4a21e.png → ce7cec02-4039-4171-87ed-37eccc4ac832.png} +0 -0
- /kaa/sprites/{6dead493-c4e6-4ba9-ac56-abe8c511abbd.png → f72e9d65-68e7-4bb6-be44-4b5ed71f0bce.png} +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/WHEEL +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
from typing import List, Dict, Tuple, Callable, Any, Literal, Optional
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
import gradio as gr
|
|
4
|
+
from kaa.config.schema import BaseConfig
|
|
5
|
+
|
|
6
|
+
# Type hints
|
|
7
|
+
GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.State
|
|
8
|
+
ConfigKey = Literal[
|
|
9
|
+
# backend
|
|
10
|
+
'backend_type', 'adb_ip', 'adb_port',
|
|
11
|
+
'screenshot_method', 'keep_screenshots',
|
|
12
|
+
'check_emulator', 'emulator_path',
|
|
13
|
+
'adb_emulator_name', 'emulator_args',
|
|
14
|
+
'_mumu_index', '_mumu12v5_index', '_leidian_index',
|
|
15
|
+
'mumu_background_mode_v4', 'mumu_background_mode_v5', 'target_screenshot_interval',
|
|
16
|
+
|
|
17
|
+
# purchase
|
|
18
|
+
'purchase_enabled',
|
|
19
|
+
'money_enabled', 'ap_enabled',
|
|
20
|
+
'ap_items', 'money_items', 'money_refresh',
|
|
21
|
+
'weekly_enabled',
|
|
22
|
+
|
|
23
|
+
# assignment
|
|
24
|
+
'assignment_enabled',
|
|
25
|
+
'mini_live_reassign', 'mini_live_duration',
|
|
26
|
+
'online_live_reassign', 'online_live_duration',
|
|
27
|
+
'contest_enabled',
|
|
28
|
+
'select_which_contestant', 'when_no_set',
|
|
29
|
+
|
|
30
|
+
# produce
|
|
31
|
+
'produce_enabled', 'selected_solution_id', 'produce_count', 'produce_timeout_cd', 'interrupt_timeout', 'enable_fever_month',
|
|
32
|
+
'mission_reward_enabled',
|
|
33
|
+
|
|
34
|
+
# club reward
|
|
35
|
+
'club_reward_enabled',
|
|
36
|
+
'selected_note',
|
|
37
|
+
|
|
38
|
+
# upgrade support card
|
|
39
|
+
'upgrade_support_card_enabled',
|
|
40
|
+
|
|
41
|
+
# capsule toys
|
|
42
|
+
'capsule_toys_enabled', 'friend_capsule_toys_count',
|
|
43
|
+
'sense_capsule_toys_count', 'logic_capsule_toys_count',
|
|
44
|
+
'anomaly_capsule_toys_count',
|
|
45
|
+
|
|
46
|
+
# start game
|
|
47
|
+
'start_game_enabled', 'start_through_kuyo',
|
|
48
|
+
'game_package_name', 'kuyo_package_name',
|
|
49
|
+
'disable_gakumas_localify', 'dmm_game_path', 'dmm_bypass',
|
|
50
|
+
|
|
51
|
+
# end game
|
|
52
|
+
'exit_kaa', 'kill_game', 'kill_dmm',
|
|
53
|
+
'kill_emulator', 'shutdown', 'hibernate',
|
|
54
|
+
'restore_gakumas_localify',
|
|
55
|
+
|
|
56
|
+
'activity_funds',
|
|
57
|
+
'presents',
|
|
58
|
+
'mission_reward',
|
|
59
|
+
'activity_funds_enabled',
|
|
60
|
+
'presents_enabled',
|
|
61
|
+
'trace_recommend_card_detection',
|
|
62
|
+
|
|
63
|
+
# misc
|
|
64
|
+
'check_update', 'auto_install_update', 'expose_to_lan', 'update_channel', 'log_level',
|
|
65
|
+
|
|
66
|
+
# idle
|
|
67
|
+
'idle_enabled', 'idle_seconds', 'idle_minimize_on_pause',
|
|
68
|
+
|
|
69
|
+
'_selected_backend_index'
|
|
70
|
+
|
|
71
|
+
]
|
|
72
|
+
ConfigSetFunction = Callable[[BaseConfig, Dict[ConfigKey, Any]], None]
|
|
73
|
+
ConfigBuilderReturnValue = Tuple[ConfigSetFunction, Dict[ConfigKey, GradioInput]]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclass
|
|
77
|
+
class GradioComponents:
|
|
78
|
+
"""Dataclass to hold all Gradio UI components that need to be accessed across methods."""
|
|
79
|
+
|
|
80
|
+
# Main tabs
|
|
81
|
+
tabs: Optional[gr.Tabs] = None
|
|
82
|
+
|
|
83
|
+
# Status tab components
|
|
84
|
+
run_btn: Optional[gr.Button] = None
|
|
85
|
+
pause_btn: Optional[gr.Button] = None
|
|
86
|
+
end_action_dropdown: Optional[gr.Dropdown] = None
|
|
87
|
+
quick_checkboxes: List[gr.Checkbox] = field(default_factory=list)
|
|
88
|
+
task_runtime_text: Optional[gr.Textbox] = None
|
|
89
|
+
task_status_df: Optional[gr.Dataframe] = None
|
|
90
|
+
|
|
91
|
+
# Update tab components
|
|
92
|
+
update_info_md: Optional[gr.Markdown] = None
|
|
93
|
+
update_status_text: Optional[gr.Markdown] = None
|
|
94
|
+
update_version_dropdown: Optional[gr.Dropdown] = None
|
|
95
|
+
update_install_btn: Optional[gr.Button] = None
|
|
96
|
+
|
|
97
|
+
# Produce tab components
|
|
98
|
+
produce_tab_solution_dropdown: Optional[gr.Dropdown] = None
|
|
99
|
+
produce_solution_settings_group: Optional[gr.Group] = None
|
|
100
|
+
produce_solution_name: Optional[gr.Textbox] = None
|
|
101
|
+
produce_solution_description: Optional[gr.Textbox] = None
|
|
102
|
+
produce_mode: Optional[gr.Dropdown] = None
|
|
103
|
+
produce_idols: Optional[gr.Dropdown] = None
|
|
104
|
+
produce_auto_set_memory: Optional[gr.Checkbox] = None
|
|
105
|
+
produce_memory_sets_group: Optional[gr.Group] = None
|
|
106
|
+
produce_memory_sets: Optional[gr.Dropdown] = None
|
|
107
|
+
produce_auto_set_support: Optional[gr.Checkbox] = None
|
|
108
|
+
produce_support_card_sets_group: Optional[gr.Group] = None
|
|
109
|
+
produce_support_card_sets: Optional[gr.Dropdown] = None
|
|
110
|
+
produce_use_pt_boost: Optional[gr.Checkbox] = None
|
|
111
|
+
produce_use_note_boost: Optional[gr.Checkbox] = None
|
|
112
|
+
produce_follow_producer: Optional[gr.Checkbox] = None
|
|
113
|
+
produce_self_study_lesson: Optional[gr.Dropdown] = None
|
|
114
|
+
produce_prefer_lesson_ap: Optional[gr.Checkbox] = None
|
|
115
|
+
produce_actions_order: Optional[gr.Dropdown] = None
|
|
116
|
+
produce_recommend_card_detection_mode: Optional[gr.Dropdown] = None
|
|
117
|
+
produce_use_ap_drink: Optional[gr.Checkbox] = None
|
|
118
|
+
produce_skip_commu: Optional[gr.Checkbox] = None
|
|
119
|
+
produce_all_detail_components: List[Any] = field(default_factory=list)
|
|
120
|
+
|
|
121
|
+
# Settings tab components
|
|
122
|
+
settings_solution_dropdown: Optional[gr.Dropdown] = None
|
|
123
|
+
save_settings_btn: Optional[gr.Button] = None
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any
|
|
2
|
+
|
|
3
|
+
import gradio as gr
|
|
4
|
+
|
|
5
|
+
# 图标 SVG 定义
|
|
6
|
+
ICONS: Dict[str, str] = {
|
|
7
|
+
"success": """<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />""",
|
|
8
|
+
"info": """<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd" />""",
|
|
9
|
+
"warning": """<path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd" />""",
|
|
10
|
+
"error": """<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd" />"""
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class Alert(gr.HTML):
|
|
14
|
+
def __init__(
|
|
15
|
+
self,
|
|
16
|
+
value: str = "Alert Content",
|
|
17
|
+
title: Optional[str] = None,
|
|
18
|
+
variant: str = "info",
|
|
19
|
+
action_text: Optional[str] = None,
|
|
20
|
+
show_close: bool = True,
|
|
21
|
+
visible: bool = True,
|
|
22
|
+
elem_id: Optional[str] = None,
|
|
23
|
+
**kwargs: Any
|
|
24
|
+
):
|
|
25
|
+
"""
|
|
26
|
+
继承自 gr.HTML 的自定义 Alert 组件。
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
value: Alert 的主要描述文本。
|
|
30
|
+
title: Alert 的标题(可选)。
|
|
31
|
+
variant: 样式变体,可选 "success", "info", "warning", "error"。
|
|
32
|
+
action_text: 底部操作按钮的文本(可选)。
|
|
33
|
+
show_close: 是否显示关闭按钮。
|
|
34
|
+
visible: 组件初始可见性。
|
|
35
|
+
elem_id: HTML 元素 ID。
|
|
36
|
+
**kwargs: 其他传递给 gr.HTML 的参数。
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
# 1. 样式模板 (CSS Template)
|
|
40
|
+
# 修改点:调整了布局,使 actions 包含在 content 内部以实现对齐
|
|
41
|
+
css = """
|
|
42
|
+
.alert {
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: flex-start; /* 顶部对齐 */
|
|
45
|
+
padding: 1rem;
|
|
46
|
+
border-radius: 0.5rem;
|
|
47
|
+
border: 1px solid transparent;
|
|
48
|
+
margin-bottom: 1rem;
|
|
49
|
+
transition: opacity 0.3s ease;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.alert-icon {
|
|
53
|
+
width: 1.25rem;
|
|
54
|
+
height: 1.25rem;
|
|
55
|
+
margin-right: 0.75rem;
|
|
56
|
+
flex-shrink: 0;
|
|
57
|
+
margin-top: 0.125rem; /* 微调图标与首行文字对齐 */
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.alert-body-wrapper {
|
|
61
|
+
flex: 1;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
gap: 0.25rem; /* 标题、描述、按钮之间的间距 */
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.alert-title {
|
|
68
|
+
font-weight: 600;
|
|
69
|
+
font-size: 0.875rem;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.alert-description {
|
|
73
|
+
font-size: 0.875rem;
|
|
74
|
+
line-height: 1.25rem;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.alert-actions {
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 0.5rem;
|
|
81
|
+
margin-top: 0.25rem; /* 按钮与上方文字的额外间距 */
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Variants Colors */
|
|
85
|
+
.alert-success { background-color: #ecfdf5; border-color: #a7f3d0; color: #065f46; }
|
|
86
|
+
.alert-success .alert-icon, .alert-success .action-btn { color: #059669; }
|
|
87
|
+
|
|
88
|
+
.alert-info { background-color: #eff6ff; border-color: #bfdbfe; color: #1e40af; }
|
|
89
|
+
.alert-info .alert-icon, .alert-info .action-btn { color: #2563eb; }
|
|
90
|
+
|
|
91
|
+
.alert-warning { background-color: #fffbeb; border-color: #fde68a; color: #92400e; }
|
|
92
|
+
.alert-warning .alert-icon, .alert-warning .action-btn { color: #d97706; }
|
|
93
|
+
|
|
94
|
+
.alert-error { background-color: #fef2f2; border-color: #fecaca; color: #991b1b; }
|
|
95
|
+
.alert-error .alert-icon, .alert-error .action-btn { color: #dc2626; }
|
|
96
|
+
|
|
97
|
+
/* Buttons */
|
|
98
|
+
.action-btn {
|
|
99
|
+
background: transparent;
|
|
100
|
+
border: none;
|
|
101
|
+
font-weight: 600;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
padding: 0; /* 移除 padding 以便像链接一样对齐,或者保留 padding 做成按钮样式 */
|
|
104
|
+
padding-right: 0.5rem;
|
|
105
|
+
font-size: 0.875rem;
|
|
106
|
+
text-align: left;
|
|
107
|
+
}
|
|
108
|
+
.action-btn:hover { text-decoration: underline; }
|
|
109
|
+
|
|
110
|
+
.close-btn {
|
|
111
|
+
background: transparent;
|
|
112
|
+
border: none;
|
|
113
|
+
cursor: pointer;
|
|
114
|
+
opacity: 0.6;
|
|
115
|
+
padding: 0.25rem;
|
|
116
|
+
margin-left: 0.75rem; /* 离内容稍微远一点 */
|
|
117
|
+
flex-shrink: 0;
|
|
118
|
+
display: flex;
|
|
119
|
+
}
|
|
120
|
+
.close-btn:hover { opacity: 1; }
|
|
121
|
+
.close-btn svg { width: 1rem; height: 1rem; }
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
# 2. HTML 模板 (HTML Template)
|
|
125
|
+
# 修改点:重构 HTML 结构,将 button 放入 .alert-body-wrapper 中
|
|
126
|
+
html_template = """
|
|
127
|
+
<div class="alert alert-${variant}" role="alert">
|
|
128
|
+
<svg class="alert-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
|
|
129
|
+
${ {
|
|
130
|
+
'success': `""" + ICONS['success'] + """`,
|
|
131
|
+
'info': `""" + ICONS['info'] + """`,
|
|
132
|
+
'warning': `""" + ICONS['warning'] + """`,
|
|
133
|
+
'error': `""" + ICONS['error'] + """`
|
|
134
|
+
}[variant] }
|
|
135
|
+
</svg>
|
|
136
|
+
|
|
137
|
+
<div class="alert-body-wrapper">
|
|
138
|
+
${ title ? `<div class="alert-title">${title}</div>` : '' }
|
|
139
|
+
<div class="alert-description">${value}</div>
|
|
140
|
+
|
|
141
|
+
${ action_text ? `
|
|
142
|
+
<div class="alert-actions">
|
|
143
|
+
<button class="action-btn">${action_text}</button>
|
|
144
|
+
</div>` : '' }
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
${ show_close ? `
|
|
148
|
+
<button class="close-btn" aria-label="Close">
|
|
149
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
|
|
150
|
+
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" />
|
|
151
|
+
</svg>
|
|
152
|
+
</button>` : '' }
|
|
153
|
+
</div>
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
# 3. JS 加载逻辑 (JS on Load)
|
|
157
|
+
js = """
|
|
158
|
+
const actionBtn = element.querySelector('.action-btn');
|
|
159
|
+
const closeBtn = element.querySelector('.close-btn');
|
|
160
|
+
const alertBox = element.querySelector('.alert');
|
|
161
|
+
|
|
162
|
+
if (actionBtn) {
|
|
163
|
+
actionBtn.addEventListener('click', (e) => {
|
|
164
|
+
e.stopPropagation(); // 防止冒泡
|
|
165
|
+
trigger('click', {
|
|
166
|
+
action_text: props.action_text,
|
|
167
|
+
variant: props.variant
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (closeBtn) {
|
|
173
|
+
closeBtn.addEventListener('click', (e) => {
|
|
174
|
+
e.stopPropagation();
|
|
175
|
+
alertBox.style.opacity = '0';
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
alertBox.style.display = 'none';
|
|
178
|
+
// 触发 change 事件通知后端状态变化
|
|
179
|
+
trigger('change', { status: 'closed' });
|
|
180
|
+
}, 300);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
super().__init__(
|
|
186
|
+
value=value,
|
|
187
|
+
title=title,
|
|
188
|
+
variant=variant,
|
|
189
|
+
action_text=action_text,
|
|
190
|
+
show_close=show_close,
|
|
191
|
+
html_template=html_template,
|
|
192
|
+
css_template=css,
|
|
193
|
+
js_on_load=js,
|
|
194
|
+
visible=visible,
|
|
195
|
+
elem_id=elem_id,
|
|
196
|
+
**kwargs
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# --- 使用示例 ---
|
|
200
|
+
|
|
201
|
+
if __name__ == "__main__":
|
|
202
|
+
with gr.Blocks() as demo:
|
|
203
|
+
gr.Markdown("### Alert Component with Typed Arguments & Aligned Layout")
|
|
204
|
+
|
|
205
|
+
with gr.Row():
|
|
206
|
+
with gr.Column():
|
|
207
|
+
# 控制器
|
|
208
|
+
msg_input = gr.Textbox(label="Alert Message", value="你似乎还没有创建任何培育方案。你需要先到「方案」里创建一个!")
|
|
209
|
+
title_input = gr.Textbox(label="Title", value="提示")
|
|
210
|
+
variant_input = gr.Dropdown(["success", "info", "warning", "error"], label="Variant", value="info")
|
|
211
|
+
action_input = gr.Textbox(label="Action Button Text", value="去创建")
|
|
212
|
+
update_btn = gr.Button("Update Alert")
|
|
213
|
+
|
|
214
|
+
with gr.Column():
|
|
215
|
+
# 组件实例化
|
|
216
|
+
alert = Alert(
|
|
217
|
+
title="提示",
|
|
218
|
+
value="你似乎还没有创建任何培育方案。你需要先到「方案」里创建一个!",
|
|
219
|
+
variant="info",
|
|
220
|
+
action_text="去创建",
|
|
221
|
+
elem_id="my-alert"
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
# 结果显示框
|
|
225
|
+
result_box = gr.Textbox(label="Event Log")
|
|
226
|
+
|
|
227
|
+
# 1. 更新 Alert 属性
|
|
228
|
+
def update_props(msg: str, title: str, variant: str, action: str) -> Alert:
|
|
229
|
+
return Alert(value=msg, title=title, variant=variant, action_text=action)
|
|
230
|
+
|
|
231
|
+
update_btn.click(
|
|
232
|
+
update_props,
|
|
233
|
+
inputs=[msg_input, title_input, variant_input, action_input],
|
|
234
|
+
outputs=alert
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
# 2. 处理 Action 按钮点击
|
|
238
|
+
def on_action_click(evt: gr.EventData) -> str:
|
|
239
|
+
data: Dict[str, Any] = evt._data # type: ignore
|
|
240
|
+
return f"Action Clicked! Variant: {data.get('variant')}, Action: {data.get('action_text')}"
|
|
241
|
+
|
|
242
|
+
alert.click(on_action_click, outputs=result_box)
|
|
243
|
+
|
|
244
|
+
# 3. 处理 Close 按钮点击
|
|
245
|
+
def on_close(evt: gr.EventData) -> str:
|
|
246
|
+
data: Dict[str, Any] = evt._data # type: ignore
|
|
247
|
+
return f"Alert Closed. Status: {data.get('status')}"
|
|
248
|
+
|
|
249
|
+
alert.change(on_close, outputs=result_box)
|
|
250
|
+
|
|
251
|
+
demo.launch()
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any
|
|
2
|
+
|
|
3
|
+
import gradio as gr
|
|
4
|
+
|
|
5
|
+
# ͼ�� SVG ����
|
|
6
|
+
ICONS: Dict[str, str] = {
|
|
7
|
+
"success": """<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />""",
|
|
8
|
+
"info": """<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd" />""",
|
|
9
|
+
"warning": """<path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd" />""",
|
|
10
|
+
"error": """<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd" />"""
|
|
11
|
+
}
|
|
12
|
+
from gradio.events import Dependency
|
|
13
|
+
|
|
14
|
+
class Alert(gr.HTML):
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
value: str = "Alert Content",
|
|
18
|
+
title: Optional[str] = None,
|
|
19
|
+
variant: str = "info",
|
|
20
|
+
action_text: Optional[str] = None,
|
|
21
|
+
show_close: bool = True,
|
|
22
|
+
visible: bool = True,
|
|
23
|
+
elem_id: Optional[str] = None,
|
|
24
|
+
**kwargs: Any
|
|
25
|
+
):
|
|
26
|
+
"""
|
|
27
|
+
�̳��� gr.HTML ���Զ��� Alert �����
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
value: Alert ����Ҫ�����ı���
|
|
31
|
+
title: Alert �ı��⣨��ѡ����
|
|
32
|
+
variant: ��ʽ���壬��ѡ "success", "info", "warning", "error"��
|
|
33
|
+
action_text: �ײ�������ť���ı�����ѡ����
|
|
34
|
+
show_close: �Ƿ���ʾ�رհ�ť��
|
|
35
|
+
visible: �����ʼ�ɼ��ԡ�
|
|
36
|
+
elem_id: HTML Ԫ�� ID��
|
|
37
|
+
**kwargs: �������ݸ� gr.HTML �IJ�����
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
# 1. ��ʽģ�� (CSS Template)
|
|
41
|
+
# �ĵ㣺�����˲��֣�ʹ actions ������ content �ڲ���ʵ�ֶ���
|
|
42
|
+
css = """
|
|
43
|
+
.alert {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: flex-start; /* �������� */
|
|
46
|
+
padding: 1rem;
|
|
47
|
+
border-radius: 0.5rem;
|
|
48
|
+
border: 1px solid transparent;
|
|
49
|
+
margin-bottom: 1rem;
|
|
50
|
+
transition: opacity 0.3s ease;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.alert-icon {
|
|
54
|
+
width: 1.25rem;
|
|
55
|
+
height: 1.25rem;
|
|
56
|
+
margin-right: 0.75rem;
|
|
57
|
+
flex-shrink: 0;
|
|
58
|
+
margin-top: 0.125rem; /* ��ͼ�����������ֶ��� */
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.alert-body-wrapper {
|
|
62
|
+
flex: 1;
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
gap: 0.25rem; /* ���⡢��������ť֮��ļ�� */
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.alert-title {
|
|
69
|
+
font-weight: 600;
|
|
70
|
+
font-size: 0.875rem;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.alert-description {
|
|
74
|
+
font-size: 0.875rem;
|
|
75
|
+
line-height: 1.25rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.alert-actions {
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 0.5rem;
|
|
82
|
+
margin-top: 0.25rem; /* ��ť���Ϸ����ֵĶ����� */
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* Variants Colors */
|
|
86
|
+
.alert-success { background-color: #ecfdf5; border-color: #a7f3d0; color: #065f46; }
|
|
87
|
+
.alert-success .alert-icon, .alert-success .action-btn { color: #059669; }
|
|
88
|
+
|
|
89
|
+
.alert-info { background-color: #eff6ff; border-color: #bfdbfe; color: #1e40af; }
|
|
90
|
+
.alert-info .alert-icon, .alert-info .action-btn { color: #2563eb; }
|
|
91
|
+
|
|
92
|
+
.alert-warning { background-color: #fffbeb; border-color: #fde68a; color: #92400e; }
|
|
93
|
+
.alert-warning .alert-icon, .alert-warning .action-btn { color: #d97706; }
|
|
94
|
+
|
|
95
|
+
.alert-error { background-color: #fef2f2; border-color: #fecaca; color: #991b1b; }
|
|
96
|
+
.alert-error .alert-icon, .alert-error .action-btn { color: #dc2626; }
|
|
97
|
+
|
|
98
|
+
/* Buttons */
|
|
99
|
+
.action-btn {
|
|
100
|
+
background: transparent;
|
|
101
|
+
border: none;
|
|
102
|
+
font-weight: 600;
|
|
103
|
+
cursor: pointer;
|
|
104
|
+
padding: 0; /* �Ƴ� padding �Ա�������һ�����룬���߱��� padding ���ɰ�ť��ʽ */
|
|
105
|
+
padding-right: 0.5rem;
|
|
106
|
+
font-size: 0.875rem;
|
|
107
|
+
text-align: left;
|
|
108
|
+
}
|
|
109
|
+
.action-btn:hover { text-decoration: underline; }
|
|
110
|
+
|
|
111
|
+
.close-btn {
|
|
112
|
+
background: transparent;
|
|
113
|
+
border: none;
|
|
114
|
+
cursor: pointer;
|
|
115
|
+
opacity: 0.6;
|
|
116
|
+
padding: 0.25rem;
|
|
117
|
+
margin-left: 0.75rem; /* ��������Զһ�� */
|
|
118
|
+
flex-shrink: 0;
|
|
119
|
+
display: flex;
|
|
120
|
+
}
|
|
121
|
+
.close-btn:hover { opacity: 1; }
|
|
122
|
+
.close-btn svg { width: 1rem; height: 1rem; }
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
# 2. HTML � (HTML Template)
|
|
126
|
+
# �ĵ㣺�ع� HTML �ṹ���� button ���� .alert-body-wrapper ��
|
|
127
|
+
html_template = """
|
|
128
|
+
<div class="alert alert-${variant}" role="alert">
|
|
129
|
+
<svg class="alert-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
|
|
130
|
+
${ {
|
|
131
|
+
'success': `""" + ICONS['success'] + """`,
|
|
132
|
+
'info': `""" + ICONS['info'] + """`,
|
|
133
|
+
'warning': `""" + ICONS['warning'] + """`,
|
|
134
|
+
'error': `""" + ICONS['error'] + """`
|
|
135
|
+
}[variant] }
|
|
136
|
+
</svg>
|
|
137
|
+
|
|
138
|
+
<div class="alert-body-wrapper">
|
|
139
|
+
${ title ? `<div class="alert-title">${title}</div>` : '' }
|
|
140
|
+
<div class="alert-description">${value}</div>
|
|
141
|
+
|
|
142
|
+
${ action_text ? `
|
|
143
|
+
<div class="alert-actions">
|
|
144
|
+
<button class="action-btn">${action_text}</button>
|
|
145
|
+
</div>` : '' }
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
${ show_close ? `
|
|
149
|
+
<button class="close-btn" aria-label="Close">
|
|
150
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
|
|
151
|
+
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" />
|
|
152
|
+
</svg>
|
|
153
|
+
</button>` : '' }
|
|
154
|
+
</div>
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
# 3. JS ������ (JS on Load)
|
|
158
|
+
js = """
|
|
159
|
+
const actionBtn = element.querySelector('.action-btn');
|
|
160
|
+
const closeBtn = element.querySelector('.close-btn');
|
|
161
|
+
const alertBox = element.querySelector('.alert');
|
|
162
|
+
|
|
163
|
+
if (actionBtn) {
|
|
164
|
+
actionBtn.addEventListener('click', (e) => {
|
|
165
|
+
e.stopPropagation(); // ��ֹð��
|
|
166
|
+
trigger('click', {
|
|
167
|
+
action_text: props.action_text,
|
|
168
|
+
variant: props.variant
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (closeBtn) {
|
|
174
|
+
closeBtn.addEventListener('click', (e) => {
|
|
175
|
+
e.stopPropagation();
|
|
176
|
+
alertBox.style.opacity = '0';
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
alertBox.style.display = 'none';
|
|
179
|
+
// ���� change �¼�֪ͨ���״̬�仯
|
|
180
|
+
trigger('change', { status: 'closed' });
|
|
181
|
+
}, 300);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
super().__init__(
|
|
187
|
+
value=value,
|
|
188
|
+
title=title,
|
|
189
|
+
variant=variant,
|
|
190
|
+
action_text=action_text,
|
|
191
|
+
show_close=show_close,
|
|
192
|
+
html_template=html_template,
|
|
193
|
+
css_template=css,
|
|
194
|
+
js_on_load=js,
|
|
195
|
+
visible=visible,
|
|
196
|
+
elem_id=elem_id,
|
|
197
|
+
**kwargs
|
|
198
|
+
)
|
|
199
|
+
from typing import Callable, Literal, Sequence, Any, TYPE_CHECKING
|
|
200
|
+
from gradio.blocks import Block
|
|
201
|
+
if TYPE_CHECKING:
|
|
202
|
+
from gradio.components import Timer
|
|
203
|
+
from gradio.components.base import Component
|
|
204
|
+
|
|
205
|
+
# --- ʹ��ʾ�� ---
|
|
206
|
+
|
|
207
|
+
if __name__ == "__main__":
|
|
208
|
+
with gr.Blocks() as demo:
|
|
209
|
+
gr.Markdown("### Alert Component with Typed Arguments & Aligned Layout")
|
|
210
|
+
|
|
211
|
+
with gr.Row():
|
|
212
|
+
with gr.Column():
|
|
213
|
+
# ������
|
|
214
|
+
msg_input = gr.Textbox(label="Alert Message", value="���ƺ���û�д����κ���������������Ҫ�ȵ����������ﴴ��һ����")
|
|
215
|
+
title_input = gr.Textbox(label="Title", value="��ʾ")
|
|
216
|
+
variant_input = gr.Dropdown(["success", "info", "warning", "error"], label="Variant", value="info")
|
|
217
|
+
action_input = gr.Textbox(label="Action Button Text", value="ȥ����")
|
|
218
|
+
update_btn = gr.Button("Update Alert")
|
|
219
|
+
|
|
220
|
+
with gr.Column():
|
|
221
|
+
# ���ʵ����
|
|
222
|
+
alert = Alert(
|
|
223
|
+
title="��ʾ",
|
|
224
|
+
value="���ƺ���û�д����κ���������������Ҫ�ȵ����������ﴴ��һ����",
|
|
225
|
+
variant="info",
|
|
226
|
+
action_text="ȥ����",
|
|
227
|
+
elem_id="my-alert"
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
# �����ʾ��
|
|
231
|
+
result_box = gr.Textbox(label="Event Log")
|
|
232
|
+
|
|
233
|
+
# 1. ���� Alert ����
|
|
234
|
+
def update_props(msg: str, title: str, variant: str, action: str) -> Alert:
|
|
235
|
+
return Alert(value=msg, title=title, variant=variant, action_text=action)
|
|
236
|
+
|
|
237
|
+
update_btn.click(
|
|
238
|
+
update_props,
|
|
239
|
+
inputs=[msg_input, title_input, variant_input, action_input],
|
|
240
|
+
outputs=alert
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# 2. ���� Action ��ť���
|
|
244
|
+
def on_action_click(evt: gr.EventData) -> str:
|
|
245
|
+
data: Dict[str, Any] = evt._data # type: ignore
|
|
246
|
+
return f"Action Clicked! Variant: {data.get('variant')}, Action: {data.get('action_text')}"
|
|
247
|
+
|
|
248
|
+
alert.click(on_action_click, outputs=result_box)
|
|
249
|
+
|
|
250
|
+
# 3. ���� Close ��ť���
|
|
251
|
+
def on_close(evt: gr.EventData) -> str:
|
|
252
|
+
data: Dict[str, Any] = evt._data # type: ignore
|
|
253
|
+
return f"Alert Closed. Status: {data.get('status')}"
|
|
254
|
+
|
|
255
|
+
alert.change(on_close, outputs=result_box)
|
|
256
|
+
|
|
257
|
+
demo.launch()
|