From 0eb7482dbb61020f29fd34367d647ed30962b6fd Mon Sep 17 00:00:00 2001 From: Col0ring <1561999073@qq.com> Date: Fri, 13 Dec 2024 18:31:59 +0800 Subject: [PATCH 1/2] fix: make sure bind correct events when use gr.render triggers --- .changeset/healthy-buckets-flash.md | 7 + .../components/antd/button/__init__.py | 8 +- .../antd/date_picker/range_picker/__init__.py | 8 +- .../antd/time_picker/range_picker/__init__.py | 8 +- .../components/antd/tour/step/__init__.py | 4 +- .../components/antd/tree/__init__.py | 2 +- .../antd/tree/directory_tree/__init__.py | 2 +- .../antd/date_picker/README-zh_CN.md | 2 +- docs/components/antd/date_picker/README.md | 2 +- .../{ranger_picker.py => range_picker.py} | 2 - .../antd/time_picker/README-zh_CN.md | 2 +- docs/components/antd/time_picker/README.md | 2 +- .../{ranger_picker.py => range_picker.py} | 0 docs/components/base/each/README-zh_CN.md | 3 + docs/components/base/each/README.md | 2 + frontend/antd/auto-complete/Index.svelte | 4 +- frontend/antd/breadcrumb/Index.svelte | 9 +- frontend/antd/calendar/Index.svelte | 4 +- frontend/antd/card/Index.svelte | 4 +- frontend/antd/cascader/Index.svelte | 5 +- frontend/antd/cascader/panel/Index.svelte | 4 +- frontend/antd/collapse/item/Index.svelte | 4 +- frontend/antd/color-picker/Index.svelte | 6 +- frontend/antd/date-picker/Index.svelte | 5 +- .../date-picker/range-picker/Index.svelte | 4 +- frontend/antd/dropdown/Index.svelte | 5 +- frontend/antd/dropdown/button/Index.svelte | 5 +- frontend/antd/float-button/Index.svelte | 4 +- frontend/antd/form/Index.svelte | 6 +- frontend/antd/form/provider/Index.svelte | 5 +- frontend/antd/image/Index.svelte | 4 +- .../antd/image/preview-group/Index.svelte | 4 +- frontend/antd/input-number/Index.svelte | 4 +- frontend/antd/input/Index.svelte | 4 +- frontend/antd/input/password/Index.svelte | 5 +- frontend/antd/input/search/Index.svelte | 4 +- frontend/antd/input/textarea/Index.svelte | 4 +- frontend/antd/list/Index.svelte | 4 +- frontend/antd/menu/Index.svelte | 4 +- frontend/antd/menu/item/Index.svelte | 4 +- frontend/antd/pagination/Index.svelte | 4 +- frontend/antd/popconfirm/Index.svelte | 5 +- frontend/antd/popover/Index.svelte | 4 +- frontend/antd/rate/Index.svelte | 5 +- frontend/antd/select/Index.svelte | 5 +- frontend/antd/slider/Index.svelte | 4 +- frontend/antd/splitter/Index.svelte | 5 +- frontend/antd/table/column/Column.svelte | 4 +- .../antd/table/expandable/Expandable.svelte | 4 +- .../table/row-selection/RowSelection.svelte | 7 +- frontend/antd/tabs/Index.svelte | 5 +- frontend/antd/time-picker/Index.svelte | 5 +- .../time-picker/range-picker/Index.svelte | 4 +- frontend/antd/tooltip/Index.svelte | 4 +- frontend/antd/tour/step/Index.svelte | 5 +- frontend/antd/transfer/Index.svelte | 4 +- frontend/antd/tree-select/Index.svelte | 7 +- frontend/antd/tree/Index.svelte | 10 +- .../antd/tree/directory-tree/Index.svelte | 10 +- frontend/antd/typography/Base.svelte | 4 +- frontend/svelte-preprocess-react/component.ts | 176 ++++++++++-------- .../internal/Bridge.ts | 13 +- 62 files changed, 314 insertions(+), 149 deletions(-) create mode 100644 .changeset/healthy-buckets-flash.md rename docs/components/antd/date_picker/demos/{ranger_picker.py => range_picker.py} (98%) rename docs/components/antd/time_picker/demos/{ranger_picker.py => range_picker.py} (100%) diff --git a/.changeset/healthy-buckets-flash.md b/.changeset/healthy-buckets-flash.md new file mode 100644 index 00000000..883a6547 --- /dev/null +++ b/.changeset/healthy-buckets-flash.md @@ -0,0 +1,7 @@ +--- +'@modelscope-studio/antd': patch +'@modelscope-studio/frontend': patch +'modelscope_studio': patch +--- + +fix: make sure bind correct events when use gr.render triggers diff --git a/backend/modelscope_studio/components/antd/button/__init__.py b/backend/modelscope_studio/components/antd/button/__init__.py index 680ec7b2..c4428cf0 100644 --- a/backend/modelscope_studio/components/antd/button/__init__.py +++ b/backend/modelscope_studio/components/antd/button/__init__.py @@ -56,16 +56,16 @@ def __init__( disabled: bool | None = None, ghost: bool | None = None, href: str | None = None, - html_type: Literal["button", "submit", "reset"] | None = "button", + html_type: Literal["button", "submit", "reset"] | None = None, icon: str | None = None, - icon_position: Literal["start", "end"] | None = "start", + icon_position: Literal["start", "end"] | None = None, loading: bool | None = None, - shape: Literal["default", "circle", "round"] | None = "default", + shape: Literal["default", "circle", "round"] | None = None, 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", + | None = None, variant: Literal["outlined", "dashed", "solid", "filled", "text", "link"] | None = None, color: Literal['default', 'primary', 'danger'] | None = 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 index 3da4ea15..1ce64a2f 100644 --- a/backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py +++ b/backend/modelscope_studio/components/antd/date_picker/range_picker/__init__.py @@ -17,12 +17,12 @@ class AntdDatePickerRangePicker(ModelScopeDataLayoutComponent): 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", + EventListener("calendar_change", callback=lambda block: block._internal.update( bind_calendarChange_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), EventListener("blur", callback=lambda block: block._internal.update( bind_blur_event=True)), 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 index 6c34cef3..dedb748c 100644 --- a/backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py +++ b/backend/modelscope_studio/components/antd/time_picker/range_picker/__init__.py @@ -17,12 +17,12 @@ class AntdTimePickerRangePicker(ModelScopeDataLayoutComponent): 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", + EventListener("calendar_change", callback=lambda block: block._internal.update( bind_calendarChange_event=True)), + EventListener("focus", + callback=lambda block: block._internal.update( + bind_focus_event=True)), EventListener("blur", callback=lambda block: block._internal.update( bind_blur_event=True)), diff --git a/backend/modelscope_studio/components/antd/tour/step/__init__.py b/backend/modelscope_studio/components/antd/tour/step/__init__.py index 2b68fddb..a6be0b4e 100644 --- a/backend/modelscope_studio/components/antd/tour/step/__init__.py +++ b/backend/modelscope_studio/components/antd/tour/step/__init__.py @@ -15,10 +15,10 @@ class AntdTourStep(ModelScopeLayoutComponent): EventListener("close", callback=lambda block: block._internal.update( bind_close_event=True)), - EventListener("next_button_props_click", + EventListener("next_button_click", callback=lambda block: block._internal.update( bind_nextButtonProps_click_event=True)), - EventListener("prev_button_props_click", + EventListener("prev_button_click", callback=lambda block: block._internal.update( bind_prevButtonProps_click_event=True)), ] diff --git a/backend/modelscope_studio/components/antd/tree/__init__.py b/backend/modelscope_studio/components/antd/tree/__init__.py index c54d9212..279394ea 100644 --- a/backend/modelscope_studio/components/antd/tree/__init__.py +++ b/backend/modelscope_studio/components/antd/tree/__init__.py @@ -37,7 +37,7 @@ class AntdTree(ModelScopeLayoutComponent): bind_dragStart_event=True)), EventListener("drop", callback=lambda block: block._internal.update( - bind_dragDrop_event=True)), + bind_drop_event=True)), EventListener("expand", callback=lambda block: block._internal.update( bind_expand_event=True)), diff --git a/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py b/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py index 43a2a72a..3a390e73 100644 --- a/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py +++ b/backend/modelscope_studio/components/antd/tree/directory_tree/__init__.py @@ -33,7 +33,7 @@ class AntdTreeDirectoryTree(ModelScopeLayoutComponent): bind_dragStart_event=True)), EventListener("drop", callback=lambda block: block._internal.update( - bind_dragDrop_event=True)), + bind_drop_event=True)), EventListener("expand", callback=lambda block: block._internal.update( bind_expand_event=True)), diff --git a/docs/components/antd/date_picker/README-zh_CN.md b/docs/components/antd/date_picker/README-zh_CN.md index 71ae1d14..5ebb9a90 100644 --- a/docs/components/antd/date_picker/README-zh_CN.md +++ b/docs/components/antd/date_picker/README-zh_CN.md @@ -5,4 +5,4 @@ To select or input a date. See [Ant Design](https://ant.design/components/date-p ## Examples - + diff --git a/docs/components/antd/date_picker/README.md b/docs/components/antd/date_picker/README.md index 71ae1d14..5ebb9a90 100644 --- a/docs/components/antd/date_picker/README.md +++ b/docs/components/antd/date_picker/README.md @@ -5,4 +5,4 @@ To select or input a date. See [Ant Design](https://ant.design/components/date-p ## Examples - + diff --git a/docs/components/antd/date_picker/demos/ranger_picker.py b/docs/components/antd/date_picker/demos/range_picker.py similarity index 98% rename from docs/components/antd/date_picker/demos/ranger_picker.py rename to docs/components/antd/date_picker/demos/range_picker.py index dd8123ce..62660e43 100644 --- a/docs/components/antd/date_picker/demos/ranger_picker.py +++ b/docs/components/antd/date_picker/demos/range_picker.py @@ -1,5 +1,3 @@ -import time - import gradio as gr import modelscope_studio.components.antd as antd diff --git a/docs/components/antd/time_picker/README-zh_CN.md b/docs/components/antd/time_picker/README-zh_CN.md index 27d81f68..94521170 100644 --- a/docs/components/antd/time_picker/README-zh_CN.md +++ b/docs/components/antd/time_picker/README-zh_CN.md @@ -5,4 +5,4 @@ To select/input a time. See [Ant Design](https://ant.design/components/time-pick ## Examples - + diff --git a/docs/components/antd/time_picker/README.md b/docs/components/antd/time_picker/README.md index 27d81f68..94521170 100644 --- a/docs/components/antd/time_picker/README.md +++ b/docs/components/antd/time_picker/README.md @@ -5,4 +5,4 @@ To select/input a time. See [Ant Design](https://ant.design/components/time-pick ## Examples - + diff --git a/docs/components/antd/time_picker/demos/ranger_picker.py b/docs/components/antd/time_picker/demos/range_picker.py similarity index 100% rename from docs/components/antd/time_picker/demos/ranger_picker.py rename to docs/components/antd/time_picker/demos/range_picker.py diff --git a/docs/components/base/each/README-zh_CN.md b/docs/components/base/each/README-zh_CN.md index d2fb4257..4fd52419 100644 --- a/docs/components/base/each/README-zh_CN.md +++ b/docs/components/base/each/README-zh_CN.md @@ -2,10 +2,13 @@ 辅助渲染组件,该组件支持传入列表作为参数,并会在前端遍历被包裹的组件,将列表的每一项注入当前遍历的上下文中,被包裹的组件属性会在前端被相应的上下文属性替换(只支持从`modelscope_studio`中导出的组件)。 +> 注意:在大多数情况下,您不需要使用`Each`组件,如果您需要动态渲染组件,我们更建议您使 Gradio 提供的 [render](https://www.gradio.app/docs/gradio/render) 函数。 + ## 何时使用 - 当被遍历的组件中全部都是`modelscope_studio`组件或非`modelscope_studio`的组件值不与被遍历的值绑定时; - 当需要遍历展示的列表长度无法确定时; +- 不想要在 Python 中绑定过多事件监听时; ## 示例 diff --git a/docs/components/base/each/README.md b/docs/components/base/each/README.md index 2c22674d..ddc30c9f 100644 --- a/docs/components/base/each/README.md +++ b/docs/components/base/each/README.md @@ -2,6 +2,8 @@ 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`). +> Note: In most cases, you do not need to use the `Each` component. If you need to render components dynamically, we recommend using the [render](https://www.gradio.app/docs/gradio/render) function provided by Gradio. + ## 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. diff --git a/frontend/antd/auto-complete/Index.svelte b/frontend/antd/auto-complete/Index.svelte index 58657881..5a676c9e 100644 --- a/frontend/antd/auto-complete/Index.svelte +++ b/frontend/antd/auto-complete/Index.svelte @@ -71,7 +71,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + dropdown_visible_change: 'dropdownVisibleChange', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} optionItems={$options.length > 0 ? $options : $children} diff --git a/frontend/antd/breadcrumb/Index.svelte b/frontend/antd/breadcrumb/Index.svelte index 6da140f0..cfcb9e88 100644 --- a/frontend/antd/breadcrumb/Index.svelte +++ b/frontend/antd/breadcrumb/Index.svelte @@ -69,7 +69,14 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + menu_open_change: 'menu_openChange', + dropdown_open_change: 'dropdownProps_openChange', + dropdown_menu_click: 'dropdownProps_menu_click', + dropdown_menu_deselect: 'dropdownProps_menu_deselect', + dropdown_menu_open_change: 'dropdownProps_menu_openChange', + dropdown_menu_select: 'dropdownProps_menu_select', + })} slots={$slots} slotItems={$items.length > 0 ? $items : $children} {setSlotParams} diff --git a/frontend/antd/calendar/Index.svelte b/frontend/antd/calendar/Index.svelte index e5b45b82..d94f23c9 100644 --- a/frontend/antd/calendar/Index.svelte +++ b/frontend/antd/calendar/Index.svelte @@ -69,7 +69,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + panel_change: 'panelChange', + })} slots={$slots} value={$mergedProps.props.value || $mergedProps.value} onValueChange={(val) => { diff --git a/frontend/antd/card/Index.svelte b/frontend/antd/card/Index.svelte index a45a4ec9..eef7f3e0 100644 --- a/frontend/antd/card/Index.svelte +++ b/frontend/antd/card/Index.svelte @@ -65,7 +65,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + tab_change: 'tabChange', + })} containsGrid={$mergedProps._internal.contains_grid} slots={$slots} tabListItems={$tabList} diff --git a/frontend/antd/cascader/Index.svelte b/frontend/antd/cascader/Index.svelte index 9cdb2328..21ee183e 100644 --- a/frontend/antd/cascader/Index.svelte +++ b/frontend/antd/cascader/Index.svelte @@ -71,7 +71,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + dropdown_visible_change: 'dropdownVisibleChange', + load_data: 'loadData', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} optionItems={$options.length > 0 ? $options : $children} diff --git a/frontend/antd/cascader/panel/Index.svelte b/frontend/antd/cascader/panel/Index.svelte index 24caf22a..5507c0b4 100644 --- a/frontend/antd/cascader/panel/Index.svelte +++ b/frontend/antd/cascader/panel/Index.svelte @@ -68,7 +68,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + load_data: 'loadData', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} optionItems={$options.length > 0 ? $options : $children} diff --git a/frontend/antd/collapse/item/Index.svelte b/frontend/antd/collapse/item/Index.svelte index f1fbc5d3..ae302dcc 100644 --- a/frontend/antd/collapse/item/Index.svelte +++ b/frontend/antd/collapse/item/Index.svelte @@ -64,7 +64,9 @@ id: $mergedProps.elem_id, ...$mergedProps.restProps, ...$mergedProps.props, - ...bindEvents($mergedProps), + ...bindEvents($mergedProps, { + item_click: 'itemClick', + }), }, slots: { children: $slot, diff --git a/frontend/antd/color-picker/Index.svelte b/frontend/antd/color-picker/Index.svelte index 261b8eac..e2df575a 100644 --- a/frontend/antd/color-picker/Index.svelte +++ b/frontend/antd/color-picker/Index.svelte @@ -72,7 +72,11 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + change_complete: 'changeComplete', + open_change: 'openChange', + format_change: 'formatChange', + })} value={$mergedProps.props.value ?? $mergedProps.value ?? undefined} slots={$slots} presetItems={$presets} diff --git a/frontend/antd/date-picker/Index.svelte b/frontend/antd/date-picker/Index.svelte index 49074b0e..20357db6 100644 --- a/frontend/antd/date-picker/Index.svelte +++ b/frontend/antd/date-picker/Index.svelte @@ -73,7 +73,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + panel_change: 'panelChange', + open_change: 'openChange', + })} slots={$slots} value={$mergedProps.props.value || $mergedProps.value} presetItems={$presets} diff --git a/frontend/antd/date-picker/range-picker/Index.svelte b/frontend/antd/date-picker/range-picker/Index.svelte index 8388ad47..edf73427 100644 --- a/frontend/antd/date-picker/range-picker/Index.svelte +++ b/frontend/antd/date-picker/range-picker/Index.svelte @@ -78,7 +78,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + calendar_change: 'calendarChange', + })} slots={$slots} value={$mergedProps.props.value || $mergedProps.value} presetItems={$presets} diff --git a/frontend/antd/dropdown/Index.svelte b/frontend/antd/dropdown/Index.svelte index 4fd369b9..814ffb7c 100644 --- a/frontend/antd/dropdown/Index.svelte +++ b/frontend/antd/dropdown/Index.svelte @@ -68,7 +68,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + menu_open_change: 'menu_openChange', + })} slots={$slots} menuItems={$items} {setSlotParams} diff --git a/frontend/antd/dropdown/button/Index.svelte b/frontend/antd/dropdown/button/Index.svelte index ccfa0fab..50d808e9 100644 --- a/frontend/antd/dropdown/button/Index.svelte +++ b/frontend/antd/dropdown/button/Index.svelte @@ -74,7 +74,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + menu_open_change: 'menu_OpenChange', + })} slots={$slots} menuItems={$items} {setSlotParams} diff --git a/frontend/antd/float-button/Index.svelte b/frontend/antd/float-button/Index.svelte index b3e73778..1891fe5e 100644 --- a/frontend/antd/float-button/Index.svelte +++ b/frontend/antd/float-button/Index.svelte @@ -66,7 +66,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + })} slots={$slots} > diff --git a/frontend/antd/form/Index.svelte b/frontend/antd/form/Index.svelte index 7e5d612b..bfe9a589 100644 --- a/frontend/antd/form/Index.svelte +++ b/frontend/antd/form/Index.svelte @@ -73,7 +73,11 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + fields_change: 'fieldsChange', + finish_failed: 'finishFailed', + values_change: 'valuesChange', + })} slots={$slots} value={$mergedProps.value} onValueChange={(v) => { diff --git a/frontend/antd/form/provider/Index.svelte b/frontend/antd/form/provider/Index.svelte index 80e0e807..ac15cd75 100644 --- a/frontend/antd/form/provider/Index.svelte +++ b/frontend/antd/form/provider/Index.svelte @@ -54,7 +54,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + form_change: 'formChange', + form_finish: 'formFinish', + })} slots={{}} > diff --git a/frontend/antd/image/Index.svelte b/frontend/antd/image/Index.svelte index 83b4fa9b..57a701f6 100644 --- a/frontend/antd/image/Index.svelte +++ b/frontend/antd/image/Index.svelte @@ -78,7 +78,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + preview_visible_change: 'preview_visibleChange', + })} slots={$slots} src={$mergedProps.props.src || src} {setSlotParams} diff --git a/frontend/antd/image/preview-group/Index.svelte b/frontend/antd/image/preview-group/Index.svelte index 489df6c2..56bf9834 100644 --- a/frontend/antd/image/preview-group/Index.svelte +++ b/frontend/antd/image/preview-group/Index.svelte @@ -69,7 +69,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + preview_visible_change: 'preview_visibleChange', + })} slots={$slots} items={$mergedProps.props.items || $mergedProps.items} > diff --git a/frontend/antd/input-number/Index.svelte b/frontend/antd/input-number/Index.svelte index 865ed457..53ce7501 100644 --- a/frontend/antd/input-number/Index.svelte +++ b/frontend/antd/input-number/Index.svelte @@ -63,7 +63,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + press_enter: 'pressEnter', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} onValueChange={(v) => { diff --git a/frontend/antd/input/Index.svelte b/frontend/antd/input/Index.svelte index 5579b30d..6a18655e 100644 --- a/frontend/antd/input/Index.svelte +++ b/frontend/antd/input/Index.svelte @@ -67,7 +67,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + press_enter: 'pressEnter', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} onValueChange={(v) => { diff --git a/frontend/antd/input/password/Index.svelte b/frontend/antd/input/password/Index.svelte index ebde2452..67ae2612 100644 --- a/frontend/antd/input/password/Index.svelte +++ b/frontend/antd/input/password/Index.svelte @@ -72,7 +72,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + press_enter: 'pressEnter', + visibility_toggle_visible_change: 'visibilityToggle_visibleChange', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} onValueChange={(v) => { diff --git a/frontend/antd/input/search/Index.svelte b/frontend/antd/input/search/Index.svelte index bb6caba2..bfdd86a6 100644 --- a/frontend/antd/input/search/Index.svelte +++ b/frontend/antd/input/search/Index.svelte @@ -70,7 +70,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + press_enter: 'pressEnter', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} onValueChange={(v) => { diff --git a/frontend/antd/input/textarea/Index.svelte b/frontend/antd/input/textarea/Index.svelte index bdb536a6..e087d762 100644 --- a/frontend/antd/input/textarea/Index.svelte +++ b/frontend/antd/input/textarea/Index.svelte @@ -72,7 +72,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + press_enter: 'pressEnter', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} onValueChange={(v) => { diff --git a/frontend/antd/list/Index.svelte b/frontend/antd/list/Index.svelte index 285bae20..75eafc60 100644 --- a/frontend/antd/list/Index.svelte +++ b/frontend/antd/list/Index.svelte @@ -65,7 +65,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + pagination_show_size_change: 'pagination_showSizeChange', + })} slots={$slots} {setSlotParams} > diff --git a/frontend/antd/menu/Index.svelte b/frontend/antd/menu/Index.svelte index 7e26f124..e5fb8b54 100644 --- a/frontend/antd/menu/Index.svelte +++ b/frontend/antd/menu/Index.svelte @@ -68,7 +68,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + })} slots={$slots} slotItems={$items.length > 0 ? $items : $children} {setSlotParams} diff --git a/frontend/antd/menu/item/Index.svelte b/frontend/antd/menu/item/Index.svelte index 451e1558..8bd4b7f8 100644 --- a/frontend/antd/menu/item/Index.svelte +++ b/frontend/antd/menu/item/Index.svelte @@ -74,7 +74,9 @@ label: $mergedProps.label, ...$mergedProps.restProps, ...$mergedProps.props, - ...bindEvents($mergedProps), + ...bindEvents($mergedProps, { + title_click: 'titleClick', + }), }, slots: { ...$slots, diff --git a/frontend/antd/pagination/Index.svelte b/frontend/antd/pagination/Index.svelte index 913c6f5c..3b566649 100644 --- a/frontend/antd/pagination/Index.svelte +++ b/frontend/antd/pagination/Index.svelte @@ -65,7 +65,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + show_size_change: 'showSizeChange', + })} slots={$slots} {setSlotParams} > diff --git a/frontend/antd/popconfirm/Index.svelte b/frontend/antd/popconfirm/Index.svelte index 52dc8ad4..f2c22de7 100644 --- a/frontend/antd/popconfirm/Index.svelte +++ b/frontend/antd/popconfirm/Index.svelte @@ -63,7 +63,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + popup_click: 'popupClick', + })} slots={$slots} title={$mergedProps.props.title || $mergedProps.title} > diff --git a/frontend/antd/popover/Index.svelte b/frontend/antd/popover/Index.svelte index 1ca93eb0..0587d97f 100644 --- a/frontend/antd/popover/Index.svelte +++ b/frontend/antd/popover/Index.svelte @@ -62,7 +62,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + })} slots={$slots} content={$mergedProps.props.content || $mergedProps.content} > diff --git a/frontend/antd/rate/Index.svelte b/frontend/antd/rate/Index.svelte index 6e9098ca..2ba203ca 100644 --- a/frontend/antd/rate/Index.svelte +++ b/frontend/antd/rate/Index.svelte @@ -69,7 +69,10 @@ value={$mergedProps.value} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + hover_change: 'hoverChange', + key_down: 'keyDown', + })} slots={$slots} onValueChange={(v) => { value = v; diff --git a/frontend/antd/select/Index.svelte b/frontend/antd/select/Index.svelte index 2d3ff656..deaf6b94 100644 --- a/frontend/antd/select/Index.svelte +++ b/frontend/antd/select/Index.svelte @@ -71,7 +71,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + popup_scroll: 'popupScroll', + dropdown_visible_change: 'dropdownVisibleChange', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} optionItems={$options.length > 0 ? $options : $children} diff --git a/frontend/antd/slider/Index.svelte b/frontend/antd/slider/Index.svelte index 13195362..6388bb35 100644 --- a/frontend/antd/slider/Index.svelte +++ b/frontend/antd/slider/Index.svelte @@ -71,7 +71,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + change_complete: 'changeComplete', + })} value={$mergedProps.props.value ?? $mergedProps.value} slots={$slots} markItems={$marks} diff --git a/frontend/antd/splitter/Index.svelte b/frontend/antd/splitter/Index.svelte index 7ba98150..72519ead 100644 --- a/frontend/antd/splitter/Index.svelte +++ b/frontend/antd/splitter/Index.svelte @@ -63,7 +63,10 @@ className={cls($mergedProps.elem_classes, 'ms-gr-antd-splitter')} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + resize_start: 'resizeStart', + resize_end: 'resizeEnd', + })} slots={$slots} items={$items} > diff --git a/frontend/antd/table/column/Column.svelte b/frontend/antd/table/column/Column.svelte index 148a773f..21dfa019 100644 --- a/frontend/antd/table/column/Column.svelte +++ b/frontend/antd/table/column/Column.svelte @@ -141,7 +141,9 @@ id: $mergedProps.elem_id, ...$mergedProps.restProps, ...$mergedProps.props, - ...bindEvents($mergedProps), + ...bindEvents($mergedProps, { + filter_dropdown_open_change: 'filterDropdownOpenChange', + }), render: createFunction( $mergedProps.props.render || $mergedProps.restProps.render ), diff --git a/frontend/antd/table/expandable/Expandable.svelte b/frontend/antd/table/expandable/Expandable.svelte index ea88bbec..fac01313 100644 --- a/frontend/antd/table/expandable/Expandable.svelte +++ b/frontend/antd/table/expandable/Expandable.svelte @@ -60,7 +60,9 @@ const setSlotParams = getSetSlotParamsFn(); const setExpandableItem = getSetExpandableItemFn(); $: { - const events = bindEvents($mergedProps); + const events = bindEvents($mergedProps, { + expanded_rows_change: 'expandedRowsChange', + }); setExpandableItem($slotKey, $mergedProps._internal.index || 0, { props: { diff --git a/frontend/antd/table/row-selection/RowSelection.svelte b/frontend/antd/table/row-selection/RowSelection.svelte index 5d5954a7..47070aee 100644 --- a/frontend/antd/table/row-selection/RowSelection.svelte +++ b/frontend/antd/table/row-selection/RowSelection.svelte @@ -62,7 +62,12 @@ const { selections: selectionsItems } = getSelectionItems(['selections']); const setRowSelectionItem = getSetRowSelectionItemFn(); $: { - const events = bindEvents($mergedProps); + const events = bindEvents($mergedProps, { + select_all: 'selectAll', + select_invert: 'selectInvert', + select_none: 'selectNone', + select_multiple: 'selectMultiple', + }); setRowSelectionItem($slotKey, $mergedProps._internal.index || 0, { props: { style: $mergedProps.elem_style, diff --git a/frontend/antd/tabs/Index.svelte b/frontend/antd/tabs/Index.svelte index e2c1289b..87d0b878 100644 --- a/frontend/antd/tabs/Index.svelte +++ b/frontend/antd/tabs/Index.svelte @@ -68,7 +68,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + tab_click: 'tabClick', + tab_scroll: 'tabScroll', + })} slots={$slots} slotItems={$items.length > 0 ? $items : $children} {setSlotParams} diff --git a/frontend/antd/time-picker/Index.svelte b/frontend/antd/time-picker/Index.svelte index 5f606f75..d0e20338 100644 --- a/frontend/antd/time-picker/Index.svelte +++ b/frontend/antd/time-picker/Index.svelte @@ -70,7 +70,10 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + calendar_change: 'calendarChange', + })} slots={$slots} value={$mergedProps.props.value || $mergedProps.value} onValueChange={(val) => { diff --git a/frontend/antd/time-picker/range-picker/Index.svelte b/frontend/antd/time-picker/range-picker/Index.svelte index 60021229..46e0cbf4 100644 --- a/frontend/antd/time-picker/range-picker/Index.svelte +++ b/frontend/antd/time-picker/range-picker/Index.svelte @@ -74,7 +74,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + calendar_change: 'calendarChange', + })} slots={$slots} value={$mergedProps.props.value || $mergedProps.value} onValueChange={(val) => { diff --git a/frontend/antd/tooltip/Index.svelte b/frontend/antd/tooltip/Index.svelte index a31ccfcc..cde36b81 100644 --- a/frontend/antd/tooltip/Index.svelte +++ b/frontend/antd/tooltip/Index.svelte @@ -59,7 +59,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + open_change: 'openChange', + })} slots={$slots} > diff --git a/frontend/antd/tour/step/Index.svelte b/frontend/antd/tour/step/Index.svelte index d3ba838e..34221dd7 100644 --- a/frontend/antd/tour/step/Index.svelte +++ b/frontend/antd/tour/step/Index.svelte @@ -65,7 +65,10 @@ id: $mergedProps.elem_id, ...$mergedProps.restProps, ...$mergedProps.props, - ...bindEvents($mergedProps), + ...bindEvents($mergedProps, { + next_button_click: 'nextButtonProps_click', + prev_button_click: 'prevButtonProps_click', + }), target: createFunction( $mergedProps.props.target || $mergedProps.restProps.target diff --git a/frontend/antd/transfer/Index.svelte b/frontend/antd/transfer/Index.svelte index a18a12ce..3887b7a7 100644 --- a/frontend/antd/transfer/Index.svelte +++ b/frontend/antd/transfer/Index.svelte @@ -73,7 +73,9 @@ targetKeys={$mergedProps.value} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + select_change: 'selectChange', + })} slots={$slots} onValueChange={(v) => { value = v; diff --git a/frontend/antd/tree-select/Index.svelte b/frontend/antd/tree-select/Index.svelte index c3ce72c7..d06aff48 100644 --- a/frontend/antd/tree-select/Index.svelte +++ b/frontend/antd/tree-select/Index.svelte @@ -71,7 +71,12 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + tree_expand: 'treeExpand', + popup_scroll: 'popupScroll', + dropdown_visible_change: 'dropdownVisibleChange', + load_data: 'loadData', + })} slots={$slots} slotItems={$treeData.length ? $treeData : $children} onValueChange={(val) => { diff --git a/frontend/antd/tree/Index.svelte b/frontend/antd/tree/Index.svelte index d8e7b3a7..2d81762a 100644 --- a/frontend/antd/tree/Index.svelte +++ b/frontend/antd/tree/Index.svelte @@ -68,7 +68,15 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + drag_end: 'dragEnd', + drag_enter: 'dragEnter', + drag_leave: 'dragLeave', + drag_over: 'dragOver', + drag_start: 'dragStart', + right_click: 'rightClick', + load_data: 'loadData', + })} slots={$slots} slotItems={$treeData.length ? $treeData : $children} {setSlotParams} diff --git a/frontend/antd/tree/directory-tree/Index.svelte b/frontend/antd/tree/directory-tree/Index.svelte index 54e02bca..c7738b32 100644 --- a/frontend/antd/tree/directory-tree/Index.svelte +++ b/frontend/antd/tree/directory-tree/Index.svelte @@ -69,7 +69,15 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + drag_end: 'dragEnd', + drag_enter: 'dragEnter', + drag_leave: 'dragLeave', + drag_over: 'dragOver', + drag_start: 'dragStart', + right_click: 'rightClick', + load_data: 'loadData', + })} slots={$slots} directory slotItems={$treeData.length ? $treeData : $children} diff --git a/frontend/antd/typography/Base.svelte b/frontend/antd/typography/Base.svelte index bab3ee82..f8e06df2 100644 --- a/frontend/antd/typography/Base.svelte +++ b/frontend/antd/typography/Base.svelte @@ -78,7 +78,9 @@ id={$mergedProps.elem_id} {...$mergedProps.restProps} {...$mergedProps.props} - {...bindEvents($mergedProps)} + {...bindEvents($mergedProps, { + ellipsis_tooltip_open_change: 'ellipsis_tooltip_openChange', + })} slots={$slots} value={$mergedProps.value} {setSlotParams} diff --git a/frontend/svelte-preprocess-react/component.ts b/frontend/svelte-preprocess-react/component.ts index a1fa2624..1c3241cd 100644 --- a/frontend/svelte-preprocess-react/component.ts +++ b/frontend/svelte-preprocess-react/component.ts @@ -32,7 +32,7 @@ function convertToCamelCase(str: string) { }); } -const gradioProps = [ +const skippedGradioProps = [ 'interactive', 'gradio', 'server', @@ -48,16 +48,16 @@ const gradioProps = [ 'props', 'value', '_selectable', - 'attached_events', 'loading_status', 'value_is_output', ]; +const gradioProps = skippedGradioProps.concat(['attached_events']); export function getComponentRestProps>( props: T, mapping: Record = {} as Record ) { - return mapKeys(omit(props, gradioProps), (_, key) => { + return mapKeys(omit(props, skippedGradioProps), (_, key) => { return mapping[key] || convertToCamelCase(key); }); } @@ -70,7 +70,7 @@ export function bindEvents< restProps?: Record; originalRestProps?: Record; }, ->(props: T) { +>(props: T, eventsMapping?: Record) { const { gradio, _internal: internal, @@ -78,92 +78,106 @@ export function bindEvents< originalRestProps, ...component } = props; + // gradio props + const attachedEvents: string[] = restProps?.attachedEvents || []; - return Object.keys(internal).reduce( - (acc, key) => { - const matched = key.match(/bind_(.+)_event/); - if (matched) { - const event = matched[1]; - const splitted = event.split('_'); - const handler = (...args: any[]) => { - const payload = args.map((arg) => { - if ( - args && - typeof arg === 'object' && - (arg.nativeEvent || arg instanceof Event) - ) { - return { - type: arg.type, - detail: arg.detail, - timestamp: arg.timeStamp, - clientX: arg.clientX, - clientY: arg.clientY, - targetId: arg.target.id, - targetClassName: arg.target.className, - altKey: arg.altKey, - ctrlKey: arg.ctrlKey, - shiftKey: arg.shiftKey, - metaKey: arg.metaKey, - }; + return Array.from( + new Set([ + ...(Object.keys(internal) + .map((key) => { + const matched = key.match(/bind_(.+)_event/); + if (matched && matched[1]) { + return matched[1]; + } + return null; + }) + .filter(Boolean) as string[]), + ...attachedEvents.map((event) => { + if (eventsMapping && eventsMapping[event]) { + return eventsMapping[event]; + } + return event; + }), + ]) + ).reduce( + (acc, event) => { + const splitted = event.split('_'); + const handler = (...args: any[]) => { + const payload = args.map((arg) => { + if ( + args && + typeof arg === 'object' && + (arg.nativeEvent || arg instanceof Event) + ) { + return { + type: arg.type, + detail: arg.detail, + timestamp: arg.timeStamp, + clientX: arg.clientX, + clientY: arg.clientY, + targetId: arg.target.id, + targetClassName: arg.target.className, + altKey: arg.altKey, + ctrlKey: arg.ctrlKey, + shiftKey: arg.shiftKey, + metaKey: arg.metaKey, + }; + } + return arg; + }); + let serializedPayload: any; + try { + serializedPayload = JSON.parse(JSON.stringify(payload)); + } catch { + serializedPayload = payload.map((item) => { + if (item && typeof item === 'object') { + return Object.fromEntries( + Object.entries(item).filter(([, v]) => { + try { + JSON.stringify(v); + return true; + } catch { + return false; + } + }) + ); } - return arg; + return item; }); - let serializedPayload; - try { - serializedPayload = JSON.parse(JSON.stringify(payload)); - } catch { - serializedPayload = payload.map((item) => { - if (item && typeof item === 'object') { - return Object.fromEntries( - Object.entries(item).filter(([, v]) => { - try { - JSON.stringify(v); - return true; - } catch { - return false; - } - }) - ); - } - return item; - }); + } + return gradio.dispatch( + event.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase()), + { + payload: serializedPayload, + component: { + ...component, + ...omit(originalRestProps, gradioProps), + }, } - return gradio.dispatch( - event.replace(/[A-Z]/g, (letter) => '_' + letter.toLowerCase()), - { - payload: serializedPayload, - component: { - ...component, - ...omit(originalRestProps, gradioProps), - }, - } - ); - }; + ); + }; - if (splitted.length > 1) { - let value: Record = { - ...(component.props[splitted[0]] || restProps?.[splitted[0]] || {}), + if (splitted.length > 1) { + let value: Record = { + ...(component.props[splitted[0]] || restProps?.[splitted[0]] || {}), + }; + acc[splitted[0]] = value; + for (let i = 1; i < splitted.length - 1; i++) { + const prop = { + ...(component.props[splitted[i]] || restProps?.[splitted[i]] || {}), }; - acc[splitted[0]] = value; - for (let i = 1; i < splitted.length - 1; i++) { - const prop = { - ...(component.props[splitted[i]] || - restProps?.[splitted[i]] || - {}), - }; - value[splitted[i]] = prop; - value = prop; - } - const listener = splitted[splitted.length - 1]; - value[`on${listener.slice(0, 1).toUpperCase()}${listener.slice(1)}`] = - handler; - - return acc; + value[splitted[i]] = prop; + value = prop; } - const listener = splitted[0]; - acc[`on${listener.slice(0, 1).toUpperCase()}${listener.slice(1)}`] = + const listener = splitted[splitted.length - 1]; + value[`on${listener.slice(0, 1).toUpperCase()}${listener.slice(1)}`] = handler; + + return acc; } + const listener = splitted[0]; + acc[`on${listener.slice(0, 1).toUpperCase()}${listener.slice(1)}`] = + handler; return acc; }, {} as Record diff --git a/frontend/svelte-preprocess-react/internal/Bridge.ts b/frontend/svelte-preprocess-react/internal/Bridge.ts index cdde9409..c40ae69a 100644 --- a/frontend/svelte-preprocess-react/internal/Bridge.ts +++ b/frontend/svelte-preprocess-react/internal/Bridge.ts @@ -17,10 +17,21 @@ export type BridgeProps = { node: TreeNode; nodeSlotKey?: string; }; + +function omitNodeProps(props: Record) { + if (Reflect.has(props, 'attachedEvents')) { + const newProps = { ...props }; + Reflect.deleteProperty(newProps, 'attachedEvents'); + return newProps; + } + return props; +} + const Bridge: React.FC = ({ createPortal, node }) => { // rerender when target or slot changed const target = useStore(node.target); - const nodeProps = useStore(node.props); + let nodeProps = useStore(node.props); + nodeProps = omitNodeProps(nodeProps); const slot = useStore(node.slot); const subSlotKeys = useStores( useMemo( From 8b703d55b765ba169bc4f188f99dbdc27660f780 Mon Sep 17 00:00:00 2001 From: Col0ring <1561999073@qq.com> Date: Mon, 16 Dec 2024 10:32:38 +0800 Subject: [PATCH 2/2] docs: update --- docs/README-zh_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-zh_CN.md b/docs/README-zh_CN.md index ff3018c3..3167c764 100644 --- a/docs/README-zh_CN.md +++ b/docs/README-zh_CN.md @@ -5,7 +5,7 @@ ✖️ - +