one-design-next 0.0.21 → 0.0.22

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.
@@ -129,7 +129,7 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
129
129
  var lastEditorRangeRef = useRef(null);
130
130
  /** 抑制换行后短窗口内的 selection 二次校正,避免首次 chip 后换行闪烁。 */
131
131
  var suppressSelectionNormalizeCountRef = useRef(0);
132
- /** 用户刚执行“主动换行”时,允许 empty 判定在一次变更内保持非空。 */
132
+ /** 用户刚执行"主动换行"时,允许 empty 判定在一次变更内保持非空。 */
133
133
  var forceNonEmptyOnceRef = useRef(false);
134
134
 
135
135
  /** 派生:编辑器是否完全空(无文本 + 无 chip),驱动 placeholder。 */
@@ -147,7 +147,7 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
147
147
  controlledSyncTick = _useState4[0],
148
148
  setControlledSyncTick = _useState4[1];
149
149
  var controlledSyncRafRef = useRef(null);
150
- /** 输入模态:键盘操作时置为 keyboard,用于抑制“鼠标隐藏但 hover 仍生效”的视觉残留。 */
150
+ /** 输入模态:键盘操作时置为 keyboard,用于抑制"鼠标隐藏但 hover 仍生效"的视觉残留。 */
151
151
  var _useState5 = useState('pointer'),
152
152
  _useState6 = _slicedToArray(_useState5, 2),
153
153
  inputModality = _useState6[0],
@@ -199,9 +199,14 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
199
199
  }, [minHeightPx, maxHeightPx]);
200
200
  var shouldShowPlaceholder = useCallback(function (el) {
201
201
  if (!isEditorEmpty(el)) return false;
202
- // placeholder 仅在“单行且空内容”展示
203
- var lineCount = el.querySelectorAll('br').length + 1;
204
- return lineCount <= 1;
202
+ // 编辑器文本为空时,清理浏览器残留的 <br> 以确保 placeholder 正常显示
203
+ var brs = el.querySelectorAll('br');
204
+ if (brs.length > 0) {
205
+ brs.forEach(function (br) {
206
+ return br.remove();
207
+ });
208
+ }
209
+ return true;
205
210
  }, []);
206
211
  var scheduleControlledSync = useCallback(function () {
207
212
  if (!isControlled) return;
@@ -313,7 +318,7 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
313
318
  var el = editorRef.current;
314
319
  if (!el) return;
315
320
  // 优先恢复缓存光标到真实 selection;菜单点击时 selection 已经离开 editor,
316
- // 直接走 useChipManager 的 fallback 会落到 editor 末尾,导致“飞到第一/末行”。
321
+ // 直接走 useChipManager 的 fallback 会落到 editor 末尾,导致"飞到第一/末行"。
317
322
  var cached = lastEditorRangeRef.current;
318
323
  if (cached && cached.startContainer.isConnected && cached.endContainer.isConnected && el.contains(cached.startContainer) && el.contains(cached.endContainer)) {
319
324
  var sel = window.getSelection();
@@ -452,8 +457,8 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
452
457
  /* ─────────────────────────────────────
453
458
  * 受控同步:仅在外部 value 变化,或输入后延迟校验 tick 变化时校验 DOM。
454
459
  * contenteditable 不像原生 input 会被 React 自动回写 value;如果父组件
455
- * 在 onChange 里不回写,DOM 会继续保留用户刚输入的内容,造成“看起来受控,
456
- * 实际脱离 valueProp”的假受控状态。
460
+ * 在 onChange 里不回写,DOM 会继续保留用户刚输入的内容,造成"看起来受控,
461
+ * 实际脱离 valueProp"的假受控状态。
457
462
  *
458
463
  * 不能每次 render 都同步:输入换行会触发高度测量等内部 render,若此时父组件
459
464
  * 正常回写 value 尚未完成,就会被旧 valueProp 抢先覆盖 DOM,导致光标跳回行首。
@@ -568,7 +573,7 @@ export var ComposerEditor = /*#__PURE__*/forwardRef(function ComposerEditor(_ref
568
573
  var node = range.startContainer,
569
574
  offset = range.startOffset;
570
575
 
571
- // 用户换行生成的 "<br> + CARET_SPACER":一次 Backspace 应合并删除,避免看起来“卡一下”
576
+ // 用户换行生成的 "<br> + CARET_SPACER":一次 Backspace 应合并删除,避免看起来"卡一下"
572
577
  {
573
578
  var spacerText = null;
574
579
  var br = null;
@@ -50,6 +50,10 @@ export interface DrawerProps {
50
50
  * @description 样式
51
51
  */
52
52
  style?: React.CSSProperties;
53
+ /**
54
+ * @description 抽屉宽度(仅左右抽屉生效)
55
+ */
56
+ width?: React.CSSProperties['width'];
53
57
  /**
54
58
  * @description 是否显示
55
59
  */
@@ -53,6 +53,7 @@ var Drawer = function Drawer(_ref) {
53
53
  _ref$stepTransitionTy = _ref.stepTransitionType,
54
54
  stepTransitionType = _ref$stepTransitionTy === void 0 ? defaultProps.stepTransitionType : _ref$stepTransitionTy,
55
55
  style = _ref.style,
56
+ width = _ref.width,
56
57
  className = _ref.className,
57
58
  zIndex = _ref.zIndex,
58
59
  container = _ref.container,
@@ -146,9 +147,11 @@ var Drawer = function Drawer(_ref) {
146
147
  }
147
148
  }, 0);
148
149
  }, [steps, step]);
149
- var drawerStyle = _objectSpread(_objectSpread({
150
+ var drawerStyle = _objectSpread(_objectSpread(_objectSpread({
150
151
  zIndex: zIndex ? Number(zIndex) : undefined
151
- }, style), elevated ? {} : paddingStylePack);
152
+ }, placement === 'left' || placement === 'right' ? {
153
+ width: width
154
+ } : undefined), style), elevated ? {} : paddingStylePack);
152
155
  return /*#__PURE__*/React.createElement(ModalRoot, {
153
156
  open: visible,
154
157
  onOpenChange: onVisibleChange,
@@ -7,6 +7,8 @@ export interface PreviewPanelProps {
7
7
  onTabChange?: (id: string) => void;
8
8
  onTabClose?: (id: string) => void;
9
9
  onCloseAll?: () => void;
10
+ /** 关闭外层容器(如关闭整个 Drawer) */
11
+ onCloseContainer?: () => void;
10
12
  /**
11
13
  * 下载当前激活标签。传入时在 header 右侧渲染下载按钮,点击时回调会收到当前激活 tab;
12
14
  * 未传则不渲染下载按钮(向后兼容)。
@@ -31,7 +33,7 @@ export interface PreviewPanelProps {
31
33
  */
32
34
  widthMode?: 'half' | 'fill';
33
35
  }
34
- export declare function PreviewPanel({ tabs, activeTabId, onTabChange, onTabClose, onCloseAll, onDownload, onOpenInBrowser, open, emptyTitle, emptyDescription, widthMode, }: PreviewPanelProps): import("react").JSX.Element;
36
+ export declare function PreviewPanel({ tabs, activeTabId, onTabChange, onTabClose, onCloseAll, onCloseContainer, onDownload, onOpenInBrowser, open, emptyTitle, emptyDescription, widthMode, }: PreviewPanelProps): import("react").JSX.Element;
35
37
  export declare namespace PreviewPanel {
36
38
  var displayName: string;
37
39
  }
@@ -11,6 +11,7 @@ export function PreviewPanel(_ref) {
11
11
  onTabChange = _ref.onTabChange,
12
12
  onTabClose = _ref.onTabClose,
13
13
  onCloseAll = _ref.onCloseAll,
14
+ onCloseContainer = _ref.onCloseContainer,
14
15
  onDownload = _ref.onDownload,
15
16
  onOpenInBrowser = _ref.onOpenInBrowser,
16
17
  open = _ref.open,
@@ -132,6 +133,14 @@ export function PreviewPanel(_ref) {
132
133
  "data-odn-preview-panel-close-all": true,
133
134
  title: "\u6536\u8D77\u9884\u89C8",
134
135
  "aria-label": "\u6536\u8D77\u9884\u89C8"
136
+ }), onCloseContainer && /*#__PURE__*/React.createElement(Button, {
137
+ light: true,
138
+ size: "medium",
139
+ icon: "cancel",
140
+ onClick: onCloseContainer,
141
+ "data-odn-preview-panel-close-container": true,
142
+ title: "\u5173\u95ED\u62BD\u5C49",
143
+ "aria-label": "\u5173\u95ED\u62BD\u5C49"
135
144
  }))), isEmpty ? /*#__PURE__*/React.createElement("div", {
136
145
  "data-odn-preview-panel-empty-state": true,
137
146
  role: "status"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one-design-next",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "One Design Next from TAD@tencent.com",
5
5
  "packageManager": "pnpm@10.33.0",
6
6
  "module": "dist/index.js",