@easy-editor/setters 0.1.0 → 0.1.1

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/dist/index.cjs CHANGED
@@ -3,8 +3,74 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React$1 = require('react');
6
+ var reactDom = require('react-dom');
6
7
  var jsxRuntime = require('react/jsx-runtime');
7
8
 
9
+ /**
10
+ * Popover - 共享弹窗组件
11
+ * - 使用 Portal 渲染到 document.body,避免被父容器遮挡
12
+ * - 自动匹配触发器宽度
13
+ */
14
+ const Popover = props => {
15
+ const {
16
+ open,
17
+ onClose,
18
+ trigger,
19
+ children,
20
+ width = 'trigger'
21
+ } = props;
22
+ const triggerRef = React$1.useRef(null);
23
+ const [position, setPosition] = React$1.useState({
24
+ top: 0,
25
+ left: 0
26
+ });
27
+ const [popoverWidth, setPopoverWidth] = React$1.useState(0);
28
+
29
+ // 计算弹窗位置
30
+ React$1.useEffect(() => {
31
+ if (open && triggerRef.current) {
32
+ const triggerRect = triggerRef.current.getBoundingClientRect();
33
+ const triggerWidth = triggerRect.width;
34
+
35
+ // 设置弹窗宽度
36
+ if (width === 'trigger') {
37
+ setPopoverWidth(triggerWidth);
38
+ }
39
+ setPosition({
40
+ top: triggerRect.bottom + 4,
41
+ left: triggerRect.left
42
+ });
43
+ }
44
+ }, [open, width]);
45
+
46
+ // 点击外部关闭
47
+ React$1.useEffect(() => {
48
+ const handleClickOutside = event => {
49
+ const target = event.target;
50
+ const popoverEl = document.querySelector('.es-popover-portal');
51
+ if (popoverEl && !popoverEl.contains(target) && triggerRef.current && !triggerRef.current.contains(target)) {
52
+ onClose();
53
+ }
54
+ };
55
+ if (open) {
56
+ document.addEventListener('mousedown', handleClickOutside);
57
+ return () => document.removeEventListener('mousedown', handleClickOutside);
58
+ }
59
+ }, [open, onClose]);
60
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
61
+ ref: triggerRef
62
+ }, trigger), open && /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/React.createElement("div", {
63
+ className: "es-popover-portal",
64
+ style: {
65
+ position: 'fixed',
66
+ top: position.top,
67
+ left: position.left,
68
+ width: popoverWidth || 'auto',
69
+ zIndex: 1000
70
+ }
71
+ }, children), document.body));
72
+ };
73
+
8
74
  function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
9
75
 
10
76
  function cn(...inputs) {
@@ -3831,7 +3897,7 @@ var Sketch = /*#__PURE__*/React$1.forwardRef((props, ref) => {
3831
3897
  });
3832
3898
  Sketch.displayName = 'Sketch';
3833
3899
 
3834
- var styles$i = {"trigger":"es-trigger-w-aUi","colorPreview":"es-colorPreview-SUgiJ","colorValue":"es-colorValue-cYdRP","popover":"es-popover-SfIUB","popoverHidden":"es-popoverHidden-GCAC8"};
3900
+ var styles$i = {"trigger":"es-trigger-w-aUi","colorPreview":"es-colorPreview-SUgiJ","colorValue":"es-colorValue-cYdRP","popover":"es-popover-SfIUB"};
3835
3901
 
3836
3902
  const ColorSetter = props => {
3837
3903
  const {
@@ -3841,40 +3907,25 @@ const ColorSetter = props => {
3841
3907
  disableAlpha = false
3842
3908
  } = props;
3843
3909
  const [open, setOpen] = React$1.useState(false);
3844
- const containerRef = React$1.useRef(null);
3845
- React$1.useEffect(() => {
3846
- const handleClickOutside = event => {
3847
- if (containerRef.current && !containerRef.current.contains(event.target)) {
3848
- setOpen(false);
3910
+ return /*#__PURE__*/React.createElement(Popover, {
3911
+ open: open,
3912
+ onClose: () => setOpen(false),
3913
+ trigger: /*#__PURE__*/React.createElement("button", {
3914
+ "aria-label": "Select color",
3915
+ className: styles$i.trigger,
3916
+ onClick: () => setOpen(true),
3917
+ type: "button"
3918
+ }, /*#__PURE__*/React.createElement("div", {
3919
+ "aria-label": "Current color",
3920
+ className: styles$i.colorPreview,
3921
+ style: {
3922
+ backgroundColor: value ?? initialValue
3849
3923
  }
3850
- };
3851
- if (open) {
3852
- document.addEventListener('mousedown', handleClickOutside);
3853
- }
3854
- return () => {
3855
- document.removeEventListener('mousedown', handleClickOutside);
3856
- };
3857
- }, [open]);
3858
- return /*#__PURE__*/React.createElement("div", {
3859
- ref: containerRef,
3860
- style: {
3861
- position: 'relative'
3862
- }
3863
- }, /*#__PURE__*/React.createElement("button", {
3864
- "aria-label": "Select color",
3865
- className: styles$i.trigger,
3866
- onClick: () => setOpen(!open),
3867
- type: "button"
3924
+ }), /*#__PURE__*/React.createElement("span", {
3925
+ className: styles$i.colorValue
3926
+ }, value ?? initialValue))
3868
3927
  }, /*#__PURE__*/React.createElement("div", {
3869
- "aria-label": "Current color",
3870
- className: styles$i.colorPreview,
3871
- style: {
3872
- backgroundColor: value ?? initialValue
3873
- }
3874
- }), /*#__PURE__*/React.createElement("span", {
3875
- className: styles$i.colorValue
3876
- }, value ?? initialValue)), /*#__PURE__*/React.createElement("div", {
3877
- className: cn(styles$i.popover, !open && styles$i.popoverHidden)
3928
+ className: styles$i.popover
3878
3929
  }, /*#__PURE__*/React.createElement(Sketch, {
3879
3930
  color: value,
3880
3931
  disableAlpha: disableAlpha,
@@ -3883,7 +3934,7 @@ const ColorSetter = props => {
3883
3934
  })));
3884
3935
  };
3885
3936
 
3886
- var styles$h = {"container":"es-container-df9wM","trigger":"es-trigger-fTNvQ","triggerIcon":"es-triggerIcon-1mdQ0","triggerIconPrimary":"es-triggerIconPrimary-opifh","triggerIconMuted":"es-triggerIconMuted-CWgDl","triggerText":"es-triggerText-WeQRu","popover":"es-popover-z8oiW","popoverHidden":"es-popoverHidden-kLhMd","tabsList":"es-tabsList-liSeY","tabTrigger":"es-tabTrigger-6j7K-","tabTriggerActive":"es-tabTriggerActive-g6hcl","tabTriggerIcon":"es-tabTriggerIcon-dRSAp","tabContent":"es-tabContent--H166","tabContentActive":"es-tabContentActive-Fjdu5","section":"es-section-eDYxd","sectionLabel":"es-sectionLabel--LHE8","input":"es-input--OymK","inputMono":"es-inputMono-pCJz3","textarea":"es-textarea-iurkc","booleanButtons":"es-booleanButtons-0bM8P","booleanButton":"es-booleanButton-3fXcB","booleanButtonActive":"es-booleanButtonActive-zGWrZ","datasourceList":"es-datasourceList-VIRXb","datasourceButton":"es-datasourceButton-giz6D","datasourceButtonActive":"es-datasourceButtonActive-m5WPP","datasourceIcon":"es-datasourceIcon-q9Omt","emptyState":"es-emptyState-rI2si","hint":"es-hint-zfWLZ","preview":"es-preview-tUInw"};
3937
+ var styles$h = {"trigger":"es-trigger-fTNvQ","triggerIcon":"es-triggerIcon-1mdQ0","triggerIconPrimary":"es-triggerIconPrimary-opifh","triggerIconMuted":"es-triggerIconMuted-CWgDl","triggerText":"es-triggerText-WeQRu","popoverContent":"es-popoverContent-6qE--","tabsList":"es-tabsList-liSeY","tabTrigger":"es-tabTrigger-6j7K-","tabTriggerActive":"es-tabTriggerActive-g6hcl","tabTriggerIcon":"es-tabTriggerIcon-dRSAp","tabContent":"es-tabContent--H166","tabContentActive":"es-tabContentActive-Fjdu5","section":"es-section-eDYxd","sectionLabel":"es-sectionLabel--LHE8","input":"es-input--OymK","inputMono":"es-inputMono-pCJz3","textarea":"es-textarea-iurkc","booleanButtons":"es-booleanButtons-0bM8P","booleanButton":"es-booleanButton-3fXcB","booleanButtonActive":"es-booleanButtonActive-zGWrZ","datasourceList":"es-datasourceList-VIRXb","datasourceButton":"es-datasourceButton-giz6D","datasourceButtonActive":"es-datasourceButtonActive-m5WPP","datasourceIcon":"es-datasourceIcon-q9Omt","emptyState":"es-emptyState-rI2si","hint":"es-hint-zfWLZ","preview":"es-preview-tUInw"};
3887
3938
 
3888
3939
  const defaultValue$3 = {
3889
3940
  type: 'static',
@@ -3901,20 +3952,6 @@ const DataBindingSetter = props => {
3901
3952
  const currentValue = value ?? initialValue ?? defaultValue$3;
3902
3953
  const [open, setOpen] = React$1.useState(false);
3903
3954
  const [activeTab, setActiveTab] = React$1.useState(currentValue.type);
3904
- const containerRef = React$1.useRef(null);
3905
- React$1.useEffect(() => {
3906
- const handleClickOutside = event => {
3907
- if (containerRef.current && !containerRef.current.contains(event.target)) {
3908
- setOpen(false);
3909
- }
3910
- };
3911
- if (open) {
3912
- document.addEventListener('mousedown', handleClickOutside);
3913
- }
3914
- return () => {
3915
- document.removeEventListener('mousedown', handleClickOutside);
3916
- };
3917
- }, [open]);
3918
3955
  const updateBinding = React$1.useCallback(updates => {
3919
3956
  onChange({
3920
3957
  ...currentValue,
@@ -4011,18 +4048,20 @@ const DataBindingSetter = props => {
4011
4048
  text: '静态数据'
4012
4049
  };
4013
4050
  }, [currentValue, dataSources]);
4014
- return /*#__PURE__*/React.createElement("div", {
4015
- className: styles$h.container,
4016
- ref: containerRef
4017
- }, /*#__PURE__*/React.createElement("button", {
4018
- "aria-label": "Data binding",
4019
- className: styles$h.trigger,
4020
- onClick: () => setOpen(!open),
4021
- type: "button"
4022
- }, bindingStatus.icon, /*#__PURE__*/React.createElement("span", {
4023
- className: styles$h.triggerText
4024
- }, bindingStatus.text)), /*#__PURE__*/React.createElement("div", {
4025
- className: cn(styles$h.popover, open === false ? styles$h.popoverHidden : '')
4051
+ return /*#__PURE__*/React.createElement(Popover, {
4052
+ open: open,
4053
+ onClose: () => setOpen(false),
4054
+ width: 300,
4055
+ trigger: /*#__PURE__*/React.createElement("button", {
4056
+ "aria-label": "Data binding",
4057
+ className: styles$h.trigger,
4058
+ onClick: () => setOpen(true),
4059
+ type: "button"
4060
+ }, bindingStatus.icon, /*#__PURE__*/React.createElement("span", {
4061
+ className: styles$h.triggerText
4062
+ }, bindingStatus.text))
4063
+ }, /*#__PURE__*/React.createElement("div", {
4064
+ className: styles$h.popoverContent
4026
4065
  }, /*#__PURE__*/React.createElement("div", {
4027
4066
  className: styles$h.tabsList,
4028
4067
  role: "tablist"
@@ -4084,7 +4123,7 @@ const DataBindingSetter = props => {
4084
4123
  }, "\u7ED1\u5B9A\u540E\u53EF\u5728\u9884\u89C8\u6A21\u5F0F\u67E5\u770B\u6570\u636E")) : null))));
4085
4124
  };
4086
4125
 
4087
- var styles$g = {"container":"es-container-4VZqD","trigger":"es-trigger-rmYLl","triggerIcon":"es-triggerIcon-ktlTS","triggerText":"es-triggerText-B63By","popover":"es-popover-d9HQQ","popoverHidden":"es-popoverHidden-fDKLq","content":"es-content-3MmL0","header":"es-header-VoKF3","headerTitle":"es-headerTitle-vDZR8","headerCount":"es-headerCount-stTlN","mappingList":"es-mappingList-SLqhN","mappingItem":"es-mappingItem-xtRLl","mappingHeader":"es-mappingHeader-LwKiY","mappingTitle":"es-mappingTitle-IMhzw","mappingRequired":"es-mappingRequired-tP6L-","mappingType":"es-mappingType-nyqrh","mappingRow":"es-mappingRow-lFfhT","select":"es-select-R4pIl","input":"es-input--LohJ","arrowIcon":"es-arrowIcon-QqWMM","targetField":"es-targetField-gSvGk","transformRow":"es-transformRow-O6MAG","transformIcon":"es-transformIcon-beXzy","transformInput":"es-transformInput-SyN2q","clearButton":"es-clearButton-Pm-uP","helpText":"es-helpText-IHqjo"};
4126
+ var styles$g = {"trigger":"es-trigger-rmYLl","triggerIcon":"es-triggerIcon-ktlTS","triggerText":"es-triggerText-B63By","popoverContent":"es-popoverContent-IIcFY","header":"es-header-VoKF3","headerTitle":"es-headerTitle-vDZR8","headerCount":"es-headerCount-stTlN","mappingList":"es-mappingList-SLqhN","mappingItem":"es-mappingItem-xtRLl","mappingHeader":"es-mappingHeader-LwKiY","mappingTitle":"es-mappingTitle-IMhzw","mappingRequired":"es-mappingRequired-tP6L-","mappingType":"es-mappingType-nyqrh","mappingRow":"es-mappingRow-lFfhT","select":"es-select-R4pIl","input":"es-input--LohJ","arrowIcon":"es-arrowIcon-QqWMM","targetField":"es-targetField-gSvGk","transformRow":"es-transformRow-O6MAG","transformIcon":"es-transformIcon-beXzy","transformInput":"es-transformInput-SyN2q","clearButton":"es-clearButton-Pm-uP","helpText":"es-helpText-IHqjo"};
4088
4127
 
4089
4128
  const defaultValue$2 = {
4090
4129
  mappings: []
@@ -4099,20 +4138,6 @@ const DataMappingSetter = props => {
4099
4138
  } = props;
4100
4139
  const currentValue = value ?? initialValue ?? defaultValue$2;
4101
4140
  const [open, setOpen] = React$1.useState(false);
4102
- const containerRef = React$1.useRef(null);
4103
- React$1.useEffect(() => {
4104
- const handleClickOutside = event => {
4105
- if (containerRef.current && !containerRef.current.contains(event.target)) {
4106
- setOpen(false);
4107
- }
4108
- };
4109
- if (open) {
4110
- document.addEventListener('mousedown', handleClickOutside);
4111
- }
4112
- return () => {
4113
- document.removeEventListener('mousedown', handleClickOutside);
4114
- };
4115
- }, [open]);
4116
4141
 
4117
4142
  // 获取字段的映射
4118
4143
  const getMapping = React$1.useCallback(targetField => currentValue.mappings.find(m => m.targetField === targetField), [currentValue.mappings]);
@@ -4148,22 +4173,22 @@ const DataMappingSetter = props => {
4148
4173
 
4149
4174
  // 统计已映射字段数
4150
4175
  const mappedCount = currentValue.mappings.filter(m => m.sourceField).length;
4151
- return /*#__PURE__*/React.createElement("div", {
4152
- className: styles$g.container,
4153
- ref: containerRef
4154
- }, /*#__PURE__*/React.createElement("button", {
4155
- "aria-label": "Data mapping",
4156
- className: styles$g.trigger,
4157
- onClick: () => setOpen(!open),
4158
- type: "button"
4159
- }, /*#__PURE__*/React.createElement(Settings2, {
4160
- className: styles$g.triggerIcon
4161
- }), /*#__PURE__*/React.createElement("span", {
4162
- className: styles$g.triggerText
4163
- }, "\u5B57\u6BB5\u6620\u5C04 (", mappedCount, "/", targetFields.length, ")")), /*#__PURE__*/React.createElement("div", {
4164
- className: cn(styles$g.popover, open === false ? styles$g.popoverHidden : '')
4176
+ return /*#__PURE__*/React.createElement(Popover, {
4177
+ open: open,
4178
+ onClose: () => setOpen(false),
4179
+ width: 320,
4180
+ trigger: /*#__PURE__*/React.createElement("button", {
4181
+ "aria-label": "Data mapping",
4182
+ className: styles$g.trigger,
4183
+ onClick: () => setOpen(true),
4184
+ type: "button"
4185
+ }, /*#__PURE__*/React.createElement(Settings2, {
4186
+ className: styles$g.triggerIcon
4187
+ }), /*#__PURE__*/React.createElement("span", {
4188
+ className: styles$g.triggerText
4189
+ }, "\u5B57\u6BB5\u6620\u5C04 (", mappedCount, "/", targetFields.length, ")"))
4165
4190
  }, /*#__PURE__*/React.createElement("div", {
4166
- className: styles$g.content
4191
+ className: styles$g.popoverContent
4167
4192
  }, /*#__PURE__*/React.createElement("div", {
4168
4193
  className: styles$g.header
4169
4194
  }, /*#__PURE__*/React.createElement("span", {
@@ -4229,10 +4254,10 @@ const DataMappingSetter = props => {
4229
4254
  }, "\u6E05\u9664\u6620\u5C04") : null);
4230
4255
  })), /*#__PURE__*/React.createElement("div", {
4231
4256
  className: styles$g.helpText
4232
- }, /*#__PURE__*/React.createElement("p", null, "\u2022 \u6E90\u5B57\u6BB5: \u6570\u636E\u6E90\u4E2D\u7684\u5B57\u6BB5\u8DEF\u5F84"), /*#__PURE__*/React.createElement("p", null, "\u2022 \u8F6C\u6362\u8868\u8FBE\u5F0F: \u5982 value * 100, value.toFixed(2)")))));
4257
+ }, /*#__PURE__*/React.createElement("p", null, "\u2022 \u6E90\u5B57\u6BB5: \u6570\u636E\u6E90\u4E2D\u7684\u5B57\u6BB5\u8DEF\u5F84"), /*#__PURE__*/React.createElement("p", null, "\u2022 \u8F6C\u6362\u8868\u8FBE\u5F0F: \u5982 value * 100, value.toFixed(2)"))));
4233
4258
  };
4234
4259
 
4235
- var styles$f = {"container":"es-container-pcCYY","trigger":"es-trigger-IjziC","triggerIcon":"es-triggerIcon-t21hp","triggerText":"es-triggerText-WQ-5H","popover":"es-popover-h2Vn-","popoverHidden":"es-popoverHidden-EiA3W","searchWrapper":"es-searchWrapper-jUGP6","searchIcon":"es-searchIcon-Qu4Cl","searchInput":"es-searchInput-YUlsM","section":"es-section-mWvKy","sectionTitle":"es-sectionTitle-4m6ZV","iconGrid":"es-iconGrid-hvHqv","iconButton":"es-iconButton-3y2jO","iconButtonSelected":"es-iconButtonSelected-01Ozi","iconButtonIcon":"es-iconButtonIcon-ur-nS","emptyMessage":"es-emptyMessage-dWKQh"};
4260
+ var styles$f = {"trigger":"es-trigger-IjziC","triggerIcon":"es-triggerIcon-t21hp","triggerText":"es-triggerText-WQ-5H","popover":"es-popover-h2Vn-","searchWrapper":"es-searchWrapper-jUGP6","searchIcon":"es-searchIcon-Qu4Cl","searchInput":"es-searchInput-YUlsM","section":"es-section-mWvKy","sectionTitle":"es-sectionTitle-4m6ZV","iconGrid":"es-iconGrid-hvHqv","iconButton":"es-iconButton-3y2jO","iconButtonSelected":"es-iconButtonSelected-01Ozi","iconButtonIcon":"es-iconButtonIcon-ur-nS","emptyMessage":"es-emptyMessage-dWKQh"};
4236
4261
 
4237
4262
  // 图标映射表
4238
4263
  const iconMap = {
@@ -4355,20 +4380,6 @@ const IconSetter = props => {
4355
4380
  const [open, setOpen] = React$1.useState(false);
4356
4381
  const [searchQuery, setSearchQuery] = React$1.useState('');
4357
4382
  const [recentIcons, setRecentIcons] = React$1.useState([]);
4358
- const containerRef = React$1.useRef(null);
4359
- React$1.useEffect(() => {
4360
- const handleClickOutside = event => {
4361
- if (containerRef.current && !containerRef.current.contains(event.target)) {
4362
- setOpen(false);
4363
- }
4364
- };
4365
- if (open) {
4366
- document.addEventListener('mousedown', handleClickOutside);
4367
- }
4368
- return () => {
4369
- document.removeEventListener('mousedown', handleClickOutside);
4370
- };
4371
- }, [open]);
4372
4383
 
4373
4384
  // 获取图标组件
4374
4385
  const getIconComponent = React$1.useCallback(iconName => iconMap[iconName] || Circle, []);
@@ -4394,20 +4405,21 @@ const IconSetter = props => {
4394
4405
  setOpen(false);
4395
4406
  }, [onChange]);
4396
4407
  const CurrentIcon = getIconComponent(currentValue.name);
4397
- return /*#__PURE__*/React.createElement("div", {
4398
- className: styles$f.container,
4399
- ref: containerRef
4400
- }, /*#__PURE__*/React.createElement("button", {
4401
- "aria-label": "Select icon",
4402
- className: styles$f.trigger,
4403
- onClick: () => setOpen(!open),
4404
- type: "button"
4405
- }, /*#__PURE__*/React.createElement(CurrentIcon, {
4406
- className: styles$f.triggerIcon
4407
- }), /*#__PURE__*/React.createElement("span", {
4408
- className: styles$f.triggerText
4409
- }, currentValue.name)), /*#__PURE__*/React.createElement("div", {
4410
- className: cn(styles$f.popover, open === false ? styles$f.popoverHidden : '')
4408
+ return /*#__PURE__*/React.createElement(Popover, {
4409
+ open: open,
4410
+ onClose: () => setOpen(false),
4411
+ trigger: /*#__PURE__*/React.createElement("button", {
4412
+ "aria-label": "Select icon",
4413
+ className: styles$f.trigger,
4414
+ onClick: () => setOpen(true),
4415
+ type: "button"
4416
+ }, /*#__PURE__*/React.createElement(CurrentIcon, {
4417
+ className: styles$f.triggerIcon
4418
+ }), /*#__PURE__*/React.createElement("span", {
4419
+ className: styles$f.triggerText
4420
+ }, currentValue.name))
4421
+ }, /*#__PURE__*/React.createElement("div", {
4422
+ className: styles$f.popover
4411
4423
  }, /*#__PURE__*/React.createElement("div", {
4412
4424
  className: styles$f.searchWrapper
4413
4425
  }, /*#__PURE__*/React.createElement(Search, {
@@ -4735,7 +4747,7 @@ const SegmentedSetter = props => {
4735
4747
  }, option.label)));
4736
4748
  };
4737
4749
 
4738
- var styles$8 = {"container":"es-container-HI7-c","trigger":"es-trigger-YRz9p","triggerValue":"es-triggerValue-k-g2-","placeholder":"es-placeholder-F8-XP","chevron":"es-chevron-UbZv-","chevronOpen":"es-chevronOpen-Yui-r","dropdown":"es-dropdown-l2sra","dropdownHidden":"es-dropdownHidden-S8Y4U","option":"es-option-cv-7C","optionSelected":"es-optionSelected-K4e5h","optionDisabled":"es-optionDisabled-72jrC"};
4750
+ var styles$8 = {"trigger":"es-trigger-YRz9p","triggerValue":"es-triggerValue-k-g2-","placeholder":"es-placeholder-F8-XP","chevron":"es-chevron-UbZv-","chevronOpen":"es-chevronOpen-Yui-r","dropdown":"es-dropdown-l2sra","option":"es-option-cv-7C","optionSelected":"es-optionSelected-K4e5h","optionDisabled":"es-optionDisabled-72jrC"};
4739
4751
 
4740
4752
  const SelectSetter = props => {
4741
4753
  const {
@@ -4746,22 +4758,8 @@ const SelectSetter = props => {
4746
4758
  onChange
4747
4759
  } = props;
4748
4760
  const [open, setOpen] = React$1.useState(false);
4749
- const containerRef = React$1.useRef(null);
4750
4761
  const currentValue = value ?? initialValue ?? '';
4751
4762
  const selectedOption = options.find(opt => opt.value === currentValue);
4752
- React$1.useEffect(() => {
4753
- const handleClickOutside = event => {
4754
- if (containerRef.current && !containerRef.current.contains(event.target)) {
4755
- setOpen(false);
4756
- }
4757
- };
4758
- if (open) {
4759
- document.addEventListener('mousedown', handleClickOutside);
4760
- }
4761
- return () => {
4762
- document.removeEventListener('mousedown', handleClickOutside);
4763
- };
4764
- }, [open]);
4765
4763
  const handleSelect = (optionValue, disabled) => {
4766
4764
  if (disabled) {
4767
4765
  return;
@@ -4769,21 +4767,22 @@ const SelectSetter = props => {
4769
4767
  onChange(optionValue);
4770
4768
  setOpen(false);
4771
4769
  };
4772
- return /*#__PURE__*/React.createElement("div", {
4773
- className: styles$8.container,
4774
- ref: containerRef
4775
- }, /*#__PURE__*/React.createElement("button", {
4776
- "aria-expanded": open,
4777
- "aria-haspopup": "listbox",
4778
- className: styles$8.trigger,
4779
- onClick: () => setOpen(!open),
4780
- type: "button"
4781
- }, /*#__PURE__*/React.createElement("span", {
4782
- className: cn(styles$8.triggerValue, selectedOption ? '' : styles$8.placeholder)
4783
- }, selectedOption?.label || placeholder || '请选择'), /*#__PURE__*/React.createElement(ChevronDown, {
4784
- className: cn(styles$8.chevron, open ? styles$8.chevronOpen : '')
4785
- })), /*#__PURE__*/React.createElement("div", {
4786
- className: cn(styles$8.dropdown, open === false ? styles$8.dropdownHidden : ''),
4770
+ return /*#__PURE__*/React.createElement(Popover, {
4771
+ open: open,
4772
+ onClose: () => setOpen(false),
4773
+ trigger: /*#__PURE__*/React.createElement("button", {
4774
+ "aria-expanded": open,
4775
+ "aria-haspopup": "listbox",
4776
+ className: styles$8.trigger,
4777
+ onClick: () => setOpen(true),
4778
+ type: "button"
4779
+ }, /*#__PURE__*/React.createElement("span", {
4780
+ className: cn(styles$8.triggerValue, selectedOption ? '' : styles$8.placeholder)
4781
+ }, selectedOption?.label || placeholder || '请选择'), /*#__PURE__*/React.createElement(ChevronDown, {
4782
+ className: cn(styles$8.chevron, open ? styles$8.chevronOpen : '')
4783
+ }))
4784
+ }, /*#__PURE__*/React.createElement("div", {
4785
+ className: styles$8.dropdown,
4787
4786
  role: "listbox"
4788
4787
  }, options.map(option => /*#__PURE__*/React.createElement("button", {
4789
4788
  "aria-selected": option.value === currentValue,
@@ -5298,6 +5297,7 @@ exports.JsonSetter = JsonSetter;
5298
5297
  exports.NodeIdSetter = NodeIdSetter;
5299
5298
  exports.NumberSetter = NumberSetter;
5300
5299
  exports.ObjectSetter = ObjectSetter;
5300
+ exports.Popover = Popover;
5301
5301
  exports.RectSetter = RectSetter;
5302
5302
  exports.SegmentedSetter = SegmentedSetter;
5303
5303
  exports.SelectSetter = SelectSetter;