@zuoyo/viteui 0.0.2
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.
- package/README.md +227 -0
- package/dist/components/accordion/Accordion.d.ts +18 -0
- package/dist/components/accordion/Accordion.d.ts.map +1 -0
- package/dist/components/accordion/AccordionPanel.d.ts +63 -0
- package/dist/components/accordion/AccordionPanel.d.ts.map +1 -0
- package/dist/components/accordion/index.d.ts +14 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/types.d.ts +159 -0
- package/dist/components/accordion/types.d.ts.map +1 -0
- package/dist/components/base/Addon.d.ts +11 -0
- package/dist/components/base/Addon.d.ts.map +1 -0
- package/dist/components/base/ComboBase.d.ts +85 -0
- package/dist/components/base/ComboBase.d.ts.map +1 -0
- package/dist/components/base/DateHelper.d.ts +17 -0
- package/dist/components/base/DateHelper.d.ts.map +1 -0
- package/dist/components/base/DomHelper.d.ts +42 -0
- package/dist/components/base/DomHelper.d.ts.map +1 -0
- package/dist/components/base/EventHub.d.ts +19 -0
- package/dist/components/base/EventHub.d.ts.map +1 -0
- package/dist/components/base/Label.d.ts +11 -0
- package/dist/components/base/Label.d.ts.map +1 -0
- package/dist/components/base/SlideUpDown.d.ts +37 -0
- package/dist/components/base/SlideUpDown.d.ts.map +1 -0
- package/dist/components/base/SpinnerBase.d.ts +69 -0
- package/dist/components/base/SpinnerBase.d.ts.map +1 -0
- package/dist/components/base/TreeHelper.d.ts +28 -0
- package/dist/components/base/TreeHelper.d.ts.map +1 -0
- package/dist/components/base/VirtualScroll.d.ts +36 -0
- package/dist/components/base/VirtualScroll.d.ts.map +1 -0
- package/dist/components/base/index.d.ts +23 -0
- package/dist/components/base/index.d.ts.map +1 -0
- package/dist/components/base/listBaseProps.d.ts +111 -0
- package/dist/components/base/listBaseProps.d.ts.map +1 -0
- package/dist/components/base/types.d.ts +1091 -0
- package/dist/components/base/types.d.ts.map +1 -0
- package/dist/components/base/useComboBase.d.ts +49 -0
- package/dist/components/base/useComboBase.d.ts.map +1 -0
- package/dist/components/base/useFieldBase.d.ts +24 -0
- package/dist/components/base/useFieldBase.d.ts.map +1 -0
- package/dist/components/base/useInputBase.d.ts +96 -0
- package/dist/components/base/useInputBase.d.ts.map +1 -0
- package/dist/components/base/useListBase.d.ts +71 -0
- package/dist/components/base/useListBase.d.ts.map +1 -0
- package/dist/components/base/useSpinnerBase.d.ts +45 -0
- package/dist/components/base/useSpinnerBase.d.ts.map +1 -0
- package/dist/components/calendar/Calendar.d.ts +35 -0
- package/dist/components/calendar/Calendar.d.ts.map +1 -0
- package/dist/components/calendar/index.d.ts +13 -0
- package/dist/components/calendar/index.d.ts.map +1 -0
- package/dist/components/calendar/types.d.ts +132 -0
- package/dist/components/calendar/types.d.ts.map +1 -0
- package/dist/components/checkbox/CheckBox.d.ts +35 -0
- package/dist/components/checkbox/CheckBox.d.ts.map +1 -0
- package/dist/components/checkbox/index.d.ts +13 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/types.d.ts +64 -0
- package/dist/components/checkbox/types.d.ts.map +1 -0
- package/dist/components/combobox/ComboBox.d.ts +379 -0
- package/dist/components/combobox/ComboBox.d.ts.map +1 -0
- package/dist/components/combobox/index.d.ts +13 -0
- package/dist/components/combobox/index.d.ts.map +1 -0
- package/dist/components/combobox/types.d.ts +163 -0
- package/dist/components/combobox/types.d.ts.map +1 -0
- package/dist/components/combogrid/ComboGrid.d.ts +220 -0
- package/dist/components/combogrid/ComboGrid.d.ts.map +1 -0
- package/dist/components/combogrid/index.d.ts +13 -0
- package/dist/components/combogrid/index.d.ts.map +1 -0
- package/dist/components/combogrid/types.d.ts +105 -0
- package/dist/components/combogrid/types.d.ts.map +1 -0
- package/dist/components/combotree/ComboTree.d.ts +219 -0
- package/dist/components/combotree/ComboTree.d.ts.map +1 -0
- package/dist/components/combotree/index.d.ts +13 -0
- package/dist/components/combotree/index.d.ts.map +1 -0
- package/dist/components/combotree/types.d.ts +113 -0
- package/dist/components/combotree/types.d.ts.map +1 -0
- package/dist/components/datagrid/DataGrid.d.ts +135 -0
- package/dist/components/datagrid/DataGrid.d.ts.map +1 -0
- package/dist/components/datagrid/DataGridBody.d.ts +14 -0
- package/dist/components/datagrid/DataGridBody.d.ts.map +1 -0
- package/dist/components/datagrid/DataGridRowDetail.d.ts +11 -0
- package/dist/components/datagrid/DataGridRowDetail.d.ts.map +1 -0
- package/dist/components/datagrid/DataGridRowGroup.d.ts +13 -0
- package/dist/components/datagrid/DataGridRowGroup.d.ts.map +1 -0
- package/dist/components/datagrid/DataGridTable.d.ts +15 -0
- package/dist/components/datagrid/DataGridTable.d.ts.map +1 -0
- package/dist/components/datagrid/DataGridView.d.ts +25 -0
- package/dist/components/datagrid/DataGridView.d.ts.map +1 -0
- package/dist/components/datagrid/index.d.ts +21 -0
- package/dist/components/datagrid/index.d.ts.map +1 -0
- package/dist/components/datagrid/types.d.ts +507 -0
- package/dist/components/datagrid/types.d.ts.map +1 -0
- package/dist/components/datalist/DataList.d.ts +104 -0
- package/dist/components/datalist/DataList.d.ts.map +1 -0
- package/dist/components/datalist/index.d.ts +13 -0
- package/dist/components/datalist/index.d.ts.map +1 -0
- package/dist/components/datalist/types.d.ts +77 -0
- package/dist/components/datalist/types.d.ts.map +1 -0
- package/dist/components/datebox/DateBox.d.ts +310 -0
- package/dist/components/datebox/DateBox.d.ts.map +1 -0
- package/dist/components/datebox/index.d.ts +13 -0
- package/dist/components/datebox/index.d.ts.map +1 -0
- package/dist/components/datebox/types.d.ts +124 -0
- package/dist/components/datebox/types.d.ts.map +1 -0
- package/dist/components/datetimebox/DateTimeBox.d.ts +502 -0
- package/dist/components/datetimebox/DateTimeBox.d.ts.map +1 -0
- package/dist/components/datetimebox/index.d.ts +13 -0
- package/dist/components/datetimebox/index.d.ts.map +1 -0
- package/dist/components/datetimebox/types.d.ts +38 -0
- package/dist/components/datetimebox/types.d.ts.map +1 -0
- package/dist/components/datetimespinner/DateTimeSpinner.d.ts +17 -0
- package/dist/components/datetimespinner/DateTimeSpinner.d.ts.map +1 -0
- package/dist/components/datetimespinner/index.d.ts +13 -0
- package/dist/components/datetimespinner/index.d.ts.map +1 -0
- package/dist/components/datetimespinner/types.d.ts +34 -0
- package/dist/components/datetimespinner/types.d.ts.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +102 -0
- package/dist/components/dialog/Dialog.d.ts.map +1 -0
- package/dist/components/dialog/dialogProps.d.ts +87 -0
- package/dist/components/dialog/dialogProps.d.ts.map +1 -0
- package/dist/components/dialog/index.d.ts +13 -0
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/types.d.ts +137 -0
- package/dist/components/dialog/types.d.ts.map +1 -0
- package/dist/components/draggable/Draggable.d.ts +28 -0
- package/dist/components/draggable/Draggable.d.ts.map +1 -0
- package/dist/components/draggable/DraggableClass.d.ts +48 -0
- package/dist/components/draggable/DraggableClass.d.ts.map +1 -0
- package/dist/components/draggable/DraggableProxy.d.ts +19 -0
- package/dist/components/draggable/DraggableProxy.d.ts.map +1 -0
- package/dist/components/draggable/index.d.ts +15 -0
- package/dist/components/draggable/index.d.ts.map +1 -0
- package/dist/components/draggable/types.d.ts +404 -0
- package/dist/components/draggable/types.d.ts.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +113 -0
- package/dist/components/drawer/Drawer.d.ts.map +1 -0
- package/dist/components/drawer/index.d.ts +13 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/types.d.ts +97 -0
- package/dist/components/drawer/types.d.ts.map +1 -0
- package/dist/components/droppable/Droppable.d.ts +21 -0
- package/dist/components/droppable/Droppable.d.ts.map +1 -0
- package/dist/components/droppable/DroppableClass.d.ts +27 -0
- package/dist/components/droppable/DroppableClass.d.ts.map +1 -0
- package/dist/components/droppable/index.d.ts +14 -0
- package/dist/components/droppable/index.d.ts.map +1 -0
- package/dist/components/droppable/types.d.ts +99 -0
- package/dist/components/droppable/types.d.ts.map +1 -0
- package/dist/components/filebutton/FileButton.d.ts +59 -0
- package/dist/components/filebutton/FileButton.d.ts.map +1 -0
- package/dist/components/filebutton/index.d.ts +13 -0
- package/dist/components/filebutton/index.d.ts.map +1 -0
- package/dist/components/filebutton/types.d.ts +86 -0
- package/dist/components/filebutton/types.d.ts.map +1 -0
- package/dist/components/form/Form.d.ts +30 -0
- package/dist/components/form/Form.d.ts.map +1 -0
- package/dist/components/form/FormField.d.ts +19 -0
- package/dist/components/form/FormField.d.ts.map +1 -0
- package/dist/components/form/index.d.ts +14 -0
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/rules.d.ts +57 -0
- package/dist/components/form/rules.d.ts.map +1 -0
- package/dist/components/form/types.d.ts +179 -0
- package/dist/components/form/types.d.ts.map +1 -0
- package/dist/components/gridbase/GridBase.d.ts +203 -0
- package/dist/components/gridbase/GridBase.d.ts.map +1 -0
- package/dist/components/gridbase/GridBody.d.ts +73 -0
- package/dist/components/gridbase/GridBody.d.ts.map +1 -0
- package/dist/components/gridbase/GridBodyCell.d.ts +55 -0
- package/dist/components/gridbase/GridBodyCell.d.ts.map +1 -0
- package/dist/components/gridbase/GridColumn.d.ts +333 -0
- package/dist/components/gridbase/GridColumn.d.ts.map +1 -0
- package/dist/components/gridbase/GridColumnGroup.d.ts +73 -0
- package/dist/components/gridbase/GridColumnGroup.d.ts.map +1 -0
- package/dist/components/gridbase/GridEmpty.d.ts +7 -0
- package/dist/components/gridbase/GridEmpty.d.ts.map +1 -0
- package/dist/components/gridbase/GridFilterButton.d.ts +28 -0
- package/dist/components/gridbase/GridFilterButton.d.ts.map +1 -0
- package/dist/components/gridbase/GridFilterCell.d.ts +11 -0
- package/dist/components/gridbase/GridFilterCell.d.ts.map +1 -0
- package/dist/components/gridbase/GridFilterRow.d.ts +9 -0
- package/dist/components/gridbase/GridFilterRow.d.ts.map +1 -0
- package/dist/components/gridbase/GridFooter.d.ts +82 -0
- package/dist/components/gridbase/GridFooter.d.ts.map +1 -0
- package/dist/components/gridbase/GridFooterCell.d.ts +11 -0
- package/dist/components/gridbase/GridFooterCell.d.ts.map +1 -0
- package/dist/components/gridbase/GridHeader.d.ts +51 -0
- package/dist/components/gridbase/GridHeader.d.ts.map +1 -0
- package/dist/components/gridbase/GridHeaderCell.d.ts +9 -0
- package/dist/components/gridbase/GridHeaderCell.d.ts.map +1 -0
- package/dist/components/gridbase/GridHeaderRow.d.ts +12 -0
- package/dist/components/gridbase/GridHeaderRow.d.ts.map +1 -0
- package/dist/components/gridbase/GridView.d.ts +130 -0
- package/dist/components/gridbase/GridView.d.ts.map +1 -0
- package/dist/components/gridbase/gridBaseProps.d.ts +172 -0
- package/dist/components/gridbase/gridBaseProps.d.ts.map +1 -0
- package/dist/components/gridbase/gridBodyProps.d.ts +17 -0
- package/dist/components/gridbase/gridBodyProps.d.ts.map +1 -0
- package/dist/components/gridbase/gridViewProps.d.ts +26 -0
- package/dist/components/gridbase/gridViewProps.d.ts.map +1 -0
- package/dist/components/gridbase/index.d.ts +19 -0
- package/dist/components/gridbase/index.d.ts.map +1 -0
- package/dist/components/gridbase/types.d.ts +823 -0
- package/dist/components/gridbase/types.d.ts.map +1 -0
- package/dist/components/gridbase/useGridBase.d.ts +58 -0
- package/dist/components/gridbase/useGridBase.d.ts.map +1 -0
- package/dist/components/gridbase/useGridBodyBase.d.ts +11 -0
- package/dist/components/gridbase/useGridBodyBase.d.ts.map +1 -0
- package/dist/components/gridbase/useGridViewBase.d.ts +19 -0
- package/dist/components/gridbase/useGridViewBase.d.ts.map +1 -0
- package/dist/components/layout/CollapsedPanel.d.ts +138 -0
- package/dist/components/layout/CollapsedPanel.d.ts.map +1 -0
- package/dist/components/layout/Layout.d.ts +19 -0
- package/dist/components/layout/Layout.d.ts.map +1 -0
- package/dist/components/layout/LayoutPanel.d.ts +83 -0
- package/dist/components/layout/LayoutPanel.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +15 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/types.d.ts +210 -0
- package/dist/components/layout/types.d.ts.map +1 -0
- package/dist/components/linkbutton/ButtonGroup.d.ts +47 -0
- package/dist/components/linkbutton/ButtonGroup.d.ts.map +1 -0
- package/dist/components/linkbutton/LinkButton.d.ts +37 -0
- package/dist/components/linkbutton/LinkButton.d.ts.map +1 -0
- package/dist/components/linkbutton/index.d.ts +14 -0
- package/dist/components/linkbutton/index.d.ts.map +1 -0
- package/dist/components/linkbutton/linkButtonProps.d.ts +38 -0
- package/dist/components/linkbutton/linkButtonProps.d.ts.map +1 -0
- package/dist/components/linkbutton/types.d.ts +129 -0
- package/dist/components/linkbutton/types.d.ts.map +1 -0
- package/dist/components/linkbutton/useLinkButtonBase.d.ts +41 -0
- package/dist/components/linkbutton/useLinkButtonBase.d.ts.map +1 -0
- package/dist/components/locale/index.d.ts +18 -0
- package/dist/components/locale/index.d.ts.map +1 -0
- package/dist/components/menu/Menu.d.ts +31 -0
- package/dist/components/menu/Menu.d.ts.map +1 -0
- package/dist/components/menu/MenuItem.d.ts +15 -0
- package/dist/components/menu/MenuItem.d.ts.map +1 -0
- package/dist/components/menu/MenuSep.d.ts +3 -0
- package/dist/components/menu/MenuSep.d.ts.map +1 -0
- package/dist/components/menu/SubMenu.d.ts +21 -0
- package/dist/components/menu/SubMenu.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +16 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/menu/types.d.ts +202 -0
- package/dist/components/menu/types.d.ts.map +1 -0
- package/dist/components/menubutton/MenuButton.d.ts +43 -0
- package/dist/components/menubutton/MenuButton.d.ts.map +1 -0
- package/dist/components/menubutton/index.d.ts +13 -0
- package/dist/components/menubutton/index.d.ts.map +1 -0
- package/dist/components/menubutton/types.d.ts +56 -0
- package/dist/components/menubutton/types.d.ts.map +1 -0
- package/dist/components/messager/Messager.d.ts +16 -0
- package/dist/components/messager/Messager.d.ts.map +1 -0
- package/dist/components/messager/MessagerContent.d.ts +18 -0
- package/dist/components/messager/MessagerContent.d.ts.map +1 -0
- package/dist/components/messager/MessagerDialog.d.ts +114 -0
- package/dist/components/messager/MessagerDialog.d.ts.map +1 -0
- package/dist/components/messager/index.d.ts +15 -0
- package/dist/components/messager/index.d.ts.map +1 -0
- package/dist/components/messager/types.d.ts +238 -0
- package/dist/components/messager/types.d.ts.map +1 -0
- package/dist/components/numberbox/NumberBox.d.ts +210 -0
- package/dist/components/numberbox/NumberBox.d.ts.map +1 -0
- package/dist/components/numberbox/index.d.ts +13 -0
- package/dist/components/numberbox/index.d.ts.map +1 -0
- package/dist/components/numberbox/types.d.ts +130 -0
- package/dist/components/numberbox/types.d.ts.map +1 -0
- package/dist/components/pagination/Pagination.d.ts +45 -0
- package/dist/components/pagination/Pagination.d.ts.map +1 -0
- package/dist/components/pagination/PaginationButton.d.ts +39 -0
- package/dist/components/pagination/PaginationButton.d.ts.map +1 -0
- package/dist/components/pagination/PaginationLink.d.ts +3 -0
- package/dist/components/pagination/PaginationLink.d.ts.map +1 -0
- package/dist/components/pagination/PaginationList.d.ts +3 -0
- package/dist/components/pagination/PaginationList.d.ts.map +1 -0
- package/dist/components/pagination/PaginationManual.d.ts +7 -0
- package/dist/components/pagination/PaginationManual.d.ts.map +1 -0
- package/dist/components/pagination/index.d.ts +17 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/types.d.ts +284 -0
- package/dist/components/pagination/types.d.ts.map +1 -0
- package/dist/components/panel/Panel.d.ts +63 -0
- package/dist/components/panel/Panel.d.ts.map +1 -0
- package/dist/components/panel/index.d.ts +13 -0
- package/dist/components/panel/index.d.ts.map +1 -0
- package/dist/components/panel/panelProps.d.ts +63 -0
- package/dist/components/panel/panelProps.d.ts.map +1 -0
- package/dist/components/panel/types.d.ts +139 -0
- package/dist/components/panel/types.d.ts.map +1 -0
- package/dist/components/panel/usePanelBase.d.ts +60 -0
- package/dist/components/panel/usePanelBase.d.ts.map +1 -0
- package/dist/components/passwordbox/PasswordBox.d.ts +78 -0
- package/dist/components/passwordbox/PasswordBox.d.ts.map +1 -0
- package/dist/components/passwordbox/index.d.ts +13 -0
- package/dist/components/passwordbox/index.d.ts.map +1 -0
- package/dist/components/passwordbox/types.d.ts +57 -0
- package/dist/components/passwordbox/types.d.ts.map +1 -0
- package/dist/components/progressbar/ProgressBar.d.ts +16 -0
- package/dist/components/progressbar/ProgressBar.d.ts.map +1 -0
- package/dist/components/progressbar/index.d.ts +13 -0
- package/dist/components/progressbar/index.d.ts.map +1 -0
- package/dist/components/progressbar/types.d.ts +33 -0
- package/dist/components/progressbar/types.d.ts.map +1 -0
- package/dist/components/radiobutton/RadioButton.d.ts +31 -0
- package/dist/components/radiobutton/RadioButton.d.ts.map +1 -0
- package/dist/components/radiobutton/index.d.ts +13 -0
- package/dist/components/radiobutton/index.d.ts.map +1 -0
- package/dist/components/radiobutton/types.d.ts +66 -0
- package/dist/components/radiobutton/types.d.ts.map +1 -0
- package/dist/components/rate/Rate.d.ts +64 -0
- package/dist/components/rate/Rate.d.ts.map +1 -0
- package/dist/components/rate/index.d.ts +13 -0
- package/dist/components/rate/index.d.ts.map +1 -0
- package/dist/components/rate/types.d.ts +61 -0
- package/dist/components/rate/types.d.ts.map +1 -0
- package/dist/components/resizable/Resizable.d.ts +27 -0
- package/dist/components/resizable/Resizable.d.ts.map +1 -0
- package/dist/components/resizable/ResizableClass.d.ts +33 -0
- package/dist/components/resizable/ResizableClass.d.ts.map +1 -0
- package/dist/components/resizable/index.d.ts +14 -0
- package/dist/components/resizable/index.d.ts.map +1 -0
- package/dist/components/resizable/types.d.ts +222 -0
- package/dist/components/resizable/types.d.ts.map +1 -0
- package/dist/components/searchbox/SearchBox.d.ts +72 -0
- package/dist/components/searchbox/SearchBox.d.ts.map +1 -0
- package/dist/components/searchbox/index.d.ts +13 -0
- package/dist/components/searchbox/index.d.ts.map +1 -0
- package/dist/components/searchbox/types.d.ts +77 -0
- package/dist/components/searchbox/types.d.ts.map +1 -0
- package/dist/components/sidemenu/SideMenu.d.ts +29 -0
- package/dist/components/sidemenu/SideMenu.d.ts.map +1 -0
- package/dist/components/sidemenu/SideMenuIcon.d.ts +13 -0
- package/dist/components/sidemenu/SideMenuIcon.d.ts.map +1 -0
- package/dist/components/sidemenu/SideMenuItems.d.ts +74 -0
- package/dist/components/sidemenu/SideMenuItems.d.ts.map +1 -0
- package/dist/components/sidemenu/index.d.ts +15 -0
- package/dist/components/sidemenu/index.d.ts.map +1 -0
- package/dist/components/sidemenu/types.d.ts +213 -0
- package/dist/components/sidemenu/types.d.ts.map +1 -0
- package/dist/components/slider/Slider.d.ts +210 -0
- package/dist/components/slider/Slider.d.ts.map +1 -0
- package/dist/components/slider/index.d.ts +13 -0
- package/dist/components/slider/index.d.ts.map +1 -0
- package/dist/components/slider/types.d.ts +92 -0
- package/dist/components/slider/types.d.ts.map +1 -0
- package/dist/components/splitbutton/SplitButton.d.ts +43 -0
- package/dist/components/splitbutton/SplitButton.d.ts.map +1 -0
- package/dist/components/splitbutton/index.d.ts +13 -0
- package/dist/components/splitbutton/index.d.ts.map +1 -0
- package/dist/components/splitbutton/types.d.ts +21 -0
- package/dist/components/splitbutton/types.d.ts.map +1 -0
- package/dist/components/swiper/Swiper.d.ts +21 -0
- package/dist/components/swiper/Swiper.d.ts.map +1 -0
- package/dist/components/swiper/SwiperPanel.d.ts +142 -0
- package/dist/components/swiper/SwiperPanel.d.ts.map +1 -0
- package/dist/components/swiper/index.d.ts +14 -0
- package/dist/components/swiper/index.d.ts.map +1 -0
- package/dist/components/swiper/types.d.ts +120 -0
- package/dist/components/swiper/types.d.ts.map +1 -0
- package/dist/components/switchbutton/SwitchButton.d.ts +44 -0
- package/dist/components/switchbutton/SwitchButton.d.ts.map +1 -0
- package/dist/components/switchbutton/index.d.ts +13 -0
- package/dist/components/switchbutton/index.d.ts.map +1 -0
- package/dist/components/switchbutton/types.d.ts +64 -0
- package/dist/components/switchbutton/types.d.ts.map +1 -0
- package/dist/components/tabs/TabPanel.d.ts +153 -0
- package/dist/components/tabs/TabPanel.d.ts.map +1 -0
- package/dist/components/tabs/TabPanelHeader.d.ts +24 -0
- package/dist/components/tabs/TabPanelHeader.d.ts.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +41 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -0
- package/dist/components/tabs/index.d.ts +14 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/types.d.ts +185 -0
- package/dist/components/tabs/types.d.ts.map +1 -0
- package/dist/components/tagbox/TagBox.d.ts +288 -0
- package/dist/components/tagbox/TagBox.d.ts.map +1 -0
- package/dist/components/tagbox/index.d.ts +13 -0
- package/dist/components/tagbox/index.d.ts.map +1 -0
- package/dist/components/tagbox/types.d.ts +110 -0
- package/dist/components/tagbox/types.d.ts.map +1 -0
- package/dist/components/textbox/TextBox.d.ts +57 -0
- package/dist/components/textbox/TextBox.d.ts.map +1 -0
- package/dist/components/textbox/index.d.ts +13 -0
- package/dist/components/textbox/index.d.ts.map +1 -0
- package/dist/components/textbox/types.d.ts +22 -0
- package/dist/components/textbox/types.d.ts.map +1 -0
- package/dist/components/timepicker/TimeClock.d.ts +12 -0
- package/dist/components/timepicker/TimeClock.d.ts.map +1 -0
- package/dist/components/timepicker/TimePanel.d.ts +11 -0
- package/dist/components/timepicker/TimePanel.d.ts.map +1 -0
- package/dist/components/timepicker/TimePicker.d.ts +236 -0
- package/dist/components/timepicker/TimePicker.d.ts.map +1 -0
- package/dist/components/timepicker/index.d.ts +15 -0
- package/dist/components/timepicker/index.d.ts.map +1 -0
- package/dist/components/timepicker/types.d.ts +224 -0
- package/dist/components/timepicker/types.d.ts.map +1 -0
- package/dist/components/timespinner/TimeSpinner.d.ts +196 -0
- package/dist/components/timespinner/TimeSpinner.d.ts.map +1 -0
- package/dist/components/timespinner/index.d.ts +13 -0
- package/dist/components/timespinner/index.d.ts.map +1 -0
- package/dist/components/timespinner/types.d.ts +130 -0
- package/dist/components/timespinner/types.d.ts.map +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +27 -0
- package/dist/components/tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/TooltipContent.d.ts +72 -0
- package/dist/components/tooltip/TooltipContent.d.ts.map +1 -0
- package/dist/components/tooltip/index.d.ts +14 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/types.d.ts +263 -0
- package/dist/components/tooltip/types.d.ts.map +1 -0
- package/dist/components/tree/Tree.d.ts +315 -0
- package/dist/components/tree/Tree.d.ts.map +1 -0
- package/dist/components/tree/TreeNode.d.ts +28 -0
- package/dist/components/tree/TreeNode.d.ts.map +1 -0
- package/dist/components/tree/TreeNodeEditor.d.ts +17 -0
- package/dist/components/tree/TreeNodeEditor.d.ts.map +1 -0
- package/dist/components/tree/TreeNodeIcon.d.ts +10 -0
- package/dist/components/tree/TreeNodeIcon.d.ts.map +1 -0
- package/dist/components/tree/TreeNodeTitle.d.ts +10 -0
- package/dist/components/tree/TreeNodeTitle.d.ts.map +1 -0
- package/dist/components/tree/index.d.ts +17 -0
- package/dist/components/tree/index.d.ts.map +1 -0
- package/dist/components/tree/types.d.ts +511 -0
- package/dist/components/tree/types.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGrid.d.ts +57 -0
- package/dist/components/treegrid/TreeGrid.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGridBody.d.ts +14 -0
- package/dist/components/treegrid/TreeGridBody.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGridChildren.d.ts +23 -0
- package/dist/components/treegrid/TreeGridChildren.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGridRow.d.ts +20 -0
- package/dist/components/treegrid/TreeGridRow.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGridTitle.d.ts +11 -0
- package/dist/components/treegrid/TreeGridTitle.d.ts.map +1 -0
- package/dist/components/treegrid/TreeGridView.d.ts +23 -0
- package/dist/components/treegrid/TreeGridView.d.ts.map +1 -0
- package/dist/components/treegrid/index.d.ts +18 -0
- package/dist/components/treegrid/index.d.ts.map +1 -0
- package/dist/components/treegrid/types.d.ts +407 -0
- package/dist/components/treegrid/types.d.ts.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/locale/lang-af.d.ts +4 -0
- package/dist/locale/lang-af.d.ts.map +1 -0
- package/dist/locale/lang-af.ts +33 -0
- package/dist/locale/lang-am.d.ts +4 -0
- package/dist/locale/lang-am.d.ts.map +1 -0
- package/dist/locale/lang-am.ts +33 -0
- package/dist/locale/lang-ar.d.ts +4 -0
- package/dist/locale/lang-ar.d.ts.map +1 -0
- package/dist/locale/lang-ar.ts +33 -0
- package/dist/locale/lang-bg.d.ts +4 -0
- package/dist/locale/lang-bg.d.ts.map +1 -0
- package/dist/locale/lang-bg.ts +33 -0
- package/dist/locale/lang-ca.d.ts +4 -0
- package/dist/locale/lang-ca.d.ts.map +1 -0
- package/dist/locale/lang-ca.ts +33 -0
- package/dist/locale/lang-cs.d.ts +4 -0
- package/dist/locale/lang-cs.d.ts.map +1 -0
- package/dist/locale/lang-cs.ts +33 -0
- package/dist/locale/lang-cz.d.ts +4 -0
- package/dist/locale/lang-cz.d.ts.map +1 -0
- package/dist/locale/lang-cz.ts +33 -0
- package/dist/locale/lang-da.d.ts +4 -0
- package/dist/locale/lang-da.d.ts.map +1 -0
- package/dist/locale/lang-da.ts +33 -0
- package/dist/locale/lang-de.d.ts +4 -0
- package/dist/locale/lang-de.d.ts.map +1 -0
- package/dist/locale/lang-de.ts +33 -0
- package/dist/locale/lang-el.d.ts +4 -0
- package/dist/locale/lang-el.d.ts.map +1 -0
- package/dist/locale/lang-el.ts +33 -0
- package/dist/locale/lang-en.d.ts +4 -0
- package/dist/locale/lang-en.d.ts.map +1 -0
- package/dist/locale/lang-en.ts +33 -0
- package/dist/locale/lang-es.d.ts +4 -0
- package/dist/locale/lang-es.d.ts.map +1 -0
- package/dist/locale/lang-es.ts +33 -0
- package/dist/locale/lang-fa.d.ts +4 -0
- package/dist/locale/lang-fa.d.ts.map +1 -0
- package/dist/locale/lang-fa.ts +33 -0
- package/dist/locale/lang-fr.d.ts +4 -0
- package/dist/locale/lang-fr.d.ts.map +1 -0
- package/dist/locale/lang-fr.ts +33 -0
- package/dist/locale/lang-it.d.ts +4 -0
- package/dist/locale/lang-it.d.ts.map +1 -0
- package/dist/locale/lang-it.ts +33 -0
- package/dist/locale/lang-jp.d.ts +4 -0
- package/dist/locale/lang-jp.d.ts.map +1 -0
- package/dist/locale/lang-jp.ts +33 -0
- package/dist/locale/lang-ko.d.ts +4 -0
- package/dist/locale/lang-ko.d.ts.map +1 -0
- package/dist/locale/lang-ko.ts +33 -0
- package/dist/locale/lang-nl.d.ts +4 -0
- package/dist/locale/lang-nl.d.ts.map +1 -0
- package/dist/locale/lang-nl.ts +33 -0
- package/dist/locale/lang-pl.d.ts +4 -0
- package/dist/locale/lang-pl.d.ts.map +1 -0
- package/dist/locale/lang-pl.ts +33 -0
- package/dist/locale/lang-pt_BR.d.ts +4 -0
- package/dist/locale/lang-pt_BR.d.ts.map +1 -0
- package/dist/locale/lang-pt_BR.ts +33 -0
- package/dist/locale/lang-ru.d.ts +4 -0
- package/dist/locale/lang-ru.d.ts.map +1 -0
- package/dist/locale/lang-ru.ts +33 -0
- package/dist/locale/lang-sv_SE.d.ts +4 -0
- package/dist/locale/lang-sv_SE.d.ts.map +1 -0
- package/dist/locale/lang-sv_SE.ts +33 -0
- package/dist/locale/lang-tr.d.ts +4 -0
- package/dist/locale/lang-tr.d.ts.map +1 -0
- package/dist/locale/lang-tr.ts +33 -0
- package/dist/locale/lang-ua.d.ts +4 -0
- package/dist/locale/lang-ua.d.ts.map +1 -0
- package/dist/locale/lang-ua.ts +33 -0
- package/dist/locale/lang-zh_CN.d.ts +4 -0
- package/dist/locale/lang-zh_CN.d.ts.map +1 -0
- package/dist/locale/lang-zh_CN.ts +33 -0
- package/dist/locale/lang-zh_TW.d.ts +4 -0
- package/dist/locale/lang-zh_TW.d.ts.map +1 -0
- package/dist/locale/lang-zh_TW.ts +33 -0
- package/dist/locale/types.d.ts +33 -0
- package/dist/locale/types.d.ts.map +1 -0
- package/dist/locale/types.ts +32 -0
- package/dist/themes/black/accordion.css +89 -0
- package/dist/themes/black/calendar.css +213 -0
- package/dist/themes/black/checkbox.css +31 -0
- package/dist/themes/black/combo.css +35 -0
- package/dist/themes/black/combobox.css +40 -0
- package/dist/themes/black/datagrid.css +305 -0
- package/dist/themes/black/datalist.css +95 -0
- package/dist/themes/black/datebox.css +36 -0
- package/dist/themes/black/dialog.css +47 -0
- package/dist/themes/black/drawer.css +15 -0
- package/dist/themes/black/filebox.css +20 -0
- package/dist/themes/black/flex.css +52 -0
- package/dist/themes/black/images/accordion_arrows.png +0 -0
- package/dist/themes/black/images/blank.gif +0 -0
- package/dist/themes/black/images/calendar_arrows.png +0 -0
- package/dist/themes/black/images/combo_arrow.png +0 -0
- package/dist/themes/black/images/datagrid_icons.png +0 -0
- package/dist/themes/black/images/datebox_arrow.png +0 -0
- package/dist/themes/black/images/layout_arrows.png +0 -0
- package/dist/themes/black/images/linkbutton_bg.png +0 -0
- package/dist/themes/black/images/loading.gif +0 -0
- package/dist/themes/black/images/menu_arrows.png +0 -0
- package/dist/themes/black/images/messager_icons.png +0 -0
- package/dist/themes/black/images/messager_icons16.png +0 -0
- package/dist/themes/black/images/pagination_icons.png +0 -0
- package/dist/themes/black/images/panel_tools.png +0 -0
- package/dist/themes/black/images/passwordbox_close.png +0 -0
- package/dist/themes/black/images/passwordbox_open.png +0 -0
- package/dist/themes/black/images/searchbox_button.png +0 -0
- package/dist/themes/black/images/slider_handle.png +0 -0
- package/dist/themes/black/images/spinner_arrows.png +0 -0
- package/dist/themes/black/images/tabs_icons.png +0 -0
- package/dist/themes/black/images/tagbox_icons.png +0 -0
- package/dist/themes/black/images/tree_icons.png +0 -0
- package/dist/themes/black/images/validatebox_warning.png +0 -0
- package/dist/themes/black/index.css +3814 -0
- package/dist/themes/black/layout.css +150 -0
- package/dist/themes/black/linkbutton.css +203 -0
- package/dist/themes/black/menu.css +119 -0
- package/dist/themes/black/menubutton.css +94 -0
- package/dist/themes/black/messager.css +74 -0
- package/dist/themes/black/numberbox.css +0 -0
- package/dist/themes/black/pagination.css +77 -0
- package/dist/themes/black/panel.css +276 -0
- package/dist/themes/black/passwordbox.css +6 -0
- package/dist/themes/black/progressbar.css +33 -0
- package/dist/themes/black/propertygrid.css +27 -0
- package/dist/themes/black/radiobutton.css +25 -0
- package/dist/themes/black/rate.css +34 -0
- package/dist/themes/black/searchbox.css +61 -0
- package/dist/themes/black/sidemenu.css +78 -0
- package/dist/themes/black/slider.css +101 -0
- package/dist/themes/black/spinner.css +114 -0
- package/dist/themes/black/splitbutton.css +12 -0
- package/dist/themes/black/swiper.css +33 -0
- package/dist/themes/black/switchbutton.css +83 -0
- package/dist/themes/black/tabs.css +415 -0
- package/dist/themes/black/tagbox.css +44 -0
- package/dist/themes/black/textbox.css +173 -0
- package/dist/themes/black/timeline.css +41 -0
- package/dist/themes/black/timepicker.css +93 -0
- package/dist/themes/black/tooltip.css +101 -0
- package/dist/themes/black/tree.css +168 -0
- package/dist/themes/black/validatebox.css +13 -0
- package/dist/themes/black/window.css +188 -0
- package/dist/themes/bootstrap/accordion.css +89 -0
- package/dist/themes/bootstrap/calendar.css +213 -0
- package/dist/themes/bootstrap/checkbox.css +31 -0
- package/dist/themes/bootstrap/combo.css +35 -0
- package/dist/themes/bootstrap/combobox.css +40 -0
- package/dist/themes/bootstrap/datagrid.css +305 -0
- package/dist/themes/bootstrap/datalist.css +95 -0
- package/dist/themes/bootstrap/datebox.css +36 -0
- package/dist/themes/bootstrap/dialog.css +47 -0
- package/dist/themes/bootstrap/drawer.css +15 -0
- package/dist/themes/bootstrap/filebox.css +20 -0
- package/dist/themes/bootstrap/flex.css +52 -0
- package/dist/themes/bootstrap/images/accordion_arrows.png +0 -0
- package/dist/themes/bootstrap/images/blank.gif +0 -0
- package/dist/themes/bootstrap/images/calendar_arrows.png +0 -0
- package/dist/themes/bootstrap/images/combo_arrow.png +0 -0
- package/dist/themes/bootstrap/images/datagrid_icons.png +0 -0
- package/dist/themes/bootstrap/images/datebox_arrow.png +0 -0
- package/dist/themes/bootstrap/images/layout_arrows.png +0 -0
- package/dist/themes/bootstrap/images/linkbutton_bg.png +0 -0
- package/dist/themes/bootstrap/images/loading.gif +0 -0
- package/dist/themes/bootstrap/images/menu_arrows.png +0 -0
- package/dist/themes/bootstrap/images/messager_icons.png +0 -0
- package/dist/themes/bootstrap/images/messager_icons16.png +0 -0
- package/dist/themes/bootstrap/images/pagination_icons.png +0 -0
- package/dist/themes/bootstrap/images/panel_tools.png +0 -0
- package/dist/themes/bootstrap/images/passwordbox_close.png +0 -0
- package/dist/themes/bootstrap/images/passwordbox_open.png +0 -0
- package/dist/themes/bootstrap/images/searchbox_button.png +0 -0
- package/dist/themes/bootstrap/images/slider_handle.png +0 -0
- package/dist/themes/bootstrap/images/spinner_arrows.png +0 -0
- package/dist/themes/bootstrap/images/tabs_icons.png +0 -0
- package/dist/themes/bootstrap/images/tagbox_icons.png +0 -0
- package/dist/themes/bootstrap/images/tree_icons.png +0 -0
- package/dist/themes/bootstrap/images/validatebox_warning.png +0 -0
- package/dist/themes/bootstrap/index.css +3833 -0
- package/dist/themes/bootstrap/layout.css +150 -0
- package/dist/themes/bootstrap/linkbutton.css +203 -0
- package/dist/themes/bootstrap/menu.css +119 -0
- package/dist/themes/bootstrap/menubutton.css +94 -0
- package/dist/themes/bootstrap/messager.css +74 -0
- package/dist/themes/bootstrap/numberbox.css +0 -0
- package/dist/themes/bootstrap/pagination.css +77 -0
- package/dist/themes/bootstrap/panel.css +276 -0
- package/dist/themes/bootstrap/passwordbox.css +6 -0
- package/dist/themes/bootstrap/progressbar.css +33 -0
- package/dist/themes/bootstrap/propertygrid.css +27 -0
- package/dist/themes/bootstrap/radiobutton.css +25 -0
- package/dist/themes/bootstrap/rate.css +34 -0
- package/dist/themes/bootstrap/searchbox.css +61 -0
- package/dist/themes/bootstrap/sidemenu.css +78 -0
- package/dist/themes/bootstrap/slider.css +101 -0
- package/dist/themes/bootstrap/spinner.css +114 -0
- package/dist/themes/bootstrap/splitbutton.css +12 -0
- package/dist/themes/bootstrap/swiper.css +33 -0
- package/dist/themes/bootstrap/switchbutton.css +83 -0
- package/dist/themes/bootstrap/tabs.css +415 -0
- package/dist/themes/bootstrap/tagbox.css +44 -0
- package/dist/themes/bootstrap/textbox.css +173 -0
- package/dist/themes/bootstrap/timeline.css +41 -0
- package/dist/themes/bootstrap/timepicker.css +93 -0
- package/dist/themes/bootstrap/tooltip.css +101 -0
- package/dist/themes/bootstrap/tree.css +168 -0
- package/dist/themes/bootstrap/validatebox.css +13 -0
- package/dist/themes/bootstrap/window.css +188 -0
- package/dist/themes/color.css +210 -0
- package/dist/themes/default/accordion.css +89 -0
- package/dist/themes/default/calendar.css +213 -0
- package/dist/themes/default/checkbox.css +31 -0
- package/dist/themes/default/combo.css +35 -0
- package/dist/themes/default/combobox.css +40 -0
- package/dist/themes/default/datagrid.css +305 -0
- package/dist/themes/default/datalist.css +95 -0
- package/dist/themes/default/datebox.css +36 -0
- package/dist/themes/default/dialog.css +47 -0
- package/dist/themes/default/drawer.css +15 -0
- package/dist/themes/default/filebox.css +20 -0
- package/dist/themes/default/flex.css +52 -0
- package/dist/themes/default/images/accordion_arrows.png +0 -0
- package/dist/themes/default/images/blank.gif +0 -0
- package/dist/themes/default/images/calendar_arrows.png +0 -0
- package/dist/themes/default/images/combo_arrow.png +0 -0
- package/dist/themes/default/images/datagrid_icons.png +0 -0
- package/dist/themes/default/images/datebox_arrow.png +0 -0
- package/dist/themes/default/images/layout_arrows.png +0 -0
- package/dist/themes/default/images/linkbutton_bg.png +0 -0
- package/dist/themes/default/images/loading.gif +0 -0
- package/dist/themes/default/images/menu_arrows.png +0 -0
- package/dist/themes/default/images/messager_icons.png +0 -0
- package/dist/themes/default/images/messager_icons16.png +0 -0
- package/dist/themes/default/images/pagination_icons.png +0 -0
- package/dist/themes/default/images/panel_tools.png +0 -0
- package/dist/themes/default/images/passwordbox_close.png +0 -0
- package/dist/themes/default/images/passwordbox_open.png +0 -0
- package/dist/themes/default/images/searchbox_button.png +0 -0
- package/dist/themes/default/images/slider_handle.png +0 -0
- package/dist/themes/default/images/spinner_arrows.png +0 -0
- package/dist/themes/default/images/tabs_icons.png +0 -0
- package/dist/themes/default/images/tagbox_icons.png +0 -0
- package/dist/themes/default/images/tree_icons.png +0 -0
- package/dist/themes/default/images/validatebox_warning.png +0 -0
- package/dist/themes/default/index.css +3814 -0
- package/dist/themes/default/layout.css +150 -0
- package/dist/themes/default/linkbutton.css +203 -0
- package/dist/themes/default/menu.css +119 -0
- package/dist/themes/default/menubutton.css +94 -0
- package/dist/themes/default/messager.css +74 -0
- package/dist/themes/default/numberbox.css +0 -0
- package/dist/themes/default/pagination.css +77 -0
- package/dist/themes/default/panel.css +276 -0
- package/dist/themes/default/passwordbox.css +6 -0
- package/dist/themes/default/progressbar.css +33 -0
- package/dist/themes/default/propertygrid.css +27 -0
- package/dist/themes/default/radiobutton.css +25 -0
- package/dist/themes/default/rate.css +34 -0
- package/dist/themes/default/searchbox.css +61 -0
- package/dist/themes/default/sidemenu.css +78 -0
- package/dist/themes/default/slider.css +101 -0
- package/dist/themes/default/spinner.css +114 -0
- package/dist/themes/default/splitbutton.css +12 -0
- package/dist/themes/default/swiper.css +33 -0
- package/dist/themes/default/switchbutton.css +83 -0
- package/dist/themes/default/tabs.css +415 -0
- package/dist/themes/default/tagbox.css +44 -0
- package/dist/themes/default/textbox.css +173 -0
- package/dist/themes/default/timeline.css +41 -0
- package/dist/themes/default/timepicker.css +93 -0
- package/dist/themes/default/tooltip.css +101 -0
- package/dist/themes/default/tree.css +168 -0
- package/dist/themes/default/validatebox.css +13 -0
- package/dist/themes/default/window.css +188 -0
- package/dist/themes/gray/accordion.css +89 -0
- package/dist/themes/gray/calendar.css +213 -0
- package/dist/themes/gray/checkbox.css +31 -0
- package/dist/themes/gray/combo.css +35 -0
- package/dist/themes/gray/combobox.css +40 -0
- package/dist/themes/gray/datagrid.css +305 -0
- package/dist/themes/gray/datalist.css +95 -0
- package/dist/themes/gray/datebox.css +36 -0
- package/dist/themes/gray/dialog.css +47 -0
- package/dist/themes/gray/drawer.css +15 -0
- package/dist/themes/gray/filebox.css +20 -0
- package/dist/themes/gray/flex.css +52 -0
- package/dist/themes/gray/images/accordion_arrows.png +0 -0
- package/dist/themes/gray/images/blank.gif +0 -0
- package/dist/themes/gray/images/calendar_arrows.png +0 -0
- package/dist/themes/gray/images/combo_arrow.png +0 -0
- package/dist/themes/gray/images/datagrid_icons.png +0 -0
- package/dist/themes/gray/images/datebox_arrow.png +0 -0
- package/dist/themes/gray/images/layout_arrows.png +0 -0
- package/dist/themes/gray/images/linkbutton_bg.png +0 -0
- package/dist/themes/gray/images/loading.gif +0 -0
- package/dist/themes/gray/images/menu_arrows.png +0 -0
- package/dist/themes/gray/images/messager_icons.png +0 -0
- package/dist/themes/gray/images/messager_icons16.png +0 -0
- package/dist/themes/gray/images/pagination_icons.png +0 -0
- package/dist/themes/gray/images/panel_tools.png +0 -0
- package/dist/themes/gray/images/passwordbox_close.png +0 -0
- package/dist/themes/gray/images/passwordbox_open.png +0 -0
- package/dist/themes/gray/images/searchbox_button.png +0 -0
- package/dist/themes/gray/images/slider_handle.png +0 -0
- package/dist/themes/gray/images/spinner_arrows.png +0 -0
- package/dist/themes/gray/images/tabs_icons.png +0 -0
- package/dist/themes/gray/images/tagbox_icons.png +0 -0
- package/dist/themes/gray/images/tree_icons.png +0 -0
- package/dist/themes/gray/images/validatebox_warning.png +0 -0
- package/dist/themes/gray/index.css +3814 -0
- package/dist/themes/gray/layout.css +150 -0
- package/dist/themes/gray/linkbutton.css +203 -0
- package/dist/themes/gray/menu.css +119 -0
- package/dist/themes/gray/menubutton.css +94 -0
- package/dist/themes/gray/messager.css +74 -0
- package/dist/themes/gray/numberbox.css +0 -0
- package/dist/themes/gray/pagination.css +77 -0
- package/dist/themes/gray/panel.css +276 -0
- package/dist/themes/gray/passwordbox.css +6 -0
- package/dist/themes/gray/progressbar.css +33 -0
- package/dist/themes/gray/propertygrid.css +27 -0
- package/dist/themes/gray/radiobutton.css +25 -0
- package/dist/themes/gray/rate.css +34 -0
- package/dist/themes/gray/searchbox.css +61 -0
- package/dist/themes/gray/sidemenu.css +78 -0
- package/dist/themes/gray/slider.css +101 -0
- package/dist/themes/gray/spinner.css +114 -0
- package/dist/themes/gray/splitbutton.css +12 -0
- package/dist/themes/gray/swiper.css +33 -0
- package/dist/themes/gray/switchbutton.css +83 -0
- package/dist/themes/gray/tabs.css +415 -0
- package/dist/themes/gray/tagbox.css +44 -0
- package/dist/themes/gray/textbox.css +173 -0
- package/dist/themes/gray/timeline.css +41 -0
- package/dist/themes/gray/timepicker.css +93 -0
- package/dist/themes/gray/tooltip.css +101 -0
- package/dist/themes/gray/tree.css +168 -0
- package/dist/themes/gray/validatebox.css +13 -0
- package/dist/themes/gray/window.css +188 -0
- package/dist/themes/icon.css +96 -0
- package/dist/themes/icons/back.png +0 -0
- package/dist/themes/icons/blank.gif +0 -0
- package/dist/themes/icons/cancel.png +0 -0
- package/dist/themes/icons/clear.png +0 -0
- package/dist/themes/icons/cut.png +0 -0
- package/dist/themes/icons/edit_add.png +0 -0
- package/dist/themes/icons/edit_remove.png +0 -0
- package/dist/themes/icons/filesave.png +0 -0
- package/dist/themes/icons/filter.png +0 -0
- package/dist/themes/icons/help.png +0 -0
- package/dist/themes/icons/large_chart.png +0 -0
- package/dist/themes/icons/large_clipart.png +0 -0
- package/dist/themes/icons/large_picture.png +0 -0
- package/dist/themes/icons/large_shapes.png +0 -0
- package/dist/themes/icons/large_smartart.png +0 -0
- package/dist/themes/icons/lock.png +0 -0
- package/dist/themes/icons/man.png +0 -0
- package/dist/themes/icons/mini_add.png +0 -0
- package/dist/themes/icons/mini_edit.png +0 -0
- package/dist/themes/icons/mini_refresh.png +0 -0
- package/dist/themes/icons/more.png +0 -0
- package/dist/themes/icons/no.png +0 -0
- package/dist/themes/icons/ok.png +0 -0
- package/dist/themes/icons/pencil.png +0 -0
- package/dist/themes/icons/print.png +0 -0
- package/dist/themes/icons/redo.png +0 -0
- package/dist/themes/icons/reload.png +0 -0
- package/dist/themes/icons/search.png +0 -0
- package/dist/themes/icons/sum.png +0 -0
- package/dist/themes/icons/tip.png +0 -0
- package/dist/themes/icons/undo.png +0 -0
- package/dist/themes/material/accordion.css +89 -0
- package/dist/themes/material/calendar.css +213 -0
- package/dist/themes/material/checkbox.css +31 -0
- package/dist/themes/material/combo.css +35 -0
- package/dist/themes/material/combobox.css +40 -0
- package/dist/themes/material/datagrid.css +299 -0
- package/dist/themes/material/datalist.css +95 -0
- package/dist/themes/material/datebox.css +36 -0
- package/dist/themes/material/dialog.css +47 -0
- package/dist/themes/material/drawer.css +15 -0
- package/dist/themes/material/filebox.css +20 -0
- package/dist/themes/material/flex.css +52 -0
- package/dist/themes/material/images/Thumbs.db +0 -0
- package/dist/themes/material/images/accordion_arrows.png +0 -0
- package/dist/themes/material/images/blank.gif +0 -0
- package/dist/themes/material/images/calendar_arrows.png +0 -0
- package/dist/themes/material/images/combo_arrow.png +0 -0
- package/dist/themes/material/images/datagrid_icons.png +0 -0
- package/dist/themes/material/images/datebox_arrow.png +0 -0
- package/dist/themes/material/images/layout_arrows.png +0 -0
- package/dist/themes/material/images/linkbutton_bg.png +0 -0
- package/dist/themes/material/images/loading.gif +0 -0
- package/dist/themes/material/images/menu_arrows.png +0 -0
- package/dist/themes/material/images/messager_icons.png +0 -0
- package/dist/themes/material/images/messager_icons16.png +0 -0
- package/dist/themes/material/images/pagination_icons.png +0 -0
- package/dist/themes/material/images/panel_tools.png +0 -0
- package/dist/themes/material/images/passwordbox_close.png +0 -0
- package/dist/themes/material/images/passwordbox_open.png +0 -0
- package/dist/themes/material/images/searchbox_button.png +0 -0
- package/dist/themes/material/images/slider_handle.png +0 -0
- package/dist/themes/material/images/spinner_arrows.png +0 -0
- package/dist/themes/material/images/tabs_icons.png +0 -0
- package/dist/themes/material/images/tagbox_icons.png +0 -0
- package/dist/themes/material/images/tree_icons.png +0 -0
- package/dist/themes/material/images/validatebox_warning.png +0 -0
- package/dist/themes/material/index.css +3823 -0
- package/dist/themes/material/layout.css +150 -0
- package/dist/themes/material/linkbutton.css +191 -0
- package/dist/themes/material/menu.css +119 -0
- package/dist/themes/material/menubutton.css +94 -0
- package/dist/themes/material/messager.css +74 -0
- package/dist/themes/material/numberbox.css +0 -0
- package/dist/themes/material/pagination.css +77 -0
- package/dist/themes/material/panel.css +270 -0
- package/dist/themes/material/passwordbox.css +6 -0
- package/dist/themes/material/progressbar.css +33 -0
- package/dist/themes/material/propertygrid.css +27 -0
- package/dist/themes/material/radiobutton.css +25 -0
- package/dist/themes/material/rate.css +34 -0
- package/dist/themes/material/searchbox.css +61 -0
- package/dist/themes/material/sidemenu.css +78 -0
- package/dist/themes/material/slider.css +101 -0
- package/dist/themes/material/spinner.css +114 -0
- package/dist/themes/material/splitbutton.css +12 -0
- package/dist/themes/material/swiper.css +33 -0
- package/dist/themes/material/switchbutton.css +83 -0
- package/dist/themes/material/tabs.css +379 -0
- package/dist/themes/material/tagbox.css +44 -0
- package/dist/themes/material/textbox.css +173 -0
- package/dist/themes/material/timeline.css +41 -0
- package/dist/themes/material/timepicker.css +93 -0
- package/dist/themes/material/tooltip.css +101 -0
- package/dist/themes/material/tree.css +168 -0
- package/dist/themes/material/validatebox.css +13 -0
- package/dist/themes/material/window.css +182 -0
- package/dist/themes/material-blue/accordion.css +89 -0
- package/dist/themes/material-blue/calendar.css +213 -0
- package/dist/themes/material-blue/checkbox.css +31 -0
- package/dist/themes/material-blue/combo.css +35 -0
- package/dist/themes/material-blue/combobox.css +40 -0
- package/dist/themes/material-blue/datagrid.css +299 -0
- package/dist/themes/material-blue/datalist.css +95 -0
- package/dist/themes/material-blue/datebox.css +36 -0
- package/dist/themes/material-blue/dialog.css +47 -0
- package/dist/themes/material-blue/drawer.css +15 -0
- package/dist/themes/material-blue/filebox.css +20 -0
- package/dist/themes/material-blue/flex.css +52 -0
- package/dist/themes/material-blue/images/accordion_arrows.png +0 -0
- package/dist/themes/material-blue/images/blank.gif +0 -0
- package/dist/themes/material-blue/images/calendar_arrows.png +0 -0
- package/dist/themes/material-blue/images/combo_arrow.png +0 -0
- package/dist/themes/material-blue/images/datagrid_icons.png +0 -0
- package/dist/themes/material-blue/images/datebox_arrow.png +0 -0
- package/dist/themes/material-blue/images/layout_arrows.png +0 -0
- package/dist/themes/material-blue/images/linkbutton_bg.png +0 -0
- package/dist/themes/material-blue/images/loading.gif +0 -0
- package/dist/themes/material-blue/images/menu_arrows.png +0 -0
- package/dist/themes/material-blue/images/menu_arrows1.png +0 -0
- package/dist/themes/material-blue/images/menu_arrows2.png +0 -0
- package/dist/themes/material-blue/images/messager_icons.png +0 -0
- package/dist/themes/material-blue/images/messager_icons16.png +0 -0
- package/dist/themes/material-blue/images/pagination_icons.png +0 -0
- package/dist/themes/material-blue/images/panel_tools.png +0 -0
- package/dist/themes/material-blue/images/passwordbox_close.png +0 -0
- package/dist/themes/material-blue/images/passwordbox_open.png +0 -0
- package/dist/themes/material-blue/images/searchbox_button.png +0 -0
- package/dist/themes/material-blue/images/slider_handle.png +0 -0
- package/dist/themes/material-blue/images/spinner_arrows.png +0 -0
- package/dist/themes/material-blue/images/tabs_icons.png +0 -0
- package/dist/themes/material-blue/images/tagbox_icons.png +0 -0
- package/dist/themes/material-blue/images/tree_icons.png +0 -0
- package/dist/themes/material-blue/images/validatebox_warning.png +0 -0
- package/dist/themes/material-blue/index.css +4081 -0
- package/dist/themes/material-blue/layout.css +150 -0
- package/dist/themes/material-blue/linkbutton.css +191 -0
- package/dist/themes/material-blue/menu.css +119 -0
- package/dist/themes/material-blue/menubutton.css +94 -0
- package/dist/themes/material-blue/messager.css +74 -0
- package/dist/themes/material-blue/numberbox.css +0 -0
- package/dist/themes/material-blue/pagination.css +77 -0
- package/dist/themes/material-blue/panel.css +270 -0
- package/dist/themes/material-blue/passwordbox.css +6 -0
- package/dist/themes/material-blue/progressbar.css +33 -0
- package/dist/themes/material-blue/propertygrid.css +27 -0
- package/dist/themes/material-blue/radiobutton.css +25 -0
- package/dist/themes/material-blue/rate.css +34 -0
- package/dist/themes/material-blue/searchbox.css +61 -0
- package/dist/themes/material-blue/sidemenu.css +78 -0
- package/dist/themes/material-blue/slider.css +101 -0
- package/dist/themes/material-blue/spinner.css +114 -0
- package/dist/themes/material-blue/splitbutton.css +12 -0
- package/dist/themes/material-blue/swiper.css +33 -0
- package/dist/themes/material-blue/switchbutton.css +83 -0
- package/dist/themes/material-blue/tabs.css +379 -0
- package/dist/themes/material-blue/tagbox.css +44 -0
- package/dist/themes/material-blue/textbox.css +173 -0
- package/dist/themes/material-blue/timeline.css +41 -0
- package/dist/themes/material-blue/timepicker.css +93 -0
- package/dist/themes/material-blue/tooltip.css +101 -0
- package/dist/themes/material-blue/tree.css +168 -0
- package/dist/themes/material-blue/validatebox.css +13 -0
- package/dist/themes/material-blue/window.css +182 -0
- package/dist/themes/material-teal/accordion.css +89 -0
- package/dist/themes/material-teal/calendar.css +213 -0
- package/dist/themes/material-teal/checkbox.css +31 -0
- package/dist/themes/material-teal/combo.css +35 -0
- package/dist/themes/material-teal/combobox.css +40 -0
- package/dist/themes/material-teal/datagrid.css +299 -0
- package/dist/themes/material-teal/datalist.css +95 -0
- package/dist/themes/material-teal/datebox.css +36 -0
- package/dist/themes/material-teal/dialog.css +47 -0
- package/dist/themes/material-teal/drawer.css +15 -0
- package/dist/themes/material-teal/filebox.css +20 -0
- package/dist/themes/material-teal/flex.css +52 -0
- package/dist/themes/material-teal/images/Thumbs.db +0 -0
- package/dist/themes/material-teal/images/accordion_arrows.png +0 -0
- package/dist/themes/material-teal/images/blank.gif +0 -0
- package/dist/themes/material-teal/images/calendar_arrows.png +0 -0
- package/dist/themes/material-teal/images/combo_arrow.png +0 -0
- package/dist/themes/material-teal/images/datagrid_icons.png +0 -0
- package/dist/themes/material-teal/images/datebox_arrow.png +0 -0
- package/dist/themes/material-teal/images/layout_arrows.png +0 -0
- package/dist/themes/material-teal/images/linkbutton_bg.png +0 -0
- package/dist/themes/material-teal/images/loading.gif +0 -0
- package/dist/themes/material-teal/images/menu_arrows.png +0 -0
- package/dist/themes/material-teal/images/messager_icons.png +0 -0
- package/dist/themes/material-teal/images/messager_icons16.png +0 -0
- package/dist/themes/material-teal/images/pagination_icons.png +0 -0
- package/dist/themes/material-teal/images/panel_tools.png +0 -0
- package/dist/themes/material-teal/images/passwordbox_close.png +0 -0
- package/dist/themes/material-teal/images/passwordbox_open.png +0 -0
- package/dist/themes/material-teal/images/searchbox_button.png +0 -0
- package/dist/themes/material-teal/images/slider_handle.png +0 -0
- package/dist/themes/material-teal/images/spinner_arrows.png +0 -0
- package/dist/themes/material-teal/images/tabs_icons.png +0 -0
- package/dist/themes/material-teal/images/tagbox_icons.png +0 -0
- package/dist/themes/material-teal/images/tree_icons.png +0 -0
- package/dist/themes/material-teal/images/validatebox_warning.png +0 -0
- package/dist/themes/material-teal/index.css +3965 -0
- package/dist/themes/material-teal/layout.css +150 -0
- package/dist/themes/material-teal/linkbutton.css +191 -0
- package/dist/themes/material-teal/menu.css +119 -0
- package/dist/themes/material-teal/menubutton.css +94 -0
- package/dist/themes/material-teal/messager.css +74 -0
- package/dist/themes/material-teal/numberbox.css +0 -0
- package/dist/themes/material-teal/pagination.css +77 -0
- package/dist/themes/material-teal/panel.css +270 -0
- package/dist/themes/material-teal/passwordbox.css +6 -0
- package/dist/themes/material-teal/progressbar.css +33 -0
- package/dist/themes/material-teal/propertygrid.css +27 -0
- package/dist/themes/material-teal/radiobutton.css +25 -0
- package/dist/themes/material-teal/rate.css +34 -0
- package/dist/themes/material-teal/searchbox.css +61 -0
- package/dist/themes/material-teal/sidemenu.css +78 -0
- package/dist/themes/material-teal/slider.css +101 -0
- package/dist/themes/material-teal/spinner.css +114 -0
- package/dist/themes/material-teal/splitbutton.css +12 -0
- package/dist/themes/material-teal/swiper.css +33 -0
- package/dist/themes/material-teal/switchbutton.css +83 -0
- package/dist/themes/material-teal/tabs.css +379 -0
- package/dist/themes/material-teal/tagbox.css +44 -0
- package/dist/themes/material-teal/textbox.css +173 -0
- package/dist/themes/material-teal/timeline.css +41 -0
- package/dist/themes/material-teal/timepicker.css +93 -0
- package/dist/themes/material-teal/tooltip.css +101 -0
- package/dist/themes/material-teal/tree.css +168 -0
- package/dist/themes/material-teal/validatebox.css +13 -0
- package/dist/themes/material-teal/window.css +182 -0
- package/dist/themes/metro/accordion.css +89 -0
- package/dist/themes/metro/calendar.css +213 -0
- package/dist/themes/metro/checkbox.css +31 -0
- package/dist/themes/metro/combo.css +35 -0
- package/dist/themes/metro/combobox.css +40 -0
- package/dist/themes/metro/datagrid.css +299 -0
- package/dist/themes/metro/datalist.css +95 -0
- package/dist/themes/metro/datebox.css +36 -0
- package/dist/themes/metro/dialog.css +47 -0
- package/dist/themes/metro/drawer.css +15 -0
- package/dist/themes/metro/filebox.css +20 -0
- package/dist/themes/metro/flex.css +52 -0
- package/dist/themes/metro/images/accordion_arrows.png +0 -0
- package/dist/themes/metro/images/blank.gif +0 -0
- package/dist/themes/metro/images/calendar_arrows.png +0 -0
- package/dist/themes/metro/images/combo_arrow.png +0 -0
- package/dist/themes/metro/images/datagrid_icons.png +0 -0
- package/dist/themes/metro/images/datebox_arrow.png +0 -0
- package/dist/themes/metro/images/layout_arrows.png +0 -0
- package/dist/themes/metro/images/linkbutton_bg.png +0 -0
- package/dist/themes/metro/images/loading.gif +0 -0
- package/dist/themes/metro/images/menu_arrows.png +0 -0
- package/dist/themes/metro/images/messager_icons.png +0 -0
- package/dist/themes/metro/images/messager_icons16.png +0 -0
- package/dist/themes/metro/images/pagination_icons.png +0 -0
- package/dist/themes/metro/images/panel_tools.png +0 -0
- package/dist/themes/metro/images/passwordbox_close.png +0 -0
- package/dist/themes/metro/images/passwordbox_open.png +0 -0
- package/dist/themes/metro/images/searchbox_button.png +0 -0
- package/dist/themes/metro/images/slider_handle.png +0 -0
- package/dist/themes/metro/images/spinner_arrows.png +0 -0
- package/dist/themes/metro/images/tabs_icons.png +0 -0
- package/dist/themes/metro/images/tagbox_icons.png +0 -0
- package/dist/themes/metro/images/tree_icons.png +0 -0
- package/dist/themes/metro/images/validatebox_warning.png +0 -0
- package/dist/themes/metro/index.css +3760 -0
- package/dist/themes/metro/layout.css +150 -0
- package/dist/themes/metro/linkbutton.css +203 -0
- package/dist/themes/metro/menu.css +119 -0
- package/dist/themes/metro/menubutton.css +94 -0
- package/dist/themes/metro/messager.css +74 -0
- package/dist/themes/metro/numberbox.css +0 -0
- package/dist/themes/metro/pagination.css +77 -0
- package/dist/themes/metro/panel.css +270 -0
- package/dist/themes/metro/passwordbox.css +6 -0
- package/dist/themes/metro/progressbar.css +33 -0
- package/dist/themes/metro/propertygrid.css +27 -0
- package/dist/themes/metro/radiobutton.css +25 -0
- package/dist/themes/metro/rate.css +34 -0
- package/dist/themes/metro/searchbox.css +61 -0
- package/dist/themes/metro/sidemenu.css +78 -0
- package/dist/themes/metro/slider.css +101 -0
- package/dist/themes/metro/spinner.css +114 -0
- package/dist/themes/metro/splitbutton.css +12 -0
- package/dist/themes/metro/swiper.css +33 -0
- package/dist/themes/metro/switchbutton.css +83 -0
- package/dist/themes/metro/tabs.css +379 -0
- package/dist/themes/metro/tagbox.css +44 -0
- package/dist/themes/metro/textbox.css +173 -0
- package/dist/themes/metro/timeline.css +41 -0
- package/dist/themes/metro/timepicker.css +93 -0
- package/dist/themes/metro/tooltip.css +101 -0
- package/dist/themes/metro/tree.css +168 -0
- package/dist/themes/metro/validatebox.css +13 -0
- package/dist/themes/metro/window.css +182 -0
- package/dist/themes/mobile.css +352 -0
- package/dist/themes/vue.css +736 -0
- package/dist/utils/exposeMethods.d.ts +47 -0
- package/dist/utils/exposeMethods.d.ts.map +1 -0
- package/dist/viteui.js +13944 -0
- package/dist/viteui.js.map +1 -0
- package/dist/viteui.umd.cjs +2 -0
- package/dist/viteui.umd.cjs.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viteui.umd.cjs","sources":["../src/components/form/rules.ts","../src/components/locale/index.ts","../src/components/base/DomHelper.ts","../src/components/base/SlideUpDown.ts","../src/utils/exposeMethods.ts","../src/components/panel/Panel.tsx","../src/components/accordion/Accordion.tsx","../src/components/panel/usePanelBase.ts","../src/components/panel/panelProps.ts","../src/components/accordion/AccordionPanel.tsx","../src/components/linkbutton/linkButtonProps.ts","../src/components/linkbutton/useLinkButtonBase.ts","../src/components/linkbutton/LinkButton.tsx","../src/components/linkbutton/ButtonGroup.tsx","../src/components/filebutton/FileButton.tsx","../src/components/pagination/PaginationButton.tsx","../src/components/pagination/PaginationList.tsx","../src/components/pagination/PaginationLink.tsx","../src/components/pagination/PaginationManual.tsx","../src/components/pagination/Pagination.tsx","../src/components/base/VirtualScroll.tsx","../src/components/base/useListBase.ts","../src/components/base/listBaseProps.ts","../src/components/datalist/DataList.tsx","../src/components/base/Addon.tsx","../src/components/base/Label.tsx","../src/components/base/useFieldBase.ts","../src/components/base/useInputBase.ts","../src/components/base/useSpinnerBase.ts","../src/components/base/useComboBase.ts","../src/components/base/EventHub.ts","../src/components/base/DateHelper.ts","../src/components/base/TreeHelper.ts","../src/components/gridbase/GridBase.tsx","../src/components/gridbase/GridEmpty.tsx","../src/components/gridbase/GridHeaderCell.tsx","../src/components/combobox/ComboBox.tsx","../src/components/gridbase/GridFilterButton.tsx","../src/components/gridbase/GridFilterCell.tsx","../src/components/gridbase/GridFilterRow.tsx","../src/components/resizable/ResizableClass.ts","../src/components/resizable/Resizable.ts","../src/components/draggable/DraggableClass.ts","../src/components/draggable/Draggable.ts","../src/components/droppable/DroppableClass.ts","../src/components/droppable/Droppable.ts","../src/components/draggable/DraggableProxy.tsx","../src/components/gridbase/GridHeader.tsx","../src/components/gridbase/GridFooterCell.tsx","../src/components/gridbase/GridFooter.tsx","../src/components/gridbase/gridViewProps.ts","../src/components/gridbase/useGridViewBase.ts","../src/components/textbox/TextBox.tsx","../src/components/form/Form.tsx","../src/components/form/FormField.tsx","../src/components/gridbase/GridBodyCell.tsx","../src/components/datagrid/DataGridRowDetail.tsx","../src/components/datagrid/DataGridRowGroup.tsx","../src/components/datagrid/DataGridTable.tsx","../src/components/gridbase/gridBodyProps.ts","../src/components/gridbase/useGridBodyBase.ts","../src/components/datagrid/DataGridBody.tsx","../src/components/datagrid/DataGridView.tsx","../src/components/gridbase/gridBaseProps.ts","../src/components/gridbase/useGridBase.ts","../src/components/datagrid/DataGrid.tsx","../src/components/datagrid/index.ts","../src/components/gridbase/GridColumn.tsx","../src/components/gridbase/GridColumnGroup.tsx","../src/components/gridbase/GridHeaderRow.tsx","../src/components/numberbox/NumberBox.tsx","../src/components/switchbutton/SwitchButton.tsx","../src/components/checkbox/CheckBox.tsx","../src/components/radiobutton/RadioButton.tsx","../src/components/tree/TreeNodeTitle.tsx","../src/components/tooltip/TooltipContent.tsx","../src/components/tooltip/Tooltip.ts","../src/components/tree/TreeNodeEditor.tsx","../src/components/tree/TreeNodeIcon.tsx","../src/components/tree/TreeNode.tsx","../src/components/tree/Tree.tsx","../src/components/tabs/TabPanelHeader.tsx","../src/components/tabs/Tabs.tsx","../src/components/tabs/TabPanel.tsx","../src/components/timespinner/TimeSpinner.tsx","../src/components/timepicker/TimeClock.tsx","../src/components/timepicker/TimePanel.tsx","../src/components/timepicker/TimePicker.tsx","../src/components/datetimespinner/DateTimeSpinner.tsx","../src/components/layout/CollapsedPanel.tsx","../src/components/layout/Layout.tsx","../src/components/layout/LayoutPanel.tsx","../src/components/menu/Menu.tsx","../src/components/menu/SubMenu.tsx","../src/components/menu/MenuItem.tsx","../src/components/menu/MenuSep.tsx","../src/components/menubutton/MenuButton.tsx","../src/components/splitbutton/SplitButton.tsx","../src/components/passwordbox/PasswordBox.tsx","../src/components/calendar/Calendar.tsx","../src/components/datebox/DateBox.tsx","../src/components/dialog/Dialog.tsx","../src/components/dialog/dialogProps.ts","../src/components/drawer/Drawer.tsx","../src/components/progressbar/ProgressBar.tsx","../src/components/treegrid/TreeGridTitle.tsx","../src/components/treegrid/TreeGridRow.tsx","../src/components/treegrid/TreeGridChildren.tsx","../src/components/treegrid/TreeGridBody.tsx","../src/components/treegrid/TreeGridView.tsx","../src/components/treegrid/TreeGrid.tsx","../src/components/slider/Slider.tsx","../src/components/tagbox/TagBox.tsx","../src/components/searchbox/SearchBox.tsx","../src/components/sidemenu/SideMenuIcon.tsx","../src/components/sidemenu/SideMenuItems.tsx","../src/components/sidemenu/SideMenu.tsx","../src/components/messager/MessagerContent.tsx","../src/components/messager/MessagerDialog.tsx","../src/components/messager/Messager.ts","../src/components/combotree/ComboTree.tsx","../src/components/combogrid/ComboGrid.tsx","../src/components/datetimebox/DateTimeBox.tsx","../src/components/rate/Rate.tsx","../src/components/swiper/Swiper.tsx","../src/components/swiper/SwiperPanel.tsx","../src/index.ts"],"sourcesContent":["/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * 验证规则参数类型\n */\nexport type ValidationParam = any[] | any;\n\n/**\n * 验证器函数类型\n */\nexport type ValidatorFunction = (value: any, param?: ValidationParam) => boolean | Promise<boolean>;\n\n/**\n * 验证规则接口\n */\nexport interface ValidationRule {\n /**\n * 验证器函数\n */\n validator: ValidatorFunction;\n \n /**\n * 错误消息\n */\n message: string;\n}\n\n/**\n * 验证规则集合\n */\nexport interface ValidationRules {\n /**\n * 必填验证\n */\n required: ValidationRule;\n \n /**\n * 长度验证\n */\n length: ValidationRule;\n \n /**\n * 邮箱验证\n */\n email: ValidationRule;\n \n /**\n * URL验证\n */\n url: ValidationRule;\n}\n\n/**\n * 默认验证规则\n */\nconst rules: ValidationRules = {\n required: {\n validator: (value: any): boolean => {\n if (value == null) {\n return false;\n }\n if (typeof value == 'boolean') {\n return value;\n }\n return String(value).trim().length > 0;\n },\n message: 'This field is required.'\n },\n length: {\n validator: function(value: any, param?: ValidationParam): boolean {\n const len = value ? String(value).trim().length : 0;\n const params = Array.isArray(param) ? param : [param];\n return len >= params[0] && len <= params[1];\n },\n message: 'Please enter a value between {0} and {1}.'\n },\n email: {\n validator: (value: any): boolean => {\n if (!value || typeof value !== 'string') {\n return false;\n }\n return /^[a-z0-9]+(\\.[_a-z0-9]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,15})$/.test(value);\n },\n message: 'Please enter a valid email address.'\n },\n url: {\n validator: (value: any): boolean => {\n if (!value || typeof value !== 'string') {\n return false;\n }\n return /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(value);\n },\n message: 'Please enter a valid URL.'\n }\n};\n\nexport default rules;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport type { ViteUILocale } from '../../locale/types';\n\nlet lang: ViteUILocale | null = null;\n\nexport const t = (path: string, defValue: string | null = null): string | null => {\n if (lang) {\n let value: any = lang;\n const pp = path.split('.');\n for (let i = 0; i < pp.length; i++) {\n const key = pp[i];\n if (value && value[key]) {\n value = value[key];\n } else {\n return defValue;\n }\n }\n return value || defValue;\n }\n return defValue;\n};\n\nexport const use = (l: ViteUILocale | null): void => {\n lang = l || lang;\n};\n\nexport default {\n use,\n t\n};\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nlet guid = 1;\n\nexport class MyEvent {\n event: MouseEvent | TouchEvent;\n pageX: number;\n pageY: number;\n\n constructor(event: MouseEvent | TouchEvent) {\n this.event = event;\n this.pageX = (event as MouseEvent).pageX || 0;\n this.pageY = (event as MouseEvent).pageY || 0;\n const touchEvents = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n if (touchEvents.indexOf(event.type) >= 0) {\n const touchEvent = event as TouchEvent;\n const touch = touchEvent.touches?.[0] || touchEvent.changedTouches?.[0];\n if (touch) {\n this.pageX = touch.pageX;\n this.pageY = touch.pageY;\n }\n }\n }\n\n preventDefault(): void {\n this.event.preventDefault();\n }\n\n stopPropagation(): void {\n this.event.stopPropagation();\n }\n}\n\ninterface HTMLElementWithMyEvents extends HTMLElement {\n myevents?: Record<string, Record<string, (e: Event) => boolean | void>>;\n}\n\ninterface Offset {\n left: number;\n top: number;\n}\n\ninterface Viewport {\n width: number;\n height: number;\n}\n\nexport class DomHelper {\n getElement(element: string | HTMLElement | null | undefined): HTMLElement | null {\n if (typeof element === 'string') {\n return document.querySelector(element);\n }\n return element || null;\n }\n\n outerWidth(element: string | HTMLElement | null | undefined, margin?: boolean): number {\n const el = this.getElement(element);\n if (!el) {\n return 0;\n }\n let width = el.offsetWidth;\n if (margin) {\n const style = getComputedStyle(el);\n width += (parseInt(style.getPropertyValue('margin-left')) || 0) + (parseInt(style.getPropertyValue('margin-right')) || 0);\n }\n return width;\n }\n\n outerHeight(element: string | HTMLElement | null | undefined, margin?: boolean): number {\n const el = this.getElement(element);\n if (!el) {\n return 0;\n }\n let height = el.offsetHeight;\n if (margin) {\n const style = getComputedStyle(el);\n height += (parseInt(style.getPropertyValue('margin-top')) || 0) + (parseInt(style.getPropertyValue('margin-bottom')) || 0);\n }\n return height;\n }\n\n closest(element: string | HTMLElement | null | undefined, selector: string): HTMLElement | null {\n const el = this.getElement(element);\n if (!el) {\n return null;\n }\n const matchesSelector = (el.matches || (el as any).webkitMatchesSelector || (el as any).mozMatchesSelector || (el as any).msMatchesSelector) as (selector: string) => boolean;\n let current: HTMLElement | null = el;\n while (current) {\n if (matchesSelector.call(current, selector)) {\n return current;\n }\n current = current.parentElement;\n }\n return null;\n }\n\n isChild(element: string | HTMLElement | null | undefined, parent: string | HTMLElement | null | undefined): boolean {\n const p = this.getElement(parent);\n let el = this.getElement(element);\n if (!p || !el) {\n return false;\n }\n while (el && el != p) {\n el = el.parentNode as HTMLElement | null;\n }\n return el == p;\n }\n\n offset(element: string | HTMLElement | null | undefined): Offset {\n const el = this.getElement(element);\n if (!el) {\n return { left: 0, top: 0 };\n }\n const rect = el.getBoundingClientRect();\n const left = rect.left;\n const top = rect.top;\n return { left: left + this.getScrollLeft(), top: top + this.getScrollTop() };\n }\n\n position(element: string | HTMLElement | null | undefined): Offset {\n const el = this.getElement(element);\n if (!el) {\n return { left: 0, top: 0 };\n }\n let offsetParent = el.offsetParent as HTMLElement | null;\n if (!offsetParent) {\n return {\n left: 0,\n top: 0\n };\n }\n while (offsetParent && (!/^body|html$/i.test(offsetParent.tagName))) {\n const style = getComputedStyle(offsetParent);\n if (style.getPropertyValue('position') == 'static') {\n offsetParent = offsetParent.offsetParent as HTMLElement | null;\n } else {\n break;\n }\n }\n const offset = this.offset(element);\n const parentOffset = /^body|html$/i.test(offsetParent?.tagName || '') ? { top: 0, left: 0 } : this.offset(offsetParent);\n const style = getComputedStyle(el);\n offset.left -= parseInt(style.getPropertyValue('margin-left')) || 0;\n offset.top -= parseInt(style.getPropertyValue('margin-top')) || 0;\n if (offsetParent) {\n const parentStyle = getComputedStyle(offsetParent);\n parentOffset.left += parseInt(parentStyle.getPropertyValue('border-left-width')) || 0;\n parentOffset.top += parseInt(parentStyle.getPropertyValue('border-top-width')) || 0;\n }\n return {\n left: offset.left - parentOffset.left,\n top: offset.top - parentOffset.top\n };\n }\n\n getScrollLeft(): number {\n return Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);\n }\n\n getScrollTop(): number {\n return Math.max(document.documentElement.scrollTop, document.body.scrollTop);\n }\n\n getViewport(): Viewport {\n const de = document.documentElement;\n const body = document.getElementsByTagName('body')[0];\n return {\n width: window.innerWidth || de.clientWidth || body.clientWidth,\n height: window.innerHeight || de.clientHeight || body.clientHeight\n };\n }\n\n isAutoSize(value: any): boolean {\n const v = String(value);\n if (v == 'auto' || v == '') {\n return true;\n } else {\n return false;\n }\n }\n\n toStyleValue(value: any): string | null {\n if (value == null) {\n return null;\n }\n const v = String(value);\n const endchar = v.substr(v.length - 1, 1);\n if (endchar >= '0' && endchar <= '9') {\n return v + 'px';\n } else {\n return v;\n }\n }\n\n addClass(element: string | HTMLElement | null | undefined, className: string): void {\n const el = this.getElement(element);\n if (el) {\n el.classList.add(className);\n }\n }\n\n removeClass(element: string | HTMLElement | null | undefined, className: string): void {\n const el = this.getElement(element);\n if (el) {\n el.classList.remove(className);\n }\n }\n\n hasClass(element: string | HTMLElement | null | undefined, className: string): boolean {\n const el = this.getElement(element);\n if (!el) {\n return false;\n }\n return el.classList.contains(className);\n }\n\n scrollTo(container: string | HTMLElement | null | undefined, item: string | HTMLElement | null | undefined): void {\n const containerEl = this.getElement(container);\n const itemEl = this.getElement(item);\n if (!containerEl || !itemEl) {\n return;\n }\n const containerOffset = this.offset(containerEl);\n const itemOffset = this.offset(itemEl);\n const containerHeight = this.outerHeight(containerEl);\n const itemHeight = this.outerHeight(itemEl);\n const offsetTop = itemOffset.top - containerOffset.top;\n if (offsetTop < 0) {\n containerEl.scrollTop = containerEl.scrollTop + offsetTop - 1;\n } else if (offsetTop > containerHeight - itemHeight) {\n containerEl.scrollTop = containerEl.scrollTop - (containerHeight - itemHeight - offsetTop - 1);\n }\n }\n\n slideUp(element: string | HTMLElement | null | undefined, callback?: () => void): void {\n const el = this.getElement(element);\n if (!el) {\n return;\n }\n if (this.hasClass(el, 'f-hide')) {\n return;\n }\n const heightStyle = el.style.height;\n const height = this.outerHeight(el);\n el.style.height = height + 'px';\n const onEnd = () => {\n this.removeClass(el, 'f-animate');\n this.removeClass(el, 'panel-noscroll');\n this.addClass(el, 'f-hide');\n el.style.height = heightStyle;\n el.removeEventListener('transitionend', onEnd, false);\n if (callback) {\n callback();\n }\n };\n el.addEventListener('transitionend', onEnd, false);\n setTimeout(() => {\n this.addClass(el, 'f-animate');\n this.addClass(el, 'panel-noscroll');\n el.style.height = '0px';\n }, 50);\n }\n\n slideDown(element: string | HTMLElement | null | undefined, callback?: () => void): void {\n const el = this.getElement(element);\n if (!el) {\n return;\n }\n if (!this.hasClass(el, 'f-hide')) {\n return;\n }\n this.addClass(el, 'panel-noscroll');\n this.removeClass(el, 'f-hide');\n const heightStyle = el.style.height;\n const height = this.outerHeight(el);\n el.style.height = '0px';\n const onEnd = () => {\n this.removeClass(el, 'f-animate');\n this.removeClass(el, 'panel-noscroll');\n el.style.height = heightStyle;\n el.removeEventListener('transitionend', onEnd, false);\n if (callback) {\n callback();\n }\n };\n el.addEventListener('transitionend', onEnd, false);\n setTimeout(() => {\n this.addClass(el, 'f-animate');\n el.style.height = height + 'px';\n }, 50);\n }\n\n nextGuid(): number {\n return ++guid;\n }\n\n bind<T = any>(element: string | HTMLElement | null | undefined, event: string, handler: (e: T) => boolean | void): void {\n (handler as any).guid = (handler as any).guid || guid++;\n const fn = (e: Event) => {\n const r = handler.call(this, e as T);\n if (r == false) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n const el = this.getElement(element) as HTMLElementWithMyEvents | null;\n if (!el) {\n return;\n }\n el.myevents = el.myevents || {};\n if (!el.myevents[event]) {\n el.myevents[event] = {};\n }\n el.myevents[event][String((handler as any).guid)] = fn;\n el.addEventListener(event, fn, false);\n }\n\n unbind<T = any>(element: string | HTMLElement | null | undefined, event?: string, handler?: (e: T) => boolean | void): void {\n const el = this.getElement(element) as HTMLElementWithMyEvents | null;\n if (!el || !el.myevents) {\n return;\n }\n if (event) {\n if (handler) {\n const guid = String((handler as any).guid);\n const fn = el.myevents[event]?.[guid];\n if (fn) {\n el.removeEventListener(event, fn, false);\n }\n if (el.myevents[event]) {\n delete el.myevents[event][guid];\n }\n } else {\n const events = el.myevents[event];\n if (events) {\n for (const guid in events) {\n const fn = events[guid];\n el.removeEventListener(event, fn, false);\n }\n delete el.myevents[event];\n }\n }\n } else {\n for (const evt in el.myevents) {\n const events = el.myevents[evt];\n if (events) {\n for (const guid in events) {\n const fn = events[guid];\n el.removeEventListener(evt, fn, false);\n }\n }\n }\n delete el.myevents;\n }\n }\n}\n\nexport default new DomHelper();\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { ObjectDirective } from 'vue';\nimport domHelper from './DomHelper';\n\ntype NamedDirective<T, V> = ObjectDirective<T, V> & { name: string };\n\n/**\n * SlideUpDown 选项接口\n */\nexport interface SlideUpDownOptions {\n /**\n * 是否禁用\n */\n disabled?: boolean;\n \n /**\n * 是否折叠\n */\n collapsed?: boolean;\n \n /**\n * 是否动画\n */\n animate?: boolean;\n}\n\nexport interface HTMLElementWithSlideState extends HTMLElement {\n collapsed?: boolean;\n sliding?: boolean;\n}\n\nconst SlideUpDown: NamedDirective<HTMLElementWithSlideState, SlideUpDownOptions> = {\n name: 'SlideUpDown',\n mounted(el: HTMLElementWithSlideState, binding) {\n if (binding.value?.disabled) {\n return;\n }\n if (binding.value?.collapsed) {\n el.collapsed = true;\n domHelper.addClass(el, 'f-hide');\n }\n el.sliding = false;\n },\n updated(el: HTMLElementWithSlideState, binding) {\n if (binding.value?.disabled) {\n return;\n }\n if (binding.value?.collapsed == el.collapsed) {\n return;\n }\n if (binding.value?.animate) {\n if (el.sliding) {\n return;\n }\n el.sliding = true;\n if (binding.value.collapsed) {\n domHelper.slideUp(el, () => {\n el.sliding = false;\n el.collapsed = true;\n });\n } else {\n domHelper.slideDown(el, () => {\n el.sliding = false;\n el.collapsed = false;\n });\n }\n setTimeout(() => {\n el.sliding = false;\n }, 400);\n } else {\n el.collapsed = binding.value?.collapsed || false;\n if (el.collapsed) {\n domHelper.addClass(el, 'f-hide');\n } else {\n domHelper.removeClass(el, 'f-hide');\n }\n }\n }\n};\n\nexport default SlideUpDown;\n","/**\n * 工具函数:帮助组件同时兼容选项式API和组合式API\n * 通过 defineExpose 显式暴露组件的方法和属性\n */\n\nimport { getCurrentInstance, onMounted } from \"vue\";\n\n/**\n * 为选项式API组件添加 setup 函数,用于暴露方法和属性\n * 这个方法可以在组件的 setup 选项中使用\n *\n * @param expose - Vue 3 的 expose 函数\n * @param methodNames - 需要暴露的方法名数组\n * @param propertyNames - 需要暴露的属性名数组(可选)\n * @returns 空对象(用于 setup 函数的返回值)\n *\n * @example\n * export default {\n * setup(props, { expose }) {\n * return useExpose(expose, ['setValue', 'focus', 'blur']);\n * },\n * methods: {\n * setValue() { ... },\n * focus() { ... }\n * }\n * }\n */\nexport function useExpose(\n expose: (exposed: Record<string, any>) => void,\n methodNames: string[] = [],\n propertyNames: string[] = []\n): Record<string, never> {\n onMounted(() => {\n const instance = getCurrentInstance();\n if (!instance) return;\n\n const exposed: Record<string, any> = {};\n const proxy = instance.proxy || (instance as any).ctx;\n\n // 暴露方法\n methodNames.forEach((methodName) => {\n const method = proxy?.[methodName];\n if (typeof method === \"function\") {\n exposed[methodName] = method;\n }\n });\n\n // 暴露属性\n propertyNames.forEach((propName) => {\n const prop = proxy?.[propName];\n if (prop !== undefined) {\n // 对于响应式属性,需要特殊处理\n if (prop && typeof prop === \"object\" && (prop as any).value !== undefined) {\n exposed[propName] = (prop as any).value;\n } else {\n exposed[propName] = prop;\n }\n }\n });\n\n expose(exposed);\n });\n\n return {};\n}\n\n/**\n * 创建一个 mixin,用于在组件挂载后自动暴露方法\n * 这个方法可以在组件的 mixins 选项中使用\n *\n * @param methodNames - 需要暴露的方法名数组\n * @param propertyNames - 需要暴露的属性名数组(可选)\n * @returns mixin 对象\n *\n * @example\n * export default {\n * mixins: [createExposeMixin(['setValue', 'focus'])],\n * methods: {\n * setValue() { ... }\n * }\n * }\n */\nexport function createExposeMixin(\n methodNames: string[] = [],\n propertyNames: string[] = []\n): {\n setup(_props: any, { expose }: { expose: (exposed: Record<string, any>) => void }): Record<string, never>;\n} {\n return {\n setup(_props: any, { expose }: { expose: (exposed: Record<string, any>) => void }): Record<string, never> {\n return useExpose(expose, methodNames, propertyNames);\n },\n };\n}\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch } from 'vue';\nimport SlideUpDown from '../base/SlideUpDown';\nimport { useExpose } from '../../utils/exposeMethods';\nimport type { PanelProps } from './types';\n\nexport default defineComponent({\n name: 'Panel',\n directives: { SlideUpDown },\n props: {\n title: String as PropType<PanelProps['title']>,\n iconCls: String as PropType<PanelProps['iconCls']>,\n border: {\n type: Boolean as PropType<PanelProps['border']>,\n default: true\n },\n animate: {\n type: Boolean as PropType<PanelProps['animate']>,\n default: false\n },\n closed: {\n type: Boolean as PropType<PanelProps['closed']>,\n default: false\n },\n collapsed: {\n type: Boolean as PropType<PanelProps['collapsed']>,\n default: false\n },\n collapsible: {\n type: Boolean as PropType<PanelProps['collapsible']>,\n default: false\n },\n closable: {\n type: Boolean as PropType<PanelProps['closable']>,\n default: false\n },\n showHeader: {\n type: Boolean as PropType<PanelProps['showHeader']>,\n default: true\n },\n showFooter: {\n type: Boolean as PropType<PanelProps['showFooter']>,\n default: true\n },\n expandIconCls: {\n type: String as PropType<PanelProps['expandIconCls']>,\n default: 'panel-tool-expand'\n },\n collapseIconCls: {\n type: String as PropType<PanelProps['collapseIconCls']>,\n default: 'panel-tool-collapse'\n },\n closeIconCls: {\n type: String as PropType<PanelProps['closeIconCls']>,\n default: 'panel-tool-close'\n },\n panelCls: String as PropType<PanelProps['panelCls']>,\n panelStyle: [Object, String] as PropType<PanelProps['panelStyle']>,\n headerCls: String as PropType<PanelProps['headerCls']>,\n headerStyle: [Object, String] as PropType<PanelProps['headerStyle']>,\n bodyCls: String as PropType<PanelProps['bodyCls']>,\n bodyStyle: [Object, String] as PropType<PanelProps['bodyStyle']>,\n footerCls: String as PropType<PanelProps['footerCls']>,\n footerStyle: [Object, String] as PropType<PanelProps['footerStyle']>\n },\n setup(props: PanelProps, { expose, slots }) {\n const collapsedState = ref<boolean>(props.collapsed || false);\n const closedState = ref<boolean>(props.closed || false);\n const animateState = ref<boolean>(props.animate || false);\n const collapseToShrinkBody = ref<boolean>(true);\n const headerRef = ref<HTMLElement | null>(null);\n const bodyRef = ref<HTMLElement | null>(null);\n const footerRef = ref<HTMLElement | null>(null);\n\n watch(() => props.closed, (value?: boolean) => {\n closedState.value = value || false;\n });\n\n watch(() => props.collapsed, (value?: boolean) => {\n collapsedState.value = value || false;\n });\n\n watch(() => props.animate, (value?: boolean) => {\n animateState.value = value || false;\n });\n\n const hasHeader = computed(() => {\n return !!props.showHeader && !(!slots.header && !props.title);\n });\n\n const hasFooter = computed(() => {\n if (!props.showFooter) {\n return false;\n }\n if (slots.footer) {\n return true;\n } else {\n return false;\n }\n });\n\n const panelClasses = computed(() => {\n return ['panel f-column', props.panelCls].filter(Boolean);\n });\n\n const headerClasses = computed(() => {\n return ['panel-header f-noshrink f-row f-vcenter', props.headerCls,\n { 'panel-header-noborder': !props.border }\n ].filter(Boolean);\n });\n\n const bodyClasses = computed(() => {\n return ['panel-body f-full', props.bodyCls, {\n 'panel-body-noheader': !hasHeader.value,\n 'panel-body-nobottom': !!slots.footer,\n 'panel-body-noborder': !props.border\n }].filter(Boolean);\n });\n\n const footerClasses = computed(() => {\n const footerCls = props.footerCls || \"\";\n const border = props.border || false;\n return ['panel-footer f-noshrink', footerCls, {\n 'panel-footer-noborder': !border\n }].filter(Boolean);\n });\n\n const collapsibleClasses = computed(() => {\n return collapsedState.value ? (props.expandIconCls || 'panel-tool-expand') : (props.collapseIconCls || 'panel-tool-collapse');\n });\n\n const closableClasses = computed(() => {\n return props.closeIconCls || 'panel-tool-close';\n });\n\n const clickCollapsibleTool = (): void => {\n collapsedState.value = !collapsedState.value;\n };\n\n const clickCloseTool = (): void => {\n closedState.value = true;\n };\n\n const panelHeader = () => {\n if (!hasHeader.value) {\n return null;\n }\n const headerTitle = () => {\n if (slots.header) {\n return slots.header();\n } else {\n const cls = ['panel-title'];\n if (props.iconCls && !slots.icon) {\n cls.push('panel-with-icon');\n }\n return (\n <div class={cls}>{props.title}</div>\n );\n }\n };\n const headerIcon = () => {\n if (props.iconCls && !slots.icon) {\n return <div class={props.iconCls + ' panel-icon'}></div>;\n } else {\n return null;\n }\n };\n const panelTools = () => {\n if (props.collapsible || props.closable) {\n return (\n <div class=\"panel-tool\">\n {props.collapsible && <a href=\"javascript:;\" class={collapsibleClasses.value} onClick={clickCollapsibleTool}></a>}\n {props.closable && <a href=\"javascript:;\" class={closableClasses.value} onClick={clickCloseTool}></a>}\n </div>\n );\n }\n return null;\n };\n\n return (\n <div ref={headerRef} class={headerClasses.value} style={props.headerStyle}>\n {headerTitle()}\n {headerIcon()}\n {panelTools()}\n </div>\n );\n };\n\n const panelBody = () => {\n return (\n <div ref={bodyRef} v-SlideUpDown={{ animate: animateState.value, collapsed: collapsedState.value, disabled: !collapseToShrinkBody.value }} class={bodyClasses.value} style={props.bodyStyle}>\n {slots.default && slots.default()}\n </div>\n );\n };\n\n const panelFooter = () => {\n if (!hasFooter.value) {\n return null;\n }\n return (\n <div ref={footerRef} class={footerClasses.value} style={props.footerStyle}>\n {slots.footer && slots.footer()}\n </div>\n );\n };\n\n useExpose(expose, [\n 'clickCollapsibleTool',\n 'clickCloseTool'\n ], [\n 'collapsedState',\n 'closedState'\n ]);\n\n return () => {\n if (!closedState.value) {\n return (\n <div class={panelClasses.value} style={props.panelStyle}>\n {panelHeader()}\n {panelBody()}\n {panelFooter()}\n </div>\n );\n } else {\n return null;\n }\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, ref, computed, watch, nextTick, type PropType } from \"vue\";\nimport type { AccordionPanelInstance, AccordionProps } from \"./types\";\n\nexport default defineComponent({\n name: \"Accordion\",\n props: {\n border: {\n type: Boolean as PropType<AccordionProps['border']>,\n default: true\n },\n multiple: {\n type: Boolean as PropType<AccordionProps['multiple']>,\n default: false\n },\n animate: {\n type: Boolean as PropType<AccordionProps['animate']>,\n default: false\n },\n selectedIndex: {\n type: [Number, Array] as PropType<AccordionProps['selectedIndex']>,\n default: 0\n }\n },\n setup(props: AccordionProps, { expose, slots }) {\n // 响应式数据\n const panels = ref<AccordionPanelInstance[]>([]);\n\n // 计算属性\n const accordionClasses = computed(() => {\n return ['accordion f-column', {\n 'accordion-noborder': !props.border\n }];\n });\n\n // 方法定义\n const initPanels = (): void => {\n if (panels.value.length) {\n panels.value.forEach(p => {\n p.isLast = false;\n p.animateState = props.animate;\n });\n const last = panels.value[panels.value.length - 1];\n last.isLast = true;\n initSelectedPanel();\n }\n };\n\n const initSelectedPanel = (): void => {\n let selectedPanels = panels.value.filter(p => p.selectedState);\n if (!selectedPanels.length) {\n if (props.multiple) {\n const selectedIndex = props.selectedIndex as number[];\n selectedPanels = getPanels(selectedIndex || []);\n } else {\n const selectedIndex = props.selectedIndex as number;\n selectedPanels = getPanels([selectedIndex]);\n }\n }\n if (selectedPanels.length) {\n selectedPanels.forEach(p => {\n p.animateState = false;\n });\n if (props.multiple) {\n selectedPanels.forEach(p => {\n p.collapsedState = false;\n });\n } else {\n selectedPanels[0].collapsedState = false;\n selectedPanels.filter((_p, index) => index !== 0).forEach(p => {\n p.collapsedState = true;\n });\n }\n nextTick(() => {\n selectedPanels.forEach(p => {\n p.animateState = props.animate;\n });\n });\n }\n };\n\n const addPanel = (panel: AccordionPanelInstance): void => {\n const pp = panels.value.slice();\n pp.push(panel);\n panels.value = pp;\n };\n\n const removePanel = (panel: AccordionPanelInstance): void => {\n const pp = panels.value.slice();\n const index = pp.indexOf(panel);\n if (index >= 0) {\n pp.splice(index, 1);\n panels.value = pp;\n }\n };\n\n const getPanel = (index: number): AccordionPanelInstance | undefined => {\n return panels.value[index];\n };\n\n const getPanels = (indexes: number[]): AccordionPanelInstance[] => {\n const result: AccordionPanelInstance[] = [];\n for (const index of indexes) {\n const panel = getPanel(index);\n if (panel) {\n result.push(panel);\n }\n }\n return result;\n };\n\n const getSelectedPanels = (): AccordionPanelInstance[] => {\n return panels.value.filter(p => p.selectedState);\n };\n\n const getSelectedPanel = (): AccordionPanelInstance | null => {\n const pp = getSelectedPanels();\n return pp.length ? pp[0] : null;\n };\n\n const getPanelIndex = (panel: AccordionPanelInstance): number => {\n for (let i = 0; i < panels.value.length; i++) {\n if (panels.value[i] === panel) {\n return i;\n }\n }\n return -1;\n };\n\n const getSelectedIndex = (): number => {\n const panel = getSelectedPanel();\n return panel ? getPanelIndex(panel) : -1;\n };\n\n const select = (index: number): void => {\n const panel = getPanel(index);\n if (panel) {\n panel.select();\n }\n };\n\n const unselect = (index: number): void => {\n const panel = getPanel(index);\n if (panel) {\n panel.unselect();\n }\n };\n\n // 监听器\n watch(panels, () => {\n initPanels();\n });\n\n watch(\n () => props.selectedIndex,\n (value: number | number[] | undefined) => {\n if (value === undefined) return;\n const indexes = value instanceof Array ? value : [value];\n if (props.multiple) {\n panels.value.filter((_p, index) => indexes.indexOf(index) === -1).forEach(p => p.unselect());\n indexes.forEach(index => select(index));\n } else {\n select(indexes[0]);\n }\n }\n );\n\n // 暴露方法和属性\n expose({\n initPanels,\n addPanel,\n removePanel,\n getPanel,\n getPanels,\n getSelectedPanels,\n getSelectedPanel,\n getPanelIndex,\n getSelectedIndex,\n select,\n unselect,\n panels\n });\n\n // 返回渲染函数\n return () => (\n <div class={accordionClasses.value}>\n {slots.default?.()}\n </div>\n );\n }\n});\n","import { computed, ref, watch, h, withDirectives, type Ref, type VNodeChild, type Slots, ComputedRef } from 'vue';\nimport SlideUpDown from '../base/SlideUpDown';\nimport type { PanelProps } from './types';\n\nexport interface PanelHeaderBodyFooterRefs {\n headerRef: Ref<HTMLElement | null>;\n bodyRef: Ref<HTMLElement | null>;\n footerRef: Ref<HTMLElement | null>;\n}\n\nexport interface PanelProxy {\n uid: string | number;\n [key: string]: any;\n}\n\nexport interface UsePanelBaseReturn extends PanelHeaderBodyFooterRefs {\n // state\n collapsedState: Ref<boolean>;\n closedState: Ref<boolean>;\n animateState: Ref<boolean>;\n collapseToShrinkBody: Ref<boolean>;\n proxyAttrs: Ref<PanelProxy | null>;\n\n // computed\n hasHeader: ComputedRef<boolean>;\n hasFooter: ComputedRef<boolean>;\n panelClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n headerClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n bodyClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n footerClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n collapsibleClasses: ComputedRef<string>;\n closableClasses: ComputedRef<string>;\n\n // 构建代理对象\n buildProxy: (proxy: PanelProxy) => PanelProxy;\n\n // methods\n clickCollapsibleTool: () => void;\n clickCloseTool: () => void;\n\n // render helpers\n renderHeader: (overrides?: {\n classes?: any;\n style?: any;\n collapsibleClass?: string;\n closableClass?: string;\n onClickCollapsible?: () => void;\n onClickClose?: () => void;\n }) => VNodeChild;\n renderBody: (overrides?: { classes?: any; style?: any; children?: VNodeChild }) => VNodeChild;\n renderFooter: (overrides?: { classes?: any; style?: any }) => VNodeChild;\n renderPanel: (overrides?: { classes?: any; style?: any; children?: VNodeChild[] }) => VNodeChild;\n}\n\n/**\n * usePanelBase:从 Panel.tsx 抽出的组合式实现(用于替代 extends: Panel)\n *\n * 说明:\n * - 这里不依赖组件实例 this\n * - SlideUpDown 指令在 renderBody 内部通过 withDirectives 应用\n */\nexport function usePanelBase(props: PanelProps, slots: Slots): UsePanelBaseReturn {\n const headerRef = ref<HTMLElement | null>(null);\n const bodyRef = ref<HTMLElement | null>(null);\n const footerRef = ref<HTMLElement | null>(null);\n\n const collapsedState = ref<boolean>(props.collapsed ?? true);\n const closedState = ref<boolean>(props.closed ?? false);\n const animateState = ref<boolean>(props.animate ?? false);\n const collapseToShrinkBody = ref<boolean>(true);\n\n const proxyAttrs = ref<PanelProxy | null>(null);\n\n watch(\n () => props.closed,\n v => {\n closedState.value = !!v;\n }\n );\n watch(\n () => props.collapsed,\n v => {\n collapsedState.value = !!v;\n }\n );\n watch(\n () => props.animate,\n v => {\n animateState.value = !!v;\n }\n );\n\n const hasHeader = computed<boolean>(() => {\n return !!props.showHeader && !(!slots.header && !props.title);\n });\n\n const hasFooter = computed<boolean>(() => {\n if (props.showFooter === false) return false;\n return !!slots['footer'];\n });\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n if (!props.panelCls) return ['panel f-column'];\n return ['panel f-column', props.panelCls].filter(Boolean) as any;\n });\n\n const headerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n if (!props.headerCls) return ['panel-header f-noshrink f-row f-vcenter'];\n return [\n 'panel-header f-noshrink f-row f-vcenter',\n props.headerCls,\n { 'panel-header-noborder': props.border === false }\n ].filter(Boolean) as any;\n });\n\n const bodyClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'panel-body f-full',\n props.bodyCls,\n {\n 'panel-body-noheader': !hasHeader.value,\n 'panel-body-nobottom': !!slots['footer'],\n 'panel-body-noborder': props.border === false\n }\n ].filter(Boolean) as any;\n });\n\n const footerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const footerCls = props.footerCls || '';\n const border = props.border || false;\n return [\n 'panel-footer f-noshrink',\n footerCls,\n {\n 'panel-footer-noborder': !border\n }\n ].filter(Boolean) as any;\n });\n\n const collapsibleClasses = computed<string>(() => {\n return collapsedState.value ? props.expandIconCls || 'panel-tool-expand' : props.collapseIconCls || 'panel-tool-collapse';\n });\n\n const closableClasses = computed<string>(() => {\n return props.closeIconCls || 'panel-tool-close';\n });\n\n function buildProxy(proxy: PanelProxy) {\n proxyAttrs.value = proxy;\n return proxyAttrs.value;\n }\n\n function clickCollapsibleTool(): void {\n collapsedState.value = !collapsedState.value;\n }\n\n function clickCloseTool(): void {\n closedState.value = true;\n }\n\n function renderHeader(\n overrides: {\n classes?: any;\n style?: any;\n collapsibleClass?: string;\n closableClass?: string;\n onClickCollapsible?: () => void;\n onClickClose?: () => void;\n } = {}\n ): VNodeChild {\n if (!hasHeader.value) return null;\n\n const headerTitle = () => {\n if (slots['header']) {\n return slots['header']();\n }\n const cls: any[] = ['panel-title'];\n if (props.iconCls && !slots['icon']) cls.push('panel-with-icon');\n return h('div', { class: cls }, props.title);\n };\n\n const headerIcon = () => {\n if (props.iconCls && !slots['icon']) {\n return h('div', { class: `${props.iconCls} panel-icon` });\n }\n return null;\n };\n\n const panelTools = () => {\n if (props.collapsible || props.closable) {\n const collapsibleCls = overrides.collapsibleClass ?? collapsibleClasses.value;\n const closableCls = overrides.closableClass ?? closableClasses.value;\n const onCollapsible = overrides.onClickCollapsible ?? clickCollapsibleTool;\n const onClose = overrides.onClickClose ?? clickCloseTool;\n return h('div', { class: 'panel-tool' }, [\n props.collapsible ? h('a', { href: 'javascript:;', class: collapsibleCls, onClick: onCollapsible }) : null,\n props.closable ? h('a', { href: 'javascript:;', class: closableCls, onClick: onClose }) : null\n ]);\n }\n return null;\n };\n\n const cls = overrides.classes ?? headerClasses.value;\n const style = overrides.style ?? props.headerStyle;\n return h('div', { ref: headerRef, class: cls, style }, [headerTitle(), headerIcon(), panelTools()]);\n }\n\n function renderBody(overrides: { classes?: any; style?: any; children?: VNodeChild } = {}): VNodeChild {\n const cls = overrides.classes ?? bodyClasses.value;\n const style = overrides.style ?? props.bodyStyle;\n const children = overrides.children ?? (slots.default ? slots.default() : null);\n\n const body = h('div', { ref: bodyRef, class: cls, style }, children as any);\n return withDirectives(body, [[SlideUpDown as any, { animate: animateState.value, collapsed: collapsedState.value, disabled: !collapseToShrinkBody.value }]]);\n }\n\n function renderFooter(overrides: { classes?: any; style?: any } = {}): VNodeChild {\n if (!hasFooter.value) return null;\n const cls = overrides.classes ?? footerClasses.value;\n const style = overrides.style ?? props.footerStyle;\n return h('div', { ref: footerRef, class: cls, style }, slots['footer'] ? slots['footer']() : undefined);\n }\n\n function renderPanel(overrides: { classes?: any; style?: any; children?: VNodeChild[] } = {}): VNodeChild {\n if (closedState.value) return null;\n const cls = overrides.classes ?? panelClasses.value;\n const style = overrides.style ?? props.panelStyle;\n const children = overrides.children ?? [renderHeader(), renderBody(), renderFooter()];\n return h('div', { class: cls, style }, children as any);\n }\n\n return {\n proxyAttrs,\n headerRef,\n bodyRef,\n footerRef,\n collapsedState,\n closedState,\n animateState,\n collapseToShrinkBody,\n hasHeader,\n hasFooter,\n panelClasses,\n headerClasses,\n bodyClasses,\n footerClasses,\n collapsibleClasses,\n closableClasses,\n buildProxy,\n clickCollapsibleTool,\n clickCloseTool,\n renderHeader,\n renderBody,\n renderFooter,\n renderPanel\n };\n}\n\n","import type { PropType } from 'vue';\nimport type { PanelProps } from './types';\n\n/**\n * Panel 的运行时 props 定义(用于“组合”替代 extends 时复用)\n * 注意:这里与 `Panel.tsx` 的 props 保持一致。\n */\nexport const panelProps = {\n title: String as PropType<PanelProps['title']>,\n iconCls: String as PropType<PanelProps['iconCls']>,\n border: {\n type: Boolean as PropType<PanelProps['border']>,\n default: true\n },\n animate: {\n type: Boolean as PropType<PanelProps['animate']>,\n default: false\n },\n closed: {\n type: Boolean as PropType<PanelProps['closed']>,\n default: false\n },\n collapsed: {\n type: Boolean as PropType<PanelProps['collapsed']>,\n default: false\n },\n collapsible: {\n type: Boolean as PropType<PanelProps['collapsible']>,\n default: false\n },\n closable: {\n type: Boolean as PropType<PanelProps['closable']>,\n default: false\n },\n showHeader: {\n type: Boolean as PropType<PanelProps['showHeader']>,\n default: true\n },\n showFooter: {\n type: Boolean as PropType<PanelProps['showFooter']>,\n default: true\n },\n expandIconCls: {\n type: String as PropType<PanelProps['expandIconCls']>,\n default: 'panel-tool-expand'\n },\n collapseIconCls: {\n type: String as PropType<PanelProps['collapseIconCls']>,\n default: 'panel-tool-collapse'\n },\n closeIconCls: {\n type: String as PropType<PanelProps['closeIconCls']>,\n default: 'panel-tool-close'\n },\n panelCls: String as PropType<PanelProps['panelCls']>,\n panelStyle: [Object, String] as PropType<PanelProps['panelStyle']>,\n headerCls: String as PropType<PanelProps['headerCls']>,\n headerStyle: [Object, String] as PropType<PanelProps['headerStyle']>,\n bodyCls: String as PropType<PanelProps['bodyCls']>,\n bodyStyle: [Object, String] as PropType<PanelProps['bodyStyle']>,\n footerCls: String as PropType<PanelProps['footerCls']>,\n footerStyle: [Object, String] as PropType<PanelProps['footerStyle']>\n} satisfies Record<keyof PanelProps, any>;\n\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, type PropType, ref } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport { PanelProxy, usePanelBase } from '../panel/usePanelBase';\nimport type { AccordionPanelProps } from './types';\nimport { panelProps } from '../panel/panelProps';\n\nexport default defineComponent({\n name: 'AccordionPanel',\n props: {\n ...panelProps,\n title: {\n type: String as PropType<AccordionPanelProps['title']>,\n default: ''\n },\n collapsible: {\n type: Boolean as PropType<AccordionPanelProps['collapsible']>,\n default: true\n },\n expandIconCls: {\n type: String as PropType<AccordionPanelProps['expandIconCls']>,\n default: 'accordion-expand'\n },\n collapseIconCls: {\n type: String as PropType<AccordionPanelProps['collapseIconCls']>,\n default: 'accordion-collapse'\n },\n collapsed: {\n type: Boolean as PropType<AccordionPanelProps['collapsed']>,\n default: true\n },\n selected: {\n type: Boolean as PropType<AccordionPanelProps['selected']>,\n default: false\n }\n },\n setup(props: AccordionPanelProps, { slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n // 组合式 API:使用 composable\n const pb = usePanelBase(props, slots);\n\n // 响应式数据\n const rootRef = ref<HTMLElement | null>(null);\n const isLast = ref(false);\n\n // 计算属性\n const selectedState = computed<boolean>(() => !pb.collapsedState.value);\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const panelCls = props.panelCls || '';\n return [\n 'panel f-column',\n panelCls,\n {\n 'panel-last': isLast.value,\n 'f-full': selectedState.value,\n 'f-noshrink': !selectedState.value\n }\n ].filter(Boolean) as any;\n });\n\n const headerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const border = props.border !== false;\n const headerCls = props.headerCls || '';\n return [\n 'accordion-header panel-header f-noshrink',\n headerCls,\n {\n 'panel-header-noborder': !border,\n 'accordion-header-selected': selectedState.value\n }\n ].filter(Boolean) as any;\n });\n\n const bodyClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const border = props.border !== false;\n const bodyCls = props.bodyCls || '';\n const hasFooter = slots['footer'] !== undefined;\n return [\n 'accordion-body panel-body f-full',\n bodyCls,\n {\n 'panel-body-noheader': !pb.hasHeader.value,\n 'panel-body-nobottom': hasFooter,\n 'panel-body-noborder': !border\n }\n ].filter(Boolean) as any;\n });\n\n // 方法定义\n const select = (): void => {\n const parent = proxy?.$parent as any;\n if (parent && !parent.multiple) {\n const panels = parent.panels || [];\n const proxyAttrs = pb.proxyAttrs.value;\n panels\n .filter((p: PanelProxy) => {\n return proxyAttrs && p.uid != proxyAttrs.uid\n })\n .forEach((p: PanelProxy) => {\n p?.unselect?.();\n });\n }\n pb.collapsedState.value = false;\n parent?.$emit?.('panelSelect', proxy);\n // EventHub 通知\n setTimeout(() => window.EventHub?.$emit?.('panelSelect', proxy), 0);\n };\n\n const unselect = (): void => {\n if (!selectedState.value) return;\n pb.collapsedState.value = true;\n const parent = proxy?.$parent as any;\n parent?.$emit?.('panelUnselect', proxy);\n };\n\n const clickHandler = (event: Event): void => {\n const header = domHelper.closest(event.target as HTMLElement, '.accordion-header');\n if (!header) return;\n event.stopPropagation();\n const parent = proxy?.$parent as any;\n if (pb.collapsedState.value) {\n select();\n } else if (parent && parent.multiple) {\n unselect();\n }\n };\n\n // 生命周期钩子\n onMounted(() => {\n const parent = proxy?.$parent as any;\n const proxyAttrs = pb.buildProxy({\n uid: inst?.uid ?? '',\n isLast: isLast,\n selectedState: selectedState,\n collapsedState: pb.collapsedState,\n animateState: pb.animateState,\n unselect,\n select,\n })\n parent?.addPanel?.(proxyAttrs);\n if (rootRef.value) {\n rootRef.value.addEventListener('click', clickHandler, false);\n }\n });\n\n onBeforeUnmount(() => {\n const parent = proxy?.$parent as any;\n parent?.removePanel?.(proxy);\n if (rootRef.value) {\n rootRef.value.removeEventListener('click', clickHandler, false);\n }\n });\n\n // 暴露方法和属性\n expose({\n select,\n unselect,\n selectedState: selectedState,\n collapsedState: pb.collapsedState,\n isLast,\n animateState: pb.animateState\n });\n\n // 返回渲染函数\n return () => {\n if (pb.closedState.value) return null;\n return (\n <div ref={rootRef} class={panelClasses.value} style={props.panelStyle}>\n {pb.renderHeader({ classes: headerClasses.value, style: props.headerStyle })}\n {pb.renderBody({ classes: bodyClasses.value, style: props.bodyStyle })}\n {pb.renderFooter({ style: props.footerStyle })}\n </div>\n );\n };\n }\n});\n","import type { PropType } from 'vue';\nimport type { LinkButtonProps } from './types';\n\nexport const linkButtonProps = {\n disabled: {\n type: Boolean as PropType<LinkButtonProps['disabled']>,\n default: false\n },\n toggle: {\n type: Boolean as PropType<LinkButtonProps['toggle']>,\n default: false\n },\n selected: {\n type: Boolean as PropType<LinkButtonProps['selected']>,\n default: false\n },\n outline: {\n type: Boolean as PropType<LinkButtonProps['outline']>,\n default: false\n },\n plain: {\n type: Boolean as PropType<LinkButtonProps['plain']>,\n default: false\n },\n text: String as PropType<LinkButtonProps['text']>,\n iconCls: String as PropType<LinkButtonProps['iconCls']>,\n iconAlign: {\n type: String as PropType<LinkButtonProps['iconAlign']>,\n default: 'left'\n },\n size: {\n type: String as PropType<LinkButtonProps['size']>,\n default: 'small'\n },\n href: String as PropType<LinkButtonProps['href']>,\n btnCls: String as PropType<LinkButtonProps['btnCls']>,\n btnStyle: Object as PropType<LinkButtonProps['btnStyle']>\n} satisfies Record<string, any>;\n","import {\n computed,\n ref,\n watch,\n onMounted,\n onBeforeUnmount,\n getCurrentInstance,\n h,\n Fragment,\n type Ref,\n type ComputedRef,\n type SetupContext,\n type Slots,\n type VNodeChild\n} from 'vue';\nimport type { LinkButtonProps } from './types';\n\nexport interface LinkButtonProxy {\n uid: string | number;\n [key: string]: any;\n}\n\nexport interface UseLinkButtonBaseOverrides {\n isEmpty?: (base: () => boolean) => boolean;\n isDisabled?: (base: () => boolean) => boolean;\n btnIconCls?: (base: () => string) => string;\n btnLeftCls?: (base: () => string) => string;\n innerCls?: (base: () => string) => string;\n\n onClick?: (event: Event, base: (event: Event) => void) => void;\n\n renderInner?: (base: () => VNodeChild) => VNodeChild;\n renderOthers?: () => VNodeChild;\n}\n\nexport interface UseLinkButtonBaseReturn {\n // refs(保持旧字段名,且可被 ButtonGroup 直接写)\n btnRef: Ref<HTMLAnchorElement | null>;\n selectedState: Ref<boolean>;\n focused: Ref<boolean>;\n afterClick: Ref<() => void>;\n\n // computed(保持旧命名)\n isEmpty: ComputedRef<boolean>;\n isDisabled: ComputedRef<boolean>;\n btnIconCls: ComputedRef<string>;\n btnLeftCls: ComputedRef<string>;\n innerCls: ComputedRef<string>;\n\n // methods(保持旧命名)\n focus: () => void;\n blur: () => void;\n onClick: (event: Event) => void;\n // 构建代理对象\n buildProxy: (proxy: LinkButtonProxy) => LinkButtonProxy;\n\n // render helpers(供子组件扩展)\n renderInner: () => VNodeChild;\n renderOthers: () => VNodeChild;\n}\n\n/**\n * useLinkButtonBase:替代 `extends: LinkButton` 的组合式实现\n * - refs 模拟旧 data 字段(并保持字段名一致)\n * - overrides 支持“子组件重写父类实现”(computed / onClick / renderInner / renderOthers)\n * - 内置 ButtonGroup 注册逻辑,保证 ButtonGroup 仍可写 selectedState/afterClick\n */\nexport function useLinkButtonBase(\n props: LinkButtonProps,\n ctx: Pick<SetupContext, 'slots' | 'attrs'>,\n overrides: UseLinkButtonBaseOverrides = {}\n): UseLinkButtonBaseReturn {\n const slots: Slots = ctx.slots;\n const attrs: any = ctx.attrs;\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const btnRef = ref<HTMLAnchorElement | null>(null);\n\n const selectedState = ref<boolean>(!!props.selected);\n const focused = ref<boolean>(false);\n const afterClick = ref(() => {});\n\n watch(\n () => props.selected,\n v => {\n selectedState.value = !!v;\n }\n );\n\n const baseIsEmpty = () => !props.text && !slots.default;\n const isEmpty = computed<boolean>(() => {\n return overrides.isEmpty ? overrides.isEmpty(baseIsEmpty) : baseIsEmpty();\n });\n\n const baseIsDisabled = () => !!props.disabled;\n const isDisabled = computed<boolean>(() => {\n return overrides.isDisabled ? overrides.isDisabled(baseIsDisabled) : baseIsDisabled();\n });\n\n const baseBtnIconCls = () => {\n let cls = 'l-btn-icon';\n if (props.iconCls) cls += ' ' + props.iconCls;\n return cls;\n };\n const btnIconCls = computed<string>(() => {\n return overrides.btnIconCls ? overrides.btnIconCls(baseBtnIconCls) : baseBtnIconCls();\n });\n\n const baseBtnLeftCls = () => {\n let cls = 'l-btn-left';\n if (props.iconCls) cls += ' l-btn-icon-' + (props.iconAlign || 'left');\n return cls;\n };\n const btnLeftCls = computed<string>(() => {\n return overrides.btnLeftCls ? overrides.btnLeftCls(baseBtnLeftCls) : baseBtnLeftCls();\n });\n\n const baseInnerCls = () => {\n let cls = 'l-btn f-inline-row f-content-center';\n cls += ' l-btn-' + (props.size || 'small');\n if (props.plain) cls += ' l-btn-plain';\n if (props.outline) cls += ' l-btn-outline';\n\n if (selectedState.value) {\n cls += props.plain ? ' l-btn-selected l-btn-plain-selected' : ' l-btn-selected';\n }\n if (isDisabled.value) {\n cls += props.plain ? ' l-btn-disabled l-btn-plain-disabled' : ' l-btn-disabled';\n }\n if (focused.value) cls += ' l-btn-focus';\n if (props.btnCls) cls += ' ' + props.btnCls;\n\n const attrClass = attrs?.class;\n if (typeof attrClass === 'string' && attrClass) cls += ' ' + attrClass;\n\n return cls;\n };\n const innerCls = computed<string>(() => {\n return overrides.innerCls ? overrides.innerCls(baseInnerCls) : baseInnerCls();\n });\n\n const focus = () => {\n btnRef.value?.focus();\n focused.value = true;\n };\n\n const blur = () => {\n btnRef.value?.blur();\n focused.value = false;\n };\n\n const baseOnClick = (event: Event) => {\n event.stopPropagation();\n if (props.disabled) {\n event.preventDefault();\n return;\n }\n if (!props.href) {\n event.preventDefault();\n }\n if (props.toggle) {\n selectedState.value = !selectedState.value;\n }\n afterClick.value?.();\n };\n\n const onClick = (event: Event) => {\n if (overrides.onClick) return overrides.onClick(event, baseOnClick);\n return baseOnClick(event);\n };\n\n const baseRenderInner = () => {\n let content: any = '';\n if (isEmpty.value) content = '';\n else if (props.text) content = props.text;\n else if (slots.default) content = slots.default();\n\n return h(Fragment, null, [\n h('span', { class: isEmpty.value ? 'l-btn-text l-btn-empty' : 'l-btn-text' }, content),\n h('span', { class: btnIconCls.value })\n ]);\n };\n\n const renderInner = () => {\n return overrides.renderInner ? overrides.renderInner(baseRenderInner) : baseRenderInner();\n };\n\n const renderOthers = () => {\n return overrides.renderOthers ? overrides.renderOthers() : null;\n };\n\n const buildProxy = (proxy: LinkButtonProxy) => {\n return proxy;\n };\n\n // ButtonGroup 兼容:保持原 LinkButton 的注册机制\n onMounted(() => {\n const parent = proxy?.$parent as any;\n if (parent && parent.$options?.name === 'ButtonGroup' && typeof parent.addButton === 'function') {\n const proxyRef = buildProxy({\n uid: inst?.uid || \"\",\n selectedState: selectedState,\n afterClick: afterClick,\n });\n parent.addButton(proxyRef);\n }\n });\n\n onBeforeUnmount(() => {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const parent = proxy?.$parent as any;\n if (parent && parent.$options?.name === 'ButtonGroup' && typeof parent.removeButton === 'function') {\n parent.removeButton(proxy);\n }\n });\n\n return {\n btnRef,\n selectedState,\n focused,\n afterClick,\n isEmpty,\n isDisabled,\n btnIconCls,\n btnLeftCls,\n innerCls,\n focus,\n blur,\n onClick,\n buildProxy,\n renderInner,\n renderOthers\n };\n}\n","// ... existing code ...\nimport { defineComponent } from 'vue';\nimport { linkButtonProps } from './linkButtonProps';\nimport { useLinkButtonBase } from './useLinkButtonBase';\nimport type { LinkButtonProps } from './types';\n\nexport default defineComponent({\n name: 'LinkButton',\n props: linkButtonProps,\n setup(props: LinkButtonProps, { slots, attrs }) {\n const lb = useLinkButtonBase(props, { slots, attrs });\n return () => (\n <a\n ref={lb.btnRef}\n href={(props as any).href || '#'}\n class={lb.innerCls.value}\n style={Object.assign({}, attrs.style, props.btnStyle)}\n onClick={lb.onClick}\n onFocus={lb.focus}\n onBlur={lb.blur}\n >\n <span class={lb.btnLeftCls.value}>{lb.renderInner?.()}</span>\n {lb.renderOthers()}\n </a>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * ButtonGroup 组件\n *\n * 按钮组组件,用于将多个 LinkButton 组合在一起,支持单选或多选模式。\n * 当 selectionMode 为 'single' 时,同一时间只能选中一个按钮;\n * 当 selectionMode 为 'multiple' 时,可以同时选中多个按钮。\n *\n * @component\n */\nimport { defineComponent, PropType, ref, watch } from 'vue';\nimport type { ButtonGroupProps, LinkButtonInstance } from './types';\n\nexport default defineComponent({\n name: 'ButtonGroup',\n props: {\n /**\n * 选择模式\n * - 'multiple': 多选模式,可以同时选中多个按钮\n * - 'single': 单选模式,同一时间只能选中一个按钮\n * @default 'multiple'\n */\n selectionMode: {\n type: String as PropType<ButtonGroupProps['selectionMode']>,\n default: 'multiple'\n }\n },\n\n setup(props, { expose, slots }) {\n /**\n * 按钮实例数组\n * 存储当前 ButtonGroup 中所有的 LinkButton 实例\n */\n const buttons = ref<LinkButtonInstance[]>([]);\n\n /**\n * 初始化按钮\n *\n * 为每个按钮设置 afterClick 回调函数。\n * 当 selectionMode 为 'single' 时,点击某个按钮会自动取消其他按钮的选中状态。\n *\n * @private\n */\n const initButtons = () => {\n buttons.value.forEach(btn => {\n\n btn.afterClick = () => {\n if (props.selectionMode === 'single') {\n // 单选模式:取消其他所有按钮的选中状态\n buttons.value\n .filter(b => b !== btn)\n .forEach(b => {\n b.selectedState = false;\n });\n // 设置当前按钮为选中状态\n btn.selectedState = true;\n }\n };\n });\n };\n\n /**\n * 添加按钮到组中\n *\n * 当子组件 LinkButton 挂载时,会调用此方法将自己注册到 ButtonGroup 中。\n *\n * @param button - 要添加的 LinkButton 实例\n */\n const addButton = (button: LinkButtonInstance): void => {\n buttons.value = [...buttons.value, button];\n };\n\n /**\n * 从组中移除按钮\n *\n * 当子组件 LinkButton 卸载时,会调用此方法将自己从 ButtonGroup 中移除。\n *\n * @param button - 要移除的 LinkButton 实例\n */\n const removeButton = (button: LinkButtonInstance): void => {\n const next = buttons.value.slice();\n const index = next.indexOf(button);\n if (index >= 0) {\n next.splice(index, 1);\n buttons.value = next;\n }\n };\n\n /**\n * 监听 buttons 数组变化,自动初始化新添加的按钮\n *\n * 使用 flush: 'post' 确保在 DOM 更新后执行,保证按钮实例已完全初始化。\n */\n watch(buttons, initButtons, { flush: 'post' });\n\n /**\n * 暴露方法给父组件\n *\n * 通过 expose 暴露 addButton 和 removeButton 方法,\n * 使得父组件可以通过 ref 访问这些方法(虽然通常不需要)。\n */\n expose({ addButton, removeButton });\n\n /**\n * 返回渲染函数\n *\n * 关键:必须返回 addButton 和 removeButton,这样子组件 LinkButton\n * 在挂载/卸载时可以通过 parent.addButton/parent.removeButton 访问到这些方法。\n * 同时返回渲染函数来渲染组件。\n *\n * @see useLinkButtonBase.ts - LinkButton 组件会通过 $parent 访问这些方法\n */\n return () => <span class=\"button-group f-inline-row\">{slots.default?.()}</span>;\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n// ... existing code ...\nimport { defineComponent, PropType, ref } from 'vue';\nimport { linkButtonProps } from '../linkbutton/linkButtonProps';\nimport { useLinkButtonBase } from '../linkbutton/useLinkButtonBase';\nimport type { FileButtonProps } from './types';\n\n(window as any).FileButtonFileId = (window as any).FileButtonFileId || 1;\n\nexport default defineComponent({\n name: 'FileButton',\n setup(props: FileButtonProps, { expose, emit, slots, attrs }) {\n const fileId = ref('_easyui_file_' + (window as any).FileButtonFileId++);\n const files = ref<File[]>([]);\n const fileRef = ref<HTMLInputElement | null>(null);\n\n function onFileSelect(event: Event): void {\n const target = event.target as HTMLInputElement;\n files.value = [];\n if (target.files) {\n for (let i = 0; i < target.files.length; i++) {\n files.value.push(target.files[i]);\n }\n }\n emit('select', files.value);\n if (files.value.length && props.autoUpload) upload();\n }\n\n function upload(): void {\n if (!props.url) return;\n\n const xhr = new XMLHttpRequest();\n const formData = new FormData();\n for (let i = 0; i < files.value.length; i++) {\n const f = files.value[i];\n formData.append(props.name || 'file', f, f.name);\n }\n\n xhr.upload.addEventListener(\n 'progress',\n e => {\n if (e.lengthComputable) {\n const percent = Math.ceil((e.loaded * 100) / e.total);\n emit('progress', percent);\n }\n },\n false\n );\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) emit('success', { xhr, files: files.value });\n else emit('error', { xhr, files: files.value });\n }\n };\n\n xhr.open(props.method || 'POST', props.url || '', true);\n xhr.withCredentials = props.withCredentials || false;\n xhr.send(formData);\n }\n\n function clear(): void {\n if (fileRef.value) fileRef.value.value = '';\n }\n\n const lb = useLinkButtonBase(\n props as any,\n { slots, attrs },\n {\n renderOthers: () => (\n <label class=\"filebox-label\" for={fileId.value}>\n <input\n type=\"file\"\n style=\"position:absolute;left:-500000px\"\n ref={fileRef}\n id={fileId.value}\n disabled={(props as any).disabled}\n multiple={props.multiple}\n accept={props.accept}\n capture={props.capture}\n onChange={onFileSelect}\n />\n </label>\n )\n }\n );\n expose({\n upload,\n clear\n });\n return () => (\n <a\n ref={lb.btnRef}\n href={props.href || '#'}\n class={lb.innerCls.value}\n style={Object.assign({}, attrs.style, props.btnStyle)}\n onClick={lb.onClick}\n onFocus={lb.focus}\n onBlur={lb.blur}\n >\n <span class={lb.btnLeftCls.value}>{lb.renderInner()}</span>\n {lb.renderOthers()}\n </a>\n );\n },\n props: {\n ...linkButtonProps,\n href: { type: String as PropType<FileButtonProps['href']>, default: 'javascript:;' },\n name: { type: String as PropType<FileButtonProps['name']>, default: 'file' },\n accept: String as PropType<FileButtonProps['accept']>,\n capture: String as PropType<FileButtonProps['capture']>,\n multiple: { type: Boolean as PropType<FileButtonProps['multiple']>, default: false },\n url: String as PropType<FileButtonProps['url']>,\n method: { type: String as PropType<FileButtonProps['method']>, default: 'POST' },\n autoUpload: { type: Boolean as PropType<FileButtonProps['autoUpload']>, default: true },\n withCredentials: { type: Boolean as PropType<FileButtonProps['withCredentials']>, default: true }\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, getCurrentInstance } from 'vue';\nimport { linkButtonProps } from '../linkbutton/linkButtonProps';\nimport { useLinkButtonBase } from '../linkbutton/useLinkButtonBase';\nimport type { PaginationButtonProps, PaginationInstance } from './types';\n\nexport default defineComponent({\n name: 'PaginationButton',\n setup(props: PaginationButtonProps, { slots, attrs }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const getParent = () => proxy?.$parent as PaginationInstance | undefined;\n\n const calcIsDisabled = (): boolean => {\n const parent = getParent() as any;\n if (!parent) return false;\n\n if (props.name == 'first' || props.name == 'prev') {\n return !parent.total || parent.pageNumberState == 1;\n } else if (props.name == 'next' || props.name == 'last') {\n return parent.pageNumberState == parent.pageCount;\n } else {\n return (props as any).disabled || false;\n }\n };\n\n const lb = useLinkButtonBase(\n props as any,\n { slots, attrs },\n {\n isDisabled: () => calcIsDisabled(),\n btnIconCls: () => {\n let cls = 'l-btn-icon';\n if (props.name == 'refresh') {\n const parent = getParent() as any;\n if (parent?.loading) cls += ' pagination-loading';\n else cls += ' pagination-load';\n } else {\n cls += ' pagination-' + props.name;\n }\n return cls;\n },\n btnLeftCls: () => {\n const iconAlign = (props as any).iconAlign || 'left';\n return 'l-btn-left l-btn-icon-' + iconAlign;\n },\n onClick: event => {\n event.stopPropagation();\n if (calcIsDisabled()) {\n event.preventDefault();\n return;\n }\n const href = (props as any).href;\n if (!href) event.preventDefault();\n\n const parent = getParent() as any;\n if (!parent) return;\n\n if (props.name == 'first') parent.selectPage(1);\n else if (props.name == 'prev') parent.selectPage(parent.pageNumberState - 1);\n else if (props.name == 'next') parent.selectPage(parent.pageNumberState + 1);\n else if (props.name == 'last') parent.selectPage(parent.pageCount);\n else if (props.name == 'refresh') parent.refreshPage();\n }\n }\n );\n\n return () => (\n <a\n ref={lb.btnRef}\n href={(props as any).href || '#'}\n class={lb.innerCls.value}\n style={Object.assign({}, attrs.style, props.btnStyle)}\n onClick={lb.onClick}\n onFocus={lb.focus}\n onBlur={lb.blur}\n >\n <span class={lb.btnLeftCls.value}>{lb.renderInner()}</span>\n {lb.renderOthers()}\n </a>\n );\n },\n props: {\n ...linkButtonProps,\n plain: { type: Boolean as PropType<PaginationButtonProps['plain']>, default: true }, // 覆盖默认值\n name: String as PropType<PaginationButtonProps['name']>\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, computed, getCurrentInstance } from 'vue';\nimport type { PaginationInstance } from './types';\n\nexport default defineComponent({\n name: 'PaginationList',\n setup() {\n const inst = getCurrentInstance();\n const parent = inst?.parent?.proxy as any as PaginationInstance;\n\n const pageList = computed(() => {\n return parent?.pageList || [];\n });\n\n const pageSize = computed(() => {\n return parent?.pageSizeState || 10;\n });\n\n const onChange = (event: Event): void => {\n const target = event.target as HTMLSelectElement;\n if (parent && target) {\n parent.pageSizeState = parseInt(target.value, 10);\n }\n };\n\n return () => (\n <select class=\"pagination-page-list\" onChange={onChange}>\n {pageList.value.map((page: number, index: number) => (\n <option key={index} selected={page == pageSize.value} value={page}>\n {page}\n </option>\n ))}\n </select>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, computed, getCurrentInstance } from 'vue';\nimport LinkButton from '../linkbutton/LinkButton';\n\nexport default defineComponent({\n name: 'PaginationLink',\n setup() {\n const inst = getCurrentInstance();\n const parent = inst?.parent?.proxy as any;\n\n const pages = computed(() => {\n if (!parent) {\n return [];\n }\n let begin = parent.pageNumberState.value - Math.floor((parent.links || 10) / 2);\n if (begin < 1) {\n begin = 1;\n }\n let end = begin + (parent.links || 10) - 1;\n if (end > parent.pageCount.value) {\n end = parent.pageCount.value;\n }\n begin = end - (parent.links || 10) + 1;\n if (begin < 1) {\n begin = 1;\n }\n const pp: number[] = [];\n for (let i = begin; i <= end; i++) {\n pp.push(i);\n }\n return pp;\n });\n\n const onClick = (page: number): void => {\n if (parent) {\n parent.selectPage(page);\n }\n };\n\n return () => (\n <div class=\"pagination-links f-inline-row\">\n {pages.value.map((page: number, index: number) => (\n <LinkButton\n key={index}\n class=\"pagination-link\"\n selected={page == (parent?.pageNumberState.value || 0)}\n plain={true}\n text={String(page)}\n onClick={() => onClick(page)}\n />\n ))}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, watch, getCurrentInstance } from 'vue';\nimport type { PaginationManualProps, PaginationInstance } from './types';\n\nexport default defineComponent({\n name: 'PaginationManual',\n props: {\n pageNumber: Number as PropType<PaginationManualProps['pageNumber']>\n },\n setup(props: PaginationManualProps, { emit }) {\n const inst = getCurrentInstance();\n const parent = inst?.parent?.proxy as any as PaginationInstance;\n\n const value = ref<number>(props.pageNumber || 1);\n\n watch(\n () => props.pageNumber,\n newValue => {\n value.value = newValue || 1;\n }\n );\n\n const onBlur = (): void => {\n const page = parseInt(String(value.value), 10) || 1;\n value.value = page;\n emit('pageInput', page);\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.keyCode === 13) {\n onBlur();\n }\n };\n\n return () => (\n <span style=\"margin:0 6px\">\n <span>{parent?.beforePageText || 'Page'}</span>\n <input\n class=\"pagination-num\"\n type=\"text\"\n value={value.value}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement;\n value.value = parseInt(target.value, 10) || 1;\n }}\n size=\"2\"\n onBlur={onBlur}\n onKeydown={onKeyDown}\n />\n <span>{parent?.afterPageInfo || ''}</span>\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch, onMounted, getCurrentInstance } from 'vue';\nimport PaginationButton from './PaginationButton';\nimport PaginationList from './PaginationList';\nimport PaginationLink from './PaginationLink';\nimport PaginationManual from './PaginationManual';\nimport type { PaginationProps, PaginationState } from './types';\n\nexport default defineComponent({\n name: 'Pagination',\n props: {\n pageList: {\n type: Array as PropType<PaginationProps['pageList']>,\n default: () => [10, 20, 30, 40, 50]\n },\n loading: {\n type: Boolean as PropType<PaginationProps['loading']>,\n default: false\n },\n showPageList: {\n type: Boolean as PropType<PaginationProps['showPageList']>,\n default: true\n },\n showPageInfo: {\n type: Boolean as PropType<PaginationProps['showPageInfo']>,\n default: true\n },\n showPageRefresh: {\n type: Boolean as PropType<PaginationProps['showPageRefresh']>,\n default: true\n },\n links: {\n type: Number as PropType<PaginationProps['links']>,\n default: 10\n },\n beforePageText: {\n type: String as PropType<PaginationProps['beforePageText']>,\n default: () => {\n const locale = (window as any).Locale;\n return locale?.t('Pagination.beforePageText', 'Page') || 'Page';\n }\n },\n afterPageText: {\n type: String as PropType<PaginationProps['afterPageText']>,\n default: () => {\n const locale = (window as any).Locale;\n return locale?.t('Pagination.afterPageText', 'of {pages}') || 'of {pages}';\n }\n },\n displayMsg: {\n type: String as PropType<PaginationProps['displayMsg']>,\n default: () => {\n const locale = (window as any).Locale;\n return locale?.t('Pagination.displayMsg', 'Displaying {from} to {to} of {total} items') || 'Displaying {from} to {to} of {total} items';\n }\n },\n layout: {\n type: Array as PropType<PaginationProps['layout']>,\n default: () => ['first', 'prev', 'links', 'next', 'last', 'refresh']\n },\n total: {\n type: Number as PropType<PaginationProps['total']>,\n default: 0\n },\n pageSize: {\n type: Number as PropType<PaginationProps['pageSize']>,\n default: 10\n },\n pageNumber: {\n type: Number as PropType<PaginationProps['pageNumber']>,\n default: 1\n }\n },\n setup(props: PaginationProps, { expose, emit, slots }) {\n const inst = getCurrentInstance();\n const pageNumberState = ref<number>(props.pageNumber || 1);\n const pageSizeState = ref<number>(props.pageSize || 10);\n const lastState = ref<PaginationState | null>(null);\n const pagination = computed(() => inst?.proxy);\n\n const pageInfo = computed(() => {\n let info = props.displayMsg || '';\n const from = props.total == 0 ? 0 : pageSizeState.value * (pageNumberState.value - 1) + 1;\n const to = Math.min(pageSizeState.value * pageNumberState.value, props.total as number);\n info = info.replace(/{from}/, String(from));\n info = info.replace(/{to}/, String(to));\n info = info.replace(/{total}/, String(props.total));\n return info;\n });\n\n const pageCount = computed(() => {\n return !props.total ? 0 : Math.ceil(props.total / pageSizeState.value) || 1;\n });\n\n // const afterPageInfo = computed(() => {\n // let info = props.afterPageText || '';\n // info = info.replace(/{pages}/, String(pageCount.value));\n // return info;\n // });\n\n const _isButton = (name: string): boolean => {\n const buttons = ['first', 'prev', 'next', 'last', 'refresh'];\n return buttons.indexOf(name) >= 0;\n };\n\n const _adjustPage = (): void => {\n if (pageNumberState.value < 1) {\n pageNumberState.value = 1;\n }\n if (pageNumberState.value > pageCount.value) {\n pageNumberState.value = pageCount.value;\n }\n if (props.total == 0) {\n pageNumberState.value = 0;\n if (lastState.value) {\n lastState.value.pageNumber = 1;\n }\n }\n if (lastState.value) {\n const state: PaginationState = { pageNumber: pageNumberState.value || 1, pageSize: pageSizeState.value };\n if (state.pageNumber != lastState.value.pageNumber || state.pageSize != lastState.value.pageSize) {\n lastState.value = state;\n emit('pageChange', lastState.value);\n }\n }\n };\n\n const selectPage = (page: number): void => {\n pageNumberState.value = page;\n _adjustPage();\n };\n\n const refreshPage = (): void => {\n const state: PaginationState = Object.assign({ refresh: true }, lastState.value);\n if (state.pageNumber <= 0) {\n state.pageNumber = 1;\n }\n emit('pageChange', state);\n };\n\n const first = (): void => {\n selectPage(1);\n };\n\n const prev = (): void => {\n selectPage(pageNumberState.value - 1);\n };\n\n const next = (): void => {\n selectPage(pageNumberState.value + 1);\n };\n\n const last = (): void => {\n selectPage(pageCount.value);\n };\n\n const refresh = (): void => {\n refreshPage();\n };\n\n const select = (page: number): void => {\n selectPage(page);\n };\n\n const initProxy = (): void => {\n const proxy = inst?.proxy as any;\n proxy.pageNumberState = pageNumberState;\n proxy.pageCount = pageCount;\n proxy.selectPage = selectPage;\n };\n\n initProxy();\n\n watch(\n () => props.pageNumber,\n (value?: number) => {\n pageNumberState.value = value || 1;\n }\n );\n\n watch(\n () => props.pageSize,\n (value?: number) => {\n pageSizeState.value = value || 10;\n }\n );\n\n watch(pageNumberState, () => {\n _adjustPage();\n });\n\n watch(pageSizeState, () => {\n _adjustPage();\n });\n\n watch(\n () => props.total,\n () => {\n _adjustPage();\n }\n );\n\n onMounted(() => {\n _adjustPage();\n lastState.value = {\n pageNumber: pageNumberState.value,\n pageSize: pageSizeState.value\n };\n });\n expose({\n first,\n prev,\n next,\n last,\n refresh,\n select,\n selectPage,\n refreshPage,\n pageNumberState,\n pageSizeState,\n pageCount,\n links: props.links,\n pageList: props.pageList,\n loading: props.loading,\n total: props.total,\n beforePageText: props.beforePageText\n });\n\n return () => (\n <div class=\"pagination f-row f-content-center\">\n {props.layout?.map((name: string) => (\n <>\n {name == 'list' && <PaginationList></PaginationList>}\n {name == 'links' && <PaginationLink></PaginationLink>}\n {name == 'manual' && (\n <PaginationManual\n pageNumber={pageNumberState.value}\n onPageInput={(page: number) => {\n pageNumberState.value = page;\n }}\n ></PaginationManual>\n )}\n {_isButton(name) && <PaginationButton name={name as any}></PaginationButton>}\n {name == 'sep' && <div class=\"pagination-btn-separator\"></div>}\n {name == 'info' && (\n <div class=\"f-full\">\n <div class=\"pagination-info\">{pageInfo.value}</div>\n </div>\n )}\n {name == 'tpl' && slots.default && slots.default(pagination.value)}\n </>\n ))}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch, onMounted, nextTick } from 'vue';\nimport domHelper from './DomHelper';\nimport type { VirtualScrollProps, ScrollState, VirtualScrollPageChange, VirtualScrollBodyScroll } from './types';\n\nexport default defineComponent({\n name: 'VirtualScroll',\n props: {\n lazy: {\n type: Boolean as PropType<VirtualScrollProps['lazy']>,\n default: false\n },\n rowHeight: {\n type: Number as PropType<VirtualScrollProps['rowHeight']>,\n default: 32\n },\n maxDivHeight: {\n type: Number as PropType<VirtualScrollProps['maxDivHeight']>,\n default: 10000000\n },\n maxVisibleHeight: {\n type: Number as PropType<VirtualScrollProps['maxVisibleHeight']>,\n default: 15000000\n },\n pageNumber: {\n type: Number as PropType<VirtualScrollProps['pageNumber']>,\n default: 1\n },\n pageSize: {\n type: Number as PropType<VirtualScrollProps['pageSize']>,\n default: 10\n },\n total: {\n type: Number as PropType<VirtualScrollProps['total']>,\n default: 0\n },\n data: {\n type: Array as PropType<VirtualScrollProps['data']>,\n default: () => []\n },\n scrollPosition: Object as PropType<VirtualScrollProps['scrollPosition']>\n } satisfies Record<keyof VirtualScrollProps, any>,\n emits: ['update', 'bodyScroll', 'pageChange'],\n setup(props: VirtualScrollProps, { expose, emit, slots }) {\n const innerData = ref<any[]>([]);\n const items = ref<any[]>([]);\n const waitingPage = ref<number>(1);\n const fetchingPage = ref<number>(0);\n const startIndex = ref<number>(0);\n const deltaTopHeight = ref<number>(0);\n const topHeights = ref<number[]>([]);\n const bottomHeights = ref<number[]>([]);\n const totalState = ref<number | undefined>(props.total);\n const pageNumberState = ref<number | undefined>(props.pageNumber);\n const isUpdating = ref<boolean>(false);\n const isNewFetching = ref<boolean>(false);\n const scrollPositionState = ref<ScrollState | null>(props.scrollPosition as ScrollState | null);\n\n const bodyRef = ref<HTMLElement | null>(null);\n const contentRef = ref<HTMLElement | null>(null);\n const topRef = ref<HTMLElement | null>(null);\n const bottomRef = ref<HTMLElement | null>(null);\n\n const getTotalState = computed(() => {\n if (totalState.value !== undefined) {\n return totalState.value;\n }\n return props.total || 0;\n });\n\n const getPageNumberState = computed(() => {\n if (pageNumberState.value !== undefined) {\n return pageNumberState.value;\n }\n return props.pageNumber || 1;\n });\n\n const rowHeightState = computed(() => {\n return props.rowHeight || 0;\n });\n\n const pageSizeState = computed(() => {\n return props.pageSize || 10;\n });\n\n const maxVisibleHeightState = computed(() => {\n return props.maxVisibleHeight || 15000000;\n });\n\n const maxDivHeightState = computed(() => {\n return props.maxDivHeight || 10000000;\n });\n\n watch(\n () => props.total,\n (value?: number) => {\n totalState.value = value;\n }\n );\n\n watch(\n () => props.pageNumber,\n (value?: number) => {\n pageNumberState.value = value;\n }\n );\n\n watch(\n () => props.data,\n (value?: any[]) => {\n value = value || [];\n if (!value.length) {\n if (!getTotalState.value) {\n clear();\n return;\n }\n }\n if (scrollPositionState.value) {\n if (props.scrollPosition) {\n (props.scrollPosition as any).innerData = value;\n }\n return;\n }\n nextTick(() => {\n setData(value);\n setTimeout(() => {\n scrolling();\n }, 20);\n });\n }, {\n deep: true\n }\n );\n\n const scrollTop = (value?: number): number | void => {\n if (!bodyRef.value) {\n return 0;\n }\n if (value != undefined) {\n bodyRef.value.scrollTop = value;\n } else {\n return bodyRef.value.scrollTop;\n }\n };\n\n const relativeScrollTop = (): number => {\n if (!bodyRef.value) {\n return 0;\n }\n const rowHeight = props.rowHeight || 0;\n return bodyRef.value.scrollTop - startIndex.value * rowHeight + deltaTopHeight.value;\n };\n\n // const scrollbarWidth = (): number => {\n // if (!bodyRef.value || !contentRef.value) {\n // return 0;\n // }\n // return domHelper.outerWidth(bodyRef.value) - domHelper.outerWidth(contentRef.value);\n // };\n\n const scrollState = (value?: ScrollState | null): ScrollState | void => {\n if (value != undefined && value != null) {\n topHeights.value = value.topHeights || [];\n bottomHeights.value = value.bottomHeights || [];\n deltaTopHeight.value = value.deltaTopHeight || 0;\n startIndex.value = value.startIndex || 0;\n innerData.value = value.innerData || [];\n items.value = value.items || [];\n emit('update', items.value);\n nextTick(() => {\n scrollTop(value.scrollTop);\n refresh();\n scrolling();\n });\n } else {\n return {\n topHeights: Object.assign([], topHeights.value),\n bottomHeights: Object.assign([], bottomHeights.value),\n deltaTopHeight: deltaTopHeight.value,\n startIndex: startIndex.value,\n scrollTop: scrollTop() as number,\n items: Object.assign([], items.value),\n innerData: Object.assign([], innerData.value)\n };\n }\n };\n\n const clear = (): void => {\n topHeights.value = [];\n bottomHeights.value = [];\n deltaTopHeight.value = 0;\n startIndex.value = 0;\n scrollTop(0);\n items.value = [];\n innerData.value = [];\n populate();\n };\n\n const onScroll = (event: Event): void => {\n event.stopPropagation();\n if (!isUpdating.value) {\n scrolling();\n }\n if (!bodyRef.value) {\n return;\n }\n emit('bodyScroll', {\n left: bodyRef.value.scrollLeft,\n top: scrollTop() as number,\n relativeTop: relativeScrollTop(),\n items: items.value\n } as VirtualScrollBodyScroll);\n };\n\n const setData = (value?: any[] | null): void => {\n if (value == null) {\n value = [];\n }\n innerData.value = Object.assign([], value);\n fetchingPage.value = 0;\n if (props.lazy) {\n if (innerData.value.length) {\n waitingPage.value = getPageNumberState.value;\n loadPage(innerData.value);\n } else {\n if (getTotalState.value > 0) {\n fetchPage(waitingPage.value);\n } else {\n loadPage(innerData.value);\n }\n }\n } else {\n totalState.value = innerData.value.length;\n pageNumberState.value = 1;\n waitingPage.value = 1;\n startIndex.value = 0;\n loadPage(innerData.value);\n }\n };\n\n const scrolling = (): void => {\n isNewFetching.value = false;\n if (!bodyRef.value || !contentRef.value) {\n return;\n }\n const bodyHeight = domHelper.outerHeight(bodyRef.value);\n const bodyOffset = domHelper.offset(bodyRef.value);\n const contentOffset = domHelper.offset(contentRef.value);\n const top = contentOffset.top - bodyOffset.top;\n const bottom = top + domHelper.outerHeight(contentRef.value);\n\n if (top > bodyHeight || bottom < 0) {\n const scrollTopValue = bodyRef.value.scrollTop;\n const index = Math.floor((scrollTopValue + deltaTopHeight.value) / rowHeightState.value);\n const page = Math.floor(index / pageSizeState.value) + 1;\n if (page > 0) {\n isNewFetching.value = true;\n startIndex.value = (page - 1) * pageSizeState.value;\n waitingPage.value = page;\n items.value = [];\n fetchPage(waitingPage.value);\n }\n } else if (top > 0) {\n if (startIndex.value == 0) {\n return;\n }\n const page = Math.floor(startIndex.value / pageSizeState.value) + 1;\n waitingPage.value = page - 1;\n fetchPage(waitingPage.value);\n } else if (bottom < bodyHeight) {\n if (startIndex.value + items.value.length >= getTotalState.value) {\n return;\n }\n const page = Math.floor(startIndex.value / pageSizeState.value) + 1;\n if (items.value.length >= pageSizeState.value * 2) {\n waitingPage.value = page + 2;\n } else {\n waitingPage.value = page + 1;\n }\n fetchPage(waitingPage.value);\n }\n };\n\n const populate = (): void => {\n if (!bodyRef.value) {\n return;\n }\n isUpdating.value = true;\n\n const bodyHeight = domHelper.outerHeight(bodyRef.value);\n const topHeight = startIndex.value * rowHeightState.value;\n const bottomHeight = getTotalState.value * rowHeightState.value - topHeight - items.value.length * rowHeightState.value;\n topHeights.value = splitHeights(topHeight);\n bottomHeights.value = splitHeights(bottomHeight);\n const spos = bodyRef.value.scrollTop + deltaTopHeight.value;\n if (topHeight > maxVisibleHeightState.value) {\n deltaTopHeight.value = topHeight - maxVisibleHeightState.value;\n topHeights.value = splitHeights(maxVisibleHeightState.value);\n } else {\n deltaTopHeight.value = 0;\n }\n if (bottomHeight > maxVisibleHeightState.value) {\n bottomHeights.value = splitHeights(maxVisibleHeightState.value);\n } else if (bottomHeight == 0) {\n const lastCount = getTotalState.value % pageSizeState.value;\n if (lastCount) {\n bottomHeights.value = splitHeights(bodyHeight - lastCount * rowHeightState.value);\n }\n }\n bodyRef.value.scrollTop = spos - deltaTopHeight.value;\n emit('update', items.value);\n nextTick(() => {\n if (bodyRef.value) {\n bodyRef.value.scrollTop = spos - deltaTopHeight.value;\n if (isNewFetching.value) {\n scrolling();\n }\n isUpdating.value = false;\n }\n });\n };\n\n const splitHeights = (height: number): number[] => {\n const count = Math.floor(height / maxDivHeightState.value);\n let leftHeight = height - maxDivHeightState.value * count;\n if (height < 0) {\n leftHeight = 0;\n }\n const heights: number[] = [];\n for (let i = 0; i < count; i++) {\n heights.push(maxDivHeightState.value);\n }\n heights.push(leftHeight);\n return heights;\n };\n\n const loadPage = (itemsData: any[]): void => {\n if (pageNumberState.value != waitingPage.value) {\n return;\n }\n itemsData = itemsData.slice(0, props.pageSize);\n const page = Math.floor(startIndex.value / pageSizeState.value) + 1;\n if (page == waitingPage.value) {\n items.value = itemsData;\n populate();\n } else if (waitingPage.value == page + 1) {\n items.value = items.value.slice(0, pageSizeState.value).concat(itemsData);\n populate();\n } else if (waitingPage.value == page + 2) {\n startIndex.value += pageSizeState.value;\n items.value = items.value.slice(pageSizeState.value, pageSizeState.value * 2).concat(itemsData);\n populate();\n } else if (waitingPage.value == page - 1) {\n startIndex.value -= pageSizeState.value;\n items.value = itemsData.concat(items.value.slice(0, pageSizeState.value));\n populate();\n } else {\n startIndex.value = (getPageNumberState.value - 1) * pageSizeState.value;\n items.value = itemsData;\n populate();\n }\n };\n\n const fetchPage = (page: number): void => {\n if (fetchingPage.value != page) {\n fetchingPage.value = page;\n if (!props.lazy) {\n const start = (page - 1) * pageSizeState.value;\n const itemsData = innerData.value.slice(start, start + pageSizeState.value);\n pageNumberState.value = page;\n loadPage(itemsData);\n }\n emit('pageChange', {\n pageNumber: page,\n pageSize: pageSizeState.value\n } as VirtualScrollPageChange);\n }\n };\n\n // const gotoPage = (page: number): void => {\n // startIndex.value = (page - 1) * pageSizeState.value;\n // waitingPage.value = page;\n // populate();\n // nextTick(() => {\n // if (bodyRef.value) {\n // bodyRef.value.scrollTop = startIndex.value * rowHeightState.value - deltaTopHeight.value;\n // fetchPage(page);\n // }\n // });\n // };\n\n const refresh = (): void => {\n const page = Math.floor(startIndex.value / pageSizeState.value) + 1;\n waitingPage.value = page;\n fetchingPage.value = 0;\n fetchPage(page);\n };\n\n onMounted(() => {\n nextTick(() => {\n if (scrollPositionState.value) {\n scrollState(scrollPositionState.value);\n scrollPositionState.value = null;\n } else {\n setData(props.data);\n isNewFetching.value = true;\n }\n });\n });\n\n expose({\n setData,\n clear,\n scrollState,\n scrollTop,\n scrolling\n });\n\n return () => (\n <div class=\"f-column panel-noscroll\">\n <div ref={bodyRef} class=\"scroll-body f-column f-full\" onScroll={onScroll}>\n <div ref={topRef} class=\"scroll-top f-noshrink\">\n {topHeights.value.map((h, index) => (\n <div key={index} style={{ height: h + 'px' }}></div>\n ))}\n </div>\n <div ref={contentRef} class=\"scroll-content f-noshrink\">\n {slots.default?.()}\n </div>\n <div ref={bottomRef} class=\"scroll-bottom f-noshrink\">\n {bottomHeights.value.map((h, index) => (\n <div key={index} style={{ height: h + 'px' }}></div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n});\n","import { computed, ComputedRef, nextTick, onMounted, Ref, ref, watch, type SetupContext } from 'vue';\nimport type { FilterRule, HighlightCell, ListBaseProps, PageState, SelectedCell } from './types';\n\n/**\n * 默认过滤操作符\n */\nexport const DEFAULT_FILTER_OPERATORS = {\n eq: {\n label: '等于',\n isMatch: (source: any, value: any) => source == value\n },\n ne: {\n label: '不等于',\n isMatch: (source: any, value: any) => source != value\n }\n};\n\nexport interface UseListBaseOverrides {\n setData?: (value?: any[]) => void;\n sortData?: () => void;\n setGroupData?: () => void;\n afterSelectionChange?: (...args: any[]) => void;\n}\n\nexport interface UseListBaseReturn {\n // computed (keep same name as legacy)\n selectionValue: ComputedRef<any | any[] | null>;\n\n // states (names align with legacy data fields)\n totalState: Ref<number>;\n pageNumberState: Ref<number>;\n pageSizeState: Ref<number>;\n pageState: Ref<PageState | null>;\n highlightRow: Ref<any | null>;\n highlightCell: Ref<HighlightCell | null>;\n selectionModeState: Ref<string | undefined>;\n selectedRows: Ref<any[]>;\n selectedCells: Ref<SelectedCell[]>;\n rows: Ref<any[]>;\n innerData: Ref<any[]>;\n filteredData: Ref<any[]>;\n filterRules: Ref<FilterRule[]>;\n\n // methods\n setData: (value?: any[]) => void;\n setSelectionValue: (value?: any | any[] | null) => void;\n filterData: (data: any[]) => any[];\n doFilter: (rule?: FilterRule | null) => void;\n doEnter: () => void;\n getSelectedIndex: (row: any) => number;\n getSelectedCellIndex: (row: any, column: any) => number;\n isCellSelectionMode: () => boolean;\n isHighlighted: (row: any, column?: any) => boolean;\n isSelected: (row: any, column?: any) => boolean;\n selectRow: (row: any) => void;\n unselectRow: (row: any) => void;\n selectCell: (row: any, column: any) => void;\n unselectCell: (row: any, column: any) => void;\n clearSelections: () => void;\n navRow: (step: number) => void;\n getFilterRuleIndex: (field: string) => number;\n getFilterRule: (field: string) => FilterRule | null;\n addFilterRule: (rule: FilterRule) => void;\n removeFilterRule: (field: string) => void;\n setPageData: () => void;\n onPageChange: (event: PageState) => void;\n onVirtualPageChange: (event: PageState) => void;\n onRowClick: (row: any) => void;\n onCellClick: (row: any, column: any) => void;\n updateAfterSelectionChange: (...args: any[]) => void;\n}\n\n/**\n * useListBase:替代 `extends: ListBase` 的组合式实现\n *\n * - 通过 refs 模拟旧的 data 字段(并保持字段名一致,确保 `this.xxx` 还能工作)\n * - 通过 overrides 支持 “子组件重写父类方法”(主要是 `sortData` / `setGroupData` / `afterSelectionChange`)\n */\nexport function useListBase(\n props: ListBaseProps,\n ctx: Pick<SetupContext, 'emit'>,\n overrides: UseListBaseOverrides = {}\n): UseListBaseReturn {\n const emit = ctx.emit;\n const overrideFuncs = overrides;\n\n const totalState = ref<number>(props.total || 0);\n const pageNumberState = ref<number>(props.pageNumber || 1);\n const pageSizeState = ref<number>(props.pageSize || 10);\n const pageState = ref<PageState | null>(null);\n\n const highlightRow = ref<any | null>(null);\n const highlightCell = ref<HighlightCell | null>(null);\n const selectionModeState = ref<string | undefined>(props.selectionMode);\n const selectedRows = ref<any[]>([]);\n const selectedCells = ref<SelectedCell[]>([]);\n\n const rows = ref<any[]>([]);\n const innerData = ref<any[]>([]);\n const filteredData = ref<any[]>([]);\n\n const filterRules = ref<FilterRule[]>((props.filterRules ? (props.filterRules as any) : []) as FilterRule[]);\n\n const selectionValue = computed<any | any[] | null>(() => {\n if (selectionModeState.value == 'single') {\n return selectedRows.value[0] || null;\n } else if (selectionModeState.value == 'multiple') {\n return selectedRows.value;\n } else if (selectionModeState.value == 'cell') {\n return selectedCells.value[0] || null;\n } else if (selectionModeState.value == 'multicell') {\n return selectedCells.value;\n } else {\n return null;\n }\n });\n\n const callAfterSelectionChange = (...args: any[]) => {\n overrideFuncs.afterSelectionChange?.(...args);\n };\n const callSortData = () => {\n overrideFuncs.sortData?.();\n };\n const callSetGroupData = () => {\n overrideFuncs.setGroupData?.();\n };\n\n function setPageData(): void {\n const start = (pageNumberState.value - 1) * pageSizeState.value;\n rows.value = filteredData.value.slice(start, start + +pageSizeState.value);\n }\n\n function filterData(data: any[]): any[] {\n const isMatch = (row: any): boolean => {\n const rules = filterRules.value || [];\n if (!rules.length) return true;\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n let source = row[rule.field];\n if (source == null) source = '';\n const operators = props.filterOperators || DEFAULT_FILTER_OPERATORS;\n const op = (operators as any)[rule.op];\n if (!op) continue;\n const matched = op.isMatch(source, rule.value);\n if (props.filterMatchingType == 'any') {\n if (matched) return true;\n } else {\n if (!matched) return false;\n }\n }\n return props.filterMatchingType == 'all';\n };\n return data.filter(row => isMatch(row));\n }\n\n function setData(value?: any[]): void {\n const v = value == null ? [] : value;\n innerData.value = Object.assign([], v);\n if (!props.lazy) {\n callSortData();\n filteredData.value = filterData(innerData.value);\n } else {\n filteredData.value = innerData.value;\n }\n callSetGroupData();\n if (props.pagination) {\n if (props.lazy) {\n if (filteredData.value.length) {\n rows.value = filteredData.value.slice(0, pageSizeState.value);\n } else {\n if (totalState.value) {\n emit('pageChange', {\n pageNumber: pageNumberState.value,\n pageSize: pageSizeState.value\n });\n } else {\n rows.value = [];\n }\n }\n } else {\n totalState.value = filteredData.value.length;\n setPageData();\n }\n } else {\n rows.value = filteredData.value;\n }\n }\n\n function setSelectionValue(value?: any | any[] | null): void {\n if (value == null) {\n selectedRows.value = [];\n selectedCells.value = [];\n return;\n }\n if (selectionModeState.value == 'single') {\n selectedRows.value = [value];\n } else if (selectionModeState.value == 'multiple') {\n selectedRows.value = Array.isArray(value) ? value : [value];\n } else if (selectionModeState.value == 'cell') {\n selectedCells.value = [value];\n } else if (selectionModeState.value == 'multicell') {\n selectedCells.value = Array.isArray(value) ? value : [value];\n }\n }\n\n function doFilter(rule?: FilterRule | null): void {\n if (rule) {\n if (rule.value == null || rule.value == '') {\n removeFilterRule(rule.field);\n } else {\n addFilterRule(rule);\n }\n }\n setData(innerData.value);\n emit('filterChange', filterRules.value);\n }\n\n function isCellSelectionMode(): boolean {\n return selectionModeState.value == 'cell' || selectionModeState.value == 'multicell';\n }\n\n function getSelectedIndex(row: any): number {\n if (props.idField) {\n for (let i = 0; i < selectedRows.value.length; i++) {\n if (selectedRows.value[i][props.idField] == row[props.idField]) {\n selectedRows.value[i] = row;\n return i;\n }\n }\n return -1;\n }\n return selectedRows.value.indexOf(row);\n }\n\n function getSelectedCellIndex(row: any, column: any): number {\n for (let i = 0; i < selectedCells.value.length; i++) {\n const cell = selectedCells.value[i];\n if (cell.column == column) {\n if (props.idField) {\n if ((cell.row as any)[props.idField] == (row as any)[props.idField]) {\n return i;\n }\n } else if (cell.row == row) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function isHighlighted(row: any, column: any = null): boolean {\n if (isCellSelectionMode()) {\n if (highlightCell.value && highlightCell.value.row == row && highlightCell.value.column == column) {\n return true;\n }\n } else if (highlightRow.value == row) {\n return true;\n }\n return false;\n }\n\n function isSelected(row: any, column: any = null): boolean {\n if (isCellSelectionMode()) {\n return getSelectedCellIndex(row, column) != -1;\n }\n return getSelectedIndex(row) != -1;\n }\n\n function selectRow(row: any): void {\n if (isCellSelectionMode()) return;\n if (!isSelected(row)) {\n if (selectionModeState.value == 'single') {\n if (selectionValue.value) {\n emit('rowUnselect', selectionValue.value);\n }\n selectedRows.value = [row];\n } else if (selectionModeState.value == 'multiple') {\n selectedRows.value.push(row);\n }\n emit('rowSelect', row);\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange(row);\n }\n }\n\n function unselectRow(row: any): void {\n if (isCellSelectionMode()) return;\n const index = getSelectedIndex(row);\n if (index >= 0) {\n selectedRows.value.splice(index, 1);\n emit('rowUnselect', row);\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange(row);\n }\n }\n\n function selectCell(row: any, column: any): void {\n if (!isCellSelectionMode()) return;\n if (!isSelected(row, column)) {\n if (selectionModeState.value == 'cell') {\n if (selectionValue.value) {\n emit('cellUnselect', selectionValue.value);\n }\n selectedCells.value = [{ row, column }];\n } else if (selectionModeState.value == 'multicell') {\n selectedCells.value.push({ row, column });\n }\n emit('cellSelect', { row, column });\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange(row);\n }\n }\n\n function unselectCell(row: any, column: any): void {\n if (!isCellSelectionMode()) return;\n const index = getSelectedCellIndex(row, column);\n if (index >= 0) {\n selectedCells.value.splice(index, 1);\n emit('cellUnselect', { row, column });\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange(row);\n }\n }\n\n function clearSelections(): void {\n if (isCellSelectionMode()) {\n if (selectedCells.value.length) {\n selectedCells.value = [];\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange();\n }\n } else {\n if (selectedRows.value.length) {\n selectedRows.value = [];\n emit('selectionChange', selectionValue.value);\n callAfterSelectionChange();\n }\n }\n }\n\n function navRow(step: number): void {\n if (!rows.value.length) return;\n let index = rows.value.indexOf(highlightRow.value);\n if (index == -1) {\n index = 0;\n } else {\n index += step;\n if (index >= rows.value.length) index = rows.value.length - 1;\n else if (index < 0) index = 0;\n }\n highlightRow.value = rows.value[index];\n }\n\n function getFilterRuleIndex(field: string): number {\n const rules = filterRules.value || [];\n for (let i = 0; i < rules.length; i++) {\n if (rules[i].field == field) return i;\n }\n return -1;\n }\n\n function getFilterRule(field: string): FilterRule | null {\n const index = getFilterRuleIndex(field);\n if (index != -1) return filterRules.value[index];\n return null;\n }\n\n function addFilterRule(rule: FilterRule): void {\n if (!filterRules.value) filterRules.value = [];\n const index = getFilterRuleIndex(rule.field);\n if (index != -1) {\n Object.assign(filterRules.value[index], rule);\n } else {\n filterRules.value.push(rule);\n }\n }\n\n function removeFilterRule(field: string): void {\n if (!filterRules.value) return;\n const index = getFilterRuleIndex(field);\n if (index != -1) {\n filterRules.value.splice(index, 1);\n }\n }\n\n function onPageChange(event: PageState): void {\n if (pageState.value != null && !event.refresh) {\n if (pageState.value.pageNumber == event.pageNumber && pageState.value.pageSize == event.pageSize) {\n return;\n }\n }\n pageState.value = event;\n pageNumberState.value = event.pageNumber;\n pageSizeState.value = event.pageSize;\n if (!props.lazy) {\n setPageData();\n }\n emit('pageChange', Object.assign(event, { filterRules: filterRules.value }));\n }\n\n function onVirtualPageChange(event: PageState): void {\n pageNumberState.value = event.pageNumber;\n pageSizeState.value = event.pageSize;\n emit('pageChange', Object.assign(event, { filterRules: filterRules.value }));\n }\n\n function onRowClick(row: any): void {\n emit('rowClick', row);\n if (selectionModeState.value == 'single') {\n selectRow(row);\n } else if (selectionModeState.value == 'multiple') {\n if (isSelected(row)) unselectRow(row);\n else selectRow(row);\n }\n }\n\n function onCellClick(row: any, column: any): void {\n emit('cellClick', { row, column });\n if (selectionModeState.value == 'cell') {\n selectCell(row, column);\n } else if (selectionModeState.value == 'multicell') {\n if (isSelected(row, column)) unselectCell(row, column);\n else selectCell(row, column);\n }\n }\n\n function doEnter(): void {\n if (isCellSelectionMode()) {\n if (highlightCell.value) {\n if (selectionModeState.value == 'cell') {\n selectCell(highlightCell.value.row, highlightCell.value.column);\n } else if (selectionModeState.value == 'multicell') {\n if (isSelected(highlightCell.value.row, highlightCell.value.column)) {\n unselectCell(highlightCell.value.row, highlightCell.value.column);\n } else {\n selectCell(highlightCell.value.row, highlightCell.value.column);\n }\n }\n }\n } else {\n if (highlightRow.value) {\n if (selectionModeState.value == 'single') {\n selectRow(highlightRow.value);\n } else if (selectionModeState.value == 'multiple') {\n if (isSelected(highlightRow.value)) {\n unselectRow(highlightRow.value);\n } else {\n selectRow(highlightRow.value);\n }\n }\n }\n }\n }\n function updateAfterSelectionChange(func: (...args: any[]) => void): void {\n overrideFuncs.afterSelectionChange = func;\n }\n\n watch(\n () => props.total,\n v => {\n totalState.value = v || 0;\n }\n );\n watch(\n () => props.pageNumber,\n v => {\n pageNumberState.value = v || 1;\n }\n );\n watch(\n () => props.pageSize,\n v => {\n pageSizeState.value = v || 10;\n }\n );\n watch(\n () => props.data,\n v => {\n nextTick(() => setData(v as any[]));\n }\n );\n watch(\n () => props.selection,\n v => {\n setSelectionValue(v as any);\n }\n );\n watch(\n () => props.selectionMode,\n v => {\n selectionModeState.value = v;\n }\n );\n watch(\n () => props.filterRules,\n v => {\n // 允许外部替换 filterRules\n filterRules.value = (v ? (v as any) : []) as FilterRule[];\n }\n );\n\n onMounted(() => {\n setData(props.data as any[]);\n setSelectionValue(props.selection as any);\n });\n\n return {\n selectionValue,\n totalState,\n pageNumberState,\n pageSizeState,\n pageState,\n highlightRow,\n highlightCell,\n selectionModeState,\n selectedRows,\n selectedCells,\n rows,\n innerData,\n filteredData,\n filterRules,\n setData,\n setSelectionValue,\n filterData,\n doFilter,\n doEnter,\n getSelectedIndex,\n getSelectedCellIndex,\n isCellSelectionMode,\n isHighlighted,\n isSelected,\n selectRow,\n unselectRow,\n selectCell,\n unselectCell,\n clearSelections,\n navRow,\n getFilterRuleIndex,\n getFilterRule,\n addFilterRule,\n removeFilterRule,\n setPageData,\n onPageChange,\n onVirtualPageChange,\n onRowClick,\n onCellClick,\n updateAfterSelectionChange: updateAfterSelectionChange\n };\n}\n\n","import type { PropType } from 'vue';\nimport type { ListBaseProps } from './types';\nimport { DEFAULT_FILTER_OPERATORS } from './useListBase';\n\n/**\n * ListBase 的运行时 props 定义(用于“组合”替代 extends 时复用)\n * 注意:这里与 `ListBase.tsx` 的 props 保持一致。\n */\nexport const listBaseProps = {\n border: {\n type: Boolean as PropType<ListBaseProps['border']>,\n default: true\n },\n loading: {\n type: Boolean as PropType<ListBaseProps['loading']>,\n default: false\n },\n loadMsg: {\n type: String as PropType<ListBaseProps['loadMsg']>,\n default: () => {\n const locale = (window as any).Locale;\n return locale?.t('ListBase.loadMsg', 'Processing, please wait ...') || 'Processing, please wait ...';\n }\n },\n emptyMsg: String as PropType<ListBaseProps['emptyMsg']>,\n pagination: {\n type: Boolean as PropType<ListBaseProps['pagination']>,\n default: false\n },\n pagePosition: {\n type: String as PropType<ListBaseProps['pagePosition']>,\n default: 'bottom'\n },\n pageOptions: Object as PropType<ListBaseProps['pageOptions']>,\n lazy: {\n type: Boolean as PropType<ListBaseProps['lazy']>,\n default: false\n },\n virtualScroll: {\n type: Boolean as PropType<ListBaseProps['virtualScroll']>,\n default: false\n },\n rowHeight: {\n type: Number as PropType<ListBaseProps['rowHeight']>,\n default: 32\n },\n pageNumber: {\n type: Number as PropType<ListBaseProps['pageNumber']>,\n default: 1\n },\n pageSize: {\n type: Number as PropType<ListBaseProps['pageSize']>,\n default: 10\n },\n pageLayout: {\n type: Array as PropType<ListBaseProps['pageLayout']>,\n default: () => ['first', 'prev', 'links', 'next', 'last', 'refresh']\n },\n pageList: {\n type: Array as PropType<ListBaseProps['pageList']>,\n default: () => [10, 20, 30, 40, 50]\n },\n pageLinks: {\n type: Number as PropType<ListBaseProps['pageLinks']>,\n default: 10\n },\n total: {\n type: Number as PropType<ListBaseProps['total']>,\n default: 0\n },\n idField: String as PropType<ListBaseProps['idField']>,\n selectionMode: String as PropType<ListBaseProps['selectionMode']>,\n selection: [Object, Array] as PropType<ListBaseProps['selection']>,\n filterable: {\n type: Boolean as PropType<ListBaseProps['filterable']>,\n default: false\n },\n filterRules: {\n type: Array as PropType<ListBaseProps['filterRules']>,\n default: () => []\n },\n filterDelay: {\n type: Number as PropType<ListBaseProps['filterDelay']>,\n default: 400\n },\n filterMatchingType: {\n type: String as PropType<ListBaseProps['filterMatchingType']>,\n default: 'all'\n },\n filterPosition: {\n type: String as PropType<ListBaseProps['filterPosition']>,\n default: 'bottom'\n },\n filterBtnPosition: {\n type: String as PropType<ListBaseProps['filterBtnPosition']>,\n default: 'right'\n },\n filterOperators: {\n type: Object as PropType<ListBaseProps['filterOperators']>,\n default: () => DEFAULT_FILTER_OPERATORS\n },\n data: {\n type: Array as PropType<ListBaseProps['data']>,\n default: () => []\n }\n} satisfies Record<string, any>;\n\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, CSSProperties, ref, computed, onMounted, nextTick } from 'vue';\nimport VirtualScroll from '../base/VirtualScroll';\nimport { Pagination } from '../pagination';\nimport { useExpose } from '../../utils/exposeMethods';\nimport { listBaseProps } from '../base/listBaseProps';\nimport { useListBase } from '../base/useListBase';\nimport type { DataListProps } from './types';\n\nexport default defineComponent({\n name: 'DataList',\n props: {\n ...listBaseProps,\n itemStyle: [Object, String] as PropType<DataListProps['itemStyle']>,\n itemCls: String as PropType<DataListProps['itemCls']>,\n hoverCls: {\n type: String as PropType<DataListProps['hoverCls']>,\n default: 'datagrid-row-over'\n },\n selectedCls: {\n type: String as PropType<DataListProps['selectedCls']>,\n default: 'datagrid-row-selected'\n },\n scrollPosition: [Number, Object] as PropType<DataListProps['scrollPosition']>\n },\n setup(props: DataListProps, { expose, emit, slots }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const lb = useListBase(props as any, { emit } as any, {\n sortData: () => proxy?.sortData?.(),\n setGroupData: () => proxy?.setGroupData?.(),\n afterSelectionChange: (...args: any[]) => proxy?.afterSelectionChange?.(...args)\n });\n if (proxy) {\n proxy._listBase_setData = lb.setData;\n proxy._listBase_setPageData = lb.setPageData;\n proxy._listBase_navRow = lb.navRow;\n proxy._listBase_addFilterRule = lb.addFilterRule;\n }\n\n const vrows = ref<any[]>([]);\n const scrollPositionState = ref<number | object | null>(props.scrollPosition || null);\n const innerRef = ref<HTMLElement | null>(null);\n const vscrollRef = ref<any>(null);\n const pageTopRef = ref<any>(null);\n const pageBottomRef = ref<any>(null);\n\n const innerClasses = computed(() => {\n const virtualScroll = (props as any).virtualScroll || false;\n return [\n 'f-full',\n {\n 'f-column': virtualScroll\n }\n ];\n });\n\n const innerStyle = computed<CSSProperties>(() => {\n const virtualScroll = (props as any).virtualScroll || false;\n return { overflow: virtualScroll ? 'hidden' : 'auto' };\n });\n\n const virtualItemStyle = computed<CSSProperties>(() => {\n const itemStyle = props.itemStyle as CSSProperties | undefined;\n const rowHeight = (props as any).rowHeight || 0;\n return Object.assign({}, itemStyle || {}, { height: rowHeight + 'px' });\n });\n\n const getItemClass = (row: any): string | null => {\n const cc: string[] = [];\n if (props.itemCls) {\n cc.push(props.itemCls);\n }\n const highlightRow = (lb as any).highlightRow?.value;\n if (props.hoverCls && highlightRow == row) {\n cc.push(props.hoverCls);\n }\n const isSelected = (lb as any).isSelected;\n if (isSelected && props.selectedCls && isSelected(row)) {\n cc.push(props.selectedCls);\n }\n return cc.length ? cc.join(' ') : null;\n };\n\n const getRowIndex = (index: number): number => {\n if (vscrollRef.value && vscrollRef.value.startIndex !== undefined) {\n return index + vscrollRef.value.startIndex;\n } else if ((props as any).pagination) {\n const pageNumberState = (lb as any).pageNumberState?.value || 1;\n const pageSizeState = (lb as any).pageSizeState?.value || 10;\n return index + (pageNumberState - 1) * pageSizeState;\n } else {\n return index;\n }\n };\n\n const scrollTop = (value?: number): number | void => {\n if (value !== undefined) {\n if (vscrollRef.value && vscrollRef.value.scrollState) {\n vscrollRef.value.scrollState(value);\n } else {\n if (innerRef.value) {\n innerRef.value.scrollTop = value;\n }\n }\n } else {\n if (vscrollRef.value && vscrollRef.value.scrollState) {\n return vscrollRef.value.scrollState();\n } else {\n return innerRef.value ? innerRef.value.scrollTop : 0;\n }\n }\n };\n\n // const navRow = (step: number): void => {\n // (lb as any).navRow?.(step);\n // const rows = (lb as any).rows?.value || [];\n // const highlightRow = (lb as any).highlightRow?.value;\n // const index = rows.indexOf(highlightRow);\n // if (index >= 0) {\n // nextTick(() => {\n // const container =\n // vscrollRef.value && vscrollRef.value.$refs && vscrollRef.value.$refs.bodyRef ? vscrollRef.value.$refs.bodyRef : innerRef.value;\n // if (container && props.hoverCls) {\n // const item = container.querySelector('.' + props.hoverCls);\n // if (item) {\n // domHelper.scrollTo(container, item);\n // }\n // }\n // });\n // }\n // };\n\n // const highlightFirstRow = (): void => {\n // const rows = (lb as any).rows?.value || [];\n // (lb as any).highlightRow.value = rows.length ? rows[0] : null;\n // navRow(0);\n // };\n\n // const scrollToSelectedRow = (): void => {\n // const container =\n // vscrollRef.value && vscrollRef.value.$refs && vscrollRef.value.$refs.bodyRef ? vscrollRef.value.$refs.bodyRef : innerRef.value;\n // if (container && props.selectedCls) {\n // const item = container.querySelector('.' + props.selectedCls);\n // if (item) {\n // domHelper.scrollTo(container, item);\n // }\n // }\n // };\n\n const renderPagination = (position: string) => {\n const pagination = (props as any).pagination;\n if (!pagination) {\n return null;\n }\n const pagePosition = (props as any).pagePosition || 'bottom';\n if (pagePosition != 'both' && pagePosition != position) {\n return null;\n }\n let ref = pageTopRef;\n let cls = 'datagrid-pager f-noshrink';\n if (pagePosition == 'top') {\n cls += ' datagrid-pager-top';\n } else {\n ref = pageBottomRef;\n }\n const totalState = (lb as any).totalState?.value || 0;\n const pageSizeState = (lb as any).pageSizeState?.value || 10;\n const pageNumberState = (lb as any).pageNumberState?.value || 1;\n const loading = (props as any).loading || false;\n const onPageChange = (lb as any).onPageChange;\n return (\n <Pagination\n ref={ref}\n class={cls}\n total={totalState}\n pageSize={pageSizeState}\n pageNumber={pageNumberState}\n loading={loading}\n onPageChange={onPageChange}\n ></Pagination>\n );\n };\n\n const renderLoading = () => {\n const loading = (props as any).loading || false;\n if (!loading) {\n return null;\n }\n const loadMsg = (props as any).loadMsg || '';\n return (\n <div class=\"datagrid-loading f-row\">\n <div class=\"datagrid-mask\"></div>\n <div class=\"datagrid-mask-msg\">{loadMsg}</div>\n </div>\n );\n };\n\n const renderEmpty = () => {\n const loading = (props as any).loading || false;\n const rows = (lb as any).rows?.value || [];\n if (loading || rows.length) {\n return null;\n }\n if (slots.empty) {\n const content = slots.empty();\n return <div class=\"datagrid-empty\">{content}</div>;\n } else {\n return null;\n }\n };\n\n const renderList = () => {\n const virtualScroll = (props as any).virtualScroll || false;\n if (virtualScroll) {\n return null;\n }\n const rows = (lb as any).rows?.value || [];\n const onRowClick = (lb as any).onRowClick;\n return (\n <>\n {rows.map((row: any, rowIndex: number) => (\n <div\n key={rowIndex}\n class={getItemClass(row)}\n style={props.itemStyle}\n onMouseenter={() => ((lb as any).highlightRow.value = row)}\n onMouseleave={() => ((lb as any).highlightRow.value = null)}\n onClick={(event: Event) => {\n if (onRowClick) {\n onRowClick(row, event);\n }\n }}\n >\n {slots.default?.({ row: row, rowIndex: getRowIndex(rowIndex) })}\n </div>\n ))}\n </>\n );\n };\n\n const renderVirtualList = () => {\n const virtualScroll = (props as any).virtualScroll || false;\n if (!virtualScroll) {\n return null;\n }\n const rows = (lb as any).rows?.value || [];\n const total = (props as any).total || 0;\n const pageNumber = (props as any).pageNumber || 1;\n const pageSize = (props as any).pageSize || 10;\n const rowHeight = (props as any).rowHeight || 0;\n const lazy = (props as any).lazy || false;\n const scrollPosition = props.scrollPosition;\n const onVirtualPageChange = (props as any).onVirtualPageChange;\n const onRowClick = (lb as any).onRowClick;\n return (\n <VirtualScroll\n ref={vscrollRef}\n class=\"f-full\"\n data={rows}\n total={total}\n pageNumber={pageNumber}\n pageSize={pageSize}\n rowHeight={rowHeight}\n lazy={lazy}\n scrollPosition={scrollPosition}\n onUpdate={(value: any) => (vrows.value = value)}\n onPageChange={onVirtualPageChange}\n >\n {vrows.value.map((row: any, rowIndex: number) => (\n <div\n key={rowIndex}\n class={getItemClass(row)}\n style={virtualItemStyle.value}\n onMouseenter={() => ((lb as any).highlightRow.value = row)}\n onMouseleave={() => ((lb as any).highlightRow.value = null)}\n onClick={(event: Event) => {\n if (onRowClick) {\n onRowClick(row, event);\n }\n }}\n >\n {slots.default?.({ row: row, rowIndex: getRowIndex(rowIndex) })}\n </div>\n ))}\n </VirtualScroll>\n );\n };\n\n onMounted(() => {\n if (innerRef.value && scrollPositionState.value) {\n nextTick(() => {\n scrollTop(scrollPositionState.value as number);\n scrollPositionState.value = null;\n });\n }\n });\n\n useExpose(expose, ['getItemClass', 'getRowIndex', 'scrollTop', 'navRow', 'highlightFirstRow', 'scrollToSelectedRow']);\n\n return () => {\n const border = (props as any).border !== false;\n let bodyCls = 'panel-body panel-body-noheader datagrid f-full f-column';\n if (!border) {\n bodyCls += ' panel-body-noborder';\n }\n return (\n <div class=\"f-column\">\n <div class={bodyCls}>\n {renderPagination('top')}\n <div ref={innerRef} class={innerClasses.value} style={innerStyle.value}>\n {renderList()}\n {renderVirtualList()}\n </div>\n {renderPagination('bottom')}\n </div>\n {renderLoading()}\n {renderEmpty()}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, h } from 'vue';\nimport type { AddonProps } from './types';\n\nexport default defineComponent({\n name: 'Addon',\n props: {\n align: {\n type: String as PropType<AddonProps['align']>,\n default: 'right'\n }\n },\n setup(props: AddonProps, { slots }) {\n return () => {\n if (!slots.default) {\n return '';\n }\n return h(\n 'span',\n {\n class: {\n 'textbox-addon f-inline-row f-noshrink': true,\n 'f-order2': props.align == 'left',\n 'f-order4': props.align == 'right'\n }\n },\n [slots.default()]\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, computed, onMounted, ref } from 'vue';\nimport type { LabelProps } from './types';\n\nexport default defineComponent({\n name: 'Label',\n props: {\n for: String as PropType<LabelProps['for']>,\n align: {\n type: String as PropType<LabelProps['align']>,\n default: 'left'\n }\n },\n setup(props: LabelProps, { slots }) {\n const labelRef = ref<HTMLElement | null>(null);\n\n const labelClasses = computed(() => {\n return [\n 'textbox-label',\n {\n 'textbox-label-top': props.align == 'top'\n }\n ];\n });\n\n const labelStyle = computed(() => {\n const align = props.align || 'left';\n if (align === 'top') {\n return {};\n }\n return {\n textAlign: align as 'left' | 'right' | 'center'\n };\n });\n\n onMounted(() => {\n if (props.for && labelRef.value) {\n const att = document.createAttribute('for');\n att.value = props.for;\n labelRef.value.setAttributeNode(att);\n }\n });\n\n return () => (\n <label ref={labelRef} class={labelClasses.value} style={labelStyle.value}>\n {slots.default?.()}\n </label>\n );\n }\n});\n","import { computed, getCurrentInstance, onBeforeUnmount, onMounted, ref, watch, type ComputedRef, type Ref } from 'vue';\nimport type { FieldBaseProps, FormFieldInstance } from './types';\nimport type { FormInstance } from '../form/types';\n\nexport interface UseFieldBaseReturn {\n invalidState: Ref<boolean>;\n form: ComputedRef<FormInstance | null>;\n field: ComputedRef<FormFieldInstance | null>;\n fieldName: ComputedRef<string | null>;\n afterFocus: () => void;\n afterBlur: () => void;\n afterValueChange: () => void;\n setValid: (valid: boolean) => void;\n}\n\n/**\n * useFieldBase:等价替代 FieldBase.tsx\n *\n * 对齐点:\n * - invalid -> invalidState(watch 同步)\n * - form/field/fieldName 计算逻辑一致(沿 $parent 链找 name === Form/FormField)\n * - mounted/beforeUnmount:form.fieldAdd/fieldRemove\n * - afterBlur/afterValueChange:form.fieldBlur/fieldChange\n */\nexport function useFieldBase(props: FieldBaseProps): UseFieldBaseReturn {\n const invalidState = ref<boolean>(!!props.invalid);\n\n watch(\n () => props.invalid,\n v => {\n invalidState.value = !!v;\n }\n );\n\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const form = computed<FormInstance | null>(() => {\n let parent: any = proxy?.$parent;\n while (parent && parent.$options?.name !== 'Form') {\n parent = parent.$parent;\n }\n return parent || null;\n });\n\n const field = computed<FormFieldInstance | null>(() => {\n let parent: any = proxy?.$parent;\n while (parent && parent.$options?.name !== 'FormField') {\n parent = parent.$parent;\n }\n return parent || null;\n });\n\n const fieldName = computed<string | null>(() => {\n if (props.name) return props.name;\n return field.value ? (field.value as any).name || null : null;\n });\n\n function afterFocus(): void {\n // FieldBase.tsx 里是空实现:保留\n }\n\n function afterBlur(): void {\n const f = form.value as any;\n f?.fieldBlur?.(proxy);\n }\n\n function afterValueChange(): void {\n const f = form.value as any;\n f?.fieldChange?.(proxy);\n }\n\n function setValid(valid: boolean): void {\n invalidState.value = !valid;\n }\n\n onMounted(() => {\n const f = form.value as any;\n f?.fieldAdd?.(proxy);\n });\n\n onBeforeUnmount(() => {\n const f = form.value as any;\n f?.fieldRemove?.(proxy);\n });\n\n return {\n invalidState,\n form,\n field,\n fieldName,\n afterFocus,\n afterBlur,\n afterValueChange,\n setValid\n };\n}\n","/**\n * InputBase 组合式实现(替代 extends: FieldBase/InputBase 的核心逻辑)\n *\n * 目标:\n * - 把 InputBase.tsx 中的 data/computed/watch/methods/render 迁移为可复用的 composable\n * - 让 TextBox/ComboBase 等子组件通过“组合”而不是“继承”复用输入框能力\n *\n * 注意:\n * - 这里不直接依赖 Vue 组件实例的 this / $refs\n * - DOM 引用使用 inputRef(Ref<HTMLInputElement | HTMLTextAreaElement>)\n * - 表单联动(afterBlur/afterValueChange 等)通过 fieldBase 注入\n */\nimport { computed, ref, watch, h, Fragment, type Ref, type VNodeChild, type Slots, type CSSProperties } from 'vue';\nimport type { InputBaseProps } from './types';\n\n/**\n * 兼容 FieldBase 的 invalidState 可能是:\n * - 组件实例属性 boolean(Options API)\n * - ref<boolean>(Composition API)\n */\ntype MaybeRef<T> = T | Ref<T>;\n\n/**\n * FieldBase 的最小依赖接口(InputBase 只需要这些能力)\n * - invalidState:用于样式类计算(textbox-invalid / validatebox-invalid)\n * - afterFocus/afterBlur/afterValueChange:用于通知 Form 发生了交互/值变更\n *\n * 说明:\n * - 这里用可选链,允许在没有 Form 上下文时也能正常工作(即 fieldBase 为空实现)\n */\nexport interface FieldBaseLike {\n invalidState: MaybeRef<boolean>;\n afterFocus?: () => void;\n afterBlur?: () => void;\n afterValueChange?: () => void;\n}\n\n/**\n * useInputBase 的上下文(来自 setup 的第二个参数拆分)\n * - emit:用于对外触发 update:modelValue / focus / blur / valueChange 等事件\n * - slots:用于渲染默认插槽(renderAddon 里会用)\n *\n * 注意:\n * - 这里故意不传组件 proxy,避免再次引入 this 风格依赖\n */\nexport interface InputBaseCtx {\n emit: (event: any, ...args: any[]) => void;\n slots?: Slots;\n}\n\n/**\n * valueChange 事件的 payload 结构,对齐 InputBase.tsx 的实现\n */\nexport interface ValueChangeEvent {\n currentValue: any;\n previousValue: any;\n}\n\n/**\n * useInputBase:InputBase 的组合式实现\n *\n * @param props - InputBaseProps(与 InputBase.tsx 的 props 对齐)\n * @param ctx - emit/slots\n * @param fieldBase - 由 useFieldBase() 等提供的 FieldBase 能力\n *\n * 返回值:\n * - inputRef:输入 DOM 引用(用于 focus/blur/selection)\n * - valueState/textState/focused:内部状态\n * - class 相关 computed:baseClasses/inputClasses/addonClasses/addonIconClasses\n * - 行为函数:setValue/onInput/focus/blur/selection\n * - 渲染辅助:renderInput/renderAddon/renderField(用于快速拼装组件)\n */\nexport function useInputBase(props: InputBaseProps, ctx: InputBaseCtx, fieldBase: FieldBaseLike) {\n /**\n * 输入 DOM 引用:\n * - multiline=false -> HTMLInputElement\n * - multiline=true -> HTMLTextAreaElement\n *\n * 说明:不要再使用 this.$refs.inputRef(组合式里没有 this)\n */\n const inputRef = ref<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n /**\n * 初始值策略:与 InputBase.tsx 一致\n * - 优先使用 props.value\n * - 否则使用 props.modelValue\n */\n const initialValue = props.value !== undefined ? props.value : props.modelValue;\n\n /**\n * valueState:组件对外值的内部镜像\n * - setValue 会更新 valueState 并 emit update:modelValue + valueChange\n */\n const valueState = ref<any>(initialValue);\n\n /**\n * textState:输入框中展示的文本\n * - 对齐 InputBase.tsx:String(v || '')\n * - 注意:TextBox 会覆盖 text 的 computed 逻辑(focused 时显示原始文本,否则格式化)\n */\n const textState = ref<string>(String((initialValue as any) || ''));\n\n /**\n * focused:输入框是否聚焦(用于样式 & TextBox 的 text 展示策略)\n */\n const focused = ref(false);\n\n /**\n * invalidState:统一将 fieldBase.invalidState 归一化成 boolean\n * - 支持 boolean 和 ref<boolean>\n */\n const invalidState = computed<boolean>(() => {\n const v = fieldBase.invalidState as any;\n return typeof v === 'boolean' ? v : !!v?.value;\n });\n\n /**\n * 默认文本格式化函数:对齐 InputBase.tsx\n * 注意:TextBox 会使用 props.textFormatter || defaultTextFormatter\n */\n function defaultTextFormatter(value: any): string {\n return value == null ? (value as any) : String(value);\n }\n\n /**\n * 监听外部 props 变化:\n * - 与 InputBase.tsx watch 行为一致(value/modelValue -> setValue)\n *\n * 说明:\n * - setValue 内部有 “value !== valueState.value” 的 guard,避免死循环\n * - 迁到组合式后依然保持这一行为\n */\n watch(\n () => props.value,\n v => setValue(v)\n );\n watch(\n () => props.modelValue,\n v => setValue(v)\n );\n\n /**\n * setValue:对外设置 value 的统一入口(也被 watch 调用)\n * 行为对齐 InputBase.tsx:\n * - 更新 valueState\n * - emit update:modelValue\n * - emit valueChange({currentValue, previousValue})\n * - 调用 fieldBase.afterValueChange(触发表单联动校验等)\n */\n function setValue(value?: string | Date | number | any[] | null): void {\n if (value !== valueState.value) {\n const previousValue = valueState.value;\n valueState.value = value;\n\n ctx.emit('update:modelValue', valueState.value);\n ctx.emit('valueChange', {\n currentValue: valueState.value,\n previousValue\n } satisfies ValueChangeEvent);\n\n fieldBase.afterValueChange?.();\n }\n }\n\n /**\n * onInput:输入事件(只更新 textState,不直接 emit)\n * 说明:\n * - 对齐 InputBase.tsx:只写 this.textState = target.value\n * - TextBox 会覆写 onInput:在更新 textState 后还会 setValue(textState)\n */\n function onInput(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n textState.value = target.value;\n }\n\n /**\n * focus:聚焦输入框\n * 行为对齐 InputBase.tsx:\n * - DOM focus\n * - focused=true\n * - emit('focus')\n * - fieldBase.afterFocus()\n */\n function focus(): void {\n inputRef.value?.focus();\n focused.value = true;\n ctx.emit('focus');\n fieldBase.afterFocus?.();\n }\n\n /**\n * blur:失焦输入框\n * 行为对齐 InputBase.tsx:\n * - DOM blur\n * - focused=false\n * - emit('blur')\n * - fieldBase.afterBlur()(触发表单 validateOnBlur)\n */\n function blur(): void {\n inputRef.value?.blur();\n focused.value = false;\n ctx.emit('blur');\n fieldBase.afterBlur?.();\n }\n\n /**\n * selection API:对齐 InputBase.tsx\n */\n function getSelectionRange(): { start: number; end: number } {\n let start = 0;\n let end = 0;\n const target = inputRef.value;\n if (target && typeof (target as any).selectionStart === 'number') {\n start = (target as any).selectionStart ?? 0;\n end = (target as any).selectionEnd ?? 0;\n }\n return { start, end };\n }\n\n function getSelectionStart(): number {\n return getSelectionRange().start;\n }\n\n function setSelectionRange(start: number, end: number): void {\n const target = inputRef.value as any;\n if (!target) return;\n\n if (target.setSelectionRange) {\n target.setSelectionRange(start, end);\n } else if (target.createTextRange) {\n // IE 兼容逻辑:保留原 InputBase 的处理\n const range = target.createTextRange();\n range.collapse();\n range.moveEnd('character', end);\n range.moveStart('character', start);\n range.select();\n }\n }\n\n /**\n * baseClasses:对齐 InputBase.tsx computed.baseClasses\n * - 注意:这里保留 filter(Boolean) 行为,避免 cls 为空导致 class 数组带 null/undefined\n */\n const baseClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox f-inline-row f-field',\n props.cls,\n {\n 'textbox-disabled': props.disabled || false,\n 'textbox-readonly': props.readonly || false,\n 'textbox-focused': focused.value,\n 'textbox-invalid': invalidState.value\n }\n ].filter(Boolean) as any;\n });\n\n /**\n * inputClasses:对齐 InputBase.tsx computed.inputClasses\n */\n const inputClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox-text f-full f-order3',\n props.inputCls,\n {\n 'validatebox-invalid': invalidState.value\n }\n ].filter(Boolean) as any;\n });\n\n /**\n * addonClasses / addonIconClasses:对齐 InputBase.tsx\n */\n const addonClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const iconAlign = props.iconAlign ?? 'right';\n return [\n 'textbox-addon textbox-addon-icon f-inline-row f-noshrink',\n {\n 'f-order1': iconAlign === 'left',\n 'f-order5': iconAlign === 'right'\n }\n ];\n });\n\n const addonIconClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ['textbox-icon textbox-icon-disabled', props.iconCls].filter(Boolean) as any;\n });\n\n /**\n * text:与 InputBase.tsx computed.text 一致(默认直接返回 textState)\n * - TextBox 会覆盖它的显示策略,但仍可复用这个默认实现\n */\n const text = computed<string>(() => textState.value);\n\n /**\n * renderInput:渲染 input/textarea + hidden input(对齐 InputBase.tsx renderInput)\n *\n * @param extraInputAttrs - 允许子组件覆盖/追加输入框属性(例如 SearchBox 的 keydown 等)\n *\n * 注意:\n * - hidden input 的 value 绑定 valueState(对齐原实现)\n * - disabled/readonly 的值使用字符串 'disabled'/'readonly',保持原来的输出形态\n */\n function renderInput(extraInputAttrs: Record<string, any> = {}): VNodeChild {\n const common: Record<string, any> = {\n class: inputClasses.value,\n style: props.inputStyle as CSSProperties | undefined,\n value: text.value,\n id: props.inputId,\n disabled: props.disabled ? 'disabled' : null,\n readonly: props.readonly || props.editable === false ? 'readonly' : null,\n tabindex: props.tabindex,\n placeholder: props.placeholder,\n onInput,\n onFocus: focus,\n onBlur: blur,\n autocomplete: 'off',\n ...extraInputAttrs\n };\n\n const visibleInput = props.multiline ? h('textarea', { ...common, ref: inputRef }) : h('input', { ...common, ref: inputRef });\n\n const hiddenValue = h('input', {\n class: 'textbox-value',\n type: 'hidden',\n value: valueState.value,\n disabled: props.disabled ? 'disabled' : null\n });\n\n return h(Fragment, null, [visibleInput, hiddenValue]);\n }\n\n /**\n * renderAddon:渲染 addon 区域\n * - 默认插槽输出(例如 Addon/Label 等)\n * - iconCls 存在时输出 icon addon(对齐原实现)\n */\n function renderAddon(): VNodeChild {\n const slotDefault = ctx.slots?.default ? ctx.slots.default() : null;\n\n const icon = props.iconCls && h('span', { class: addonClasses.value, ref: 'addonRef' as any }, [h('span', { class: addonIconClasses.value })]);\n\n return h(Fragment, null, [slotDefault, icon]);\n }\n\n /**\n * renderOthers:预留给子类(原 InputBase.tsx 默认返回 null)\n * 组合式里通常由 renderField 的 renderOthersOverride 参数来覆盖\n */\n function renderOthers(): VNodeChild {\n return null;\n }\n\n /**\n * renderField:拼装 InputBase 的整体 DOM 结构(对齐 InputBase.tsx renderField)\n *\n * @param renderOthersOverride - 子组件注入额外内容(例如 SearchBox 的 MenuButton、按钮等)\n * @param extraInputAttrs - 传给 renderInput 的额外属性\n */\n function renderField(renderOthersOverride?: () => VNodeChild, extraInputAttrs?: Record<string, any>): VNodeChild {\n const others = renderOthersOverride ? renderOthersOverride() : renderOthers();\n return h('span', { class: baseClasses.value }, [renderInput(extraInputAttrs), renderAddon(), others]);\n }\n\n return {\n // refs/state\n inputRef,\n valueState,\n textState,\n focused,\n\n // computed\n invalidState,\n baseClasses,\n inputClasses,\n addonClasses,\n addonIconClasses,\n text,\n\n // methods\n defaultTextFormatter,\n setValue,\n onInput,\n focus,\n blur,\n getSelectionStart,\n getSelectionRange,\n setSelectionRange,\n\n // render helpers\n renderInput,\n renderAddon,\n renderOthers,\n renderField\n };\n}\n","import { computed, h, Fragment, type VNodeChild } from 'vue';\nimport type { SpinnerBaseProps } from './types';\nimport type { FieldBaseLike, InputBaseCtx } from './useInputBase';\nimport { useInputBase } from './useInputBase';\n\nexport interface SpinnerBaseHandlers {\n doSpinUp: () => void;\n doSpinDown: () => void;\n}\n\nexport function useSpinnerBase(\n props: SpinnerBaseProps,\n ctx: InputBaseCtx,\n fieldBase: FieldBaseLike,\n handlers: SpinnerBaseHandlers\n) {\n const ib = useInputBase(props, ctx, fieldBase);\n\n function onClickUp(): void {\n if (props.disabled || props.readonly) return;\n if (props.spinAlign === 'left' || props.spinAlign === 'right' || !props.spinAlign) {\n handlers.doSpinUp();\n } else {\n props.reversed ? handlers.doSpinDown() : handlers.doSpinUp();\n }\n }\n\n function onClickDown(): void {\n if (props.disabled || props.readonly) return;\n if (props.spinAlign === 'left' || props.spinAlign === 'right' || !props.spinAlign) {\n handlers.doSpinDown();\n } else {\n props.reversed ? handlers.doSpinUp() : handlers.doSpinDown();\n }\n }\n\n function renderHorizontal(): VNodeChild {\n let upcls = 'spinner-button';\n let downcls = 'spinner-button';\n if (props.reversed) {\n upcls += ' spinner-button-up';\n downcls += ' spinner-button-down';\n } else {\n upcls += ' spinner-button-down';\n downcls += ' spinner-button-up';\n }\n return h(Fragment, null, [\n h(\n 'span',\n {\n class: 'textbox-addon spinner-arrow spinner-button-left f-inline-row f-noshrink f-order1',\n onClick: onClickDown\n },\n [h('span', { class: upcls })]\n ),\n h(\n 'span',\n {\n class: 'textbox-addon spinner-arrow spinner-button-right f-inline-row f-noshrink f-order5',\n onClick: onClickUp\n },\n [h('span', { class: downcls })]\n )\n ]);\n }\n\n function renderVertical(): VNodeChild {\n let upcls = 'spinner-button';\n let downcls = 'spinner-button';\n if (props.reversed) {\n upcls += ' spinner-button-up';\n downcls += ' spinner-button-down';\n } else {\n upcls += ' spinner-button-down';\n downcls += ' spinner-button-up';\n }\n return h(Fragment, null, [\n h(\n 'span',\n { class: 'textbox-addon spinner-arrow spinner-button-bottom f-noshrink', onClick: onClickDown },\n [h('span', { class: upcls })]\n ),\n h(\n 'span',\n { class: 'textbox-addon spinner-arrow spinner-button-top f-noshrink', onClick: onClickUp },\n [h('span', { class: downcls })]\n )\n ]);\n }\n\n function renderDefault(): VNodeChild {\n let cls = 'textbox-addon spinner-button-updown f-column f-noshrink';\n if (props.spinAlign === 'left') {\n cls += ' f-order1';\n } else if (props.spinAlign === 'right' || !props.spinAlign) {\n cls += ' f-order5';\n }\n\n return h('span', { class: cls }, [\n h(\n 'span',\n { class: 'spinner-arrow spinner-button-top f-full', onClick: onClickUp },\n [h('span', { class: 'spinner-arrow-up' })]\n ),\n h(\n 'span',\n { class: 'spinner-arrow spinner-button-bottom f-full', onClick: onClickDown },\n [h('span', { class: 'spinner-arrow-down' })]\n )\n ]);\n }\n\n function renderOthers(): VNodeChild {\n if (props.spinners === false) return null;\n if (props.spinAlign === 'horizontal') return renderHorizontal();\n if (props.spinAlign === 'vertical') return renderVertical();\n return renderDefault();\n }\n\n const sp = computed(() => ({\n onClickUp,\n onClickDown\n }));\n\n return {\n ...ib,\n spinner: sp,\n onClickUp,\n onClickDown,\n renderHorizontal,\n renderVertical,\n renderDefault,\n renderSpinnerOthers: renderOthers\n };\n}\n\n","import { computed, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, h, type Ref, type VNodeChild, ComputedRef } from 'vue';\nimport domHelper from './DomHelper';\nimport type { ComboBaseProps } from './types';\nimport type { FieldBaseLike, InputBaseCtx } from './useInputBase';\nimport { useInputBase } from './useInputBase';\n\nexport interface UseComboBaseOverrides {\n /**\n * openPanel 的重写实现(用于替代 Options API 里 extends + override 的语义)\n *\n * 典型用法:在 override 内部先调用 cb.openPanelRaw(),再做额外逻辑(setGrid/doFilter/...)\n */\n openPanel?: () => void;\n /**\n * closePanel 的重写实现(同上)\n *\n * 典型用法:先做保存滚动等,再调用 cb.closePanelRaw()\n */\n closePanel?: () => void;\n}\n\nexport interface UseComboBaseReturn {\n // from InputBase\n input: ReturnType<typeof useInputBase>;\n\n // refs/state\n panelRef: Ref<HTMLElement | null>;\n panelClosed: Ref<boolean>;\n panelLeft: Ref<number>;\n panelTop: Ref<number>;\n scrollTop: Ref<number>;\n\n // computed\n baseClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n arrowClasses: ComputedRef<(string | Record<string, boolean>)[]>;\n\n // methods\n onDocumentClick: (event: Event) => boolean | void;\n onDocumentMouseWheel: (event: Event) => boolean | void;\n togglePanel: () => void;\n alignPanel: () => void;\n openPanel: () => void;\n closePanel: () => void;\n /**\n * 原始(基础)实现:用于在 override 内部调用\n */\n openPanelRaw: () => void;\n closePanelRaw: () => void;\n\n // render helpers\n renderArrow: () => VNodeChild;\n}\n\n/**\n * useComboBase:ComboBase 的组合式实现(替代 `extends: InputBase`)\n *\n * 注意:\n * - 面板的实际渲染(renderPanel/renderContent)通常由具体组件完成,\n * 这里只提供 panelRef/state + 打开/关闭/对齐逻辑 + 箭头渲染。\n */\nexport function useComboBase(\n props: ComboBaseProps,\n ctx: InputBaseCtx,\n fieldBase: FieldBaseLike,\n overrides: UseComboBaseOverrides = {}\n): UseComboBaseReturn {\n const input = useInputBase(props, ctx, fieldBase);\n\n const panelRef = ref<HTMLElement | null>(null);\n const panelClosed = ref<boolean>(true);\n const panelLeft = ref<number>(0);\n const panelTop = ref<number>(0);\n const scrollTop = ref<number>(0);\n\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n function getRootEl(): HTMLElement | null {\n const el = proxy?.$el as any;\n return el instanceof HTMLElement ? el : null;\n }\n\n const baseClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox f-inline-row combo f-field',\n props.cls,\n {\n 'textbox-disabled': props.disabled || false,\n 'textbox-readonly': props.readonly || false,\n 'textbox-focused': input.focused.value,\n 'textbox-invalid': input.invalidState.value\n }\n ].filter(Boolean) as any;\n });\n\n const arrowClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const arrowAlign = props.arrowAlign ?? 'right';\n return [\n 'textbox-addon f-column f-noshrink',\n {\n 'f-order0': arrowAlign === 'left',\n 'f-order6': arrowAlign === 'right'\n }\n ];\n });\n\n function onDocumentClick(event: Event): boolean | void {\n const target = event.target as HTMLElement;\n\n // 当 editable=false 时,点击输入框区域切换面板\n if (!props.disabled && props.editable === false) {\n const inputEl = input.inputRef.value as any;\n if (inputEl && domHelper.isChild(target, inputEl)) {\n event.stopPropagation();\n togglePanel();\n return false;\n }\n }\n\n const panelEl = panelRef.value;\n if (panelEl) {\n event.stopPropagation();\n\n const rootEl = getRootEl();\n if (rootEl && domHelper.isChild(target, rootEl)) {\n return false;\n }\n\n if (!domHelper.isChild(target, panelEl)) {\n closePanel();\n }\n }\n }\n\n function onDocumentMouseWheel(event: Event): boolean | void {\n const target = event.target as HTMLElement;\n const panelEl = panelRef.value;\n if (!panelEl) return;\n\n event.stopPropagation();\n if (domHelper.isChild(target, panelEl)) {\n // 保留原实现:允许滚动\n } else {\n closePanel();\n }\n }\n\n // 先定义 raw,再用 overrides 包装(以支持“重写 openPanel/closePanel”)\n\n function alignPanel(): void {\n const panelEl = panelRef.value;\n const rootEl = getRootEl();\n if (!panelEl || !rootEl) return;\n\n const view = domHelper.getViewport();\n const pos = domHelper.offset(rootEl);\n const hwidth = domHelper.outerWidth(rootEl);\n const pwidth = domHelper.outerWidth(panelEl);\n const hheight = domHelper.outerHeight(rootEl);\n const pheight = domHelper.outerHeight(panelEl);\n\n let left = pos.left;\n if ((props.panelAlign ?? 'left') === 'right') {\n left += hwidth - pwidth;\n }\n if (left + pwidth > view.width + domHelper.getScrollLeft()) {\n left = view.width + domHelper.getScrollLeft() - pwidth;\n }\n if (left < 0) left = 0;\n\n let top = pos.top + hheight;\n if (top + pheight > view.height + domHelper.getScrollTop()) {\n top = pos.top - pheight;\n }\n if (top < domHelper.getScrollTop()) {\n top = pos.top + hheight;\n }\n\n panelTop.value = top;\n panelLeft.value = left;\n }\n\n function openPanelRaw(): void {\n if (!panelClosed.value) return;\n panelClosed.value = false;\n\n alignPanel();\n nextTick(() => {\n const panelEl = panelRef.value;\n const rootEl = getRootEl();\n if (!panelEl || !rootEl) return;\n\n document.body.appendChild(panelEl);\n\n const hwidth = domHelper.outerWidth(rootEl);\n const ps = props.panelStyle as any;\n if (ps) {\n if (!ps.width) panelEl.style.width = `${hwidth}px`;\n if (!ps.minWidth) panelEl.style.minWidth = `${hwidth}px`;\n } else {\n panelEl.style.width = `${hwidth}px`;\n }\n\n alignPanel();\n panelEl.scrollTop = scrollTop.value;\n });\n }\n\n function closePanelRaw(): void {\n const panelEl = panelRef.value;\n if (panelEl && !panelClosed.value) {\n scrollTop.value = panelEl.scrollTop;\n panelClosed.value = true;\n }\n }\n\n const openPanel = overrides.openPanel || openPanelRaw;\n const closePanel = overrides.closePanel || closePanelRaw;\n\n function togglePanel(): void {\n if (props.disabled || props.readonly) return;\n panelClosed.value ? openPanel() : closePanel();\n input.focus();\n }\n\n function renderArrow(): VNodeChild {\n if (props.hasDownArrow === false) return null;\n const iconCls = props.arrowIconCls ?? 'combo-arrow';\n return h(\n 'span',\n { class: arrowClasses.value, ref: 'arrowRef' as any, onClick: togglePanel },\n [h('span', { class: `${iconCls} textbox-icon f-full` })]\n );\n }\n\n onMounted(() => {\n domHelper.bind(document.body, 'click', onDocumentClick);\n domHelper.bind(document.body, 'mousewheel', onDocumentMouseWheel);\n });\n\n onBeforeUnmount(() => {\n const panelEl = panelRef.value;\n const rootEl = getRootEl();\n if (panelEl && rootEl) {\n rootEl.appendChild(panelEl);\n }\n domHelper.unbind(document.body, 'click', onDocumentClick);\n domHelper.unbind(document.body, 'mousewheel', onDocumentMouseWheel);\n });\n\n return {\n input,\n panelRef,\n panelClosed,\n panelLeft,\n panelTop,\n scrollTop,\n baseClasses,\n arrowClasses,\n onDocumentClick,\n onDocumentMouseWheel,\n togglePanel,\n alignPanel,\n openPanel,\n closePanel,\n openPanelRaw,\n closePanelRaw,\n renderArrow\n };\n}\n\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nexport class EventHub {\n events: Map<string, Array<(params?: any) => void>>;\n\n constructor() {\n this.events = new Map();\n }\n\n $on(event: string, handler: (params?: any) => void): void {\n const handlers = this.events.get(event);\n const added = handlers && handlers.push(handler);\n if (!added) {\n this.events.set(event, [handler]);\n }\n }\n\n $off(event: string, handler: (params?: any) => void): void {\n const handlers = this.events.get(event);\n if (handlers) {\n const index = handlers.indexOf(handler);\n if (index >= 0) {\n handlers.splice(index, 1);\n }\n }\n }\n\n $emit(event: string, params?: any): void {\n (this.events.get(event) || []).slice().map((handler) => { handler(params); });\n (this.events.get('*') || []).slice().map((handler) => { handler(event); });\n }\n}\n\nexport default new EventHub();\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nexport class DateHelper {\n parseSelections(format: string): number[][] {\n const selections: number[][] = [];\n const formatTokens = format.split(/[^A-Za-z]/);\n let start = 0;\n let end = 0;\n for (const token of formatTokens) {\n if (token) {\n end += token.length;\n selections.push([start, end]);\n start = end + 1;\n end = start;\n } else {\n start++;\n end++;\n }\n }\n return selections;\n }\n\n parseDate(value: string | null | undefined, format: string): Date | null {\n if (!value) {\n return null;\n }\n const formatTokens = format.split(/[^A-Za-z]/).filter(t => t);\n const dateTokens = value.split(/[^A-Za-z0-9]/).filter(t => t);\n const date = new Date();\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n\n const parser: Record<string, (value: number) => void> = {\n dd: (value: number) => date.setDate(value),\n d: (value: number) => date.setDate(value),\n MM: (value: number) => date.setMonth(+value - 1),\n M: (value: number) => date.setMonth(+value - 1),\n yyyy: (value: number) => date.setFullYear(value),\n yy: (value: number) => {\n let year = new Date().getFullYear();\n const val = +value;\n if (val + 2000 - year < 20) {\n date.setFullYear(val + 2000);\n } else {\n date.setFullYear(val + 1900);\n }\n },\n HH: (value: number) => date.setHours(value),\n H: (value: number) => date.setHours(value),\n mm: (value: number) => date.setMinutes(value),\n ss: (value: number) => date.setSeconds(value),\n SSS: (value: number) => date.setMilliseconds(value),\n SS: (value: number) => date.setMilliseconds(value),\n S: (value: number) => date.setMilliseconds(value)\n };\n\n for (let i = 0; i < formatTokens.length; i++) {\n const formatToken = formatTokens[i];\n const dateToken = dateTokens[i];\n const f = parser[formatToken];\n if (f && dateToken) {\n f(+dateToken || 0);\n }\n }\n\n return date;\n }\n\n formatDate(date: Date | null | undefined, format: string): string {\n if (!date) {\n return '';\n }\n const formatN = (value: number): string => {\n return value < 10 ? '0' + value : String(value);\n };\n const formatter: Record<string, () => string | number> = {\n dd: () => formatN(date.getDate()),\n d: () => date.getDate(),\n MM: () => formatN(date.getMonth() + 1),\n M: () => date.getMonth() + 1,\n yyyy: () => date.getFullYear(),\n yy: () => String(date.getFullYear()).substr(2, 2),\n HH: () => formatN(date.getHours()),\n mm: () => formatN(date.getMinutes()),\n ss: () => formatN(date.getSeconds()),\n SSS: () => formatN(date.getMilliseconds()),\n SS: () => formatN(date.getMilliseconds()),\n S: () => date.getMilliseconds()\n };\n return format.replace(/dd|d|M{1,4}|yyyy|yy|HH|mm|ss|S{1,3}|E{3,4}/g, (match: string) => {\n const f = formatter[match];\n return f ? String(f()) : match;\n });\n }\n}\n\nexport default new DateHelper();\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport type { TreeNode } from '../tree/types';\n\nexport class TreeHelper {\n cascadeCheck: boolean;\n $vue: any;\n\n constructor() {\n this.cascadeCheck = true;\n this.$vue = null;\n }\n\n setCheckState(node: TreeNode, checkState: 'unchecked' | 'checked' | 'indeterminate'): void {\n if (this.$vue) {\n node.checkState = checkState;\n } else {\n node.checkState = checkState;\n }\n }\n\n checkNode(node: TreeNode, callback: (node: TreeNode) => void): void {\n if (node.checkState != 'checked') {\n this.setCheckState(node, 'checked');\n if (this.cascadeCheck) {\n this.setChildCheckbox(node, node.checkState || 'unchecked');\n this.setParentCheckbox(node);\n }\n callback(node);\n }\n }\n\n uncheckNode(node: TreeNode, callback: (node: TreeNode) => void): void {\n if (node.checkState != 'unchecked') {\n this.setCheckState(node, 'unchecked');\n if (this.cascadeCheck) {\n this.setChildCheckbox(node, node.checkState || 'unchecked');\n this.setParentCheckbox(node);\n }\n callback(node);\n }\n }\n\n uncheckAllNodes(nodes: TreeNode[], callback: () => void): void {\n let changed = false;\n this.forNodes(nodes, (node: TreeNode) => {\n if (node.checkState != 'unchecked') {\n this.setCheckState(node, 'unchecked');\n changed = true;\n }\n });\n if (changed) {\n callback();\n }\n }\n\n setParentCheckbox(node: TreeNode): void {\n const pnode = node.parent;\n if (pnode) {\n this.setCheckState(pnode, this.calcNodeState(pnode));\n this.setParentCheckbox(pnode);\n }\n }\n\n setChildCheckbox(node: TreeNode, checkState: 'unchecked' | 'checked' | 'indeterminate'): void {\n this.setCheckState(node, checkState);\n if (node.children) {\n for (const cnode of node.children) {\n this.setChildCheckbox(cnode, checkState);\n }\n }\n }\n\n adjustCheck(node: TreeNode): void {\n if (!this.cascadeCheck) {\n return;\n }\n if (node.checkState == 'checked') {\n this.setChildCheckbox(node, node.checkState);\n this.setParentCheckbox(node);\n } else if (node.checkState == 'unchecked') {\n this.setChildCheckbox(node, node.checkState);\n this.setParentCheckbox(node);\n } else {\n this.setCheckState(node, this.calcNodeState(node));\n this.setParentCheckbox(node);\n }\n }\n\n calcNodeState(node: TreeNode): 'unchecked' | 'checked' | 'indeterminate' {\n const count = node.children ? node.children.length : 0;\n if (count) {\n let checkedCount = 0;\n let uncheckedCount = 0;\n for (const cnode of node.children || []) {\n this.setCheckState(cnode, cnode.checkState || 'unchecked');\n if (cnode.checkState == 'checked') {\n checkedCount++;\n } else if (cnode.checkState == 'unchecked') {\n uncheckedCount++;\n }\n }\n if (checkedCount == count) {\n return 'checked';\n } else if (uncheckedCount == count) {\n return 'unchecked';\n } else {\n return 'indeterminate';\n }\n }\n return 'unchecked';\n }\n\n forNodes(fromNodes: TreeNode[] | null | undefined, callback: (node: TreeNode) => boolean | void): void {\n fromNodes = fromNodes || [];\n const nodes: TreeNode[] = [];\n for (let i = 0; i < fromNodes.length; i++) {\n nodes.push(fromNodes[i]);\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (!node) {\n continue;\n }\n if (callback(node) == false) {\n return;\n }\n if (node.children) {\n for (let i = node.children.length - 1; i >= 0; i--) {\n node.children[i].parent = node;\n nodes.unshift(node.children[i]);\n }\n }\n }\n }\n\n findNode(nodes: TreeNode[] | null | undefined, field: string, value: any): TreeNode | null {\n let result: TreeNode | null = null;\n this.forNodes(nodes, (n: TreeNode) => {\n if (n[field] == value) {\n result = n;\n return false;\n }\n });\n return result;\n }\n}\n\nexport default new TreeHelper();\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, CSSProperties, ref, computed, watch, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { FilterRule } from '../base/types';\nimport { listBaseProps } from '../base/listBaseProps';\nimport { useListBase } from '../base/useListBase';\nimport type { GridBaseProps, SortItem } from './types';\n\nexport default defineComponent({\n name: 'GridBase',\n props: {\n ...listBaseProps,\n rowHeight: {\n type: Number as PropType<GridBaseProps['rowHeight']>,\n default: 32\n },\n striped: {\n type: Boolean as PropType<GridBaseProps['striped']>,\n default: false\n },\n rowCss: [Object, Function] as PropType<GridBaseProps['rowCss']>,\n frozenWidth: {\n type: [Number, String] as PropType<GridBaseProps['frozenWidth']>,\n default: '200px'\n },\n frozenAlign: {\n type: String as PropType<GridBaseProps['frozenAlign']>,\n default: 'left'\n },\n sorts: {\n type: [Object, Array] as PropType<GridBaseProps['sorts']>,\n default: () => []\n },\n multiSort: {\n type: Boolean as PropType<GridBaseProps['multiSort']>,\n default: false\n },\n showHeader: {\n type: Boolean as PropType<GridBaseProps['showHeader']>,\n default: true\n },\n showFooter: {\n type: Boolean as PropType<GridBaseProps['showFooter']>,\n default: false\n },\n editMode: String as PropType<GridBaseProps['editMode']>,\n tipOptions: Object as PropType<GridBaseProps['tipOptions']>,\n clickToEdit: {\n type: Boolean as PropType<GridBaseProps['clickToEdit']>,\n default: false\n },\n dblclickToEdit: {\n type: Boolean as PropType<GridBaseProps['dblclickToEdit']>,\n default: false\n },\n footerData: {\n type: Array as PropType<GridBaseProps['footerData']>,\n default: () => []\n },\n filterRules: {\n type: Array as PropType<GridBaseProps['filterRules']>,\n default: () => []\n },\n columnResizing: {\n type: Boolean as PropType<GridBaseProps['columnResizing']>,\n default: false\n },\n columnMoving: {\n type: Boolean as PropType<GridBaseProps['columnMoving']>,\n default: false\n },\n cellSpan: {\n type: Function as PropType<GridBaseProps['cellSpan']>,\n default: () => {\n return {\n rowspan: 1,\n colspan: 1\n };\n }\n }\n } satisfies Record<keyof GridBaseProps, any>,\n setup(props: GridBaseProps, { expose, emit }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const lb = useListBase(props as any, { emit } as any, {\n sortData: () => proxy?.sortData?.(),\n setGroupData: () => proxy?.setGroupData?.(),\n afterSelectionChange: (...args: any[]) => proxy?.afterSelectionChange?.(...args)\n });\n // 兼容旧写法:子组件/本组件中曾通过 `ListBase.methods.xxx.call(this)` 调用父类实现\n if (proxy) {\n proxy._listBase_setData = lb.setData;\n proxy._listBase_setPageData = lb.setPageData;\n proxy._listBase_navRow = lb.navRow;\n proxy._listBase_addFilterRule = lb.addFilterRule;\n }\n\n const view1 = ref<any>(null);\n const view2 = ref<any>(null);\n const view3 = ref<any>(null);\n const leftGroup = ref<any>(null);\n const rightGroup = ref<any>(null);\n const centerGroup = ref<any>(null);\n const leftColumns = ref<any[]>([]);\n const rightColumns = ref<any[]>([]);\n const centerColumns = ref<any[]>([]);\n const columnRefs = ref<any[]>([]);\n const groupRefs = ref<any[]>([]);\n const sortsState = ref<SortItem[]>((props.sorts ? (Array.isArray(props.sorts) ? props.sorts : [props.sorts]) : []) as SortItem[]);\n const editingItem = ref<any>(null);\n const headerHeight = ref<number>(0);\n const splitStyle = ref<CSSProperties>();\n const hasDestroyed = ref<boolean>(false);\n const columnTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n\n const allColumns = computed(() => {\n const cc: any[] = [];\n if (leftColumns.value) {\n cc.push(...leftColumns.value);\n }\n if (centerColumns.value) {\n cc.push(...centerColumns.value);\n }\n if (rightColumns.value) {\n cc.push(...rightColumns.value);\n }\n return cc;\n });\n\n const footerRows = computed(() => {\n if (props.footerData instanceof Array) {\n return props.footerData;\n } else {\n return [props.footerData];\n }\n });\n\n const leftFrozenWidth = computed(() => {\n const width = leftGroup.value ? leftGroup.value.widthState : null;\n return width ? width : props.frozenWidth || 0;\n });\n\n const rightFrozenWidth = computed(() => {\n const width = rightGroup.value ? rightGroup.value.widthState : null;\n return width ? width : props.frozenWidth || 0;\n });\n\n const getColumnLayout = (group: any): any[][] => {\n const aa: any[][] = [];\n const count = getColumnCount(group);\n for (let i = 0; i < group.rows.length; i++) {\n aa[i] = new Array(count);\n }\n group.rows.forEach((row: any, rowIndex: number) => {\n row.columns\n .filter((c: any) => !c.hidden)\n .forEach((col: any) => {\n const colIndex = getColumnIndex(aa[rowIndex]);\n if (colIndex >= 0) {\n for (let c = 0; c < col.colspan; c++) {\n for (let r = 0; r < col.rowspan; r++) {\n aa[rowIndex + r][colIndex + c] = col || '';\n }\n }\n }\n });\n });\n return aa;\n };\n\n const getColumnCount = (group: any): number => {\n let count = 0;\n if (group.rows && group.rows[0] && group.rows[0].columns) {\n group.rows[0].columns\n .filter((c: any) => !c.hidden)\n .forEach((col: any) => {\n count += Number(col.colspan);\n });\n }\n return count;\n };\n\n const getColumnIndex = (a: any[]): number => {\n for (let i = 0; i < a.length; i++) {\n if (a[i] == undefined) {\n return i;\n }\n }\n return -1;\n };\n\n const initColumnSort = (): void => {\n sortsState.value = sortsState.value || [];\n if (!(sortsState.value instanceof Array)) {\n sortsState.value = [sortsState.value];\n }\n if (!props.multiSort) {\n sortsState.value = sortsState.value.slice(0, 1);\n }\n for (let c = 0; c < allColumns.value.length; c++) {\n const col = allColumns.value[c];\n col.currOrder = null;\n for (let s = 0; s < sortsState.value.length; s++) {\n const sort = sortsState.value[s];\n if (sort.field == col.field) {\n col.currOrder = sort.order;\n break;\n }\n }\n }\n };\n\n const findColumn = (field: string): any | null => {\n const cc = allColumns.value;\n for (let i = 0; i < cc.length; i++) {\n if (cc[i].field == field) {\n return cc[i];\n }\n }\n return null;\n };\n\n const changeColumns = (): void => {\n if (hasDestroyed.value) {\n return;\n }\n if (columnTimer.value) {\n clearTimeout(columnTimer.value);\n }\n columnTimer.value = setTimeout(() => {\n initColumns();\n initHeaderHeight();\n columnTimer.value = null;\n }, 0);\n };\n\n const initColumns = (): void => {\n const newState: {\n leftGroup: any | null;\n leftColumns: any[] | null;\n rightGroup: any | null;\n rightColumns: any[] | null;\n centerGroup: any | null;\n centerColumns: any[] | null;\n } = {\n leftGroup: null,\n leftColumns: null,\n rightGroup: null,\n rightColumns: null,\n centerGroup: null,\n centerColumns: null\n };\n if (groupRefs.value && groupRefs.value.length) {\n groupRefs.value.forEach((g: any) => {\n const cc = getColumnLayout(g);\n const columns = cc[cc.length - 1];\n if (g.frozen) {\n if (g.align == 'left') {\n newState.leftGroup = g;\n newState.leftColumns = columns;\n } else {\n newState.rightGroup = g;\n newState.rightColumns = columns;\n }\n } else {\n newState.centerGroup = g;\n newState.centerColumns = columns;\n }\n });\n }\n if (!newState.centerColumns) {\n newState.centerColumns = columnRefs.value.filter((c: any) => {\n return !c.frozenState && !c.hidden;\n });\n const frozenColumns = columnRefs.value.filter((c: any) => {\n return c.frozenState && !c.hidden;\n });\n if (frozenColumns.length) {\n if (props.frozenAlign == 'left') {\n newState.leftColumns = frozenColumns;\n } else {\n newState.rightColumns = frozenColumns;\n }\n }\n }\n Object.assign({ leftGroup, rightGroup, centerGroup, leftColumns, rightColumns, centerColumns }, newState);\n leftGroup.value = newState.leftGroup;\n rightGroup.value = newState.rightGroup;\n centerGroup.value = newState.centerGroup;\n leftColumns.value = newState.leftColumns || [];\n rightColumns.value = newState.rightColumns || [];\n centerColumns.value = newState.centerColumns || [];\n allColumns.value.forEach((c: any) => (c.grid = proxy));\n initColumnSort();\n };\n\n const initHeaderHeight = (): void => {\n if (view1.value && view1.value.headerHeight) {\n view1.value.headerHeight(null);\n }\n if (view2.value && view2.value.headerHeight) {\n view2.value.headerHeight(null);\n }\n if (view3.value && view3.value.headerHeight) {\n view3.value.headerHeight(null);\n }\n nextTick(() => {\n const h1 = view1.value && view1.value.headerHeight ? view1.value.headerHeight() : 0;\n const h2 = view2.value && view2.value.headerHeight ? view2.value.headerHeight() : 0;\n const h3 = view3.value && view3.value.headerHeight ? view3.value.headerHeight() : 0;\n headerHeight.value = Math.max(h1, h2, h3);\n if (view1.value && view1.value.headerHeight) {\n view1.value.headerHeight(headerHeight.value);\n }\n if (view2.value && view2.value.headerHeight) {\n view2.value.headerHeight(headerHeight.value);\n }\n if (view3.value && view3.value.headerHeight) {\n view3.value.headerHeight(headerHeight.value);\n }\n });\n };\n\n const initFilterRules = (): void => {\n const filterRules = props.filterRules || [];\n filterRules.forEach((r: any) => {\n const col = findColumn(r.field);\n if (col) {\n col.filterValue = r.value;\n col.filterOperator = r.op;\n }\n });\n };\n\n const addColumn = (column: any): void => {\n columnRefs.value.push(column);\n changeColumns();\n };\n\n const removeColumn = (column: any): void => {\n const index = columnRefs.value.indexOf(column);\n if (index >= 0) {\n columnRefs.value.splice(index, 1);\n changeColumns();\n }\n };\n\n const addColumnGroup = (group: any): void => {\n groupRefs.value.push(group);\n changeColumns();\n };\n\n const removeColumnGroup = (group: any): void => {\n const index = groupRefs.value.indexOf(group);\n if (index >= 0) {\n groupRefs.value.splice(index, 1);\n changeColumns();\n }\n };\n\n const onBodyScroll = (event: any): void => {\n const top = event ? event.top : view2.value && view2.value.scrollTop ? view2.value.scrollTop() : 0;\n if (view1.value && view1.value.scrollTop) {\n view1.value.scrollTop(top);\n }\n if (view3.value && view3.value.scrollTop) {\n view3.value.scrollTop(top);\n }\n };\n\n const addSort = (col: any): void => {\n let index = -1;\n for (let i = 0; i < sortsState.value.length; i++) {\n if (sortsState.value[i].field == col.field) {\n index = i;\n break;\n }\n }\n if (index >= 0) {\n const nextOrder = sortsState.value[index].order == 'asc' ? 'desc' : 'asc';\n if (props.multiSort && nextOrder == col.order) {\n sortsState.value.splice(index, 1);\n } else {\n sortsState.value[index].order = nextOrder;\n }\n } else {\n if (props.multiSort) {\n sortsState.value.push({\n field: col.field,\n order: col.order || 'asc'\n });\n } else {\n sortsState.value = [\n {\n field: col.field,\n order: col.order || 'asc'\n }\n ];\n }\n }\n initColumnSort();\n };\n\n const addFilterRule = (rule: FilterRule): void => {\n (proxy as any)._listBase_addFilterRule?.(rule);\n const col = findColumn(rule.field);\n if (col) {\n col.filterValue = rule.value;\n col.filterOperator = rule.op;\n }\n };\n\n const resizeColumn = (field: string, width: number): void => {\n const col = findColumn(field);\n if (col) {\n col.widthState = domHelper.toStyleValue(width);\n emit('columnResize', col);\n }\n };\n\n const moveColumn = (fromField: string, toField: string, point: 'before' | 'after'): void => {\n const leftCount = (leftColumns.value || []).length;\n const centerCount = (centerColumns.value || []).length;\n const columnRefsCopy = columnRefs.value.slice();\n const fromIndex = columnRefsCopy.findIndex((col: any) => col.field === fromField);\n const fromCol = columnRefsCopy[fromIndex];\n columnRefsCopy.splice(fromIndex, 1);\n const toIndex = columnRefsCopy.findIndex((col: any) => col.field === toField);\n columnRefsCopy.splice(toIndex + (point === 'before' ? 0 : 1), 0, fromCol);\n for (let i = 0; i < columnRefsCopy.length; i++) {\n columnRefsCopy[i].frozenState = true;\n }\n for (let i = leftCount; i < leftCount + centerCount; i++) {\n columnRefsCopy[i].frozenState = false;\n }\n columnRefs.value = columnRefsCopy;\n splitStyle.value = undefined;\n nextTick(() => {\n emit('columnMove', {\n from: findColumn(fromField),\n to: findColumn(toField),\n point\n });\n });\n };\n\n const isEditing = (row: any, column: any = null): boolean => {\n if (props.editMode && editingItem.value) {\n if (props.editMode == 'cell' && editingItem.value.column != column) {\n return false;\n }\n const idField = (proxy as any).idField;\n if (idField) {\n if (editingItem.value.row[idField] == row[idField]) {\n return true;\n }\n } else {\n if (editingItem.value.row == row) {\n return true;\n }\n }\n }\n return false;\n };\n\n const beginEdit = (row: any, column: any = null, rowEl: HTMLElement | null = null): void => {\n if (!isEditing(row, column)) {\n endEdit();\n if (editingItem.value) {\n setTimeout(() => {\n if (props.editMode == 'row') {\n (proxy as any).selectRow(editingItem.value.row);\n } else if (props.editMode == 'cell') {\n (proxy as any).selectCell(editingItem.value.row, editingItem.value.column);\n }\n }, 0);\n return;\n }\n const originalValue = props.editMode == 'row' ? Object.assign({}, row) : row[column.field];\n editingItem.value = {\n row: row,\n column: column,\n originalValue: originalValue,\n element: rowEl\n };\n emit('editBegin', editingItem.value);\n }\n };\n\n const endEdit = (): void => {\n if (editingItem.value) {\n const el = editingItem.value.element as HTMLElement | null;\n if (el && el.querySelector('.validatebox-invalid')) {\n return;\n }\n if (editingItem.value.invalid) {\n return;\n }\n emit('editEnd', editingItem.value);\n editingItem.value = null;\n }\n };\n\n const cancelEdit = (): void => {\n if (editingItem.value) {\n const item = editingItem.value;\n editingItem.value = null;\n setTimeout(() => {\n if (props.editMode == 'cell') {\n item.row[item.column.field] = item.originalValue;\n } else {\n Object.assign(item.row, item.originalValue);\n }\n emit('editCancel', item);\n }, 0);\n }\n };\n\n const navRow = (step: number): void => {\n (proxy as any)._listBase_navRow?.(step);\n const rows = (proxy as any).rows || [];\n const highlightRow = (proxy as any).highlightRow;\n const index = rows.indexOf(highlightRow);\n if (index >= 0) {\n nextTick(() => {\n if (view2.value && view2.value.$refs && view2.value.$refs.body && view2.value.$refs.body.$refs) {\n const container = view2.value.$refs.body.$refs.bodyRef as HTMLElement | undefined;\n if (container) {\n const item = container.querySelector('.datagrid-row-over');\n if (item) {\n domHelper.scrollTo(container, item as HTMLElement);\n }\n }\n }\n });\n }\n };\n\n watch(groupRefs, () => {\n initColumns();\n initHeaderHeight();\n });\n\n watch(columnRefs, () => {\n initColumns();\n initHeaderHeight();\n });\n\n watch(\n () => props.filterRules,\n () => {\n initFilterRules();\n }\n );\n\n onMounted(() => {\n initColumnSort();\n hasDestroyed.value = false;\n initFilterRules();\n nextTick(() => initHeaderHeight());\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on('tabSelect', (tab: any) => {\n if (inst?.vnode.el && domHelper.isChild(inst.vnode.el as HTMLElement, tab.$el)) {\n if (!headerHeight.value) {\n initHeaderHeight();\n }\n }\n });\n eventHub.$on('panelSelect', (panel: any) => {\n if (inst?.vnode.el && domHelper.isChild(inst.vnode.el as HTMLElement, panel.$el)) {\n if (!headerHeight.value) {\n initHeaderHeight();\n }\n }\n });\n eventHub.$emit('gridMounted', proxy);\n }\n });\n\n onBeforeUnmount(() => {\n hasDestroyed.value = true;\n if (columnTimer.value) {\n clearTimeout(columnTimer.value);\n }\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$off('tabSelect');\n eventHub.$off('panelSelect');\n }\n });\n\n expose({\n addColumn,\n removeColumn,\n addColumnGroup,\n removeColumnGroup,\n findColumn,\n resizeColumn,\n moveColumn,\n addSort,\n addFilterRule,\n onBodyScroll,\n beginEdit,\n endEdit,\n cancelEdit,\n isEditing,\n navRow,\n initColumns,\n initHeaderHeight,\n initFilterRules\n });\n\n return {\n ...lb,\n leftGroup,\n rightGroup,\n centerGroup,\n leftColumns,\n rightColumns,\n centerColumns,\n allColumns,\n footerRows,\n leftFrozenWidth,\n rightFrozenWidth,\n sortsState,\n editingItem,\n headerHeight,\n splitStyle,\n view1,\n view2,\n view3\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { GridEmptyProps } from './types';\n\nexport default defineComponent({\n name: 'GridEmpty',\n props: {\n grid: Object as PropType<GridEmptyProps['grid']>\n } satisfies Record<keyof GridEmptyProps, any>,\n setup(props: GridEmptyProps) {\n return () => {\n const grid = props.grid as any;\n let content = null;\n if (grid && grid.$slots && grid.$slots['empty']) {\n content = grid.$slots['empty']();\n }\n if (content) {\n return <div class=\"datagrid-empty\">{content}</div>;\n } else {\n return null;\n }\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { h, defineComponent, PropType } from 'vue';\nimport type { GridHeaderCellProps } from './types';\n\nexport default defineComponent({\n name: 'GridHeaderCell',\n props: {\n column: Object as PropType<GridHeaderCellProps['column']>\n } satisfies Record<keyof GridHeaderCellProps, any>,\n setup(props: GridHeaderCellProps) {\n return () => {\n const column = props.column as any;\n if (!column) {\n return null;\n }\n let cell: any = null;\n if (column.$slots && column.$slots['header']) {\n cell = column.$slots['header']({ column: column });\n } else {\n cell = <span>{column.title || ''}</span>;\n }\n return h(\n 'div',\n {\n class: {\n 'datagrid-cell': true,\n 'datagrid-sort': column.field && column.sortable,\n 'datagrid-sort-asc': column.currOrder == 'asc',\n 'datagrid-sort-desc': column.currOrder == 'desc'\n },\n style: {\n 'text-align': column.halign || column.align || null\n }\n },\n [cell, h('span', { class: 'datagrid-sort-icon' })]\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch } from \"vue\";\nimport domHelper from \"../base/DomHelper\";\nimport DataList from \"../datalist/DataList\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useComboBase } from \"../base/useComboBase\";\nimport type { ComboBoxProps } from \"./types\";\n\nexport default defineComponent({\n name: \"ComboBox\",\n components: {\n DataList\n },\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: \"combo-arrow\"\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n panelAlign: {\n type: String as PropType<any>,\n default: \"left\"\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: \",\"\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n value: [String, Number, Array] as PropType<ComboBoxProps['value']>,\n modelValue: [String, Number, Array] as PropType<ComboBoxProps['modelValue']>,\n valueField: {\n type: String as PropType<ComboBoxProps['valueField']>,\n default: 'value'\n },\n textField: {\n type: String as PropType<ComboBoxProps['textField']>,\n default: 'text'\n },\n groupField: String as PropType<ComboBoxProps['groupField']>,\n limitToList: {\n type: Boolean as PropType<ComboBoxProps['limitToList']>,\n default: true\n },\n lazy: {\n type: Boolean as PropType<ComboBoxProps['lazy']>,\n default: false\n },\n virtualScroll: {\n type: Boolean as PropType<ComboBoxProps['virtualScroll']>,\n default: false\n },\n rowHeight: {\n type: Number as PropType<ComboBoxProps['rowHeight']>,\n default: 30\n },\n pageNumber: {\n type: Number as PropType<ComboBoxProps['pageNumber']>,\n default: 1\n },\n pageSize: {\n type: Number as PropType<ComboBoxProps['pageSize']>,\n default: 10\n },\n total: {\n type: Number as PropType<ComboBoxProps['total']>,\n default: 0\n },\n data: {\n type: Array as PropType<ComboBoxProps['data']>,\n default: () => []\n },\n filter: Function as PropType<ComboBoxProps['filter']>\n } satisfies Record<keyof ComboBoxProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'filterChange', 'selectionChange'],\n setup(props: any, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const mappingTexts = ref<Record<string, string>>({});\n const datalistScrollTop = ref(0);\n const scrollPosition = ref<number | null>(null);\n const inputingText = ref<string | null>(null);\n const displayingText = ref<string | null>(null);\n const lastFilterValue = ref<string | null>(null);\n const innerData = ref<Record<string, any>[]>([]);\n const items = ref<Record<string, any>[]>([]);\n const totalState = ref<number>(props.total || 0);\n const selection = ref<Record<string, any> | Record<string, any>[] | null>(null);\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n\n const datalistRef = ref<any>(null);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n function defaultFilter(q: string, item: Record<string, any>): boolean {\n const textField = props.textField || 'text';\n const index = String(item[textField]).toLowerCase().indexOf(q.trim().toLowerCase());\n return index !== -1;\n }\n\n function setText(value: string): void {\n cb.input.textState.value = value;\n }\n\n function updateSelection(rows: Record<string, any> | Record<string, any>[] | null): void {\n const oldSelection = selection.value;\n const arr = !rows ? [] : rows instanceof Array ? rows : [rows];\n if (props.multiple) {\n selection.value = arr;\n } else {\n selection.value = arr[0] || null;\n }\n if (selection.value !== oldSelection) {\n emit('selectionChange', selection.value);\n }\n }\n\n function findItem(value: any): Record<string, any> | null {\n const valueField = props.valueField || 'value';\n const finder = (val: any, it: Record<string, any>[] | null = null): Record<string, any> | null => {\n const list = it || (props.data || []);\n for (const item of list) {\n if (item[valueField] == val) return item;\n }\n return null;\n };\n\n let item = finder(value);\n if (!item && selection.value) {\n const selItems = selection.value instanceof Array ? selection.value : [selection.value];\n item = finder(value, selItems);\n }\n return item;\n }\n\n function updateText(): void {\n const valueState = cb.input.valueState.value;\n if (valueState == null) {\n if (datalistRef.value) {\n mappingTexts.value = {};\n }\n displayingText.value = null;\n updateSelection(null);\n return;\n }\n\n const mt: Record<string, string> = {};\n const tt: string[] = [];\n const multiple = !!props.multiple;\n const separator = props.separator || ',';\n const valueField = props.valueField || 'value';\n const textField = props.textField || 'text';\n\n if (multiple) {\n const rows: Record<string, any>[] = [];\n const vs = (valueState || []) as any[];\n for (const val of vs) {\n const item = findItem(val);\n if (item) {\n mt[val] = item[textField];\n rows.push(item);\n } else {\n mt[val] = mappingTexts.value[val] || String(val);\n const row: Record<string, any> = {};\n row[valueField] = val;\n row[textField] = mt[val];\n rows.push(row);\n }\n tt.push(mt[val]);\n }\n updateSelection(rows);\n } else {\n const val = valueState as any;\n const item = findItem(val);\n if (item) {\n mt[val] = item[textField];\n updateSelection(item);\n } else {\n mt[val] = mappingTexts.value[val] || String(val);\n const row: Record<string, any> = {};\n row[valueField] = val;\n row[textField] = mt[val];\n updateSelection(row);\n }\n tt.push(mt[val]);\n }\n\n mappingTexts.value = mt;\n displayingText.value = tt.join(separator);\n }\n\n function setData(value: Record<string, any>[] | null): void {\n const v = value || [];\n innerData.value = Object.assign([], v);\n items.value = innerData.value;\n updateText();\n }\n\n function clearSelections(): void {\n if (!selection.value) return;\n if (props.multiple) {\n const arr = selection.value as Record<string, any>[];\n if (arr.length) {\n selection.value = [];\n emit('selectionChange', selection.value);\n }\n } else {\n selection.value = null;\n emit('selectionChange', selection.value);\n }\n }\n\n function fixValue(): void {\n if (inputingText.value == null) return;\n const text = inputingText.value.trim();\n if (!text) {\n cb.input.setValue(null);\n clearSelections();\n return;\n }\n\n const multiple = !!props.multiple;\n const separator = props.separator || ',';\n\n if (multiple) {\n const vv: any[] = [];\n const used: string[] = [];\n const tt = text.split(separator).filter((t: string) => t.trim() != '');\n const valueState = (cb.input.valueState.value || []) as any[];\n\n for (const val of valueState) {\n const textVal = mappingTexts.value[val];\n if (tt.indexOf(textVal) != -1) {\n vv.push(val);\n used.push(textVal);\n }\n }\n if (!props.limitToList) {\n const remaining = tt.filter((t: string) => used.indexOf(t) == -1);\n if (remaining.length) vv.push(...remaining);\n }\n if (valueState.join('') != vv.join('')) cb.input.setValue(vv);\n } else {\n if (inputingText.value != displayingText.value) {\n clearSelections();\n cb.input.setValue(props.limitToList ? null : inputingText.value);\n }\n }\n inputingText.value = null;\n }\n\n function onBlur(): void {\n if (!cb.panelClosed.value) {\n fixValue();\n }\n }\n\n function doFilter(value: string): void {\n if (lastFilterValue.value == value) return;\n value = (value || '').trim();\n\n const lazy = !!props.lazy;\n if (!lazy) {\n if (value) {\n let val = value;\n if (props.multiple) {\n const tt = value.split(props.separator || ',');\n val = tt[tt.length - 1] || '';\n }\n const filter = props.filter || defaultFilter;\n items.value = innerData.value.filter(item => filter.call(proxy, val.trim(), item));\n } else {\n items.value = innerData.value;\n }\n totalState.value = items.value.length;\n nextTick(() => {\n datalistRef.value?.highlightFirstRow?.();\n });\n }\n\n lastFilterValue.value = value;\n emit('filterChange', {\n pageNumber: 1,\n pageSize: props.pageSize || 10,\n filterValue: value\n });\n }\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n inputingText.value = cb.input.textState.value;\n if (cb.panelClosed.value) openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => doFilter(cb.input.textState.value), props.delay || 200);\n }\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n if (cb.panelClosed.value && event.which == 40) {\n openPanel();\n event.preventDefault();\n return;\n }\n const datalist = datalistRef.value;\n if (!datalist) return;\n\n switch (event.which) {\n case 40:\n datalist.navRow?.(1);\n event.preventDefault();\n break;\n case 38:\n datalist.navRow?.(-1);\n event.preventDefault();\n break;\n case 13:\n if (datalist.highlightRow) {\n datalist.doEnter?.();\n if (!props.multiple) closePanel();\n cb.input.textState.value = displayingText.value || '';\n }\n event.preventDefault();\n break;\n case 9:\n fixValue();\n closePanel();\n break;\n case 27:\n closePanel();\n cb.input.textState.value = displayingText.value || '';\n event.preventDefault();\n break;\n }\n }\n\n function onRowClick(): void {\n if (!props.multiple) closePanel();\n }\n\n function onSelectionChange(event: Record<string, any> | Record<string, any>[] | null): void {\n inputingText.value = null;\n if (event == null) {\n cb.input.setValue(null);\n selection.value = null;\n return;\n }\n const valueField = props.valueField || 'value';\n if (props.multiple) {\n const eventArray = event as Record<string, any>[];\n cb.input.setValue(eventArray.map(row => row[valueField]));\n } else {\n const eventObj = event as Record<string, any>;\n cb.input.setValue(eventObj[valueField]);\n }\n }\n\n function onPageChange(event: Record<string, any>): void {\n emit('filterChange', Object.assign(event, { filterValue: lastFilterValue.value }));\n }\n\n function initTextMapping(): void {\n const selectionValue = (props as any).selectionValue;\n if (!selectionValue) return;\n const valueField = props.valueField || 'value';\n const textField = props.textField || 'text';\n\n const mt = mappingTexts.value;\n if (selectionValue instanceof Array) {\n selectionValue.forEach((row: Record<string, any>) => {\n mt[row[valueField]] = row[textField];\n });\n } else {\n mt[selectionValue[valueField]] = selectionValue[textField];\n }\n mappingTexts.value = { ...mt };\n }\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: () => {\n fb0.afterValueChange();\n updateText();\n },\n afterBlur: () => {\n fb0.afterBlur();\n onBlur();\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n if (props.editable !== false && !cb.input.focused.value) {\n doFilter('');\n }\n },\n closePanel: () => {\n if (!cb.panelClosed.value) {\n const datalist = datalistRef.value;\n if (datalist && typeof datalist.scrollTop === 'function') {\n scrollPosition.value = datalist.scrollTop();\n datalistScrollTop.value = datalist.scrollTop();\n }\n }\n cb.closePanelRaw();\n }\n });\n\n const displayText = computed(() => {\n if (!cb.input.focused.value) {\n if (cb.input.valueState.value != null && displayingText.value == null) {\n updateText();\n }\n const textFormatter = props.textFormatter || cb.input.defaultTextFormatter;\n const ftext = textFormatter(displayingText.value);\n setText(ftext);\n }\n return cb.input.textState.value;\n });\n\n watch(\n () => props.total,\n (v: number) => {\n totalState.value = v;\n }\n );\n\n watch(\n () => props.data,\n (v: Record<string, any>[]) => {\n setData(v);\n initTextMapping();\n }\n );\n\n // openPanel/closePanel 通过 useComboBase overrides 实现(确保 togglePanel/箭头点击走“重写逻辑”)\n const openPanel = cb.openPanel;\n const closePanel = cb.closePanel;\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderContent() {\n const textField = props.textField || 'text';\n const listslots = {\n default: (scope: any) => (slots['item'] ? slots['item'](scope) : scope.row[textField]),\n empty: slots['empty']\n };\n return (\n <DataList\n ref={datalistRef}\n class=\"f-full\"\n style=\"height:100%\"\n itemCls=\"combobox-item\"\n hoverCls=\"combobox-item-hover\"\n selectedCls=\"combobox-item-selected\"\n border={false}\n data={items.value}\n lazy={props.lazy}\n virtualScroll={props.virtualScroll}\n total={totalState.value}\n pageNumber={props.pageNumber}\n pageSize={props.pageSize}\n rowHeight={props.rowHeight}\n selectionMode={props.multiple ? 'multiple' : 'single'}\n idField={props.valueField}\n selection={selection.value}\n scrollPosition={scrollPosition.value}\n onRowClick={onRowClick}\n onSelectionChange={onSelectionChange}\n onPageChange={onPageChange}\n v-slots={listslots}\n ></DataList>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n onMounted(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.bind(el, 'keydown', onKeyDown);\n setData(props.data || []);\n initTextMapping();\n });\n\n onBeforeUnmount(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.unbind(el, 'keydown', onKeyDown);\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n });\n\n expose({ setData, setText, doFilter, openPanel, closePanel, togglePanel: cb.togglePanel });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: displayText.value, onInput })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport ComboBox from '../combobox/ComboBox';\nimport type { FilterRule } from '../base/types';\nimport type { GridFilterButtonProps } from './types';\n\nexport default defineComponent({\n name: 'GridFilterButton',\n props: {\n arrowIconCls: {\n type: String as PropType<GridFilterButtonProps['arrowIconCls']>,\n default: 'icon-filter'\n },\n panelStyle: {\n type: Object as PropType<GridFilterButtonProps['panelStyle']>,\n default: () => ({ height: 'auto', width: '150px' })\n },\n inputStyle: {\n type: Object as PropType<GridFilterButtonProps['inputStyle']>,\n default: () => ({ display: 'none' })\n },\n editable: {\n type: Boolean as PropType<GridFilterButtonProps['editable']>,\n default: false\n },\n column: Object as PropType<GridFilterButtonProps['column']>,\n value: [String, null] as PropType<GridFilterButtonProps['value']>\n } satisfies Record<keyof GridFilterButtonProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'selectionChange'],\n setup(props: GridFilterButtonProps, { emit, slots, expose }) {\n const cbRef = ref<any>(null);\n\n function initData(): void {\n const column = props.column as any;\n if (!column || !column.filterOperators || !column.filterOperators.length) return;\n const grid = column.grid;\n if (!grid || !grid.filterOperators) return;\n\n const filterOperators = grid.filterOperators;\n const data = column.filterOperators.map((op: string) => {\n const operator = filterOperators[op];\n return {\n value: op,\n text: operator ? operator.text : op\n };\n });\n cbRef.value?.setData?.(data);\n\n const rule = grid.getFilterRule ? grid.getFilterRule(column.field) : null;\n column.filterOperator = rule ? rule.op : null;\n }\n\n function onSelectionChange(event: any): void {\n emit('selectionChange', event);\n if (!event) return;\n\n const column = props.column as any;\n if (!column) return;\n\n const value = event.value;\n if (!value) {\n column.filterOperator = null;\n column.filterValue = null;\n column.grid?.removeFilterRule?.(column.field);\n return;\n }\n\n const grid = column.grid;\n if (!grid) return;\n\n if (value === 'nofilter') {\n column.filterOperator = null;\n column.filterValue = null;\n grid.removeFilterRule?.(column.field);\n grid.doFilter?.();\n } else if (column.filterValue != null && column.filterValue !== '') {\n column.filterOperator = value;\n grid.addFilterRule?.({\n field: column.field,\n op: value,\n value: column.filterValue\n } as FilterRule);\n grid.doFilter?.();\n }\n }\n\n onMounted(() => {\n // 等 ComboBox 挂载后再 init(保证 setData 可用)\n setTimeout(() => initData(), 0);\n });\n\n expose({\n openPanel: () => cbRef.value?.openPanel?.(),\n closePanel: () => cbRef.value?.closePanel?.(),\n togglePanel: () => cbRef.value?.togglePanel?.(),\n setData: (d: any[]) => cbRef.value?.setData?.(d)\n });\n\n return () => (\n <ComboBox\n ref={cbRef}\n {...(props as any)}\n modelValue={props.value as any}\n onUpdate:modelValue={(v: any) => emit('update:modelValue', v)}\n onValueChange={(e: any) => emit('valueChange', e)}\n onFocus={() => emit('focus')}\n onBlur={() => emit('blur')}\n onSelectionChange={onSelectionChange}\n v-slots={slots}\n />\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { h, defineComponent, PropType, watch, ref } from 'vue';\nimport GridFilterButton from './GridFilterButton';\nimport type { GridFilterCellProps } from './types';\n\nexport default defineComponent({\n name: 'GridFilterCell',\n props: {\n column: Object as PropType<GridFilterCellProps['column']>,\n grid: Object as PropType<GridFilterCellProps['grid']>\n } satisfies Record<keyof GridFilterCellProps, any>,\n setup(props: GridFilterCellProps) {\n const inputRef = ref<HTMLInputElement | null>(null);\n\n // const filterValue = computed(() => {\n // const column = props.column as any;\n // return column ? column.filterValue : null;\n // });\n\n watch(\n () => (props.column as any)?.filterValue,\n (value: any) => {\n if (inputRef.value) {\n inputRef.value.value = value || '';\n }\n }\n );\n\n const isOnLeft = (): boolean => {\n const column = props.column as any;\n const grid = props.grid as any;\n if (column && column.filterOperators && column.filterOperators.length) {\n if (grid && grid.filterBtnPosition == 'left') {\n return true;\n }\n }\n return false;\n };\n\n const isOnRight = (): boolean => {\n const column = props.column as any;\n const grid = props.grid as any;\n if (column && column.filterOperators && column.filterOperators.length) {\n if (grid && grid.filterBtnPosition == 'right') {\n return true;\n }\n }\n return false;\n };\n\n return () => {\n const column = props.column as any;\n let leftButton: any = null;\n if (isOnLeft()) {\n leftButton = (\n <GridFilterButton\n class=\"datagrid-filter-btn datagrid-filter-btn-left f-noshrink\"\n column={column}\n value={column ? column.filterOperator : null}\n />\n );\n }\n let rightButton: any = null;\n if (isOnRight()) {\n rightButton = (\n <GridFilterButton\n class=\"datagrid-filter-btn datagrid-filter-btn-right f-noshrink\"\n column={column}\n value={column ? column.filterOperator : null}\n />\n );\n }\n\n let cell: any = null;\n if (column && column.$slots && column.$slots['filter']) {\n cell = column.$slots['filter']({ column: column });\n } else {\n cell = (\n <input\n ref={inputRef}\n class=\"datagrid-editable-input datagrid-filter f-full\"\n value={column ? column.filterValue : ''}\n onInput={(event: Event) => {\n const target = event.target as HTMLInputElement;\n if (column) {\n column.filterValue = target.value;\n }\n }}\n />\n );\n }\n return h(\n 'div',\n {\n class: 'datagrid-filter-c f-row'\n },\n [leftButton, cell, rightButton]\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport GridFilterCell from './GridFilterCell';\nimport type { GridFilterRowProps } from './types';\n\nexport default defineComponent({\n name: 'GridFilterRow',\n props: {\n columns: Array as PropType<GridFilterRowProps['columns']>,\n grid: Object as PropType<GridFilterRowProps['grid']>\n } satisfies Record<keyof GridFilterRowProps, any>,\n setup(props: GridFilterRowProps) {\n return () => {\n const columns = props.columns || [];\n const grid = props.grid as any;\n return (\n <tr class=\"datagrid-header-row datagrid-filter-row\">\n {columns.map((col: any, index: number) => (\n <td key={index}>\n <GridFilterCell column={col} grid={grid}></GridFilterCell>\n </td>\n ))}\n </tr>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport domHelper from '../base/DomHelper';\nimport { MyEvent } from '../base/DomHelper';\nimport type { ResizableOptions, ResizableState, ResizableClass as IResizableClass } from './types';\n\nexport class ResizableClass implements IResizableClass {\n $el: HTMLElement;\n disabled: boolean = false;\n handles: string = 'all';\n edge: number = 5;\n minWidth: number = 10;\n minHeight: number = 10;\n maxWidth: number = 10000;\n maxHeight: number = 10000;\n resizeStart: (state: ResizableState) => void = () => {};\n resizing: (state: ResizableState) => void = () => {};\n resizeStop: (state: ResizableState) => void = () => {};\n state: ResizableState | null = null;\n isResizing: boolean = false;\n\n constructor(el: HTMLElement, value: ResizableOptions | null = null) {\n this.updateOptions(value);\n this.$el = el;\n }\n\n updateOptions(value: ResizableOptions | null = null): void {\n const opts: ResizableOptions = Object.assign({\n disabled: false,\n handles: 'all',\n edge: 5,\n minWidth: 10,\n minHeight: 10,\n maxWidth: 10000,\n maxHeight: 10000,\n resizeStart: () => {},\n resizing: () => {},\n resizeStop: () => {}\n }, this, value || {});\n Object.assign(this, opts);\n }\n\n bindEvents(): void {\n (this.$el as any)._downHandler = (e: MouseEvent | TouchEvent) => {\n this.onMouseDown(e);\n };\n (this.$el as any)._moveHandler = (e: MouseEvent | TouchEvent) => {\n this.onMouseMove(e);\n };\n (this.$el as any)._leaveHandler = (_e: MouseEvent | TouchEvent) => {\n this.onMouseLeave();\n };\n domHelper.bind(this.$el, 'mousedown', (this.$el as any)._downHandler);\n domHelper.bind(this.$el, 'touchstart', (this.$el as any)._downHandler);\n domHelper.bind(this.$el, 'mousemove', (this.$el as any)._moveHandler);\n domHelper.bind(this.$el, 'touchmove', (this.$el as any)._moveHandler);\n domHelper.bind(this.$el, 'mouseleave', (this.$el as any)._leaveHandler);\n domHelper.bind(this.$el, 'touchcancel', (this.$el as any)._leaveHandler);\n domHelper.bind(this.$el, 'touchend', (this.$el as any)._leaveHandler);\n }\n\n unbindEvents(): void {\n domHelper.unbind(this.$el, 'mousedown', (this.$el as any)._downHandler);\n domHelper.unbind(this.$el, 'touchstart', (this.$el as any)._downHandler);\n domHelper.unbind(this.$el, 'mousemove', (this.$el as any)._moveHandler);\n domHelper.unbind(this.$el, 'touchmove', (this.$el as any)._moveHandler);\n domHelper.unbind(this.$el, 'mouseleave', (this.$el as any)._leaveHandler);\n domHelper.unbind(this.$el, 'touchcancel', (this.$el as any)._leaveHandler);\n domHelper.unbind(this.$el, 'touchend', (this.$el as any)._leaveHandler);\n }\n\n parseEvent(event: MouseEvent | TouchEvent): any {\n return new MyEvent(event as any);\n }\n\n onMouseDown(event: MouseEvent | TouchEvent): void {\n if (this.disabled) {\n return;\n }\n const e = this.parseEvent(event);\n const dir = this.getDirection(e);\n if (!dir) {\n return;\n }\n e.preventDefault();\n const style = getComputedStyle(this.$el);\n this.state = {\n target: this.$el,\n dir: dir,\n width: domHelper.outerWidth(this.$el),\n height: domHelper.outerHeight(this.$el),\n startWidth: domHelper.outerWidth(this.$el),\n startHeight: domHelper.outerHeight(this.$el),\n startX: e.pageX,\n startY: e.pageY,\n left: parseInt(style.left) || 0,\n top: parseInt(style.top) || 0,\n startLeft: parseInt(style.left) || 0,\n startTop: parseInt(style.top) || 0\n };\n this.isResizing = true;\n document.body.style.cursor = dir ? dir + '-resize' : '';\n this.bindDocumentEvents();\n this.resizeStart(this.state);\n }\n\n onMouseMove(event: MouseEvent | TouchEvent): void {\n if (this.disabled) {\n return;\n }\n if (this.isResizing) {\n return;\n }\n const e = this.parseEvent(event);\n const dir = this.getDirection(e);\n this.$el.style.cursor = dir ? dir + '-resize' : '';\n (this.$el as any).resizeCursor = dir ? dir + '-resize' : '';\n }\n\n onMouseLeave(): void {\n if (this.disabled) {\n return;\n }\n this.$el.style.cursor = '';\n (this.$el as any).resizeCursor = '';\n }\n\n doMove(event: MouseEvent | TouchEvent): boolean {\n if (!this.isResizing) {\n return false;\n }\n const e = this.parseEvent(event);\n this.doResize(e);\n this.applySize();\n if (this.state) {\n this.resizing(this.state);\n }\n return false;\n }\n\n doUp(event: MouseEvent | TouchEvent): boolean {\n const e = this.parseEvent(event);\n this.isResizing = false;\n document.body.style.cursor = '';\n this.doResize(e);\n this.applySize();\n this.unbindDocumentEvents();\n if (this.state) {\n this.resizeStop(this.state);\n }\n return false;\n }\n\n getDirection(e: any): string {\n let dir = '';\n const offset = domHelper.offset(this.$el);\n const width = domHelper.outerWidth(this.$el);\n const height = domHelper.outerHeight(this.$el);\n if (e.pageY > offset.top && e.pageY < offset.top + this.edge) {\n dir += 'n';\n } else if (e.pageY < offset.top + height && e.pageY > offset.top + height - this.edge) {\n dir += 's';\n }\n if (e.pageX > offset.left && e.pageX < offset.left + this.edge) {\n dir += 'w';\n } else if (e.pageX < offset.left + width && e.pageX > offset.left + width - this.edge) {\n dir += 'e';\n }\n \n const handles = this.handles.split(',').map(h => h.trim().toLowerCase());\n if (handles.indexOf('all') >= 0 || handles.indexOf(dir) >= 0) {\n return dir;\n }\n for (let i = 0; i < dir.length; i++) {\n const index = handles.indexOf(dir.substr(i, 1));\n if (index >= 0) {\n return handles[index];\n }\n }\n return '';\n }\n\n doResize(e: any): void {\n if (!this.state) {\n return;\n }\n const resizeData = this.state;\n if (resizeData.dir.indexOf('e') != -1) {\n let width = resizeData.startWidth + e.pageX - resizeData.startX;\n width = Math.min(\n Math.max(width, this.minWidth),\n this.maxWidth\n );\n resizeData.width = width;\n }\n if (resizeData.dir.indexOf('s') != -1) {\n let height = resizeData.startHeight + e.pageY - resizeData.startY;\n height = Math.min(\n Math.max(height, this.minHeight),\n this.maxHeight\n );\n resizeData.height = height;\n }\n if (resizeData.dir.indexOf('w') != -1) {\n let width = resizeData.startWidth - e.pageX + resizeData.startX;\n width = Math.min(\n Math.max(width, this.minWidth),\n this.maxWidth\n );\n resizeData.width = width;\n resizeData.left = resizeData.startLeft + resizeData.startWidth - resizeData.width;\n }\n if (resizeData.dir.indexOf('n') != -1) {\n let height = resizeData.startHeight - e.pageY + resizeData.startY;\n height = Math.min(\n Math.max(height, this.minHeight),\n this.maxHeight\n );\n resizeData.height = height;\n resizeData.top = resizeData.startTop + resizeData.startHeight - resizeData.height;\n }\n }\n\n applySize(): void {\n if (!this.state) {\n return;\n }\n this.$el.style.left = this.state.left + 'px';\n this.$el.style.top = this.state.top + 'px';\n if (this.state.width != this.state.startWidth) {\n this.$el.style.width = this.state.width + 'px';\n }\n if (this.state.height != this.state.startHeight) {\n this.$el.style.height = this.state.height + 'px';\n }\n }\n\n bindDocumentEvents(): void {\n (this.$el as any)._docMoveHandler = (e: MouseEvent | TouchEvent) => {\n this.doMove(e);\n };\n (this.$el as any)._docUpHandler = (e: MouseEvent | TouchEvent) => {\n this.doUp(e);\n };\n domHelper.bind(document.body, 'mousemove', (this.$el as any)._docMoveHandler);\n domHelper.bind(document.body, 'touchmove', (this.$el as any)._docMoveHandler);\n domHelper.bind(document.body, 'mouseup', (this.$el as any)._docUpHandler);\n domHelper.bind(document.body, 'touchend', (this.$el as any)._docUpHandler);\n }\n\n unbindDocumentEvents(): void {\n domHelper.unbind(document.body, 'mousemove', (this.$el as any)._docMoveHandler);\n domHelper.unbind(document.body, 'touchmove', (this.$el as any)._docMoveHandler);\n domHelper.unbind(document.body, 'mouseup', (this.$el as any)._docUpHandler);\n domHelper.unbind(document.body, 'touchend', (this.$el as any)._docUpHandler);\n }\n}\n\nexport default ResizableClass;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { ObjectDirective } from 'vue';\nimport ResizableClass from './ResizableClass';\nimport type { ResizableOptions } from './types';\n\ntype NamedDirective<T, V> = ObjectDirective<T, V> & { name: string };\n\nexport interface HTMLElementWithResizeInstance extends HTMLElement {\n _resizeInstance?: ResizableClass;\n _downHandler?: (e: MouseEvent | TouchEvent) => void;\n _moveHandler?: (e: MouseEvent | TouchEvent) => void;\n _leaveHandler?: (e: MouseEvent | TouchEvent) => void;\n _docMoveHandler?: (e: MouseEvent | TouchEvent) => boolean;\n _docUpHandler?: (e: MouseEvent | TouchEvent) => boolean;\n resizeCursor?: string;\n}\n\nconst Resizable: NamedDirective<HTMLElementWithResizeInstance, ResizableOptions | undefined> = {\n name: 'Resizable',\n mounted(el: HTMLElementWithResizeInstance, binding) {\n el._resizeInstance = new ResizableClass(el, binding.value);\n el._resizeInstance.bindEvents();\n },\n updated(el: HTMLElementWithResizeInstance, binding) {\n if (el._resizeInstance) {\n el._resizeInstance.updateOptions(binding.value);\n }\n },\n beforeUnmount(el: HTMLElementWithResizeInstance) {\n if (el._resizeInstance) {\n el._resizeInstance.unbindEvents();\n }\n }\n};\n\nexport default Resizable;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport domHelper from '../base/DomHelper';\nimport { MyEvent } from '../base/DomHelper';\nimport type { DraggableOptions, DraggableState, DroppableObject, DraggableClass as IDraggableClass, DraggableProxyInstance } from './types';\n\nexport class DraggableClass implements IDraggableClass {\n $el: HTMLElement;\n scope: any;\n handle: string | HTMLElement | null = null;\n disabled: boolean = false;\n revert: boolean = false;\n deltaX: number | null = null;\n deltaY: number | null = null;\n edge: number = 0;\n delay: number = 100;\n axis: 'v' | 'h' | null = null;\n cursor: string = 'move';\n proxy: DraggableProxyInstance | null = null;\n dragStart: (state: DraggableState) => void = () => {};\n drag: (state: DraggableState) => void = () => {};\n dragEnd: (state: DraggableState) => void = () => {};\n state: DraggableState | null;\n isDragging: boolean;\n currDroppable: DroppableObject | null;\n entered: boolean;\n\n static droppables: DroppableObject[] = [];\n\n constructor(el: HTMLElement, value: DraggableOptions | null = null) {\n this.updateOptions(value);\n this.$el = el;\n this.state = null;\n this.isDragging = false;\n this.currDroppable = null;\n this.entered = false;\n }\n\n updateOptions(value: DraggableOptions | null = null): void {\n const opts: DraggableOptions = Object.assign({\n scope: null,\n handle: null,\n disabled: false,\n revert: false,\n deltaX: null,\n deltaY: null,\n edge: 0,\n delay: 100,\n axis: null,\n cursor: 'move',\n proxy: null,\n dragStart: () => {},\n drag: () => {},\n dragEnd: () => {}\n }, this, value || {});\n Object.assign(this, opts);\n }\n\n bindEvents(): void {\n (this.$el as any)._downHandler = (e: MouseEvent | TouchEvent) => {\n this.onMouseDown(e);\n };\n (this.$el as any)._moveHandler = (e: MouseEvent | TouchEvent) => {\n this.onMouseMove(e);\n };\n (this.$el as any)._leaveHandler = (_e: MouseEvent | TouchEvent) => {\n this.onMouseLeave();\n };\n domHelper.bind(this.$el, 'mousedown', (this.$el as any)._downHandler);\n domHelper.bind(this.$el, 'touchstart', (this.$el as any)._downHandler);\n domHelper.bind(this.$el, 'mousemove', (this.$el as any)._moveHandler);\n domHelper.bind(this.$el, 'touchmove', (this.$el as any)._moveHandler);\n domHelper.bind(this.$el, 'mouseleave', (this.$el as any)._leaveHandler);\n domHelper.bind(this.$el, 'touchcancel', (this.$el as any)._leaveHandler);\n domHelper.bind(this.$el, 'touchend', (this.$el as any)._leaveHandler);\n }\n\n unbindEvents(): void {\n domHelper.unbind(this.$el, 'mousedown', (this.$el as any)._downHandler);\n domHelper.unbind(this.$el, 'touchstart', (this.$el as any)._downHandler);\n domHelper.unbind(this.$el, 'mousemove', (this.$el as any)._moveHandler);\n domHelper.unbind(this.$el, 'touchmove', (this.$el as any)._moveHandler);\n domHelper.unbind(this.$el, 'mouseleave', (this.$el as any)._leaveHandler);\n domHelper.unbind(this.$el, 'touchcancel', (this.$el as any)._leaveHandler);\n domHelper.unbind(this.$el, 'touchend', (this.$el as any)._leaveHandler);\n }\n\n parseEvent(event: MouseEvent | TouchEvent): any {\n return new MyEvent(event as any);\n }\n\n getHandle(): HTMLElement {\n if (this.handle) {\n if (this.handle instanceof Element) {\n return this.handle as HTMLElement;\n } else {\n const el = this.$el.querySelector(this.handle as string);\n return el as HTMLElement || this.$el;\n }\n } else {\n return this.$el;\n }\n }\n\n checkArea(e: any): boolean {\n const handle = this.getHandle();\n const offset = domHelper.offset(handle);\n const width = domHelper.outerWidth(handle);\n const height = domHelper.outerHeight(handle);\n const t = e.pageY - offset.top;\n const r = offset.left + width - e.pageX;\n const b = offset.top + height - e.pageY;\n const l = e.pageX - offset.left;\n \n return Math.min(t, r, b, l) > this.edge;\n }\n\n doMove(event: MouseEvent | TouchEvent): boolean {\n const e = this.parseEvent(event);\n if (!this.state) {\n return false;\n }\n this.state.pageX = e.pageX;\n this.state.pageY = e.pageY;\n const x1 = e.pageX;\n const y1 = e.pageY;\n const x2 = this.state.startX;\n const y2 = this.state.startY;\n const d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n if (d > 3 && !this.isDragging) {\n this.isDragging = true;\n if (this.proxy) {\n this.proxy.closed = false;\n } else {\n this.$el.style.position = 'absolute';\n }\n this.doDrag(e);\n this.applyDrag();\n this.dragStart(this.state);\n return false;\n }\n if (this.isDragging) {\n this.doDrag(e);\n this.applyDrag();\n this.checkDrag(e);\n this.drag(this.state);\n }\n return false;\n }\n\n doUp(event: MouseEvent | TouchEvent): boolean {\n if (!this.isDragging) {\n this.clearDragging();\n return false;\n }\n const e = this.parseEvent(event);\n this.doMove(e);\n if (this.revert) {\n if (this.checkDrop(e)) {\n this.restorePosition();\n } else {\n this.revertPosition();\n }\n } else {\n this.$el.style.position = 'absolute';\n if (this.state) {\n this.$el.style.left = this.state.left + 'px';\n this.$el.style.top = this.state.top + 'px';\n }\n this.checkDrop(e);\n }\n this.clearDragging();\n if (this.state) {\n this.dragEnd(this.state);\n }\n return false;\n }\n\n doDrag(e: any): void {\n if (!this.state) {\n return;\n }\n const dragData = this.state;\n let left = 0;\n let top = 0;\n if (this.proxy) {\n this.proxy.reverting = false;\n if (this.deltaX != null) {\n left = e.pageX + this.deltaX;\n } else {\n left = e.pageX - dragData.offsetWidth;\n }\n if (this.deltaY != null) {\n top = e.pageY + this.deltaY;\n } else {\n top = e.pageY - dragData.offsetHeight;\n }\n } else {\n left = dragData.startLeft + e.pageX - dragData.startX;\n top = dragData.startTop + e.pageY - dragData.startY;\n }\n const parentNode = this.$el.parentNode as HTMLElement;\n if (parentNode && parentNode != document.body) {\n left += parentNode.scrollLeft;\n top += parentNode.scrollTop;\n }\n if (this.axis == 'h') {\n dragData.left = left;\n } else if (this.axis == 'v') {\n dragData.top = top;\n } else {\n dragData.left = left;\n dragData.top = top;\n }\n }\n\n applyDrag(): void {\n if (!this.state) {\n return;\n }\n if (this.proxy) {\n this.proxy.left = this.state.left;\n this.proxy.top = this.state.top;\n } else {\n this.$el.style.left = this.state.left + 'px';\n this.$el.style.top = this.state.top + 'px';\n }\n document.body.style.cursor = this.cursor;\n }\n\n clearDragging(): void {\n this.unbindDocumentEvents();\n this.isDragging = false;\n setTimeout(() => {\n document.body.style.cursor = '';\n }, 0);\n }\n\n findDroppable(e: any): DroppableObject | null {\n for (let i = DraggableClass.droppables.length - 1; i >= 0; i--) {\n const dropObj = DraggableClass.droppables[i];\n if (dropObj.disabled) {\n continue;\n }\n if (dropObj.$el == this.$el) {\n continue;\n }\n const p2 = domHelper.offset(dropObj.$el);\n const width = domHelper.outerWidth(dropObj.$el);\n const height = domHelper.outerHeight(dropObj.$el);\n if (e.pageX > p2.left && e.pageX < p2.left + width\n && e.pageY > p2.top && e.pageY < p2.top + height) {\n if (dropObj.checkDrop && dropObj.checkDrop(this.scope)) {\n return dropObj;\n }\n }\n }\n return null;\n }\n\n checkDrag(e: any): void {\n const dropObj = this.findDroppable(e);\n if (this.currDroppable && this.currDroppable != dropObj) {\n if (this.entered) {\n this.entered = false;\n if (this.currDroppable.dragLeave) {\n this.currDroppable.dragLeave(this.scope);\n }\n this.currDroppable = null;\n }\n }\n if (dropObj) {\n this.currDroppable = dropObj;\n if (!this.entered) {\n this.entered = true;\n if (dropObj.dragEnter) {\n dropObj.dragEnter(this.scope);\n }\n }\n if (dropObj.dragOver) {\n dropObj.dragOver(this.scope);\n }\n }\n }\n\n checkDrop(e: any): boolean {\n const dropObj = this.findDroppable(e);\n if (dropObj) {\n if (this.revert) {\n this.restorePosition();\n }\n this.removeProxy();\n this.entered = false;\n if (dropObj.drop) {\n dropObj.drop(this.scope);\n }\n return true;\n }\n if (!this.revert) {\n this.removeProxy();\n }\n return false;\n }\n\n removeProxy(): void {\n if (this.proxy) {\n this.proxy.reverting = false;\n this.proxy.closed = true;\n }\n }\n\n revertPosition(): void {\n if (!this.state) {\n return;\n }\n if (this.proxy) {\n if (this.state.startX != this.state.left || this.state.startY != this.state.top) {\n this.proxy.reverting = true;\n this.proxy.left = this.state.startX - this.state.offsetWidth;\n this.proxy.top = this.state.startY - this.state.offsetHeight;\n } else {\n this.proxy.closed = true;\n }\n } else {\n (this.$el as any)._transitionendHandler = () => {\n domHelper.removeClass(this.$el, 'draggable-reverting');\n if (this.state) {\n this.$el.style.position = this.state.startPosition;\n }\n domHelper.unbind(this.$el, 'transitionend');\n };\n domHelper.bind(this.$el, 'transitionend', (this.$el as any)._transitionendHandler);\n domHelper.addClass(this.$el, 'draggable-reverting');\n this.$el.style.left = this.state.startLeft + 'px';\n this.$el.style.top = this.state.startTop + 'px';\n }\n }\n\n restorePosition(): void {\n if (!this.state) {\n return;\n }\n this.$el.style.position = this.state.startPosition;\n this.$el.style.left = this.state.startLeft + 'px';\n this.$el.style.top = this.state.startTop + 'px';\n }\n\n onMouseDown(event: MouseEvent | TouchEvent): void {\n if (this.disabled) {\n return;\n }\n const e = this.parseEvent(event);\n if (this.checkArea(e) == false) {\n return;\n }\n e.preventDefault();\n const handle = this.getHandle();\n const style = getComputedStyle(this.$el);\n const position = domHelper.position(this.$el);\n const offset = domHelper.offset(this.$el);\n this.state = {\n target: this,\n startPosition: style.position,\n startLeft: position.left,\n startTop: position.top,\n left: position.left,\n top: position.top,\n startX: e.pageX,\n startY: e.pageY,\n width: domHelper.outerWidth(this.$el),\n height: domHelper.outerHeight(this.$el),\n offsetWidth: e.pageX - offset.left,\n offsetHeight: e.pageY - offset.top,\n pageX: e.pageX,\n pageY: e.pageY\n };\n handle.style.cursor = '';\n this.bindDocumentEvents();\n }\n\n onMouseMove(event: MouseEvent | TouchEvent): void {\n if (this.disabled) {\n return;\n }\n if (this.isDragging) {\n return;\n }\n const e = this.parseEvent(event);\n const handle = this.getHandle();\n if (this.checkArea(e)) {\n handle.style.cursor = this.cursor;\n } else {\n handle.style.cursor = (this.$el as any).resizeCursor || '';\n }\n }\n\n onMouseLeave(): void {\n if (this.disabled) {\n return;\n }\n const handle = this.getHandle();\n handle.style.cursor = '';\n }\n\n bindDocumentEvents(): void {\n (this.$el as any)._docMoveHandler = (e: MouseEvent | TouchEvent) => {\n return this.doMove(e);\n };\n (this.$el as any)._docUpHandler = (e: MouseEvent | TouchEvent) => {\n return this.doUp(e);\n };\n domHelper.bind(document.body, 'mousemove', (this.$el as any)._docMoveHandler);\n domHelper.bind(document.body, 'touchmove', (this.$el as any)._docMoveHandler);\n domHelper.bind(document.body, 'mouseup', (this.$el as any)._docUpHandler);\n domHelper.bind(document.body, 'touchend', (this.$el as any)._docUpHandler);\n }\n\n unbindDocumentEvents(): void {\n domHelper.unbind(document.body, 'mousemove', (this.$el as any)._docMoveHandler);\n domHelper.unbind(document.body, 'touchmove', (this.$el as any)._docMoveHandler);\n domHelper.unbind(document.body, 'mouseup', (this.$el as any)._docUpHandler);\n domHelper.unbind(document.body, 'touchend', (this.$el as any)._docUpHandler);\n }\n}\n\nexport default DraggableClass;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { ObjectDirective } from 'vue';\nimport DraggableClass from './DraggableClass';\nimport type { DraggableOptions } from './types';\n\ntype NamedDirective<T, V> = ObjectDirective<T, V> & { name: string };\n\nexport interface HTMLElementWithDragInstance extends HTMLElement {\n _dragInstance?: DraggableClass;\n _downHandler?: (e: MouseEvent | TouchEvent) => void;\n _moveHandler?: (e: MouseEvent | TouchEvent) => void;\n _leaveHandler?: (e: MouseEvent | TouchEvent) => void;\n _docMoveHandler?: (e: MouseEvent | TouchEvent) => boolean;\n _docUpHandler?: (e: MouseEvent | TouchEvent) => boolean;\n _transitionendHandler?: () => void;\n resizeCursor?: string;\n}\n\nconst Draggable: NamedDirective<HTMLElementWithDragInstance, DraggableOptions | undefined> = {\n name: 'Draggable',\n mounted(el: HTMLElementWithDragInstance, binding) {\n el._dragInstance = new DraggableClass(el, binding.value);\n el._dragInstance.bindEvents();\n },\n updated(el: HTMLElementWithDragInstance, binding) {\n if (el._dragInstance) {\n el._dragInstance.updateOptions(binding.value);\n }\n },\n beforeUnmount(el: HTMLElementWithDragInstance) {\n if (el._dragInstance) {\n el._dragInstance.unbindEvents();\n }\n }\n};\n\nexport default Draggable;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport type { DroppableOptions, DroppableClass as IDroppableClass } from './types';\n\nexport class DroppableClass implements IDroppableClass {\n $el: HTMLElement;\n scope: string | string[] | null = null;\n disabled: boolean = false;\n dragEnter: (scope: any) => void = () => {};\n dragOver: (scope: any) => void = () => {};\n dragLeave: (scope: any) => void = () => {};\n drop: (scope: any) => void = () => {};\n node?: any;\n point?: 'append' | 'top' | 'bottom';\n event?: any;\n\n constructor(el: HTMLElement, value: DroppableOptions | null = null) {\n this.updateOptions(value);\n this.$el = el;\n }\n\n updateOptions(value: DroppableOptions | null = null): void {\n const opts: DroppableOptions = Object.assign({\n scope: null,\n disabled: false,\n dragEnter: () => {},\n dragOver: () => {},\n dragLeave: () => {},\n drop: () => {}\n }, this, value || {});\n Object.assign(this, opts);\n }\n\n checkDrop(scope: any = null): boolean {\n if (!scope || !this.scope) {\n return true;\n }\n if (typeof this.scope == 'string' && this.scope == scope) {\n return true;\n } else if (this.scope instanceof Array) {\n for (let i = 0; i < this.scope.length; i++) {\n if (this.scope[i] == scope) {\n return true;\n }\n }\n }\n return false;\n }\n}\n\nexport default DroppableClass;\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { ObjectDirective } from 'vue';\nimport { DraggableClass } from '../draggable/DraggableClass';\nimport DroppableClass from './DroppableClass';\nimport type { DroppableOptions } from './types';\n\ntype NamedDirective<T, V> = ObjectDirective<T, V> & { name: string };\n\nexport interface HTMLElementWithDropInstance extends HTMLElement {\n _dropInstance?: DroppableClass;\n}\n\nconst Droppable: NamedDirective<HTMLElementWithDropInstance, DroppableOptions | undefined> = {\n name: 'Droppable',\n mounted(el: HTMLElementWithDropInstance, binding) {\n el._dropInstance = new DroppableClass(el, binding.value);\n DraggableClass.droppables.push(el._dropInstance);\n },\n updated(el: HTMLElementWithDropInstance, binding) {\n if (el._dropInstance) {\n el._dropInstance.updateOptions(binding.value);\n }\n },\n beforeUnmount(el: HTMLElementWithDropInstance) {\n if (el._dropInstance) {\n const index = DraggableClass.droppables.indexOf(el._dropInstance);\n if (index >= 0) {\n DraggableClass.droppables.splice(index, 1);\n }\n el._dropInstance = null as any;\n }\n }\n};\n\nexport default Droppable;\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, onMounted, onBeforeUnmount } from 'vue';\nimport type { DraggableProxyProps } from './types';\n\nexport default defineComponent({\n name: 'DraggableProxy',\n props: {\n proxyCls: String as PropType<DraggableProxyProps['proxyCls']>,\n proxyStyle: [Object, String] as PropType<DraggableProxyProps['proxyStyle']>\n },\n setup(props: DraggableProxyProps, { slots }) {\n const proxyRef = ref<HTMLElement | null>(null);\n const containerRef = ref<HTMLElement | null>(null);\n const left = ref<number>(0);\n const top = ref<number>(0);\n // const width = ref<number>(0);\n // const height = ref<number>(0);\n const reverting = ref<boolean>(false);\n const closed = ref<boolean>(true);\n\n const proxyClasses = computed(() => {\n return [props.proxyCls, { 'draggable-reverting': reverting.value }].filter(Boolean);\n });\n\n const proxyStyles = computed((): CSSProperties => {\n const baseStyle: CSSProperties = {\n position: 'absolute',\n left: left.value + 'px',\n top: top.value + 'px',\n display: closed.value ? 'none' : 'block'\n };\n const proxyStyle = props.proxyStyle;\n if (typeof proxyStyle === 'string') {\n return baseStyle;\n }\n return Object.assign({}, proxyStyle, baseStyle);\n });\n\n const onTransitionEnd = (): void => {\n reverting.value = false;\n closed.value = true;\n };\n\n onMounted(() => {\n if (proxyRef.value) {\n document.body.appendChild(proxyRef.value);\n }\n });\n\n onBeforeUnmount(() => {\n if (proxyRef.value && containerRef.value) {\n containerRef.value.appendChild(proxyRef.value);\n }\n });\n\n return () => (\n <div ref={containerRef} style=\"display:none\">\n <div ref={proxyRef} class={proxyClasses.value} style={proxyStyles.value} onTransitionend={onTransitionEnd}>\n {slots.default?.()}\n </div>\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport GridHeaderCell from './GridHeaderCell';\nimport GridFilterRow from './GridFilterRow';\nimport Resizable from '../resizable/Resizable';\nimport Draggable from '../draggable/Draggable';\nimport Droppable from '../droppable/Droppable';\nimport { DraggableProxy } from '../draggable';\nimport type { GridHeaderProps } from './types';\n\nexport default defineComponent({\n name: 'GridHeader',\n components: {\n GridHeaderCell,\n GridFilterRow,\n DraggableProxy\n },\n directives: {\n Resizable,\n Draggable,\n Droppable\n },\n props: {\n columns: {\n type: Array as PropType<GridHeaderProps['columns']>,\n default: () => []\n },\n columnGroup: Object as PropType<GridHeaderProps['columnGroup']>,\n paddingWidth: {\n type: Number as PropType<GridHeaderProps['paddingWidth']>,\n default: 0\n },\n filterable: {\n type: Boolean as PropType<GridHeaderProps['filterable']>,\n default: false\n },\n grid: Object as PropType<GridHeaderProps['grid']>\n } satisfies Record<keyof GridHeaderProps, any>,\n setup(props: GridHeaderProps, { emit, expose }) {\n const heightState = ref<number | undefined>(undefined);\n const scrollLeftState = ref<number>(0);\n const hoverColumn = ref<any>(null);\n const dragScope = ref<Record<string, any>>({});\n const headerRef = ref<HTMLElement | null>(null);\n const contentRef = ref<HTMLElement | null>(null);\n const proxy = ref<any>(null);\n\n const filterOnTop = computed(() => {\n const grid = props.grid as any;\n if (grid && grid.filterable) {\n if (grid.filterPosition == 'both' || grid.filterPosition == 'top') {\n return true;\n }\n }\n return false;\n });\n\n const filterOnBottom = computed(() => {\n const grid = props.grid as any;\n if (grid && grid.filterable) {\n if (grid.filterPosition == 'both' || grid.filterPosition == 'bottom') {\n return true;\n }\n }\n return false;\n });\n\n const height = (value?: number): number | void => {\n if (value == undefined) {\n return contentRef.value ? domHelper.outerHeight(contentRef.value) : 0;\n } else {\n heightState.value = value ? value - 1 : value;\n }\n };\n\n const scrollLeft = (value?: number): number | void => {\n if (value == undefined) {\n return scrollLeftState.value;\n } else {\n scrollLeftState.value = value;\n if (headerRef.value) {\n headerRef.value.scrollLeft = value;\n }\n }\n };\n\n const onCellClick = (event: Event, col: any): void => {\n emit('cellClick', {\n column: col,\n originalEvent: event\n });\n };\n\n const getResizableOpts = (col: any): any => {\n const grid = props.grid as any;\n return {\n disabled: !grid || !grid.columnResizing || !col.field,\n handles: 'e',\n resizing: (event: any) => {\n onColumnResizing(col, event);\n },\n resizeStop: (event: any) => {\n onColumnResizeStop(col, event);\n }\n };\n };\n\n const getDraggableOpts = (col: any): any => {\n const grid = props.grid as any;\n return {\n disabled: !grid || !grid.columnMoving || !col.field,\n revert: true,\n deltaX: 0,\n deltaY: 0,\n edge: 5,\n scope: dragScope.value,\n proxy: proxy.value,\n dragStart: (event: any) => {\n onColumnDragStart(col, event);\n }\n };\n };\n\n const getDroppableOpts = (col: any): any => {\n return {\n field: col.field,\n dragOver: (scope: any) => {\n onColumnDragOver(col, scope);\n },\n dragLeave: (_scope: any) => {\n onColumnDragLeave();\n },\n drop: (scope: any) => {\n onColumnDrop(col, scope);\n }\n };\n };\n\n const onColumnResizing = (col: any, event: any): void => {\n if (event && event.target) {\n event.target.style.width = null;\n event.target.style.left = null;\n event.target.style.top = null;\n }\n const grid = props.grid as any;\n if (grid && grid.resizeColumn) {\n grid.resizeColumn(col.field, event.width);\n }\n };\n\n const onColumnResizeStop = (col: any, event: any): void => {\n if (event && event.target) {\n event.target.style.width = null;\n event.target.style.left = null;\n event.target.style.top = null;\n }\n const grid = props.grid as any;\n if (grid && grid.resizeColumn) {\n grid.resizeColumn(col.field, event.width);\n }\n };\n\n const onColumnDragStart = (col: any, event: any): void => {\n const grid = props.grid as any;\n if (!grid) {\n return;\n }\n Object.assign(dragScope.value, {\n column: col,\n event: event,\n fromIndex: grid.allColumns ? grid.allColumns.indexOf(col) : -1,\n viewOffset: grid.$refs && grid.$refs.viewRef ? domHelper.offset(grid.$refs.viewRef) : { left: 0, top: 0 }\n });\n };\n\n const onColumnDragOver = (col: any, scope: any): void => {\n if (!scope) {\n return;\n }\n const grid = props.grid as any;\n if (!grid || !grid.allColumns) {\n return;\n }\n scope.toIndex = grid.allColumns.indexOf(col);\n const diff = scope.fromIndex - scope.toIndex;\n scope.point = diff === 0 ? null : diff < 0 ? 'after' : 'before';\n let splitStyle: any = null;\n if (diff !== 0 && scope.event && scope.event.target && scope.event.target.currDroppable) {\n const el = scope.event.target.currDroppable.$el;\n if (el) {\n const offset = domHelper.offset(el);\n let left = offset.left - scope.viewOffset.left;\n if (scope.toIndex !== 0) {\n left -= 1;\n }\n splitStyle = {\n left: domHelper.toStyleValue(diff < 0 ? left + domHelper.outerWidth(el) : left),\n top: 0\n };\n }\n }\n if (grid) {\n grid.splitStyle = splitStyle;\n }\n };\n\n const onColumnDragLeave = (): void => {\n const grid = props.grid as any;\n if (grid) {\n grid.splitStyle = null;\n }\n };\n\n const onColumnDrop = (col: any, scope: any): void => {\n if (!scope) {\n return;\n }\n dragScope.value = {};\n const grid = props.grid as any;\n nextTick(() => {\n if (scope.point && grid && grid.moveColumn) {\n grid.moveColumn(scope.column.field, col.field, scope.point);\n }\n });\n };\n\n const renderGroupCells = () => {\n const columnGroup = props.columnGroup as any;\n if (!columnGroup) {\n return null;\n }\n const columns = props.columns || [];\n const grid = props.grid as any;\n return (\n <tbody>\n {filterOnTop.value && <GridFilterRow columns={columns} grid={grid}></GridFilterRow>}\n {(columnGroup.rows || []).map((row: any, rowIndex: number) => (\n <tr key={rowIndex} class=\"datagrid-header-row\">\n {(row.columns || []).map((col: any, colIndex: number) => (\n <td\n key={colIndex}\n v-Resizable={getResizableOpts(col)}\n rowspan={col.rowspan}\n colspan={col.colspan}\n class={[col.field ? 'datagrid-field-td' : '', hoverColumn.value == col && col.sortable ? ' datagrid-header-over' : '']\n .filter(Boolean)\n .join(' ')}\n onMouseenter={() => (hoverColumn.value = col)}\n onMouseleave={() => (hoverColumn.value = null)}\n onClick={(event: Event) => onCellClick(event, col)}\n >\n <GridHeaderCell column={col}></GridHeaderCell>\n </td>\n ))}\n </tr>\n ))}\n {filterOnBottom.value && <GridFilterRow columns={columns} grid={grid}></GridFilterRow>}\n </tbody>\n );\n };\n\n const renderRowCells = () => {\n const columnGroup = props.columnGroup as any;\n if (columnGroup) {\n return null;\n }\n const columns = props.columns || [];\n const grid = props.grid as any;\n return (\n <tbody>\n {filterOnTop.value && <GridFilterRow columns={columns} grid={grid}></GridFilterRow>}\n <tr class=\"datagrid-header-row\">\n {columns.map((col: any, index: number) => (\n <td\n key={index}\n v-Resizable={getResizableOpts(col)}\n v-Draggable={getDraggableOpts(col)}\n v-Droppable={getDroppableOpts(col)}\n class={['datagrid-field-td', hoverColumn.value == col && col.sortable ? ' datagrid-header-over' : ''].filter(Boolean).join(' ')}\n onMouseenter={() => (hoverColumn.value = col)}\n onMouseleave={() => (hoverColumn.value = null)}\n onClick={(event: Event) => onCellClick(event, col)}\n >\n <GridHeaderCell column={col}></GridHeaderCell>\n </td>\n ))}\n </tr>\n {filterOnBottom.value && <GridFilterRow columns={columns} grid={grid}></GridFilterRow>}\n </tbody>\n );\n };\n\n expose({ height, scrollLeft });\n\n return () => {\n const columns = props.columns || [];\n const dragScopeValue = dragScope.value as any;\n return (\n <div class=\"datagrid-header f-row f-noshrink\">\n <div ref={headerRef} class=\"datagrid-header-inner f-full\" style={{ height: heightState.value + 'px' }}>\n <table ref={contentRef} class=\"datagrid-htable\" border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n <colgroup>\n {columns.map((col: any, index: number) => (\n <col key={index} style={{ width: col.widthState }}></col>\n ))}\n </colgroup>\n {renderGroupCells()}\n {renderRowCells()}\n </table>\n </div>\n {(props.paddingWidth || 0) > 0 && <div class=\"datagrid-header f-noshrink\" style={{ width: (props.paddingWidth || 0) + 'px' }}></div>}\n <DraggableProxy ref={proxy}>\n <div class=\"datagrid-moving-proxy\">{dragScopeValue.column ? dragScopeValue.column.title : null}</div>\n </DraggableProxy>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { GridFooterCellProps } from './types';\n\nexport default defineComponent({\n name: 'GridFooterCell',\n props: {\n row: Object as PropType<GridFooterCellProps['row']>,\n column: Object as PropType<GridFooterCellProps['column']>,\n rowIndex: Number as PropType<GridFooterCellProps['rowIndex']>\n } satisfies Record<keyof GridFooterCellProps, any>,\n setup(props: GridFooterCellProps) {\n return () => {\n const column = props.column as any;\n const row = props.row as any;\n if (!column) {\n return null;\n }\n let cell: any = null;\n if (column.$slots && column.$slots['footer']) {\n cell = column.$slots['footer']({\n row: row,\n column: column,\n rowIndex: props.rowIndex\n });\n } else {\n cell = row && column.field ? row[column.field] : null;\n }\n return <div class=\"datagrid-cell\" style={{ textAlign: column.align || null }}>{cell}</div>;\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * GridFooter 组件\n *\n * 表格底部组件,用于显示表格的汇总信息或自定义底部内容。\n * 支持水平滚动同步,可以与表格主体保持滚动位置一致。\n *\n * @component\n */\nimport { defineComponent, PropType, ref } from 'vue';\nimport GridFooterCell from './GridFooterCell';\nimport type { GridFooterProps } from './types';\n\nexport default defineComponent({\n name: 'GridFooter',\n props: {\n /**\n * 列数组\n * 定义底部显示的列配置\n * @default []\n */\n columns: {\n type: Array as PropType<GridFooterProps['columns']>,\n default: () => []\n },\n /**\n * 行数组\n * 定义底部显示的数据行\n * @default []\n */\n rows: {\n type: Array as PropType<GridFooterProps['rows']>,\n default: () => []\n },\n /**\n * 内边距宽度\n * 用于滚动条占位,保持与表格主体对齐\n * @default 0\n */\n paddingWidth: {\n type: Number as PropType<GridFooterProps['paddingWidth']>,\n default: 0\n }\n } satisfies Record<keyof GridFooterProps, any>,\n\n setup(props) {\n /**\n * 水平滚动位置状态\n * 用于同步表格主体的水平滚动位置\n */\n // const scrollLeftState = ref<number>(0);\n\n /**\n * 底部容器引用\n * 用于直接操作 DOM 元素的 scrollLeft 属性\n */\n const footerRef = ref<HTMLElement | null>(null);\n\n /**\n * 设置或获取水平滚动位置\n *\n * @param value - 要设置的滚动位置(像素),如果不传则返回当前滚动位置\n * @returns 当 value 为 undefined 时返回当前滚动位置,否则返回 void\n */\n // const scrollLeft = (value?: number): number | void => {\n // if (value == undefined) {\n // return scrollLeftState.value;\n // } else {\n // scrollLeftState.value = value;\n // if (footerRef.value) {\n // footerRef.value.scrollLeft = value;\n // }\n // }\n // };\n\n /**\n * 返回方法和状态\n *\n * scrollLeft 方法需要暴露给父组件,以便同步滚动位置。\n */\n return () => {\n const columns = props.columns || [];\n const rows = props.rows || [];\n return (\n <div class=\"datagrid-footer f-row f-noshrink\">\n <div ref={footerRef} class=\"datagrid-footer-inner f-full\">\n <table class=\"datagrid-ftable\" border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n <colgroup>\n {columns.map((col: any, index: number) => (\n <col key={index} style={{ width: col.widthState }}></col>\n ))}\n </colgroup>\n <tbody>\n {rows.map((row: any, rowIndex: number) => (\n <tr key={rowIndex} class=\"datagrid-row\">\n {columns.map((col: any, colIndex: number) => (\n <td key={colIndex}>\n <GridFooterCell row={row} column={col} rowIndex={rowIndex}></GridFooterCell>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {props.paddingWidth > 0 && <div class=\"datagrid-footer f-noshrink\" style={{ width: props.paddingWidth + 'px' }}></div>}\n </div>\n );\n };\n }\n});\n","import type { PropType } from 'vue';\nimport type { GridViewProps } from './types';\n\nexport const gridViewProps = {\n columns: {\n type: Array as PropType<GridViewProps['columns']>,\n default: () => []\n },\n columnGroup: Object as PropType<GridViewProps['columnGroup']>,\n viewIndex: {\n type: Number as PropType<GridViewProps['viewIndex']>,\n default: 2\n },\n rows: {\n type: Array as PropType<GridViewProps['rows']>,\n default: () => []\n },\n footerRows: {\n type: Array as PropType<GridViewProps['footerRows']>,\n default: () => []\n },\n filterable: {\n type: Boolean as PropType<GridViewProps['filterable']>,\n default: false\n }\n} satisfies Record<string, any>;\n","import { computed, getCurrentInstance, nextTick, ref, watch, type ComputedRef, type Ref, type SetupContext } from 'vue';\nimport type { GridBodyInstance, GridViewProps } from './types';\n\nexport interface UseGridViewBaseReturn {\n // state\n headerPaddingWidth: Ref<number>;\n\n // computed\n viewCls: ComputedRef<string>;\n\n // methods\n scrollTop: (value?: number) => number | void;\n headerHeight: (value?: number) => number | void;\n getHeaderPaddingWidth: () => number | null;\n onBodyScroll: (event: any) => void;\n onResize: () => void;\n}\n\n/**\n * useGridViewBase:替代 `extends: GridView`\n * - 用 ref 模拟旧 data: headerPaddingWidth\n * - 用 computed 模拟旧 computed: viewCls\n * - 用 getCurrentInstance().proxy.$refs 访问 header/body/footer(与旧 this.$refs 一致)\n */\nexport function useGridViewBase(props: GridViewProps, ctx: Pick<SetupContext, 'emit'>): UseGridViewBaseReturn {\n const headerPaddingWidth = ref<number>(0);\n\n const viewCls = computed<string>(() => {\n const idx = props.viewIndex ?? 2;\n return 'f-column datagrid-view' + idx + (idx == 2 ? ' f-full' : ' f-noshrink');\n });\n\n function getRefs() {\n const inst = getCurrentInstance();\n return (inst?.proxy as any)?.$refs || {};\n }\n\n function getBodyRef(): GridBodyInstance | undefined {\n return getRefs().body as GridBodyInstance | undefined;\n }\n\n function scrollTop(value?: number): number | void {\n const bodyRef = getBodyRef();\n if (value === undefined) return bodyRef ? bodyRef.scrollTop() : 0;\n bodyRef?.scrollTop(value);\n }\n\n function headerHeight(value?: number): number | void {\n const headerRef = getRefs().header as any;\n if (value === undefined) return headerRef && headerRef.height ? headerRef.height() : 0;\n if (headerRef && headerRef.height) headerRef.height(value);\n }\n\n function getHeaderPaddingWidth(): number | null {\n const idx = props.viewIndex ?? 2;\n if (idx == 2) {\n const bodyRef = getBodyRef();\n const width = bodyRef ? bodyRef.scrollbarWidth() : 0;\n if (width > 0) return width;\n }\n return null;\n }\n\n function onBodyScroll(event: any): void {\n const refs = getRefs();\n const headerRef = refs.header as any;\n const footerRef = refs.footer as any;\n\n if (headerRef && headerRef.scrollLeft) headerRef.scrollLeft(event.left);\n if (footerRef && footerRef.scrollLeft) footerRef.scrollLeft(event.left);\n\n ctx.emit('bodyScroll', event);\n }\n\n function onResize(): void {\n // Empty method(保持和旧 GridView 一致)\n }\n\n watch(\n () => props.rows,\n () => {\n nextTick(() => {\n headerPaddingWidth.value = getHeaderPaddingWidth() || 0;\n });\n }\n );\n\n return {\n headerPaddingWidth,\n viewCls,\n scrollTop,\n headerHeight,\n getHeaderPaddingWidth,\n onBodyScroll,\n onResize\n };\n}\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, computed, watch, PropType } from 'vue';\nimport { useInputBase } from '../base/useInputBase';\nimport { useFieldBase } from '../base/useFieldBase';\nimport type { TextBoxProps } from './types';\n\nexport default defineComponent({\n name: 'TextBox',\n props: {\n value: [String, Number, Array] as PropType<TextBoxProps['value']>,\n modelValue: [String, Number, Array] as PropType<TextBoxProps['modelValue']>,\n disabled: {\n type: Boolean as PropType<TextBoxProps['disabled']>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<TextBoxProps['readonly']>,\n default: false\n },\n editable: {\n type: Boolean as PropType<TextBoxProps['editable']>,\n default: true\n },\n iconCls: String as PropType<TextBoxProps['iconCls']>,\n iconAlign: {\n type: String as PropType<TextBoxProps['iconAlign']>,\n default: 'right'\n },\n placeholder: String as PropType<TextBoxProps['placeholder']>,\n multiline: {\n type: Boolean as PropType<TextBoxProps['multiline']>,\n default: false\n },\n invalid: {\n type: Boolean as PropType<TextBoxProps['invalid']>,\n default: false\n },\n tabindex: Number as PropType<TextBoxProps['tabindex']>,\n cls: String as PropType<TextBoxProps['cls']>,\n inputCls: String as PropType<TextBoxProps['inputCls']>,\n inputStyle: Object as PropType<TextBoxProps['inputStyle']>,\n inputId: String as PropType<TextBoxProps['inputId']>,\n textFormatter: Function as PropType<TextBoxProps['textFormatter']>\n },\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur'],\n setup(props: TextBoxProps, { emit, slots, expose }) {\n const fieldBase = useFieldBase(props);\n const ib = useInputBase(props, { emit, slots }, fieldBase);\n\n // 对齐原 TextBox:text = focused ? raw : formatter(raw)\n const displayText = computed(() => {\n const raw = ib.textState.value;\n if (ib.focused.value) return raw;\n const fmt = props.textFormatter || ib.defaultTextFormatter;\n return fmt(raw);\n });\n\n // 对齐“extends + override setValue”后的效果:\n // 外部 value/modelValue 驱动 valueState 时,textState 也要跟着变\n watch(\n () => ib.valueState.value,\n v => {\n ib.textState.value = String((v as any) || '');\n },\n { immediate: true }\n );\n\n // TextBox 覆盖 setValue:先同步 textState,再走 InputBase 的 setValue(emit + afterValueChange)\n function setValue(value: string | number): void {\n ib.textState.value = String(value);\n ib.setValue(value);\n }\n\n // TextBox 覆盖 onInput:输入时立刻 setValue(textState)\n function onInput(event: Event): void {\n ib.onInput(event);\n setValue(ib.textState.value);\n }\n\n expose({\n setValue,\n focus: ib.focus,\n blur: ib.blur,\n getSelectionStart: ib.getSelectionStart,\n getSelectionRange: ib.getSelectionRange,\n setSelectionRange: ib.setSelectionRange\n });\n\n return () =>\n ib.renderField(undefined, {\n value: displayText.value,\n onInput\n });\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, ref, computed, PropType } from \"vue\";\nimport type { FormProps, Field } from \"./types\";\n\nexport default defineComponent({\n name: \"Form\",\n props: {\n model: Object as PropType<FormProps['model']>,\n rules: Object as PropType<FormProps['rules']>,\n messages: Object as PropType<FormProps['messages']>,\n labelPosition: {\n type: String as PropType<FormProps['labelPosition']>,\n default: \"before\",\n },\n labelAlign: {\n type: String as PropType<FormProps['labelAlign']>,\n default: \"left\",\n },\n labelWidth: {\n type: [Number, String] as PropType<FormProps['labelWidth']>,\n default: 80,\n },\n floatingLabel: {\n type: Boolean as PropType<FormProps['floatingLabel']>,\n default: false,\n },\n errorType: {\n type: String as PropType<FormProps['errorType']>,\n default: \"label\",\n },\n tooltipPosition: {\n type: String as PropType<FormProps['tooltipPosition']>,\n default: \"right\",\n },\n },\n setup(props: FormProps, { emit, slots, expose }) {\n const fields = ref<Field[]>([]);\n const errors = ref<Record<string, string[]>>({});\n\n const valid = computed(() => {\n let count = 0;\n for (const field in errors.value) {\n count += errors.value[field].length;\n }\n return count == 0;\n });\n\n const invalid = computed(() => !valid.value);\n\n const fieldAdd = (f: Field): void => {\n fields.value.push(f);\n if (f.validateOnCreate) {\n validateField(f);\n }\n };\n\n const fieldRemove = (f: Field): void => {\n const index = fields.value.indexOf(f);\n if (index >= 0) {\n fields.value.splice(index, 1);\n }\n };\n\n const fieldFocus = (): void => {};\n\n const fieldBlur = (f: Field): void => {\n if (f.validateOnBlur) {\n validateField(f);\n }\n };\n\n const fieldChange = (f: Field): void => {\n if (f.validateOnChange) {\n validateField(f);\n }\n };\n\n const validate = (callback?: (errors: Record<string, string[]> | null) => void): void => {\n const vtotal = fields.value.length;\n let vcount = 0;\n fields.value.forEach((field: Field) => {\n validateField(field, () => {\n vcount++;\n if (vcount >= vtotal && callback) {\n callback(getErrors() as Record<string, string[]> | null);\n }\n });\n });\n };\n\n const validateField = (field: Field, callback?: () => void): void => {\n const name = field.fieldName;\n let vtotal = 1;\n let vcount = 0;\n const validity = () => {\n const isValid = errors.value[name].length == 0;\n fields.value\n .filter((f: Field) => f.fieldName == name)\n .forEach((f: Field) => f.setValid(isValid));\n vcount++;\n if (vcount >= vtotal) {\n errors.value = Object.assign({}, errors.value);\n emit(\"validate\", errors.value);\n if (callback) {\n callback();\n }\n }\n };\n const setMessage = (message: string, param: any[] = []) => {\n let msg = message;\n for (let i = 0; i < param.length; i++) {\n msg = msg.replace(\n new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"),\n param[i]\n );\n }\n errors.value[name].push(msg);\n };\n const doValidate = (vtype: string | null, vparam?: any) => {\n if (!vtype) {\n validity();\n return;\n }\n const model = props.model || {};\n const value = model[name];\n const validateRules = (window as any).ValidateRules || {};\n if (vtype != \"required\") {\n if (validateRules[\"required\"] && validateRules[\"required\"][\"validator\"] && validateRules[\"required\"][\"validator\"](value) == false) {\n validity();\n return;\n }\n }\n if (vparam && vparam.validator) {\n const result = vparam.validator(value);\n if (result instanceof Promise) {\n result.then((isValid: boolean) => {\n if (!isValid) {\n setMessage(vparam.message);\n }\n validity();\n });\n } else {\n if (!result) {\n setMessage(vparam.message);\n }\n validity();\n }\n return;\n }\n\n const parts = /([a-zA-Z_]+)(.*)/.exec(vtype);\n if (!parts) {\n validity();\n return;\n }\n const ruleType = parts[1];\n const paramStr = parts[2] || \"\";\n const rule = validateRules[ruleType];\n if (rule) {\n const locale = (window as any).Locale;\n let message = locale?.t(\"Rules.\" + ruleType, rule[\"message\"]) || rule[\"message\"];\n const messages = props.messages || {};\n if (messages[name]) {\n message = messages[name][ruleType] || message;\n }\n const param = vparam || (paramStr ? eval(paramStr) : []) || [];\n const result = rule[\"validator\"](value, param);\n if (result instanceof Promise) {\n result.then((isValid: boolean) => {\n if (!isValid) {\n setMessage(message, param);\n }\n validity();\n });\n } else {\n if (!result) {\n setMessage(message, param);\n }\n validity();\n }\n } else {\n validity();\n }\n };\n\n if (!props.rules) {\n return;\n }\n errors.value[name] = [];\n const rule = props.rules[name];\n if (!rule) {\n doValidate(null);\n return;\n }\n if (rule instanceof Array) {\n vtotal = rule.length;\n for (let i = 0; i < rule.length; i++) {\n doValidate(rule[i]);\n }\n } else if (typeof rule == \"string\") {\n vtotal = 1;\n doValidate(rule);\n } else {\n vtotal = Object.keys(rule).length;\n for (const vtype in rule) {\n const vparam = rule[vtype];\n doValidate(vtype, vparam);\n }\n }\n };\n\n const hasError = (name: string): boolean => {\n return getError(name) != null;\n };\n\n const getError = (name: string): string | null => {\n const fieldErrors = errors.value[name];\n return fieldErrors ? fieldErrors[0] : null;\n };\n\n const getErrors = (name?: string): Record<string, string[]> | string[] | null => {\n if (name) {\n const fieldErrors = errors.value[name];\n return fieldErrors && fieldErrors.length ? fieldErrors : null;\n } else {\n if (valid.value) {\n return null;\n } else {\n const result: Record<string, string[]> = {};\n for (const field in errors.value) {\n if (errors.value[field].length) {\n result[field] = errors.value[field];\n }\n }\n return result;\n }\n }\n };\n\n const getValue = (name: string): any => {\n const model = props.model || {};\n return model[name];\n };\n\n const isFocused = (name: string): boolean => {\n const ff = fields.value.filter((f: Field) => f.fieldName == name);\n if (ff.length) {\n return ff[0].focused || false;\n }\n return false;\n };\n\n expose({\n validate,\n validateField,\n hasError,\n getError,\n getErrors,\n getValue,\n isFocused,\n fieldAdd,\n fieldRemove,\n fieldFocus,\n fieldBlur,\n fieldChange,\n valid,\n invalid,\n errors,\n fields\n });\n\n return () => <form>{slots.default?.()}</form>;\n },\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, h, ref, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport Label from '../base/Label';\nimport type { FormFieldProps, FormInstance } from './types';\n\n(window as any).FormFieldIdIndex = (window as any).FormFieldIdIndex || 1;\n\nexport default defineComponent({\n name: 'FormField',\n setup(props: FormFieldProps, { slots }) {\n const inst = getCurrentInstance();\n const inputId = ref<string>('form-field-inputid-' + (window as any).FormFieldIdIndex++);\n // const focused = ref<boolean>(false);\n\n // const fieldName = computed(() => {\n // return props.name || '';\n // });\n\n const form = computed<FormInstance | null>(() => {\n let parent = inst?.parent;\n while (parent) {\n const name = (parent.type as any)?.name || (parent.type as any)?.__name;\n if (name === 'Form') {\n return parent.proxy as any;\n }\n parent = parent.parent;\n }\n return null;\n });\n\n const fieldClasses = computed(() => {\n const formValue = form.value as any;\n if (!formValue) {\n return ['form-field f-column'];\n }\n const labelPosition = props.labelPosition || formValue.labelPosition;\n const floatingLabel = formValue.floatingLabel || false;\n const error = formValue.getError ? formValue.getError(props.name || '') : null;\n const value = formValue.getValue ? formValue.getValue(props.name || '') : null;\n const focusedValue = formValue.isFocused ? formValue.isFocused(props.name || '') : false;\n return [\n 'form-field f-column',\n {\n 'form-field-haserror': error && formValue.errorType === 'label',\n 'form-field-empty': value == null || String(value).trim().length === 0,\n 'form-field-focused': focusedValue,\n 'form-floating-label': floatingLabel && labelPosition === 'top'\n }\n ];\n });\n\n const innerClasses = computed(() => {\n const formValue = form.value as any;\n if (!formValue) {\n return ['f-full'];\n }\n const labelPosition = props.labelPosition || formValue.labelPosition;\n return [\n 'f-full',\n {\n 'f-row f-vcenter': labelPosition !== 'top',\n 'f-column': labelPosition === 'top'\n }\n ];\n });\n\n onMounted(() => {\n const formValue = form.value as any;\n if (formValue && formValue.fieldAdd) {\n formValue.fieldAdd(inst?.proxy);\n }\n });\n\n onBeforeUnmount(() => {\n const formValue = form.value as any;\n if (formValue && formValue.fieldRemove) {\n formValue.fieldRemove(inst?.proxy);\n }\n });\n\n // const setValid = (valid: boolean): void => {\n // // 可以在这里添加视觉反馈\n // };\n\n const renderLabel = (position: string) => {\n const formValue = form.value as any;\n if (!formValue) return null;\n const labelPosition = props.labelPosition || formValue.labelPosition;\n if (labelPosition != position) {\n return null;\n }\n const labelAlign = props.labelAlign || formValue.labelAlign;\n const labelWidth = props.labelWidth || formValue.labelWidth;\n const labelCls = [\n 'f-noshrink',\n {\n 'textbox-label-after': labelPosition === 'after',\n 'textbox-label-top': labelPosition === 'top'\n }\n ];\n const labelStyle = 'width:' + domHelper.toStyleValue(labelWidth);\n const label = slots['label'] ? slots['label']() : props.label;\n return (\n <Label for={props.labelFor || inputId.value} align={labelAlign} class={labelCls} style={labelStyle}>\n {label}\n </Label>\n );\n };\n\n const renderError = () => {\n const formValue = form.value as any;\n if (!formValue || !formValue.getError) return null;\n const error = formValue.getError(props.name || '');\n if (formValue.errorType != 'label' || !error) {\n return null;\n }\n const labelPosition = props.labelPosition || formValue.labelPosition;\n const labelWidth = props.labelWidth || formValue.labelWidth;\n let errorStyle: string | null = null;\n if (props.label && labelPosition === 'before') {\n errorStyle = 'margin-left:' + domHelper.toStyleValue(labelWidth);\n }\n return (\n <div class=\"form-field-error\" style={errorStyle}>\n {error}\n </div>\n );\n };\n\n return () => {\n const formValue = form.value as any;\n if (!formValue) {\n return h('div', { class: fieldClasses.value }, slots.default?.());\n }\n\n let input = slots.default?.() || [];\n if (Array.isArray(input)) {\n input.forEach((c: any) => {\n if (c && c.props) {\n c.props.inputId = inputId.value;\n }\n });\n }\n\n if (formValue.errorType != 'label') {\n const error = formValue.getError ? formValue.getError(props.name || '') : null;\n const tip = {\n closed: !error,\n disabled: false,\n content: error,\n position: formValue.tooltipPosition || 'right'\n };\n input = (\n <span class=\"f-full f-column\" v-Tooltip={tip}>\n {input}\n </span>\n );\n }\n return h(\n 'div',\n {\n class: fieldClasses.value\n },\n [\n h(\n 'div',\n {\n class: innerClasses.value\n },\n [renderLabel('top'), renderLabel('before'), input, renderLabel('after')]\n ),\n renderError()\n ]\n );\n };\n },\n props: {\n name: String as PropType<FormFieldProps['name']>,\n label: String as PropType<FormFieldProps['label']>,\n labelPosition: String as PropType<FormFieldProps['labelPosition']>,\n labelAlign: String as PropType<FormFieldProps['labelAlign']>,\n labelFor: String as PropType<FormFieldProps['labelFor']>,\n labelWidth: [Number, String] as PropType<FormFieldProps['labelWidth']>\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * GridBodyCell 组件\n *\n * 表格单元格组件,用于渲染表格主体中的单个单元格。\n * 支持编辑模式,可以显示自定义编辑组件或默认的 TextBox。\n * 支持表单验证和错误提示。\n *\n * @component\n */\nimport { defineComponent, PropType, ref, computed, getCurrentInstance } from 'vue';\nimport { TextBox } from '../textbox';\nimport { Form } from '../form';\nimport type { GridBodyCellProps } from './types';\n\nexport default defineComponent({\n name: 'GridBodyCell',\n\n props: {\n /**\n * 行数据\n * 当前单元格所在行的数据对象\n */\n row: Object as PropType<GridBodyCellProps['row']>,\n /**\n * 列配置\n * 当前单元格对应的列配置对象\n */\n column: Object as PropType<GridBodyCellProps['column']>,\n /**\n * 行索引\n * 当前单元格所在行的索引\n */\n rowIndex: Number as PropType<GridBodyCellProps['rowIndex']>\n } satisfies Record<keyof GridBodyCellProps, any>,\n\n setup(props) {\n /**\n * 验证错误信息\n * 存储当前单元格的表单验证错误\n */\n const error = ref<string | null>(null);\n\n /**\n * 表单引用\n * 用于访问表单组件的 validate 方法\n */\n const formRef = ref<any>(null);\n\n /**\n * 获取表格实例\n *\n * 通过向上遍历父组件,找到 DataGrid 或 TreeGrid 组件实例。\n * 这是一个计算属性,因为父组件可能在运行时变化。\n */\n const grid = computed(() => {\n const inst = getCurrentInstance();\n let parent = inst?.parent;\n while (parent) {\n const name = (parent.type as any)?.name || (parent.type as any)?.__name;\n if (name === 'DataGrid' || name === 'TreeGrid') {\n return parent;\n }\n parent = parent.parent;\n }\n return null;\n });\n\n /**\n * 键盘事件处理\n *\n * 在编辑模式下,处理 Enter 键(结束编辑)和 Esc 键(取消编辑)。\n *\n * @param event - 键盘事件对象\n */\n const onKeyDown = (event: KeyboardEvent): void => {\n const gridInstance = grid.value as any;\n if (!gridInstance) {\n return;\n }\n // 通过 proxy 访问组件实例的方法和属性\n const gridProxy = gridInstance.proxy || gridInstance;\n if (!gridProxy || gridProxy.editMode !== 'cell') {\n return;\n }\n setTimeout(() => {\n if (event.which === 13) {\n // Enter 键:结束编辑\n event.stopPropagation();\n if (gridProxy.endEdit) {\n gridProxy.endEdit();\n }\n } else if (event.which === 27) {\n // Esc 键:取消编辑\n event.stopPropagation();\n if (gridProxy.cancelEdit) {\n gridProxy.cancelEdit();\n }\n }\n }, 0);\n };\n\n /**\n * 表单验证回调\n *\n * 当表单验证完成时调用,更新错误信息并通知表格组件。\n *\n * @param errors - 验证错误对象,键为字段名,值为错误信息数组\n */\n const onValidate = (errors: Record<string, string[]>): void => {\n const gridInstance = grid.value as any;\n if (!gridInstance) {\n return;\n }\n // 通过 proxy 访问组件实例的方法和属性\n const gridProxy = gridInstance.proxy || gridInstance;\n if (!gridProxy || !gridProxy.editingItem) {\n return;\n }\n const column = props.column as any;\n if (!column || !column.field) {\n return;\n }\n const field = column.field;\n let fieldError: string | string[] | null = errors[field];\n fieldError = fieldError ? fieldError[0] : null;\n error.value = fieldError;\n\n const editingItem = gridProxy.editingItem;\n editingItem.errors = editingItem.errors || {};\n Object.assign(editingItem.errors, { [field]: errors[field] });\n\n let errCount = 0;\n for (const errField in editingItem.errors) {\n errCount += editingItem.errors[errField].length;\n }\n editingItem.invalid = errCount > 0;\n\n // 触发编辑验证事件\n if (gridProxy.$emit) {\n gridProxy.$emit('editValidate', editingItem);\n }\n };\n\n /**\n * 返回状态和方法\n */\n return () => {\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n const row = props.row as any;\n const column = props.column as any;\n if (!row || !column) {\n return null;\n }\n const isEditable = parent && parent.isEditable ? parent.isEditable(row, column) : false;\n let cell: any = null;\n if (isEditable) {\n if (column.$slots && column.$slots['edit']) {\n cell = column.$slots['edit']({\n row: row,\n column: column,\n rowIndex: props.rowIndex,\n error: error.value\n });\n if (Array.isArray(cell)) {\n cell.forEach((c: any) => {\n if (c && c.props) {\n c.props.name = column.field;\n }\n });\n }\n } else {\n cell = (\n <TextBox\n class=\"f-full\"\n name={column.field}\n value={row[column.field]}\n onValueChange={(e: any) => {\n row[column.field] = e.currentValue;\n if (formRef.value && formRef.value.validate) {\n formRef.value.validate();\n }\n }}\n />\n );\n }\n const gridInstance = grid.value as any;\n const gridProxy = gridInstance?.proxy || gridInstance;\n cell = (\n <Form\n ref={formRef}\n class=\"f-column\"\n model={row}\n rules={{ [column.field]: column.editRules }}\n messages={{ [column.field]: column.editMessages }}\n onValidate={(errors: Record<string, string[]>) => {\n onValidate(errors);\n }}\n onSubmit={(event: Event) => event.preventDefault()}\n onKeydown={onKeyDown}\n v-Tooltip={Object.assign(\n {\n closed: !error.value,\n content: error.value\n },\n gridProxy && gridProxy.tipOptions ? gridProxy.tipOptions : {}\n )}\n >\n {cell}\n </Form>\n );\n } else {\n if (column.$slots && column.$slots['body']) {\n cell = column.$slots['body']({\n row: row,\n column: column,\n rowIndex: props.rowIndex\n });\n } else if (column.$slots && column.$slots['cell']) {\n cell = column.$slots['cell']({\n row: row,\n column: column,\n rowIndex: props.rowIndex\n });\n } else {\n cell = row[column.field];\n }\n }\n return (\n <div class={['datagrid-cell', { 'datagrid-editable': isEditable }]} style={{ textAlign: column.align || null }}>\n {cell}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, computed } from 'vue';\nimport type { DataGridRowDetailProps } from './types';\n\nexport default defineComponent({\n name: 'DataGridRowDetail',\n props: {\n gridBody: Object as PropType<DataGridRowDetailProps['gridBody']>,\n row: Object as PropType<DataGridRowDetailProps['row']>,\n rowIndex: Number as PropType<DataGridRowDetailProps['rowIndex']>\n } satisfies Record<keyof DataGridRowDetailProps, any>,\n setup(props: DataGridRowDetailProps) {\n const grid = computed(() => {\n const gridBody = props.gridBody;\n if (gridBody && gridBody.view && gridBody.view.grid) {\n return gridBody.view.grid;\n }\n return null;\n });\n\n return () => {\n const gridBody = props.gridBody;\n const row = props.row;\n const rowIndex = props.rowIndex;\n const gridValue = grid.value;\n\n if (gridBody && gridBody.view && gridBody.view.viewIndex == 2 && gridValue && gridValue.$slots && gridValue.$slots['detail']) {\n return (\n <div class=\"datagrid-row-detail\">\n {gridValue.$slots['detail']({\n row: row,\n rowIndex: rowIndex\n })}\n </div>\n );\n } else {\n return null;\n }\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, h, PropType, CSSProperties } from 'vue';\nimport type { DataGridRowGroupProps } from './types';\n\nexport default defineComponent({\n name: 'DataGridRowGroup',\n props: {\n row: Object as PropType<DataGridRowGroupProps['row']>,\n left: Number as PropType<DataGridRowGroupProps['left']>,\n grid: Object as PropType<DataGridRowGroupProps['grid']>\n } satisfies Record<keyof DataGridRowGroupProps, any>,\n setup(props: DataGridRowGroupProps) {\n const left = props.left || 0;\n const row = props.row || {};\n const grid = props.grid;\n const slots = grid && grid.$slots ? grid.$slots : {};\n const groupSlot = slots['group'];\n\n return () => {\n return h(\n 'div',\n {\n class: 'datagrid-group-title',\n style: {\n left: left + 'px'\n } as CSSProperties\n },\n groupSlot\n ? groupSlot({\n value: row.value,\n rows: row.rows\n })\n : row.value\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, computed, inject } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport GridBodyCell from '../gridbase/GridBodyCell';\nimport DataGridRowDetail from './DataGridRowDetail';\nimport DataGridRowGroup from './DataGridRowGroup';\nimport type { DataGridTableProps } from './types';\nimport { DATAGRID_INJECTION_KEY } from '.';\n\nexport default defineComponent({\n name: 'DataGridTable',\n props: {\n columns: {\n type: Array as PropType<DataGridTableProps['columns']>,\n default: () => []\n },\n rows: {\n type: Array as PropType<DataGridTableProps['rows']>,\n default: () => []\n },\n gridBody: {\n type: Object as PropType<DataGridTableProps['gridBody']>,\n default: () => null\n }\n } satisfies Record<keyof DataGridTableProps, any>,\n setup(props: DataGridTableProps) {\n // const groupTitleRef = ref<HTMLElement | null>(null);\n const dataGridInjection = inject(DATAGRID_INJECTION_KEY, null);\n\n const grid = computed(() => {\n return dataGridInjection;\n });\n\n const showExpandIcon = (): boolean => {\n const gridValue = grid.value;\n const gridBody = props.gridBody;\n if (!gridValue || !gridBody || !gridBody.view) {\n return false;\n }\n if (gridValue.leftColumns) {\n if (gridBody.view.viewIndex == 1) {\n return true;\n }\n } else if (gridBody.view.viewIndex == 2) {\n return true;\n }\n return false;\n };\n\n // const groupTitleWidth = (): number => {\n // return groupTitleRef.value ? domHelper.outerWidth(groupTitleRef.value) : 0;\n // };\n\n const titleLeft = (): number | null => {\n // const gridValue = grid.value;\n // const gridBody = props.gridBody;\n // if (!gridValue || !gridBody || !gridBody.view) {\n // return null;\n // }\n // if (gridBody.view.viewIndex == 2) {\n // if (gridValue.leftColumns) {\n // if (gridValue.view1 && gridValue.$refs && gridValue.$refs.view1 && gridValue.$refs.view1.$refs && gridValue.$refs.view1.$refs.body && gridValue.$refs.view1.$refs.body.$refs) {\n // const bodyRef = gridValue.$refs.view1.$refs.body.$refs.bodyRef as HTMLElement | undefined;\n // if (bodyRef) {\n // const width = domHelper.outerWidth(bodyRef);\n // const expanderWidth = gridValue.expanderWidth || 0;\n // return width - expanderWidth;\n // }\n // }\n // }\n // }\n return null;\n };\n\n const onRowClick = (row: any): void => {\n const gridValue = grid.value;\n if (gridValue && gridValue.onRowClick) {\n gridValue.onRowClick(row);\n }\n };\n\n const onRowDblClick = (row: any): void => {\n const gridValue = grid.value;\n if (gridValue) {\n gridValue.emit('rowDblClick', row);\n }\n };\n\n const onRowContextMenu = (row: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n if (gridValue) {\n gridValue.emit('rowContextMenu', { row: row, originalEvent: event });\n }\n };\n\n const onCellClick = (row: any, col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n // const cellEl = event.currentTarget ? domHelper.closest(event.currentTarget as HTMLElement, '.datagrid-td') : null;\n // const rowEl = cellEl ? domHelper.closest(cellEl, '.datagrid-row') : null;\n if (gridValue && gridValue.onCellClick) {\n gridValue.onCellClick(row, col, event);\n }\n // if (gridValue && (gridValue.clickToEdit || (gridValue.dblclickToEdit && gridValue.editingItem))) {\n // doEdit(row, col, rowEl, cellEl);\n // }\n };\n\n const onCellDblClick = (row: any, col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n const cellEl = event.currentTarget ? domHelper.closest(event.currentTarget as HTMLElement, '.datagrid-td') : null;\n const rowEl = cellEl ? domHelper.closest(cellEl, '.datagrid-row') : null;\n if (gridValue) {\n gridValue.emit('cellDblClick', { row: row, column: col });\n }\n if (gridValue && gridValue.dblclickToEdit) {\n doEdit(row, col, rowEl, cellEl);\n }\n };\n\n const onCellContextMenu = (row: any, col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n if (gridValue) {\n gridValue.emit('cellContextMenu', { row: row, column: col, originalEvent: event });\n }\n };\n\n const onCellKeyDown = (): void => {\n // Empty method - reserved for future use\n };\n\n const doEdit = (row: any, col: any, rowEl: HTMLElement | null, cellEl: HTMLElement | null): void => {\n const gridValue = grid.value;\n if (gridValue && gridValue.beginEdit) {\n gridValue.beginEdit(row, col, rowEl);\n setTimeout(() => {\n if (cellEl) {\n const input = cellEl.querySelector('.textbox-text') as HTMLInputElement | null;\n if (input) {\n input.focus();\n }\n }\n }, 0);\n }\n };\n\n const onGroupExpanderClick = (value: any, event: MouseEvent): void => {\n event.stopPropagation();\n const gridValue = grid.value;\n if (gridValue && gridValue.toggleGroup) {\n gridValue.toggleGroup(value);\n }\n };\n\n const onDetailExpanderClick = (row: any, event: MouseEvent): void => {\n event.stopPropagation();\n const gridValue = grid.value;\n if (gridValue && gridValue.toggleRow) {\n gridValue.toggleRow(row);\n }\n };\n\n const getRowIndex = (rowIndex: number, row: any): number => {\n const gridValue = grid.value;\n if (gridValue && gridValue.groupField && row && row._rowIndex !== undefined) {\n rowIndex = row._rowIndex;\n }\n if (gridValue && gridValue.getAbsoluteIndex) {\n return gridValue.getAbsoluteIndex(rowIndex);\n }\n return rowIndex;\n };\n\n const getCss = (css: any, row: any, value: any, type: 'class' | 'style'): string | Record<string, any> | null => {\n if (css) {\n const cssValue = typeof css == 'function' ? css(row, value) : css;\n if (type == 'class') {\n return typeof cssValue == 'string' ? cssValue : null;\n } else {\n return typeof cssValue == 'object' ? cssValue : null;\n }\n }\n return null;\n };\n\n const getRowClass = (row: any): string | null => {\n const gridValue = grid.value;\n return getCss(gridValue ? gridValue.rowCss : null, row, null, 'class') as string | null;\n };\n\n const getRowStyle = (row: any): CSSProperties | null => {\n const gridValue = grid.value;\n return getCss(gridValue ? gridValue.rowCss : null, row, null, 'style') as CSSProperties | null;\n };\n\n const getCellClass = (column: any, row: any): string | null => {\n return getCss(column ? column.cellCss : null, row, column && row ? row[column.field] : null, 'class') as string | null;\n };\n\n const getCellStyle = (column: any, row: any): CSSProperties | null => {\n return getCss(column ? column.cellCss : null, row, column && row ? row[column.field] : null, 'style') as CSSProperties | null;\n };\n\n // const isEditable = (row: any, col: any): boolean => {\n // const gridValue = grid.value;\n // if (gridValue && gridValue.isEditing && gridValue.isEditing(row, col)) {\n // if (col && col.editable) {\n // return true;\n // }\n // }\n // return false;\n // };\n\n const getCellSpan = (row: any, column: any, _rowIndex: number): { rowspan: number; colspan: number } => {\n const gridValue = grid.value;\n if (gridValue && gridValue.cellSpan) {\n return gridValue.cellSpan(row, column,);\n }\n return { rowspan: 1, colspan: 1 };\n };\n\n const hasCellSpan = (row: any, column: any, rowIndex: number): boolean => {\n const span = getCellSpan(row, column, rowIndex);\n return span.rowspan > 1 || span.colspan > 1;\n };\n\n const renderGroupRow = (row: any): any => {\n const gridValue = grid.value;\n if (!row || !gridValue || !gridValue.isGroupRow || !gridValue.isGroupRow(row)) {\n return null;\n }\n const columns = props.columns || [];\n const titleLeftValue = titleLeft();\n return (\n <tr class=\"datagrid-row datagrid-group-row\">\n <td class=\"datagrid-td-group\" colspan={columns.length}>\n <div class=\"datagrid-group f-row\">\n {\n showExpandIcon() &&\n <span\n class=\"datagrid-group-expander f-row f-content-center f-noshrink\"\n style={{ width: (gridValue.expanderWidth || 0) + 'px' }}\n onClick={(event: MouseEvent) => onGroupExpanderClick(row.value, event)}>\n <span class={'datagrid-row-expander' + (row.collapsed ? ' datagrid-row-expand' : ' datagrid-row-collapse')}>\n </span>\n </span>\n }\n <DataGridRowGroup grid={gridValue} left={titleLeftValue ? -titleLeftValue : 0} row={row}></DataGridRowGroup>\n </div>\n </td>\n </tr>\n );\n };\n\n const renderDefaultRow = (row: any, rowIndex: number): any => {\n const gridValue = grid.value;\n if (!row || (gridValue && gridValue.isGroupRow && gridValue.isGroupRow(row))) {\n return null;\n }\n const columns = props.columns || [];\n const rowClass = getRowClass(row);\n const rowStyle = getRowStyle(row);\n const isHighlighted = gridValue && gridValue.isHighlighted ? gridValue.isHighlighted(row) : false;\n const isSelected = gridValue && gridValue.isSelected ? gridValue.isSelected(row) : false;\n const striped = gridValue ? gridValue.striped : false;\n const rowIndexValue = getRowIndex(rowIndex, row);\n \n return (\n <tr\n class={['datagrid-row', rowClass, isHighlighted ? ' datagrid-row-over' : '', isSelected ? ' datagrid-row-selected' : '', striped && rowIndexValue % 2 ? ' datagrid-row-alt' : ''].filter(Boolean).join(' ')}\n style={rowStyle || undefined}\n onMouseenter={() => {\n if (gridValue) {\n gridValue.highlightRow = row;\n }\n }}\n onMouseleave={() => {\n if (gridValue) {\n gridValue.highlightRow = null;\n }\n }}\n onClick={(_event: MouseEvent) => onRowClick(row)}\n onDblclick={(_event: MouseEvent) => onRowDblClick(row)}\n onContextmenu={(event: MouseEvent) => onRowContextMenu(row, event)}>\n {\n columns.map((col: any) => (\n <>\n {\n col.expander &&\n <td class=\"datagrid-td-expander\">\n <div class=\"datagrid-cell f-row f-content-center\">\n <span\n class={'datagrid-row-expander' + (gridValue && gridValue.isRowExpanded && gridValue.isRowExpanded(row) ? ' datagrid-row-collapse' : ' datagrid-row-expand')}\n onClick={(event: MouseEvent) => onDetailExpanderClick(row, event)}>\n </span>\n </div>\n </td>\n }\n {\n !col.expander && hasCellSpan(row, col, rowIndex) &&\n <td\n class={['datagrid-td', getCellClass(col, row), gridValue && gridValue.isSelected && gridValue.isSelected(row, col) ? ' datagrid-row-selected' : '', gridValue && gridValue.isHighlighted && gridValue.isHighlighted(row, col) ? ' datagrid-row-over' : ''].filter(Boolean).join(' ')}\n style={getCellStyle(col, row) || undefined}\n rowspan={getCellSpan(row, col, rowIndex).rowspan}\n colspan={getCellSpan(row, col, rowIndex).colspan}\n onMouseenter={() => {\n if (gridValue) {\n gridValue.highlightCell = { row: row, column: col };\n }\n }}\n onMouseleave={() => {\n if (gridValue) {\n gridValue.highlightCell = null;\n }\n }}\n onClick={(event: MouseEvent) => onCellClick(row, col, event)}\n onDblclick={(event: MouseEvent) => onCellDblClick(row, col, event)}\n onContextmenu={(event: MouseEvent) => onCellContextMenu(row, col, event)}\n onKeydown={(_event: MouseEvent) => onCellKeyDown()}>\n <GridBodyCell row={row} column={col} rowIndex={getRowIndex(rowIndex, row)}></GridBodyCell>\n </td>\n }\n {\n !col.expander && !hasCellSpan(row, col, rowIndex) &&\n <td\n class={['datagrid-td', getCellClass(col, row), gridValue && gridValue.isSelected && gridValue.isSelected(row, col) ? ' datagrid-row-selected' : '', gridValue && gridValue.isHighlighted && gridValue.isHighlighted(row, col) ? ' datagrid-row-over' : ''].filter(Boolean).join(' ')}\n style={getCellStyle(col, row) || undefined}\n onMouseenter={() => {\n if (gridValue) {\n gridValue.highlightCell = { row: row, column: col };\n }\n }}\n onMouseleave={() => {\n if (gridValue) {\n gridValue.highlightCell = null;\n }\n }}\n onClick={(event: MouseEvent) => onCellClick(row, col, event)}\n onDblclick={(event: MouseEvent) => onCellDblClick(row, col, event)}\n onContextmenu={(event: MouseEvent) => onCellContextMenu(row, col, event)}\n onKeydown={(_event: MouseEvent) => onCellKeyDown()}>\n <GridBodyCell row={row} column={col} rowIndex={getRowIndex(rowIndex, row)}></GridBodyCell>\n </td>\n }\n </>\n ))\n }\n </tr>\n );\n };\n\n const renderDetailRow = (row: any, rowIndex: number): any => {\n const gridValue = grid.value;\n const gridBody = props.gridBody;\n const columns = props.columns || [];\n if (gridValue && gridValue.slots && gridValue.slots['detail'] && gridValue.isRowExpanded && gridValue.isRowExpanded(row) && (!gridValue.isGroupRow || !gridValue.isGroupRow(row))) {\n return (\n <tr>\n <td colspan={columns.length}>\n <DataGridRowDetail gridBody={gridBody} row={row} rowIndex={getRowIndex(rowIndex, row)}></DataGridRowDetail>\n </td>\n </tr>\n );\n } else {\n return null;\n }\n };\n\n return () => {\n const columns = props.columns || [];\n const rows = props.rows || [];\n return (\n <table class=\"datagrid-btable\" border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n <colgroup>\n {\n columns.map((col: any, index: number) => (\n <col key={index} style={{ width: col.widthState }}></col>\n ))\n }\n </colgroup>\n <tbody>\n {\n rows.map((row: any, rowIndex: number) => (\n <>\n {renderGroupRow(row)}\n {renderDefaultRow(row, rowIndex)}\n {renderDetailRow(row, rowIndex)}\n </>\n ))\n }\n </tbody>\n </table>\n );\n };\n }\n});\n","import type { PropType } from 'vue';\nimport type { GridBodyProps } from './types';\n\n/**\n * GridBody 运行时 props 抽取:用于替代 `extends: GridBody`\n */\nexport const gridBodyProps = {\n columns: {\n type: Array as PropType<GridBodyProps['columns']>,\n default: () => []\n },\n rows: {\n type: Array as PropType<GridBodyProps['rows']>,\n default: () => []\n },\n align: String as PropType<GridBodyProps['align']>\n} satisfies Record<string, any>;\n","import domHelper from '../base/DomHelper';\n\n/**\n * useGridBodyBase:提供 GridBody 的通用实现(替代 extends)\n * - 注意:这里为了兼容现有大量 `$refs.bodyRef/$refs.innerRef` 访问方式,\n * 不强行改成 setup ref,而是继续依赖组件实例上的 `$refs`。\n */\nexport function useGridBodyBase(proxy: any, emit: (evt: string, payload?: any) => void) {\n function onScroll(): void {\n const bodyRef = proxy?.$refs?.bodyRef as HTMLElement | undefined;\n if (!bodyRef) return;\n emit('bodyScroll', { left: bodyRef.scrollLeft, top: bodyRef.scrollTop });\n }\n\n function scrollTop(value?: number): number | void {\n const bodyRef = proxy?.$refs?.bodyRef as HTMLElement | undefined;\n if (value === undefined) {\n return proxy?.scrollTopState ?? 0;\n } else {\n proxy.scrollTopState = value;\n if (bodyRef) bodyRef.scrollTop = value;\n }\n }\n\n function scrollbarWidth(): number {\n const bodyRef = proxy?.$refs?.bodyRef as HTMLElement | undefined;\n const innerRef = proxy?.$refs?.innerRef as HTMLElement | undefined;\n if (!bodyRef || !innerRef) return 0;\n return domHelper.outerWidth(bodyRef) - domHelper.outerWidth(innerRef);\n }\n\n return { onScroll, scrollTop, scrollbarWidth };\n}\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, CSSProperties, computed, getCurrentInstance, ref, watch } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport VirtualScroll from '../base/VirtualScroll';\nimport DataGridTable from './DataGridTable';\nimport { gridBodyProps } from '../gridbase/gridBodyProps';\nimport { useGridBodyBase } from '../gridbase/useGridBodyBase';\nimport type { DataGridBodyProps } from './types';\n\nexport default defineComponent({\n name: 'DataGridBody',\n props: {\n ...gridBodyProps\n } satisfies Record<keyof DataGridBodyProps, any>,\n setup(props: DataGridBodyProps, { emit, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n // 替代 GridBody.data()\n const scrollTopState = ref(0);\n\n const marginTop = ref(0);\n const currRows = ref<any[]>([]);\n\n const view = computed<any>(() => proxy?.$parent);\n\n const isVirtualScroll = computed<boolean>(() => {\n const v = view.value;\n return !!(v && v.grid && v.grid.virtualScroll && v.viewIndex == 2);\n });\n\n // rows watch 逻辑保持一致\n watch(\n () => props.rows,\n () => {\n const v = view.value;\n if (v && v.grid && v.grid.virtualScroll) {\n const pageSize = v.grid.pageSize || 10;\n currRows.value = (props.rows || []).slice(0, pageSize * 2);\n } else {\n currRows.value = props.rows || [];\n }\n },\n { immediate: true }\n );\n\n // 复用 GridBody 的 onScroll(但 DataGridBody 有自己的 scrollTop/scrollbarWidth 覆写)\n const base = useGridBodyBase(proxy, emit);\n\n function scrollTop(value?: number): number | void {\n if (value === undefined) {\n if (isVirtualScroll.value) {\n const vscroll = proxy?.$refs?.vscroll as any;\n if (vscroll && vscroll.relativeScrollTop) return vscroll.relativeScrollTop();\n return 0;\n } else {\n const bodyRef = proxy?.$refs?.bodyRef as HTMLElement | undefined;\n return bodyRef ? bodyRef.scrollTop : 0;\n }\n } else {\n // 保持旧行为:非虚拟滚动时用 marginTop “假滚动”\n if (!isVirtualScroll.value) {\n marginTop.value = -value;\n }\n }\n }\n\n function scrollbarWidth(): number {\n const vscroll = proxy?.$refs?.vscroll as any;\n if (vscroll && vscroll.scrollbarWidth) {\n return vscroll.scrollbarWidth();\n } else {\n const bodyRef = proxy?.$refs?.bodyRef as HTMLElement | undefined;\n const innerRef = proxy?.$refs?.innerRef as HTMLElement | undefined;\n if (bodyRef && innerRef) {\n return domHelper.outerWidth(bodyRef) - domHelper.outerWidth(innerRef);\n }\n return 0;\n }\n }\n\n function onVirtualScroll(event: any): void {\n emit('bodyScroll', event);\n }\n\n function onVirtualPageChange(event: any): void {\n const v = view.value;\n if (v && v.grid && v.grid.onVirtualPageChange) {\n v.grid.onVirtualPageChange(event);\n }\n }\n\n function onVirtualPageUpdate(event: any[]): void {\n currRows.value = event;\n const v = view.value;\n const vscroll = proxy?.$refs?.vscroll as any;\n const st = vscroll && vscroll.scrollTop ? vscroll.scrollTop : 0;\n if (v && v.grid && v.grid.updateFrozenView) {\n v.grid.updateFrozenView(st, currRows.value);\n }\n }\n\n // 暴露给 GridView/GridBase 使用的实例方法/字段名(保持旧命名)\n const bodyRef = ref<HTMLElement | null>(null);\n const innerRef = ref<HTMLElement | null>(null);\n const vscrollRef = ref<any>(null);\n\n // 暴露方法给父组件\n expose({\n scrollTop,\n scrollbarWidth,\n scrollTopState,\n marginTop,\n currRows,\n view,\n isVirtualScroll,\n onScroll: base.onScroll,\n onVirtualScroll,\n onVirtualPageChange,\n onVirtualPageUpdate\n });\n\n return () => {\n const columns = props.columns || [];\n const grid = view.value && view.value.grid ? view.value.grid : null;\n\n return (\n <div\n ref={bodyRef}\n class={['datagrid-body', 'f-full', isVirtualScroll.value ? 'datagrid-vbody f-column' : ''].filter(Boolean).join(' ')}\n style={{ marginTop: 0 } as CSSProperties}\n onScroll={base.onScroll}\n >\n <div\n ref={innerRef}\n class={['datagrid-body-inner', isVirtualScroll.value ? 'f-column f-full panel-noscroll' : ''].filter(Boolean).join(' ')}\n style={{ marginTop: marginTop.value + 'px' } as CSSProperties}\n >\n {!isVirtualScroll.value && <DataGridTable columns={columns} rows={currRows.value} gridBody={proxy}></DataGridTable>}\n\n {isVirtualScroll.value && grid && (\n <VirtualScroll\n ref={vscrollRef}\n class=\"f-full\"\n data={props.rows || []}\n total={grid.total || 0}\n pageSize={grid.pageSize || 10}\n rowHeight={grid.rowHeight || 32}\n lazy={grid.lazy || false}\n pageNumber={grid.pageNumber || 1}\n onUpdate={onVirtualPageUpdate}\n onBodyScroll={onVirtualScroll}\n onPageChange={onVirtualPageChange}\n >\n <DataGridTable columns={columns} rows={currRows.value} gridBody={proxy}></DataGridTable>\n </VirtualScroll>\n )}\n </div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, ref } from 'vue';\nimport GridHeader from '../gridbase/GridHeader';\nimport GridFooter from '../gridbase/GridFooter';\nimport { gridViewProps } from '../gridbase/gridViewProps';\nimport { useGridViewBase } from '../gridbase/useGridViewBase';\nimport DataGridBody from './DataGridBody';\nimport type { DataGridViewProps } from './types';\n\nexport default defineComponent({\n name: 'DataGridView',\n props: {\n ...gridViewProps,\n // DataGridView 额外的 style\n style: Object as PropType<DataGridViewProps['style']>\n } satisfies Record<keyof DataGridViewProps, any>,\n setup(props: DataGridViewProps, { emit }) {\n const gv = useGridViewBase(props as any, { emit } as any);\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const grid = () => proxy?.$parent;\n\n function onHeaderCellClick(event: any): void {\n const g = grid();\n const col = event.column;\n if (g && col && col.sortable) {\n if (g.addSort) g.addSort(event.column);\n if (g.setData && g.innerData) g.setData(g.innerData);\n\n // DataGridView 特有:刷新 vscroll\n const body = proxy?.$refs?.body as any;\n if (body && body.$refs && body.$refs.vscroll && body.$refs.vscroll.refresh) {\n body.$refs.vscroll.refresh();\n }\n\n if (g.sortsState) g.$emit('sortChange', g.sortsState);\n }\n }\n\n const headerRef = ref<any>(null);\n const bodyRef = ref<any>(null);\n const footerRef = ref<any>(null);\n\n return () => {\n const gridValue = grid();\n const columns = props.columns || [];\n const rows = props.rows || [];\n const footerRows = props.footerRows || [];\n const showHeader = gridValue && gridValue.showHeader !== false;\n const showFooter = gridValue && gridValue.showFooter === true;\n\n return (\n <div class={gv.viewCls.value} style={props.style}>\n {showHeader && (\n <GridHeader\n ref={headerRef}\n columnGroup={props.columnGroup}\n columns={columns}\n paddingWidth={gv.headerPaddingWidth.value}\n grid={gridValue}\n onCellClick={onHeaderCellClick}\n />\n )}\n\n <DataGridBody ref={bodyRef} align=\"center\" columns={columns} rows={rows} onBodyScroll={gv.onBodyScroll} />\n\n {showFooter && <GridFooter ref={footerRef} columns={columns} rows={footerRows} paddingWidth={gv.headerPaddingWidth.value} />}\n </div>\n );\n };\n }\n});\n","import type { PropType } from 'vue';\nimport { listBaseProps } from '../base/listBaseProps';\nimport type { GridBaseProps } from './types';\n\n/**\n * GridBase 的运行时 props 定义(用于“组合”替代 extends 时复用)\n * 注意:这里与 `GridBase.tsx` 的 props 保持一致。\n */\nexport const gridBaseProps = {\n ...listBaseProps,\n selectionMode: {\n type: String as PropType<GridBaseProps['selectionMode']>,\n default: 'single'\n },\n rowHeight: {\n type: Number as PropType<GridBaseProps['rowHeight']>,\n default: 32\n },\n striped: {\n type: Boolean as PropType<GridBaseProps['striped']>,\n default: false\n },\n rowCss: [Object, Function] as PropType<GridBaseProps['rowCss']>,\n frozenWidth: {\n type: [Number, String] as PropType<GridBaseProps['frozenWidth']>,\n default: '200px'\n },\n frozenAlign: {\n type: String as PropType<GridBaseProps['frozenAlign']>,\n default: 'left'\n },\n sorts: {\n type: [Object, Array] as PropType<GridBaseProps['sorts']>,\n default: () => []\n },\n multiSort: {\n type: Boolean as PropType<GridBaseProps['multiSort']>,\n default: false\n },\n showHeader: {\n type: Boolean as PropType<GridBaseProps['showHeader']>,\n default: true\n },\n showFooter: {\n type: Boolean as PropType<GridBaseProps['showFooter']>,\n default: false\n },\n editMode: String as PropType<GridBaseProps['editMode']>,\n tipOptions: Object as PropType<GridBaseProps['tipOptions']>,\n clickToEdit: {\n type: Boolean as PropType<GridBaseProps['clickToEdit']>,\n default: false\n },\n dblclickToEdit: {\n type: Boolean as PropType<GridBaseProps['dblclickToEdit']>,\n default: false\n },\n footerData: {\n type: Array as PropType<GridBaseProps['footerData']>,\n default: () => []\n },\n filterRules: {\n type: Array as PropType<GridBaseProps['filterRules']>,\n default: () => []\n },\n columnResizing: {\n type: Boolean as PropType<GridBaseProps['columnResizing']>,\n default: false\n },\n columnMoving: {\n type: Boolean as PropType<GridBaseProps['columnMoving']>,\n default: false\n },\n cellSpan: {\n type: Function as PropType<GridBaseProps['cellSpan']>,\n default: () => {\n return {\n rowspan: 1,\n colspan: 1\n };\n }\n }\n} satisfies Record<string, any>;\n\n","import { computed, CSSProperties, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type Ref, type SetupContext } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport { useListBase, UseListBaseOverrides } from '../base/useListBase';\nimport type { FilterRule } from '../base/types';\nimport type { GridBaseProps, SortItem } from './types';\n\nexport interface UseGridBaseReturn {\n // list base (spread)\n [key: string]: any;\n\n // state (names align with legacy data fields)\n leftGroup: Ref<any>;\n rightGroup: Ref<any>;\n centerGroup: Ref<any>;\n leftColumns: Ref<any[]>;\n rightColumns: Ref<any[]>;\n centerColumns: Ref<any[]>;\n columnRefs: Ref<any[]>;\n groupRefs: Ref<any[]>;\n sortsState: Ref<SortItem[]>;\n editingItem: Ref<any>;\n headerHeight: Ref<number>;\n splitStyle: Ref<CSSProperties | null>;\n hasDestroyed: Ref<boolean>;\n columnTimer: Ref<ReturnType<typeof setTimeout> | null>;\n\n // computed\n allColumns: ReturnType<typeof computed<any[]>>;\n footerRows: ReturnType<typeof computed<any[]>>;\n leftFrozenWidth: ReturnType<typeof computed<number | string>>;\n rightFrozenWidth: ReturnType<typeof computed<number | string>>;\n\n // methods (names align with legacy methods)\n addColumn: (column: any) => void;\n removeColumn: (column: any) => void;\n addColumnGroup: (group: any) => void;\n removeColumnGroup: (group: any) => void;\n changeColumns: () => void;\n initColumns: () => void;\n initHeaderHeight: () => void;\n initFilterRules: () => void;\n getColumnLayout: (group: any) => any[][];\n getColumnCount: (group: any) => number;\n getColumnIndex: (a: any[]) => number;\n onBodyScroll: (event: any) => void;\n addSort: (col: any) => void;\n initColumnSort: () => void;\n findColumn: (field: string) => any | null;\n addFilterRule: (rule: FilterRule) => void;\n resizeColumn: (field: string, width: number) => void;\n moveColumn: (fromField: string, toField: string, point: 'before' | 'after') => void;\n isEditing: (row: any, column?: any) => boolean;\n beginEdit: (row: any, column?: any, rowEl?: HTMLElement | null) => void;\n endEdit: () => void;\n cancelEdit: () => void;\n navRow: (step: number) => void;\n}\n\n\n/**\n * useGridBase:替代 `extends: GridBase`\n *\n * 说明:\n * - 通过 refs 模拟旧的 data 字段(并保持字段名一致,确保 `this.xxx` 还能工作)\n * - 内部组合 useListBase,并把部分方法挂到 proxy 上(兼容旧的 `_listBase_xxx` 调用点)\n * - 仍然依赖组件实例(proxy.$refs / proxy.$el),因为现有 Grid 体系大量使用 `$refs` 链式访问\n */\nexport function useGridBase(\n props: GridBaseProps,\n ctx: Pick<SetupContext, 'emit'>,\n overrides: UseListBaseOverrides = {}\n): UseGridBaseReturn {\n const emit = ctx.emit;\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const lb = useListBase(props, { emit }, overrides);\n\n // 兼容旧写法:子组件/本组件中曾通过 `this._listBase_xxx(...)` 调用父类实现\n if (proxy) {\n proxy.setData = lb.setData;\n proxy.updateAfterSelectionChange = lb.updateAfterSelectionChange;\n proxy._listBase_setData = lb.setData;\n proxy._listBase_setPageData = lb.setPageData;\n proxy._listBase_navRow = lb.navRow;\n proxy._listBase_addFilterRule = lb.addFilterRule;\n }\n\n const leftGroup = ref<any>(null);\n const rightGroup = ref<any>(null);\n const centerGroup = ref<any>(null);\n const leftColumns = ref<any[]>([]);\n const rightColumns = ref<any[]>([]);\n const centerColumns = ref<any[]>([]);\n const columnRefs = ref<any[]>([]);\n const groupRefs = ref<any[]>([]);\n const sortsState = ref<SortItem[]>(\n (props.sorts ? (Array.isArray(props.sorts) ? props.sorts : [props.sorts]) : []) as SortItem[]\n );\n const editingItem = ref<any>(null);\n const headerHeight = ref<number>(0);\n const splitStyle = ref<CSSProperties | null>(null);\n const hasDestroyed = ref<boolean>(false);\n const columnTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n\n const allColumns = computed<any[]>(() => {\n const cc: any[] = [];\n if (leftColumns.value) cc.push(...leftColumns.value);\n if (centerColumns.value) cc.push(...centerColumns.value);\n if (rightColumns.value) cc.push(...rightColumns.value);\n return cc;\n });\n\n const footerRows = computed<any[]>(() => {\n const fd: any = (props as any).footerData;\n if (fd instanceof Array) return fd;\n return [fd];\n });\n\n const leftFrozenWidth = computed<number | string>(() => {\n const width = leftGroup.value ? leftGroup.value.widthState : null;\n return width ? width : (props.frozenWidth || 0);\n });\n\n const rightFrozenWidth = computed<number | string>(() => {\n const width = rightGroup.value ? rightGroup.value.widthState : null;\n return width ? width : (props.frozenWidth || 0);\n });\n\n function changeColumns(): void {\n if (hasDestroyed.value) return;\n if (columnTimer.value) {\n clearTimeout(columnTimer.value);\n }\n columnTimer.value = setTimeout(() => {\n initColumns();\n initHeaderHeight();\n columnTimer.value = null;\n }, 0);\n }\n\n function addColumn(column: any): void {\n columnRefs.value.push(column);\n changeColumns();\n }\n\n function removeColumn(column: any): void {\n const index = columnRefs.value.indexOf(column);\n if (index >= 0) {\n columnRefs.value.splice(index, 1);\n changeColumns();\n }\n }\n\n function addColumnGroup(group: any): void {\n groupRefs.value.push(group);\n changeColumns();\n }\n\n function removeColumnGroup(group: any): void {\n const index = groupRefs.value.indexOf(group);\n if (index >= 0) {\n groupRefs.value.splice(index, 1);\n changeColumns();\n }\n }\n\n function getColumnCount(group: any): number {\n let count = 0;\n if (group.rows && group.rows[0] && group.rows[0].columns) {\n group.rows[0].columns.filter((c: any) => !c.hidden).forEach((col: any) => {\n count += Number(col.colspan);\n });\n }\n return count;\n }\n\n function getColumnIndex(a: any[]): number {\n for (let i = 0; i < a.length; i++) {\n if (a[i] == undefined) return i;\n }\n return -1;\n }\n\n function getColumnLayout(group: any): any[][] {\n const aa: any[][] = [];\n const count = getColumnCount(group);\n for (let i = 0; i < group.rows.length; i++) {\n aa[i] = new Array(count);\n }\n group.rows.forEach((row: any, rowIndex: number) => {\n row.columns.filter((c: any) => !c.hidden).forEach((col: any) => {\n const colIndex = getColumnIndex(aa[rowIndex]);\n if (colIndex >= 0) {\n for (let c = 0; c < col.colspan; c++) {\n for (let r = 0; r < col.rowspan; r++) {\n aa[rowIndex + r][colIndex + c] = col || '';\n }\n }\n }\n });\n });\n return aa;\n }\n\n function initColumns(): void {\n const newState: {\n leftGroup: any | null;\n leftColumns: any[] | null;\n rightGroup: any | null;\n rightColumns: any[] | null;\n centerGroup: any | null;\n centerColumns: any[] | null;\n } = {\n leftGroup: null,\n leftColumns: null,\n rightGroup: null,\n rightColumns: null,\n centerGroup: null,\n centerColumns: null\n };\n\n const gr = groupRefs.value;\n if (gr && gr.length) {\n gr.forEach((g: any) => {\n const cc = getColumnLayout(g);\n const columns = cc[cc.length - 1];\n if (g.frozen) {\n if (g.align == 'left') {\n newState.leftGroup = g;\n newState.leftColumns = columns;\n } else {\n newState.rightGroup = g;\n newState.rightColumns = columns;\n }\n } else {\n newState.centerGroup = g;\n newState.centerColumns = columns;\n }\n });\n }\n\n if (!newState.centerColumns) {\n newState.centerColumns = columnRefs.value.filter((c: any) => {\n return !c.frozenState && !c.hidden;\n });\n const frozenColumns = columnRefs.value.filter((c: any) => {\n return c.frozenState && !c.hidden;\n });\n if (frozenColumns.length) {\n if (props.frozenAlign == 'left') {\n newState.leftColumns = frozenColumns;\n } else {\n newState.rightColumns = frozenColumns;\n }\n }\n }\n\n leftGroup.value = newState.leftGroup;\n rightGroup.value = newState.rightGroup;\n centerGroup.value = newState.centerGroup;\n leftColumns.value = newState.leftColumns || [];\n rightColumns.value = newState.rightColumns || [];\n centerColumns.value = newState.centerColumns || [];\n\n allColumns.value.forEach((c: any) => {\n c.grid = proxy;\n });\n initColumnSort();\n }\n\n function initHeaderHeight(): void {\n const view1 = proxy?.$refs?.view1 as any;\n const view2 = proxy?.$refs?.view2 as any;\n const view3 = proxy?.$refs?.view3 as any;\n\n if (view1 && view1.headerHeight) view1.headerHeight(null);\n if (view2 && view2.headerHeight) view2.headerHeight(null);\n if (view3 && view3.headerHeight) view3.headerHeight(null);\n\n nextTick(() => {\n const h1 = view1 && view1.headerHeight ? view1.headerHeight() : 0;\n const h2 = view2 && view2.headerHeight ? view2.headerHeight() : 0;\n const h3 = view3 && view3.headerHeight ? view3.headerHeight() : 0;\n headerHeight.value = Math.max(h1, h2, h3);\n if (view1 && view1.headerHeight) view1.headerHeight(headerHeight.value);\n if (view2 && view2.headerHeight) view2.headerHeight(headerHeight.value);\n if (view3 && view3.headerHeight) view3.headerHeight(headerHeight.value);\n });\n }\n\n function initFilterRules(): void {\n const fr: any[] = (props as any).filterRules || [];\n fr.forEach((r: any) => {\n const col = findColumn(r.field);\n if (col) {\n col.filterValue = r.value;\n col.filterOperator = r.op;\n }\n });\n }\n\n function onBodyScroll(event: any): void {\n const view2 = proxy?.$refs?.view2 as any;\n const top = event ? event.top : (view2 && view2.scrollTop ? view2.scrollTop() : 0);\n const view1 = proxy?.$refs?.view1 as any;\n const view3 = proxy?.$refs?.view3 as any;\n if (view1 && view1.scrollTop) view1.scrollTop(top);\n if (view3 && view3.scrollTop) view3.scrollTop(top);\n }\n\n function addSort(col: any): void {\n let index = -1;\n for (let i = 0; i < sortsState.value.length; i++) {\n if (sortsState.value[i].field == col.field) {\n index = i;\n break;\n }\n }\n if (index >= 0) {\n const nextOrder = sortsState.value[index].order == 'asc' ? 'desc' : 'asc';\n if (props.multiSort && nextOrder == col.order) {\n sortsState.value.splice(index, 1);\n } else {\n sortsState.value[index].order = nextOrder;\n }\n } else {\n if (props.multiSort) {\n sortsState.value.push({\n field: col.field,\n order: col.order || 'asc'\n } as any);\n } else {\n sortsState.value = [{\n field: col.field,\n order: col.order || 'asc'\n } as any];\n }\n }\n initColumnSort();\n }\n\n function initColumnSort(): void {\n let ss: any = sortsState.value || [];\n if (!(ss instanceof Array)) ss = [ss];\n if (!props.multiSort) ss = ss.slice(0, 1);\n sortsState.value = ss;\n for (let c = 0; c < allColumns.value.length; c++) {\n const col = allColumns.value[c];\n col.currOrder = null;\n for (let s = 0; s < sortsState.value.length; s++) {\n const sort = sortsState.value[s];\n if (sort.field == col.field) {\n col.currOrder = sort.order;\n break;\n }\n }\n }\n }\n\n function findColumn(field: string): any | null {\n const cc = allColumns.value;\n for (let i = 0; i < cc.length; i++) {\n if (cc[i].field == field) return cc[i];\n }\n return null;\n }\n\n function addFilterRule(rule: FilterRule): void {\n (proxy as any)?._listBase_addFilterRule?.(rule);\n const col = findColumn(rule.field);\n if (col) {\n col.filterValue = (rule as any).value;\n col.filterOperator = (rule as any).op;\n }\n }\n\n function resizeColumn(field: string, width: number): void {\n const col = findColumn(field);\n if (col) {\n col.widthState = domHelper.toStyleValue(width);\n emit('columnResize', col);\n }\n }\n\n function moveColumn(fromField: string, toField: string, point: 'before' | 'after'): void {\n const leftCount = (leftColumns.value || []).length;\n const centerCount = (centerColumns.value || []).length;\n const cr = columnRefs.value.slice();\n const fromIndex = cr.findIndex((col: any) => col.field === fromField);\n const fromCol = cr[fromIndex];\n cr.splice(fromIndex, 1);\n const toIndex = cr.findIndex((col: any) => col.field === toField);\n cr.splice(toIndex + (point === 'before' ? 0 : 1), 0, fromCol);\n for (let i = 0; i < cr.length; i++) {\n cr[i].frozenState = true;\n }\n for (let i = leftCount; i < leftCount + centerCount; i++) {\n cr[i].frozenState = false;\n }\n columnRefs.value = cr;\n splitStyle.value = null;\n nextTick(() => {\n emit('columnMove', {\n from: findColumn(fromField),\n to: findColumn(toField),\n point\n });\n });\n }\n\n function isEditing(row: any, column: any = null): boolean {\n if (props.editMode && editingItem.value) {\n if (props.editMode == 'cell' && editingItem.value.column != column) return false;\n const idField = (props as any).idField;\n if (idField) {\n if (editingItem.value.row[idField] == row[idField]) return true;\n } else {\n if (editingItem.value.row == row) return true;\n }\n }\n return false;\n }\n\n function endEdit(): void {\n if (editingItem.value) {\n const el = editingItem.value.element as HTMLElement | null;\n if (el && el.querySelector('.validatebox-invalid')) return;\n if (editingItem.value.invalid) return;\n emit('editEnd', editingItem.value);\n editingItem.value = null;\n }\n }\n\n function beginEdit(row: any, column: any = null, rowEl: HTMLElement | null = null): void {\n if (!isEditing(row, column)) {\n endEdit();\n if (editingItem.value) {\n setTimeout(() => {\n if (props.editMode == 'row') {\n (proxy as any)?.selectRow?.(editingItem.value.row);\n } else if (props.editMode == 'cell') {\n (proxy as any)?.selectCell?.(editingItem.value.row, editingItem.value.column);\n }\n }, 0);\n return;\n }\n const originalValue = props.editMode == 'row' ? Object.assign({}, row) : row[column.field];\n editingItem.value = {\n row,\n column,\n originalValue,\n element: rowEl\n };\n emit('editBegin', editingItem.value);\n }\n }\n\n function cancelEdit(): void {\n if (editingItem.value) {\n const item = editingItem.value;\n editingItem.value = null;\n setTimeout(() => {\n if (props.editMode == 'cell') {\n item.row[item.column.field] = item.originalValue;\n } else {\n Object.assign(item.row, item.originalValue);\n }\n emit('editCancel', item);\n }, 0);\n }\n }\n\n function navRow(step: number): void {\n lb.navRow(step);\n const rows = lb.rows.value || [];\n const highlightRow = lb.highlightRow.value;\n const index = rows.indexOf(highlightRow);\n if (index >= 0) {\n nextTick(() => {\n const view2 = proxy?.$refs?.view2 as any;\n if (view2 && view2.$refs && view2.$refs.body && view2.$refs.body.$refs) {\n const container = view2.$refs.body.$refs.bodyRef as HTMLElement | undefined;\n if (container) {\n const item = container.querySelector('.datagrid-row-over');\n if (item) {\n domHelper.scrollTo(container, item as HTMLElement);\n }\n }\n }\n });\n }\n }\n\n // watchers (match legacy behavior: array mutations should trigger)\n // watch(\n // groupRefs,\n // () => {\n // initColumns();\n // initHeaderHeight();\n // },\n // { deep: true }\n // );\n // watch(\n // columnRefs,\n // () => {\n // initColumns();\n // initHeaderHeight();\n // },\n // { deep: true }\n // );\n watch(\n () => (props as any).filterRules,\n () => {\n initFilterRules();\n },\n { deep: true }\n );\n\n // created() equivalent\n initColumnSort();\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on('tabSelect', (tab: any) => {\n if (proxy?.$el && domHelper.isChild(proxy.$el as HTMLElement, tab.$el)) {\n if (!headerHeight.value) {\n initHeaderHeight();\n }\n }\n });\n eventHub.$on('panelSelect', (panel: any) => {\n if (proxy?.$el && domHelper.isChild(proxy.$el as HTMLElement, panel.$el)) {\n if (!headerHeight.value) {\n initHeaderHeight();\n }\n }\n });\n }\n\n onMounted(() => {\n hasDestroyed.value = false;\n initFilterRules();\n nextTick(() => initHeaderHeight());\n const eh = (window as any).EventHub;\n if (eh) {\n eh.$emit('gridMounted', proxy);\n }\n });\n\n onBeforeUnmount(() => {\n hasDestroyed.value = true;\n if (columnTimer.value) {\n clearTimeout(columnTimer.value);\n }\n });\n\n return {\n ...lb,\n leftGroup,\n rightGroup,\n centerGroup,\n leftColumns,\n rightColumns,\n centerColumns,\n columnRefs,\n groupRefs,\n sortsState,\n editingItem,\n headerHeight,\n splitStyle,\n hasDestroyed,\n columnTimer,\n allColumns,\n footerRows,\n leftFrozenWidth,\n rightFrozenWidth,\n addColumn,\n removeColumn,\n addColumnGroup,\n removeColumnGroup,\n changeColumns,\n initColumns,\n initHeaderHeight,\n initFilterRules,\n getColumnLayout,\n getColumnCount,\n getColumnIndex,\n onBodyScroll,\n addSort,\n initColumnSort,\n findColumn,\n addFilterRule,\n resizeColumn,\n moveColumn,\n isEditing,\n beginEdit,\n endEdit,\n cancelEdit,\n navRow\n } as any;\n}\n\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, computed, getCurrentInstance, ref, watch, provide } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport Pagination from '../pagination/Pagination';\nimport GridEmpty from '../gridbase/GridEmpty';\nimport DataGridView from './DataGridView';\nimport { gridBaseProps } from '../gridbase/gridBaseProps';\nimport { useGridBase } from '../gridbase/useGridBase';\nimport type { DataGridProps } from './types';\nimport { DATAGRID_INJECTION_KEY } from '.';\n\nexport default defineComponent({\n name: 'DataGrid',\n props: {\n ...gridBaseProps,\n groupField: String as PropType<DataGridProps['groupField']>,\n expanderWidth: {\n type: Number as PropType<DataGridProps['expanderWidth']>,\n default: 30\n },\n aggregate: Function as PropType<DataGridProps['aggregate']>\n } satisfies Record<string, any>,\n setup(props: DataGridProps, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const gb = useGridBase(props, { emit });\n\n const groupData = ref<any[]>([]);\n const expandedRows = ref<any[]>([]);\n const frozenRows = ref<any[]>([]);\n\n watch(\n () => gb.rows.value,\n () => {\n if (!(props as any).virtualScroll) {\n frozenRows.value = gb.rows.value || [];\n }\n }\n );\n\n function setData(value?: any[]): void {\n if (value == null) value = [];\n gb.setData(value);\n const virtualScroll = (props as any).virtualScroll;\n frozenRows.value = virtualScroll ? [] : gb.rows.value || [];\n }\n\n function isGroupRow(row: any): boolean {\n return row && row._groupRow ? true : false;\n }\n\n function isGrouped(data: any[]): boolean {\n if (data && data.length) {\n if (isGroupRow(data[0])) return true;\n }\n return false;\n }\n\n function getGroup(value: any, groups?: any[]): any {\n const gg = groups || groupData.value;\n for (const group of gg) {\n if (group.value == value) return group;\n }\n return null;\n }\n\n function makeGroup(data: any[]): any[] {\n const groups: any[] = [];\n for (const row of data || []) {\n if (!isGroupRow(row)) {\n let group = getGroup(row[(props as any).groupField || ''], groups);\n if (group) {\n group.rows.push(row);\n } else {\n group = {\n value: row[(props as any).groupField || ''],\n collapsed: false,\n rows: [row]\n };\n groups.push(group);\n }\n }\n }\n if ((props as any).aggregate) {\n groups.forEach(group => {\n const row = (props as any).aggregate!(group.rows);\n group.rows.push(row);\n });\n }\n return groups;\n }\n\n function makeGroupedRows(): any[] {\n let rows: any[] = [];\n for (const group of groupData.value) {\n rows.push({\n _groupRow: true,\n value: group.value,\n rows: group.rows,\n collapsed: group.collapsed\n });\n if (!group.collapsed) {\n rows = rows.concat(group.rows);\n }\n }\n return rows;\n }\n\n function setGroupData(): void {\n if ((props as any).groupField) {\n const filteredData = gb.filteredData.value || [];\n if (!isGrouped(filteredData)) {\n groupData.value = makeGroup(filteredData);\n gb.filteredData.value = makeGroupedRows();\n let index = 0;\n (gb.filteredData.value || []).forEach((row: any) => {\n if (!isGroupRow(row)) {\n row._rowIndex = index++;\n }\n });\n }\n }\n }\n\n function setPageData(): void {\n if ((props as any).groupField) {\n const dataRows = makeGroupedRows();\n const getIndex = (index: number): number => {\n let count = 0;\n let currIndex = 0;\n if (index === 0) return 0;\n for (let i = 0; i < dataRows.length && count < index; i++) {\n const row = dataRows[i];\n if (!isGroupRow(row)) {\n count++;\n currIndex = i;\n } else {\n const group = getGroup(row.value);\n if (group) {\n row.collapsed = group.collapsed;\n }\n }\n }\n return currIndex + 1;\n };\n const pageNumberState = gb.pageNumberState.value || 1;\n const pageSizeState = gb.pageSizeState.value || 10;\n const start = (pageNumberState - 1) * pageSizeState;\n const end = start + pageSizeState;\n const rows = dataRows.slice(getIndex(start), getIndex(end));\n const groupedRows = dataRows.filter((row: any) => isGroupRow(row));\n gb.totalState.value = dataRows.length - groupedRows.length;\n const totalState = gb.totalState.value || 0;\n const pageCount = !totalState ? 0 : Math.ceil(totalState / pageSizeState) || 1;\n\n const lastRows: any[] = [];\n if (pageNumberState === pageCount) {\n for (let i = groupedRows.length - 1; i >= 0; i--) {\n const row = groupedRows[i];\n if (row.collapsed) lastRows.unshift(row);\n else break;\n }\n }\n gb.rows.value = rows.concat(lastRows);\n } else {\n gb.setPageData();\n }\n }\n\n function updateFrozenView(scrollTop: number, rows?: any[]): void {\n if (rows) {\n frozenRows.value = rows;\n }\n const view1 = proxy?.$refs?.view1 as any;\n const view3 = proxy?.$refs?.view3 as any;\n if (view1 && view1.scrollTop) view1.scrollTop(scrollTop);\n if (view3 && view3.scrollTop) view3.scrollTop(scrollTop);\n }\n\n function onBodyScroll(event: any): void {\n updateFrozenView(event?.relativeTop || event?.top, event?.items);\n }\n\n function getRowIndex(row: any): number {\n const view2 = proxy?.$refs?.view2 as any;\n if (!view2 || !view2.$refs || !view2.$refs.body) return -1;\n const body = view2.$refs.body;\n const index = (body.currRows || []).indexOf(row);\n if (index == -1) return -1;\n if (body.$refs && body.$refs.vscroll && body.$refs.vscroll.startIndex !== undefined) {\n return index + body.$refs.vscroll.startIndex;\n } else if ((props as any).pagination) {\n const pageNumberState = gb.pageNumberState.value || 1;\n const pageSizeState = gb.pageSizeState.value || 10;\n return index + (pageNumberState - 1) * pageSizeState;\n } else {\n return index;\n }\n }\n\n function getAbsoluteIndex(index: number): number {\n const view2 = proxy?.$refs?.view2 as any;\n if (!view2 || !view2.$refs || !view2.$refs.body) return index;\n const body = view2.$refs.body;\n if (body.$refs && body.$refs.vscroll && body.$refs.vscroll.startIndex !== undefined) {\n return index + body.$refs.vscroll.startIndex;\n } else if ((props as any).pagination) {\n const pageNumberState = gb.pageNumberState.value || 1;\n const pageSizeState = gb.pageSizeState.value || 10;\n return index + (pageNumberState - 1) * pageSizeState;\n } else {\n return index;\n }\n }\n\n function scrollTo(row: any): void {\n const view2 = proxy?.$refs?.view2 as any;\n if (!view2 || !view2.$refs || !view2.$refs.body) return;\n const index = (view2.$refs.body.currRows || []).indexOf(row);\n if (index >= 0) {\n const bodyRef = view2.$refs.body.$refs.bodyRef as HTMLElement | undefined;\n if (bodyRef) {\n const tr = bodyRef.querySelector('table>tbody>tr:nth-child(' + (index + 1) + ')') as HTMLElement | null;\n if (tr) {\n domHelper.scrollTo(bodyRef, tr);\n const scrollTop = view2.$refs.body.scrollTop ? view2.$refs.body.scrollTop() : 0;\n updateFrozenView(scrollTop, gb.rows.value);\n }\n }\n }\n }\n\n function sortData(): void {\n const sortsState = gb.sortsState.value || [];\n if (!sortsState.length) return;\n const cc: any[] = [];\n for (let i = 0; i < sortsState.length; i++) {\n const col = gb.findColumn(sortsState[i].field);\n if (col) cc.push(col);\n }\n const sortFunc = (a: any, b: any): number => (a == b ? 0 : a > b ? 1 : -1);\n const innerData = gb.innerData.value || [];\n innerData.sort((r1: any, r2: any) => {\n let r = 0;\n for (let i = 0; i < sortsState.length; i++) {\n const sort = sortsState[i];\n if (cc[i] && cc[i].sorter) r = cc[i].sorter(r1, r2);\n else r = sortFunc(r1[sort.field], r2[sort.field]);\n r = r * (sort.order == 'asc' ? 1 : -1);\n if (r != 0) return r;\n }\n return r;\n });\n }\n\n function collapseGroup(value: any): void {\n const group = getGroup(value);\n if (group) {\n group.collapsed = true;\n gb.rows.value = makeGroupedRows();\n const pagination = (props as any).pagination;\n const lazy = (props as any).lazy;\n if (pagination && !lazy) setPageData();\n emit('groupCollapse', group);\n }\n }\n\n function expandGroup(value: any): void {\n const group = getGroup(value);\n if (group) {\n group.collapsed = false;\n gb.rows.value = makeGroupedRows();\n const pagination = (props as any).pagination;\n const lazy = (props as any).lazy;\n if (pagination && !lazy) setPageData();\n emit('groupExpand', group);\n }\n }\n\n function toggleGroup(value: any): void {\n const group = getGroup(value);\n if (group) {\n if (group.collapsed) expandGroup(value);\n else collapseGroup(value);\n }\n }\n\n function getExpandedIndex(row: any): number {\n const idField = (props as any).idField;\n if (idField) {\n for (let i = 0; i < expandedRows.value.length; i++) {\n if (expandedRows.value[i][idField] == row[idField]) return i;\n }\n return -1;\n }\n return expandedRows.value.indexOf(row);\n }\n\n function isRowExpanded(row: any): boolean {\n return getExpandedIndex(row) != -1;\n }\n\n function collapseRow(row: any): void {\n const index = getExpandedIndex(row);\n if (index >= 0) {\n expandedRows.value.splice(index, 1);\n emit('rowCollapse', row);\n }\n }\n\n function expandRow(row: any): void {\n if (!isRowExpanded(row)) {\n expandedRows.value.push(row);\n emit('rowExpand', row);\n }\n }\n\n function toggleRow(row: any): void {\n if (isRowExpanded(row)) collapseRow(row);\n else expandRow(row);\n }\n\n const bodyCls = computed(() => {\n const border = (props as any).border !== false;\n return ['panel-body', 'panel-body-noheader', 'datagrid', 'datagrid-wrap', 'f-full', 'f-column', !border ? 'panel-body-noborder' : '']\n .filter(Boolean)\n .join(' ');\n });\n\n function renderPagination(position: string): any {\n const pagination = (props as any).pagination;\n if (!pagination) return null;\n const pagePosition = (props as any).pagePosition;\n if (pagePosition && pagePosition != position) return null;\n\n const totalState = gb.totalState.value || 0;\n const pageSizeState = gb.pageSizeState.value || 10;\n const pageNumberState = gb.pageNumberState.value || 1;\n const pageLayout = (props as any).pageLayout;\n const pageList = (props as any).pageList;\n const pageLinks = (props as any).pageLinks;\n const loading = (props as any).loading || false;\n const onPageChange = gb.onPageChange;\n\n return (\n <Pagination\n class=\"datagrid-pager datagrid-pager-top f-noshrink\"\n total={totalState}\n pageSize={pageSizeState}\n pageNumber={pageNumberState}\n layout={pageLayout}\n pageList={pageList}\n links={pageLinks}\n loading={loading}\n onPageChange={onPageChange}\n >\n {slots['tpl'] && slots['tpl']({ datagrid: proxy })}\n </Pagination>\n );\n }\n\n expose({\n // props\n showHeader: props.showHeader,\n showFooter: props.showFooter,\n // GridBase \n innerData: gb.innerData.value,\n filteredData: gb.filteredData,\n filterRules: gb.filterRules,\n pageNumberState: gb.pageNumberState,\n pageSizeState: gb.pageSizeState,\n pageState: gb.pageState,\n highlightRow: gb.highlightRow,\n highlightCell: gb.highlightCell,\n selectionModeState: gb.selectionModeState,\n selectedRows: gb.selectedRows,\n selectedCells: gb.selectedCells,\n // DataGrid API\n setData,\n setGroupData,\n setPageData,\n updateFrozenView,\n onBodyScroll,\n getRowIndex,\n getAbsoluteIndex,\n scrollTo,\n sortData,\n collapseGroup,\n expandGroup,\n toggleGroup,\n collapseRow,\n expandRow,\n toggleRow,\n isRowExpanded,\n isGroupRow\n });\n // 向下注入 DataGrid 实例\n provide(DATAGRID_INJECTION_KEY, {\n slots,\n leftColumns: gb.leftColumns.value || [],\n dblclickToEdit: gb.dblclickToEdit,\n groupField: props.groupField,\n expanderWidth: props.expanderWidth,\n striped: props.striped,\n highlightRow: gb.highlightRow,\n highlightCell: gb.highlightCell,\n isRowExpanded: gb.isRowExpanded,\n isHighlighted: gb.isHighlighted,\n isSelected: gb.isSelected,\n cellSpan: props.cellSpan,\n rowCss: props.rowCss as any,\n addColumn: gb.addColumn,\n removeColumn: gb.removeColumn,\n addColumnGroup: gb.addColumnGroup,\n removeColumnGroup: gb.removeColumnGroup,\n findColumn: gb.findColumn,\n resizeColumn: gb.resizeColumn,\n moveColumn: gb.moveColumn,\n addSort: gb.addSort,\n addFilterRule: gb.addFilterRule,\n beginEdit: gb.beginEdit,\n endEdit: gb.endEdit,\n cancelEdit: gb.cancelEdit,\n isEditing: gb.isEditing,\n navRow: gb.navRow,\n initColumns: gb.initColumns,\n initHeaderHeight: gb.initHeaderHeight,\n initFilterRules: gb.initFilterRules,\n onRowClick: gb.onRowClick,\n onCellClick: gb.onCellClick,\n toggleGroup: gb.toggleGroup,\n toggleRow: gb.toggleRow,\n getAbsoluteIndex: gb.getAbsoluteIndex,\n isGroupRow: gb.isGroupRow,\n emit\n });\n\n return () => {\n const leftGroup = gb.leftGroup.value;\n const leftColumns = gb.leftColumns.value || [];\n const rightGroup = gb.rightGroup.value;\n const rightColumns = gb.rightColumns.value || [];\n const centerGroup = gb.centerGroup.value;\n const centerColumns = gb.centerColumns.value || [];\n const rows = gb.rows.value || [];\n const footerRows = gb.footerRows.value || [];\n const leftFrozenWidth = gb.leftFrozenWidth.value;\n const rightFrozenWidth = gb.rightFrozenWidth.value;\n const splitStyle = gb.splitStyle.value as any;\n const emptyMsg = (props as any).emptyMsg;\n const loading = (props as any).loading || false;\n const loadMsg = (props as any).loadMsg;\n\n return (\n <div class=\"f-column panel-noscroll\">\n <div style=\"display:none\">{slots.default && slots.default()}</div>\n <div class={bodyCls.value}>\n {renderPagination('top')}\n <div ref=\"viewRef\" class=\"datagrid-view f-row f-full\">\n {(leftGroup || leftColumns.length > 0) && (\n <DataGridView\n ref=\"view1\"\n key=\"view1\"\n viewIndex={1}\n columnGroup={leftGroup}\n columns={leftColumns}\n rows={frozenRows.value}\n footerRows={footerRows}\n style={{ width: leftFrozenWidth } as CSSProperties}\n />\n )}\n <DataGridView\n ref=\"view2\"\n key=\"view2\"\n viewIndex={2}\n columnGroup={centerGroup}\n columns={centerColumns}\n rows={rows}\n footerRows={footerRows}\n onBodyScroll={onBodyScroll}\n />\n {(rightGroup || rightColumns.length > 0) && (\n <DataGridView\n ref=\"view3\"\n key=\"view3\"\n viewIndex={3}\n columnGroup={rightGroup}\n columns={rightColumns}\n rows={frozenRows.value}\n footerRows={footerRows}\n style={{ width: rightFrozenWidth } as CSSProperties}\n />\n )}\n {splitStyle && <div class=\"datagrid-split-proxy\" style={splitStyle}></div>}\n </div>\n {renderPagination('bottom')}\n </div>\n {emptyMsg && !rows.length && !loading && <div class=\"datagrid-empty\">{emptyMsg}</div>}\n {loading && (\n <div class=\"datagrid-loading f-row\">\n <div class=\"datagrid-mask\"></div>\n <div class=\"datagrid-mask-msg\">{loadMsg}</div>\n </div>\n )}\n {!rows.length && !loading && <GridEmpty grid={proxy}></GridEmpty>}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport DataGrid from './DataGrid';\nimport DataGridView from './DataGridView';\nimport DataGridBody from './DataGridBody';\nimport DataGridRowGroup from './DataGridRowGroup';\nimport DataGridRowDetail from './DataGridRowDetail';\nimport DataGridTable from './DataGridTable';\nimport { InjectionKey } from 'vue';\nimport { DataGridInjection } from './types';\n\nexport {\n DataGrid,\n DataGridView,\n DataGridBody,\n DataGridRowGroup,\n DataGridRowDetail,\n DataGridTable\n};\n\nexport type {\n DataGridProps,\n DataGridInstance,\n DataGridViewProps,\n DataGridViewInstance,\n DataGridBodyProps,\n DataGridBodyInstance,\n DataGridRowGroupProps,\n DataGridRowGroupInstance,\n DataGridRowDetailProps,\n DataGridRowDetailInstance,\n DataGridTableProps,\n DataGridTableInstance,\n DataGridInjection\n} from './types';\n\n// 定义 DataGrid 注入键\nexport const DATAGRID_INJECTION_KEY: InjectionKey<DataGridInjection> = Symbol('DataGrid');\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * GridColumn 组件\n * \n * 表格列组件,用于定义表格的列配置。\n * 支持排序、过滤、编辑等功能,可以设置列的宽度、对齐方式等属性。\n * \n * @component\n */\nimport { defineComponent, PropType, ref, watch, onMounted, onBeforeUnmount, getCurrentInstance, inject } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { FilterRule } from '../base/types';\nimport type { GridColumnProps } from './types';\nimport { DATAGRID_INJECTION_KEY } from '../datagrid';\n\nexport default defineComponent({\n name: 'GridColumn',\n\n props: {\n /**\n * 字段名\n * 对应数据对象中的字段名\n */\n field: String as PropType<GridColumnProps['field']>,\n /**\n * 列标题\n * 显示在表头的文本\n */\n title: String as PropType<GridColumnProps['title']>,\n /**\n * 列宽度\n * 可以是数字(像素)或字符串(如 '200px')\n */\n width: [Number, String] as PropType<GridColumnProps['width']>,\n /**\n * 行跨度\n * 表头单元格跨越的行数\n * @default 1\n */\n rowspan: {\n type: [Number, String] as PropType<GridColumnProps['rowspan']>,\n default: 1\n },\n /**\n * 列跨度\n * 表头单元格跨越的列数\n * @default 1\n */\n colspan: {\n type: [Number, String] as PropType<GridColumnProps['colspan']>,\n default: 1\n },\n /**\n * 是否隐藏\n * 当为 true 时,该列不显示\n * @default false\n */\n hidden: {\n type: Boolean as PropType<GridColumnProps['hidden']>,\n default: false\n },\n /**\n * 是否可排序\n * 当为 true 时,可以点击表头进行排序\n * @default false\n */\n sortable: {\n type: Boolean as PropType<GridColumnProps['sortable']>,\n default: false\n },\n /**\n * 是否可编辑\n * 当为 true 时,该列的单元格可以编辑\n * @default false\n */\n editable: {\n type: Boolean as PropType<GridColumnProps['editable']>,\n default: false\n },\n /**\n * 编辑验证规则\n * 编辑时的表单验证规则\n */\n editRules: [Array, Object, String] as PropType<GridColumnProps['editRules']>,\n /**\n * 编辑验证消息\n * 编辑验证失败时显示的错误消息\n */\n editMessages: Object as PropType<GridColumnProps['editMessages']>,\n /**\n * 排序顺序\n * 初始排序顺序:'asc' 升序,'desc' 降序\n * @default 'asc'\n */\n order: {\n type: String as PropType<GridColumnProps['order']>,\n default: 'asc'\n },\n /**\n * 是否冻结\n * 当为 true 时,该列会被固定在表格的左侧或右侧\n * @default false\n */\n frozen: {\n type: Boolean as PropType<GridColumnProps['frozen']>,\n default: false\n },\n /**\n * 对齐方式\n * 单元格内容的对齐方式:'left'、'center'、'right'\n */\n align: String as PropType<GridColumnProps['align']>,\n /**\n * 表头对齐方式\n * 表头单元格的对齐方式:'left'、'center'、'right'\n */\n halign: String as PropType<GridColumnProps['halign']>,\n /**\n * 排序函数\n * 自定义排序逻辑\n */\n sorter: Function as PropType<GridColumnProps['sorter']>,\n /**\n * 表头类名\n * 表头单元格的自定义 CSS 类名\n */\n headerCls: String as PropType<GridColumnProps['headerCls']>,\n /**\n * 表头样式\n * 表头单元格的自定义样式\n */\n headerStyle: Object as PropType<GridColumnProps['headerStyle']>,\n /**\n * 单元格样式\n * 可以是字符串、对象或函数\n */\n cellCss: [String, Object, Function] as PropType<GridColumnProps['cellCss']>,\n /**\n * 是否展开列\n * 当为 true 时,该列用于显示树形结构的展开/折叠按钮\n * @default false\n */\n expander: {\n type: Boolean as PropType<GridColumnProps['expander']>,\n default: false\n },\n /**\n * 是否可过滤\n * 当为 true 时,可以在表头显示过滤功能\n * @default true\n */\n filterable: {\n type: Boolean as PropType<GridColumnProps['filterable']>,\n default: true\n },\n /**\n * 过滤操作符数组\n * 定义可用的过滤操作符\n * @default []\n */\n filterOperators: {\n type: Array as PropType<GridColumnProps['filterOperators']>,\n default: () => []\n }\n } satisfies Record<keyof GridColumnProps, any>,\n\n setup(props) {\n /**\n * 表格实例\n * 指向包含该列的表格组件实例\n */\n const grid = ref<any>(null);\n\n /**\n * 宽度状态\n * 将 width prop 转换为样式值(如 '200px')\n */\n const widthState = ref<string | null>(null);\n\n /**\n * 冻结状态\n * 标识该列是否处于冻结状态\n */\n const frozenState = ref<boolean>(props.frozen || false);\n\n /**\n * 当前排序顺序\n * 'asc' 升序,'desc' 降序,null 无排序\n */\n const currOrder = ref<'asc' | 'desc' | null>(null);\n\n /**\n * 过滤操作符\n * 当前使用的过滤操作符\n */\n const filterOperator = ref<string>('contains');\n\n /**\n * 过滤值\n * 当前输入的过滤值\n */\n const filterValue = ref<any>(null);\n\n /**\n * 是否正在过滤\n * 用于防止重复触发过滤操作\n */\n const isFiltering = ref<boolean>(false);\n\n const inst = getCurrentInstance();\n const dataGridInjection = inject(DATAGRID_INJECTION_KEY, null);\n\n /**\n * 执行过滤操作\n * \n * 根据过滤值和操作符,添加或移除过滤规则。\n * 使用防抖机制,避免频繁触发过滤操作。\n */\n const doFilter = (): void => {\n if (isFiltering.value) {\n return;\n }\n isFiltering.value = true;\n const gridInstance = grid.value;\n if (!gridInstance) {\n isFiltering.value = false;\n return;\n }\n const gridProxy = gridInstance.proxy || gridInstance;\n setTimeout(() => {\n if (filterValue.value == '' || filterValue.value == null) {\n // 清空过滤值,移除过滤规则\n if (gridProxy.removeFilterRule) {\n gridProxy.removeFilterRule(props.field);\n }\n if (gridProxy.doFilter) {\n gridProxy.doFilter();\n }\n } else if (filterOperator.value) {\n // 添加过滤规则\n if (gridProxy.addFilterRule) {\n gridProxy.addFilterRule({\n field: props.field,\n op: filterOperator.value,\n value: filterValue.value\n } as FilterRule);\n }\n if (gridProxy.doFilter) {\n gridProxy.doFilter();\n }\n }\n isFiltering.value = false;\n }, gridProxy.filterDelay || 400);\n };\n\n /**\n * 监听过滤值变化,自动执行过滤\n */\n watch(filterValue, doFilter);\n\n /**\n * 监听隐藏状态变化,通知表格更新列配置\n */\n watch(() => props.hidden, () => {\n const gridInstance = grid.value;\n if (gridInstance) {\n const gridProxy = gridInstance.proxy || gridInstance;\n if (gridProxy.initColumns) {\n gridProxy.initColumns();\n }\n }\n });\n\n /**\n * 组件挂载时,初始化宽度并注册到父组件\n */\n onMounted(() => {\n widthState.value = domHelper.toStyleValue(props.width);\n\n const parent = inst?.parent as any;\n if (dataGridInjection && dataGridInjection.addColumn) {\n dataGridInjection.addColumn(inst?.proxy);\n }\n // 设置 grid 引用(通过父组件链找到表格实例)\n const name = (parent.type as any)?.name || (parent.type as any)?.__name;\n if (name === 'DataGrid' || name === 'TreeGrid' || name === 'GridBase') {\n grid.value = parent;\n }\n });\n\n /**\n * 组件卸载前,从父组件移除\n */\n onBeforeUnmount(() => {\n if (dataGridInjection && dataGridInjection.removeColumn) {\n dataGridInjection.removeColumn(inst);\n }\n });\n\n /**\n * 返回状态和方法\n * \n * 这些状态需要暴露给父组件和模板使用。\n */\n return {\n grid,\n widthState,\n frozenState,\n currOrder,\n filterOperator,\n filterValue,\n isFiltering\n };\n },\n\n render() {\n return '';\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * GridColumnGroup 组件\n *\n * 表格列组组件,用于将多个列组织在一起,支持冻结列功能。\n * 可以设置冻结位置(左侧或右侧)和对齐方式。\n *\n * @component\n */\nimport { defineComponent, PropType, ref, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { GridColumnGroupProps } from './types';\n\nexport default defineComponent({\n name: 'GridColumnGroup',\n\n props: {\n /**\n * 是否冻结\n * 当为 true 时,该列组会被固定在表格的左侧或右侧\n * @default false\n */\n frozen: {\n type: Boolean as PropType<GridColumnGroupProps['frozen']>,\n default: false\n },\n /**\n * 对齐方式\n * 当 frozen 为 true 时,指定冻结在左侧还是右侧\n * @default 'left'\n */\n align: {\n type: String as PropType<GridColumnGroupProps['align']>,\n default: 'left'\n },\n /**\n * 宽度\n * 可以是数字(像素)或字符串(如 '200px')\n */\n width: [Number, String] as PropType<GridColumnGroupProps['width']>\n } satisfies Record<keyof GridColumnGroupProps, any>,\n\n setup(props, { slots }) {\n /**\n * 宽度状态\n * 将 width prop 转换为样式值(如 '200px')\n */\n const widthState = ref<string | null>(null);\n\n /**\n * 行数组\n * 存储当前列组中的所有行实例\n */\n // const rows = ref<any[]>([]);\n\n /**\n * 添加行到当前列组\n *\n * @param row - 要添加的行实例\n */\n // const addRow = (row: any): void => {\n // rows.value.push(row);\n // };\n\n /**\n * 从当前列组移除行\n *\n * @param row - 要移除的行实例\n */\n // const removeRow = (row: any): void => {\n // const index = rows.value.indexOf(row);\n // if (index >= 0) {\n // rows.value.splice(index, 1);\n // }\n // };\n\n /**\n * 组件挂载时,初始化宽度并注册到父组件\n */\n onMounted(() => {\n widthState.value = domHelper.toStyleValue(props.width);\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n if (parent && parent.addColumnGroup) {\n parent.addColumnGroup(inst);\n }\n });\n\n /**\n * 组件卸载前,从父组件移除\n */\n onBeforeUnmount(() => {\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n if (parent && parent.removeColumnGroup) {\n parent.removeColumnGroup(inst);\n }\n });\n\n /**\n * 返回方法和状态\n *\n * 必须返回 addRow 和 removeRow,以便子组件可以通过 $parent 访问这些方法。\n * widthState 也需要返回,以便在模板中使用。\n */\n return () => <div>{slots.default?.()}</div>;\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * GridHeaderRow 组件\n * \n * 表格头部行组件,用于管理表头中的列。\n * 当列发生变化时,会自动通知父组件更新列配置和表头高度。\n * \n * @component\n */\nimport { defineComponent, ref, watch, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\n\nexport default defineComponent({\n name: 'GridHeaderRow',\n \n setup(_props, { slots }) {\n /**\n * 列数组\n * 存储当前行中的所有列实例\n */\n const columns = ref<any[]>([]);\n\n /**\n * 定时器\n * 用于防抖,避免频繁触发父组件的更新操作\n */\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n\n /**\n * 添加列到当前行\n * \n * @param column - 要添加的列实例\n */\n // const addColumn = (column: any): void => {\n // columns.value = [...columns.value, column];\n // };\n\n /**\n * 从当前行移除列\n * \n * @param column - 要移除的列实例\n */\n // const removeColumn = (column: any): void => {\n // const next = columns.value.slice();\n // const index = next.indexOf(column);\n // if (index >= 0) {\n // next.splice(index, 1);\n // columns.value = next;\n // }\n // };\n\n /**\n * 监听列数组变化,通知父组件更新\n * \n * 使用防抖机制,避免频繁触发父组件的 initColumns 和 initHeaderHeight 方法。\n */\n watch(columns, () => {\n if (timer.value) {\n clearTimeout(timer.value);\n }\n timer.value = setTimeout(() => {\n const inst = getCurrentInstance();\n const parent = (inst?.parent as any)?.parent;\n if (parent) {\n if (parent.initColumns) {\n parent.initColumns();\n }\n if (parent.initHeaderHeight) {\n parent.initHeaderHeight();\n }\n }\n timer.value = null;\n }, 0);\n });\n\n /**\n * 组件挂载时,注册到父组件\n */\n onMounted(() => {\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n if (parent && parent.addRow) {\n parent.addRow(inst);\n }\n });\n\n /**\n * 组件卸载前,清理定时器并从父组件移除\n */\n onBeforeUnmount(() => {\n if (timer.value) {\n clearTimeout(timer.value);\n }\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n if (parent && parent.removeRow) {\n parent.removeRow(inst);\n }\n });\n\n /**\n * 返回渲染函数\n * \n * 必须返回 addColumn 和 removeColumn,以便子组件可以通过 $parent 访问这些方法。\n */\n return () => (\n <div>{slots.default?.()}</div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, onBeforeUnmount, onMounted, PropType } from \"vue\";\nimport domHelper from \"../base/DomHelper\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useSpinnerBase } from \"../base/useSpinnerBase\";\nimport type { NumberBoxProps } from \"./types\";\n\nexport default defineComponent({\n name: \"NumberBox\",\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // SpinnerBase\n reversed: {\n type: Boolean as PropType<any>,\n default: false\n },\n spinners: {\n type: Boolean as PropType<any>,\n default: true\n },\n spinAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n\n value: Number as PropType<NumberBoxProps['value']>,\n modelValue: Number as PropType<any>,\n min: Number as PropType<NumberBoxProps['min']>,\n max: Number as PropType<NumberBoxProps['max']>,\n increment: {\n type: Number as PropType<NumberBoxProps['increment']>,\n default: 1\n },\n precision: {\n type: Number as PropType<NumberBoxProps['precision']>,\n default: 0\n },\n decimalSeparator: {\n type: String as PropType<NumberBoxProps['decimalSeparator']>,\n default: '.'\n },\n groupSeparator: {\n type: String as PropType<NumberBoxProps['groupSeparator']>,\n default: ''\n },\n prefix: {\n type: String as PropType<NumberBoxProps['prefix']>,\n default: ''\n },\n suffix: {\n type: String as PropType<NumberBoxProps['suffix']>,\n default: ''\n }\n } satisfies Record<keyof NumberBoxProps, any>,\n emits: [\"update:modelValue\", \"valueChange\", \"focus\", \"blur\"],\n setup(props: any, { emit, slots, expose }) {\n const fieldBase = useFieldBase(props);\n let sb!: ReturnType<typeof useSpinnerBase>;\n\n function formatter(value: number | string | null): string | null {\n if (value == null) return null;\n const precision = props.precision ?? 0;\n const decimalSeparator = props.decimalSeparator ?? \".\";\n const groupSeparator = props.groupSeparator ?? \"\";\n const prefix = props.prefix ?? \"\";\n const suffix = props.suffix ?? \"\";\n\n const numValue = parseFloat(String(value));\n let s = precision !== -1 ? numValue.toFixed(precision) : String(numValue);\n let s1 = s;\n let s2 = \"\";\n const dpos = s.indexOf(\".\");\n if (dpos >= 0) {\n s1 = s.substring(0, dpos);\n s2 = s.substring(dpos + 1, s.length);\n }\n if (groupSeparator) {\n const p = /(\\d+)(\\d{3})/;\n while (p.test(s1)) {\n s1 = s1.replace(p, \"$1\" + groupSeparator + \"$2\");\n }\n }\n if (s2) {\n return prefix + s1 + decimalSeparator + s2 + suffix;\n } else {\n return prefix + s1 + suffix;\n }\n }\n\n function parser(s: number | string | null): number | null {\n if (s == null) return null;\n const precision = props.precision ?? 0;\n const decimalSeparator = props.decimalSeparator ?? \".\";\n const groupSeparator = props.groupSeparator ?? \"\";\n const prefix = props.prefix ?? \"\";\n const suffix = props.suffix ?? \"\";\n const min = props.min;\n const max = props.max;\n\n let str = String(s).trim();\n if (prefix) str = str.replace(new RegExp(\"\\\\\" + prefix, \"g\"), \"\");\n if (suffix) str = str.replace(new RegExp(\"\\\\\" + suffix, \"g\"), \"\");\n if (groupSeparator) str = str.replace(new RegExp(\"\\\\\" + groupSeparator, \"g\"), \"\");\n if (decimalSeparator) str = str.replace(new RegExp(\"\\\\\" + decimalSeparator, \"g\"), \".\");\n str = str.replace(/\\s/g, \"\");\n\n let v = parseFloat(str);\n if (isNaN(v)) return null;\n if (precision !== -1) v = parseFloat(v.toFixed(precision));\n if (min != null && min > v) v = min;\n if (max != null && max < v) v = max;\n return v;\n }\n\n function setValue(value: number | string | null): void {\n const parsedValue = parser(value);\n const formatted = formatter(parsedValue);\n sb.textState.value = formatted || \"\";\n sb.setValue(parsedValue);\n }\n\n function filter(e: KeyboardEvent): boolean {\n const s = sb.text.value;\n if (e.metaKey || e.ctrlKey) return true;\n if ([\"46\", \"8\", \"13\", \"0\"].indexOf(String(e.which)) !== -1) return true;\n\n const c = String.fromCharCode(e.which);\n if (!c) return true;\n if (c === \"-\" || c === (props.decimalSeparator ?? \".\")) {\n return s.indexOf(c) === -1;\n } else if (c === (props.groupSeparator ?? \"\")) {\n return true;\n } else if (\"0123456789\".indexOf(c) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n\n function onKeyPress(event: KeyboardEvent): boolean {\n if (sb.focused.value) {\n if (event.keyCode === 13) {\n onBlur();\n }\n return filter(event);\n }\n return false;\n }\n\n function onBlur(): void {\n const value = parser(sb.textState.value);\n setValue(value);\n }\n\n function doSpinUp(): void {\n const currentValue =\n typeof sb.valueState.value === \"number\"\n ? sb.valueState.value\n : typeof sb.valueState.value === \"string\"\n ? parseFloat(sb.valueState.value)\n : 0;\n const increment = props.increment ?? 1;\n const v = (currentValue || 0) + increment;\n setValue(parser(String(v)));\n }\n\n function doSpinDown(): void {\n const currentValue =\n typeof sb.valueState.value === \"number\"\n ? sb.valueState.value\n : typeof sb.valueState.value === \"string\"\n ? parseFloat(sb.valueState.value)\n : 0;\n const increment = props.increment ?? 1;\n const v = (currentValue || 0) - increment;\n setValue(parser(String(v)));\n }\n\n sb = useSpinnerBase(props, { emit, slots }, fieldBase, { doSpinUp, doSpinDown });\n\n onMounted(() => {\n // 对齐 created:初始化时将 value 进行 parser/formatter\n const v = sb.valueState.value;\n if (v !== undefined && v !== null) {\n setValue(parser(v as any));\n }\n\n const el = sb.inputRef.value;\n if (el) {\n domHelper.bind(el, \"keypress\", onKeyPress);\n domHelper.bind(el, \"blur\", onBlur);\n }\n });\n\n onBeforeUnmount(() => {\n const el = sb.inputRef.value;\n if (el) domHelper.unbind(el);\n });\n\n expose({ setValue, doSpinUp, doSpinDown });\n\n return () => sb.renderField(sb.renderSpinnerOthers);\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, PropType, ref, watch } from \"vue\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport type { SwitchButtonProps } from \"./types\";\n\nexport default defineComponent({\n name: \"SwitchButton\",\n props: {\n value: {\n type: Boolean as PropType<SwitchButtonProps['value']>,\n default: false\n },\n modelValue: {\n type: Boolean as PropType<SwitchButtonProps['modelValue']>,\n default: false\n },\n invalid: {\n type: Boolean as PropType<SwitchButtonProps['invalid']>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<SwitchButtonProps['validateOnCreate']>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<SwitchButtonProps['validateOnBlur']>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<SwitchButtonProps['validateOnChange']>,\n default: true\n },\n onText: {\n type: String as PropType<SwitchButtonProps['onText']>,\n default: 'ON'\n },\n offText: {\n type: String as PropType<SwitchButtonProps['offText']>,\n default: 'OFF'\n },\n handleText: String as PropType<SwitchButtonProps['handleText']>,\n disabled: {\n type: Boolean as PropType<SwitchButtonProps['disabled']>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<SwitchButtonProps['readonly']>,\n default: false\n },\n inputId: String as PropType<SwitchButtonProps['inputId']>\n },\n emits: [\"update:modelValue\"],\n setup(props: SwitchButtonProps, { emit, expose }) {\n const fieldBase = useFieldBase(props);\n const valueState = ref<boolean>(!!(props.modelValue ?? props.value));\n\n watch(\n () => props.value,\n () => {\n if (props.value !== valueState.value) {\n valueState.value = !!props.value;\n }\n }\n );\n\n watch(\n () => props.modelValue,\n () => {\n if (props.modelValue !== valueState.value) {\n valueState.value = !!props.modelValue;\n }\n }\n );\n\n function onClick(event: Event): void {\n event.stopPropagation();\n if (props.disabled || props.readonly) return;\n valueState.value = !valueState.value;\n emit(\"update:modelValue\", valueState.value);\n fieldBase.afterValueChange();\n }\n\n const buttonClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n \"switchbutton f-inline-row\",\n {\n \"switchbutton-readonly\": props.readonly || false,\n \"switchbutton-disabled\": props.disabled || false,\n \"switchbutton-checked\": valueState.value\n }\n ];\n });\n\n expose({ onClick });\n\n return () => (\n <span class={buttonClasses.value} onClick={onClick}>\n <span class=\"switchbutton-inner\">\n <span class=\"switchbutton-on\">\n <span class=\"f-row f-content-center\">{props.onText}</span>\n </span>\n <span class=\"switchbutton-handle\">\n <span class=\"f-row f-content-center\">{props.handleText}</span>\n </span>\n <span class=\"switchbutton-off\">\n <span class=\"f-row f-content-center\">{props.offText}</span>\n </span>\n <input class=\"switchbutton-value\" type=\"checkbox\" id={props.inputId} />\n </span>\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, onMounted, PropType, ref, watch, computed } from \"vue\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport type { CheckBoxProps } from \"./types\";\n\nexport default defineComponent({\n name: \"CheckBox\",\n props: {\n value: String as PropType<CheckBoxProps['value']>,\n name: String as PropType<CheckBoxProps['name']>,\n invalid: {\n type: Boolean as PropType<CheckBoxProps['invalid']>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<CheckBoxProps['validateOnCreate']>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<CheckBoxProps['validateOnBlur']>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<CheckBoxProps['validateOnChange']>,\n default: true\n },\n disabled: {\n type: Boolean as PropType<CheckBoxProps['disabled']>,\n default: false\n },\n inputId: String as PropType<CheckBoxProps['inputId']>,\n multiple: {\n type: Boolean as PropType<CheckBoxProps['multiple']>,\n default: false\n },\n modelValue: [Boolean, Array] as PropType<CheckBoxProps['modelValue']>\n },\n emits: [\"update:modelValue\", \"checkedChange\"],\n setup(props: CheckBoxProps, { emit, expose }) {\n const fieldBase = useFieldBase(props);\n\n const inputRef = ref<HTMLInputElement | null>(null);\n const checked = ref(false);\n const values = ref<string[]>([]);\n\n function setChecked(v: boolean): void {\n if (inputRef.value) {\n inputRef.value.checked = v;\n }\n checked.value = v;\n }\n\n function isChecked(): boolean {\n return inputRef.value ? inputRef.value.checked : false;\n }\n\n function initChecked(): void {\n if (props.multiple) {\n if (props.modelValue == null) {\n values.value = [];\n } else {\n values.value = props.modelValue instanceof Array ? (props.modelValue as string[]) : [props.modelValue as unknown as string];\n }\n setChecked(values.value.indexOf(props.value || \"\") !== -1);\n } else {\n setChecked(!!props.modelValue);\n }\n }\n\n function updateValues(): void {\n checked.value = isChecked();\n if (props.multiple) {\n if (checked.value) {\n values.value = values.value.concat(props.value || \"\");\n } else {\n values.value = values.value.filter(v => v !== props.value);\n }\n emit(\"update:modelValue\", values.value);\n } else {\n emit(\"update:modelValue\", checked.value);\n }\n emit(\"checkedChange\", checked.value);\n fieldBase.afterValueChange();\n }\n\n function onClickButton(event: Event): void {\n event.preventDefault();\n if (!props.disabled) {\n setChecked(!isChecked());\n updateValues();\n }\n }\n\n function onChange(): void {\n updateValues();\n }\n\n watch(\n () => props.modelValue,\n () => {\n const previousChecked = checked.value;\n initChecked();\n if (previousChecked !== checked.value) {\n emit(\"checkedChange\", checked.value);\n }\n }\n );\n\n onMounted(() => {\n initChecked();\n });\n\n const checkClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n \"f-full\",\n {\n \"checkbox-disabled\": props.disabled || false,\n \"checkbox-checked\": checked.value\n }\n ];\n });\n\n expose({ setChecked, isChecked, updateValues });\n\n return () => (\n <span class={[\"f-inline-row checkbox\", { \"checkbox-invalid\": fieldBase.invalidState.value }]}>\n <span class={checkClasses.value} onClick={onClickButton}>\n {checked.value && (\n <svg class=\"checkbox-inner\" xml:space=\"preserve\" focusable=\"false\" version=\"1.1\" viewBox=\"0 0 24 24\">\n <path d=\"M4.1,12.7 9,17.6 20.3,6.3\" fill=\"none\" stroke=\"white\"></path>\n </svg>\n )}\n </span>\n <div class=\"checkbox-value\">\n <input ref={inputRef} id={props.inputId} type=\"checkbox\" name={props.name} disabled={props.disabled} onChange={onChange} />\n </div>\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, onMounted, PropType, ref, watch } from \"vue\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport type { RadioButtonProps } from \"./types\";\n\nexport default defineComponent({\n name: \"RadioButton\",\n props: {\n value: String as PropType<RadioButtonProps['value']>,\n name: String as PropType<RadioButtonProps['name']>,\n inputId: String as PropType<RadioButtonProps['inputId']>,\n invalid: {\n type: Boolean as PropType<RadioButtonProps['invalid']>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<RadioButtonProps['validateOnCreate']>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<RadioButtonProps['validateOnBlur']>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<RadioButtonProps['validateOnChange']>,\n default: true\n },\n disabled: {\n type: Boolean as PropType<RadioButtonProps['disabled']>,\n default: false\n },\n modelValue: String as PropType<RadioButtonProps['modelValue']>\n },\n emits: [\"update:modelValue\"],\n setup(props: RadioButtonProps, { emit, expose }) {\n const fieldBase = useFieldBase(props);\n\n const inputRef = ref<HTMLInputElement | null>(null);\n const checked = ref(false);\n\n function setChecked(v: boolean): void {\n if (inputRef.value) inputRef.value.checked = v;\n checked.value = v;\n }\n\n function isChecked(): boolean {\n return inputRef.value ? inputRef.value.checked : false;\n }\n\n function initValue(): void {\n setChecked(props.value === props.modelValue);\n }\n\n function select(): void {\n if (props.disabled) return;\n setChecked(true);\n emit(\"update:modelValue\", props.value);\n fieldBase.afterValueChange();\n }\n\n function onClickButton(): void {\n select();\n }\n\n function onChange(): void {\n select();\n }\n\n watch(\n () => props.modelValue,\n () => initValue()\n );\n\n onMounted(() => initValue());\n\n const radioClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n \"f-full\",\n {\n \"radiobutton-disabled\": props.disabled || false,\n \"radiobutton-checked\": checked.value\n }\n ];\n });\n\n expose({ select, setChecked, isChecked });\n\n return () => (\n <span class={[\"f-inline-row radiobutton\", { \"radiobutton-invalid\": fieldBase.invalidState.value }]}>\n <span class={radioClasses.value} onClick={onClickButton}>\n {checked.value && <span class=\"radiobutton-inner\"></span>}\n </span>\n <div class=\"radiobutton-value\">\n <input ref={inputRef} id={props.inputId} type=\"radio\" name={props.name} disabled={props.disabled} onChange={onChange} />\n </div>\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { TreeNodeTitleProps, TreeNode } from './types';\n\nexport default defineComponent({\n name: 'TreeNodeTitle',\n props: {\n tree: Object as PropType<TreeNodeTitleProps['tree']>,\n node: Object as PropType<TreeNodeTitleProps['node']>\n },\n setup(props: TreeNodeTitleProps) {\n return () => {\n const tree = props.tree as any;\n const node = props.node as TreeNode | undefined;\n let cell: any = node?.text || '';\n if (tree && tree.$slots && tree.$slots.default) {\n cell = tree.$slots.default({\n node: node\n });\n }\n return <span class=\"tree-title\">{cell}</span>;\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, watch, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { TooltipContentProps } from './types';\n\nexport default defineComponent({\n name: 'TooltipContent',\n props: {\n tooltipIdIndex: Number as PropType<TooltipContentProps['tooltipIdIndex']>,\n target: Object as PropType<TooltipContentProps['target']>,\n content: [String, Object] as PropType<TooltipContentProps['content']>,\n component: [String, Object, Function] as PropType<TooltipContentProps['component']>,\n propsData: Object as PropType<TooltipContentProps['propsData']>,\n store: Object as PropType<TooltipContentProps['store']>,\n tooltipCls: String as PropType<TooltipContentProps['tooltipCls']>,\n tooltipStyle: [Object, String] as PropType<TooltipContentProps['tooltipStyle']>,\n zIndex: {\n type: Number as PropType<TooltipContentProps['zIndex']>,\n default: 11000000\n },\n position: {\n type: String as PropType<TooltipContentProps['position']>,\n default: 'bottom'\n },\n trackMouse: {\n type: Boolean as PropType<TooltipContentProps['trackMouse']>,\n default: false\n },\n trackMouseX: {\n type: Number as PropType<TooltipContentProps['trackMouseX']>,\n default: 0\n },\n trackMouseY: {\n type: Number as PropType<TooltipContentProps['trackMouseY']>,\n default: 0\n },\n deltaX: {\n type: Number as PropType<TooltipContentProps['deltaX']>,\n default: 0\n },\n deltaY: {\n type: Number as PropType<TooltipContentProps['deltaY']>,\n default: 0\n },\n valign: {\n type: String as PropType<TooltipContentProps['valign']>,\n default: 'middle'\n },\n showDelay: {\n type: Number as PropType<TooltipContentProps['showDelay']>,\n default: 200\n },\n hideDelay: {\n type: Number as PropType<TooltipContentProps['hideDelay']>,\n default: 200\n },\n closed: {\n type: Boolean as PropType<TooltipContentProps['closed']>,\n default: true\n },\n disabled: {\n type: Boolean as PropType<TooltipContentProps['disabled']>,\n default: false\n },\n tooltipShow: Function as PropType<TooltipContentProps['tooltipShow']>,\n tooltipHide: Function as PropType<TooltipContentProps['tooltipHide']>\n },\n setup(props: TooltipContentProps) {\n const tooltipRef = ref<HTMLElement | null>(null);\n const arrowOuterRef = ref<HTMLElement | null>(null);\n const arrowInnerRef = ref<HTMLElement | null>(null);\n const closedState = ref<boolean>(props.closed || true);\n const contentState = ref<string | object | null>(props.content || null);\n const left = ref<number>(0);\n const top = ref<number>(0);\n const targetWidth = ref<number>(0);\n const targetHeight = ref<number>(0);\n const tipWidth = ref<number>(0);\n const tipHeight = ref<number>(0);\n const showTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n const hideTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n\n const tooltipClasses = computed(() => {\n return ['tooltip', 'tooltip-' + (props.position || 'bottom'), props.tooltipCls].filter(Boolean);\n });\n\n const tooltipStyles = computed((): (CSSProperties | string | null | undefined)[] => {\n const tooltipStyle = props.tooltipStyle as CSSProperties | undefined;\n return [\n tooltipStyle,\n {\n left: left.value + 'px',\n top: top.value + 'px',\n display: 'block',\n zIndex: props.zIndex || 11000000\n }\n ];\n });\n\n const clearTimeouts = (): void => {\n if (showTimer.value) {\n clearTimeout(showTimer.value);\n showTimer.value = null;\n }\n if (hideTimer.value) {\n clearTimeout(hideTimer.value);\n hideTimer.value = null;\n }\n };\n\n const getPosition = (pos: string = 'bottom'): { left: number; top: number } => {\n pos = pos || 'bottom';\n let newLeft = 0;\n let newTop = 0;\n const target = props.target as HTMLElement;\n if (!target) {\n return { left: 0, top: 0 };\n }\n const offset = domHelper.offset(target);\n let tWidth = targetWidth.value;\n let tHeight = targetHeight.value;\n let tTipWidth = tipWidth.value;\n let tTipHeight = tipHeight.value;\n if (props.trackMouse) {\n newLeft = (props.trackMouseX || 0) + (props.deltaX || 0);\n newTop = (props.trackMouseY || 0) + (props.deltaY || 0);\n tWidth = tHeight = 0;\n } else {\n newLeft = offset.left + (props.deltaX || 0);\n newTop = offset.top + (props.deltaY || 0);\n }\n const valign = props.valign || 'middle';\n switch (pos) {\n case 'right':\n newLeft += tWidth + 12 + (props.trackMouse ? 12 : 0);\n if (valign == 'middle') {\n newTop -= (tTipHeight - tHeight) / 2;\n }\n break;\n case 'left':\n newLeft -= tTipWidth + 12 + (props.trackMouse ? 12 : 0);\n if (valign == 'middle') {\n newTop -= (tTipHeight - tHeight) / 2;\n }\n break;\n case 'top':\n newLeft -= (tTipWidth - tWidth) / 2;\n newTop -= tTipHeight + 12 + (props.trackMouse ? 12 : 0);\n break;\n case 'bottom':\n newLeft -= (tTipWidth - tWidth) / 2;\n newTop += tHeight + 12 + (props.trackMouse ? 12 : 0);\n break;\n }\n return {\n left: newLeft,\n top: newTop\n };\n };\n\n const reposition = (): void => {\n if (!tooltipRef.value) {\n return;\n }\n const view = domHelper.getViewport();\n const position = props.position || 'bottom';\n let pos = getPosition(position);\n if (position == 'top' && pos.top < domHelper.getScrollTop()) {\n pos = getPosition('bottom');\n } else if (position == 'bottom') {\n if (pos.top + tipHeight.value > view.height + domHelper.getScrollTop()) {\n pos = getPosition('top');\n }\n }\n if (pos.left < domHelper.getScrollLeft()) {\n if (position == 'left') {\n pos = getPosition('right');\n } else {\n const arrowLeft = tipWidth.value / 2 + pos.left - domHelper.getScrollLeft();\n if (arrowOuterRef.value) {\n arrowOuterRef.value.style.left = arrowLeft + 'px';\n }\n if (arrowInnerRef.value) {\n arrowInnerRef.value.style.left = arrowLeft + 'px';\n }\n pos.left = domHelper.getScrollLeft();\n }\n } else if (pos.left + tipWidth.value > view.width + domHelper.getScrollLeft()) {\n if (position == 'right') {\n pos = getPosition('left');\n } else {\n const arrowLeft = pos.left;\n pos.left = view.width + domHelper.getScrollLeft() - tipWidth.value;\n const newArrowLeft = tipWidth.value / 2 - (pos.left - arrowLeft);\n if (arrowOuterRef.value) {\n arrowOuterRef.value.style.left = newArrowLeft + 'px';\n }\n if (arrowInnerRef.value) {\n arrowInnerRef.value.style.left = newArrowLeft + 'px';\n }\n }\n }\n left.value = pos.left;\n top.value = pos.top;\n const bc = 'border-' + position + '-color';\n const borderColor = tooltipRef.value.style.borderColor;\n const backColor = tooltipRef.value.style.backgroundColor;\n if (arrowOuterRef.value) {\n (arrowOuterRef.value.style as any)[bc] = borderColor;\n }\n if (arrowInnerRef.value) {\n (arrowInnerRef.value.style as any)[bc] = backColor;\n }\n };\n\n const setClosed = (closed: boolean): void => {\n closedState.value = closed;\n if (!closedState.value) {\n nextTick(() => {\n const target = props.target as HTMLElement;\n if (tooltipRef.value && target) {\n targetWidth.value = domHelper.outerWidth(target);\n targetHeight.value = domHelper.outerHeight(target);\n tipWidth.value = domHelper.outerWidth(tooltipRef.value);\n tipHeight.value = domHelper.outerHeight(tooltipRef.value);\n reposition();\n }\n if (props.tooltipShow) {\n props.tooltipShow();\n }\n });\n } else {\n if (props.tooltipHide) {\n props.tooltipHide();\n }\n }\n };\n\n const show = (): void => {\n if (props.disabled) {\n return;\n }\n if (!contentState.value && !props.component) {\n return;\n }\n clearTimeouts();\n const showDelay = props.showDelay || 200;\n showTimer.value = setTimeout(() => {\n setClosed(false);\n }, showDelay);\n };\n\n const hide = (): void => {\n clearTimeouts();\n const hideDelay = props.hideDelay || 200;\n hideTimer.value = setTimeout(() => {\n setClosed(true);\n }, hideDelay);\n };\n\n const onMouseEnter = (): void => {\n show();\n };\n\n const onMouseLeave = (): void => {\n hide();\n };\n\n watch(\n () => props.closed,\n (value?: boolean) => {\n setClosed(value || false);\n }\n );\n\n watch(\n () => props.content,\n (value: string | object | null) => {\n contentState.value = value;\n if (tooltipRef.value) {\n nextTick(() => {\n setClosed(closedState.value);\n });\n }\n }\n );\n\n onMounted(() => {\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on('tooltipUpdate', (updateProps: any) => {\n if (props.tooltipIdIndex == updateProps.tooltipIdIndex) {\n contentState.value = updateProps.content;\n setClosed(closedState.value);\n }\n });\n eventHub.$on('tooltipShow', (showProps: any) => {\n if (props.tooltipIdIndex == showProps.tooltipIdIndex) {\n show();\n }\n });\n eventHub.$on('tooltipHide', (hideProps: any) => {\n if (props.tooltipIdIndex == hideProps.tooltipIdIndex) {\n hide();\n }\n });\n }\n });\n\n onBeforeUnmount(() => {\n clearTimeouts();\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$off('tooltipUpdate');\n eventHub.$off('tooltipShow');\n eventHub.$off('tooltipHide');\n }\n });\n\n return () => {\n if (closedState.value) {\n return null;\n }\n if (!contentState.value) {\n return null;\n }\n return (\n <div\n ref={tooltipRef}\n tabindex=\"-1\"\n class={tooltipClasses.value}\n style={tooltipStyles.value}\n onMouseenter={onMouseEnter}\n onMouseleave={onMouseLeave}\n >\n <div class=\"tooltip-content\">{contentState.value}</div>\n <div ref={arrowOuterRef} class=\"tooltip-arrow-outer\"></div>\n <div ref={arrowInnerRef} class=\"tooltip-arrow\"></div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { createVNode, render, DirectiveBinding } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport TooltipContent from './TooltipContent';\nimport type { TooltipOptions } from './types';\n\nconst getOptions = (el: HTMLElement, value: string | TooltipOptions): TooltipOptions => {\n const opts = typeof value == 'object'\n ? Object.assign({}, value)\n : { content: String(value) };\n return Object.assign({\n showEvent: 'mouseenter',\n hideEvent: 'mouseleave',\n target: el\n }, opts);\n};\n\nconst bindEvents = (el: HTMLElement & {\n _showEvent?: string;\n _hideEvent?: string;\n _activeHandler?: () => void;\n _deactiveHandler?: () => void;\n}, showEvent: string = '', hideEvent: string = ''): void => {\n const bind = (key: '_showEvent' | '_hideEvent', eventName: string, handler: () => void) => {\n if (el[key]) {\n if (el[key] != eventName) {\n const oldEventName = el[key] || '';\n oldEventName.split(' ').forEach(event => {\n domHelper.unbind(el, event, handler);\n });\n el[key] = eventName;\n eventName.split(' ').forEach(event => {\n domHelper.bind(el, event, handler);\n });\n }\n } else {\n el[key] = eventName;\n eventName.split(' ').forEach(event => {\n domHelper.bind(el, event, handler);\n });\n }\n }\n if (el._activeHandler) {\n bind('_showEvent', showEvent, el._activeHandler);\n }\n if (el._deactiveHandler) {\n bind('_hideEvent', hideEvent, el._deactiveHandler);\n }\n};\n\n(window as any).TooltipIdIndex = (window as any).TooltipIdIndex || 1;\n\nexport interface TooltipElement extends HTMLElement {\n _tip?: any;\n _opts?: TooltipOptions;\n _showEvent?: string;\n _hideEvent?: string;\n _activeHandler?: () => void;\n _deactiveHandler?: () => void;\n}\n\nexport default {\n name: 'Tooltip',\n mounted(el: TooltipElement, binding: DirectiveBinding<string | TooltipOptions>) {\n el._activeHandler = function () {\n const eventHub = (window as any).EventHub;\n if (!el._tip) {\n const opts = el._opts || {};\n const Tip = createVNode(TooltipContent, {\n ...opts,\n store: opts.store,\n tooltipIdIndex: (window as any).TooltipIdIndex++\n });\n el._tip = Tip;\n const body = document.querySelector('body');\n if (body) {\n render(Tip, body);\n }\n } else {\n if (el._opts) {\n Object.assign(el._tip.props, el._opts);\n }\n if (eventHub) {\n eventHub.$emit('tooltipUpdate', el._tip.props);\n }\n }\n if (eventHub) {\n eventHub.$emit('tooltipShow', el._tip.props);\n }\n };\n el._deactiveHandler = function () {\n const eventHub = (window as any).EventHub;\n if (el._tip) {\n if (eventHub) {\n eventHub.$emit('tooltipHide', el._tip.props);\n }\n el._tip = null;\n }\n }\n el._opts = getOptions(el, binding.value);\n bindEvents(el, el._opts.showEvent || 'mouseenter', el._opts.hideEvent || 'mouseleave');\n },\n updated(el: TooltipElement, binding: DirectiveBinding<string | TooltipOptions>) {\n el._opts = getOptions(el, binding.value);\n if (el._tip) {\n Object.assign(el._tip.props, el._opts);\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$emit('tooltipUpdate', el._tip.props);\n }\n }\n bindEvents(el, el._opts.showEvent || 'mouseenter', el._opts.hideEvent || 'mouseleave');\n },\n beforeUnmount(el: TooltipElement) {\n if (el._tip) {\n el._tip = null;\n }\n bindEvents(el, '', '');\n }\n};\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport Form from '../form/Form';\nimport Tooltip from '../tooltip/Tooltip';\nimport { TextBox } from '../textbox';\nimport type { TreeNodeEditorProps, TreeNode } from './types';\n\nexport default defineComponent({\n name: 'TreeNodeEditor',\n directives: {\n Tooltip\n },\n props: {\n tree: Object as PropType<TreeNodeEditorProps['tree']>,\n node: Object as PropType<TreeNodeEditorProps['node']>\n },\n setup(props: TreeNodeEditorProps) {\n const width = ref<number>(50);\n const error = ref<string | null>(null);\n const formRef = ref<any>(null);\n const editorRef = ref<HTMLElement | null>(null);\n\n const getInput = (): HTMLInputElement | null => {\n if (editorRef.value) {\n return editorRef.value.querySelector('.textbox-text') as HTMLInputElement;\n }\n return null;\n };\n\n const autoSizeInput = (): void => {\n const input = getInput();\n if (!input) {\n return;\n }\n const style = getComputedStyle(input);\n const tmp = document.createElement('span');\n Object.assign(tmp.style, {\n position: 'absolute',\n top: '-9999px',\n left: '-9999px',\n width: 'auto',\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n whiteSpace: 'nowrap'\n });\n tmp.innerHTML = input.value;\n document.body.appendChild(tmp);\n\n const getWidth = (val: string): number => {\n val = val || '';\n const s = val.replace(/&/g, '&').replace(/\\s/g, ' ').replace(/</g, '<').replace(/>/g, '>');\n tmp.innerHTML = s;\n return domHelper.outerWidth(tmp);\n };\n const inputWidth = getWidth(input.value);\n document.body.removeChild(tmp);\n width.value = inputWidth + 50;\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const tree = props.tree as any;\n if (event.keyCode == 13) {\n // enter\n if (tree && tree.endEdit) {\n tree.endEdit();\n }\n } else if (event.keyCode == 27) {\n // esc\n if (tree && tree.cancelEdit) {\n tree.cancelEdit();\n }\n }\n setTimeout(() => autoSizeInput(), 0);\n };\n\n onMounted(() => {\n autoSizeInput();\n const input = getInput();\n if (input) {\n domHelper.bind(input, 'keydown', onKeyDown);\n }\n if (formRef.value && formRef.value.validate) {\n formRef.value.validate();\n }\n nextTick(() => {\n if (input) {\n input.focus();\n }\n });\n });\n\n onBeforeUnmount(() => {\n const input = getInput();\n if (input) {\n domHelper.unbind(input, 'keydown', onKeyDown);\n }\n });\n\n return () => {\n const tree = props.tree as any;\n const node = props.node as TreeNode | undefined;\n let editor: any = null;\n if (tree && tree.$slots && tree.$slots.editor) {\n editor = tree.$slots.editor(node);\n if (editor && editor[0] && editor[0].data) {\n editor[0].data.class = 'f-full';\n }\n } else {\n editor = (\n <TextBox\n class=\"f-full\"\n name=\"text\"\n value={node?.text || ''}\n onValueChange={(e: any) => {\n if (node) {\n node.text = e.currentValue;\n }\n if (formRef.value && formRef.value.validate) {\n formRef.value.validate();\n }\n }}\n />\n );\n }\n const editRules = tree?.editRules || {};\n const tipOptions = tree?.tipOptions || {};\n return (\n <div ref={editorRef}>\n <Form\n ref={formRef}\n class=\"tree-title tree-editing f-inline-row\"\n style={{ width: width.value + 'px' }}\n model={node || {}}\n rules={{ text: editRules }}\n onValidate={(errors: any) => {\n const editingItem = tree?.editingItem;\n if (errors && errors['text'] && errors['text'].length) {\n if (editingItem) {\n editingItem.invalid = true;\n }\n error.value = errors['text'][0];\n } else {\n if (editingItem) {\n editingItem.invalid = false;\n }\n error.value = null;\n }\n }}\n onSubmit={(e: Event) => e.preventDefault()}\n v-Tooltip={Object.assign(\n {\n closed: !error.value,\n content: error.value\n },\n tipOptions\n )}\n >\n {editor}\n </Form>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { TreeNodeIconProps, TreeNode } from './types';\n\nexport default defineComponent({\n name: 'TreeNodeIcon',\n props: {\n tree: Object as PropType<TreeNodeIconProps['tree']>,\n node: Object as PropType<TreeNodeIconProps['node']>\n },\n setup(props: TreeNodeIconProps) {\n return () => {\n const tree = props.tree as any;\n const node = props.node as TreeNode | undefined;\n if (tree && tree.$slots && tree.$slots['icon']) {\n return tree.$slots['icon']({ node: node });\n }\n return null;\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, onBeforeMount, nextTick } from 'vue';\nimport SlideUpDown from '../base/SlideUpDown';\nimport TreeNodeTitle from './TreeNodeTitle';\nimport TreeNodeEditor from './TreeNodeEditor';\nimport domHelper from '../base/DomHelper';\nimport Draggable from '../draggable/Draggable';\nimport Droppable from '../droppable/Droppable';\nimport treeHelper from '../base/TreeHelper';\nimport TreeNodeIcon from './TreeNodeIcon';\nimport type { TreeNodeProps, TreeNode as TreeNodeType, TreeInstance } from './types';\n\nconst TreeNode = defineComponent({\n name: 'TreeNode',\n directives: {\n SlideUpDown,\n Draggable,\n Droppable\n },\n props: {\n tree: Object as PropType<TreeNodeProps['tree']>,\n node: Object as PropType<TreeNodeProps['node']>,\n pnode: Object as PropType<TreeNodeProps['pnode']>,\n depth: {\n type: Number as PropType<TreeNodeProps['depth']>,\n default: 0\n },\n nodeCls: String as PropType<TreeNodeProps['nodeCls']>\n },\n setup(props: TreeNodeProps) {\n const loading = ref<boolean>(false);\n // const innerNode = ref<TreeNodeType | null>(props.node || null);\n const dndCls = ref<string | null>(null);\n\n onBeforeMount(() => {\n if (props.node && props.pnode) {\n props.node.parent = props.pnode;\n }\n });\n\n const isExpanded = computed(() => {\n const node = props.node as TreeNodeType;\n if (!node || !node.state || node.state == 'open') {\n return true;\n } else {\n return false;\n }\n });\n\n const isCollapsed = computed(() => {\n const node = props.node as TreeNodeType;\n if (node && node.state && node.state == 'closed') {\n return true;\n } else {\n return false;\n }\n });\n\n const isSelected = computed(() => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n return node == tree?.selectionState;\n });\n\n const isLeaf = computed(() => {\n const node = props.node as TreeNodeType;\n if (!node) {\n return true;\n }\n if (node.state == 'closed') {\n return false;\n } else {\n if (node.children && node.children.length) {\n loading.value = false;\n return false;\n } else {\n if (loading.value) {\n return false;\n }\n return true;\n }\n }\n });\n\n const indentWidth = computed(() => {\n const depth = props.depth || 0;\n if (isLeaf.value) {\n return (depth + 1) * 16;\n } else {\n return depth * 16;\n }\n });\n\n const nodeClasses = computed(() => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!node) {\n return ['tree-node f-row f-vcenter'];\n }\n return [\n 'tree-node f-row f-vcenter',\n dndCls.value,\n node.nodeCls,\n {\n 'tree-node-hover': node == tree?.highlightNode,\n 'tree-node-selected': isSelected.value,\n 'tree-node-disabled': node.disabled\n }\n ].filter(Boolean);\n });\n\n const hitClasses = computed(() => {\n return [\n 'tree-hit',\n {\n 'tree-expanded': isExpanded.value,\n 'tree-collapsed': isCollapsed.value\n }\n ];\n });\n\n const iconClasses = computed(() => {\n const node = props.node as TreeNodeType;\n if (!node) {\n return ['tree-icon tree-folder'];\n }\n return [\n 'tree-icon tree-folder',\n node.iconCls,\n {\n 'tree-folder-open': isExpanded.value,\n 'tree-file': isLeaf.value,\n 'tree-loading': loading.value\n }\n ].filter(Boolean);\n });\n\n const checkboxClasses = computed(() => {\n const node = props.node as TreeNodeType;\n if (!node) {\n return 'tree-checkbox tree-checkbox0';\n }\n const cc = ['unchecked', 'checked', 'indeterminate'];\n let index = cc.indexOf(node.checkState || 'unchecked');\n if (index == -1) {\n index = 0;\n }\n return 'tree-checkbox tree-checkbox' + index;\n });\n\n const getDraggableOpts = (): any => {\n const tree = props.tree as any as TreeInstance;\n return {\n disabled: tree?.dnd ? (props.node as TreeNodeType)?.disabled : true,\n revert: true,\n deltaX: 0,\n deltaY: 0,\n edge: 5,\n scope: tree?.dragScope || {},\n proxy: (tree as any)?.proxyRef,\n dragStart: (event: any) => {\n onDragStart(event);\n },\n dragEnd: () => {\n onDragEnd();\n }\n };\n };\n\n const getDroppableOpts = (): any => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n return {\n disabled: tree?.dnd ? node?.disabled || node?.dropDisabled : true,\n node: node,\n dragOver: (scope: any) => {\n onDragOver(scope);\n },\n dragLeave: () => {\n onDragLeave();\n },\n drop: (scope: any) => {\n onDrop(scope);\n }\n };\n };\n\n const onDragStart = (event: any): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n Object.assign(tree.dragScope, {\n node: node,\n event: event,\n obj: null\n });\n tree.dragCls = 'tree-dnd-no';\n treeHelper.forNodes([node], (n: TreeNodeType) => {\n n.dropDisabled = true;\n });\n };\n\n const onDragEnd = (): void => {\n const tree = props.tree as any as TreeInstance;\n if (!tree) {\n return;\n }\n treeHelper.forNodes(tree.innerData, (node: TreeNodeType) => {\n node.dropDisabled = false;\n });\n };\n\n const onDragOver = (scope: any): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n if (node.dropDisabled) {\n tree.dragCls = 'tree-dnd-no';\n return;\n }\n tree.dragCls = 'tree-dnd-yes';\n const event = scope.event;\n const el = event.target.currDroppable.$el;\n const top = domHelper.offset(el).top;\n const bottom = top + domHelper.outerHeight(el);\n const pageY = event.pageY;\n if (pageY > top + (bottom - top) / 2) {\n if (bottom - pageY < 5) {\n scope.point = 'bottom';\n dndCls.value = 'tree-node-bottom';\n } else {\n scope.point = 'append';\n dndCls.value = 'tree-node-append';\n }\n } else {\n if (pageY - top < 5) {\n scope.point = 'top';\n dndCls.value = 'tree-node-top';\n } else {\n scope.point = 'append';\n dndCls.value = 'tree-node-append';\n }\n }\n };\n\n const onDragLeave = (): void => {\n const tree = props.tree as any as TreeInstance;\n if (tree) {\n dndCls.value = null;\n tree.dragCls = 'tree-dnd-no';\n }\n };\n\n const onDrop = (scope: any): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n dndCls.value = null;\n tree.dragCls = null;\n if (scope.point) {\n tree.emit('nodeDrop', { from: scope.node, to: node, point: scope.point });\n tree.moveNode(scope.node, node, scope.point);\n nextTick(() => {\n const event = scope.event;\n const el = event.target.$el;\n if (el) {\n el.style.left = '';\n el.style.top = '';\n }\n });\n }\n };\n\n const toggle = (event: Event): void => {\n const node = props.node as TreeNodeType;\n const tree = props.tree as any as TreeInstance;\n if (!node || !tree) {\n return;\n }\n event.stopPropagation();\n if (isExpanded.value) {\n node.state = 'closed';\n tree.emit('nodeCollapse', node);\n } else {\n loading.value = true;\n node.state = 'open';\n tree.emit('nodeExpand', node);\n }\n };\n\n const onClickNode = (event: Event): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n const { clickToEdit, dblclickToEdit, editingItem } = tree;\n event.stopPropagation();\n tree.emit('nodeClick', node);\n tree.selectNode(node);\n if (clickToEdit || (dblclickToEdit && editingItem)) {\n const el = domHelper.closest(event.target as HTMLElement, '.tree-node');\n tree.beginEdit(node, el);\n }\n };\n\n const onDblClickNode = (event: Event): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n event.stopPropagation();\n tree.emit('nodeDblClick', node);\n if (tree.dblclickToEdit) {\n const el = domHelper.closest(event.target as HTMLElement, '.tree-node');\n tree.beginEdit(node, el);\n }\n };\n\n const onCheckNode = (event: Event): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!tree || !node) {\n return;\n }\n event.stopPropagation();\n if (node.checkState == 'checked') {\n tree.uncheckNode(node);\n } else {\n tree.checkNode(node);\n }\n };\n\n const onNodeContextMenu = (event: Event): void => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (tree && node) {\n tree.emit('nodeContextMenu', { node: node, originalEvent: event });\n }\n };\n\n return () => {\n const tree = props.tree as any as TreeInstance;\n const node = props.node as TreeNodeType;\n if (!node) {\n return null;\n }\n return (\n <li>\n <div\n class={nodeClasses.value}\n onMouseenter={() => {\n if (tree) {\n tree.highlightNode = node;\n }\n }}\n onMouseleave={() => {\n if (tree) {\n tree.highlightNode = null;\n }\n }}\n onContextmenu={onNodeContextMenu}\n onClick={onClickNode}\n onDblclick={onDblClickNode}\n v-Draggable={getDraggableOpts()}\n v-Droppable={getDroppableOpts()}\n >\n <span class=\"tree-indent\" style={{ width: indentWidth.value + 'px' }}></span>\n {!isLeaf.value && <span class={hitClasses.value} onClick={toggle}></span>}\n {!tree?.$slots?.['icon'] && <span class={iconClasses.value}></span>}\n {tree?.$slots?.['icon'] && <TreeNodeIcon tree={tree} node={node}></TreeNodeIcon>}\n {tree?.checkboxState && <span class={checkboxClasses.value} onClick={onCheckNode}></span>}\n {!tree?.isEditing(node) && <TreeNodeTitle tree={tree} node={node}></TreeNodeTitle>}\n {tree?.isEditing(node) && <TreeNodeEditor tree={tree} node={node}></TreeNodeEditor>}\n </div>\n {node.children && node.children.length > 0 && (\n <ul class=\"f-block\" v-SlideUpDown={{ animate: tree?.animate || false, collapsed: node.state == 'closed', disabled: false }}>\n {node.children.map(\n (cnode: TreeNodeType, index: number) =>\n !cnode.hidden && <TreeNode key={index} node={cnode} pnode={node} depth={props.depth || 0 + 1} tree={tree}></TreeNode>\n )}\n </ul>\n )}\n </li>\n );\n };\n }\n});\n\nexport default TreeNode;\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, watch, onMounted, getCurrentInstance } from 'vue';\nimport treeHelper from '../base/TreeHelper';\nimport TreeNode from './TreeNode';\nimport { DraggableProxy } from '../draggable';\nimport type { TreeProps, TreeNode as TreeNodeType } from './types';\n\nexport default defineComponent({\n name: 'Tree',\n props: {\n data: Array as PropType<TreeProps['data']>,\n selection: Object as PropType<TreeProps['selection']>,\n animate: {\n type: Boolean as PropType<TreeProps['animate']>,\n default: false\n },\n selectLeafOnly: {\n type: Boolean as PropType<TreeProps['selectLeafOnly']>,\n default: false\n },\n checkbox: {\n type: Boolean as PropType<TreeProps['checkbox']>,\n default: false\n },\n cascadeCheck: {\n type: Boolean as PropType<TreeProps['cascadeCheck']>,\n default: true\n },\n clickToEdit: {\n type: Boolean as PropType<TreeProps['clickToEdit']>,\n default: false\n },\n dblclickToEdit: {\n type: Boolean as PropType<TreeProps['dblclickToEdit']>,\n default: false\n },\n dnd: {\n type: Boolean as PropType<TreeProps['dnd']>,\n default: false\n },\n dndCls: String as PropType<TreeProps['dndCls']>,\n dndStyle: Object as PropType<TreeProps['dndStyle']>,\n editRules: [Array, Object] as PropType<TreeProps['editRules']>,\n tipOptions: Object as PropType<TreeProps['tipOptions']>,\n filterIncludingChild: {\n type: Boolean as PropType<TreeProps['filterIncludingChild']>,\n default: false\n },\n filter: {\n type: Function as PropType<TreeProps['filter']>,\n default: (q: string | string[], node: TreeNodeType) => {\n if (!q) {\n return true;\n }\n let qq = q instanceof Array ? q : [q];\n qq = qq.map((q: string) => q.trim()).filter((q: string) => q);\n for (let i = 0; i < qq.length; i++) {\n const text = node.text || '';\n let index = text.toLowerCase().indexOf(qq[i].toLowerCase());\n if (index >= 0) {\n return true;\n }\n }\n return !qq.length;\n }\n }\n },\n emits: ['selectionChange', 'nodeCheck', 'checkChange', 'nodeUncheck', 'editBegin', 'editEnd', 'editCancel', 'nodeMove', 'nodeClick'],\n setup(props: TreeProps, { emit }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const highlightNode = ref<TreeNodeType | null>(null);\n const editingItem = ref<{\n node: TreeNodeType;\n originalValue: string;\n element: HTMLElement | null;\n invalid?: boolean;\n } | null>(null);\n const innerData = ref<TreeNodeType[]>([]);\n const selectionState = ref<TreeNodeType | null>(props.selection || null);\n const checkboxState = ref<boolean>(props.checkbox || false);\n const dragScope = ref<{\n node?: TreeNodeType;\n event?: Event;\n obj?: any;\n }>({});\n const dragCls = ref<string | null>(null);\n const proxyRef = ref<any>(null);\n\n const tree = ref<any | null>(null);\n\n watch(\n () => props.data,\n (value: TreeNodeType[] | undefined) => {\n setData(value);\n }\n );\n\n watch(\n () => props.selection,\n (value: TreeNodeType | null | undefined) => {\n selectNode(value || null);\n }\n );\n\n watch(\n () => props.checkbox,\n (value?: boolean) => {\n checkboxState.value = value || false;\n }\n );\n\n (treeHelper as any).$vue = proxy;\n\n onMounted(() => {\n setData(props.data);\n tree.value = buildProxy();\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$emit('treeMounted', tree.value);\n }\n });\n\n const afterSelectionChange = (..._args: any[]): void => {};\n\n const afterCheckChange = (): void => {};\n\n const setData = (value?: TreeNodeType[] | null): void => {\n if (value == null) {\n value = [];\n }\n innerData.value = Object.assign([], value);\n };\n\n const getCheckedNodes = (state: 'checked' | 'unchecked' | 'indeterminate' = 'checked'): TreeNodeType[] => {\n const nodes: TreeNodeType[] = [];\n (treeHelper as any).cascadeCheck = props.cascadeCheck;\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n if (node.checkState == state) {\n nodes.push(node);\n }\n });\n return nodes;\n };\n\n const selectNode = (node: TreeNodeType | null): void => {\n if (node && node.children && node.children.length && props.selectLeafOnly) {\n return;\n }\n if (selectionState.value != node) {\n selectionState.value = node;\n emit('selectionChange', node);\n if(tree.value?.afterSelectionChange) {\n tree.value?.afterSelectionChange(node);\n }else{\n afterSelectionChange(node)\n }\n }\n };\n\n const checkNode = (node: TreeNodeType): void => {\n (treeHelper as any).cascadeCheck = props.cascadeCheck;\n treeHelper.checkNode(node, () => {\n emit('nodeCheck', node);\n emit('checkChange', getCheckedNodes());\n afterCheckChange();\n });\n };\n\n const uncheckNode = (node: TreeNodeType): void => {\n (treeHelper as any).cascadeCheck = props.cascadeCheck;\n treeHelper.uncheckNode(node, () => {\n emit('nodeUncheck', node);\n emit('checkChange', getCheckedNodes());\n afterCheckChange();\n });\n };\n\n const uncheckAllNodes = (): void => {\n treeHelper.uncheckAllNodes(innerData.value, () => {\n emit('checkChange', []);\n afterCheckChange();\n });\n };\n\n const adjustCheck = (node: TreeNodeType): void => {\n (treeHelper as any).cascadeCheck = props.cascadeCheck;\n treeHelper.adjustCheck(node);\n };\n\n const showNode = (node: TreeNodeType): void => {\n node.hidden = false;\n };\n\n const hideNode = (node: TreeNodeType): void => {\n node.hidden = true;\n };\n\n const doFilter = (q: string | string[]): void => {\n const nodes: TreeNodeType[] = [];\n (treeHelper as any).cascadeCheck = props.cascadeCheck;\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n if (props.filter && props.filter(q, node)) {\n showNode(node);\n nodes.push(node);\n } else {\n hideNode(node);\n }\n });\n for (let node of nodes) {\n let pnode = node.parent || null;\n while (pnode) {\n showNode(pnode);\n pnode = pnode.parent || null;\n }\n if (props.filterIncludingChild && node.children) {\n treeHelper.forNodes(node.children, (node: TreeNodeType) => {\n showNode(node);\n });\n }\n }\n };\n\n const isEditing = (node: TreeNodeType): boolean => {\n if (editingItem.value) {\n return editingItem.value.node == node;\n }\n return false;\n };\n\n const beginEdit = (node: TreeNodeType, el: HTMLElement | null = null): void => {\n if (!isEditing(node)) {\n endEdit();\n if (editingItem.value) {\n setTimeout(() => {\n selectNode(editingItem.value!.node);\n }, 0);\n return;\n }\n editingItem.value = {\n node: node,\n originalValue: node.text || '',\n element: el\n };\n emit('editBegin', editingItem.value);\n }\n };\n\n const endEdit = (): void => {\n if (editingItem.value) {\n const el = editingItem.value.element;\n if (el && el.querySelector('.validatebox-invalid')) {\n return;\n }\n if (editingItem.value.invalid) {\n return;\n }\n emit('editEnd', editingItem.value);\n editingItem.value = null;\n }\n };\n\n const cancelEdit = (): void => {\n if (editingItem.value) {\n editingItem.value.node.text = editingItem.value.originalValue;\n emit('editCancel', editingItem.value);\n editingItem.value = null;\n }\n };\n\n const moveNode = (from: TreeNodeType, to: TreeNodeType, point: 'append' | 'top' | 'bottom'): void => {\n const data = innerData.value;\n const fchildren = from.parent ? from.parent.children : data;\n if (!fchildren) {\n return;\n }\n const index = fchildren.indexOf(from);\n if (index >= 0) {\n fchildren.splice(index, 1);\n if (point === 'append') {\n const children = (to.children || []).slice();\n children.push(from);\n to.children = children;\n } else if (point === 'top') {\n const pchildren = to.parent ? to.parent.children : data;\n if (pchildren) {\n const index = pchildren.indexOf(to);\n if (index >= 0) {\n pchildren.splice(index, 0, from);\n }\n }\n } else if (point === 'bottom') {\n const pchildren = to.parent ? to.parent.children : data;\n if (pchildren) {\n const index = pchildren.indexOf(to);\n if (index >= 0) {\n pchildren.splice(index + 1, 0, from);\n }\n }\n }\n emit('nodeMove', {\n from,\n to,\n point,\n data\n });\n }\n };\n\n const expandNode = (node: TreeNodeType): void => {\n node.state = 'open';\n };\n\n const collapseNode = (node: TreeNodeType): void => {\n node.state = 'closed';\n };\n\n const toggleNode = (node: TreeNodeType): void => {\n if (node.state == 'closed') {\n expandNode(node);\n } else {\n collapseNode(node);\n }\n };\n\n const expandAll = (): void => {\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n expandNode(node);\n });\n };\n\n const collapseAll = (): void => {\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n collapseNode(node);\n });\n };\n\n const getNode = (id: string | number): TreeNodeType | null => {\n let result: TreeNodeType | null = null;\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n if (node.id == id) {\n result = node;\n }\n });\n return result;\n };\n\n const getNodeBy = (fn: (node: TreeNodeType) => boolean): TreeNodeType | null => {\n let result: TreeNodeType | null = null;\n treeHelper.forNodes(innerData.value, (node: TreeNodeType) => {\n if (fn(node)) {\n result = node;\n }\n });\n return result;\n };\n\n const getParent = (node: TreeNodeType): TreeNodeType | null => {\n return node.parent || null;\n };\n\n const getChildren = (node: TreeNodeType): TreeNodeType[] => {\n return node.children || [];\n };\n\n const getRoot = (node: TreeNodeType): TreeNodeType | null => {\n let current: TreeNodeType | null = node;\n while (current && current.parent) {\n current = current.parent;\n }\n return current;\n };\n\n const getSiblings = (node: TreeNodeType): TreeNodeType[] => {\n const parent = node.parent;\n if (parent && parent.children) {\n return parent.children.filter((n: TreeNodeType) => n != node);\n }\n return innerData.value.filter((n: TreeNodeType) => n != node);\n };\n\n const getPath = (node: TreeNodeType): TreeNodeType[] => {\n const path: TreeNodeType[] = [];\n let current: TreeNodeType | null = node;\n while (current) {\n path.unshift(current);\n current = current.parent || null;\n }\n return path;\n };\n\n const findNode = (fn: (node: TreeNodeType) => boolean): TreeNodeType | null => {\n return getNodeBy(fn);\n };\n\n const append = (parent: TreeNodeType | null, node: TreeNodeType): void => {\n if (parent) {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push(node);\n node.parent = parent;\n } else {\n innerData.value.push(node);\n node.parent = null;\n }\n };\n\n const insert = (before: TreeNodeType, node: TreeNodeType): void => {\n const parent = before.parent;\n if (parent && parent.children) {\n const index = parent.children.indexOf(before);\n if (index >= 0) {\n parent.children.splice(index, 0, node);\n node.parent = parent;\n }\n } else {\n const index = innerData.value.indexOf(before);\n if (index >= 0) {\n innerData.value.splice(index, 0, node);\n node.parent = null;\n }\n }\n };\n\n const remove = (node: TreeNodeType): void => {\n const parent = node.parent;\n if (parent && parent.children) {\n const index = parent.children.indexOf(node);\n if (index >= 0) {\n parent.children.splice(index, 1);\n }\n } else {\n const index = innerData.value.indexOf(node);\n if (index >= 0) {\n innerData.value.splice(index, 1);\n }\n }\n };\n\n const update = (node: TreeNodeType, data: Partial<TreeNodeType>): void => {\n Object.assign(node, data);\n };\n const buildProxy = () => {\n return {\n uid: inst?.uid,\n $el: proxy?.$el,\n emit,\n highlightNode,\n editingItem,\n innerData,\n selectionState,\n checkboxState,\n dragScope,\n dragCls,\n tree,\n setData,\n getCheckedNodes,\n selectNode,\n checkNode,\n uncheckNode,\n uncheckAllNodes,\n adjustCheck,\n showNode,\n hideNode,\n doFilter,\n isEditing,\n expandNode,\n collapseNode,\n toggleNode,\n expandAll,\n collapseAll,\n getNode,\n getNodeBy,\n getParent,\n getChildren,\n getRoot,\n getSiblings,\n getPath,\n findNode,\n append,\n insert,\n remove,\n update,\n beginEdit,\n endEdit,\n cancelEdit,\n moveNode,\n proxyRef\n };\n };\n return {\n highlightNode,\n editingItem,\n innerData,\n selectionState,\n checkboxState,\n dragScope,\n dragCls,\n tree,\n setData,\n getCheckedNodes,\n selectNode,\n checkNode,\n uncheckNode,\n uncheckAllNodes,\n adjustCheck,\n showNode,\n hideNode,\n doFilter,\n isEditing,\n expandNode,\n collapseNode,\n toggleNode,\n expandAll,\n collapseAll,\n getNode,\n getNodeBy,\n getParent,\n getChildren,\n getRoot,\n getSiblings,\n getPath,\n findNode,\n append,\n insert,\n remove,\n update,\n beginEdit,\n endEdit,\n cancelEdit,\n moveNode,\n proxyRef\n }\n },\n render() {\n const { innerData, tree, dnd, dndCls, dndStyle, proxyRef, dragCls, dragScope } = this;\n return (\n <ul class=\"tree\">\n {innerData.map((node: TreeNodeType, index: number) => !node.hidden && <TreeNode key={index} node={node} tree={tree}></TreeNode>)}\n {dnd && (\n <DraggableProxy ref={proxyRef} proxyCls={dndCls} proxyStyle={dndStyle}>\n <div class=\"tree-node-proxy\">\n <span class={['tree-dnd-icon', dragCls]}> </span>\n <span>{dragScope.node ? dragScope.node.text : null}</span>\n </div>\n </DraggableProxy>\n )}\n </ul>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { TabPanelInstance } from './types';\n\nexport default defineComponent({\n name: 'TabPanelHeader',\n props: {\n panel: {\n type: Object as PropType<TabPanelInstance>,\n required: true\n }\n },\n setup(props, { emit }) {\n return () => {\n const panel = props.panel as any;\n let title = null;\n if (panel.slots && panel.slots['header']) {\n title = panel.slots['header']();\n } else {\n title = (\n <span\n class={[\n 'tabs-title',\n {\n 'tabs-with-icon': panel.iconCls,\n 'tabs-closable': panel.closable\n }\n ]}\n >\n {panel.title}\n </span>\n );\n }\n let icon = null;\n if (panel.iconCls) {\n icon = <span class={['tabs-icon', panel.iconCls]}></span>;\n }\n let closable = null;\n if (panel.closable) {\n closable = (\n <a\n href=\"javascript:;\"\n tabindex=\"-1\"\n class=\"tabs-close\"\n onClick={(event: Event) => {\n emit('close', event);\n }}\n />\n );\n }\n const inst = getCurrentInstance();\n const parent = inst?.parent as any;\n return (\n <span\n class={['tabs-inner f-inline-row f-full', panel.headerCls]}\n style={[\n panel.headerStyle,\n {\n width: !parent?.isHorizontal ? domHelper.toStyleValue(parent?.tabWidth) : null,\n height: parent?.isHorizontal ? domHelper.toStyleValue(parent?.tabHeight) : null\n }\n ]}\n onContextmenu={(event: Event) => {\n if (panel.$emit) {\n panel.emit('contextMenu', event);\n }\n }}\n >\n {title}\n {icon}\n {closable}\n </span>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport TabPanelHeader from './TabPanelHeader';\nimport type { TabsProps, TabPanelInstance } from './types';\n\nexport default defineComponent({\n name: 'Tabs',\n props: {\n headerWidth: {\n type: [Number, String] as PropType<TabsProps['headerWidth']>,\n default: 150\n },\n headerHeight: {\n type: [Number, String] as PropType<TabsProps['headerHeight']>,\n default: 35\n },\n tabWidth: [Number, String] as PropType<TabsProps['tabWidth']>,\n tabHeight: {\n type: [Number, String] as PropType<TabsProps['tabHeight']>,\n default: 32\n },\n tabPosition: {\n type: String as PropType<TabsProps['tabPosition']>,\n default: 'top'\n },\n plain: {\n type: Boolean as PropType<TabsProps['plain']>,\n default: false\n },\n narrow: {\n type: Boolean as PropType<TabsProps['narrow']>,\n default: false\n },\n justified: {\n type: Boolean as PropType<TabsProps['justified']>,\n default: false\n },\n border: {\n type: Boolean as PropType<TabsProps['border']>,\n default: true\n },\n scrollable: {\n type: Boolean as PropType<TabsProps['scrollable']>,\n default: false\n },\n scrollIncrement: {\n type: Number as PropType<TabsProps['scrollIncrement']>,\n default: 100\n },\n selectedIndex: {\n type: Number as PropType<TabsProps['selectedIndex']>,\n default: 0\n }\n },\n setup(props: TabsProps, { expose, slots }) {\n const panels = ref<TabPanelInstance[]>([]);\n const selectedHis = ref<TabPanelInstance[]>([]);\n const scrollDistance = ref<number>(0);\n const maxScrollDistance = ref<number>(0);\n const containerRef = ref<HTMLElement | null>(null);\n const headerRef = ref<HTMLElement | null>(null);\n const tabsRef = ref<HTMLElement | null>(null);\n const tabsWrapRef = ref<HTMLElement | null>(null);\n\n const isHorizontal = computed(() => {\n return props.tabPosition == 'left' || props.tabPosition == 'right';\n });\n\n const isScrollable = computed(() => {\n if (isHorizontal.value) {\n return false;\n } else {\n return !!props.scrollable && !props.justified;\n }\n });\n\n const usedPanels = computed(() => {\n return panels.value.filter(p => {\n return (p as any).isUsed;\n });\n });\n\n const containerClasses = computed(() => {\n return 'tabs-container ' + (isHorizontal.value ? 'f-row' : 'f-column');\n });\n\n const headerClasses = computed(() => {\n const plain = props.plain ?? false;\n const narrow = props.narrow ?? false;\n const border = props.border ?? true;\n const tabPosition = props.tabPosition ?? 'top';\n return [\n 'tabs-header f-row f-noshrink',\n {\n 'tabs-header-plain': plain,\n 'tabs-header-narrow': narrow,\n 'tabs-header-noborder': !border,\n 'tabs-header-bottom f-order2': tabPosition == 'bottom',\n 'tabs-header-left f-column': tabPosition == 'left',\n 'tabs-header-right f-column f-order2': tabPosition == 'right'\n }\n ];\n });\n\n const headerStyle = computed(() => {\n return {\n width: isHorizontal.value ? domHelper.toStyleValue(props.headerWidth) : null,\n height: !isHorizontal.value ? domHelper.toStyleValue(props.headerHeight) : null\n };\n });\n\n const bodyClasses = computed(() => {\n return [\n 'tabs-panels f-column f-full',\n {\n 'tabs-panels-noborder': !props.border,\n 'tabs-panels-top': props.tabPosition == 'bottom',\n 'tabs-panels-right': props.tabPosition == 'left',\n 'tabs-panels-left': props.tabPosition == 'right'\n }\n ];\n });\n\n const tabsClasses = computed(() => {\n const narrow = props.narrow ?? false;\n return [\n 'tabs f-full',\n {\n 'f-row': !isHorizontal.value,\n 'f-column': isHorizontal.value,\n 'tabs-scrollable': isScrollable.value,\n 'tabs-narrow': narrow\n }\n ];\n });\n\n const tabsStyle = computed(() => {\n if (isScrollable.value) {\n return {\n left: -scrollDistance.value + 'px'\n };\n } else {\n return null;\n }\n });\n\n const isScrollerVisible = computed(() => {\n if (isScrollable.value) {\n return maxScrollDistance.value > 0;\n } else {\n return false;\n }\n });\n\n watch(panels, () => {\n initPanels();\n });\n\n const addPanel = (panel: TabPanelInstance): void => {\n const pp = panels.value.slice();\n pp.push(panel);\n panels.value = pp;\n initPanels();\n };\n\n const removePanel = (panel: TabPanelInstance): void => {\n const pp = panels.value.slice();\n const index = pp.indexOf(panel);\n if (index >= 0) {\n pp.splice(index, 1);\n panels.value = pp;\n }\n removeHis(panel);\n };\n\n const setMaxScrollDistance = (): void => {\n if (!tabsRef.value || !tabsWrapRef.value) {\n maxScrollDistance.value = 0;\n return;\n }\n const width = tabsRef.value.scrollWidth;\n const wrapWidth = tabsWrapRef.value.offsetWidth;\n maxScrollDistance.value = width > wrapWidth ? width - wrapWidth : 0;\n };\n\n const onClickTab = (panel: TabPanelInstance, event: Event): void => {\n event.stopPropagation();\n panel.select();\n };\n\n const onCloseTab = (panel: TabPanelInstance, event: Event): void => {\n event.stopPropagation();\n if (!panel.disabled) {\n panel.close();\n }\n };\n\n const initPanels = (): void => {\n if (panels.value.length) {\n panels.value.forEach(p => {\n (p as any).isFirst = false;\n (p as any).isLast = false;\n });\n const pp = panels.value.filter(p => {\n return (p as any).isUsed;\n });\n if (pp.length) {\n (pp[0] as any).isFirst = true;\n (pp[pp.length - 1] as any).isLast = true;\n }\n initSelectedPanel();\n }\n nextTick(() => setScrollers());\n };\n\n const initSelectedPanel = (): void => {\n let panel = getSelectedPanel();\n if (!panel) {\n panel = selectedHis.value.pop() as TabPanelInstance;\n }\n if (!panel) {\n panel = getPanel(props.selectedIndex || 0) as TabPanelInstance;\n }\n if (panel) {\n usedPanels.value.filter(p => p != panel).forEach(p => ((p as any).selectedState = false));\n (panel as any).selectedState = true;\n selectedHis.value = selectedHis.value.filter(p => getPanelIndex(p) != -1);\n removeHis(panel);\n addHis(panel);\n }\n };\n\n const setScrollers = (): void => {\n if (!isScrollable.value) {\n return;\n }\n setMaxScrollDistance();\n const panel = getSelectedPanel();\n if (panel) {\n if (!tabsWrapRef.value) return;\n const wrapWidth = domHelper.outerWidth(tabsWrapRef.value);\n const index = getPanelIndex(panel);\n if (!tabsRef.value || !tabsRef.value.children[index]) return;\n const li = tabsRef.value.children[index] as HTMLElement;\n const width = domHelper.outerWidth(li, true);\n const pos = domHelper.position(li);\n const left = pos.left - scrollDistance.value;\n const right = left + width;\n if (left < 0) {\n const distance = left - (wrapWidth - width) / 2;\n scrollBy(distance);\n } else if (right > wrapWidth) {\n const distance = left - (wrapWidth - width) / 2;\n scrollBy(distance);\n } else {\n scrollBy(0);\n }\n }\n };\n\n const addHis = (panel: TabPanelInstance): void => {\n selectedHis.value.push(panel);\n };\n\n const removeHis = (panel: TabPanelInstance): void => {\n selectedHis.value = selectedHis.value.filter(p => p != panel);\n };\n\n const backHis = (): void => {\n const panel = selectedHis.value.pop();\n if (panel) {\n removeHis(panel);\n panel.select();\n } else {\n select(0);\n }\n };\n\n const select = (index: number): void => {\n const panel = getPanel(index);\n if (panel) {\n panel.select();\n }\n };\n\n const unselect = (index: number): void => {\n const panel = getPanel(index);\n if (panel) {\n panel.unselect();\n }\n };\n\n const getPanel = (index: number): TabPanelInstance | undefined => {\n return usedPanels.value[index];\n };\n\n const getPanelIndex = (panel: TabPanelInstance): number => {\n const pp = usedPanels.value;\n for (let i = 0; i < pp.length; i++) {\n if (pp[i] == panel) {\n return i;\n }\n }\n return -1;\n };\n\n const getSelectedPanel = (): TabPanelInstance | null => {\n const pp = usedPanels.value.filter(p => (p as any).selectedState && !p.disabled);\n return pp.length ? pp[0] : null;\n };\n\n const scrollBy = (distance: number): void => {\n setMaxScrollDistance();\n distance += scrollDistance.value;\n if (distance > maxScrollDistance.value) {\n distance = maxScrollDistance.value;\n }\n if (distance < 0) {\n distance = 0;\n }\n scrollDistance.value = distance;\n };\n\n const resize = (): void => {\n setMaxScrollDistance();\n };\n expose({\n panels,\n addHis,\n addPanel,\n removePanel,\n removeHis,\n backHis,\n getPanel,\n getPanelIndex,\n getSelectedPanel,\n select,\n unselect,\n scrollBy,\n resize,\n setMaxScrollDistance,\n setScrollers,\n initPanels\n });\n\n return () => (\n <div ref={containerRef} class={containerClasses.value}>\n <div ref={headerRef} class={headerClasses.value} style={headerStyle.value}>\n {isScrollerVisible.value && <div class=\"tabs-scroller-left f-order1\" onClick={() => scrollBy(-(props.scrollIncrement || 100))}></div>}\n {isScrollerVisible.value && <div class=\"tabs-scroller-right f-order3\" onClick={() => scrollBy(props.scrollIncrement || 100)}></div>}\n <div ref={tabsWrapRef} class=\"tabs-wrap f-column f-full f-order2\">\n {isScrollable.value && <ul class=\"tabs tabs-scrollable f-full\" style=\"width:100%\"></ul>}\n <ul ref={tabsRef} class={tabsClasses.value} style={tabsStyle.value}>\n {usedPanels.value.map(panel => (\n <li\n key={getPanelIndex(panel)}\n class={[\n {\n 'f-inline-row f-full': props.justified,\n 'f-noshrink': isScrollable.value,\n 'tabs-selected': (panel as any).selectedState,\n 'tabs-disabled': panel.disabled,\n 'tabs-first': (panel as any).isFirst,\n 'tabs-last': (panel as any).isLast\n }\n ]}\n onClick={(event: Event) => onClickTab(panel, event)}\n >\n <TabPanelHeader panel={panel} onClose={(event: Event) => onCloseTab(panel, event)}></TabPanelHeader>\n </li>\n ))}\n </ul>\n </div>\n {slots.tools && <div class=\"tabs-tool f-order4 f-noshrink\">{slots.tools()}</div>}\n </div>\n <div class={bodyClasses.value}>{slots.default?.()}</div>\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, PropType, ref, watch } from \"vue\";\nimport { panelProps } from \"../panel/panelProps\";\nimport { usePanelBase } from \"../panel/usePanelBase\";\n\nexport default defineComponent({\n name: \"TabPanel\",\n props: {\n ...panelProps,\n selected: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n showHeader: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n border: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n disabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n closable: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n setup(props, { slots, expose, emit }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const proxyPanel = ref<any>();\n\n const pb = usePanelBase(props, slots);\n\n const selectedState = ref<boolean>(!!props.selected);\n const isUsed = ref(true);\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'panel f-column',\n props.panelCls,\n {\n 'f-full': selectedState.value,\n 'f-hide': !selectedState.value\n }\n ].filter(Boolean) as any;\n });\n\n watch(\n () => props.selected,\n v => {\n selectedState.value = !!v;\n }\n );\n\n function select(): void {\n if (selectedState.value || props.disabled) return;\n const tabs = proxy?.$parent as any;\n if (tabs?.panels) {\n tabs.panels.filter((p: any) => p != proxy).forEach((p: any) => p.unselect?.());\n }\n selectedState.value = true;\n if (tabs) {\n tabs.$emit?.('tabSelect', proxy);\n tabs.addHis?.(proxy);\n setTimeout(() => {\n tabs.setScrollers?.();\n (window as any).EventHub?.$emit?.('tabSelect', proxy);\n }, 0);\n }\n }\n\n function unselect(): void {\n if (!selectedState.value || props.disabled) return;\n selectedState.value = false;\n const tabs = proxy?.$parent as any;\n tabs?.$emit?.('tabUnselect', proxy);\n }\n\n function close(): void {\n if (props.disabled) return;\n if (selectedState.value) selectedState.value = false;\n pb.closedState.value = true;\n isUsed.value = false;\n const tabs = proxy?.$parent as any;\n if (tabs) {\n tabs.$emit?.('tabClose', proxy);\n tabs.removeHis?.(proxy);\n tabs.backHis?.();\n tabs.initPanels?.();\n setTimeout(() => tabs.setScrollers?.(), 0);\n }\n }\n\n function buildProxy() {\n return {\n ...props,\n slots,\n emit,\n isUsed: isUsed,\n selectedState: selectedState,\n select, unselect, close,\n }\n }\n\n onMounted(() => {\n const parent = proxy?.$parent as any;\n proxyPanel.value = buildProxy();\n parent?.addPanel?.(proxyPanel.value);\n });\n\n onBeforeUnmount(() => {\n const parent = proxy?.$parent as any;\n parent?.removePanel?.(proxyPanel.value);\n });\n\n expose({ select, unselect, close });\n\n return () => {\n if (pb.closedState.value || !isUsed.value) return null;\n return (\n <div class={panelClasses.value} style={props.panelStyle}>\n {pb.renderHeader({ style: props.headerStyle })}\n {pb.renderBody({ style: props.bodyStyle })}\n {pb.renderFooter({ style: props.footerStyle })}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, PropType, ref } from \"vue\";\nimport dateHelper from \"../base/DateHelper\";\nimport domHelper from \"../base/DomHelper\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useSpinnerBase } from \"../base/useSpinnerBase\";\nimport type { TimeSpinnerProps } from \"./types\";\n\nexport default defineComponent({\n name: \"TimeSpinner\",\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // SpinnerBase\n reversed: {\n type: Boolean as PropType<any>,\n default: false\n },\n spinners: {\n type: Boolean as PropType<any>,\n default: true\n },\n spinAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n\n value: String as PropType<TimeSpinnerProps['value']>,\n modelValue: String as PropType<TimeSpinnerProps['modelValue']>,\n min: String as PropType<TimeSpinnerProps['min']>,\n max: String as PropType<TimeSpinnerProps['max']>,\n increment: {\n type: Number as PropType<TimeSpinnerProps['increment']>,\n default: 1\n },\n highlight: {\n type: Number as PropType<TimeSpinnerProps['highlight']>,\n default: 0\n },\n selections: {\n type: Array as PropType<TimeSpinnerProps['selections']>,\n default: () => [[0, 2], [3, 5], [6, 8]]\n },\n formatter: Function as PropType<TimeSpinnerProps['formatter']>,\n parser: Function as PropType<TimeSpinnerProps['parser']>,\n format: {\n type: String as PropType<TimeSpinnerProps['format']>,\n default: 'HH:mm'\n }\n } satisfies Record<keyof TimeSpinnerProps, any>,\n emits: [\"update:modelValue\", \"valueChange\", \"focus\", \"blur\"],\n setup(props: any, { emit, slots, expose }) {\n const fieldBase = useFieldBase(props);\n\n const highlightState = ref<number>(props.highlight ?? 0);\n const highlighting = ref<boolean>(false);\n\n let sb!: ReturnType<typeof useSpinnerBase>;\n\n function defaultFormatter(date: Date): string {\n return dateHelper.formatDate(date, props.format);\n }\n\n function parseD(value: string): Date | null {\n return dateHelper.parseDate(value, props.format);\n }\n\n function defaultParser(value: string): Date | null {\n let date = parseD(value);\n if (date) {\n const min = parseD(props.min || \"\");\n const max = parseD(props.max || \"\");\n if (min && min > date) date = min;\n if (max && max < date) date = max;\n }\n return date;\n }\n\n function setValue(value: string): void {\n const parsed = (props.parser || defaultParser)(value);\n const formatted = (props.formatter || defaultFormatter)(parsed || new Date());\n sb.textState.value = formatted;\n sb.setValue(formatted);\n }\n\n function onClickMe(): void {\n const start = sb.getSelectionStart();\n const selections = props.selections || [];\n for (let i = 0; i < selections.length; i++) {\n const range = selections[i];\n if (start >= range[0] && start <= range[1]) {\n highlightRange(i);\n return;\n }\n }\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n if (event.keyCode === 13) {\n event.stopPropagation();\n const textValue = displayText.value;\n sb.valueState.value = textValue;\n sb.textState.value = textValue;\n onClickMe();\n highlighting.value = true;\n }\n }\n\n function onKeyPress(e: KeyboardEvent): boolean {\n if (!sb.focused.value) return true;\n if (e.metaKey || e.ctrlKey) return true;\n if ([\"46\", \"8\", \"13\", \"0\"].indexOf(String(e.which)) !== -1) return true;\n const c = String.fromCharCode(e.which);\n if (!c) return true;\n return \"0123456789\".indexOf(c) >= 0;\n }\n\n function onBlur(): void {\n setValue(sb.textState.value);\n }\n\n function highlightRange(index: number): void {\n highlightState.value = index;\n const range = props.selections?.[highlightState.value];\n if (range) {\n sb.setSelectionRange(range[0], range[1]);\n sb.focus();\n }\n }\n\n function doSpin(down: boolean): void {\n const range = props.selections?.[highlightState.value];\n const increment = props.increment || 0;\n if (range) {\n const s = sb.textState.value || \"\";\n if (s) {\n const s1 = s.substring(0, range[0]);\n const s2 = s.substring(range[0], range[1]);\n const s3 = s.substring(range[1]);\n const v = s1 + ((parseInt(s2, 10) || 0) + increment * (down ? -1 : 1)) + s3;\n setValue(v);\n } else {\n const v = (props.formatter || defaultFormatter)(new Date());\n setValue(v);\n }\n sb.focus();\n highlighting.value = true;\n }\n }\n\n function doSpinUp(): void {\n doSpin(false);\n }\n\n function doSpinDown(): void {\n doSpin(true);\n }\n\n sb = useSpinnerBase(props, { emit, slots }, fieldBase, { doSpinUp, doSpinDown });\n\n const displayText = computed(() => {\n const s = sb.focused.value ? sb.textState.value : (props.textFormatter || sb.defaultTextFormatter)(sb.valueState.value);\n if (sb.focused.value && highlighting.value) {\n nextTick(() => {\n highlightRange(highlightState.value);\n highlighting.value = false;\n });\n }\n return s;\n });\n\n onMounted(() => {\n const v = props.value !== undefined ? props.value : props.modelValue;\n setValue(v || \"\");\n const el = sb.inputRef.value;\n if (el) {\n domHelper.bind(el, \"click\", onClickMe);\n domHelper.bind(el, \"keydown\", onKeyDown);\n domHelper.bind(el, \"keypress\", onKeyPress);\n domHelper.bind(el, \"blur\", onBlur);\n }\n });\n\n onBeforeUnmount(() => {\n const el = sb.inputRef.value;\n if (el) domHelper.unbind(el);\n });\n\n expose({ setValue, doSpinUp, doSpinDown, highlightRange });\n\n return () => sb.renderField(sb.renderSpinnerOthers, { value: displayText.value });\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, watch, onMounted, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { TimeClockProps } from './types';\n\nexport default defineComponent({\n name: 'TimeClock',\n props: {\n value: {\n type: Number as PropType<TimeClockProps['value']>,\n default: () => 0\n },\n type: {\n type: String as PropType<TimeClockProps['type']>,\n default: () => 'hour'\n }\n },\n setup(props: TimeClockProps, { emit }) {\n const inst = getCurrentInstance();\n const elRef = ref<HTMLElement | null>(null);\n const valueState = ref<number>(0);\n const data = ref<string[]>([]);\n const radius = ref<number>(0);\n const width = ref<number>(0);\n const height = ref<number>(0);\n\n const hour24 = computed(() => {\n const parent = inst?.parent?.proxy as any;\n const grandParent = parent?.$parent as any;\n return grandParent?.hour24 || false;\n });\n\n const hourDistance = computed(() => {\n const parent = inst?.parent?.proxy as any;\n const grandParent = parent?.$parent as any;\n return grandParent?.hourDistance || [20, 50];\n });\n\n const getData = (type: string = 'hour'): string[] => {\n let result: string[] = [];\n if (type == 'hour') {\n for (let i = 0; i < 12; i++) {\n result.push(String(i));\n }\n result[0] = '12';\n } else {\n for (let i = 0; i < 60; i += 5) {\n result.push(i < 10 ? '0' + i : String(i));\n }\n result[0] = '00';\n }\n return result;\n };\n\n watch(\n () => props.value,\n newValue => {\n valueState.value = newValue || 0;\n }\n );\n\n watch(\n () => props.type,\n newType => {\n data.value = getData(newType || 'hour');\n }\n );\n\n onMounted(() => {\n setTimeout(() => {\n valueState.value = props.value || 0;\n data.value = getData(props.type || 'hour');\n if (elRef.value) {\n const w = domHelper.outerWidth(elRef.value);\n const h = domHelper.outerHeight(elRef.value);\n const size = Math.min(w, h) - 20;\n width.value = size;\n height.value = size;\n radius.value = size / 2;\n }\n }, 0);\n });\n\n const getHour24 = (value: string): string | number => {\n let itemValue = parseInt(value, 10);\n itemValue += 12;\n if (itemValue == 24) {\n itemValue = 0;\n }\n return itemValue < 10 ? '0' + itemValue : itemValue;\n };\n\n const itemClasses = (value: string): (string | Record<string, boolean>)[] => {\n return [\n 'item f-column f-content-center',\n {\n 'item-selected': value == String(valueState.value)\n }\n ];\n };\n\n const itemStyle = (value: string, is24: boolean = false): CSSProperties => {\n const type = props.type || 'hour';\n const distance = hourDistance.value[1] - hourDistance.value[0];\n const r = radius.value - (hour24.value && type == 'hour' ? (is24 ? 0 : distance) : 0);\n const angular = ((parseInt(value, 10) / (type == 'hour' ? 12 : 60)) * 360 * Math.PI) / 180;\n const x = (r - 20) * Math.sin(angular);\n const y = -(r - 20) * Math.cos(angular);\n return {\n transform: `translate(${x}px,${y}px)`\n };\n };\n\n const clockStyle = computed((): CSSProperties => {\n return {\n width: width.value + 'px',\n height: height.value + 'px',\n marginLeft: -width.value / 2 + 'px',\n marginTop: -height.value / 2 + 'px'\n };\n });\n\n const handStyle = computed((): CSSProperties => {\n const val = parseInt(String(valueState.value), 10);\n const type = props.type || 'hour';\n const angular = (val / (type == 'hour' ? 12 : 60)) * 360;\n const style: CSSProperties = {\n transform: `rotate(${angular}deg)`\n };\n if (hour24.value && type == 'hour') {\n if (val == 0) {\n style.top = hourDistance.value[0] + 'px';\n } else if (val <= 12) {\n style.top = hourDistance.value[1] + 'px';\n }\n }\n return style;\n });\n\n const onItemClick = (value: string, event: Event): void => {\n event.stopPropagation();\n event.preventDefault();\n const numValue = parseInt(value, 10);\n valueState.value = numValue;\n emit('select', numValue);\n };\n\n return () => {\n const type = props.type || 'hour';\n return (\n <div ref={elRef} class=\"clock-wrap f-full f-column f-content-center\">\n <div class=\"clock\" style={clockStyle.value}>\n <div class=\"center\"></div>\n <div class=\"hand\" style={handStyle.value}>\n <div className=\"drag\"></div>\n </div>\n {data.value.map(value => (\n <div key={value} class={itemClasses(value)} style={itemStyle(value)} onClick={(event: Event) => onItemClick(value, event)}>\n {value}\n </div>\n ))}\n {hour24.value &&\n type == 'hour' &&\n data.value.map(value => {\n const hour24Value = getHour24(value);\n return (\n <div\n key={'24-' + value}\n class={itemClasses(String(hour24Value))}\n style={itemStyle(String(hour24Value), true)}\n onClick={(event: Event) => onItemClick(String(hour24Value), event)}\n >\n {hour24Value}\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, watch, onMounted, nextTick, getCurrentInstance } from 'vue';\nimport TimeClock from './TimeClock';\nimport type { TimePanelProps } from './types';\n\nexport default defineComponent({\n name: 'TimePanel',\n props: {\n value: String as PropType<TimePanelProps['value']>,\n ampm: {\n type: Array as PropType<TimePanelProps['ampm']>,\n default: () => ['am', 'pm']\n }\n },\n setup(props: TimePanelProps, { emit }) {\n const inst = getCurrentInstance();\n const selectingType = ref<'hour' | 'minute'>('hour');\n const selectingAmpm = ref<string>('am');\n const hour = ref<number>(0);\n const minute = ref<number>(0);\n\n const setValue = (value: string | null): void => {\n if (value) {\n const parts = value.split(' ');\n const hm = parts[0].split(':');\n hour.value = parseInt(hm[0] || '0', 10);\n minute.value = parseInt(hm[1] || '0', 10);\n if (parts[1]) {\n selectingAmpm.value = parts[1];\n }\n }\n };\n\n const getHourStr = (): string => {\n const h = hour.value;\n return h < 10 ? '0' + h : String(h);\n };\n\n const getMinuteStr = (): string => {\n const m = minute.value;\n return m < 10 ? '0' + m : String(m);\n };\n\n const getValue = (): string => {\n let val = getHourStr() + ':' + getMinuteStr();\n const parent = inst?.parent?.proxy as any;\n const hour24 = parent?.hour24 || false;\n if (!hour24) {\n val += ' ' + selectingAmpm.value;\n }\n return val;\n };\n\n const onAmpmClick = (ampm: string): void => {\n selectingAmpm.value = ampm;\n emit('change', getValue());\n };\n\n const onClockSelect = (value: number): void => {\n if (selectingType.value === 'hour') {\n hour.value = value;\n nextTick(() => {\n selectingType.value = 'minute';\n });\n } else {\n minute.value = value;\n }\n emit('change', getValue());\n };\n\n watch(\n () => props.value,\n newValue => {\n setValue(newValue || null);\n }\n );\n\n onMounted(() => {\n const ampmValue = props.ampm || ['am', 'pm'];\n selectingAmpm.value = ampmValue[0];\n setValue(props.value || null);\n });\n\n return () => {\n const parent = inst?.parent?.proxy as any;\n const hour24 = parent?.hour24 || false;\n const ampmValue = props.ampm || ['am', 'pm'];\n return (\n <div class=\"timepicker-panel f-column f-full\">\n <div class=\"panel-header f-noshrink f-row f-content-center\">\n <div class={['title', { 'title-selected': selectingType.value == 'hour' }]} onClick={() => (selectingType.value = 'hour')}>\n {getHourStr()}\n </div>\n <div class=\"sep\">:</div>\n <div class={['title', { 'title-selected': selectingType.value == 'minute' }]} onClick={() => (selectingType.value = 'minute')}>\n {getMinuteStr()}\n </div>\n {!hour24 && (\n <div class=\"ampm f-column\">\n <div class={['title', { 'title-selected': selectingAmpm.value == ampmValue[0] }]} onClick={() => onAmpmClick(ampmValue[0])}>\n {ampmValue[0]}\n </div>\n <div class={['title', { 'title-selected': selectingAmpm.value == ampmValue[1] }]} onClick={() => onAmpmClick(ampmValue[1])}>\n {ampmValue[1]}\n </div>\n </div>\n )}\n </div>\n <TimeClock value={selectingType.value == 'hour' ? hour.value : minute.value} type={selectingType.value} onSelect={onClockSelect} />\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, onMounted, PropType, ref } from \"vue\";\nimport TimePanel from \"./TimePanel\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useComboBase } from \"../base/useComboBase\";\nimport type { TimePickerProps } from \"./types\";\n\nexport default defineComponent({\n name: \"TimePicker\",\n components: {\n TimePanel\n },\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n placeholder: String as PropType<any>,\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: 'combo-arrow'\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n panelAlign: {\n type: String as PropType<any>,\n default: 'left'\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: ','\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n value: String as PropType<TimePickerProps['value']>,\n modelValue: String as PropType<TimePickerProps['modelValue']>,\n ampm: {\n type: Array as PropType<TimePickerProps['ampm']>,\n default: () => ['am', 'pm']\n },\n hour24: {\n type: Boolean as PropType<TimePickerProps['hour24']>,\n default: () => false\n },\n hourDistance: {\n type: Array as PropType<TimePickerProps['hourDistance']>,\n default: () => [20, 50]\n },\n closeText: {\n type: String as PropType<TimePickerProps['closeText']>,\n default: () => (window as any).Locale?.t('DateBox.closeText', 'Close') || 'Close'\n },\n okText: {\n type: String as PropType<TimePickerProps['okText']>,\n default: () => (window as any).Locale?.t('DateBox.okText', 'Ok') || 'Ok'\n },\n editable: {\n type: Boolean as PropType<TimePickerProps['editable']>,\n default: false\n }\n },\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur'],\n setup(props: any, { emit, slots, expose }) {\n const selectingValue = ref<string | null>(null);\n\n const fb0 = useFieldBase(props);\n const cb = useComboBase(props, { emit, slots }, fb0);\n\n function setValue(value: string | null | undefined): void {\n selectingValue.value = value || null;\n cb.input.textState.value = value || '';\n cb.input.setValue(value || null);\n }\n\n function onOk(): void {\n setValue(selectingValue.value);\n cb.closePanel();\n }\n\n function onTimeChange(value: string): void {\n selectingValue.value = value;\n }\n\n function renderContent() {\n return (\n <>\n <TimePanel value={cb.input.valueState.value as string} ampm={props.ampm} onChange={onTimeChange}></TimePanel>\n <div class=\"datebox-button f-row\">\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={onOk}>\n {props.okText}\n </a>\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={cb.closePanel}>\n {props.closeText}\n </a>\n </div>\n </>\n );\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n onMounted(() => {\n const v = props.value !== undefined ? props.value : props.modelValue;\n setValue(v || null);\n });\n\n expose({\n setValue,\n openPanel: cb.openPanel,\n closePanel: cb.closePanel,\n togglePanel: cb.togglePanel,\n onOk,\n hourDistance: props.hourDistance\n });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: cb.input.textState.value })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref } from 'vue';\nimport TimeSpinner from '../timespinner/TimeSpinner';\nimport type { DateTimeSpinnerProps } from './types';\n\nexport default defineComponent({\n name: 'DateTimeSpinner',\n props: {\n selections: {\n type: Array as PropType<DateTimeSpinnerProps['selections']>,\n default: () => [\n [0, 2],\n [3, 5],\n [6, 10],\n [11, 13],\n [14, 16],\n [17, 19]\n ]\n },\n format: {\n type: String as PropType<DateTimeSpinnerProps['format']>,\n default: 'MM/dd/yyyy HH:mm'\n }\n } satisfies Record<keyof DateTimeSpinnerProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur'],\n setup(props: DateTimeSpinnerProps, { emit, slots, expose, attrs }) {\n const tsRef = ref<any>(null);\n\n expose({\n setValue: (v: string) => tsRef.value?.setValue?.(v),\n doSpinUp: () => tsRef.value?.doSpinUp?.(),\n doSpinDown: () => tsRef.value?.doSpinDown?.()\n });\n\n return () => (\n <TimeSpinner\n ref={tsRef}\n {...(attrs as any)}\n {...(props as any)}\n onUpdate:modelValue={(v: string) => emit('update:modelValue', v)}\n onValueChange={(e: any) => emit('valueChange', e)}\n onFocus={() => emit('focus')}\n onBlur={() => emit('blur')}\n v-slots={slots}\n />\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, PropType, type CSSProperties } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { CollapsedPanelProps, LayoutInstance } from './types';\nimport { panelProps } from '../panel/panelProps';\nimport { usePanelBase } from '../panel/usePanelBase';\n\nexport default defineComponent({\n name: 'CollapsedPanel',\n props: {\n ...panelProps,\n region: String as PropType<CollapsedPanelProps['region']>\n },\n setup(props: any, { slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const pb = usePanelBase(props, slots);\n\n const layout = computed<LayoutInstance | null>(() => {\n return (proxy?.$parent as any) || null;\n });\n\n const visible = computed<boolean>(() => {\n const l = layout.value as any;\n if (!l?.getPanel) return false;\n const p = l.getPanel(props.region || '');\n if (!p) return false;\n const collapsedState = (p as any).collapsedState || false;\n const expander = (p as any).expander || false;\n return !!(collapsedState && expander);\n });\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const region = props.region || '';\n return ['panel f-column layout-expand', props.panelCls, {\n 'layout-expand-east': region == 'east',\n 'layout-expand-west': region == 'west',\n 'layout-expand-south': region == 'south',\n 'layout-expand-north': region == 'north'\n }].filter(Boolean) as any;\n });\n\n const panelStyles = computed<(CSSProperties | string | null | undefined)[]>(() => {\n const l = layout.value as any;\n if (!l?.getPanel) return [];\n const p = l.getPanel(props.region || '');\n if (!p) return [];\n const region = props.region || '';\n const paddingTop = l.paddingTop || 0;\n const paddingBottom = l.paddingBottom || 0;\n const collapsedSize = (p as any).collapsedSize || 32;\n return [props.panelStyle, {\n top: region === 'west' || region === 'east' ? paddingTop + 'px' : (region === 'north' ? 0 : null),\n bottom: region === 'west' || region === 'east' ? paddingBottom + 'px' : (region === 'south' ? 0 : null),\n left: region === 'west' || region === 'north' || region === 'south' ? 0 : null,\n right: region === 'east' ? 0 : null,\n width: region === 'west' || region === 'east' ? collapsedSize + 'px' : '100%',\n height: region === 'north' || region === 'south' ? collapsedSize + 'px' : null,\n position: 'absolute'\n }];\n });\n\n function expand(): void {\n const l = layout.value as any;\n const p = l?.getPanel?.(props.region || '');\n p?.expand?.();\n }\n\n function onPanelClick(e: Event): void {\n const target = e.target as HTMLElement;\n const ptool = domHelper.closest(target, '.panel-tool');\n if (!ptool) {\n e.preventDefault();\n e.stopPropagation();\n expand();\n }\n }\n\n expose({ expand });\n\n return () => {\n if (!visible.value) return null;\n return (\n <div onClick={onPanelClick} class={panelClasses.value} style={panelStyles.value as any}>\n {pb.renderHeader({\n style: props.headerStyle,\n onClickCollapsible: expand\n })}\n {pb.renderBody({ style: props.bodyStyle })}\n {pb.renderFooter({ style: props.footerStyle })}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, watch, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport CollapsedPanel from './CollapsedPanel';\nimport type { LayoutProps, LayoutPanelInstance } from './types';\n\nexport default defineComponent({\n name: 'Layout',\n props: {\n layoutCls: String as PropType<LayoutProps['layoutCls']>,\n layoutStyle: [Object, String] as PropType<LayoutProps['layoutStyle']>\n },\n setup(props: LayoutProps, { expose, emit, slots }) {\n // const inst = getCurrentInstance();\n const layoutRef = ref<HTMLElement | null>(null);\n const panels = ref<LayoutPanelInstance[]>([]);\n const paddings = ref<string | null>(null);\n const paddingLeft = ref<number>(0);\n const paddingRight = ref<number>(0);\n const paddingTop = ref<number>(0);\n const paddingBottom = ref<number>(0);\n\n const layoutClasses = computed(() => {\n return ['layout', props.layoutCls].filter(Boolean);\n });\n\n const layoutStyles = computed((): (CSSProperties | string | null | undefined)[] => {\n return [props.layoutStyle, { padding: paddings.value as string }];\n });\n\n const getPanel = (region: string): LayoutPanelInstance | null => {\n const pp = panels.value.filter((p: any) => p.region == region);\n return pp.length ? pp[0] : null;\n };\n\n const getPaddingValue = (region: string): number => {\n const panel = getPanel(region);\n if (!panel) {\n return 0;\n }\n let val = 0;\n const collapsedState = (panel as any).collapsedState || false;\n const expander = (panel as any).expander || false;\n const float = (panel as any).float || false;\n const split = (panel as any).split !== false;\n const border = (panel as any).border !== false;\n if (collapsedState) {\n if (expander) {\n const collapsedSize = (panel as any).collapsedSize || 32;\n val += collapsedSize - 1;\n }\n } else {\n if (float) {\n if (expander) {\n const collapsedSize = (panel as any).collapsedSize || 32;\n val += collapsedSize - 1;\n }\n } else {\n const el = (panel as any).$el as HTMLElement;\n if (el) {\n if (region == 'west' || region == 'east') {\n val = domHelper.outerWidth(el);\n } else {\n val = domHelper.outerHeight(el);\n }\n if (!split && border) {\n val -= 1;\n }\n }\n }\n }\n return val;\n };\n\n const updatePaddings = (): void => {\n paddingLeft.value = getPaddingValue('west');\n paddingRight.value = getPaddingValue('east');\n paddingTop.value = getPaddingValue('north');\n paddingBottom.value = getPaddingValue('south');\n paddings.value = [paddingTop.value, paddingRight.value, paddingBottom.value, paddingLeft.value].map(v => v + 'px').join(' ');\n emit('resize');\n };\n\n const addPanel = (panel: LayoutPanelInstance): void => {\n const pp = panels.value.slice();\n pp.push(panel);\n panels.value = pp;\n };\n\n const removePanel = (panel: LayoutPanelInstance): void => {\n const pp = panels.value.slice();\n const index = pp.indexOf(panel);\n if (index >= 0) {\n pp.splice(index, 1);\n panels.value = pp;\n }\n };\n\n const onClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const cp = domHelper.closest(target, '.layout-panel');\n panels.value\n .filter((p: any) => p.$el != cp)\n .forEach((p: any) => {\n if (p.isExpanding) {\n return;\n }\n const collapsedState = (p as any).collapsedState || false;\n if (p.float && !collapsedState) {\n if (p.collapse) {\n p.collapse();\n }\n }\n });\n };\n\n const collapseTitle = (region: string): string | null => {\n if (region == 'west' || region == 'east') {\n return ' ';\n }\n const panel = getPanel(region);\n return panel ? (panel as any).title || null : null;\n };\n\n const collapseIconCls = (region: string): string => {\n const iconMap: Record<string, string> = {\n east: 'left',\n west: 'right',\n north: 'down',\n south: 'up'\n };\n return 'layout-button-' + (iconMap[region] || '');\n };\n\n const collapsedSize = (region: string): number | null => {\n const panel = getPanel(region);\n return panel ? (panel as any).collapsedSize || null : null;\n };\n\n watch(panels, () => {\n updatePaddings();\n nextTick(() => updatePaddings());\n });\n\n onMounted(() => {\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on('tabSelect', (tab: any) => {\n const el = layoutRef.value;\n if (el && tab && tab.$el && domHelper.isChild(el, tab.$el)) {\n updatePaddings();\n }\n });\n eventHub.$on('panelSelect', (panel: any) => {\n const el = layoutRef.value;\n if (el && panel && panel.$el && domHelper.isChild(el, panel.$el)) {\n updatePaddings();\n }\n });\n }\n });\n\n onBeforeUnmount(() => {\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$off('tabSelect');\n eventHub.$off('panelSelect');\n }\n });\n expose({\n addPanel,\n removePanel,\n getPanel,\n getPaddingValue,\n updatePaddings,\n collapseTitle,\n collapseIconCls,\n collapsedSize\n });\n\n return () => (\n <div ref={layoutRef} class={layoutClasses.value} style={layoutStyles.value} onClick={onClick}>\n {slots.default?.()}\n {['west', 'east', 'north', 'south'].map(region => (\n <CollapsedPanel\n bodyCls=\"f-column f-vcenter\"\n key={region}\n region={region as any}\n title={collapseTitle(region)}\n collapsible={true}\n collapseIconCls={collapseIconCls(region)}\n >\n {(region == 'west' || region == 'east') && (\n <div class=\"f-vtitle f-full\">{getPanel(region) ? (getPanel(region) as any).title || null : null}</div>\n )}\n </CollapsedPanel>\n ))}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch } from \"vue\";\nimport domHelper from \"../base/DomHelper\";\nimport Resizable from \"../resizable/Resizable\";\nimport { panelProps } from \"../panel/panelProps\";\nimport { usePanelBase } from \"../panel/usePanelBase\";\nimport type { LayoutPanelProps, LayoutInstance } from \"./types\";\n\nexport default defineComponent({\n name: \"LayoutPanel\",\n directives: {\n Resizable\n },\n props: {\n ...panelProps,\n title: String as PropType<LayoutPanelProps['title']>,\n region: {\n type: String as PropType<LayoutPanelProps['region']>,\n default: 'center'\n },\n float: {\n type: Boolean as PropType<LayoutPanelProps['float']>,\n default: false\n },\n split: {\n type: Boolean as PropType<LayoutPanelProps['split']>,\n default: false\n },\n edge: {\n type: Number as PropType<LayoutPanelProps['edge']>,\n default: 5\n },\n animate: {\n type: Boolean as PropType<LayoutPanelProps['animate']>,\n default: true\n },\n collapsible: {\n type: Boolean as PropType<LayoutPanelProps['collapsible']>,\n default: false\n },\n collapsedSize: {\n type: Number as PropType<LayoutPanelProps['collapsedSize']>,\n default: 32\n },\n expander: {\n type: Boolean as PropType<LayoutPanelProps['expander']>,\n default: false\n },\n expandIconCls: String as PropType<LayoutPanelProps['expandIconCls']>,\n collapseIconCls: String as PropType<LayoutPanelProps['collapseIconCls']>,\n collapsed: {\n type: Boolean as PropType<LayoutPanelProps['collapsed']>,\n default: false\n }\n },\n emits: [\"resizeStop\", \"expand\", \"collapse\"],\n setup(props: LayoutPanelProps, { slots, emit, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const pb = usePanelBase(props, slots);\n pb.collapseToShrinkBody.value = false;\n\n const rootRef = ref<HTMLElement | null>(null);\n const isExpanding = ref(false);\n const resizeOpts = ref<any | null>(null);\n\n const layout = computed<LayoutInstance | null>(() => (proxy?.$parent as any) || null);\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n const region = props.region || \"center\";\n return [\n \"panel f-column layout-panel\",\n props.panelCls,\n {\n \"layout-collapsed\": pb.collapsedState.value,\n \"layout-animate\": props.animate,\n \"layout-panel-east\": region == \"east\",\n \"layout-panel-west\": region == \"west\",\n \"layout-panel-south\": region == \"south\",\n \"layout-panel-north\": region == \"north\",\n \"layout-panel-center\": region == \"center\",\n \"layout-split-east\": props.split && region == \"east\",\n \"layout-split-west\": props.split && region == \"west\",\n \"layout-split-south\": props.split && region == \"south\",\n \"layout-split-north\": props.split && region == \"north\",\n \"layout-split-center\": props.split && region == \"center\"\n }\n ].filter(Boolean) as any;\n });\n\n const top = computed<number | null>(() => {\n const region = props.region || \"center\";\n if (region == \"west\" || region == \"east\") return (layout.value as any)?.paddingTop ?? null;\n return null;\n });\n\n const bottom = computed<number | null>(() => {\n const region = props.region || \"center\";\n if (region == \"west\" || region == \"east\") return (layout.value as any)?.paddingBottom ?? null;\n return null;\n });\n\n const panelStyles = computed(() => {\n return [\n props.panelStyle,\n {\n top: top.value != null ? top.value + \"px\" : null,\n bottom: bottom.value != null ? bottom.value + \"px\" : null,\n borderWidth: props.split ? props.edge + \"px\" : null\n }\n ];\n });\n\n const collapsibleClasses = computed<string>(() => {\n const icons: Record<string, string> = { west: \"left\", east: \"right\", north: \"up\", south: \"down\" };\n const region = props.region || \"center\";\n if (pb.collapsedState.value) {\n return props.expandIconCls ? props.expandIconCls : \"layout-button-\" + (icons[region] || \"\");\n }\n return props.collapseIconCls ? props.collapseIconCls : \"layout-button-\" + (icons[region] || \"\");\n });\n\n function setResizeOpts(): void {\n const handles: Record<string, string> = { north: \"s\", south: \"n\", east: \"w\", west: \"e\" };\n const handler = () => {\n const el = rootRef.value;\n const region = props.region || \"center\";\n if (el) {\n if (region == \"west\" || region == \"east\") {\n el.style.left = \"\";\n } else {\n el.style.top = \"\";\n }\n }\n (proxy?.$parent as any)?.updatePaddings?.();\n };\n resizeOpts.value = {\n edge: props.edge,\n handles: handles[props.region || \"\"] || \"\",\n disabled: !props.split,\n resizing: handler,\n resizeStop: (state: any) => {\n emit(\"resizeStop\", state);\n handler();\n }\n };\n }\n\n function onSlideEnd(): void {\n (layout.value as any)?.updatePaddings?.();\n if (pb.collapsedState.value) {\n emit(\"collapse\");\n } else {\n emit(\"expand\");\n }\n }\n\n function expand(): void {\n pb.collapsedState.value = false;\n isExpanding.value = true;\n nextTick(() => (isExpanding.value = false));\n if (!props.animate) {\n (layout.value as any)?.updatePaddings?.();\n emit(\"expand\");\n }\n }\n\n function collapse(): void {\n pb.collapsedState.value = true;\n if (!props.animate) {\n (layout.value as any)?.updatePaddings?.();\n emit(\"collapse\");\n }\n }\n\n function clickCollapsibleTool(): void {\n collapse();\n (layout.value as any)?.updatePaddings?.();\n }\n\n watch(\n () => props.collapsed,\n v => {\n v ? collapse() : expand();\n }\n );\n\n onMounted(() => {\n setResizeOpts();\n (proxy?.$parent as any)?.addPanel?.(proxy);\n if (rootRef.value) {\n domHelper.bind(rootRef.value, \"transitionend\", onSlideEnd);\n }\n });\n\n onBeforeUnmount(() => {\n (proxy?.$parent as any)?.removePanel?.(proxy);\n if (rootRef.value) {\n domHelper.unbind(rootRef.value);\n }\n });\n\n expose({ setResizeOpts, expand, collapse, clickCollapsibleTool });\n\n return () => {\n if (pb.closedState.value) return null;\n return (\n <div\n ref={rootRef}\n v-Resizable={resizeOpts.value}\n class={panelClasses.value}\n style={panelStyles.value as any}\n >\n {pb.renderHeader({\n style: props.headerStyle,\n collapsibleClass: collapsibleClasses.value,\n onClickCollapsible: clickCollapsibleTool\n })}\n {pb.renderBody({ style: props.bodyStyle })}\n {pb.renderFooter({ style: props.footerStyle })}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, onMounted, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { MenuProps, MenuItemInstance } from './types';\n\n(window as any).MenuZIndex = (window as any).MenuZIndex || 110000;\n\nexport default defineComponent({\n name: 'Menu',\n props: {\n menuCls: String as PropType<MenuProps['menuCls']>,\n menuStyle: [Object, String] as PropType<MenuProps['menuStyle']>,\n menuWidth: [Number, String] as PropType<MenuProps['menuWidth']>,\n inline: {\n type: Boolean as PropType<MenuProps['inline']>,\n default: false\n },\n noline: {\n type: Boolean as PropType<MenuProps['noline']>,\n default: false\n },\n duration: {\n type: Number as PropType<MenuProps['duration']>,\n default: 100\n }\n },\n setup(props: MenuProps, { expose, emit, slots }) {\n const inst = getCurrentInstance();\n const containerRef = ref<HTMLElement | null>(null);\n const subItems = ref<MenuItemInstance[]>([]);\n const left = ref<number>(0);\n const top = ref<number>(0);\n const zIndex = ref<number>((window as any).MenuZIndex++);\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const closed = ref<boolean>(true);\n const isDisplaying = ref<boolean>(false);\n\n const menuWidthState = computed(() => {\n return domHelper.toStyleValue(props.menuWidth) as string;\n });\n\n const containerClasses = computed(() => {\n return [\n 'menu-container f-inline-row',\n {\n 'menu-noline': props.noline || false\n }\n ];\n });\n\n const containerStyle = computed((): CSSProperties => {\n return {\n width: menuWidthState.value,\n minWidth: menuWidthState.value,\n left: left.value + 'px',\n top: top.value + 'px',\n zIndex: zIndex.value,\n display: props.inline ? undefined : closed.value ? 'none' : 'block'\n };\n });\n\n const menubutton = computed(() => {\n let parent = inst?.parent;\n while (parent) {\n const name = (parent.type as any)?.name || (parent.type as any)?.__name;\n if (name == 'MenuButton' || name == 'SplitButton') {\n return parent.proxy as any;\n }\n parent = parent.parent;\n }\n return null;\n });\n\n const addItem = (item: MenuItemInstance): void => {\n subItems.value.push(item);\n };\n\n const removeItem = (item: MenuItemInstance): void => {\n const index = subItems.value.indexOf(item);\n if (index >= 0) {\n subItems.value.splice(index, 1);\n }\n };\n\n const afterItemClick = (): void => {\n // 可以被子类重写\n };\n\n const onMouseOver = (): void => {\n closed.value = false;\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n };\n\n const onMouseOut = (): void => {\n delayHide();\n };\n\n const onDocumentClick = (event: Event): void => {\n if (!closed.value) {\n const target = event.target as HTMLElement;\n if (containerRef.value && domHelper.isChild(target, containerRef.value)) {\n return;\n }\n if (isDisplaying.value) {\n return;\n }\n hide();\n }\n };\n\n const findItem = (value: number | string): MenuItemInstance | null => {\n const finder = (items: MenuItemInstance[], field: string = 'value'): MenuItemInstance | null => {\n for (const item of items) {\n const itemValue = (item as any)[field];\n if (itemValue == value) {\n return item;\n } else if ((item as any).subMenu) {\n const subMenu = (item as any).subMenu as any;\n if (subMenu && subMenu.subItems) {\n const found = finder(subMenu.subItems, field);\n if (found) {\n return found;\n }\n }\n }\n }\n return null;\n };\n let item = finder(subItems.value, 'value');\n if (!item) {\n item = finder(subItems.value, 'text');\n }\n return item;\n };\n\n const unhighlight = (): void => {\n subItems.value.forEach(item => {\n if (item.unhighlight) {\n item.unhighlight();\n }\n });\n };\n\n const show = (leftValue?: number, topValue?: number): void => {\n closed.value = false;\n if (leftValue !== undefined) {\n left.value = leftValue;\n }\n if (topValue !== undefined) {\n top.value = topValue;\n }\n zIndex.value = (window as any).MenuZIndex++;\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n isDisplaying.value = true;\n nextTick(() => (isDisplaying.value = false));\n };\n\n const showAt = (target: HTMLElement, align: string = 'left'): void => {\n show(0, 0);\n alignTo(target, align);\n nextTick(() => {\n alignTo(target, align);\n });\n };\n\n // const showContextMenu = (leftValue: number, topValue: number): void => {\n // show(leftValue, topValue);\n // alignContextMenu();\n // nextTick(() => {\n // alignContextMenu();\n // });\n // };\n\n const hide = (): void => {\n closed.value = true;\n };\n\n const delayHide = (): void => {\n if (timer.value) {\n clearTimeout(timer.value);\n }\n timer.value = setTimeout(() => {\n closed.value = true;\n }, props.duration);\n };\n\n const alignTo = (target: HTMLElement, align: string = 'left'): void => {\n const view = domHelper.getViewport();\n const pos = domHelper.offset(target);\n const targetWidth = domHelper.outerWidth(target);\n const targetHeight = domHelper.outerHeight(target);\n if (!containerRef.value) {\n return;\n }\n const menuWidth = domHelper.outerWidth(containerRef.value);\n const menuHeight = domHelper.outerHeight(containerRef.value);\n let newLeft = align == 'left' ? pos.left : pos.left + targetWidth - menuWidth;\n let newTop = pos.top + targetHeight;\n if (newLeft + menuWidth > view.width + domHelper.getScrollLeft()) {\n newLeft = pos.left + targetWidth - menuWidth;\n } else if (newLeft < 0) {\n newLeft = pos.left;\n }\n if (newTop + menuHeight > view.height + domHelper.getScrollTop()) {\n newTop = pos.top - menuHeight - 1;\n }\n if (newTop < domHelper.getScrollTop()) {\n newTop = domHelper.getScrollTop() + 1;\n }\n left.value = newLeft;\n top.value = newTop;\n };\n\n // const alignContextMenu = (): void => {\n // const view = domHelper.getViewport();\n // if (!containerRef.value) {\n // return;\n // }\n // const width = domHelper.outerWidth(containerRef.value);\n // const height = domHelper.outerHeight(containerRef.value);\n // if (left.value + width > view.width + domHelper.getScrollLeft()) {\n // left.value -= width;\n // }\n // if (height > view.height + domHelper.getScrollTop()) {\n // top.value = domHelper.getScrollTop() + 1;\n // } else {\n // if (top.value + height > view.height + domHelper.getScrollTop()) {\n // top.value = view.height + domHelper.getScrollTop() - height - 1;\n // }\n // }\n // };\n\n const toggle = (): void => {\n if (closed.value) {\n show();\n } else {\n hide();\n }\n };\n\n const initProxy = (): void => {\n const proxy: any = inst?.proxy || {};\n proxy.subItems = subItems;\n proxy.addItem = addItem;\n proxy.removeItem = removeItem;\n proxy.findItem = findItem;\n proxy.show = show;\n proxy.hide = hide;\n proxy.toggle = toggle;\n proxy.afterItemClick = afterItemClick;\n proxy.unhighlight = unhighlight;\n proxy.showAt = showAt;\n proxy.delayHide = delayHide;\n proxy.emit = emit\n };\n initProxy();\n\n onMounted(() => {\n if (!props.inline) {\n if (containerRef.value) {\n document.body.appendChild(containerRef.value);\n }\n domHelper.bind(document.body, 'click', onDocumentClick);\n }\n const menubuttonValue = menubutton.value;\n if (menubuttonValue && menubuttonValue.setMenu) {\n menubuttonValue.setMenu(inst?.proxy);\n }\n if (inst?.parent) {\n const parent = inst.parent.proxy as any;\n parent.menu && (parent.menu.value = inst?.proxy);\n }\n });\n\n onBeforeUnmount(() => {\n if (!props.inline) {\n if (containerRef.value && inst?.vnode.el) {\n (inst.vnode.el as HTMLElement).appendChild(containerRef.value);\n }\n domHelper.unbind(document.body, 'click', onDocumentClick);\n }\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n });\n\n expose({\n subItems,\n addItem,\n removeItem,\n show,\n hide,\n toggle,\n afterItemClick,\n unhighlight\n });\n\n return () => (\n <span class=\"menu-inline\">\n <div ref={containerRef} class={containerClasses.value} style={containerStyle.value} onMouseover={onMouseOver} onMouseout={onMouseOut}>\n <div class=\"menu-shadow\"></div>\n <div class={['menu f-column f-full', props.menuCls].filter(Boolean)} style={props.menuStyle}>\n {slots.default?.()}\n </div>\n <div class=\"menu-line\"></div>\n </div>\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport type { SubMenuProps, MenuItemInstance, MenuInstance } from './types';\n\nexport default defineComponent({\n name: 'SubMenu',\n props: {\n menuCls: String as PropType<SubMenuProps['menuCls']>,\n menuStyle: [Object, String] as PropType<SubMenuProps['menuStyle']>,\n menuWidth: [Number, String] as PropType<SubMenuProps['menuWidth']>\n },\n setup(props: SubMenuProps, { expose, slots }) {\n const inst = getCurrentInstance();\n const subMenuRef = ref<HTMLElement | null>(null);\n const subItems = ref<MenuItemInstance[]>([]);\n const left = ref<number>(0);\n const top = ref<number>(0);\n const zIndex = ref<number>((window as any).MenuZIndex++);\n\n const menu = computed<MenuInstance | null>(() => {\n const parent = inst?.parent?.proxy as any;\n return parent?.menu || null;\n });\n\n const menuWidthState = computed(() => {\n return domHelper.toStyleValue(props.menuWidth) as string;\n });\n\n const menuClasses = computed(() => {\n const parent = inst?.parent?.proxy as any;\n const isActived = parent?.isActived.value ?? false;\n return [\n 'menu-container',\n {\n 'f-hide': !isActived\n }\n ];\n });\n\n const menuStyles = computed((): CSSProperties => {\n return {\n width: menuWidthState.value,\n left: left.value + 'px',\n top: top.value + 'px',\n zIndex: zIndex.value\n };\n });\n\n const addItem = (item: MenuItemInstance): void => {\n subItems.value.push(item);\n };\n\n const removeItem = (item: MenuItemInstance): void => {\n const index = subItems.value.indexOf(item);\n if (index >= 0) {\n subItems.value.splice(index, 1);\n }\n };\n\n const unhighlight = (): void => {\n subItems.value.forEach(item => {\n if (item.unhighlight) {\n item.unhighlight();\n }\n });\n };\n\n const alignMenu = (): void => {\n zIndex.value = (window as any).MenuZIndex++;\n const view = domHelper.getViewport();\n const parent = inst?.parent?.proxy as any;\n const parentEl = parent?.$el as HTMLElement;\n if (!parentEl) {\n return;\n }\n const pos = domHelper.offset(parentEl);\n const el = subMenuRef.value;\n if (!el) {\n return;\n }\n const width = domHelper.outerWidth(el);\n const height = domHelper.outerHeight(el);\n const pwidth = domHelper.outerWidth(parentEl);\n let newLeft = pwidth - 1;\n if (newLeft + pos.left + width > view.width + domHelper.getScrollLeft()) {\n newLeft = -width - 1;\n }\n let newTop = -4;\n if (height > view.height + domHelper.getScrollTop()) {\n newTop = -pos.top + domHelper.getScrollTop();\n } else {\n if (newTop + pos.top + height > view.height + domHelper.getScrollTop()) {\n newTop = view.height + domHelper.getScrollTop() - pos.top - height - 2;\n }\n }\n left.value = newLeft;\n top.value = newTop;\n };\n\n const initProxy = (): void => {\n const proxy: any = inst?.proxy || {};\n proxy.subItems = subItems.value;\n proxy.addItem = addItem;\n proxy.removeItem = removeItem;\n proxy.unhighlight = unhighlight;\n proxy.alignMenu = alignMenu;\n proxy.menu = menu.value;\n };\n initProxy();\n\n onMounted(() => {\n const parent = inst?.parent?.proxy as any;\n if (parent) {\n const subMenu = inst?.proxy;\n parent.updateSubMenu(subMenu);\n }\n });\n\n onBeforeUnmount(() => {\n const parent = inst?.parent?.proxy as any;\n if (parent) {\n parent.updateSubMenu(null);\n }\n });\n\n expose({\n addItem,\n removeItem,\n unhighlight,\n alignMenu\n });\n\n return () => {\n const menuValue = menu.value as any;\n const menuCls = props.menuCls || menuValue?.menuCls || '';\n const menuStyle = props.menuStyle || menuValue?.menuStyle || {};\n return (\n <div ref={subMenuRef} class={menuClasses.value} style={menuStyles.value}>\n <div class=\"menu-shadow\"></div>\n <div class=\"menu-line\"></div>\n <div class={['menu f-column f-full', menuCls].filter(Boolean)} style={menuStyle}>\n {slots.default?.()}\n </div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, onMounted, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue';\nimport type { MenuItemProps, MenuInstance, SubMenuInstance } from './types';\n\nexport default defineComponent({\n name: 'MenuItem',\n props: {\n value: [Number, String] as PropType<MenuItemProps['value']>,\n text: String as PropType<MenuItemProps['text']>,\n iconCls: String as PropType<MenuItemProps['iconCls']>,\n disabled: {\n type: Boolean as PropType<MenuItemProps['disabled']>,\n default: false\n }\n },\n setup(props: MenuItemProps, { expose, slots }) {\n const inst = getCurrentInstance();\n const isActived = ref<boolean>(false);\n const subMenu = ref<SubMenuInstance | null>(null);\n\n const menu = computed<MenuInstance | null>(() => {\n const parent = inst?.parent;\n if (parent) {\n const name = (parent.type as any)?.name || (parent.type as any)?.__name;\n if (name == 'Menu') {\n return parent.proxy as any;\n } else {\n return (parent.proxy as any)?.menu || null;\n }\n }\n return null;\n });\n\n const itemClasses = computed(() => {\n return [\n 'menu-item',\n {\n 'menu-active': isActived.value,\n 'menu-item-disabled': props.disabled || false,\n 'menu-active-disabled': (props.disabled || false) && isActived.value\n }\n ];\n });\n\n const highlight = (): void => {\n const parent = inst?.parent?.proxy as any;\n if (parent && parent.subItems.value) {\n parent.subItems.value.forEach((item: any) => {\n if (item.unhighlight) {\n item.unhighlight();\n }\n });\n }\n isActived.value = true;\n if (subMenu.value && (subMenu.value as any).alignMenu) {\n nextTick(() => {\n (subMenu.value as any).alignMenu();\n });\n }\n };\n\n const unhighlight = (): void => {\n if (subMenu.value && (subMenu.value as any).unhighlight) {\n (subMenu.value as any).unhighlight();\n }\n isActived.value = false;\n };\n\n const onClickItem = (event: Event): void => {\n event.stopPropagation();\n if (props.disabled) {\n return;\n }\n const menuValue = menu.value as any;\n if (menuValue) {\n menuValue.emit('itemClick', props.value || props.text);\n if (menuValue.afterItemClick) {\n menuValue.afterItemClick(props.value || props.text);\n }\n if (!subMenu.value) {\n if (menuValue.unhighlight) {\n menuValue.unhighlight();\n }\n if (menuValue.hide) {\n menuValue.hide();\n }\n }\n }\n };\n\n const updateSubMenu = (subMenuInstance: SubMenuInstance | null): void => {\n subMenu.value = subMenuInstance;\n };\n\n const initProxy = (): void => {\n const proxy: any = inst?.proxy || {};\n proxy.subMenu = subMenu;\n proxy.updateSubMenu = updateSubMenu;\n proxy.isActived = isActived;\n proxy.menu = menu.value;\n proxy.unhighlight = unhighlight;\n };\n\n initProxy();\n\n onMounted(() => {\n const parent = inst?.parent?.proxy as any;\n if (parent && parent.addItem) {\n parent.addItem(inst?.proxy);\n }\n });\n\n onBeforeUnmount(() => {\n const parent = inst?.parent?.proxy as any;\n if (parent && parent.removeItem) {\n parent.removeItem(inst?.proxy);\n }\n });\n\n expose({\n isActived,\n subMenu,\n highlight,\n unhighlight,\n onClickItem\n });\n\n return () => (\n <div class={itemClasses.value} onMouseenter={highlight} onMouseleave={unhighlight} onClick={onClickItem}>\n {!slots['item'] && <div class=\"menu-text\">{props.text}</div>}\n {slots['item'] && slots['item']()}\n {props.iconCls && <div class={['menu-icon', props.iconCls]}></div>}\n {subMenu.value && <div class=\"menu-rightarrow\"></div>}\n {slots.default && slots.default()}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'MenuSep',\n setup() {\n return () => <div class=\"menu-sep\"></div>;\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, ref } from 'vue';\nimport { linkButtonProps } from '../linkbutton/linkButtonProps';\nimport { useLinkButtonBase } from '../linkbutton/useLinkButtonBase';\nimport type { MenuButtonProps } from './types';\n\nexport default defineComponent({\n name: 'MenuButton',\n setup(props: MenuButtonProps, { slots, attrs }) {\n const menu = ref<any>(null);\n const timer = ref<NodeJS.Timeout | null>(null);\n const inst = getCurrentInstance();\n\n // function setMenu(m: any): void {\n // menu.value = m;\n // }\n\n // function showMenu(): void {\n // if ((props as any).disabled) return;\n // if (menu.value && menu.value.showAt) {\n // }\n // }\n\n // 先创建 lb,后面 showMenu 里要用 lb.btnRef\n const lb = useLinkButtonBase(\n props as any,\n { slots, attrs },\n {\n isEmpty: () => !(props as any).text && !slots.text, // 保留旧逻辑\n innerCls: base => {\n let cls = base();\n cls += ' m-btn m-btn-' + ((props as any).size || 'small');\n if (menu.value && !menu.value.closed) {\n cls += (props as any).plain ? ' m-btn-plain-active' : ' m-btn-active';\n }\n return cls;\n },\n onClick: (event, base) => {\n base(event);\n if ((props as any).disabled) return;\n if (menu.value && menu.value.showAt) {\n const el = lb.btnRef.value;\n if (el) menu.value.showAt(el, (props as any).menuAlign);\n }\n },\n renderInner: () => {\n // 保留旧实现(包括 slots.default 可能被调用两次的行为)\n let content: any = '';\n const isEmpty = !props.text && !slots.text;\n if (isEmpty) content = '';\n else if ((props as any).text) content = (props as any).text;\n else if (slots.default) content = slots.default();\n\n return (\n <>\n <span class={isEmpty ? 'l-btn-text l-btn-empty' : 'l-btn-text'}>{content}</span>\n <span class={lb.btnIconCls.value}></span>\n <span class=\"m-btn-downarrow\"></span>\n <span class=\"m-btn-line\"></span>\n {slots.default && slots.default()}\n </>\n );\n }\n }\n );\n\n function onMouseEnter(): void {\n if ((props as any).disabled) return;\n timer.value = setTimeout(() => {\n if ((props as any).disabled) return;\n const el = lb.btnRef.value;\n if (menu.value && menu.value.showAt && el) menu.value.showAt(el, (props as any).menuAlign);\n }, (props as any).duration);\n }\n\n function onMouseLeave(): void {\n if ((props as any).disabled) return;\n if (timer.value) clearTimeout(timer.value);\n if (menu.value && menu.value.delayHide) menu.value.delayHide();\n }\n\n function initProps(): void {\n const proxy = inst?.proxy as any;\n proxy.menu = menu;\n }\n initProps();\n\n return () => (\n <a\n ref={lb.btnRef}\n href={(props as any).href || '#'}\n class={lb.innerCls.value}\n style={Object.assign({}, attrs.style, props.btnStyle)}\n onClick={lb.onClick}\n onMouseenter={onMouseEnter}\n onMouseleave={onMouseLeave}\n onFocus={lb.focus}\n onBlur={lb.blur}\n >\n <span class={lb.btnLeftCls.value}>{lb.renderInner()}</span>\n {lb.renderOthers()}\n </a>\n );\n },\n props: {\n ...linkButtonProps,\n menuAlign: { type: String as PropType<MenuButtonProps['menuAlign']>, default: 'left' },\n duration: { type: Number as PropType<MenuButtonProps['duration']>, default: 100 }\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, ref } from 'vue';\nimport { linkButtonProps } from '../linkbutton/linkButtonProps';\nimport { useLinkButtonBase } from '../linkbutton/useLinkButtonBase';\nimport type { MenuButtonProps } from '../menubutton/types'; // SplitButton props 实际等同 MenuButton\nimport type { SplitButtonProps } from './types';\n\nexport default defineComponent({\n name: 'SplitButton',\n setup(props: SplitButtonProps, { slots, attrs }) {\n const menu = ref<any>(null);\n const timer = ref<NodeJS.Timeout | null>(null);\n const inst = getCurrentInstance();\n\n // function setMenu(m: any): void {\n // menu.value = m;\n // }\n\n function showMenu(): void {\n if ((props as any).disabled) return;\n const el = lb.btnRef.value;\n if (menu.value && menu.value.showAt && el) {\n menu.value.showAt(el, (props as any).menuAlign);\n }\n }\n\n function onMouseEnter(): void {\n if ((props as any).disabled) return;\n timer.value = setTimeout(() => {\n showMenu();\n }, (props as any).duration || 100);\n }\n\n function onMouseLeave(): void {\n if ((props as any).disabled) return;\n if (timer.value) clearTimeout(timer.value);\n if (menu.value && menu.value.delayHide) menu.value.delayHide();\n }\n\n const initProxy = () => {\n const proxy = inst?.proxy as any || {};\n proxy.menu = menu;\n };\n initProxy();\n\n const lb = useLinkButtonBase(\n props as any,\n { slots, attrs },\n {\n // SplitButton 的 class 逻辑:在 LinkButton 基础上叠加 s-btn,并跟随 menu 状态\n innerCls: base => {\n let cls = base();\n cls += ' m-btn m-btn-' + ((props as any).size || 'small');\n cls += ' s-btn s-btn-' + ((props as any).size || 'small');\n if (menu.value && !menu.value.closed) {\n cls += (props as any).plain ? ' s-btn-plain-active' : ' s-btn-active';\n }\n return cls;\n },\n // 主按钮点击:只复用 LinkButton 基础点击(不要像 MenuButton 那样点击就弹菜单)\n onClick: (event, base) => {\n base(event);\n },\n // 把“下拉箭头那一块”的事件绑定回来\n renderInner: () => {\n let content: any = '';\n if (lb.isEmpty.value) content = '';\n else if ((props as any).text) content = (props as any).text;\n else if (slots.default) content = slots.default();\n\n return (\n <>\n <span class={lb.isEmpty.value ? 'l-btn-text l-btn-empty' : 'l-btn-text'}>{content}</span>\n <span class={lb.btnIconCls.value}></span>\n <span class=\"m-btn-downarrow\"></span>\n <span class=\"m-btn-line\" onClick={showMenu} onMouseenter={onMouseEnter} onMouseleave={onMouseLeave} />\n {slots.default?.()}\n </>\n );\n }\n // SplitButton 自己不需要额外 renderOthers(菜单内容一般来自 slots.default)\n }\n );\n\n return () => (\n <a\n ref={lb.btnRef}\n href={(props as any).href || '#'}\n class={lb.innerCls.value}\n style={Object.assign({}, attrs.style, props.btnStyle)}\n onClick={lb.onClick}\n onFocus={lb.focus}\n onBlur={lb.blur}\n >\n <span class={lb.btnLeftCls.value}>{lb.renderInner()}</span>\n {lb.renderOthers()}\n </a>\n );\n },\n // SplitButton 沿用 MenuButton+LinkButton 的 props 结构:这里最简单就是复用 linkButtonProps + menuAlign/duration\n props: {\n ...linkButtonProps,\n menuAlign: { type: String as PropType<MenuButtonProps['menuAlign']>, default: 'left' },\n duration: { type: Number as PropType<MenuButtonProps['duration']>, default: 100 }\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n */\nimport { computed, defineComponent, nextTick, onBeforeUnmount, PropType, ref, watch } from 'vue';\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useInputBase } from '../base/useInputBase';\nimport type { PasswordBoxProps } from './types';\n\nexport default defineComponent({\n name: 'PasswordBox',\n props: {\n name: String as PropType<PasswordBoxProps['name']>,\n invalid: {\n type: Boolean as PropType<PasswordBoxProps['invalid']>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<PasswordBoxProps['validateOnCreate']>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<PasswordBoxProps['validateOnBlur']>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<PasswordBoxProps['validateOnChange']>,\n default: true\n },\n\n value: [String, Number, Array] as PropType<PasswordBoxProps['value']>,\n modelValue: [String, Number, Array] as PropType<PasswordBoxProps['modelValue']>,\n disabled: {\n type: Boolean as PropType<PasswordBoxProps['disabled']>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<PasswordBoxProps['readonly']>,\n default: false\n },\n editable: {\n type: Boolean as PropType<PasswordBoxProps['editable']>,\n default: true\n },\n iconCls: String as PropType<PasswordBoxProps['iconCls']>,\n iconAlign: {\n type: String as PropType<PasswordBoxProps['iconAlign']>,\n default: 'right'\n },\n placeholder: String as PropType<PasswordBoxProps['placeholder']>,\n multiline: {\n type: Boolean as PropType<PasswordBoxProps['multiline']>,\n default: false\n },\n tabindex: Number as PropType<PasswordBoxProps['tabindex']>,\n cls: String as PropType<PasswordBoxProps['cls']>,\n inputCls: String as PropType<PasswordBoxProps['inputCls']>,\n inputStyle: Object as PropType<PasswordBoxProps['inputStyle']>,\n inputId: String as PropType<PasswordBoxProps['inputId']>,\n textFormatter: Function as PropType<PasswordBoxProps['textFormatter']>,\n\n passwordChar: {\n type: String as PropType<PasswordBoxProps['passwordChar']>,\n default: '●'\n },\n checkInterval: {\n type: Number as PropType<PasswordBoxProps['checkInterval']>,\n default: 200\n },\n lastDelay: {\n type: Number as PropType<PasswordBoxProps['lastDelay']>,\n default: 500\n },\n showEye: {\n type: Boolean as PropType<PasswordBoxProps['showEye']>,\n default: true\n },\n eyeAlign: {\n type: String as PropType<PasswordBoxProps['eyeAlign']>,\n default: 'right'\n },\n revealed: {\n type: Boolean as PropType<PasswordBoxProps['revealed']>,\n default: false\n }\n } satisfies Record<keyof PasswordBoxProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur'],\n setup(props: PasswordBoxProps, { emit, slots, expose }) {\n const revealedState = ref<boolean>(!!props.revealed);\n const lastTimer = ref<ReturnType<typeof setTimeout> | null>(null);\n const cursorPos = ref<number>(-1);\n\n watch(\n () => props.revealed,\n v => {\n revealedState.value = !!v;\n }\n );\n\n const fb0 = useFieldBase(props);\n let ib!: ReturnType<typeof useInputBase>;\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: () => {\n fb0.afterFocus();\n processing();\n },\n afterBlur: () => {\n fb0.afterBlur();\n if (lastTimer.value) clearTimeout(lastTimer.value);\n convert(ib.textState.value, true);\n cursorPos.value = -1;\n },\n afterValueChange: fb0.afterValueChange\n };\n\n ib = useInputBase(props, { emit, slots }, fieldBase);\n\n function processing(): void {\n let originalText = ib.textState.value;\n const proc = () => {\n if (!ib.focused.value) return;\n\n if (originalText !== ib.textState.value) {\n originalText = ib.textState.value;\n if (lastTimer.value) clearTimeout(lastTimer.value);\n convert(ib.textState.value);\n lastTimer.value = setTimeout(() => {\n convert(ib.textState.value, true);\n }, props.lastDelay);\n }\n setTimeout(proc, props.checkInterval);\n };\n proc();\n }\n\n function convert(value: string, all = false): void {\n if (revealedState.value) {\n ib.setValue(value);\n return;\n }\n if (!value) {\n ib.setValue(value);\n return;\n }\n const pchar = props.passwordChar as string;\n const cc = typeof value === 'string' ? value.split('') : [];\n const vv = typeof ib.valueState.value === 'string' ? ib.valueState.value.split('') : [];\n\n for (let i = 0; i < cc.length; i++) {\n const c = cc[i];\n if (c !== vv[i]) {\n if (c !== pchar) {\n vv.splice(i, 0, c);\n }\n }\n }\n\n const pos = ib.getSelectionStart();\n if (cc.length < vv.length) {\n vv.splice(pos, vv.length - cc.length, '');\n }\n for (let i = 0; i < cc.length; i++) {\n if (all || i !== pos - 1) {\n cc[i] = pchar ?? '';\n }\n }\n ib.setValue(vv.join(''));\n ib.textState.value = cc.join('');\n cursorPos.value = pos;\n }\n\n const eyeClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox-addon f-column f-noshrink',\n {\n 'f-order0': props.eyeAlign === 'left',\n 'f-order6': props.eyeAlign === 'right'\n }\n ];\n });\n\n const eyeIconClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox-icon f-full',\n {\n 'passwordbox-open': revealedState.value,\n 'passwordbox-close': !revealedState.value\n }\n ];\n });\n\n const displayText = computed(() => {\n if (!ib.focused.value) {\n const v = ib.valueState.value;\n const valueStr = typeof v === 'string' ? v : (v ?? '').toString();\n ib.textState.value = revealedState.value ? valueStr : valueStr.replace(/./g, props.passwordChar as string);\n }\n if (ib.focused.value && cursorPos.value !== -1) {\n nextTick(() => {\n ib.setSelectionRange(cursorPos.value, cursorPos.value);\n cursorPos.value = -1;\n });\n }\n return ib.textState.value;\n });\n\n function renderOthers() {\n return (\n <>\n {props.showEye && (\n <span class={eyeClasses.value} onClick={() => (revealedState.value = !revealedState.value)}>\n <span class={eyeIconClasses.value}></span>\n </span>\n )}\n </>\n );\n }\n\n onBeforeUnmount(() => {\n if (lastTimer.value) clearTimeout(lastTimer.value);\n });\n\n expose({ setValue: ib.setValue, convert });\n\n return () =>\n ib.renderField(renderOthers, {\n value: displayText.value\n });\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch, onMounted } from 'vue';\nimport type { CalendarProps } from './types';\n\nexport default defineComponent({\n name: 'Calendar',\n props: {\n weeks: {\n type: Array as PropType<CalendarProps['weeks']>,\n default: () => (window as any).Locale?.t('Calendar.weeks', ['S', 'M', 'T', 'W', 'T', 'F', 'S']) || ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n },\n months: {\n type: Array as PropType<CalendarProps['months']>,\n default: () =>\n (window as any).Locale?.t('Calendar.months', ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']) || [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n border: {\n type: Boolean as PropType<CalendarProps['border']>,\n default: true\n },\n showWeek: {\n type: Boolean as PropType<CalendarProps['showWeek']>,\n default: false\n },\n weekNumberHeader: {\n type: String as PropType<CalendarProps['weekNumberHeader']>,\n default: ''\n },\n firstDay: {\n type: Number as PropType<CalendarProps['firstDay']>,\n default: 0\n },\n year: {\n type: Number as PropType<CalendarProps['year']>,\n default: new Date().getFullYear()\n },\n month: {\n type: Number as PropType<CalendarProps['month']>,\n default: new Date().getMonth() + 1\n },\n selection: Date as PropType<CalendarProps['selection']>,\n validator: {\n type: Function as PropType<CalendarProps['validator']>,\n default: () => {\n return true;\n }\n }\n },\n setup(props: CalendarProps, { expose, emit, slots }) {\n const yearState = ref<number>(props.year || new Date().getFullYear());\n const monthState = ref<number>(props.month || new Date().getMonth() + 1);\n const highlightDay = ref<[number, number, number] | null>(null);\n const highlightMonth = ref<string | null>(null);\n const headerData = ref<string[]>([]);\n const bodyData = ref<[number, number, number][][]>([]);\n const showMenu = ref<boolean>(false);\n const selectionState = ref<Date | null>(props.selection || null);\n\n const saIndex = computed(() => {\n const firstDay = props.firstDay || 0;\n let index = 6 - firstDay;\n if (index >= 7) {\n index -= 7;\n }\n return index;\n });\n\n const suIndex = computed(() => {\n let index = saIndex.value + 1;\n if (index >= 7) {\n index -= 7;\n }\n return index;\n });\n\n const toDate = (day: [number, number, number]): Date => {\n return new Date(day[0], day[1] - 1, day[2]);\n };\n\n const toArray = (date: Date): [number, number, number] => {\n return [date.getFullYear(), date.getMonth() + 1, date.getDate()];\n };\n\n const isDiff = (date1: Date | null, date2: Date | null): boolean => {\n if (date1 != null && date2 == null) {\n return true;\n }\n if (date1 == null && date2 != null) {\n return true;\n }\n if (date1 != null && date2 != null) {\n if (toArray(date1).join(',') != toArray(date2).join(',')) {\n return true;\n }\n }\n return false;\n };\n\n const isValid = (day: [number, number, number]): boolean => {\n const date = new Date(day[0], day[1] - 1, day[2]);\n const validator = props.validator || (() => true);\n return validator(date);\n };\n\n const isToday = (day: [number, number, number]): boolean => {\n const now = new Date();\n const y = now.getFullYear();\n const m = now.getMonth() + 1;\n const d = now.getDate();\n if (y == day[0] && m == day[1] && d == day[2]) {\n return true;\n }\n return false;\n };\n\n const isHighlighted = (day: [number, number, number]): boolean => {\n if (highlightDay.value) {\n if (highlightDay.value.join(',') == day.join(',')) {\n return true;\n }\n }\n return false;\n };\n\n const isSelected = (day: [number, number, number]): boolean => {\n if (selectionState.value) {\n const y = selectionState.value.getFullYear();\n const m = selectionState.value.getMonth() + 1;\n const d = selectionState.value.getDate();\n if (y == day[0] && m == day[1] && d == day[2]) {\n return true;\n }\n }\n return false;\n };\n\n const getWeekNumber = (date: Date): number => {\n const checkDate = new Date(date.getTime());\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n const time = checkDate.getTime();\n checkDate.setMonth(0);\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;\n };\n\n const calcWeekNumber = (week: [number, number, number][]): number => {\n const date = new Date(week[0][0], week[0][1] - 1, week[0][2]);\n return getWeekNumber(date);\n };\n\n const getHeaderData = (): string[] => {\n const weeks = props.weeks || [];\n const firstDay = props.firstDay || 0;\n const data1 = weeks.slice(firstDay, weeks.length);\n const data2 = weeks.slice(0, firstDay);\n return data1.concat(data2);\n };\n\n const getWeeks = (): [number, number, number][][] => {\n const dates: [number, number, number][] = [];\n const lastDay = new Date(yearState.value, monthState.value, 0).getDate();\n for (let i = 1; i <= lastDay; i++) dates.push([yearState.value, monthState.value, i]);\n\n // group date by week\n const weeks: [number, number, number][][] = [];\n let week: [number, number, number][] = [];\n let memoDay = -1;\n const firstDay = props.firstDay || 0;\n while (dates.length > 0) {\n const date = dates.shift();\n if (!date) break;\n week.push(date);\n const day = new Date(date[0], date[1] - 1, date[2]).getDay();\n if (memoDay == day) {\n const dayValue = 0;\n if (dayValue == (firstDay == 0 ? 7 : firstDay) - 1) {\n weeks.push(week);\n week = [];\n }\n } else if (day == (firstDay == 0 ? 7 : firstDay) - 1) {\n weeks.push(week);\n week = [];\n }\n memoDay = day;\n }\n if (week.length) {\n weeks.push(week);\n }\n\n let firstWeek = weeks[0];\n if (firstWeek && firstWeek.length < 7) {\n while (firstWeek.length < 7) {\n const firstDate = firstWeek[0];\n if (!firstDate) break;\n const date = new Date(firstDate[0], firstDate[1] - 1, firstDate[2] - 1);\n firstWeek.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]);\n }\n } else if (firstWeek && firstWeek.length >= 7) {\n const firstDate = firstWeek[0];\n if (firstDate) {\n const week: [number, number, number][] = [];\n for (let i = 1; i <= 7; i++) {\n const date = new Date(firstDate[0], firstDate[1] - 1, firstDate[2] - i);\n week.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]);\n }\n weeks.unshift(week);\n }\n }\n\n const lastWeek = weeks[weeks.length - 1];\n if (lastWeek) {\n while (lastWeek.length < 7) {\n const lastDate = lastWeek[lastWeek.length - 1];\n if (!lastDate) break;\n const date = new Date(lastDate[0], lastDate[1] - 1, lastDate[2] + 1);\n lastWeek.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]);\n }\n if (weeks.length < 6) {\n const lastDate = lastWeek[lastWeek.length - 1];\n if (lastDate) {\n const week: [number, number, number][] = [];\n for (let i = 1; i <= 7; i++) {\n const date = new Date(lastDate[0], lastDate[1] - 1, lastDate[2] + i);\n week.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]);\n }\n weeks.push(week);\n }\n }\n }\n\n return weeks;\n };\n\n const moveTo = (date: Date | null): void => {\n if (date) {\n yearState.value = date.getFullYear();\n monthState.value = date.getMonth() + 1;\n }\n };\n\n const highlightDate = (date: Date | null): void => {\n highlightDay.value = date ? toArray(date) : null;\n };\n\n const selectDate = (date: Date | null = null): void => {\n if (!date) {\n if (highlightDay.value) {\n date = toDate(highlightDay.value);\n } else {\n date = selectionState.value || null;\n }\n }\n if (isDiff(selectionState.value, date)) {\n selectionState.value = date;\n emit('selectionChange', selectionState.value);\n }\n };\n\n const navDate = (step: number): void => {\n let date = highlightDay.value ? toDate(highlightDay.value) : selectionState.value;\n if (date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate() + step);\n } else {\n date = new Date();\n }\n moveTo(date);\n highlightDate(date);\n };\n\n const nextYear = (): void => {\n yearState.value++;\n };\n\n const prevYear = (): void => {\n yearState.value--;\n };\n\n const nextMonth = (): void => {\n if (monthState.value == 12) {\n yearState.value++;\n monthState.value = 1;\n } else {\n monthState.value++;\n }\n };\n\n const prevMonth = (): void => {\n if (monthState.value == 1) {\n yearState.value--;\n monthState.value = 12;\n } else {\n monthState.value--;\n }\n };\n\n const onDayClick = (day: [number, number, number]): void => {\n if (isValid(day)) {\n yearState.value = day[0];\n monthState.value = day[1];\n selectDate(new Date(day[0], day[1] - 1, day[2]));\n }\n };\n\n const onMonthClick = (monthName: string, event: Event): void => {\n event.stopPropagation();\n const months = props.months || [];\n const index = months.indexOf(monthName);\n if (index >= 0) {\n monthState.value = index + 1;\n showMenu.value = false;\n highlightMonth.value = null;\n }\n };\n\n watch(\n () => props.year,\n () => {\n yearState.value = props.year || new Date().getFullYear();\n bodyData.value = getWeeks();\n }\n );\n\n watch(yearState, () => {\n bodyData.value = getWeeks();\n });\n\n watch(\n () => props.month,\n () => {\n monthState.value = props.month || new Date().getMonth() + 1;\n bodyData.value = getWeeks();\n }\n );\n\n watch(monthState, () => {\n bodyData.value = getWeeks();\n });\n\n watch(\n () => props.firstDay,\n () => {\n headerData.value = getHeaderData();\n bodyData.value = getWeeks();\n }\n );\n\n watch(\n () => props.selection,\n (value: Date | null | undefined) => {\n selectionState.value = value || null;\n if (selectionState.value) {\n moveTo(selectionState.value);\n }\n }\n );\n\n onMounted(() => {\n if (selectionState.value) {\n moveTo(selectionState.value);\n }\n headerData.value = getHeaderData();\n bodyData.value = getWeeks();\n });\n\n expose({\n nextYear,\n prevYear,\n nextMonth,\n prevMonth,\n moveTo,\n highlightDate,\n selectDate,\n navDate,\n getWeekNumber\n });\n\n const renderDays = () => {\n const showWeek = props.showWeek || false;\n const weekNumberHeader = props.weekNumberHeader || '';\n return (\n <table class=\"calendar-dtable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n <thead>\n <tr>\n {showWeek && <th>{weekNumberHeader}</th>}\n {headerData.value.map((week, index) => (\n <th key={index}>{week}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {bodyData.value.map((week, weekIndex) => (\n <tr key={weekIndex}>\n {showWeek && <td class=\"calendar-week\">{calcWeekNumber(week)}</td>}\n {week.map((day, dayIndex) => (\n <td\n key={dayIndex}\n class={[\n 'calendar-day',\n {\n 'calendar-other-month': day[0] != yearState.value || day[1] != monthState.value,\n 'calendar-saturday': dayIndex == saIndex.value,\n 'calendar-sunday': dayIndex == suIndex.value,\n 'calendar-today': isToday(day),\n 'calendar-selected': isSelected(day),\n 'calendar-disabled': !isValid(day),\n 'calendar-nav-hover': isHighlighted(day)\n }\n ]}\n onMouseenter={() => (highlightDay.value = isValid(day) ? day : null)}\n onMouseleave={() => (highlightDay.value = null)}\n onClick={() => onDayClick(day)}\n >\n {slots.default && slots.default({ date: toDate(day) })}\n {!slots.default && day[2]}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n };\n\n const renderMenu = () => {\n if (!showMenu.value) {\n return null;\n }\n const months = props.months || [];\n return (\n <div class=\"calendar-menu f-column\">\n <div class=\"calendar-menu-year-inner\">\n <span class=\"calendar-nav calendar-menu-prev\" onClick={prevYear}></span>\n <span>\n <input\n class=\"calendar-menu-year\"\n type=\"text\"\n value={yearState.value}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement;\n yearState.value = parseInt(target.value, 10) || yearState.value;\n }}\n />\n </span>\n <span class=\"calendar-nav calendar-menu-next\" onClick={nextYear}></span>\n </div>\n <div class=\"calendar-menu-month-inner f-full\">\n <div class=\"calendar-content\">\n <table class=\"calendar-mtable\">\n <tbody>\n {[0, 1, 2].map(rowIndex => (\n <tr key={rowIndex}>\n {[0, 1, 2, 3].map(colIndex => {\n const monthName = months[rowIndex * 4 + colIndex];\n return (\n <td\n key={colIndex}\n class={[\n 'calendar-nav calendar-menu-month',\n {\n 'calendar-nav-hover': highlightMonth.value == monthName,\n 'calendar-selected': months[monthState.value - 1] == monthName\n }\n ]}\n onMouseenter={() => (highlightMonth.value = monthName)}\n onMouseleave={() => (highlightMonth.value = null)}\n onClick={(event: Event) => onMonthClick(monthName, event)}\n >\n {monthName}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n };\n\n return () => {\n const border = props.border !== false;\n return (\n <div class={'calendar f-column' + (!border ? ' calendar-noborder' : '')}>\n <div class=\"calendar-header f-row f-noshrink\">\n <div class=\"calendar-title f-row f-full f-content-center\">\n <span class=\"calendar-text\" onClick={() => (showMenu.value = !showMenu.value)}>\n {(props.months || [])[monthState.value - 1]} {yearState.value}\n </span>\n </div>\n <div class=\"calendar-nav calendar-prevmonth\" onClick={prevMonth}></div>\n <div class=\"calendar-nav calendar-nextmonth\" onClick={nextMonth}></div>\n <div class=\"calendar-nav calendar-prevyear\" onClick={prevYear}></div>\n <div class=\"calendar-nav calendar-nextyear\" onClick={nextYear}></div>\n </div>\n <div class=\"calendar-body f-full\">\n <div class=\"calendar-content\">\n {renderDays()}\n {renderMenu()}\n </div>\n </div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, PropType, ref } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport dateHelper from '../base/DateHelper';\nimport Calendar from '../calendar/Calendar';\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useComboBase } from '../base/useComboBase';\nimport type { DateBoxProps } from './types';\n\nexport default defineComponent({\n name: 'DateBox',\n components: {\n Calendar\n },\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: 'combo-arrow'\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n panelAlign: {\n type: String as PropType<any>,\n default: 'left'\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: ','\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n value: Date as PropType<DateBoxProps['value']>,\n modelValue: Date as PropType<DateBoxProps['modelValue']>,\n format: {\n type: String as PropType<DateBoxProps['format']>,\n default: 'MM/dd/yyyy'\n },\n currentText: {\n type: String as PropType<DateBoxProps['currentText']>,\n default: () => (window as any).Locale?.t('DateBox.currentText', 'Today') || 'Today'\n },\n closeText: {\n type: String as PropType<DateBoxProps['closeText']>,\n default: () => (window as any).Locale?.t('DateBox.closeText', 'Close') || 'Close'\n },\n okText: {\n type: String as PropType<DateBoxProps['okText']>,\n default: () => (window as any).Locale?.t('DateBox.okText', 'Ok') || 'Ok'\n },\n showWeek: {\n type: Boolean as PropType<DateBoxProps['showWeek']>,\n default: false\n },\n weekNumberHeader: {\n type: String as PropType<DateBoxProps['weekNumberHeader']>,\n default: ''\n },\n firstDay: {\n type: Number as PropType<DateBoxProps['firstDay']>,\n default: 0\n },\n formatter: Function as PropType<DateBoxProps['formatter']>,\n parser: Function as PropType<DateBoxProps['parser']>,\n validator: {\n type: Function as PropType<DateBoxProps['validator']>,\n default: () => {\n return true;\n }\n },\n reversed: {\n type: Boolean as PropType<DateBoxProps['reversed']>,\n default: true\n }\n } satisfies Record<keyof DateBoxProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'selectionChange'],\n setup(props: any, { emit, slots, expose }) {\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const calendarRef = ref<any>(null);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: fb0.afterValueChange,\n afterBlur: () => {\n fb0.afterBlur();\n if (cb.panelClosed.value) return;\n const txt = (cb.input.textState.value || '').trim();\n if (!txt) {\n cb.input.setValue(null);\n } else if (!props.reversed) {\n const parser = props.parser || defaultParser;\n const val = parser(txt);\n if (val) {\n const y = val.getFullYear();\n if (!y) val.setFullYear(1900);\n cb.input.setValue(val);\n }\n }\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n nextTick(() => doFilter(cb.input.textState.value));\n }\n });\n\n function defaultFormatter(date: Date): string {\n return dateHelper.formatDate(date, props.format || 'MM/dd/yyyy');\n }\n\n function defaultParser(value: string): Date | null {\n return dateHelper.parseDate(value, props.format || 'MM/dd/yyyy');\n }\n\n function getParsedValueState() {\n const valueState = cb.input.valueState.value;\n let date = new Date();\n if (typeof valueState === 'string') date = new Date(valueState);\n if (typeof valueState === 'number') date = new Date(valueState);\n if (typeof valueState === 'object' && valueState instanceof Date) date = valueState;\n return date;\n }\n\n function getFormattedValue() {\n const formatter = props.formatter || defaultFormatter;\n const valueState = getParsedValueState();\n return formatter(valueState);\n }\n\n const displayText = computed(() => {\n if (!cb.input.focused.value && cb.panelClosed.value) {\n cb.input.textState.value = getFormattedValue();\n }\n return cb.input.textState.value;\n });\n\n function doFilter(value: string): void {\n const parser = props.parser || defaultParser;\n let date = parser(value);\n if (!date) date = getParsedValueState();\n const calendar = calendarRef.value;\n if (calendar && date) {\n calendar.moveTo(date);\n calendar.highlightDate(date);\n }\n }\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n if (cb.panelClosed.value) cb.openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => {\n doFilter(cb.input.textState.value);\n }, props.delay || 200);\n }\n }\n\n function onSelectionChange(event: Date): void {\n cb.input.setValue(event);\n cb.closePanel();\n emit('selectionChange', event);\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n if (cb.panelClosed.value && event.which === 40) {\n cb.openPanel();\n event.preventDefault();\n return;\n }\n if (cb.panelClosed.value) return;\n const calendar = calendarRef.value;\n if (!calendar) return;\n\n switch (event.which) {\n case 40:\n calendar.navDate(7);\n event.preventDefault();\n break;\n case 38:\n calendar.navDate(-7);\n event.preventDefault();\n break;\n case 37:\n calendar.navDate(-1);\n event.preventDefault();\n break;\n case 39:\n calendar.navDate(1);\n event.preventDefault();\n break;\n case 13:\n calendar.selectDate();\n cb.closePanel();\n cb.input.textState.value = getFormattedValue();\n event.preventDefault();\n break;\n }\n }\n\n function selectToday(): void {\n cb.input.setValue(new Date());\n cb.closePanel();\n }\n\n function renderContent() {\n return (\n <>\n <Calendar\n ref={calendarRef}\n class=\"f-full\"\n border={false}\n showWeek={props.showWeek}\n weekNumberHeader={props.weekNumberHeader}\n firstDay={props.firstDay}\n validator={props.validator}\n selection={cb.input.valueState.value as any}\n onSelectionChange={onSelectionChange}\n ></Calendar>\n <div class=\"datebox-button f-row\">\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={selectToday}>\n {props.currentText}\n </a>\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={cb.closePanel}>\n {props.closeText}\n </a>\n </div>\n </>\n );\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n onMounted(() => {\n const inputEl = cb.input.inputRef.value as HTMLInputElement | null;\n if (inputEl) domHelper.bind(inputEl, 'keydown', onKeyDown);\n });\n\n onBeforeUnmount(() => {\n const inputEl = cb.input.inputRef.value as HTMLInputElement | null;\n if (inputEl) domHelper.unbind(inputEl, 'keydown', onKeyDown);\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n });\n\n // openPanel 已通过 useComboBase overrides 重写(确保 togglePanel/箭头点击一致)\n const openPanel = cb.openPanel;\n\n expose({ setValue: cb.input.setValue, openPanel, closePanel: cb.closePanel, togglePanel: cb.togglePanel, alignPanel: cb.alignPanel });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: displayText.value, onInput })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch, type CSSProperties } from \"vue\";\nimport domHelper from \"../base/DomHelper\";\nimport Draggable from \"../draggable/Draggable\";\nimport Resizable from \"../resizable/Resizable\";\nimport { panelProps } from \"../panel/panelProps\";\nimport { usePanelBase } from \"../panel/usePanelBase\";\nimport type { DialogProps } from \"./types\";\n\n(window as any).DialogZIndex = (window as any).DialogZIndex || 9000;\n\nexport default defineComponent({\n name: \"Dialog\",\n directives: {\n Draggable,\n Resizable,\n },\n props: {\n ...panelProps,\n title: String as PropType<DialogProps['title']>,\n border: {\n type: Boolean as PropType<DialogProps['border']>,\n default: false,\n },\n borderType: {\n type: String as PropType<DialogProps['borderType']>,\n default: \"thick\", // thin,thick,none\n },\n closable: {\n type: Boolean as PropType<DialogProps['closable']>,\n default: true,\n },\n dialogCls: String as PropType<DialogProps['dialogCls']>,\n dialogStyle: [Object, String] as PropType<DialogProps['dialogStyle']>,\n modal: {\n type: Boolean as PropType<DialogProps['modal']>,\n default: false,\n },\n inline: {\n type: Boolean as PropType<DialogProps['inline']>,\n default: false,\n },\n draggable: {\n type: Boolean as PropType<DialogProps['draggable']>,\n default: false,\n },\n resizable: {\n type: Boolean as PropType<DialogProps['resizable']>,\n default: false,\n },\n draggableOptions: Object as PropType<DialogProps['draggableOptions']>,\n resizableOptions: Object as PropType<DialogProps['resizableOptions']>,\n },\n emits: [\"open\", \"close\"],\n setup(props: DialogProps, { slots, emit, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const pb = usePanelBase(props, slots);\n\n const panelRef = ref<HTMLElement | null>(null);\n const dragOpts = ref<Record<string, any> | null>(null);\n const resizeOpts = ref<Record<string, any> | null>(null);\n const maskEl = ref<HTMLElement | null>(null);\n const left = ref<number | null>(null);\n const top = ref<number | null>(null);\n const width = ref<number | null>(null);\n const height = ref<number | null>(null);\n\n const panelStyles = computed<(CSSProperties | string | null | undefined)[]>(() => {\n const dialogStyle = props.dialogStyle as CSSProperties | undefined;\n return [\n props.panelStyle,\n dialogStyle,\n {\n left: left.value ? left.value + \"px\" : dialogStyle ? (dialogStyle as any).left : null,\n top: left.value ? top.value + \"px\" : dialogStyle ? (dialogStyle as any).top : null,\n width: width.value ? width.value + \"px\" : dialogStyle ? (dialogStyle as any).width : null,\n height: height.value ? height.value + \"px\" : dialogStyle ? (dialogStyle as any).height : null\n }\n ];\n });\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"window window-shadow\";\n if (props.borderType == \"none\") {\n cls += \" window-thinborder window-noborder\";\n } else if (props.borderType == \"thin\") {\n cls += \" window-thinborder\";\n }\n if (props.inline) {\n cls += \" inline\";\n }\n return [\"panel f-column\", cls, props.panelCls, props.dialogCls].filter(Boolean) as any;\n });\n\n const headerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.headerClasses.value as any).concat(\"window-header\");\n });\n\n const bodyClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"window-body\";\n if (!pb.hasHeader.value) cls += \" window-body-noheader\";\n return ([] as any[]).concat(pb.bodyClasses.value as any).concat(cls);\n });\n\n const footerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.footerClasses.value as any).concat(\"window-footer\");\n });\n\n function setDragOpts(): void {\n const headerEl = pb.headerRef.value as HTMLElement | null;\n dragOpts.value = Object.assign(\n {\n edge: 5,\n disabled: !props.draggable,\n handle: headerEl\n },\n props.draggableOptions || {},\n {\n dragEnd: (state: any) => {\n left.value = state.left;\n top.value = state.top;\n (props.draggableOptions as any)?.dragEnd?.(state);\n }\n }\n );\n }\n\n function setResizeOpts(): void {\n resizeOpts.value = Object.assign(\n {\n edge: 5,\n disabled: !props.resizable\n },\n props.resizableOptions || {},\n {\n resizeStop: (state: any) => {\n width.value = state.width;\n height.value = state.height;\n (props.resizableOptions as any)?.resizeStop?.(state);\n }\n }\n );\n }\n\n function openMask(): void {\n if (props.modal && !maskEl.value) {\n maskEl.value = document.createElement(\"div\");\n domHelper.addClass(maskEl.value, \"window-mask\");\n if (!props.inline) {\n document.body.appendChild(maskEl.value);\n } else {\n domHelper.addClass(maskEl.value, \"inline\");\n if (proxy?.$el) proxy.$el.appendChild(maskEl.value);\n }\n }\n }\n\n function closeMask(): void {\n if (!maskEl.value) return;\n if (!props.inline) {\n document.body.removeChild(maskEl.value);\n } else {\n if (proxy?.$el) proxy.$el.removeChild(maskEl.value);\n }\n maskEl.value = null;\n }\n\n function moveToTop(): void {\n if (maskEl.value) {\n maskEl.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n if (panelRef.value) {\n panelRef.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n }\n\n function hcenter(): void {\n const el = panelRef.value;\n if (!el) return;\n const view = domHelper.getViewport();\n let vwidth = view.width;\n if (props.inline) {\n const parent = domHelper.closest(el, \".dialog-inline\");\n if (parent) vwidth = domHelper.outerWidth(parent);\n }\n const w = domHelper.outerWidth(el);\n left.value = (vwidth - w) / 2;\n }\n\n function vcenter(): void {\n const el = panelRef.value;\n if (!el) return;\n const view = domHelper.getViewport();\n let vheight = view.height;\n let scrollTop0 = domHelper.getScrollTop();\n if (props.inline) {\n const parent = domHelper.closest(el, \".dialog-inline\");\n if (parent) {\n vheight = domHelper.outerHeight(parent);\n scrollTop0 = 0;\n }\n }\n const h = domHelper.outerHeight(el);\n top.value = (vheight - h) / 2 + scrollTop0;\n }\n\n function center(): void {\n hcenter();\n vcenter();\n }\n\n function displaying(): void {\n moveToTop();\n const el = panelRef.value;\n if (!el) return;\n left.value = parseInt(el.style.left) || null;\n top.value = parseInt(el.style.top) || null;\n if (left.value == null) hcenter();\n if (top.value == null) vcenter();\n }\n\n function initDialog(): void {\n if (!pb.closedState.value) {\n const el = panelRef.value;\n if (el) {\n if (!props.inline) {\n document.body.appendChild(el);\n }\n openMask();\n displaying();\n }\n } else {\n closeMask();\n }\n }\n\n function open(): void {\n pb.closedState.value = false;\n }\n\n function close(): void {\n pb.closedState.value = true;\n }\n\n watch(\n () => props.draggable,\n () => setDragOpts()\n );\n watch(\n () => props.resizable,\n () => setResizeOpts()\n );\n watch(\n () => props.draggableOptions,\n () => setDragOpts()\n );\n watch(\n () => props.resizableOptions,\n () => setResizeOpts()\n );\n\n watch(\n () => pb.closedState.value,\n v => {\n nextTick(() => {\n initDialog();\n setDragOpts();\n setResizeOpts();\n });\n v ? emit(\"close\") : emit(\"open\");\n }\n );\n\n onMounted(() => {\n setDragOpts();\n setResizeOpts();\n initDialog();\n });\n\n onBeforeUnmount(() => {\n // 确保 mask 清理\n closeMask();\n });\n\n expose({\n setDragOpts,\n setResizeOpts,\n initDialog,\n displaying,\n moveToTop,\n hcenter,\n vcenter,\n center,\n open,\n close\n });\n\n return () => (\n <div class=\"dialog-inline\">\n {!pb.closedState.value && (\n <div\n ref={panelRef}\n v-Draggable={dragOpts.value}\n v-Resizable={resizeOpts.value}\n class={panelClasses.value}\n style={panelStyles.value as any}\n >\n {pb.renderHeader({ classes: headerClasses.value, style: props.headerStyle })}\n {pb.renderBody({ classes: bodyClasses.value, style: props.bodyStyle })}\n {pb.renderFooter({ classes: footerClasses.value, style: props.footerStyle })}\n </div>\n )}\n </div>\n );\n }\n});\n","import type { PropType } from 'vue';\nimport { panelProps } from '../panel/panelProps';\nimport type { DialogProps } from './types';\n\n/**\n * Dialog 的运行时 props 定义(用于“组合”替代 extends 时复用)\n * 注意:这里与 `Dialog.tsx` 的 props 保持一致。\n */\nexport const dialogProps = {\n ...panelProps,\n\n title: String as PropType<DialogProps['title']>,\n border: {\n type: Boolean as PropType<DialogProps['border']>,\n default: false\n },\n borderType: {\n type: String as PropType<DialogProps['borderType']>,\n default: 'thick' // thin,thick,none\n },\n closable: {\n type: Boolean as PropType<DialogProps['closable']>,\n default: true\n },\n dialogCls: String as PropType<DialogProps['dialogCls']>,\n dialogStyle: [Object, String] as PropType<DialogProps['dialogStyle']>,\n modal: {\n type: Boolean as PropType<DialogProps['modal']>,\n default: false\n },\n inline: {\n type: Boolean as PropType<DialogProps['inline']>,\n default: false\n },\n draggable: {\n type: Boolean as PropType<DialogProps['draggable']>,\n default: false\n },\n resizable: {\n type: Boolean as PropType<DialogProps['resizable']>,\n default: false\n },\n draggableOptions: Object as PropType<DialogProps['draggableOptions']>,\n resizableOptions: Object as PropType<DialogProps['resizableOptions']>\n} satisfies Record<string, any>;\n\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch, type CSSProperties } from \"vue\";\nimport Draggable from \"../draggable/Draggable\";\nimport Resizable from \"../resizable/Resizable\";\nimport domHelper from \"../base/DomHelper\";\nimport { dialogProps } from \"../dialog/dialogProps\";\nimport { usePanelBase } from \"../panel/usePanelBase\";\nimport type { DrawerProps } from \"./types\";\n\nexport default defineComponent({\n name: \"Drawer\",\n directives: {\n Draggable,\n Resizable,\n },\n props: {\n ...dialogProps,\n borderType: {\n type: String as PropType<DrawerProps['borderType']>,\n default: 'none' // thin,thick,none\n },\n collapsed: {\n type: Boolean as PropType<DrawerProps['collapsed']>,\n default: true\n },\n collapsible: {\n type: Boolean as PropType<DrawerProps['collapsible']>,\n default: false\n },\n closable: {\n type: Boolean as PropType<DrawerProps['closable']>,\n default: false\n },\n modal: {\n type: Boolean as PropType<DrawerProps['modal']>,\n default: true\n },\n drawerCls: String as PropType<DrawerProps['drawerCls']>,\n drawerStyle: [Object, String] as PropType<DrawerProps['drawerStyle']>,\n maskClosable: {\n type: Boolean as PropType<DrawerProps['maskClosable']>,\n default: true\n },\n animate: {\n type: Boolean as PropType<DrawerProps['animate']>,\n default: true\n },\n region: {\n type: String as PropType<DrawerProps['region']>,\n default: 'west'\n },\n expandIconCls: String as PropType<DrawerProps['expandIconCls']>,\n collapseIconCls: String as PropType<DrawerProps['collapseIconCls']>\n },\n emits: [\"open\", \"close\", \"expand\", \"collapse\", \"resizeStop\"],\n setup(props: DrawerProps, { slots, emit, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n // 复用 Panel 的 state/computed/render\n const pb = usePanelBase(props, slots);\n pb.collapseToShrinkBody.value = false;\n\n // Drawer 需要 Dialog 的层级管理\n (window as any).DialogZIndex = (window as any).DialogZIndex || 9000;\n\n const panelRef = ref<HTMLElement | null>(null);\n const dragOpts = ref<Record<string, any> | null>(null);\n const resizeOpts = ref<Record<string, any> | null>(null);\n const maskEl = ref<HTMLElement | null>(null);\n\n const left = ref<number | null>(null);\n const top = ref<number | null>(null);\n const width = ref<number | null>(null);\n const height = ref<number | null>(null);\n\n const isExpanding = ref(false);\n const isChanging = ref(false);\n\n const panelStyles = computed<(CSSProperties | string | null | undefined)[]>(() => {\n const drawerStyle = props.drawerStyle as CSSProperties | undefined;\n return [\n props.panelStyle,\n drawerStyle,\n {\n left: left.value ? left.value + \"px\" : drawerStyle ? (drawerStyle as any).left : null,\n top: left.value ? top.value + \"px\" : drawerStyle ? (drawerStyle as any).top : null,\n width: width.value ? width.value + \"px\" : drawerStyle ? (drawerStyle as any).width : null,\n height: height.value ? height.value + \"px\" : drawerStyle ? (drawerStyle as any).height : null,\n },\n ];\n });\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"drawer window window-shadow\";\n if (props.borderType == \"none\") {\n cls += \" window-thinborder window-noborder\";\n } else if (props.borderType == \"thin\") {\n cls += \" window-thinborder\";\n }\n if (props.inline) {\n cls += \" inline\";\n }\n const region = props.region || \"west\";\n return [\n \"panel f-column\",\n cls,\n props.panelCls,\n props.drawerCls,\n {\n \"layout-collapsed\": pb.collapsedState.value,\n \"layout-animate\": props.animate && !isChanging.value,\n \"layout-panel-east\": region === \"east\",\n \"layout-panel-west\": region === \"west\",\n \"layout-panel-south\": region === \"south\",\n \"layout-panel-north\": region === \"north\",\n },\n ].filter(Boolean) as any;\n });\n\n const headerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.headerClasses.value as any).concat(\"window-header\");\n });\n\n const bodyClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"window-body\";\n if (!pb.hasHeader.value) cls += \" window-body-noheader\";\n return ([] as any[]).concat(pb.bodyClasses.value as any).concat(cls);\n });\n\n const footerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.footerClasses.value as any).concat(\"window-footer\");\n });\n\n const collapsibleClasses = computed<string>(() => {\n const icons: Record<string, string> = { west: \"left\", east: \"right\", north: \"up\", south: \"down\" };\n const region = props.region || \"west\";\n if (pb.collapsedState.value) {\n return props.expandIconCls ? props.expandIconCls : \"layout-button-\" + (icons[region] || \"left\");\n }\n return props.collapseIconCls ? props.collapseIconCls : \"layout-button-\" + (icons[region] || \"left\");\n });\n\n function moveToTop(): void {\n if (maskEl.value) {\n maskEl.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n if (panelRef.value) {\n panelRef.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n }\n\n function setDragOpts(): void {\n const headerEl = pb.headerRef.value as HTMLElement | null;\n dragOpts.value = Object.assign(\n {\n edge: 5,\n disabled: !props.draggable,\n handle: headerEl,\n },\n props.draggableOptions || {},\n {\n dragEnd: (state: any) => {\n left.value = state.left;\n top.value = state.top;\n (props.draggableOptions as any)?.dragEnd?.(state);\n },\n }\n );\n }\n\n function setResizeOpts(): void {\n resizeOpts.value = Object.assign(\n {\n edge: 5,\n disabled: !props.resizable,\n },\n props.resizableOptions || {},\n {\n resizeStop: (state: any) => {\n width.value = state.width;\n height.value = state.height;\n (props.resizableOptions as any)?.resizeStop?.(state);\n emit(\"resizeStop\", state);\n },\n }\n );\n }\n\n function openMask(): void {\n if (props.modal && !maskEl.value) {\n maskEl.value = document.createElement(\"div\");\n domHelper.addClass(maskEl.value, \"window-mask\");\n if (!props.inline) {\n document.body.appendChild(maskEl.value);\n } else if (proxy?.$el) {\n domHelper.addClass(maskEl.value, \"inline\");\n proxy.$el.appendChild(maskEl.value);\n }\n }\n }\n\n function closeMask(): void {\n if (!maskEl.value) return;\n if (!props.inline) {\n document.body.removeChild(maskEl.value);\n } else if (proxy?.$el) {\n proxy.$el.removeChild(maskEl.value);\n }\n maskEl.value = null;\n }\n\n function onClickMask(): void {\n if (props.maskClosable) collapse();\n }\n\n function onSlideEnd(): void {\n pb.collapsedState.value ? emit(\"collapse\") : emit(\"expand\");\n }\n\n function displaying(): void {\n moveToTop();\n }\n\n function initDialog(): void {\n if (!pb.closedState.value) {\n const el = panelRef.value;\n if (el) {\n if (!props.inline) {\n document.body.appendChild(el);\n }\n displaying();\n }\n } else {\n closeMask();\n }\n }\n\n function expand(): void {\n pb.collapsedState.value = false;\n isExpanding.value = true;\n openMask();\n nextTick(() => (isExpanding.value = false));\n if (!props.animate) emit(\"expand\");\n if (maskEl.value) {\n domHelper.addClass(maskEl.value, \"drawer-mask\");\n domHelper.bind(maskEl.value, \"click\", onClickMask);\n }\n }\n\n function collapse(): void {\n if (maskEl.value) {\n domHelper.unbind(maskEl.value, \"click\");\n }\n pb.collapsedState.value = true;\n closeMask();\n if (!props.animate) emit(\"collapse\");\n }\n\n function clickCollapsibleTool(): void {\n collapse();\n }\n\n // 兼容旧 API:open/close(来自 Dialog)\n function open(): void {\n pb.closedState.value = false;\n }\n function close(): void {\n pb.closedState.value = true;\n }\n\n // 兼容旧 expose 列表里有 mousedown(历史遗留,提供空实现防止外部调用报错)\n function mousedown(): void {}\n\n watch(\n () => props.region,\n () => {\n isChanging.value = true;\n setTimeout(() => (isChanging.value = false), 0);\n }\n );\n\n watch(\n () => props.collapsed,\n v => {\n v ? collapse() : expand();\n }\n );\n\n watch(\n () => pb.closedState.value,\n v => {\n nextTick(() => {\n initDialog();\n setDragOpts();\n setResizeOpts();\n });\n v ? emit(\"close\") : emit(\"open\");\n }\n );\n\n watch(() => props.draggable, () => setDragOpts());\n watch(() => props.resizable, () => setResizeOpts());\n watch(() => props.draggableOptions, () => setDragOpts());\n watch(() => props.resizableOptions, () => setResizeOpts());\n\n onMounted(() => {\n setDragOpts();\n setResizeOpts();\n initDialog();\n if (panelRef.value) {\n domHelper.bind(panelRef.value, \"transitionend\", onSlideEnd);\n }\n });\n\n onBeforeUnmount(() => {\n if (panelRef.value) {\n domHelper.unbind(panelRef.value, \"transitionend\");\n }\n if (proxy?.$el && panelRef.value) {\n proxy.$el.appendChild(panelRef.value);\n }\n closeMask();\n close();\n });\n\n expose({\n initDialog,\n displaying,\n expand,\n collapse,\n clickCollapsibleTool,\n mousedown,\n open,\n close,\n });\n\n return () => (\n <div class=\"dialog-inline\">\n {!pb.closedState.value && (\n <div\n ref={panelRef}\n v-Draggable={dragOpts.value}\n v-Resizable={resizeOpts.value}\n class={panelClasses.value}\n style={panelStyles.value as any}\n >\n {pb.renderHeader({\n classes: headerClasses.value,\n style: props.headerStyle,\n collapsibleClass: collapsibleClasses.value,\n onClickCollapsible: clickCollapsibleTool,\n })}\n {pb.renderBody({ classes: bodyClasses.value, style: props.bodyStyle })}\n {pb.renderFooter({ classes: footerClasses.value, style: props.footerStyle })}\n </div>\n )}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, computed } from 'vue';\nimport { useExpose } from '../../utils/exposeMethods';\nimport type { ProgressBarProps } from './types';\n\nexport default defineComponent({\n name: 'ProgressBar',\n props: {\n value: {\n type: Number as PropType<ProgressBarProps['value']>,\n default: 0\n },\n showValue: {\n type: Boolean as PropType<ProgressBarProps['showValue']>,\n default: false\n },\n barCls: String as PropType<ProgressBarProps['barCls']>,\n barStyle: Object as PropType<ProgressBarProps['barStyle']>\n },\n setup(props: ProgressBarProps, { expose, slots }) {\n // ProgressBar主要是展示组件,没有需要暴露的方法\n useExpose(expose, []);\n\n const barClasses = computed(() => {\n return ['progressbar-value f-row f-content-center', props.barCls];\n });\n\n const barStyles = computed(() => {\n return {\n ...(props.barStyle || {}),\n width: props.value + '%'\n };\n });\n\n return () => (\n <div class=\"progressbar f-row\">\n <div class={barClasses.value} style={barStyles.value}>\n {props.showValue && <span>{props.value}%</span>}\n {slots.default?.()}\n </div>\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { TreeGridTitleProps } from './types';\n\nexport default defineComponent({\n name: 'TreeGridTitle',\n props: {\n row: Object as PropType<TreeGridTitleProps['row']>,\n column: Object as PropType<TreeGridTitleProps['column']>,\n rowIndex: Number as PropType<TreeGridTitleProps['rowIndex']>\n } satisfies Record<keyof TreeGridTitleProps, any>,\n setup(props: TreeGridTitleProps) {\n return () => {\n const row = props.row || {};\n const column = props.column || {};\n const rowIndex = props.rowIndex;\n const slots = column.$slots || {};\n\n let cell: any = '';\n if (slots['body']) {\n cell = slots['body']({\n row: row,\n column: column,\n rowIndex: rowIndex\n });\n } else if (slots['cell']) {\n cell = slots['cell']({\n row: row,\n column: column,\n rowIndex: rowIndex\n });\n } else {\n const field = column.field;\n cell = field && row ? row[field] : '';\n }\n\n return <span class=\"tree-title\">{cell}</span>;\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, onMounted } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport GridBodyCell from '../gridbase/GridBodyCell';\nimport TreeGridTitle from './TreeGridTitle';\nimport type { TreeGridRowProps } from './types';\n\nexport default defineComponent({\n name: 'TreeGridRow',\n props: {\n gridBody: Object as PropType<TreeGridRowProps['gridBody']>,\n row: Object as PropType<TreeGridRowProps['row']>,\n prow: Object as PropType<TreeGridRowProps['prow']>,\n columns: {\n type: Array as PropType<TreeGridRowProps['columns']>,\n default: () => []\n },\n depth: {\n type: Number as PropType<TreeGridRowProps['depth']>,\n default: 0\n },\n rowIndex: Number as PropType<TreeGridRowProps['rowIndex']>\n } satisfies Record<keyof TreeGridRowProps, any>,\n setup(props: TreeGridRowProps) {\n const loading = ref<boolean>(false);\n\n const grid = computed(() => {\n const gridBody = props.gridBody;\n if (gridBody && gridBody.view && gridBody.view.grid) {\n return gridBody.view.grid;\n }\n return null;\n });\n\n const isExpanded = computed(() => {\n const row = props.row || {};\n if (!row.state || row.state == 'open') {\n return true;\n } else {\n return false;\n }\n });\n\n const isCollapsed = computed(() => {\n const row = props.row || {};\n if (row.state && row.state == 'closed') {\n return true;\n } else {\n return false;\n }\n });\n\n const isLeaf = computed(() => {\n const row = props.row || {};\n if (row.state == 'closed') {\n return false;\n } else {\n if (row.children && row.children.length) {\n loading.value = false;\n return false;\n } else {\n if (loading.value) {\n return false;\n }\n return true;\n }\n }\n });\n\n const indentWidth = computed(() => {\n const depth = props.depth || 0;\n if (isLeaf.value) {\n return (depth + 1) * 16;\n } else {\n return depth * 16;\n }\n });\n\n const hitClasses = computed(() => {\n return [\n 'tree-hit',\n {\n 'tree-expanded': isExpanded.value,\n 'tree-collapsed': isCollapsed.value\n }\n ];\n });\n\n const iconClasses = computed(() => {\n const row = props.row || {};\n return [\n 'tree-icon',\n 'tree-folder',\n row.iconCls,\n {\n 'tree-folder-open': isExpanded.value,\n 'tree-file': isLeaf.value,\n 'tree-loading': loading.value\n }\n ];\n });\n\n const checkboxClasses = computed(() => {\n const row = props.row || {};\n const cc = ['unchecked', 'checked', 'indeterminate'];\n const index = cc.indexOf(row.checkState || 'unchecked');\n return 'tree-checkbox tree-checkbox' + (index >= 0 ? index : 0);\n });\n\n const isTreeField = (field: string): boolean => {\n const gridBody = props.gridBody;\n const gridValue = grid.value;\n if (gridBody && gridBody.view && gridBody.view.grid && gridValue && gridValue.treeField) {\n return field == gridValue.treeField;\n }\n return false;\n };\n\n const isEditable = (row: any, col: any): boolean => {\n const gridValue = grid.value;\n if (gridValue && gridValue.isEditing && gridValue.isEditing(row, col)) {\n if (col && col.editable) {\n return true;\n }\n }\n return false;\n };\n\n const doEdit = (col: any, target: HTMLElement | null): void => {\n const gridValue = grid.value;\n const row = props.row;\n if (!target) {\n return;\n }\n const td = domHelper.closest(target, 'td') as HTMLElement | null;\n if (gridValue && gridValue.beginEdit && row) {\n gridValue.beginEdit(row, col);\n setTimeout(() => {\n if (td) {\n const input = td.querySelector('.textbox-text') as HTMLInputElement | null;\n if (input) {\n input.focus();\n }\n }\n }, 0);\n }\n };\n\n const toggle = (event: MouseEvent): void => {\n event.stopPropagation();\n const gridValue = grid.value;\n const row = props.row;\n if (!gridValue || !row) {\n return;\n }\n if (isExpanded.value) {\n row.state = 'closed';\n gridValue.$emit('rowCollapse', row);\n } else {\n loading.value = true;\n row.state = 'open';\n gridValue.$emit('rowExpand', row);\n }\n };\n\n const onCheckRow = (event: MouseEvent): void => {\n event.stopPropagation();\n const gridValue = grid.value;\n const row = props.row;\n if (!gridValue || !row) {\n return;\n }\n if (row.checkState == 'checked') {\n if (gridValue.uncheckRow) {\n gridValue.uncheckRow(row);\n }\n } else {\n if (gridValue.checkRow) {\n gridValue.checkRow(row);\n }\n }\n };\n\n const onRowClick = (row: any, event: MouseEvent): void => {\n event.stopPropagation();\n const gridValue = grid.value;\n if (gridValue && gridValue.onRowClick) {\n gridValue.onRowClick(row);\n }\n };\n\n const onRowDblClick = (row: any): void => {\n const gridValue = grid.value;\n if (gridValue) {\n gridValue.$emit('rowDblClick', row);\n }\n };\n\n const onRowContextMenu = (row: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n if (gridValue) {\n gridValue.$emit('rowContextMenu', { row: row, originalEvent: event });\n }\n };\n\n const onCellClick = (col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n const row = props.row;\n if (gridValue && gridValue.onCellClick) {\n gridValue.onCellClick(row, col, event);\n }\n if (gridValue && (gridValue.clickToEdit || (gridValue.dblclickToEdit && gridValue.editingItem))) {\n doEdit(col, event.target as HTMLElement | null);\n }\n };\n\n const onCellDblClick = (col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n const row = props.row;\n if (gridValue) {\n gridValue.$emit('cellDblClick', { row: row, column: col });\n }\n if (gridValue && gridValue.dblclickToEdit) {\n doEdit(col, event.target as HTMLElement | null);\n }\n };\n\n const onCellContextMenu = (col: any, event: MouseEvent): void => {\n const gridValue = grid.value;\n const row = props.row;\n if (gridValue) {\n gridValue.$emit('cellContextMenu', { row: row, column: col, originalEvent: event });\n }\n };\n\n const onCellKeyDown = (_col: any, event: KeyboardEvent): void => {\n const gridValue = grid.value;\n if (gridValue && gridValue.editMode == 'cell') {\n if (event.which == 13) {\n event.stopPropagation();\n if (gridValue.endEdit) {\n gridValue.endEdit();\n }\n } else if (event.which == 27) {\n event.stopPropagation();\n if (gridValue.cancelEdit) {\n gridValue.cancelEdit();\n }\n }\n }\n };\n\n onMounted(() => {\n const row = props.row;\n const prow = props.prow;\n if (row && prow) {\n row.parent = prow;\n }\n });\n\n return () => {\n const row = props.row || {};\n const columns = props.columns || [];\n const gridValue = grid.value;\n const isHighlighted = gridValue && gridValue.isHighlighted ? gridValue.isHighlighted(row) : false;\n const isSelected = gridValue && gridValue.isSelected ? gridValue.isSelected(row) : false;\n\n return (\n <tr\n class={['datagrid-row', { 'datagrid-row-over': isHighlighted, 'datagrid-row-selected': isSelected }]}\n onMouseenter={() => {\n if (gridValue) {\n gridValue.highlightRow = row;\n }\n }}\n onMouseleave={() => {\n if (gridValue) {\n gridValue.highlightRow = null;\n }\n }}\n onClick={(event: MouseEvent) => onRowClick(row, event)}\n onDblclick={() => onRowDblClick(row)}\n onContextmenu={(event: MouseEvent) => onRowContextMenu(row, event)}\n >\n {columns.map((col: any, index: number) => {\n const isTreeFieldValue = isTreeField(col.field || '');\n const isEditableValue = isEditable(row, col);\n const cellSelected = gridValue && gridValue.isSelected ? gridValue.isSelected(row, col) : false;\n const cellHighlighted = gridValue && gridValue.isHighlighted ? gridValue.isHighlighted(row, col) : false;\n\n return (\n <td\n key={index}\n class={[{ 'datagrid-row-selected': cellSelected, 'datagrid-row-over': cellHighlighted }]}\n onMouseenter={() => {\n if (gridValue) {\n gridValue.highlightCell = { row: row, column: col };\n }\n }}\n onMouseleave={() => {\n if (gridValue) {\n gridValue.highlightCell = null;\n }\n }}\n onClick={(event: MouseEvent) => onCellClick(col, event)}\n onDblclick={(event: MouseEvent) => onCellDblClick(col, event)}\n onContextmenu={(event: MouseEvent) => onCellContextMenu(col, event)}\n onKeydown={(event: KeyboardEvent) => onCellKeyDown(col, event)}\n >\n {(!isTreeFieldValue || isEditableValue) && <GridBodyCell row={row} column={col}></GridBodyCell>}\n {isTreeFieldValue && !isEditableValue && (\n <div class={['datagrid-cell', { 'datagrid-editable': isEditableValue }]} style={{ textAlign: col.align || null } as CSSProperties}>\n {!isEditableValue && (\n <>\n <span class=\"tree-indent\" style={{ width: indentWidth.value + 'px' } as CSSProperties}></span>\n {!isLeaf.value && <span class={hitClasses.value} onClick={toggle}></span>}\n <span class={iconClasses.value}></span>\n {gridValue && gridValue.checkbox && <span class={checkboxClasses.value} onClick={onCheckRow}></span>}\n <TreeGridTitle row={row} column={col} rowIndex={props.rowIndex}></TreeGridTitle>\n </>\n )}\n </div>\n )}\n </td>\n );\n })}\n </tr>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, computed } from 'vue';\nimport SlideUpDown from '../base/SlideUpDown';\nimport TreeGridRow from './TreeGridRow';\nimport type { TreeGridChildrenProps } from './types';\n\nconst TreeGridChildren = defineComponent({\n name: 'TreeGridChildren',\n directives: { SlideUpDown },\n props: {\n gridBody: Object as PropType<TreeGridChildrenProps['gridBody']>,\n rows: {\n type: Array as PropType<TreeGridChildrenProps['rows']>,\n default: () => []\n },\n prow: Object as PropType<TreeGridChildrenProps['prow']>,\n columns: {\n type: Array as PropType<TreeGridChildrenProps['columns']>,\n default: () => []\n },\n depth: {\n type: Number as PropType<TreeGridChildrenProps['depth']>,\n default: 0\n }\n } satisfies Record<keyof TreeGridChildrenProps, any>,\n setup(props: TreeGridChildrenProps) {\n const grid = computed(() => {\n const gridBody = props.gridBody;\n if (gridBody && gridBody.view && gridBody.view.grid) {\n return gridBody.view.grid;\n }\n return null;\n });\n\n return () => {\n const rows = props.rows || [];\n const columns = props.columns || [];\n const gridValue = grid.value;\n const animate = gridValue && gridValue.animate ? gridValue.animate : false;\n\n return (\n <table class=\"datagrid-btable\" border=\"0\" cellSpacing=\"0\" cellPadding=\"0\">\n <colgroup>\n {columns.map((col: any, index: number) => (\n <col key={index} style={{ width: col.widthState }}></col>\n ))}\n </colgroup>\n <tbody>\n {rows.map((row: any, rowIndex: number) => (\n <>\n <TreeGridRow\n key={rowIndex}\n gridBody={props.gridBody}\n row={row}\n prow={props.prow}\n columns={columns}\n depth={props.depth}\n rowIndex={rowIndex}\n ></TreeGridRow>\n {row.children && row.children.length > 0 && (\n <tr class=\"treegrid-tr-tree\" key={`children-${rowIndex}`}>\n <td colspan={columns.length} style={{ border: 0 }}>\n <div v-SlideUpDown={{ animate: animate, collapsed: row.state == 'closed', disabled: false }}>\n <TreeGridChildren\n gridBody={props.gridBody}\n rows={row.children}\n prow={row}\n columns={columns}\n depth={props.depth ? props.depth + 1 : 1}\n ></TreeGridChildren>\n </div>\n </td>\n </tr>\n )}\n </>\n ))}\n </tbody>\n </table>\n );\n };\n }\n});\n\nexport default TreeGridChildren;\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, ref } from 'vue';\nimport TreeGridChildren from './TreeGridChildren';\nimport { gridBodyProps } from '../gridbase/gridBodyProps';\nimport { useGridBodyBase } from '../gridbase/useGridBodyBase';\nimport type { TreeGridBodyProps } from './types';\n\nexport default defineComponent({\n name: 'TreeGridBody',\n props: {\n ...gridBodyProps\n } satisfies Record<keyof TreeGridBodyProps, any>,\n setup(props: TreeGridBodyProps, { emit }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n // const view = computed<any>(() => proxy?.$parent);\n\n const base = useGridBodyBase(proxy, emit);\n\n const bodyRef = ref<HTMLElement | null>(null);\n const innerRef = ref<HTMLElement | null>(null);\n\n return () => {\n const columns = props.columns || [];\n const rows = props.rows || [];\n\n return (\n <div ref={bodyRef} class=\"datagrid-body f-full\" onScroll={base.onScroll}>\n <div ref={innerRef} class=\"datagrid-body-inner\">\n <TreeGridChildren gridBody={proxy} rows={rows} columns={columns}></TreeGridChildren>\n </div>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, PropType, CSSProperties, ref } from 'vue';\nimport GridHeader from '../gridbase/GridHeader';\nimport GridFooter from '../gridbase/GridFooter';\nimport { gridViewProps } from '../gridbase/gridViewProps';\nimport { useGridViewBase } from '../gridbase/useGridViewBase';\nimport TreeGridBody from './TreeGridBody';\nimport type { TreeGridViewProps } from './types';\n\nexport default defineComponent({\n name: 'TreeGridView',\n props: {\n ...gridViewProps,\n style: Object as PropType<CSSProperties>\n } satisfies Record<string, any>,\n setup(props: TreeGridViewProps, { emit, attrs }) {\n const gv = useGridViewBase(props as any, { emit } as any);\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const grid = () => proxy?.$parent;\n\n function onHeaderCellClick(event: any): void {\n const g = grid();\n const col = event.column;\n if (g && col && col.sortable) {\n if (g.addSort) g.addSort(event.column);\n if (g.setData && g.innerData) g.setData(g.innerData);\n if (g.sortsState) g.$emit('sortChange', g.sortsState);\n }\n }\n\n const headerRef = ref<any>(null);\n const bodyRef = ref<any>(null);\n const footerRef = ref<any>(null);\n\n return () => {\n const gridValue = grid();\n const columns = props.columns || [];\n const rows = props.rows || [];\n const footerRows = props.footerRows || [];\n const showHeader = gridValue && gridValue.showHeader !== false;\n const showFooter = gridValue && gridValue.showFooter === true;\n\n return (\n <div class={gv.viewCls.value} style={attrs.style}>\n {showHeader && (\n <GridHeader\n ref={headerRef}\n columnGroup={props.columnGroup}\n columns={columns}\n paddingWidth={gv.headerPaddingWidth.value}\n grid={gridValue}\n onCellClick={onHeaderCellClick}\n />\n )}\n\n <TreeGridBody ref={bodyRef} align=\"center\" columns={columns} rows={rows} onBodyScroll={gv.onBodyScroll} />\n\n {showFooter && (\n <GridFooter\n ref={footerRef}\n columns={columns}\n rows={footerRows}\n paddingWidth={gv.headerPaddingWidth.value}\n />\n )}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, onMounted, getCurrentInstance, provide } from 'vue';\nimport treeHelper from '../base/TreeHelper';\nimport Pagination from '../pagination/Pagination';\nimport GridEmpty from '../gridbase/GridEmpty';\nimport TreeGridView from './TreeGridView';\nimport { gridBaseProps } from '../gridbase/gridBaseProps';\nimport { useGridBase } from '../gridbase/useGridBase';\nimport type { TreeGridProps } from './types';\nimport { DATAGRID_INJECTION_KEY } from '../datagrid';\n\nexport default defineComponent({\n name: 'TreeGrid',\n props: {\n ...gridBaseProps,\n idField: String as PropType<TreeGridProps['idField']>,\n treeField: String as PropType<TreeGridProps['treeField']>,\n selectionMode: {\n type: String as PropType<TreeGridProps['selectionMode']>,\n default: 'single'\n },\n checkbox: {\n type: Boolean as PropType<TreeGridProps['checkbox']>,\n default: false\n },\n cascadeCheck: {\n type: Boolean as PropType<TreeGridProps['cascadeCheck']>,\n default: true\n },\n animate: {\n type: Boolean as PropType<TreeGridProps['animate']>,\n default: false\n }\n } satisfies Record<string, any>,\n setup(props: TreeGridProps, { expose, emit, slots }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const gb = useGridBase(props as any, { emit } as any);\n\n onMounted(() => {\n treeHelper.$vue = proxy;\n });\n\n const getCheckedRows = (state: string = 'checked'): any[] => {\n let rows: any[] = [];\n treeHelper.cascadeCheck = props.cascadeCheck || false;\n const innerData = (gb as any).innerData?.value || [];\n treeHelper.forNodes(innerData, (row: any) => {\n if (row.checkState == state) {\n rows.push(row);\n }\n });\n return rows;\n };\n\n const checkRow = (row: any): void => {\n treeHelper.cascadeCheck = props.cascadeCheck || false;\n treeHelper.checkNode(row, () => {\n emit('rowCheck', row);\n });\n };\n\n const uncheckRow = (row: any): void => {\n treeHelper.cascadeCheck = props.cascadeCheck || false;\n treeHelper.uncheckNode(row, () => {\n emit('rowUncheck', row);\n });\n };\n\n const uncheckAllRows = (): void => {\n const innerData = (gb as any).innerData?.value || [];\n treeHelper.uncheckAllNodes(innerData, () => {\n // Empty callback\n });\n };\n\n const adjustCheck = (row: any): void => {\n treeHelper.cascadeCheck = props.cascadeCheck || false;\n treeHelper.adjustCheck(row);\n };\n\n const sortData = (): void => {\n const sortsState = (gb as any).sortsState?.value || [];\n if (!sortsState.length) {\n return;\n }\n let cc: any[] = [];\n for (let i = 0; i < sortsState.length; i++) {\n const col = (gb as any).findColumn?.(sortsState[i].field);\n if (col) {\n cc.push(col);\n }\n }\n let sortFunc = (a: any, b: any): number => {\n return a == b ? 0 : a > b ? 1 : -1;\n };\n const innerData = (gb as any).innerData?.value || [];\n let _sort = (rows: any[]): void => {\n rows.sort((r1: any, r2: any) => {\n let r = 0;\n for (let i = 0; i < sortsState.length; i++) {\n let sort = sortsState[i];\n if (cc[i] && cc[i].sorter) {\n r = cc[i].sorter(r1, r2);\n } else {\n r = sortFunc(r1[sort.field], r2[sort.field]);\n }\n r = r * (sort.order == 'asc' ? 1 : -1);\n if (r != 0) {\n return r;\n }\n }\n return r;\n });\n rows.forEach((row: any) => {\n if (row.children && row.children.length) {\n _sort(row.children);\n }\n });\n };\n _sort(innerData);\n };\n\n const setData = (value: any[]): void => {\n (proxy as any)._listBase_setData?.(value);\n };\n\n expose({\n getCheckedRows,\n checkRow,\n uncheckRow,\n uncheckAllRows,\n adjustCheck,\n sortData,\n setData\n });\n // 向下注入 DataGrid 实例\n provide(DATAGRID_INJECTION_KEY, {\n slots,\n leftColumns: gb.leftColumns.value || [],\n dblclickToEdit: gb.dblclickToEdit,\n highlightRow: gb.highlightRow,\n highlightCell: gb.highlightCell,\n isRowExpanded: gb.isRowExpanded,\n isHighlighted: gb.isHighlighted,\n isSelected: gb.isSelected,\n addColumn: gb.addColumn,\n removeColumn: gb.removeColumn,\n addColumnGroup: gb.addColumnGroup,\n removeColumnGroup: gb.removeColumnGroup,\n findColumn: gb.findColumn,\n resizeColumn: gb.resizeColumn,\n moveColumn: gb.moveColumn,\n addSort: gb.addSort,\n addFilterRule: gb.addFilterRule,\n beginEdit: gb.beginEdit,\n endEdit: gb.endEdit,\n cancelEdit: gb.cancelEdit,\n isEditing: gb.isEditing,\n navRow: gb.navRow,\n initColumns: gb.initColumns,\n initHeaderHeight: gb.initHeaderHeight,\n initFilterRules: gb.initFilterRules,\n onRowClick: gb.onRowClick,\n onCellClick: gb.onCellClick,\n toggleGroup: gb.toggleGroup,\n toggleRow: gb.toggleRow,\n getAbsoluteIndex: gb.getAbsoluteIndex,\n isGroupRow: gb.isGroupRow,\n emit\n });\n\n return () => {\n const border = (props as any).border !== false;\n const pagination = (props as any).pagination;\n const pagePosition = (props as any).pagePosition;\n const totalState = (gb as any).totalState?.value || 0;\n const pageSizeState = (gb as any).pageSizeState?.value || 10;\n const pageNumberState = (gb as any).pageNumberState?.value || 1;\n const loading = (props as any).loading || false;\n const onPageChange = (gb as any).onPageChange;\n const loadMsg = (props as any).loadMsg;\n const rows = (gb as any).rows?.value || [];\n const footerRows = (gb as any).footerRows?.value || [];\n const leftGroup = (gb as any).leftGroup?.value;\n const leftColumns = (gb as any).leftColumns?.value || [];\n const rightGroup = (gb as any).rightGroup?.value;\n const rightColumns = (gb as any).rightColumns?.value || [];\n const centerGroup = (gb as any).centerGroup?.value;\n const centerColumns = (gb as any).centerColumns?.value || [];\n const leftFrozenWidth = (gb as any).leftFrozenWidth?.value;\n const rightFrozenWidth = (gb as any).rightFrozenWidth?.value;\n const splitStyle = (gb as any).splitStyle?.value;\n const viewRef = (gb as any).viewRef;\n const onBodyScroll = (gb as any).onBodyScroll;\n\n return (\n <div class=\"f-column panel-noscroll\">\n <div style=\"display:none\">{slots.default && slots.default()}</div>\n <div\n class={['panel-body', 'panel-body-noheader', 'datagrid', 'datagrid-wrap', 'f-full', 'f-column', !border ? 'panel-body-noborder' : '']\n .filter(Boolean)\n .join(' ')}\n >\n {pagination && pagePosition && pagePosition == 'top' && (\n <Pagination\n class=\"datagrid-pager datagrid-pager-top f-noshrink\"\n total={totalState}\n pageSize={pageSizeState}\n pageNumber={pageNumberState}\n loading={loading}\n onPageChange={onPageChange}\n />\n )}\n <div ref={viewRef} class=\"datagrid-view f-row f-full\">\n {(leftGroup || leftColumns.length > 0) && (\n <TreeGridView\n ref={(gb as any).view1}\n key=\"view1\"\n viewIndex={1}\n columnGroup={leftGroup}\n columns={leftColumns}\n rows={rows}\n footerRows={footerRows}\n style={{ width: leftFrozenWidth } as CSSProperties}\n />\n )}\n <TreeGridView\n ref={(gb as any).view2}\n key=\"view2\"\n viewIndex={2}\n columnGroup={centerGroup}\n columns={centerColumns}\n rows={rows}\n footerRows={footerRows}\n onBodyScroll={onBodyScroll}\n />\n {(rightGroup || rightColumns.length > 0) && (\n <TreeGridView\n ref={(gb as any).view3}\n key=\"view3\"\n viewIndex={3}\n columnGroup={rightGroup}\n columns={rightColumns}\n rows={rows}\n footerRows={footerRows}\n style={{ width: rightFrozenWidth } as CSSProperties}\n />\n )}\n {splitStyle && <div class=\"datagrid-split-proxy\" style={splitStyle}></div>}\n </div>\n {pagination && pagePosition && pagePosition == 'bottom' && (\n <Pagination\n class=\"datagrid-pager f-noshrink\"\n total={totalState}\n pageSize={pageSizeState}\n pageNumber={pageNumberState}\n loading={loading}\n onPageChange={onPageChange}\n />\n )}\n </div>\n {loading && (\n <div class=\"datagrid-loading f-row\">\n <div class=\"datagrid-mask\"></div>\n <div class=\"datagrid-mask-msg\">{loadMsg}</div>\n </div>\n )}\n {!rows.length && !loading && <GridEmpty grid={proxy}></GridEmpty>}\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n/**\n * Slider 组件\n *\n * 滑块组件,用于选择一个数值或数值范围。\n * 支持水平或垂直方向,可以设置最小值、最大值、步长等。\n *\n * @component\n */\nimport { defineComponent, PropType, ref, computed, watch } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport { MyEvent } from '../base/DomHelper';\nimport { useExpose } from '../../utils/exposeMethods';\nimport type { SliderProps } from './types';\n\nexport default defineComponent({\n name: 'Slider',\n props: {\n /**\n * 值(兼容旧版)\n * 滑块的值,可以是数字或数组(范围模式)\n */\n value: [Number, Array] as PropType<SliderProps['value']>,\n /**\n * 值(v-model)\n * 滑块的值,可以是数字或数组(范围模式)\n */\n modelValue: [Number, Array] as PropType<SliderProps['modelValue']>,\n /**\n * 方向模式\n * 'h': 水平方向, 'v': 垂直方向\n * @default 'h'\n */\n mode: {\n type: String as PropType<SliderProps['mode']>,\n default: 'h'\n },\n /**\n * 是否反向\n * 当为 true 时,滑块的方向反转\n * @default false\n */\n reversed: {\n type: Boolean as PropType<SliderProps['reversed']>,\n default: false\n },\n /**\n * 是否显示提示\n * 当为 true 时,在滑块手柄上显示当前值\n * @default false\n */\n showTip: {\n type: Boolean as PropType<SliderProps['showTip']>,\n default: false\n },\n /**\n * 是否禁用\n * @default false\n */\n disabled: {\n type: Boolean as PropType<SliderProps['disabled']>,\n default: false\n },\n /**\n * 是否范围模式\n * 当为 true 时,可以选择一个数值范围\n * @default false\n */\n range: {\n type: Boolean as PropType<SliderProps['range']>,\n default: false\n },\n /**\n * 最小值\n * @default 0\n */\n min: {\n type: Number as PropType<SliderProps['min']>,\n default: 0\n },\n /**\n * 最大值\n * @default 100\n */\n max: {\n type: Number as PropType<SliderProps['max']>,\n default: 100\n },\n /**\n * 步长\n * 每次移动的增量\n * @default 1\n */\n step: {\n type: Number as PropType<SliderProps['step']>,\n default: 1\n },\n /**\n * 刻度规则\n * 定义滑块上的刻度标记\n * @default []\n */\n rule: {\n type: Array as PropType<SliderProps['rule']>,\n default: () => []\n }\n },\n\n setup(props, { expose, emit }) {\n /**\n * 滑块容器引用\n * 用于获取滑块的尺寸信息\n */\n const sliderRef = ref<HTMLElement | null>(null);\n\n /**\n * 滑块内部容器引用\n * 用于计算点击位置\n */\n const sinnerRef = ref<HTMLElement | null>(null);\n\n /**\n * 值状态\n * 存储当前滑块的值\n */\n const valueState = ref<number | number[]>(props.value !== undefined ? props.value : props.modelValue !== undefined ? props.modelValue : 0);\n\n /**\n * 监听 value 和 modelValue 变化,同步到 valueState\n */\n watch([() => props.value, () => props.modelValue], ([newValue, newModelValue]) => {\n const v = newValue !== undefined ? newValue : newModelValue;\n if (v !== undefined) {\n valueState.value = v;\n }\n });\n\n /**\n * 滑块类名\n * 根据 mode 和 disabled 状态生成 CSS 类名\n */\n const sliderClasses = computed(() => {\n return [\n 'slider',\n {\n 'slider-disabled': props.disabled || false,\n 'f-row slider-v': props.mode === 'v',\n 'f-column slider-h': props.mode === 'h'\n }\n ];\n });\n\n /**\n * 第一个值\n * 在范围模式下,这是范围的最小值;在单值模式下,这就是当前值\n */\n const value1 = computed(() => {\n return valueState.value instanceof Array ? valueState.value[0] : (valueState.value as number);\n });\n\n /**\n * 第二个值\n * 仅在范围模式下有效,表示范围的最大值\n */\n const value2 = computed(() => {\n return props.range ? (valueState.value instanceof Array ? valueState.value[1] : null) : null;\n });\n\n /**\n * 显示的刻度规则\n * 根据 mode 和 reversed 属性处理刻度规则\n */\n const displayingRule = computed(() => {\n let rule = props.mode === 'h' ? props.rule : (props.rule || []).slice(0).reverse();\n if (props.reversed) {\n rule = (rule || []).slice(0).reverse();\n }\n return rule || [];\n });\n\n /**\n * 设置值\n *\n * @param value - 要设置的值,可以是数字或数组\n */\n const setValue = (value: number | number[]): void => {\n valueState.value = value;\n emit('update:modelValue', valueState.value);\n };\n\n /**\n * 将值转换为位置百分比\n *\n * @param value - 数值\n * @returns 位置百分比(0-100)\n */\n const value2pos = (value: number): number => {\n const min = props.min || 0;\n const max = props.max || 100;\n let pos = ((value - min) * 100.0) / (max - min);\n if (props.mode === 'v') {\n pos = 100 - pos;\n }\n if (props.reversed) {\n pos = 100 - pos;\n }\n return pos;\n };\n\n /**\n * 将位置转换为值\n *\n * @param pos - 位置(像素)\n * @returns 对应的数值\n */\n const pos2value = (pos: number): number => {\n if (!sliderRef.value) return props.min || 0;\n const size = props.mode === 'h' ? domHelper.outerWidth(sliderRef.value) : domHelper.outerHeight(sliderRef.value);\n const adjustedPos = props.mode === 'h' ? (props.reversed ? size - pos : pos) : props.reversed ? pos : size - pos;\n const value = (props.min || 0) + ((props.max || 0) - (props.min || 0)) * (adjustedPos / size);\n return +value.toFixed(0);\n };\n\n /**\n * 获取位置样式\n *\n * @param value - 数值\n * @returns 包含 left 或 top 的样式对象\n */\n const getPosStyle = (value: number): Record<string, string> => {\n const pos = value2pos(value);\n return props.mode === 'h' ? { left: pos + '%' } : { top: pos + '%' };\n };\n\n /**\n * 获取刻度值样式\n *\n * @param index - 刻度索引\n * @returns 包含 left 或 top 的样式对象\n */\n const getRuleValueStyle = (index: number): Record<string, string> => {\n const distance = (index * 100) / (displayingRule.value.length - 1) + '%';\n return props.mode === 'h' ? { left: distance } : { top: distance };\n };\n\n /**\n * 设置位置\n *\n * 根据位置计算值,并考虑步长和范围限制。\n *\n * @param pos - 位置(像素)\n * @param second - 是否设置第二个值(范围模式)\n * @returns 设置后的值\n */\n const setPos = (pos: number, second: boolean = false): number => {\n let value = pos2value(pos);\n const step = props.step || 1;\n const s = Math.abs(value % (step || 1));\n if (s < step / 2) {\n value -= s;\n } else {\n value = value - s + step;\n }\n if (props.range) {\n let v1 = value1.value;\n let v2 = value2.value;\n if (second) {\n if (value < v1) {\n value = v1;\n }\n v2 = value;\n } else {\n if (v2 !== null && value > v2) {\n value = v2;\n }\n v1 = value;\n }\n setValue([v1, v2 as number]);\n } else {\n setValue(value);\n }\n return value;\n };\n\n /**\n * 拖拽处理\n *\n * 当用户拖拽滑块手柄时调用,更新滑块的值。\n *\n * @param event - 拖拽事件对象\n * @param second - 是否拖拽第二个手柄(范围模式)\n */\n const onDragHandle = (event: any, second: boolean = false): void => {\n if (props.disabled) {\n return;\n }\n if (!sliderRef.value) return;\n\n if (props.mode === 'h') {\n const width = domHelper.outerWidth(sliderRef.value);\n if (event.left < 0) {\n event.left = 0;\n }\n if (event.left > width) {\n event.left = width;\n }\n } else {\n const height = domHelper.outerHeight(sliderRef.value);\n if (event.top < 0) {\n event.top = 0;\n }\n if (event.top > height) {\n event.top = height;\n }\n }\n if (props.mode === 'h') {\n const width = domHelper.outerWidth(sliderRef.value);\n const value = setPos(event.left, second);\n event.left = (value2pos(value) * width) / 100;\n } else {\n const height = domHelper.outerHeight(sliderRef.value);\n const value = setPos(event.top, second);\n event.top = (value2pos(value) * height) / 100;\n }\n if (event.target && event.target.applyDrag) {\n event.target.applyDrag();\n }\n };\n\n /**\n * 鼠标/触摸按下处理\n *\n * 当用户点击滑块轨道时,将滑块值设置为点击位置对应的值。\n *\n * @param event - 鼠标或触摸事件\n */\n const doDown = (event: MouseEvent | TouchEvent): void => {\n if (props.disabled) {\n return;\n }\n const myEvent = new MyEvent(event);\n if (!sinnerRef.value) return;\n const offset = domHelper.offset(sinnerRef.value);\n const pos = props.mode === 'h' ? myEvent.pageX - offset.left : myEvent.pageY - offset.top;\n let value = pos2value(pos);\n const step = props.step || 1;\n const s = Math.abs(value % step);\n if (s < step / 2) {\n value -= s;\n } else {\n value = value - s + step;\n }\n if (props.range) {\n let v1 = value1.value;\n let v2 = value2.value;\n if (v2 !== null) {\n const m = (v1 + v2) / 2.0;\n if (value < v1) {\n v1 = value;\n } else if (value > v2) {\n v2 = value;\n } else {\n value < m ? (v1 = value) : (v2 = value);\n }\n setValue([v1, v2]);\n }\n } else {\n setValue(value);\n }\n };\n\n /**\n * 第一个手柄的拖拽选项\n */\n const dragOpts1 = computed(() => {\n return {\n disabled: props.disabled,\n axis: props.mode,\n cursor: 'pointer',\n drag: onDragHandle\n };\n });\n\n /**\n * 第二个手柄的拖拽选项(范围模式)\n */\n const dragOpts2 = computed(() => {\n return {\n disabled: props.disabled,\n axis: props.mode,\n cursor: 'pointer',\n drag: (event: any) => {\n onDragHandle(event, true);\n }\n };\n });\n\n /**\n * 暴露方法给父组件\n */\n useExpose(expose, ['setValue']);\n\n /**\n * 返回渲染函数\n */\n return () => (\n <div ref={sliderRef} class={sliderClasses.value}>\n <div ref={sinnerRef} class=\"slider-inner\" onTouchstart={doDown} onMousedown={doDown}>\n <a href=\"javascript:;\" class=\"slider-handle\" style={getPosStyle(value1.value)} v-Draggable={dragOpts1.value}></a>\n {props.showTip && (\n <span class=\"slider-tip\" style={getPosStyle(value1.value)}>\n {value1.value}\n </span>\n )}\n {props.range && (\n <>\n <a href=\"javascript:;\" class=\"slider-handle\" style={getPosStyle(value2.value as number)} v-Draggable={dragOpts2.value}></a>\n {props.showTip && (\n <span class=\"slider-tip\" style={getPosStyle(value2.value as number)}>\n {value2.value}\n </span>\n )}\n </>\n )}\n </div>\n {props.rule && props.rule.length > 0 && (\n <>\n <div class=\"slider-rule\">\n {displayingRule.value.map((_v, index) => (\n <span key={index} style={getRuleValueStyle(index)}></span>\n ))}\n </div>\n <div class=\"slider-rulelabel\">\n {displayingRule.value.map((v, index) => (\n <span key={index} style={getRuleValueStyle(index)}>\n {v !== '|' && <span>{v}</span>}\n </span>\n ))}\n </div>\n </>\n )}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch } from 'vue';\nimport domHelper from \"../base/DomHelper\";\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useComboBase } from '../base/useComboBase';\nimport DataList from '../datalist/DataList';\nimport type { TagBoxProps } from \"./types\";\n\nexport default defineComponent({\n name: \"TagBox\",\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n value: [String, Number, Array] as PropType<any>,\n modelValue: [String, Number, Array] as PropType<any>,\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<TagBoxProps['hasDownArrow']>,\n default: false\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: 'combo-arrow'\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n panelAlign: {\n type: String as PropType<any>,\n default: 'left'\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<TagBoxProps['multiple']>,\n default: true\n },\n separator: {\n type: String as PropType<any>,\n default: ','\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n // ComboBox-like\n valueField: {\n type: String as PropType<any>,\n default: 'value'\n },\n textField: {\n type: String as PropType<any>,\n default: 'text'\n },\n groupField: String as PropType<any>,\n limitToList: {\n type: Boolean as PropType<TagBoxProps['limitToList']>,\n default: false\n },\n lazy: {\n type: Boolean as PropType<any>,\n default: false\n },\n virtualScroll: {\n type: Boolean as PropType<any>,\n default: false\n },\n rowHeight: {\n type: Number as PropType<any>,\n default: 30\n },\n pageNumber: {\n type: Number as PropType<any>,\n default: 1\n },\n pageSize: {\n type: Number as PropType<any>,\n default: 10\n },\n total: {\n type: Number as PropType<any>,\n default: 0\n },\n data: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n filter: Function as PropType<any>,\n tagCss: [Function, String, Object] as PropType<TagBoxProps['tagCss']>\n },\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'filterChange', 'selectionChange'],\n setup(props: any, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const mappingTexts = ref<Record<string, string>>({});\n const displayingText = ref<string | null>(null);\n const inputingText = ref<string | null>(null);\n const items = ref<Record<string, any>[]>([]);\n const totalState = ref<number>(props.total || 0);\n const selection = ref<any[]>([]);\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const scrollPosition = ref<number | null>(null);\n\n const datalistRef = ref<any>(null);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n function defaultFilter(q: string, item: Record<string, any>): boolean {\n const textField = props.textField || 'text';\n const index = String(item[textField]).toLowerCase().indexOf(q.trim().toLowerCase());\n return index !== -1;\n }\n\n function findItem(value: any): Record<string, any> | null {\n const valueField = props.valueField || 'value';\n const data = props.data || [];\n for (const item of data) {\n if (item[valueField] == value) return item;\n }\n return null;\n }\n\n function updateSelection(rows: Record<string, any>[] | null): void {\n const arr = rows || [];\n selection.value = arr;\n emit('selectionChange', selection.value);\n }\n\n function updateText(): void {\n const valueState = cb.input.valueState.value;\n const valueField = props.valueField || 'value';\n const textField = props.textField || 'text';\n\n if (valueState == null) {\n mappingTexts.value = {};\n displayingText.value = null;\n updateSelection([]);\n return;\n }\n\n const mt: Record<string, string> = {};\n const tt: string[] = [];\n const rows: Record<string, any>[] = [];\n\n const vs = Array.isArray(valueState) ? valueState : [valueState];\n for (const val of vs) {\n const item = findItem(val);\n if (item) {\n mt[val] = item[textField];\n rows.push(item);\n } else {\n mt[val] = mappingTexts.value[val] || String(val);\n const row: Record<string, any> = {};\n row[valueField] = val;\n row[textField] = mt[val];\n rows.push(row);\n }\n tt.push(mt[val]);\n }\n\n mappingTexts.value = mt;\n displayingText.value = tt.join(props.separator || ',');\n updateSelection(rows);\n }\n\n function doFilter(value: string): void {\n emit('filterChange', { pageNumber: 1, pageSize: props.pageSize || 10, filterValue: value });\n // 非 lazy 时在本地过滤 items\n const lazy = !!props.lazy;\n if (!lazy) {\n const q = (value || '').trim();\n if (q) {\n const tt = q.split(props.separator || ',');\n const val = tt[tt.length - 1] || '';\n const filter = props.filter || defaultFilter;\n items.value = (props.data || []).filter((item: any) => filter.call(proxy, val.trim(), item));\n } else {\n items.value = props.data || [];\n }\n totalState.value = items.value.length;\n nextTick(() => datalistRef.value?.highlightFirstRow?.());\n }\n }\n\n function autoSizeInput(): void {\n const inputEl = cb.input.inputRef.value as HTMLInputElement | null;\n if (!inputEl) return;\n\n const style = getComputedStyle(inputEl);\n const tmp = document.createElement('span');\n Object.assign(tmp.style, {\n position: 'absolute',\n top: '-9999px',\n left: '-9999px',\n width: 'auto',\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n whiteSpace: 'nowrap'\n });\n tmp.innerHTML = cb.input.textState.value;\n document.body.appendChild(tmp);\n\n const getWidth = (val: string): number => {\n val = val || '';\n const s = val.replace(/&/g, '&').replace(/\\s/g, ' ').replace(/</g, '<').replace(/>/g, '>');\n tmp.innerHTML = s;\n return domHelper.outerWidth(tmp);\n };\n\n const width = cb.input.textState.value ? getWidth(cb.input.textState.value) : getWidth(props.placeholder || '');\n document.body.removeChild(tmp);\n inputEl.style.width = width + 20 + 'px';\n if (!cb.panelClosed.value) nextTick(() => cb.alignPanel());\n }\n\n function doEnter(): void {\n autoSizeInput();\n if (props.limitToList) {\n doFilter('');\n } else {\n const text = (cb.input.textState.value || '').trim();\n if (text) {\n const value: any[] = ([] as any[]).concat(cb.input.valueState.value || []);\n value.push(text);\n cb.input.setValue(value);\n }\n }\n cb.input.textState.value = '';\n autoSizeInput();\n }\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n inputingText.value = cb.input.textState.value;\n if (props.limitToList) {\n openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => doFilter(cb.input.textState.value), props.delay || 200);\n }\n autoSizeInput();\n }\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n // 复用 ComboBox 的基本键盘逻辑:仅在 panel open 时给 DataList 导航\n if (cb.panelClosed.value && event.which == 40) {\n openPanel();\n event.preventDefault();\n return;\n }\n const datalist = datalistRef.value;\n if (datalist) {\n switch (event.which) {\n case 40:\n datalist.navRow?.(1);\n event.preventDefault();\n break;\n case 38:\n datalist.navRow?.(-1);\n event.preventDefault();\n break;\n case 13:\n doEnter();\n event.preventDefault();\n break;\n case 27:\n cb.input.textState.value = '';\n autoSizeInput();\n event.preventDefault();\n break;\n }\n } else if (event.which === 13) {\n doEnter();\n } else if (event.which === 27) {\n cb.input.textState.value = '';\n autoSizeInput();\n }\n }\n\n function removeTag(index: number): void {\n const value = ([] as any[]).concat(cb.input.valueState.value || []).filter((_v, i) => i !== index);\n cb.input.setValue(value);\n }\n\n function getCss(css: TagBoxProps['tagCss'], row: any, type: 'class' | 'style'): string | Record<string, any> | null {\n if (!css) return null;\n const cssValue = typeof css === 'function' ? css(row) : css;\n if (type === 'class') return typeof cssValue === 'string' ? cssValue : null;\n return typeof cssValue === 'object' ? cssValue : null;\n }\n\n function getTagClass(row: any): string | null {\n return getCss(props.tagCss, row, 'class') as string | null;\n }\n\n function getTagStyle(row: any): Record<string, any> | null {\n return getCss(props.tagCss, row, 'style') as Record<string, any> | null;\n }\n\n function onSelectionChange(event: any): void {\n inputingText.value = null;\n if (!event) {\n cb.input.setValue([]);\n selection.value = [];\n return;\n }\n const valueField = props.valueField || 'value';\n const eventArray = Array.isArray(event) ? event : [event];\n cb.input.setValue(eventArray.map((row: any) => row[valueField]));\n }\n\n function onRowClick(): void {\n // TagBox:不自动 close,让用户继续加 tag\n }\n\n function renderContent() {\n const textField = props.textField || 'text';\n const listslots = {\n default: (scope: any) => (slots['item'] ? slots['item'](scope) : scope.row[textField]),\n empty: slots['empty']\n };\n return (\n <DataList\n ref={datalistRef}\n class=\"f-full\"\n style=\"height:100%\"\n itemCls=\"combobox-item\"\n hoverCls=\"combobox-item-hover\"\n selectedCls=\"combobox-item-selected\"\n border={false}\n data={items.value}\n lazy={props.lazy}\n virtualScroll={props.virtualScroll}\n total={totalState.value}\n pageNumber={props.pageNumber}\n pageSize={props.pageSize}\n rowHeight={props.rowHeight}\n selectionMode=\"multiple\"\n idField={props.valueField}\n selection={selection.value}\n scrollPosition={scrollPosition.value}\n onRowClick={onRowClick}\n onSelectionChange={onSelectionChange}\n onPageChange={(e: any) => emit('filterChange', Object.assign(e, { filterValue: (cb.input.textState.value || '').trim() }))}\n v-slots={listslots}\n ></DataList>\n );\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n function renderLabels() {\n return (\n <span class=\"tagbox-labels f-full f-order3\">\n {selection.value.map((row, rowIndex) => (\n <span key={rowIndex} class={['tagbox-label f-order3 f-noshrink', getTagClass(row)]} style={getTagStyle(row)}>\n {row[props.textField]}\n <a href=\"javascript:;\" class=\"tagbox-remove\" onClick={() => removeTag(rowIndex)}></a>\n </span>\n ))}\n {cb.input.renderInput({ onInput })}\n </span>\n );\n }\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: () => {\n fb0.afterValueChange();\n updateText();\n cb.closePanel();\n },\n afterBlur: () => {\n fb0.afterBlur();\n cb.input.textState.value = '';\n nextTick(() => autoSizeInput());\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n if (props.editable && !cb.input.focused.value) doFilter('');\n }\n });\n\n watch(\n () => props.data,\n () => {\n items.value = props.data || [];\n totalState.value = props.total || items.value.length;\n updateText();\n },\n { immediate: true }\n );\n\n watch(\n () => props.total,\n (v: number) => {\n totalState.value = v;\n }\n );\n\n // openPanel 已通过 useComboBase overrides 重写(确保 togglePanel/箭头点击一致)\n const openPanel = cb.openPanel;\n\n onMounted(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.bind(el, 'keydown', onKeyDown);\n cb.input.textState.value = '';\n nextTick(() => autoSizeInput());\n });\n\n onBeforeUnmount(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.unbind(el, 'keydown', onKeyDown);\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n });\n\n expose({ autoSizeInput, doEnter });\n\n return () => (\n <span\n class={['combo tagbox f-field', cb.baseClasses.value]}\n onClick={() => {\n (cb.input.inputRef.value as HTMLInputElement | null)?.focus();\n }}\n >\n {renderLabels()}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n */\nimport { computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, PropType, ref, watch } from 'vue';\nimport domHelper from '../base/DomHelper';\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useInputBase } from '../base/useInputBase';\nimport MenuButton from '../menubutton/MenuButton';\nimport type { SearchBoxProps } from './types';\n\nexport default defineComponent({\n name: 'SearchBox',\n props: {\n name: String as PropType<SearchBoxProps['name']>,\n invalid: {\n type: Boolean as PropType<SearchBoxProps['invalid']>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<SearchBoxProps['validateOnCreate']>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<SearchBoxProps['validateOnBlur']>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<SearchBoxProps['validateOnChange']>,\n default: true\n },\n\n value: [String, Number, Array] as PropType<SearchBoxProps['value']>,\n modelValue: [String, Number, Array] as PropType<SearchBoxProps['modelValue']>,\n disabled: {\n type: Boolean as PropType<SearchBoxProps['disabled']>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<SearchBoxProps['readonly']>,\n default: false\n },\n editable: {\n type: Boolean as PropType<SearchBoxProps['editable']>,\n default: true\n },\n iconCls: String as PropType<SearchBoxProps['iconCls']>,\n iconAlign: {\n type: String as PropType<SearchBoxProps['iconAlign']>,\n default: 'right'\n },\n placeholder: String as PropType<SearchBoxProps['placeholder']>,\n multiline: {\n type: Boolean as PropType<SearchBoxProps['multiline']>,\n default: false\n },\n tabindex: Number as PropType<SearchBoxProps['tabindex']>,\n cls: String as PropType<SearchBoxProps['cls']>,\n inputCls: String as PropType<SearchBoxProps['inputCls']>,\n inputStyle: Object as PropType<SearchBoxProps['inputStyle']>,\n inputId: String as PropType<SearchBoxProps['inputId']>,\n textFormatter: Function as PropType<SearchBoxProps['textFormatter']>,\n\n menuAlign: {\n type: String as PropType<SearchBoxProps['menuAlign']>,\n default: 'left'\n },\n category: String as PropType<SearchBoxProps['category']>,\n buttonAlign: {\n type: String as PropType<SearchBoxProps['buttonAlign']>,\n default: 'right'\n },\n buttonIconCls: {\n type: String as PropType<SearchBoxProps['buttonIconCls']>,\n default: 'icon-search'\n }\n } satisfies Record<keyof SearchBoxProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'search'],\n setup(props: SearchBoxProps, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const fieldBase = useFieldBase(props);\n const ib = useInputBase(props, { emit, slots }, fieldBase);\n\n const menu = ref<any>(null);\n const menuBtnText = ref<string | null>(null);\n const menuBtnIcon = ref<string | null>(null);\n const categoryState = ref<string | undefined>(props.category);\n\n const mbRef = ref<any>(null);\n\n watch(\n () => props.category,\n v => {\n categoryState.value = v;\n }\n );\n\n const displayText = computed(() => {\n if (ib.focused.value) return ib.textState.value;\n const fmt = props.textFormatter || ib.defaultTextFormatter;\n return fmt(ib.textState.value);\n });\n\n const baseClasses = computed(() => {\n const cls = ib.baseClasses.value as any[];\n return ['searchbox', ...cls];\n });\n\n const mbClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n `f-noshrink textbox-button textbox-button-${props.menuAlign}`,\n {\n 'f-order0': props.menuAlign === 'left',\n 'f-order7': props.menuAlign === 'right'\n }\n ];\n });\n\n const buttonClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return [\n 'textbox-addon f-column f-noshrink',\n {\n 'f-order0': props.buttonAlign === 'left',\n 'f-order6': props.buttonAlign === 'right'\n }\n ];\n });\n\n function onKeyDown(event: KeyboardEvent): void {\n if (event.which === 13) {\n event.stopPropagation();\n event.preventDefault();\n doSearch();\n }\n }\n\n function setValue(value: string | number): void {\n ib.textState.value = String(value);\n ib.setValue(value);\n }\n\n function onInput(event: Event): void {\n ib.onInput(event);\n setValue(ib.textState.value);\n }\n\n function doSearch(): void {\n if (props.disabled || props.readonly) return;\n emit('search', { value: ib.valueState.value, category: categoryState.value });\n }\n\n function setCategory(value: string | undefined): void {\n const menuValue = menu.value;\n if (!menuValue) return;\n let item = menuValue.findItem(value);\n if (!item) {\n const subItems = menuValue.subItems.value || [];\n item = subItems[0];\n }\n if (item) {\n categoryState.value = item.value || item.text;\n menuBtnText.value = item.text;\n menuBtnIcon.value = item.iconCls;\n }\n }\n\n function initMenu(): void {\n if (!menu.value) return;\n setCategory(categoryState.value);\n menu.value.afterItemClick = (value: string) => {\n if (!props.disabled && !props.readonly) {\n setCategory(value);\n }\n };\n }\n\n function renderOthers() {\n let menuVNode: any = null;\n const ds = slots.default ? slots.default() : [];\n ds.forEach((m: any) => {\n if (m.type?.name === 'Menu') menuVNode = m;\n });\n\n return (\n <>\n {menuVNode && (\n <MenuButton ref={mbRef} class={mbClasses.value} text={menuBtnText.value} iconCls={menuBtnIcon.value} disabled={props.disabled}>\n {menuVNode}\n </MenuButton>\n )}\n <span class={buttonClasses.value}>\n <span class={`textbox-icon f-full ${props.buttonIconCls}`} onClick={doSearch}></span>\n </span>\n </>\n );\n }\n\n onMounted(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.bind(el, 'keydown', onKeyDown);\n\n if (mbRef.value) {\n menu.value = mbRef.value.menu.value;\n }\n initMenu();\n });\n\n onBeforeUnmount(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.unbind(el, 'keydown', onKeyDown);\n });\n\n expose({ setValue, doSearch });\n\n return () => (\n <span class={baseClasses.value}>\n {ib.renderInput({ value: displayText.value, onInput })}\n {ib.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType } from 'vue';\nimport type { SideMenuIconProps } from './types';\n\nexport default defineComponent({\n name: 'SideMenuIcon',\n props: {\n sidemenu: Object as PropType<SideMenuIconProps['sidemenu']>,\n menu: Object as PropType<SideMenuIconProps['menu']>,\n header: {\n type: Boolean as PropType<SideMenuIconProps['header']>,\n default: true\n }\n },\n setup(props: SideMenuIconProps) {\n return () => {\n const sidemenu = props.sidemenu as any;\n const iconSlot = sidemenu?.$slots?.['icon'];\n if (iconSlot) {\n return iconSlot({\n menu: props.menu,\n header: props.header,\n collapsed: sidemenu?.collapsed || false\n });\n }\n return null;\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\n\n/**\n * SideMenuItems 组件\n *\n * 侧边菜单项组件,用于渲染侧边菜单的菜单项。\n * 使用 Accordion 和 Tree 组件来展示层级菜单结构。\n *\n * @component\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, watch } from 'vue';\nimport { Accordion, AccordionPanel } from '../accordion';\nimport Tree from '../tree/Tree';\nimport SideMenuIcon from './SideMenuIcon';\nimport type { SideMenuItemsProps, SideMenuData } from './types';\n\nexport default defineComponent({\n name: 'SideMenuItems',\n\n props: {\n /**\n * 侧边菜单实例\n * 指向包含该组件的 SideMenu 组件实例\n */\n sidemenu: Object as PropType<SideMenuItemsProps['sidemenu']>,\n /**\n * 是否提示模式\n * 当为 true 时,用于显示提示菜单\n * @default false\n */\n tip: {\n type: Boolean as PropType<SideMenuItemsProps['tip']>,\n default: false\n },\n /**\n * 菜单数据\n * 可以是数组或单个对象\n */\n data: [Array, Object] as PropType<SideMenuItemsProps['data']>,\n /**\n * 宽度\n * 可以是数字(像素)或字符串(如 '200px')\n */\n width: [Number, String] as PropType<SideMenuItemsProps['width']>\n },\n\n setup(props) {\n /**\n * 内部数据\n * 处理后的菜单数据数组\n */\n const innerData = ref<SideMenuData[]>(Array.isArray(props.data) ? props.data : props.data ? [props.data] : []);\n\n /**\n * Accordion 组件引用\n * 用于访问 Accordion 组件的方法\n */\n const accordionRef = ref<any>(null);\n\n /**\n * 是否显示边框\n * 根据 tip 和 sidemenu 的 border 属性决定\n */\n const border = computed(() => {\n return props.tip ? true : (props.sidemenu as any)?.border || true;\n });\n\n /**\n * 是否允许多选\n * 根据 tip 和 sidemenu 的 multiple 属性决定\n */\n const multiple = computed(() => {\n return props.tip ? false : (props.sidemenu as any)?.multiple || true;\n });\n\n /**\n * 设置菜单数据\n *\n * @param value - 菜单数据,可以是数组、单个对象或 null\n */\n const setData = (value?: SideMenuData[] | SideMenuData | null): void => {\n if (props.tip) {\n const v = Object.assign({}, value as SideMenuData);\n v.state = 'open';\n innerData.value = [v];\n } else {\n innerData.value = Array.isArray(value) ? value : value ? [value] : [];\n }\n };\n\n /**\n * 面板选中事件处理\n *\n * 当 Accordion 面板被选中时,更新对应菜单项的状态为 'open'。\n *\n * @param panel - 被选中的面板实例\n */\n const onPanelSelect = (panel: any): void => {\n if (accordionRef.value && accordionRef.value.getPanelIndex) {\n const index = accordionRef.value.getPanelIndex(panel);\n if (index >= 0 && Array.isArray(props.data)) {\n const dataItem = props.data[index];\n if (dataItem) {\n dataItem.state = 'open';\n }\n }\n }\n };\n\n /**\n * 面板取消选中事件处理\n *\n * 当 Accordion 面板被取消选中时,更新对应菜单项的状态为 'closed'。\n *\n * @param panel - 被取消选中的面板实例\n */\n const onPanelUnselect = (panel: any): void => {\n if (accordionRef.value && accordionRef.value.getPanelIndex) {\n const index = accordionRef.value.getPanelIndex(panel);\n if (index >= 0 && Array.isArray(props.data)) {\n const dataItem = props.data[index];\n if (dataItem) {\n dataItem.state = 'closed';\n }\n }\n }\n };\n\n /**\n * 监听 data prop 变化,自动更新内部数据\n */\n watch(\n () => props.data,\n newValue => {\n setData(newValue);\n },\n { immediate: true }\n );\n\n /**\n * 初始化数据\n */\n setData(props.data);\n\n /**\n * 返回状态和方法\n */\n return () => {\n const sidemenu = props.sidemenu as any;\n const width = props.width ? (typeof props.width === 'number' ? props.width + 'px' : props.width) : null;\n const style: CSSProperties = width ? { width } : {};\n return (\n <div class=\"sidemenu f-column f-full\" style={style}>\n <Accordion\n ref={accordionRef}\n class=\"f-full\"\n border={border.value}\n animate={sidemenu?.animate || true}\n multiple={multiple.value}\n onPanelSelect={onPanelSelect}\n onPanelUnselect={onPanelUnselect}\n >\n {innerData.value.map((menu: SideMenuData, index: number) => (\n <AccordionPanel key={index} title={menu.text} iconCls={props.tip ? undefined : menu.iconCls} collapsed={menu.state === 'closed'} collapsible={!!menu.children?.length}>\n <Tree\n data={menu.children}\n selection={sidemenu?.selectionState.value}\n selectLeafOnly={true}\n animate={sidemenu?.animate || true}\n onSelectionChange={sidemenu?.onSelectionChange}\n onNodeClick={sidemenu?.onNodeClick}\n ></Tree>\n {!props.tip && sidemenu?.slots?.['icon'] && <SideMenuIcon sidemenu={sidemenu} menu={menu} header={true}></SideMenuIcon>}\n </AccordionPanel>\n ))}\n </Accordion>\n </div>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, watch, onMounted, getCurrentInstance } from 'vue';\nimport treeHelper from '../base/TreeHelper';\nimport SideMenuItems from './SideMenuItems';\nimport SideMenuIcon from './SideMenuIcon';\nimport type { SideMenuProps, SideMenuData } from './types';\n\nexport default defineComponent({\n name: 'SideMenu',\n props: {\n data: Array as PropType<SideMenuProps['data']>,\n selection: Object as PropType<SideMenuProps['selection']>,\n collapsed: {\n type: Boolean as PropType<SideMenuProps['collapsed']>,\n default: false\n },\n border: {\n type: Boolean as PropType<SideMenuProps['border']>,\n default: true\n },\n animate: {\n type: Boolean as PropType<SideMenuProps['animate']>,\n default: true\n },\n multiple: {\n type: Boolean as PropType<SideMenuProps['multiple']>,\n default: true\n },\n floatMenuWidth: {\n type: Number as PropType<SideMenuProps['floatMenuWidth']>,\n default: 200\n },\n floatMenuPosition: {\n type: String as PropType<SideMenuProps['floatMenuPosition']>,\n default: 'right'\n }\n },\n setup(props: SideMenuProps, { expose, emit, slots }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const selectionState = ref<SideMenuData | null>(props.selection || null);\n // const tipClosed = ref<boolean>(true);\n const innerData = ref<SideMenuData[]>([]);\n\n const sidemenu = computed(() => {\n return proxy;\n });\n const setData = (value?: SideMenuData[] | null): void => {\n if (value == null) {\n value = [];\n }\n innerData.value = Object.assign([], value);\n (treeHelper as any).$vue = proxy;\n treeHelper.forNodes(innerData.value, (node: SideMenuData) => {\n if (!node.iconCls) {\n node.iconCls = 'sidemenu-default-icon';\n }\n if (node.children) {\n node.nodeCls = 'tree-node-nonleaf';\n if (!node.state) {\n node.state = 'closed';\n }\n if (node.state == 'open') {\n node.nodeCls = 'tree-node-nonleaf';\n } else {\n node.nodeCls = 'tree-node-nonleaf tree-node-nonleaf-collapsed';\n }\n }\n });\n };\n\n const getTipOpts = (menu: SideMenuData): any => {\n return {\n position: props.floatMenuPosition,\n tooltipCls: 'sidemenu-tooltip',\n valign: 'top',\n propsData: {\n sidemenu: sidemenu.value,\n data: menu,\n tip: true,\n width: props.floatMenuWidth\n },\n component: SideMenuItems,\n content: <SideMenuItems sidemenu={sidemenu.value} data={menu} tip={true} width={props.floatMenuWidth} />,\n closed: menu.tipClosed != null ? menu.tipClosed : true,\n tooltipShow: () => {\n menu.tipClosed = false;\n },\n tooltipHide: () => {\n menu.tipClosed = true;\n }\n };\n };\n\n const selectItem = (item: SideMenuData | null): void => {\n if (item != selectionState.value) {\n let parent: SideMenuData | null = null;\n treeHelper.forNodes(innerData.value, (node: SideMenuData) => {\n (node.children || []).forEach((n: SideMenuData) => {\n if (n == item) {\n parent = node;\n }\n });\n });\n while (parent) {\n const parentInstance = parent as SideMenuData;\n parentInstance.state = 'open';\n parent = parentInstance.parent || null;\n }\n selectionState.value = item;\n }\n };\n\n const onSelectionChange = (node: SideMenuData): void => {\n selectionState.value = node;\n emit('selectionChange', selectionState.value);\n };\n\n const onNodeClick = (node: SideMenuData): void => {\n if (node.children) {\n node.state = node.state == 'closed' ? 'open' : 'closed';\n if (node.state == 'open') {\n node.nodeCls = 'tree-node-nonleaf';\n } else {\n node.nodeCls = 'tree-node-nonleaf tree-node-nonleaf-collapsed';\n }\n } else {\n emit('itemClick', node);\n innerData.value.forEach(menu => (menu.tipClosed = true));\n }\n };\n\n const expandItem = (item: SideMenuData): void => {\n item.state = 'open';\n if (item.children) {\n item.nodeCls = 'tree-node-nonleaf';\n }\n };\n\n const collapseItem = (item: SideMenuData): void => {\n item.state = 'closed';\n if (item.children) {\n item.nodeCls = 'tree-node-nonleaf tree-node-nonleaf-collapsed';\n }\n };\n\n const toggleItem = (item: SideMenuData): void => {\n if (item.state == 'closed') {\n expandItem(item);\n } else {\n collapseItem(item);\n }\n };\n\n const expandAll = (): void => {\n treeHelper.forNodes(innerData.value, (node: SideMenuData) => {\n if (node.children) {\n expandItem(node);\n }\n });\n };\n\n const collapseAll = (): void => {\n treeHelper.forNodes(innerData.value, (node: SideMenuData) => {\n if (node.children) {\n collapseItem(node);\n }\n });\n };\n\n const initProxy = () => {\n proxy.slots = slots;\n proxy.selectionState = selectionState;\n proxy.onNodeClick = onNodeClick;\n proxy.onSelectionChange = onSelectionChange;\n };\n initProxy();\n\n watch(\n () => props.data,\n (value: SideMenuData[] | undefined) => {\n setData(value);\n }\n );\n\n watch(\n () => props.selection,\n (value: SideMenuData | null | undefined) => {\n selectItem(value || null);\n }\n );\n\n onMounted(() => {\n setData(props.data);\n });\n\n expose({\n setData,\n selectItem,\n expandItem,\n collapseItem,\n toggleItem,\n expandAll,\n collapseAll\n })\n\n return () => {\n return (\n <div class=\"f-column\">\n {props.collapsed && (\n <div class=\"sidemenu sidemenu-collapsed f-full\">\n <div class={['accordion', { 'accordion-noborder': !props.border }]}>\n {innerData.value.map((menu: SideMenuData, index: number) => (\n <div key={index} class=\"panel-header accordion-header\" v-Tooltip={getTipOpts(menu)}>\n {!slots['icon'] && (\n <>\n <div class=\"panel-title panel-with-icon\"></div>\n <div class={['panel-icon', menu.iconCls]}></div>\n </>\n )}\n {slots['icon'] && <SideMenuIcon sidemenu={sidemenu.value} menu={menu} header={true}></SideMenuIcon>}\n </div>\n ))}\n </div>\n </div>\n )}\n {!props.collapsed && <SideMenuItems sidemenu={sidemenu.value} data={innerData.value}></SideMenuItems>}\n </div>\n )\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, ref, computed, onMounted, getCurrentInstance } from 'vue';\nimport { LinkButton } from '../linkbutton';\nimport type { MessagerContentProps, MessagerButton, MessagerDialogInstance } from './types';\n\nexport default defineComponent({\n name: 'MessagerContent',\n props: {\n messagerType: String as PropType<MessagerContentProps['messagerType']>,\n title: String as PropType<MessagerContentProps['title']>,\n icon: String as PropType<MessagerContentProps['icon']>,\n msg: String as PropType<MessagerContentProps['msg']>,\n value: String as PropType<MessagerContentProps['value']>,\n buttons: Array as PropType<MessagerContentProps['buttons']>\n },\n setup(props: MessagerContentProps) {\n const inst = getCurrentInstance();\n const inputRef = ref<HTMLInputElement | null>(null);\n const buttonsRef = ref<any[]>([]);\n const inputValue = ref<string>(props.value || '');\n\n const messagerIcon = computed(() => {\n return props.icon ? 'messager-' + props.icon : null;\n });\n\n const dialog = computed<MessagerDialogInstance | null>(() => {\n return (inst?.parent?.proxy as any) || null;\n });\n\n const closeDialog = (button?: MessagerButton): void => {\n const dialogValue = dialog.value as any;\n if (!dialogValue) {\n return;\n }\n if (props.messagerType == 'prompt' && button && button['value'] == true) {\n dialogValue.resultValue = inputValue.value;\n } else {\n dialogValue.resultValue = button ? button['value'] : null;\n }\n if (dialogValue.close) {\n dialogValue.close();\n }\n };\n\n onMounted(() => {\n if (inputRef.value) {\n setTimeout(() => {\n if (inputRef.value) {\n inputRef.value.focus();\n }\n }, 300);\n } else {\n if (buttonsRef.value && Array.isArray(buttonsRef.value) && buttonsRef.value.length) {\n setTimeout(() => {\n if (buttonsRef.value[0] && buttonsRef.value[0].focus) {\n buttonsRef.value[0].focus();\n }\n }, 300);\n }\n }\n });\n\n return () => (\n <div class=\"f-column f-full\">\n <div class=\"messager-body f-full f-column\">\n <div class=\"f-row f-full\">\n {messagerIcon.value && <div class={['f-noshrink messager-icon', messagerIcon.value]}></div>}\n <div class=\"f-full\">{props.msg}</div>\n </div>\n {props.messagerType == 'prompt' && (\n <div style=\"margin-top:20px\">\n <input\n ref={inputRef}\n class=\"messager-input\"\n value={inputValue.value}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement;\n inputValue.value = target.value;\n }}\n />\n </div>\n )}\n </div>\n {props.buttons && (\n <div class=\"dialog-button messager-button f-noshrink\">\n {props.buttons.map((button: MessagerButton, index: number) => (\n <LinkButton\n key={index}\n ref={(el: any) => {\n if (el) {\n buttonsRef.value[index] = el;\n }\n }}\n text={button.text}\n onClick={() => closeDialog(button)}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch, type CSSProperties } from \"vue\";\nimport MessagerContent from \"./MessagerContent\";\nimport domHelper from \"../base/DomHelper\";\nimport { dialogProps } from \"../dialog/dialogProps\";\nimport { usePanelBase } from \"../panel/usePanelBase\";\nimport type { MessagerDialogProps } from \"./types\";\n\nexport default defineComponent({\n name: \"MessagerDialog\",\n props: {\n ...dialogProps,\n component: {\n type: [String, Object, Function] as PropType<MessagerDialogProps['component']>,\n default: () => { return MessagerContent }\n },\n messagerIdIndex: Number as PropType<MessagerDialogProps['messagerIdIndex']>,\n messagerType: String as PropType<MessagerDialogProps['messagerType']>,\n closeMe: Function as PropType<MessagerDialogProps['closeMe']>,\n dialogStyle: {\n type: [Object, String] as PropType<MessagerDialogProps['dialogStyle']>,\n default: () => { return { width: '360px', minHeight: '130px' } }\n },\n modal: {\n type: Boolean as PropType<MessagerDialogProps['modal']>,\n default: true\n },\n closed: {\n type: Boolean as PropType<MessagerDialogProps['closed']>,\n default: true\n },\n title: String as PropType<MessagerDialogProps['title']>,\n msg: String as PropType<MessagerDialogProps['msg']>,\n icon: String as PropType<MessagerDialogProps['icon']>,\n value: String as PropType<MessagerDialogProps['value']>,\n buttons: {\n type: Array as PropType<MessagerDialogProps['buttons']>,\n default: () => []\n }\n },\n emits: [\"open\", \"close\"],\n setup(props: MessagerDialogProps, { slots, emit, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n (window as any).DialogZIndex = (window as any).DialogZIndex || 9000;\n\n const pb = usePanelBase(props, slots);\n\n const panelRef = ref<HTMLElement | null>(null);\n const maskEl = ref<HTMLElement | null>(null);\n const left = ref<number | null>(null);\n const top = ref<number>(0);\n const width = ref<number | null>(null);\n const height = ref<number | null>(null);\n\n const resultValue = ref<any>(null);\n const outerHeight = ref<number>(0);\n\n const panelStyles = computed<(CSSProperties | string | null | undefined)[]>(() => {\n const dialogStyle = props.dialogStyle as CSSProperties | undefined;\n return [\n props.panelStyle,\n dialogStyle,\n {\n left: left.value ? left.value + \"px\" : dialogStyle ? (dialogStyle as any).left : null,\n top: top.value ? top.value + \"px\" : dialogStyle ? (dialogStyle as any).top : null,\n width: width.value ? width.value + \"px\" : dialogStyle ? (dialogStyle as any).width : null,\n height: height.value ? height.value + \"px\" : dialogStyle ? (dialogStyle as any).height : null,\n },\n ];\n });\n\n const panelClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"window window-shadow\";\n if ((props as any).borderType == \"none\") {\n cls += \" window-thinborder window-noborder\";\n } else if ((props as any).borderType == \"thin\") {\n cls += \" window-thinborder\";\n }\n if (props.inline) {\n cls += \" inline\";\n }\n return [\"panel f-column\", cls, props.panelCls, props.dialogCls].filter(Boolean) as any;\n });\n\n const headerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.headerClasses.value as any).concat(\"window-header\");\n });\n\n const bodyClasses = computed<(string | Record<string, boolean>)[]>(() => {\n let cls = \"window-body\";\n if (!pb.hasHeader.value) cls += \" window-body-noheader\";\n return ([] as any[]).concat(pb.bodyClasses.value as any).concat(cls);\n });\n\n const footerClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ([] as any[]).concat(pb.footerClasses.value as any).concat(\"window-footer\");\n });\n\n const messagerIcon = computed<string | null>(() => {\n return props.icon ? \"messager-\" + props.icon : null;\n });\n\n function moveToTop(): void {\n if (maskEl.value) {\n maskEl.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n if (panelRef.value) {\n panelRef.value.style.zIndex = String((window as any).DialogZIndex++);\n }\n }\n\n function openMask(): void {\n if (props.modal && !maskEl.value) {\n maskEl.value = document.createElement(\"div\");\n domHelper.addClass(maskEl.value, \"window-mask\");\n if (!props.inline) {\n document.body.appendChild(maskEl.value);\n } else if (proxy?.$el) {\n domHelper.addClass(maskEl.value, \"inline\");\n proxy.$el.appendChild(maskEl.value);\n }\n }\n }\n\n function closeMask(): void {\n if (!maskEl.value) return;\n if (!props.inline) {\n document.body.removeChild(maskEl.value);\n } else if (proxy?.$el) {\n proxy.$el.removeChild(maskEl.value);\n }\n maskEl.value = null;\n }\n\n function displaying(): void {\n moveToTop();\n }\n\n function initDialog(): void {\n if (!pb.closedState.value) {\n const el = panelRef.value;\n if (el) {\n if (!props.inline) {\n document.body.appendChild(el);\n }\n openMask();\n displaying();\n }\n } else {\n closeMask();\n }\n }\n\n function open(): void {\n pb.closedState.value = false;\n }\n\n function close(): void {\n pb.closedState.value = true;\n if (props.closeMe) {\n props.closeMe(resultValue.value);\n }\n }\n\n watch(\n () => pb.closedState.value,\n v => {\n nextTick(() => initDialog());\n v ? emit(\"close\") : emit(\"open\");\n }\n );\n\n onMounted(() => {\n initDialog();\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on(\"messagerOpen\", (p: any) => {\n if (props.messagerIdIndex == p.messagerIdIndex) open();\n });\n eventHub.$on(\"messagerClose\", (p: any) => {\n if (props.messagerIdIndex == p.messagerIdIndex) close();\n });\n eventHub.$on(\"messagerPosition\", (p: any) => {\n if (props.messagerIdIndex == p.messagerIdIndex) {\n top.value = p.top || 0;\n const el = panelRef.value;\n if (el) {\n p.outerHeight = domHelper.outerHeight(el);\n outerHeight.value = p.outerHeight;\n }\n }\n });\n }\n });\n\n onBeforeUnmount(() => {\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$off(\"messagerOpen\");\n eventHub.$off(\"messagerClose\");\n eventHub.$off(\"messagerPosition\");\n }\n closeMask();\n });\n\n expose({ open, close });\n\n return () => (\n <div class=\"dialog-inline\">\n {!pb.closedState.value && (\n <div ref={panelRef} class={panelClasses.value} style={panelStyles.value as any}>\n {pb.renderHeader({ classes: headerClasses.value, style: props.headerStyle })}\n {pb.renderBody({\n classes: [\"f-column\", bodyClasses.value] as any,\n style: props.bodyStyle,\n children: (\n <MessagerContent\n messagerType={props.messagerType}\n title={props.title}\n msg={props.msg}\n value={props.value}\n icon={messagerIcon.value || undefined}\n buttons={props.buttons}\n />\n ),\n })}\n {pb.renderFooter({ classes: footerClasses.value, style: props.footerStyle })}\n </div>\n )}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { createVNode, render } from 'vue';\nimport MessagerDialog from './MessagerDialog';\nimport type { MessagerOptions, MessagerDialogObject } from './types';\n\n(window as any).MessagerIdIndex = (window as any).MessagerIdIndex || 1;\n\nexport default class Messager {\n ok: string;\n cancel: string;\n template: string | null;\n dialogs: MessagerDialogObject[];\n\n constructor() {\n const locale = (window as any).Locale;\n this.ok = locale?.t('Messager.ok', 'Ok') || 'Ok';\n this.cancel = locale?.t('Messager.cancel', 'Cancel') || 'Cancel';\n this.template = null;\n this.dialogs = [];\n }\n\n alert(options: MessagerOptions | string): MessagerDialogObject {\n const opts = typeof options === 'string' ? { msg: options } : options;\n if (!opts.buttons || !opts.buttons.length) {\n opts.buttons = [{ text: this.ok, value: true }];\n }\n return this.openDialog(opts, 'alert');\n }\n\n confirm(options: MessagerOptions | string): MessagerDialogObject {\n const opts = typeof options === 'string' ? { msg: options } : options;\n if (!opts.icon) {\n opts.icon = 'question';\n }\n if (!opts.buttons || !opts.buttons.length) {\n opts.buttons = [\n { text: this.ok, value: true },\n { text: this.cancel, value: false }\n ];\n }\n return this.openDialog(opts, 'confirm');\n }\n\n prompt(options: MessagerOptions | string): MessagerDialogObject {\n const opts = typeof options === 'string' ? { msg: options } : options;\n if (!opts.icon) {\n opts.icon = 'question';\n }\n if (!opts.buttons || !opts.buttons.length) {\n opts.buttons = [\n { text: this.ok, value: true },\n { text: this.cancel, value: false }\n ];\n }\n return this.openDialog(opts, 'prompt');\n }\n\n setPositions(): void {\n const dialogs = this.dialogs.filter(d => d.messagerType == 'tip');\n let top = 20 + document.body.scrollTop + document.documentElement.scrollTop;\n dialogs.forEach(dlg => {\n dlg.top = top;\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$emit('messagerPosition', dlg);\n }\n top += 10 + (dlg.outerHeight || 0);\n });\n }\n\n tip(options: MessagerOptions | string): MessagerDialogObject {\n const opts = typeof options == 'string' ? { msg: options } : options;\n if (opts.timeout == null) {\n opts.timeout = 2000;\n }\n let top = 0;\n const dialogs = this.dialogs.filter(d => d.messagerType == 'tip');\n if (dialogs.length) {\n const dlg = dialogs[dialogs.length - 1];\n top = dlg.top + (dlg.outerHeight || 0);\n }\n const dlg = this.openDialog(Object.assign({\n borderType: 'none',\n dialogCls: 'messager-tip f-animate',\n dialogStyle: { top: top + 'px', height: 'auto' },\n buttons: null,\n modal: false\n }, opts), 'tip');\n setTimeout(() => this.setPositions(), 0);\n return dlg;\n }\n\n openDialog(options: MessagerOptions, type: 'alert' | 'confirm' | 'prompt' | 'tip' = 'alert'): MessagerDialogObject {\n options.messagerType = type;\n options.messagerIdIndex = (window as any).MessagerIdIndex++;\n\n const createDialog = (): MessagerDialogObject => {\n const el = document.createElement('div');\n document.body.appendChild(el);\n const closeMe = (resultValue?: any) => {\n const index = this.dialogs.findIndex(d => d.messagerIdIndex == options.messagerIdIndex);\n if (index >= 0) {\n const dlg = this.dialogs[index];\n this.dialogs.splice(index, 1);\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$emit('messagerClose', dlg);\n }\n setTimeout(() => {\n render(null, el);\n document.body.removeChild(el);\n if (dlg.props && dlg.props.result) {\n dlg.props.result(resultValue);\n }\n this.setPositions();\n }, 0);\n }\n };\n const vn = createVNode(MessagerDialog, {\n ...options,\n closeMe,\n onClose: () => {\n closeMe();\n }\n });\n render(vn, el);\n return {\n closeMe: closeMe,\n messagerType: options.messagerType || type,\n messagerIdIndex: options.messagerIdIndex || 0,\n top: 0,\n outerHeight: 0,\n props: vn.props\n };\n };\n\n const dialog = createDialog();\n this.dialogs.push(dialog);\n if (options.timeout) {\n setTimeout(() => {\n dialog.closeMe();\n }, options.timeout);\n }\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$emit('messagerOpen', dialog.props);\n }\n return dialog;\n }\n\n closeAll(): void {\n this.dialogs.forEach(d => d.closeMe());\n this.dialogs = [];\n }\n}\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch } from 'vue';\nimport treeHelper from \"../base/TreeHelper\";\nimport domHelper from \"../base/DomHelper\";\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useComboBase } from '../base/useComboBase';\nimport type { ComboTreeProps } from \"./types\";\n\nexport default defineComponent({\n name: \"ComboTree\",\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n value: [String, Number, Array] as PropType<any>,\n modelValue: [String, Number, Array] as PropType<any>,\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: 'combo-arrow'\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n panelAlign: {\n type: String as PropType<any>,\n default: 'left'\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: ','\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n data: Array as PropType<ComboTreeProps['data']>,\n valueField: {\n type: String as PropType<ComboTreeProps['valueField']>,\n default: 'id'\n },\n textField: {\n type: String as PropType<ComboTreeProps['textField']>,\n default: 'text'\n },\n cascadeText: {\n type: Boolean as PropType<ComboTreeProps['cascadeText']>,\n default: false\n }\n } satisfies Record<keyof ComboTreeProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur'],\n setup(props: any, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n (treeHelper as any).$vue = proxy;\n\n const innerData = ref<any[]>(props.data || []);\n const mappingTexts = ref<Record<string, string>>({});\n const displayingText = ref<string | null>(null);\n const inputingText = ref<string | null>(null);\n const updatingText = ref(false);\n const selection = ref<any | null>(null);\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const trees = ref<any[]>([]);\n const scrollTop = ref(0);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n const tree = computed(() => {\n const panelEl = cb?.panelRef?.value;\n if (!panelEl) return null;\n for (const t of trees.value) {\n if (t && t.$el && domHelper.isChild(t.$el, panelEl)) return t;\n }\n return null;\n });\n\n function updateText(): void {\n updatingText.value = true;\n const valueState = cb.input.valueState.value;\n const valueField = props.valueField || 'id';\n const textField = props.textField || 'text';\n\n if (valueState == null) {\n mappingTexts.value = {};\n displayingText.value = null;\n selection.value = null;\n if (props.multiple) {\n treeHelper.uncheckAllNodes(innerData.value, () => { });\n }\n } else {\n const mt: Record<string, string> = {};\n const tt: string[] = [];\n\n if (props.multiple) {\n treeHelper.uncheckAllNodes(innerData.value, () => { });\n const valueArray = Array.isArray(valueState) ? valueState : [];\n\n for (const val of valueArray) {\n const node = treeHelper.findNode(innerData.value, valueField, val);\n if (node) treeHelper.checkNode(node, () => { });\n }\n\n const vv: any[] = [];\n treeHelper.forNodes(innerData.value, (node: any) => {\n if (node.checkState == 'checked') {\n vv.push(node[valueField]);\n mt[node[valueField]] = node[textField];\n tt.push(node[textField]);\n }\n });\n\n valueArray\n .filter((val: any) => vv.indexOf(val) == -1)\n .forEach((val: any) => {\n vv.push(val);\n mt[val] = mappingTexts.value[val] || String(val);\n tt.push(mt[val]);\n });\n\n cb.input.setValue(vv);\n } else {\n const node = treeHelper.findNode(innerData.value, valueField, valueState);\n if (node) {\n mt[valueState] = node[textField];\n if (tree.value) tree.value.selectionState = node;\n if (props.cascadeText) {\n const texts: string[] = [];\n let currNode: any = node;\n while (currNode) {\n currNode.state = 'open';\n texts.push(currNode[textField]);\n currNode = currNode.parent;\n }\n mt[valueState] = texts.reverse().join('/');\n }\n } else {\n mt[valueState] = mappingTexts.value[valueState] || String(valueState);\n }\n tt.push(mt[valueState]);\n }\n\n mappingTexts.value = mt;\n displayingText.value = tt.join(props.separator || ',');\n }\n\n updatingText.value = false;\n }\n\n function setTree(): void {\n const t = tree.value;\n if (!t) return;\n // t.checkboxState = !!props.multiple;\n // t.innerData = innerData.value;\n const valueField = props.valueField || 'id';\n t.setData?.(innerData.value);\n // t.updateAfterSelectionChange((node: any) => {\n // selection.value = node;\n // if (!props.multiple) {\n // cb.input.setValue(node[valueField]);\n // cb.closePanel();\n // }\n // })\n\n t.afterSelectionChange = (node: any) => {\n selection.value = node;\n if (!props.multiple) {\n cb.input.setValue(node[valueField]);\n cb.closePanel();\n }\n };\n\n t.afterCheckChange = (nodes: any[]) => {\n if (props.multiple && !updatingText.value) {\n const vv = nodes.map((node: any) => node[valueField]);\n cb.input.setValue(vv);\n }\n };\n\n nextTick(() => {\n const panelEl = cb.panelRef.value;\n if (panelEl) panelEl.scrollTop = scrollTop.value;\n });\n\n (treeHelper as any).cascadeCheck = t.cascadeCheck;\n }\n\n function doFilter(value: string): void {\n const t = tree.value;\n if (!t) return;\n if (value) {\n if (props.multiple) {\n const tt = value.trim().split(props.separator || ',');\n const val = tt[tt.length - 1];\n t.doFilter?.(val);\n } else {\n t.doFilter?.(value);\n }\n } else {\n t.doFilter?.('');\n }\n }\n\n function onBlur(): void {\n if (inputingText.value == null) return;\n const text = inputingText.value.trim();\n if (!text) {\n cb.input.setValue(null);\n return;\n }\n\n if (props.multiple) {\n const value = (props.value as any[]) || [];\n const vv: any[] = [];\n const tt = text.split(props.separator || ',');\n for (const val of value) {\n const t = mappingTexts.value[val];\n if (tt.indexOf(t) != -1) vv.push(val);\n }\n if (value.length != vv.length) cb.input.setValue(vv);\n } else {\n if (inputingText.value != displayingText.value) cb.input.setValue(null);\n }\n inputingText.value = null;\n }\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n inputingText.value = cb.input.textState.value;\n if (cb.panelClosed.value) openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => doFilter(cb.input.textState.value), props.delay || 300);\n }\n }\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: () => {\n fb0.afterValueChange();\n if (!updatingText.value) updateText();\n },\n afterBlur: () => {\n fb0.afterBlur();\n onBlur();\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n nextTick(() => {\n setTree();\n updateText();\n if (props.editable) doFilter('');\n });\n }\n });\n\n watch(\n () => props.data,\n () => {\n innerData.value = props.data || [];\n }\n );\n\n const displayText = computed(() => {\n if (!cb.input.focused.value) {\n if (cb.input.valueState.value != null && displayingText.value == null) updateText();\n const textFormatter = props.textFormatter || cb.input.defaultTextFormatter || ((v: any) => v || '');\n cb.input.textState.value = textFormatter(displayingText.value);\n }\n return cb.input.textState.value || '';\n });\n\n function renderContent() {\n return slots['tree']?.();\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n // openPanel 已通过 useComboBase overrides 重写(确保 togglePanel/箭头点击一致)\n const openPanel = cb.openPanel;\n\n onMounted(() => {\n const eventHub = (window as any).EventHub;\n if (eventHub) {\n eventHub.$on('treeMounted', (t: any) => {\n trees.value.push(t);\n });\n }\n });\n\n onBeforeUnmount(() => {\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n const eventHub = (window as any).EventHub;\n eventHub?.$off?.('treeMounted');\n });\n\n expose({\n setData: (d: any[]) => (innerData.value = d || []),\n updateText,\n openPanel,\n closePanel: cb.closePanel,\n togglePanel: cb.togglePanel\n });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: displayText.value, onInput })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, PropType, ref, watch } from \"vue\";\nimport domHelper from \"../base/DomHelper\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useComboBase } from \"../base/useComboBase\";\nimport type { ComboGridProps } from \"./types\";\n\nexport default defineComponent({\n name: \"ComboGrid\",\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n value: [String, Number, Array] as PropType<any>,\n modelValue: [String, Number, Array] as PropType<any>,\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: \"combo-arrow\"\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: \"right\"\n },\n panelAlign: {\n type: String as PropType<any>,\n default: \"left\"\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: \",\"\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n data: Array as PropType<ComboGridProps['data']>,\n valueField: {\n type: String as PropType<ComboGridProps['valueField']>,\n default: \"id\",\n },\n textField: {\n type: String as PropType<ComboGridProps['textField']>,\n default: \"text\",\n },\n limitToList: {\n type: Boolean as PropType<ComboGridProps['limitToList']>,\n default: true,\n },\n } satisfies Record<keyof ComboGridProps, any>,\n emits: [\"update:modelValue\", \"valueChange\", \"focus\", \"blur\", \"filterChange\"],\n setup(props: any, { emit, slots, expose }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n\n const innerData = ref<any[]>(props.data || []);\n const mappingTexts = ref<Record<string, string>>({});\n const displayingText = ref<string | null>(null);\n const inputingText = ref<string | null>(null);\n const datagridScrollTop = ref(0);\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const grids = ref<any[]>([]);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n const datagrid = computed(() => {\n const panelEl = cb?.panelRef?.value as HTMLElement | null;\n if (!panelEl) return null;\n for (const g of grids.value) {\n if (g && g.$el && domHelper.isChild(g.$el, panelEl)) return g;\n }\n return null;\n });\n\n function findRow(value: any): any | null {\n const data = props.data || [];\n const valueField = props.valueField || \"id\";\n for (const row of data) {\n if (row[valueField] == value) return row;\n }\n return null;\n }\n\n function updateText(): void {\n const valueState = cb.input.valueState.value;\n const valueField = props.valueField || \"id\";\n const textField = props.textField || \"text\";\n if (valueState == null) {\n mappingTexts.value = {};\n displayingText.value = null;\n datagrid.value?.setSelectionValue?.(null);\n return;\n }\n\n const mt: Record<string, string> = {};\n const tt: string[] = [];\n const ss: any[] = [];\n\n if (props.multiple) {\n const valueArray = Array.isArray(valueState) ? valueState : [];\n for (const val of valueArray) {\n const row = findRow(val);\n if (row) {\n mt[val] = row[valueField];\n ss.push(row);\n } else {\n mt[val] = mappingTexts.value[val] || String(val);\n }\n tt.push(mt[val]);\n }\n datagrid.value?.setSelectionValue?.(ss);\n } else {\n const row = findRow(valueState);\n if (row) {\n mt[valueState] = row[textField];\n ss.push(row);\n } else {\n mt[valueState] = mappingTexts.value[valueState] || String(valueState);\n }\n tt.push(mt[valueState]);\n datagrid.value?.setSelectionValue?.(ss.length ? ss[0] : null);\n }\n\n mappingTexts.value = mt;\n displayingText.value = tt.join(props.separator || \",\");\n }\n\n function setGrid(): void {\n const dg = datagrid.value;\n if (!dg) return;\n dg.selectionModeState = props.multiple ? \"multiple\" : \"single\";\n dg.setData?.(innerData.value);\n\n dg.updateAfterSelectionChange((sel: any) => {\n const valueField = props.valueField || \"id\";\n if (sel) {\n if (props.multiple) {\n const vv = Array.isArray(sel) ? sel.map((row: any) => row[valueField]) : [];\n cb.input.setValue(vv);\n } else {\n cb.input.setValue(sel[valueField]);\n cb.closePanel();\n }\n } else {\n cb.input.setValue(null);\n }\n })\n }\n\n function doFilter(value: string): void {\n emit(\"filterChange\", { filterValue: value });\n }\n\n function fixValue(): void {\n if (inputingText.value == null) return;\n const text = inputingText.value.trim();\n if (!text) {\n cb.input.setValue(null);\n return;\n }\n if (props.multiple) {\n const value = (props.value as any[]) || [];\n const vv: any[] = [];\n const tt = text.split(props.separator || \",\");\n for (const val of value) {\n const t = mappingTexts.value[val];\n if (tt.indexOf(t) != -1) vv.push(val);\n }\n if (value.length != vv.length) cb.input.setValue(vv);\n } else if (!props.limitToList) {\n cb.input.setValue(inputingText.value);\n }\n inputingText.value = null;\n }\n\n function onBlur(): void {\n if (!cb.panelClosed.value) fixValue();\n }\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n inputingText.value = cb.input.textState.value;\n if (cb.panelClosed.value) openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => doFilter(cb.input.textState.value), props.delay || 300);\n }\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n if (cb.panelClosed.value && event.which == 40) {\n openPanel();\n event.preventDefault();\n return;\n }\n const dg = datagrid.value;\n if (!dg) return;\n\n switch (event.which) {\n case 40:\n dg.navRow?.(1);\n event.preventDefault();\n break;\n case 38:\n dg.navRow?.(-1);\n event.preventDefault();\n break;\n case 13:\n if (dg.highlightRow) {\n dg.doEnter?.();\n if (!props.multiple) closePanel();\n cb.input.textState.value = displayingText.value as any;\n }\n event.preventDefault();\n break;\n case 9:\n fixValue();\n closePanel();\n break;\n case 27:\n closePanel();\n cb.input.textState.value = displayingText.value as any;\n event.preventDefault();\n break;\n }\n }\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: () => {\n fb0.afterValueChange();\n updateText();\n },\n afterBlur: () => {\n fb0.afterBlur();\n onBlur();\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n nextTick(() => {\n setGrid();\n updateText();\n nextTick(() => {\n const dg = datagrid.value;\n const bodyRef = dg?.$refs?.view2?.$refs?.body?.$refs?.bodyRef;\n if (bodyRef) bodyRef.scrollTop = datagridScrollTop.value;\n });\n if (props.editable) doFilter(\"\");\n });\n },\n closePanel: () => {\n if (!cb.panelClosed.value) {\n const dg = datagrid.value;\n const st = dg?.$refs?.view2?.$refs?.body?.scrollTop?.();\n if (typeof st === \"number\") datagridScrollTop.value = st;\n }\n cb.closePanelRaw();\n }\n });\n\n watch(\n () => props.data,\n () => {\n innerData.value = props.data || [];\n datagrid.value?.setData?.(innerData.value);\n }\n );\n\n const displayText = computed(() => {\n if (!cb.input.focused.value) {\n if (cb.input.valueState.value != null && displayingText.value == null) updateText();\n const tf = props.textFormatter || cb.input.defaultTextFormatter || ((v: any) => v);\n cb.input.textState.value = tf(displayingText.value);\n }\n return cb.input.textState.value || \"\";\n });\n\n function renderContent() {\n return slots[\"grid\"]?.();\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n // openPanel/closePanel 通过 useComboBase overrides 实现(确保 togglePanel/箭头点击走“重写逻辑”)\n const openPanel = cb.openPanel;\n const closePanel = cb.closePanel;\n\n onMounted(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.bind(el, \"keydown\", onKeyDown);\n\n const eventHub = (window as any).EventHub;\n eventHub?.$on?.(\"gridMounted\", (g: any) => grids.value.push(g));\n });\n\n onBeforeUnmount(() => {\n const el = proxy?.$el as HTMLElement | undefined;\n if (el) domHelper.unbind(el, \"keydown\", onKeyDown);\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n const eventHub = (window as any).EventHub;\n eventHub?.$off?.(\"gridMounted\");\n });\n\n expose({\n setData: (d: any[]) => (innerData.value = d || []),\n updateText,\n openPanel,\n closePanel,\n togglePanel: cb.togglePanel\n });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: displayText.value, onInput })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, PropType, ref } from 'vue';\nimport Calendar from \"../calendar/Calendar\";\nimport TimeSpinner from \"../timespinner/TimeSpinner\";\nimport dateHelper from \"../base/DateHelper\";\nimport domHelper from '../base/DomHelper';\nimport { useFieldBase } from '../base/useFieldBase';\nimport { useComboBase } from '../base/useComboBase';\nimport type { DateTimeBoxProps } from \"./types\";\n\nexport default defineComponent({\n name: \"DateTimeBox\",\n components: {\n Calendar,\n TimeSpinner,\n },\n props: {\n // FieldBase\n name: String as PropType<any>,\n invalid: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnCreate: {\n type: Boolean as PropType<any>,\n default: true\n },\n validateOnBlur: {\n type: Boolean as PropType<any>,\n default: false\n },\n validateOnChange: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n // InputBase\n value: Date as PropType<any>,\n modelValue: Date as PropType<any>,\n disabled: {\n type: Boolean as PropType<any>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<any>,\n default: false\n },\n editable: {\n type: Boolean as PropType<any>,\n default: true\n },\n iconCls: String as PropType<any>,\n iconAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n placeholder: String as PropType<any>,\n multiline: {\n type: Boolean as PropType<any>,\n default: false\n },\n tabindex: Number as PropType<any>,\n cls: String as PropType<any>,\n inputCls: String as PropType<any>,\n inputStyle: Object as PropType<any>,\n inputId: String as PropType<any>,\n textFormatter: Function as PropType<any>,\n\n // ComboBase\n hasDownArrow: {\n type: Boolean as PropType<any>,\n default: true\n },\n arrowIconCls: {\n type: String as PropType<any>,\n default: 'combo-arrow'\n },\n arrowAlign: {\n type: String as PropType<any>,\n default: 'right'\n },\n panelAlign: {\n type: String as PropType<any>,\n default: 'left'\n },\n panelStyle: Object as PropType<any>,\n multiple: {\n type: Boolean as PropType<any>,\n default: false\n },\n separator: {\n type: String as PropType<any>,\n default: ','\n },\n delay: {\n type: Number as PropType<any>,\n default: 200\n },\n\n // DateBox props (for calendar)\n currentText: {\n type: String as PropType<any>,\n default: () => (window as any).Locale?.t('DateBox.currentText', 'Today') || 'Today'\n },\n closeText: {\n type: String as PropType<any>,\n default: () => (window as any).Locale?.t('DateBox.closeText', 'Close') || 'Close'\n },\n okText: {\n type: String as PropType<any>,\n default: () => (window as any).Locale?.t('DateBox.okText', 'Ok') || 'Ok'\n },\n showWeek: {\n type: Boolean as PropType<any>,\n default: false\n },\n weekNumberHeader: {\n type: String as PropType<any>,\n default: ''\n },\n firstDay: {\n type: Number as PropType<any>,\n default: 0\n },\n formatter: Function as PropType<any>,\n parser: Function as PropType<any>,\n validator: {\n type: Function as PropType<any>,\n default: () => true\n },\n reversed: {\n type: Boolean as PropType<any>,\n default: true\n },\n\n format: {\n type: String as PropType<DateTimeBoxProps['format']>,\n default: \"MM/dd/yyyy HH:mm\",\n },\n timeFormat: {\n type: String as PropType<DateTimeBoxProps['timeFormat']>,\n default: \"HH:mm\",\n },\n } satisfies Record<keyof DateTimeBoxProps, any>,\n emits: ['update:modelValue', 'valueChange', 'focus', 'blur', 'selectionChange'],\n setup(props: any, { emit, slots, expose }) {\n const timer = ref<ReturnType<typeof setTimeout> | null>(null);\n const calendarRef = ref<any>(null);\n\n const timeValue = ref<string>(dateHelper.formatDate(new Date(), props.timeFormat || 'HH:mm'));\n const selectedDate = ref<Date | null>(null);\n\n const fb0 = useFieldBase(props);\n let cb!: ReturnType<typeof useComboBase>;\n\n function defaultFormatter(date: Date): string {\n return dateHelper.formatDate(date, props.format || 'MM/dd/yyyy HH:mm');\n }\n\n function defaultParser(value: string): Date | null {\n return dateHelper.parseDate(value, props.format || 'MM/dd/yyyy HH:mm');\n }\n\n function getParsedValueState(): Date {\n const valueState = cb.input.valueState.value;\n let date = new Date();\n if (typeof valueState === 'string') date = new Date(valueState);\n if (typeof valueState === 'number') date = new Date(valueState);\n if (typeof valueState === 'object' && valueState instanceof Date) date = valueState;\n return date;\n }\n\n function getFormattedValue(): string {\n const formatter = props.formatter || defaultFormatter;\n return formatter(getParsedValueState());\n }\n\n function doFilter(value: string): void {\n const parser = props.parser || defaultParser;\n let date = parser(value);\n if (!date) date = getParsedValueState();\n if (date) {\n timeValue.value = dateHelper.formatDate(date, props.timeFormat || 'HH:mm');\n }\n const calendar = calendarRef.value;\n if (calendar && date) {\n calendar.moveTo?.(date);\n calendar.highlightDate?.(date);\n }\n }\n\n function onSelectionChange(event: Date): void {\n selectedDate.value = event;\n emit('selectionChange', event);\n }\n\n function selectOk(): void {\n let date = selectedDate.value || getParsedValueState() || new Date();\n const time = dateHelper.parseDate(timeValue.value, props.timeFormat || 'HH:mm');\n if (time) {\n date.setHours(time.getHours());\n date.setMinutes(time.getMinutes());\n date.setSeconds(time.getSeconds());\n }\n cb.input.setValue(date);\n cb.closePanel();\n }\n\n const fieldBase = {\n invalidState: fb0.invalidState,\n afterFocus: fb0.afterFocus,\n afterValueChange: fb0.afterValueChange,\n afterBlur: () => {\n fb0.afterBlur();\n if (cb.panelClosed.value) return;\n const txt = (cb.input.textState.value || '').trim();\n if (!txt) {\n cb.input.setValue(null);\n } else if (!props.reversed) {\n const parser = props.parser || defaultParser;\n const val = parser(txt);\n if (val) cb.input.setValue(val);\n }\n }\n };\n\n cb = useComboBase(props, { emit, slots }, fieldBase, {\n openPanel: () => {\n cb.openPanelRaw();\n nextTick(() => doFilter(cb.input.textState.value));\n }\n });\n\n const displayText = computed(() => {\n if (!cb.input.focused.value && cb.panelClosed.value) {\n cb.input.textState.value = getFormattedValue();\n }\n return cb.input.textState.value;\n });\n\n function onInput(event: Event): void {\n cb.input.onInput(event);\n if (cb.input.focused.value) {\n if (cb.panelClosed.value) openPanel();\n if (timer.value) clearTimeout(timer.value);\n timer.value = setTimeout(() => doFilter(cb.input.textState.value), props.delay || 200);\n }\n }\n\n function onKeyDown(event: KeyboardEvent): void {\n if (cb.panelClosed.value && event.which == 40) {\n openPanel();\n event.preventDefault();\n return;\n }\n if (cb.panelClosed.value) return;\n const calendar = calendarRef.value;\n if (!calendar) return;\n switch (event.which) {\n case 40:\n calendar.navDate?.(7);\n event.preventDefault();\n break;\n case 38:\n calendar.navDate?.(-7);\n event.preventDefault();\n break;\n case 37:\n calendar.navDate?.(-1);\n event.preventDefault();\n break;\n case 39:\n calendar.navDate?.(1);\n event.preventDefault();\n break;\n case 13:\n calendar.selectDate?.();\n cb.closePanel();\n cb.input.textState.value = getFormattedValue();\n event.preventDefault();\n break;\n }\n }\n\n function renderContent() {\n return (\n <>\n <Calendar\n ref={calendarRef}\n class=\"f-full\"\n border={false}\n showWeek={props.showWeek}\n weekNumberHeader={props.weekNumberHeader}\n firstDay={props.firstDay}\n validator={props.validator}\n selection={cb.input.valueState.value as Date}\n onSelectionChange={onSelectionChange}\n ></Calendar>\n <TimeSpinner\n ref=\"timeSpinner\"\n value={timeValue.value}\n format={props.timeFormat}\n onUpdate:modelValue={(val: string) => {\n timeValue.value = val;\n }}\n />\n <div class=\"datebox-button f-row\">\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={selectOk}>\n {props.okText || 'Ok'}\n </a>\n <a href=\"javascript:;\" class=\"datebox-button-a f-full\" onClick={cb.closePanel}>\n {props.closeText || 'Close'}\n </a>\n </div>\n </>\n );\n }\n\n function renderPanel() {\n if (cb.panelClosed.value) return null;\n const panelStyle = props.panelStyle || {};\n const style = Object.assign({}, panelStyle, {\n left: `${cb.panelLeft.value}px`,\n top: `${cb.panelTop.value}px`\n });\n return (\n <div ref={cb.panelRef} class=\"panel-body panel-body-noheader combo-panel combo-p f-column\" style={style}>\n {renderContent()}\n </div>\n );\n }\n\n function renderOthers() {\n return (\n <>\n {cb.renderArrow()}\n {renderPanel()}\n </>\n );\n }\n\n // openPanel 已通过 useComboBase overrides 重写(确保 togglePanel/箭头点击一致)\n const openPanel = cb.openPanel;\n\n onMounted(() => {\n const v = props.value !== undefined ? props.value : props.modelValue;\n cb.input.setValue(v || null);\n selectedDate.value = v || null;\n cb.input.textState.value = getFormattedValue();\n const inputEl = cb.input.inputRef.value as HTMLInputElement | null;\n if (inputEl) domHelper.bind(inputEl, 'keydown', onKeyDown);\n });\n\n onBeforeUnmount(() => {\n const inputEl = cb.input.inputRef.value as HTMLInputElement | null;\n if (inputEl) domHelper.unbind(inputEl, 'keydown', onKeyDown);\n if (timer.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n });\n\n expose({\n setValue: cb.input.setValue,\n selectOk,\n openPanel,\n closePanel: cb.closePanel\n });\n\n return () => (\n <span class={cb.baseClasses.value}>\n {cb.input.renderInput({ value: displayText.value, onInput })}\n {cb.input.renderAddon()}\n {renderOthers()}\n </span>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n * \n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, computed, ref, watch } from \"vue\";\nimport { useFieldBase } from \"../base/useFieldBase\";\nimport { useExpose } from \"../../utils/exposeMethods\";\nimport type { RateProps } from \"./types\";\nimport type { FieldBaseProps } from \"../base/types\";\n\nexport default defineComponent({\n name: \"Rate\",\n props: {\n value: {\n type: Number as PropType<RateProps['value']>,\n default: 0\n },\n max: {\n type: Number as PropType<RateProps['max']>,\n default: 5\n },\n size: {\n type: Number as PropType<RateProps['size']>,\n default: 24\n },\n half: {\n type: Boolean as PropType<RateProps['half']>,\n default: false\n },\n readonly: {\n type: Boolean as PropType<RateProps['readonly']>,\n default: false\n },\n disabled: {\n type: Boolean as PropType<RateProps['disabled']>,\n default: false\n },\n color: {\n type: String as PropType<RateProps['color']>,\n default: () => '#ececec'\n },\n selectedColor: {\n type: String as PropType<RateProps['selectedColor']>,\n default: () => '#ffca3e'\n },\n modelValue: Number as PropType<RateProps['modelValue']>\n },\n model: {\n prop: 'modelValue',\n event: 'modelChange'\n },\n setup(props: RateProps, { emit, expose }) {\n const fieldBase = useFieldBase(props as FieldBaseProps);\n const currValue = ref<number>(props.modelValue || 0);\n\n const invalidState = computed(() => {\n const v = fieldBase.invalidState as any;\n return typeof v === \"boolean\" ? v : !!v?.value;\n });\n\n const baseClasses = computed<(string | Record<string, boolean>)[]>(() => {\n return ['rate f-inline-row f-field', {\n 'rate-disabled': props.disabled || false,\n 'rate-readonly': props.readonly || false,\n 'rate-half': props.half || false,\n 'rate-invalid': invalidState.value,\n }];\n });\n\n watch(() => props.modelValue, (v) => {\n currValue.value = v || 0;\n });\n\n function getStartStyle(index: number, first: boolean = false): Record<string, string> {\n const startStyle = { width: props.size + 'px', height: props.size + 'px', color: props.color || '#ececec' };\n const selectedStyle = { width: props.size + 'px', height: props.size + 'px', color: props.selectedColor || '#ffca3e' };\n if (index < Math.floor(currValue.value)) {\n return selectedStyle;\n } else if (first && currValue.value > Math.floor(currValue.value) && index === Math.floor(currValue.value)) {\n return selectedStyle;\n } else {\n return startStyle;\n }\n }\n\n function onMouseover(index: number, first: boolean = false): void {\n if (props.readonly || props.disabled) {\n return;\n }\n currValue.value = index + (first ? 0.5 : 1);\n }\n\n function onMouseout(_index: number, _first: boolean = false): void {\n if (props.readonly || props.disabled) {\n return;\n }\n currValue.value = props.modelValue || 0;\n }\n\n function onClick(index: number, first: boolean = false): void {\n if (props.readonly || props.disabled) {\n return;\n }\n emit('update:modelValue', index + (first ? 0.5 : 1));\n }\n\n useExpose(expose, [\"onClick\"]);\n\n return () => {\n const items: number[] = [];\n for (let i = 1; i <= (props.max || 0); i++) {\n items.push(i);\n }\n return (\n <span class={baseClasses.value}>\n {\n items.map((_item, index) => (\n <span class=\"rate-item\" key={index}>\n <span class=\"rate-first\"\n onMouseover={() => onMouseover(index, true)}\n onMouseout={() => onMouseout(index, true)}\n onClick={() => onClick(index, true)}\n >\n <svg style={getStartStyle(index, true)} focusable=\"false\" viewBox=\"0 0 24 24\"><path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"></path></svg>\n </span>\n <span class=\"rate-second\"\n onMouseover={() => onMouseover(index)}\n onMouseout={() => onMouseout(index)}\n onClick={() => onClick(index)}\n >\n <svg style={getStartStyle(index)} focusable=\"false\" viewBox=\"0 0 24 24\"><path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"></path></svg>\n </span>\n </span>\n ))\n }\n </span>\n );\n };\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { defineComponent, PropType, CSSProperties, ref, computed, watch, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\nimport type { SwiperProps, SwiperPanelInstance } from './types';\n\nexport default defineComponent({\n name: 'Swiper',\n props: {\n selected: {\n type: Number as PropType<SwiperProps['selected']>,\n default: 0\n },\n duration: {\n type: Number as PropType<SwiperProps['duration']>,\n default: 400\n },\n autoplay: {\n type: Boolean as PropType<SwiperProps['autoplay']>,\n default: false\n },\n interval: {\n type: Number as PropType<SwiperProps['interval']>,\n default: 2000\n },\n indicator: {\n type: Boolean as PropType<SwiperProps['indicator']>,\n default: true\n }\n },\n setup(props: SwiperProps, { expose, emit, slots }) {\n const panels = ref<SwiperPanelInstance[]>([]);\n const innerSelected = ref<number>(props.selected || 0);\n const autoplayTimer = ref<ReturnType<typeof setInterval> | null>(null);\n const inst = getCurrentInstance();\n\n const innerStyle = computed((): CSSProperties => {\n return {\n transform: 'translate(' + -innerSelected.value * 100 + '%,0px) translateZ(0px)',\n transitionDuration: (props.duration || 400) / 1000 + 's'\n };\n });\n\n const initPanels = (): void => {\n if (panels.value.length) {\n panels.value.forEach((p, index) => {\n (p as any).panelIndex = index;\n });\n }\n };\n\n const addPanel = (panel: SwiperPanelInstance): void => {\n const pp = panels.value.slice();\n pp.push(panel);\n panels.value = pp;\n };\n\n const removePanel = (panel: SwiperPanelInstance): void => {\n const uid = panel.uid || '';\n const pp = panels.value.slice();\n const index = pp.findIndex(p => p.uid === uid);\n if (index >= 0) {\n pp.splice(index, 1);\n panels.value = pp;\n }\n };\n\n const handleDotClick = (index: number): void => {\n innerSelected.value = index;\n emit('update:selected', index);\n emit('change', index);\n };\n\n const initProxy = () => {\n const proxy = inst?.proxy as any;\n proxy.innerSelected = innerSelected;\n proxy.panels = panels;\n }\n initProxy();\n\n watch(panels, () => {\n initPanels();\n });\n\n watch(\n () => props.selected,\n newValue => {\n innerSelected.value = newValue || 0;\n }\n );\n\n onMounted(() => {\n initPanels();\n if (props.autoplay) {\n autoplayTimer.value = setInterval(() => {\n if (panels.value.length > 0) {\n innerSelected.value = (innerSelected.value + 1) % panels.value.length;\n emit('update:selected', innerSelected.value);\n emit('change', innerSelected.value);\n }\n }, props.interval || 2000);\n }\n });\n\n onBeforeUnmount(() => {\n if (autoplayTimer.value) {\n clearInterval(autoplayTimer.value);\n autoplayTimer.value = null;\n }\n });\n\n expose({\n panels,\n innerSelected,\n addPanel,\n removePanel,\n initPanels,\n handleDotClick\n });\n\n return () => (\n <div class=\"swiper\">\n <div class=\"swiper-inner\" style={innerStyle.value}>\n {slots.default?.()}\n </div>\n {props.indicator && panels.value.length > 1 && (\n <div class=\"swiper-dots\">\n {panels.value.map((_p, index) => (\n <div\n key={index}\n onClick={() => handleDotClick(index)}\n class={['swiper-dot', { 'swiper-dot-active': index === innerSelected.value }]}\n ></div>\n ))}\n </div>\n )}\n </div>\n );\n }\n});\n","/**\n * EasyUI for Vue 3.0.15\n *\n * Copyright (c) 2009-2024 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the commercial license: https://www.jeasyui.com/license_commercial4.php\n * To use it on other terms please contact us: info@jeasyui.com\n *\n */\nimport { computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, PropType, ref, type CSSProperties } from 'vue';\nimport { panelProps } from '../panel/panelProps';\nimport { usePanelBase } from '../panel/usePanelBase';\n\nexport default defineComponent({\n name: 'SwiperPanel',\n props: {\n ...panelProps,\n title: {\n type: String as PropType<string>,\n default: ''\n }\n },\n setup(props, { slots }) {\n const inst = getCurrentInstance();\n const proxy = inst?.proxy as any;\n const proxyPanel = ref<any>(null);\n const pb = usePanelBase(props, slots);\n\n const panelIndex = ref<number>(0);\n\n const outerStyle = computed<CSSProperties>(() => {\n const index = panelIndex.value;\n const parent = proxy?.$parent as any;\n const innerSelected = parent?.innerSelected ?? 0;\n const panels = parent?.panels;\n const selected = innerSelected;\n const length = panels?.length || 1;\n const val = index * 100 + '%';\n let tcss = `translate(${val},0px) translateZ(0px)`;\n if (selected == 0 && index == length - 1) {\n tcss = 'translate(-100%,0px) translateZ(0px)';\n } else if (selected == length - 1 && index == 0) {\n tcss = `translate(${length * 100}%,0px) translateZ(0px)`;\n }\n const panelStyle = (props as any).panelStyle || {};\n return Object.assign({}, panelStyle, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n transform: tcss,\n willChange: 'transform'\n });\n });\n const buildProxy = () => {\n return {\n uid: inst?.uid || '',\n ...props,\n panelIndex: panelIndex\n }\n };\n\n onMounted(() => {\n const parent = proxy?.$parent as any;\n proxyPanel.value = buildProxy();\n parent?.addPanel?.(proxyPanel.value);\n });\n\n onBeforeUnmount(() => {\n const parent = proxy?.$parent as any;\n parent?.removePanel?.(proxyPanel.value);\n });\n\n // 维持原 data.panelIndex 行为\n panelIndex.value = 0;\n\n return () => {\n if (pb.closedState.value) return null;\n return (\n <div class={pb.panelClasses.value} style={outerStyle.value}>\n {pb.renderHeader({ style: props.headerStyle })}\n {pb.renderBody({ style: props.bodyStyle })}\n {pb.renderFooter({ style: props.footerStyle })}\n </div>\n );\n };\n }\n});\n","import type { App } from 'vue';\nimport type { ViteUILocale } from './locale/types';\nimport ValidateRules from './components/form/rules';\nimport Locale from './components/locale';\nimport { Panel } from './components/panel/index';\nimport { Accordion, AccordionPanel } from './components/accordion';\nimport { LinkButton, ButtonGroup } from './components/linkbutton';\nimport { FileButton } from './components/filebutton';\nimport { Pagination } from './components/pagination';\nimport { DataList } from './components/datalist';\nimport { VirtualScroll, Addon, Label } from './components/base';\nimport { GridBase, GridColumn, GridColumnGroup, GridHeaderRow } from './components/gridbase';\nimport { DataGrid } from './components/datagrid';\nimport { TextBox } from './components/textbox';\nimport { NumberBox } from './components/numberbox';\nimport { ComboBox } from './components/combobox';\nimport { SwitchButton } from './components/switchbutton';\nimport { CheckBox } from './components/checkbox';\nimport { RadioButton } from './components/radiobutton';\nimport { Tree } from './components/tree';\nimport { Tabs, TabPanel } from './components/tabs';\nimport { TimeSpinner } from './components/timespinner';\nimport { TimePicker } from './components/timepicker';\nimport { DateTimeSpinner } from './components/datetimespinner';\nimport { Layout, LayoutPanel } from './components/layout';\nimport { Menu, MenuItem, SubMenu, MenuSep } from './components/menu';\nimport { MenuButton } from './components/menubutton';\nimport { SplitButton } from './components/splitbutton';\nimport { Tooltip } from './components/tooltip';\nimport { PasswordBox } from './components/passwordbox';\nimport { Calendar } from './components/calendar';\nimport { DateBox } from './components/datebox';\nimport { Draggable, DraggableProxy } from './components/draggable';\nimport { Droppable } from './components/droppable';\nimport { Resizable } from './components/resizable';\nimport { Dialog } from './components/dialog';\nimport { Drawer } from './components/drawer';\nimport { ProgressBar } from './components/progressbar';\nimport { TreeGrid } from './components/treegrid';\nimport { Slider } from './components/slider';\nimport { TagBox } from './components/tagbox';\nimport { SearchBox } from './components/searchbox';\nimport { Form, FormField } from './components/form';\nimport { SideMenu } from './components/sidemenu';\nimport { Messager, MessagerDialog } from './components/messager';\nimport { ComboTree } from './components/combotree';\nimport { ComboGrid } from './components/combogrid';\nimport { DateTimeBox } from './components/datetimebox';\nimport { EventHub } from './components/base/EventHub';\nimport { Rate } from './components/rate';\nimport { Swiper, SwiperPanel } from './components/swiper';\n\n// 组件类型定义\ntype Component = any;\ntype Directive = any;\n\nconst components: Component[] = [\n VirtualScroll,\n Panel,\n Dialog,\n Drawer,\n Accordion,\n AccordionPanel,\n Tabs,\n TabPanel,\n Layout,\n LayoutPanel,\n LinkButton,\n ButtonGroup,\n FileButton,\n MenuButton,\n SplitButton,\n Pagination,\n DataList,\n GridBase,\n GridColumn,\n GridColumnGroup,\n GridHeaderRow,\n DataGrid,\n TreeGrid,\n TextBox,\n PasswordBox,\n Addon,\n Label,\n NumberBox,\n TimeSpinner,\n TimePicker,\n DateTimeSpinner,\n ComboBox,\n ComboTree,\n ComboGrid,\n SwitchButton,\n CheckBox,\n RadioButton,\n Tree,\n Menu,\n MenuItem,\n SubMenu,\n MenuSep,\n Calendar,\n DateBox,\n DateTimeBox,\n DraggableProxy,\n ProgressBar,\n Slider,\n TagBox,\n SearchBox,\n Form,\n FormField,\n SideMenu,\n MessagerDialog,\n Rate,\n Swiper,\n SwiperPanel\n];\n\nconst directives: Directive[] = [\n Tooltip,\n Draggable,\n Droppable,\n Resizable\n];\n\n// ViteUI 插件选项类型\nexport interface ViteUIOptions {\n locale?: ViteUILocale;\n rules?: Record<string, any>;\n}\n\n// 安装函数类型\nconst install = function (app: App, opts: ViteUIOptions = {}): void {\n (window as any).Vue = app;\n Locale.use(opts.locale as ViteUILocale);\n Object.assign((window as any).ValidateRules, opts.rules || {});\n const prefix = 'Vu';\n components.forEach(component => {\n app.component(prefix + component.name, component);\n });\n directives.forEach(directive => {\n app.directive(directive.name, directive);\n });\n (window as any).$messager = new Messager();\n app.config.globalProperties.$messager = (window as any).$messager;\n (window as any).EventHub = new EventHub();\n};\n\n// 全局对象扩展\nif (typeof window !== 'undefined') {\n (window as any).Locale = Locale;\n (window as any).ValidateRules = ValidateRules;\n if ((window as any).Vue) {\n install((window as any).Vue);\n }\n}\n\nconst ViteUI = {\n install\n};\n\n// 导出带 Vu 前缀的组件\nexport { VirtualScroll as VuVirtualScroll, Addon as VuAddon, Label as VuLabel } from './components/base';\nexport { Panel as VuPanel } from './components/panel/index';\nexport { Accordion as VuAccordion, AccordionPanel as VuAccordionPanel } from './components/accordion';\nexport { LinkButton as VuLinkButton, ButtonGroup as VuButtonGroup } from './components/linkbutton';\nexport { FileButton as VuFileButton } from './components/filebutton';\nexport { DataList as VuDataList } from './components/datalist';\nexport { GridBase as VuGridBase, GridColumn as VuGridColumn, GridColumnGroup as VuGridColumnGroup, GridHeaderRow as VuGridHeaderRow } from './components/gridbase';\nexport { Pagination as VuPagination } from './components/pagination';\nexport { TextBox as VuTextBox } from './components/textbox';\nexport { NumberBox as VuNumberBox } from './components/numberbox';\nexport { Tree as VuTree } from './components/tree';\nexport { Tooltip as VuTooltip } from './components/tooltip';\nexport { Calendar as VuCalendar } from './components/calendar';\nexport { CheckBox as VuCheckBox } from './components/checkbox';\nexport { ComboBox as VuComboBox } from './components/combobox';\nexport { ComboTree as VuComboTree } from './components/combotree';\nexport { ComboGrid as VuComboGrid } from './components/combogrid';\nexport { SwitchButton as VuSwitchButton } from './components/switchbutton';\nexport { RadioButton as VuRadioButton } from './components/radiobutton';\nexport { Tabs as VuTabs, TabPanel as VuTabPanel } from './components/tabs';\nexport { TimeSpinner as VuTimeSpinner } from './components/timespinner';\nexport { TimePicker as VuTimePicker } from './components/timepicker';\nexport { DateTimeSpinner as VuDateTimeSpinner } from './components/datetimespinner';\nexport { Layout as VuLayout, LayoutPanel as VuLayoutPanel } from './components/layout';\nexport { Menu as VuMenu, MenuItem as VuMenuItem, SubMenu as VuSubMenu, MenuSep as VuMenuSep } from './components/menu';\nexport { MenuButton as VuMenuButton } from './components/menubutton';\nexport { SplitButton as VuSplitButton } from './components/splitbutton';\nexport { PasswordBox as VuPasswordBox } from './components/passwordbox';\nexport { DateBox as VuDateBox } from './components/datebox';\nexport { DateTimeBox as VuDateTimeBox } from './components/datetimebox';\nexport { Draggable as VuDraggable, DraggableProxy as VuDraggableProxy } from './components/draggable';\nexport { Droppable as VuDroppable } from './components/droppable';\nexport { Resizable as VuResizable } from './components/resizable';\nexport { Dialog as VuDialog } from './components/dialog';\nexport { Drawer as VuDrawer } from './components/drawer';\nexport { ProgressBar as VuProgressBar } from './components/progressbar';\nexport { DataGrid as VuDataGrid } from './components/datagrid';\nexport { TreeGrid as VuTreeGrid } from './components/treegrid';\nexport { Slider as VuSlider } from './components/slider';\nexport { TagBox as VuTagBox } from './components/tagbox';\nexport { SearchBox as VuSearchBox } from './components/searchbox';\nexport { Form as VuForm, FormField as VuFormField } from './components/form';\nexport { SideMenu as VuSideMenu } from './components/sidemenu';\nexport { Messager as VuMessager, MessagerDialog as VuMessagerDialog } from './components/messager';\nexport { Rate as VuRate } from './components/rate';\nexport { Swiper as VuSwiper, SwiperPanel as VuSwiperPanel } from './components/swiper';\n\n// 导出类型(如果需要)\nexport type { PanelProps, PanelInstance } from './components/panel/types';\nexport type { LinkButtonProps, LinkButtonInstance, ButtonGroupProps, ButtonGroupInstance } from './components/linkbutton/types';\nexport type { TextBoxProps, TextBoxInstance } from './components/textbox/types';\nexport type { DialogInstance } from './components/dialog/types';\nexport type { DrawerInstance } from './components/drawer/types';\n\n// 导出工具类和其他内容\nexport { Locale, ValidateRules, EventHub };\n\nexport default ViteUI;\n"],"names":["value","param","len","params","path","defValue","pp","key","l","event","__publicField","touchEvent","touch","_a","_b","element","margin","el","width","style","height","selector","matchesSelector","current","parent","p","rect","left","top","offsetParent","offset","parentOffset","parentStyle","de","body","v","endchar","className","container","item","containerEl","itemEl","containerOffset","itemOffset","containerHeight","itemHeight","offsetTop","callback","heightStyle","onEnd","handler","fn","e","guid","events","evt","binding","_c","_d","expose","methodNames","propertyNames","onMounted","instance","getCurrentInstance","exposed","proxy","methodName","method","propName","prop","defineComponent","name","directives","SlideUpDown","props","title","String","iconCls","border","type","Boolean","default","animate","closed","collapsed","collapsible","closable","showHeader","showFooter","expandIconCls","collapseIconCls","closeIconCls","panelCls","panelStyle","Object","headerCls","headerStyle","bodyCls","bodyStyle","footerCls","footerStyle","setup","slots","collapsedState","ref","closedState","animateState","collapseToShrinkBody","headerRef","bodyRef","footerRef","watch","hasHeader","computed","header","hasFooter","footer","panelClasses","filter","headerClasses","bodyClasses","footerClasses","collapsibleClasses","closableClasses","clickCollapsibleTool","clickCloseTool","panelHeader","headerTitle","cls","icon","push","_createVNode","headerIcon","panelTools","panelBody","_withDirectives","_resolveDirective","disabled","panelFooter","useExpose","multiple","selectedIndex","Number","Array","panels","accordionClasses","initPanels","length","forEach","isLast","last","initSelectedPanel","selectedPanels","selectedState","getPanels","_p","index","nextTick","addPanel","panel","slice","removePanel","indexOf","splice","getPanel","indexes","result","getSelectedPanels","getSelectedPanel","getPanelIndex","i","getSelectedIndex","select","unselect","undefined","proxyAttrs","buildProxy","renderHeader","overrides","h","collapsibleCls","closableCls","onCollapsible","onClose","renderBody","children","withDirectives","renderFooter","renderPanel","panelProps","selected","inst","pb","usePanelBase","rootRef","$parent","uid","$emit","setTimeout","window","EventHub","clickHandler","domHelper","closest","target","stopPropagation","addEventListener","onBeforeUnmount","removeEventListener","classes","ctx","attrs","btnRef","focused","afterClick","baseIsEmpty","isEmpty","baseIsDisabled","isDisabled","baseBtnIconCls","btnIconCls","baseBtnLeftCls","btnLeftCls","baseInnerCls","attrClass","innerCls","focus","blur","baseOnClick","onClick","baseRenderInner","content","Fragment","renderInner","renderOthers","proxyRef","linkButtonProps","lb","useLinkButtonBase","href","assign","btnStyle","selectionMode","buttons","initButtons","btn","b","addButton","button","removeButton","next","flush","FileButtonFileId","emit","fileId","files","fileRef","onFileSelect","autoUpload","upload","url","xhr","XMLHttpRequest","formData","FormData","f","append","lengthComputable","percent","Math","ceil","loaded","total","onreadystatechange","readyState","status","open","withCredentials","send","clear","accept","capture","getParent","calcIsDisabled","pageNumberState","pageCount","loading","iconAlign","preventDefault","selectPage","refreshPage","plain","pageList","pageSize","pageSizeState","onChange","parseInt","map","page","pages","begin","floor","links","end","LinkButton","pageNumber","newValue","onBlur","onKeyDown","keyCode","beforePageText","afterPageInfo","showPageList","showPageInfo","showPageRefresh","locale","Locale","t","afterPageText","displayMsg","layout","lastState","pagination","pageInfo","info","from","to","min","replace","_isButton","_adjustPage","state","refresh","first","prev","initProxy","_Fragment","PaginationList","PaginationLink","PaginationManual","PaginationButton","lazy","rowHeight","maxDivHeight","maxVisibleHeight","data","scrollPosition","emits","innerData","items","waitingPage","fetchingPage","startIndex","deltaTopHeight","topHeights","bottomHeights","totalState","isUpdating","isNewFetching","scrollPositionState","contentRef","topRef","bottomRef","getTotalState","getPageNumberState","rowHeightState","maxVisibleHeightState","maxDivHeightState","setData","scrolling","deep","scrollTop","relativeScrollTop","scrollState","populate","onScroll","scrollLeft","relativeTop","loadPage","fetchPage","bodyHeight","outerHeight","bodyOffset","bottom","scrollTopValue","topHeight","bottomHeight","splitHeights","spos","lastCount","count","leftHeight","heights","itemsData","concat","start","source","overrideFuncs","pageState","highlightRow","highlightCell","selectionModeState","selectedRows","selectedCells","rows","filteredData","filterRules","selectionValue","callAfterSelectionChange","args","callSortData","callSetGroupData","setPageData","filterData","isMatch","row","rules","rule","op","matched","setSelectionValue","doFilter","removeFilterRule","addFilterRule","isCellSelectionMode","getSelectedCellIndex","column","cell","isHighlighted","isSelected","selectRow","unselectRow","selectCell","unselectCell","clearSelections","navRow","step","getFilterRuleIndex","field","getFilterRule","onPageChange","onVirtualPageChange","onRowClick","onCellClick","doEnter","updateAfterSelectionChange","func","_isSlot","s","prototype","toString","call","_isVNode","listBaseProps","itemStyle","itemCls","hoverCls","selectedCls","useListBase","sortData","setGroupData","afterSelectionChange","_listBase_setData","_listBase_setPageData","_listBase_navRow","_listBase_addFilterRule","vrows","innerRef","vscrollRef","pageTopRef","pageBottomRef","innerClasses","virtualScroll","innerStyle","overflow","virtualItemStyle","getItemClass","cc","join","getRowIndex","renderPagination","position","pagePosition","Pagination","renderLoading","loadMsg","renderEmpty","empty","renderList","rowIndex","onMouseenter","onMouseleave","renderVirtualList","_slot","VirtualScroll","align","class","for","labelRef","labelClasses","labelStyle","textAlign","att","document","createAttribute","setAttributeNode","invalidState","form","fieldName","afterFocus","afterBlur","afterValueChange","setValid","valid","fieldBase","inputRef","initialValue","valueState","textState","defaultTextFormatter","setValue","previousValue","onInput","getSelectionRange","getSelectionStart","setSelectionRange","range","baseClasses","inputClasses","addonClasses","addonIconClasses","text","renderInput","extraInputAttrs","common","visibleInput","hiddenValue","renderAddon","slotDefault","renderField","renderOthersOverride","others","handlers","ib","onClickUp","onClickDown","renderHorizontal","upcls","downcls","renderVertical","renderDefault","sp","input","panelRef","panelClosed","panelLeft","panelTop","getRootEl","arrowClasses","arrowAlign","onDocumentClick","inputEl","togglePanel","panelEl","rootEl","closePanel","onDocumentMouseWheel","alignPanel","view","pos","hwidth","pwidth","hheight","pheight","openPanelRaw","ps","closePanelRaw","openPanel","renderArrow","format","selections","formatTokens","token","dateTokens","date","parser","year","val","formatToken","dateToken","formatN","formatter","match","node","checkState","nodes","changed","pnode","cnode","checkedCount","uncheckedCount","fromNodes","n","striped","rowCss","Function","frozenWidth","frozenAlign","sorts","multiSort","editMode","tipOptions","clickToEdit","dblclickToEdit","footerData","columnResizing","columnMoving","cellSpan","rowspan","colspan","view1","view2","view3","leftGroup","rightGroup","centerGroup","leftColumns","rightColumns","centerColumns","columnRefs","groupRefs","sortsState","isArray","editingItem","headerHeight","splitStyle","hasDestroyed","columnTimer","allColumns","footerRows","leftFrozenWidth","widthState","rightFrozenWidth","getColumnLayout","group","aa","getColumnCount","columns","c","hidden","col","colIndex","getColumnIndex","r","a","initColumnSort","currOrder","sort","order","findColumn","changeColumns","clearTimeout","initColumns","initHeaderHeight","newState","g","frozen","frozenState","frozenColumns","grid","h1","h2","h3","max","initFilterRules","filterValue","filterOperator","addColumn","removeColumn","addColumnGroup","removeColumnGroup","onBodyScroll","addSort","nextOrder","resizeColumn","toStyleValue","moveColumn","fromField","toField","point","leftCount","centerCount","columnRefsCopy","fromIndex","findIndex","fromCol","toIndex","isEditing","idField","beginEdit","rowEl","endEdit","originalValue","querySelector","invalid","cancelEdit","$refs","scrollTo","eventHub","$on","tab","vnode","isChild","$el","$off","$slots","sortable","halign","components","DataList","validateOnCreate","validateOnBlur","validateOnChange","readonly","editable","placeholder","multiline","tabindex","inputCls","inputStyle","inputId","textFormatter","hasDownArrow","arrowIconCls","panelAlign","separator","delay","modelValue","valueField","textField","groupField","limitToList","mappingTexts","datalistScrollTop","inputingText","displayingText","lastFilterValue","selection","timer","datalistRef","fb0","useFieldBase","cb","defaultFilter","q","toLowerCase","trim","setText","updateSelection","oldSelection","arr","findItem","finder","it","list","selItems","updateText","mt","tt","vs","fixValue","vv","used","split","textVal","remaining","highlightFirstRow","which","datalist","onSelectionChange","eventArray","eventObj","initTextMapping","useComboBase","displayText","ftext","renderContent","listslots","scope","bind","unbind","display","cbRef","initData","filterOperators","operator","d","ComboBox","_mergeProps","onFocus","isOnLeft","filterBtnPosition","isOnRight","leftButton","GridFilterButton","rightButton","GridFilterCell","opts","_e","dir","handles","resizeData","_DraggableClass","handle","x1","y1","x2","y2","dragData","parentNode","dropObj","p2","proxyCls","proxyStyle","containerRef","reverting","proxyClasses","proxyStyles","baseStyle","onTransitionEnd","appendChild","GridHeaderCell","GridFilterRow","DraggableProxy","Resizable","Draggable","Droppable","columnGroup","paddingWidth","filterable","heightState","scrollLeftState","hoverColumn","dragScope","filterOnTop","filterPosition","filterOnBottom","originalEvent","getResizableOpts","resizing","onColumnResizing","resizeStop","onColumnResizeStop","getDraggableOpts","revert","deltaX","deltaY","edge","dragStart","onColumnDragStart","getDroppableOpts","dragOver","onColumnDragOver","dragLeave","_scope","onColumnDragLeave","drop","onColumnDrop","viewOffset","viewRef","diff","currDroppable","outerWidth","renderGroupCells","renderRowCells","dragScopeValue","GridFooterCell","headerPaddingWidth","viewCls","idx","getRefs","getBodyRef","getHeaderPaddingWidth","refs","onResize","useInputBase","raw","immediate","model","messages","labelPosition","labelAlign","labelWidth","floatingLabel","errorType","tooltipPosition","fields","errors","fieldAdd","validateField","fieldRemove","fieldFocus","fieldBlur","fieldChange","validate","vtotal","vcount","getErrors","validity","isValid","setMessage","message","msg","RegExp","doValidate","vtype","vparam","validateRules","ValidateRules","validator","Promise","then","parts","exec","ruleType","paramStr","eval","keys","hasError","getError","fieldErrors","getValue","isFocused","ff","FormFieldIdIndex","__name","fieldClasses","formValue","error","focusedValue","renderLabel","labelCls","label","Label","labelFor","renderError","errorStyle","tip","formRef","gridInstance","gridProxy","onValidate","fieldError","errCount","errField","isEditable","TextBox","currentValue","_cell","Form","editRules","editMessages","gridBody","gridValue","viewIndex","groupSlot","dataGridInjection","inject","DATAGRID_INJECTION_KEY","showExpandIcon","onRowDblClick","onRowContextMenu","onCellDblClick","cellEl","currentTarget","doEdit","onCellContextMenu","onCellKeyDown","onGroupExpanderClick","toggleGroup","onDetailExpanderClick","toggleRow","_rowIndex","getAbsoluteIndex","getCss","css","cssValue","getRowClass","getRowStyle","getCellClass","cellCss","getCellStyle","getCellSpan","hasCellSpan","span","renderGroupRow","isGroupRow","expanderWidth","DataGridRowGroup","renderDefaultRow","rowClass","rowStyle","rowIndexValue","_event","expander","isRowExpanded","GridBodyCell","renderDetailRow","DataGridRowDetail","scrollbarWidth","gridBodyProps","scrollTopState","marginTop","currRows","isVirtualScroll","base","useGridBodyBase","vscroll","onVirtualScroll","onVirtualPageUpdate","st","updateFrozenView","DataGridTable","gridViewProps","gv","useGridViewBase","onHeaderCellClick","GridHeader","DataGridBody","GridFooter","fd","gr","ss","cr","eh","gridBaseProps","aggregate","gb","useGridBase","groupData","expandedRows","frozenRows","_groupRow","isGrouped","getGroup","groups","gg","makeGroup","makeGroupedRows","dataRows","getIndex","currIndex","groupedRows","lastRows","unshift","tr","sortFunc","r1","r2","sorter","collapseGroup","expandGroup","getExpandedIndex","collapseRow","expandRow","pageLayout","pageLinks","datagrid","provide","emptyMsg","DataGridView","GridEmpty","isFiltering","filterDelay","render","_props","addRow","removeRow","reversed","spinners","spinAlign","increment","precision","decimalSeparator","groupSeparator","prefix","suffix","sb","numValue","parseFloat","toFixed","s1","s2","dpos","substring","test","str","isNaN","parsedValue","formatted","metaKey","ctrlKey","fromCharCode","onKeyPress","doSpinUp","doSpinDown","useSpinnerBase","renderSpinnerOthers","onText","offText","handleText","buttonClasses","checked","values","setChecked","isChecked","initChecked","updateValues","onClickButton","previousChecked","checkClasses","initValue","radioClasses","tree","tooltipIdIndex","component","propsData","store","tooltipCls","tooltipStyle","zIndex","trackMouse","trackMouseX","trackMouseY","valign","showDelay","hideDelay","tooltipShow","tooltipHide","tooltipRef","arrowOuterRef","arrowInnerRef","contentState","targetWidth","targetHeight","tipWidth","tipHeight","showTimer","hideTimer","tooltipClasses","tooltipStyles","clearTimeouts","getPosition","newLeft","newTop","tWidth","tHeight","tTipWidth","tTipHeight","reposition","getViewport","getScrollTop","getScrollLeft","arrowLeft","newArrowLeft","bc","borderColor","backColor","backgroundColor","setClosed","show","hide","onMouseEnter","onMouseLeave","updateProps","showProps","hideProps","showEvent","hideEvent","eventName","Tip","createVNode","Tooltip","editorRef","getInput","autoSizeInput","getComputedStyle","tmp","createElement","fontFamily","fontSize","fontWeight","whiteSpace","innerHTML","inputWidth","removeChild","editor","TreeNode","depth","nodeCls","dndCls","onBeforeMount","isExpanded","isCollapsed","selectionState","isLeaf","indentWidth","nodeClasses","highlightNode","hitClasses","iconClasses","checkboxClasses","dnd","onDragStart","dragEnd","onDragEnd","dropDisabled","onDragOver","onDragLeave","onDrop","obj","dragCls","treeHelper","forNodes","pageY","moveNode","toggle","onClickNode","selectNode","onDblClickNode","onCheckNode","uncheckNode","checkNode","onNodeContextMenu","TreeNodeIcon","checkboxState","TreeNodeTitle","TreeNodeEditor","selectLeafOnly","checkbox","cascadeCheck","dndStyle","filterIncludingChild","qq","$vue","getCheckedNodes","uncheckAllNodes","adjustCheck","showNode","hideNode","fchildren","pchildren","expandNode","collapseNode","toggleNode","expandAll","collapseAll","getNode","id","getNodeBy","getChildren","getRoot","getSiblings","getPath","findNode","insert","before","remove","update","_createTextVNode","required","isHorizontal","tabWidth","tabHeight","headerWidth","tabPosition","narrow","justified","scrollable","scrollIncrement","selectedHis","scrollDistance","maxScrollDistance","tabsRef","tabsWrapRef","isScrollable","usedPanels","isUsed","containerClasses","tabsClasses","tabsStyle","isScrollerVisible","removeHis","setMaxScrollDistance","scrollWidth","wrapWidth","offsetWidth","onClickTab","onCloseTab","close","isFirst","setScrollers","pop","addHis","li","right","distance","scrollBy","backHis","resize","TabPanelHeader","tools","proxyPanel","tabs","highlight","highlightState","highlighting","defaultFormatter","dateHelper","formatDate","parseD","parseDate","defaultParser","parsed","Date","onClickMe","highlightRange","textValue","doSpin","down","s3","elRef","radius","hour24","grandParent","hourDistance","getData","newType","w","size","getHour24","itemValue","itemClasses","is24","angular","PI","x","sin","y","cos","transform","clockStyle","marginLeft","handStyle","onItemClick","hour24Value","ampm","selectingType","selectingAmpm","hour","minute","hm","getHourStr","getMinuteStr","m","onAmpmClick","onClockSelect","ampmValue","TimeClock","TimePanel","closeText","okText","selectingValue","onOk","onTimeChange","tsRef","TimeSpinner","region","visible","panelStyles","paddingTop","paddingBottom","collapsedSize","expand","onPanelClick","onClickCollapsible","layoutCls","layoutStyle","layoutRef","paddings","paddingLeft","paddingRight","layoutClasses","layoutStyles","padding","getPaddingValue","float","updatePaddings","cp","isExpanding","collapse","collapseTitle","east","west","north","south","CollapsedPanel","resizeOpts","borderWidth","icons","setResizeOpts","onSlideEnd","collapsibleClass","MenuZIndex","menuCls","menuStyle","menuWidth","inline","noline","duration","subItems","isDisplaying","menuWidthState","containerStyle","minWidth","menubutton","addItem","removeItem","afterItemClick","onMouseOver","onMouseOut","delayHide","subMenu","found","unhighlight","leftValue","topValue","showAt","alignTo","menuHeight","menubuttonValue","setMenu","menu","subMenuRef","menuClasses","isActived","menuStyles","alignMenu","parentEl","updateSubMenu","menuValue","onClickItem","subMenuInstance","menuAlign","initProps","showMenu","passwordChar","checkInterval","lastDelay","showEye","eyeAlign","revealed","revealedState","lastTimer","cursorPos","processing","convert","originalText","proc","all","pchar","eyeClasses","eyeIconClasses","valueStr","weeks","months","showWeek","weekNumberHeader","firstDay","getFullYear","month","getMonth","yearState","monthState","highlightDay","highlightMonth","headerData","bodyData","saIndex","suIndex","toDate","day","toArray","getDate","isDiff","date1","date2","isToday","now","getWeekNumber","checkDate","getTime","setDate","getDay","time","setMonth","round","calcWeekNumber","week","getHeaderData","data1","data2","getWeeks","dates","lastDay","memoDay","shift","dayValue","firstWeek","firstDate","lastWeek","lastDate","moveTo","highlightDate","selectDate","navDate","nextYear","prevYear","nextMonth","prevMonth","onDayClick","onMonthClick","monthName","renderDays","weekIndex","dayIndex","renderMenu","Calendar","currentText","calendarRef","txt","setFullYear","getParsedValueState","getFormattedValue","calendar","selectToday","DialogZIndex","borderType","dialogCls","dialogStyle","modal","draggable","resizable","draggableOptions","resizableOptions","dragOpts","maskEl","setDragOpts","headerEl","openMask","addClass","closeMask","moveToTop","hcenter","vwidth","vcenter","vheight","scrollTop0","center","displaying","initDialog","dialogProps","drawerCls","drawerStyle","maskClosable","isChanging","onClickMask","mousedown","showValue","barCls","barStyle","barClasses","barStyles","prow","isTreeField","treeField","td","onCheckRow","uncheckRow","checkRow","_col","onDblclick","isTreeFieldValue","isEditableValue","cellSelected","cellHighlighted","TreeGridTitle","TreeGridChildren","TreeGridRow","TreeGridBody","getCheckedRows","uncheckAllRows","_sort","TreeGridView","mode","showTip","sliderRef","sinnerRef","newModelValue","sliderClasses","value1","value2","displayingRule","reverse","value2pos","pos2value","adjustedPos","getPosStyle","getRuleValueStyle","setPos","second","abs","v1","v2","onDragHandle","applyDrag","doDown","myEvent","MyEvent","pageX","dragOpts1","axis","cursor","drag","dragOpts2","_v","tagCss","getWidth","removeTag","getTagClass","getTagStyle","renderLabels","category","buttonAlign","buttonIconCls","menuBtnText","menuBtnIcon","categoryState","mbRef","mbClasses","doSearch","setCategory","initMenu","menuVNode","ds","MenuButton","sidemenu","iconSlot","accordionRef","onPanelSelect","dataItem","onPanelUnselect","Accordion","AccordionPanel","Tree","onNodeClick","SideMenuIcon","floatMenuWidth","floatMenuPosition","getTipOpts","SideMenuItems","tipClosed","selectItem","parentInstance","expandItem","collapseItem","toggleItem","messagerType","buttonsRef","inputValue","messagerIcon","dialog","closeDialog","dialogValue","resultValue","MessagerContent","messagerIdIndex","closeMe","minHeight","options","dialogs","dlg","vn","cascadeText","updatingText","trees","valueArray","texts","currNode","setTree","afterCheckChange","datagridScrollTop","grids","findRow","setGrid","dg","sel","tf","timeFormat","timeValue","selectedDate","selectOk","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","half","color","selectedColor","currValue","getStartStyle","startStyle","selectedStyle","onMouseover","onMouseout","_index","_first","_item","autoplay","interval","indicator","innerSelected","autoplayTimer","transitionDuration","panelIndex","handleDotClick","setInterval","clearInterval","outerStyle","tcss","willChange","app","directive"],"mappings":"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"}
|