@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.js CHANGED
@@ -1,9 +1,74 @@
1
1
  /* @easy-editor/setters v0.1.0 */
2
2
  (function (global, factory) {
3
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react/jsx-runtime')) :
4
- typeof define === 'function' && define.amd ? define(['exports', 'react', 'react/jsx-runtime'], factory) :
5
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.EasyEditorSetters = {}, global.React, global.jsxRuntime));
6
- })(this, (function (exports, React$1, jsxRuntime) { 'use strict';
3
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom'), require('react/jsx-runtime')) :
4
+ typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom', 'react/jsx-runtime'], factory) :
5
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.EasyEditorSetters = {}, global.React, global.ReactDOM, global.jsxRuntime));
6
+ })(this, (function (exports, React$1, reactDom, jsxRuntime) { 'use strict';
7
+
8
+ /**
9
+ * Popover - 共享弹窗组件
10
+ * - 使用 Portal 渲染到 document.body,避免被父容器遮挡
11
+ * - 自动匹配触发器宽度
12
+ */
13
+ const Popover = props => {
14
+ const {
15
+ open,
16
+ onClose,
17
+ trigger,
18
+ children,
19
+ width = 'trigger'
20
+ } = props;
21
+ const triggerRef = React$1.useRef(null);
22
+ const [position, setPosition] = React$1.useState({
23
+ top: 0,
24
+ left: 0
25
+ });
26
+ const [popoverWidth, setPopoverWidth] = React$1.useState(0);
27
+
28
+ // 计算弹窗位置
29
+ React$1.useEffect(() => {
30
+ if (open && triggerRef.current) {
31
+ const triggerRect = triggerRef.current.getBoundingClientRect();
32
+ const triggerWidth = triggerRect.width;
33
+
34
+ // 设置弹窗宽度
35
+ if (width === 'trigger') {
36
+ setPopoverWidth(triggerWidth);
37
+ }
38
+ setPosition({
39
+ top: triggerRect.bottom + 4,
40
+ left: triggerRect.left
41
+ });
42
+ }
43
+ }, [open, width]);
44
+
45
+ // 点击外部关闭
46
+ React$1.useEffect(() => {
47
+ const handleClickOutside = event => {
48
+ const target = event.target;
49
+ const popoverEl = document.querySelector('.es-popover-portal');
50
+ if (popoverEl && !popoverEl.contains(target) && triggerRef.current && !triggerRef.current.contains(target)) {
51
+ onClose();
52
+ }
53
+ };
54
+ if (open) {
55
+ document.addEventListener('mousedown', handleClickOutside);
56
+ return () => document.removeEventListener('mousedown', handleClickOutside);
57
+ }
58
+ }, [open, onClose]);
59
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
60
+ ref: triggerRef
61
+ }, trigger), open && /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/React.createElement("div", {
62
+ className: "es-popover-portal",
63
+ style: {
64
+ position: 'fixed',
65
+ top: position.top,
66
+ left: position.left,
67
+ width: popoverWidth || 'auto',
68
+ zIndex: 1000
69
+ }
70
+ }, children), document.body));
71
+ };
7
72
 
8
73
  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
74
 
@@ -3831,7 +3896,7 @@
3831
3896
  });
3832
3897
  Sketch.displayName = 'Sketch';
3833
3898
 
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"};
3899
+ var styles$i = {"trigger":"es-trigger-w-aUi","colorPreview":"es-colorPreview-SUgiJ","colorValue":"es-colorValue-cYdRP","popover":"es-popover-SfIUB"};
3835
3900
 
3836
3901
  const ColorSetter = props => {
3837
3902
  const {
@@ -3841,40 +3906,25 @@
3841
3906
  disableAlpha = false
3842
3907
  } = props;
3843
3908
  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);
3909
+ return /*#__PURE__*/React.createElement(Popover, {
3910
+ onClose: () => setOpen(false),
3911
+ open: open,
3912
+ trigger: /*#__PURE__*/React.createElement("button", {
3913
+ "aria-label": "Select color",
3914
+ className: styles$i.trigger,
3915
+ onClick: () => setOpen(true),
3916
+ type: "button"
3917
+ }, /*#__PURE__*/React.createElement("div", {
3918
+ "aria-label": "Current color",
3919
+ className: styles$i.colorPreview,
3920
+ style: {
3921
+ backgroundColor: value ?? initialValue
3849
3922
  }
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"
3923
+ }), /*#__PURE__*/React.createElement("span", {
3924
+ className: styles$i.colorValue
3925
+ }, value ?? initialValue))
3868
3926
  }, /*#__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)
3927
+ className: styles$i.popover
3878
3928
  }, /*#__PURE__*/React.createElement(Sketch, {
3879
3929
  color: value,
3880
3930
  disableAlpha: disableAlpha,
@@ -3883,7 +3933,7 @@
3883
3933
  })));
3884
3934
  };
3885
3935
 
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"};
3936
+ 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
3937
 
3888
3938
  const defaultValue$3 = {
3889
3939
  type: 'static',
@@ -3901,20 +3951,6 @@
3901
3951
  const currentValue = value ?? initialValue ?? defaultValue$3;
3902
3952
  const [open, setOpen] = React$1.useState(false);
3903
3953
  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
3954
  const updateBinding = React$1.useCallback(updates => {
3919
3955
  onChange({
3920
3956
  ...currentValue,
@@ -4011,18 +4047,20 @@
4011
4047
  text: '静态数据'
4012
4048
  };
4013
4049
  }, [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 : '')
4050
+ return /*#__PURE__*/React.createElement(Popover, {
4051
+ onClose: () => setOpen(false),
4052
+ open: open,
4053
+ trigger: /*#__PURE__*/React.createElement("button", {
4054
+ "aria-label": "Data binding",
4055
+ className: styles$h.trigger,
4056
+ onClick: () => setOpen(true),
4057
+ type: "button"
4058
+ }, bindingStatus.icon, /*#__PURE__*/React.createElement("span", {
4059
+ className: styles$h.triggerText
4060
+ }, bindingStatus.text)),
4061
+ width: 300
4062
+ }, /*#__PURE__*/React.createElement("div", {
4063
+ className: styles$h.popoverContent
4026
4064
  }, /*#__PURE__*/React.createElement("div", {
4027
4065
  className: styles$h.tabsList,
4028
4066
  role: "tablist"
@@ -4084,7 +4122,7 @@
4084
4122
  }, "\u7ED1\u5B9A\u540E\u53EF\u5728\u9884\u89C8\u6A21\u5F0F\u67E5\u770B\u6570\u636E")) : null))));
4085
4123
  };
4086
4124
 
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"};
4125
+ 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
4126
 
4089
4127
  const defaultValue$2 = {
4090
4128
  mappings: []
@@ -4099,20 +4137,6 @@
4099
4137
  } = props;
4100
4138
  const currentValue = value ?? initialValue ?? defaultValue$2;
4101
4139
  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
4140
 
4117
4141
  // 获取字段的映射
4118
4142
  const getMapping = React$1.useCallback(targetField => currentValue.mappings.find(m => m.targetField === targetField), [currentValue.mappings]);
@@ -4148,22 +4172,22 @@
4148
4172
 
4149
4173
  // 统计已映射字段数
4150
4174
  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 : '')
4175
+ return /*#__PURE__*/React.createElement(Popover, {
4176
+ onClose: () => setOpen(false),
4177
+ open: open,
4178
+ trigger: /*#__PURE__*/React.createElement("button", {
4179
+ "aria-label": "Data mapping",
4180
+ className: styles$g.trigger,
4181
+ onClick: () => setOpen(true),
4182
+ type: "button"
4183
+ }, /*#__PURE__*/React.createElement(Settings2, {
4184
+ className: styles$g.triggerIcon
4185
+ }), /*#__PURE__*/React.createElement("span", {
4186
+ className: styles$g.triggerText
4187
+ }, "\u5B57\u6BB5\u6620\u5C04 (", mappedCount, "/", targetFields.length, ")")),
4188
+ width: 320
4165
4189
  }, /*#__PURE__*/React.createElement("div", {
4166
- className: styles$g.content
4190
+ className: styles$g.popoverContent
4167
4191
  }, /*#__PURE__*/React.createElement("div", {
4168
4192
  className: styles$g.header
4169
4193
  }, /*#__PURE__*/React.createElement("span", {
@@ -4229,10 +4253,10 @@
4229
4253
  }, "\u6E05\u9664\u6620\u5C04") : null);
4230
4254
  })), /*#__PURE__*/React.createElement("div", {
4231
4255
  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)")))));
4256
+ }, /*#__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
4257
  };
4234
4258
 
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"};
4259
+ 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
4260
 
4237
4261
  // 图标映射表
4238
4262
  const iconMap = {
@@ -4355,20 +4379,6 @@
4355
4379
  const [open, setOpen] = React$1.useState(false);
4356
4380
  const [searchQuery, setSearchQuery] = React$1.useState('');
4357
4381
  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
4382
 
4373
4383
  // 获取图标组件
4374
4384
  const getIconComponent = React$1.useCallback(iconName => iconMap[iconName] || Circle, []);
@@ -4394,20 +4404,21 @@
4394
4404
  setOpen(false);
4395
4405
  }, [onChange]);
4396
4406
  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 : '')
4407
+ return /*#__PURE__*/React.createElement(Popover, {
4408
+ onClose: () => setOpen(false),
4409
+ open: open,
4410
+ trigger: /*#__PURE__*/React.createElement("button", {
4411
+ "aria-label": "Select icon",
4412
+ className: styles$f.trigger,
4413
+ onClick: () => setOpen(true),
4414
+ type: "button"
4415
+ }, /*#__PURE__*/React.createElement(CurrentIcon, {
4416
+ className: styles$f.triggerIcon
4417
+ }), /*#__PURE__*/React.createElement("span", {
4418
+ className: styles$f.triggerText
4419
+ }, currentValue.name))
4420
+ }, /*#__PURE__*/React.createElement("div", {
4421
+ className: styles$f.popover
4411
4422
  }, /*#__PURE__*/React.createElement("div", {
4412
4423
  className: styles$f.searchWrapper
4413
4424
  }, /*#__PURE__*/React.createElement(Search, {
@@ -4735,7 +4746,7 @@
4735
4746
  }, option.label)));
4736
4747
  };
4737
4748
 
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"};
4749
+ 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
4750
 
4740
4751
  const SelectSetter = props => {
4741
4752
  const {
@@ -4746,22 +4757,8 @@
4746
4757
  onChange
4747
4758
  } = props;
4748
4759
  const [open, setOpen] = React$1.useState(false);
4749
- const containerRef = React$1.useRef(null);
4750
4760
  const currentValue = value ?? initialValue ?? '';
4751
4761
  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
4762
  const handleSelect = (optionValue, disabled) => {
4766
4763
  if (disabled) {
4767
4764
  return;
@@ -4769,21 +4766,22 @@
4769
4766
  onChange(optionValue);
4770
4767
  setOpen(false);
4771
4768
  };
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 : ''),
4769
+ return /*#__PURE__*/React.createElement(Popover, {
4770
+ onClose: () => setOpen(false),
4771
+ open: open,
4772
+ trigger: /*#__PURE__*/React.createElement("button", {
4773
+ "aria-expanded": open,
4774
+ "aria-haspopup": "listbox",
4775
+ className: styles$8.trigger,
4776
+ onClick: () => setOpen(true),
4777
+ type: "button"
4778
+ }, /*#__PURE__*/React.createElement("span", {
4779
+ className: cn(styles$8.triggerValue, selectedOption ? '' : styles$8.placeholder)
4780
+ }, selectedOption?.label || placeholder || '请选择'), /*#__PURE__*/React.createElement(ChevronDown, {
4781
+ className: cn(styles$8.chevron, open ? styles$8.chevronOpen : '')
4782
+ }))
4783
+ }, /*#__PURE__*/React.createElement("div", {
4784
+ className: styles$8.dropdown,
4787
4785
  role: "listbox"
4788
4786
  }, options.map(option => /*#__PURE__*/React.createElement("button", {
4789
4787
  "aria-selected": option.value === currentValue,
@@ -5298,6 +5296,7 @@
5298
5296
  exports.NodeIdSetter = NodeIdSetter;
5299
5297
  exports.NumberSetter = NumberSetter;
5300
5298
  exports.ObjectSetter = ObjectSetter;
5299
+ exports.Popover = Popover;
5301
5300
  exports.RectSetter = RectSetter;
5302
5301
  exports.SegmentedSetter = SegmentedSetter;
5303
5302
  exports.SelectSetter = SelectSetter;