@seakoi/native-ui 1.2.0 → 1.3.0

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.
Files changed (178) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/commonjs/components/base/index.js +33 -11
  3. package/dist/commonjs/components/base/input/base-input.js +4 -2
  4. package/dist/commonjs/components/base/overflow/all-mode-overflow.js +49 -0
  5. package/dist/commonjs/components/base/overflow/fixed-count-overflow.js +70 -0
  6. package/dist/commonjs/components/base/overflow/index.js +16 -0
  7. package/dist/commonjs/components/base/overflow/overflow.js +72 -0
  8. package/dist/commonjs/components/base/overflow/responsive-overflow.js +280 -0
  9. package/dist/commonjs/components/base/overflow/style/index.js +39 -0
  10. package/dist/commonjs/components/base/overflow/types.js +5 -0
  11. package/dist/commonjs/components/base/picker/picker-content.js +16 -12
  12. package/dist/commonjs/components/base/picker/picker-field.js +9 -7
  13. package/dist/commonjs/components/base/picker/picker.js +6 -1
  14. package/dist/commonjs/components/base/picker/style/index.js +7 -1
  15. package/dist/commonjs/components/base/portal/portal-host.js +5 -3
  16. package/dist/commonjs/components/base/select/hooks/use-select-actions.js +155 -0
  17. package/dist/commonjs/components/base/select/hooks/use-select-options.js +169 -0
  18. package/dist/commonjs/components/base/select/hooks/use-selector.js +104 -0
  19. package/dist/commonjs/components/base/select/index.js +16 -0
  20. package/dist/commonjs/components/base/select/select-multiple-content.js +182 -0
  21. package/dist/commonjs/components/base/select/select-popup.js +233 -0
  22. package/dist/commonjs/components/base/select/select-single-content.js +100 -0
  23. package/dist/commonjs/components/base/select/select-suffix.js +67 -0
  24. package/dist/commonjs/components/base/select/select.js +285 -0
  25. package/dist/commonjs/components/base/select/style/index.js +40 -0
  26. package/dist/commonjs/components/base/select/style/select-multiple-content-styles.js +46 -0
  27. package/dist/commonjs/components/base/select/style/select-popup-styles.js +67 -0
  28. package/dist/commonjs/components/base/select/style/select-single-content-styles.js +28 -0
  29. package/dist/commonjs/components/base/select/style/select-styles.js +46 -0
  30. package/dist/commonjs/components/base/select/style/select-suffix-styles.js +21 -0
  31. package/dist/commonjs/components/base/select/types.js +5 -0
  32. package/dist/commonjs/components/base/tabs/style/index.js +37 -0
  33. package/dist/commonjs/components/base/tabs/tabs.js +90 -45
  34. package/dist/commonjs/native-provider/native-provider.js +5 -5
  35. package/dist/commonjs/shared/utils/index.js +11 -0
  36. package/dist/commonjs/shared/utils/object.js +39 -0
  37. package/dist/module/components/base/index.js +2 -0
  38. package/dist/module/components/base/input/base-input.js +4 -2
  39. package/dist/module/components/base/overflow/all-mode-overflow.js +43 -0
  40. package/dist/module/components/base/overflow/fixed-count-overflow.js +64 -0
  41. package/dist/module/components/base/overflow/index.js +3 -0
  42. package/dist/module/components/base/overflow/overflow.js +66 -0
  43. package/dist/module/components/base/overflow/responsive-overflow.js +274 -0
  44. package/dist/module/components/base/overflow/style/index.js +36 -0
  45. package/dist/module/components/base/overflow/types.js +3 -0
  46. package/dist/module/components/base/picker/picker-content.js +16 -12
  47. package/dist/module/components/base/picker/picker-field.js +9 -7
  48. package/dist/module/components/base/picker/picker.js +6 -1
  49. package/dist/module/components/base/picker/style/index.js +6 -0
  50. package/dist/module/components/base/portal/portal-host.js +4 -3
  51. package/dist/module/components/base/select/hooks/use-select-actions.js +151 -0
  52. package/dist/module/components/base/select/hooks/use-select-options.js +162 -0
  53. package/dist/module/components/base/select/hooks/use-selector.js +100 -0
  54. package/dist/module/components/base/select/index.js +3 -0
  55. package/dist/module/components/base/select/select-multiple-content.js +176 -0
  56. package/dist/module/components/base/select/select-popup.js +227 -0
  57. package/dist/module/components/base/select/select-single-content.js +94 -0
  58. package/dist/module/components/base/select/select-suffix.js +61 -0
  59. package/dist/module/components/base/select/select.js +279 -0
  60. package/dist/module/components/base/select/style/index.js +7 -0
  61. package/dist/module/components/base/select/style/select-multiple-content-styles.js +43 -0
  62. package/dist/module/components/base/select/style/select-popup-styles.js +64 -0
  63. package/dist/module/components/base/select/style/select-single-content-styles.js +25 -0
  64. package/dist/module/components/base/select/style/select-styles.js +43 -0
  65. package/dist/module/components/base/select/style/select-suffix-styles.js +18 -0
  66. package/dist/module/components/base/select/types.js +3 -0
  67. package/dist/module/components/base/tabs/style/index.js +33 -0
  68. package/dist/module/components/base/tabs/tabs.js +92 -47
  69. package/dist/module/native-provider/native-provider.js +5 -5
  70. package/dist/module/shared/utils/index.js +2 -1
  71. package/dist/module/shared/utils/object.js +35 -0
  72. package/dist/typescript/components/base/index.d.ts +2 -0
  73. package/dist/typescript/components/base/index.d.ts.map +1 -1
  74. package/dist/typescript/components/base/input/base-input.d.ts.map +1 -1
  75. package/dist/typescript/components/base/overflow/all-mode-overflow.d.ts +11 -0
  76. package/dist/typescript/components/base/overflow/all-mode-overflow.d.ts.map +1 -0
  77. package/dist/typescript/components/base/overflow/fixed-count-overflow.d.ts +11 -0
  78. package/dist/typescript/components/base/overflow/fixed-count-overflow.d.ts.map +1 -0
  79. package/dist/typescript/components/base/overflow/index.d.ts +3 -0
  80. package/dist/typescript/components/base/overflow/index.d.ts.map +1 -0
  81. package/dist/typescript/components/base/overflow/overflow.d.ts +13 -0
  82. package/dist/typescript/components/base/overflow/overflow.d.ts.map +1 -0
  83. package/dist/typescript/components/base/overflow/responsive-overflow.d.ts +12 -0
  84. package/dist/typescript/components/base/overflow/responsive-overflow.d.ts.map +1 -0
  85. package/dist/typescript/components/base/overflow/style/index.d.ts +31 -0
  86. package/dist/typescript/components/base/overflow/style/index.d.ts.map +1 -0
  87. package/dist/typescript/components/base/overflow/types.d.ts +77 -0
  88. package/dist/typescript/components/base/overflow/types.d.ts.map +1 -0
  89. package/dist/typescript/components/base/picker/picker-content.d.ts +12 -0
  90. package/dist/typescript/components/base/picker/picker-content.d.ts.map +1 -1
  91. package/dist/typescript/components/base/picker/picker-field.d.ts.map +1 -1
  92. package/dist/typescript/components/base/picker/picker.d.ts +9 -0
  93. package/dist/typescript/components/base/picker/picker.d.ts.map +1 -1
  94. package/dist/typescript/components/base/picker/style/index.d.ts +6 -0
  95. package/dist/typescript/components/base/picker/style/index.d.ts.map +1 -1
  96. package/dist/typescript/components/base/portal/portal-host.d.ts +1 -0
  97. package/dist/typescript/components/base/portal/portal-host.d.ts.map +1 -1
  98. package/dist/typescript/components/base/portal/types.d.ts +2 -0
  99. package/dist/typescript/components/base/portal/types.d.ts.map +1 -1
  100. package/dist/typescript/components/base/select/hooks/use-select-actions.d.ts +144 -0
  101. package/dist/typescript/components/base/select/hooks/use-select-actions.d.ts.map +1 -0
  102. package/dist/typescript/components/base/select/hooks/use-select-options.d.ts +91 -0
  103. package/dist/typescript/components/base/select/hooks/use-select-options.d.ts.map +1 -0
  104. package/dist/typescript/components/base/select/hooks/use-selector.d.ts +90 -0
  105. package/dist/typescript/components/base/select/hooks/use-selector.d.ts.map +1 -0
  106. package/dist/typescript/components/base/select/index.d.ts +3 -0
  107. package/dist/typescript/components/base/select/index.d.ts.map +1 -0
  108. package/dist/typescript/components/base/select/select-multiple-content.d.ts +51 -0
  109. package/dist/typescript/components/base/select/select-multiple-content.d.ts.map +1 -0
  110. package/dist/typescript/components/base/select/select-popup.d.ts +107 -0
  111. package/dist/typescript/components/base/select/select-popup.d.ts.map +1 -0
  112. package/dist/typescript/components/base/select/select-single-content.d.ts +48 -0
  113. package/dist/typescript/components/base/select/select-single-content.d.ts.map +1 -0
  114. package/dist/typescript/components/base/select/select-suffix.d.ts +43 -0
  115. package/dist/typescript/components/base/select/select-suffix.d.ts.map +1 -0
  116. package/dist/typescript/components/base/select/select.d.ts +40 -0
  117. package/dist/typescript/components/base/select/select.d.ts.map +1 -0
  118. package/dist/typescript/components/base/select/style/index.d.ts +6 -0
  119. package/dist/typescript/components/base/select/style/index.d.ts.map +1 -0
  120. package/dist/typescript/components/base/select/style/select-multiple-content-styles.d.ts +40 -0
  121. package/dist/typescript/components/base/select/style/select-multiple-content-styles.d.ts.map +1 -0
  122. package/dist/typescript/components/base/select/style/select-popup-styles.d.ts +61 -0
  123. package/dist/typescript/components/base/select/style/select-popup-styles.d.ts.map +1 -0
  124. package/dist/typescript/components/base/select/style/select-single-content-styles.d.ts +22 -0
  125. package/dist/typescript/components/base/select/style/select-single-content-styles.d.ts.map +1 -0
  126. package/dist/typescript/components/base/select/style/select-styles.d.ts +40 -0
  127. package/dist/typescript/components/base/select/style/select-styles.d.ts.map +1 -0
  128. package/dist/typescript/components/base/select/style/select-suffix-styles.d.ts +15 -0
  129. package/dist/typescript/components/base/select/style/select-suffix-styles.d.ts.map +1 -0
  130. package/dist/typescript/components/base/select/types.d.ts +206 -0
  131. package/dist/typescript/components/base/select/types.d.ts.map +1 -0
  132. package/dist/typescript/components/base/tabs/style/index.d.ts +29 -0
  133. package/dist/typescript/components/base/tabs/style/index.d.ts.map +1 -0
  134. package/dist/typescript/components/base/tabs/tabs.d.ts +26 -5
  135. package/dist/typescript/components/base/tabs/tabs.d.ts.map +1 -1
  136. package/dist/typescript/native-provider/native-provider.d.ts +2 -0
  137. package/dist/typescript/native-provider/native-provider.d.ts.map +1 -1
  138. package/dist/typescript/shared/utils/index.d.ts +1 -0
  139. package/dist/typescript/shared/utils/index.d.ts.map +1 -1
  140. package/dist/typescript/shared/utils/object.d.ts +21 -0
  141. package/dist/typescript/shared/utils/object.d.ts.map +1 -0
  142. package/package.json +1 -1
  143. package/src/components/base/index.ts +2 -0
  144. package/src/components/base/input/base-input.tsx +4 -2
  145. package/src/components/base/overflow/all-mode-overflow.tsx +49 -0
  146. package/src/components/base/overflow/fixed-count-overflow.tsx +71 -0
  147. package/src/components/base/overflow/index.ts +2 -0
  148. package/src/components/base/overflow/overflow.tsx +60 -0
  149. package/src/components/base/overflow/responsive-overflow.tsx +349 -0
  150. package/src/components/base/overflow/style/index.ts +32 -0
  151. package/src/components/base/overflow/types.ts +75 -0
  152. package/src/components/base/picker/picker-content.tsx +24 -9
  153. package/src/components/base/picker/picker-field.tsx +19 -13
  154. package/src/components/base/picker/picker.tsx +10 -1
  155. package/src/components/base/picker/style/index.ts +4 -0
  156. package/src/components/base/portal/portal-host.tsx +13 -3
  157. package/src/components/base/portal/types.ts +2 -0
  158. package/src/components/base/select/hooks/use-select-actions.ts +263 -0
  159. package/src/components/base/select/hooks/use-select-options.ts +250 -0
  160. package/src/components/base/select/hooks/use-selector.ts +155 -0
  161. package/src/components/base/select/index.ts +2 -0
  162. package/src/components/base/select/select-multiple-content.tsx +292 -0
  163. package/src/components/base/select/select-popup.tsx +384 -0
  164. package/src/components/base/select/select-single-content.tsx +127 -0
  165. package/src/components/base/select/select-suffix.tsx +100 -0
  166. package/src/components/base/select/select.tsx +302 -0
  167. package/src/components/base/select/style/index.ts +5 -0
  168. package/src/components/base/select/style/select-multiple-content-styles.ts +41 -0
  169. package/src/components/base/select/style/select-popup-styles.ts +62 -0
  170. package/src/components/base/select/style/select-single-content-styles.ts +23 -0
  171. package/src/components/base/select/style/select-styles.ts +41 -0
  172. package/src/components/base/select/style/select-suffix-styles.ts +16 -0
  173. package/src/components/base/select/types.ts +261 -0
  174. package/src/components/base/tabs/style/index.ts +32 -0
  175. package/src/components/base/tabs/tabs.tsx +146 -55
  176. package/src/native-provider/native-provider.tsx +4 -4
  177. package/src/shared/utils/index.ts +1 -0
  178. package/src/shared/utils/object.ts +37 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,41 @@
2
2
 
3
3
  本文档记录了项目的所有重要变更。
4
4
 
5
+ # [1.3.0](https://gitlab.seakoi.net/digiziting_client/native-ui/compare/@seakoi/native-ui@1.2.0...@seakoi/native-ui@1.3.0) (2026-03-17)
6
+
7
+
8
+ ### ♻️Code Refactoring
9
+
10
+ * **native-ui:** overflow code-review (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([7df2a0a4](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/7df2a0a4584298a0928f98fc4dce47f436fbffb9))
11
+ * **native-ui:** overflow 优化新增内容时的闪烁 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([03af9b89](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/03af9b89c9582696ab27ebd0684d0203723ac639))
12
+ * **root:** 优化 docs-writer 技能 (By [@dengrenshan](https://gitlab.seakoi.net/dengrenshan)) ([83548f7c](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/83548f7c317179f5630f3af824938720f2d57814))
13
+ * **native-ui:** 优化 Picker 取值逻辑 (By [@dengrenshan](https://gitlab.seakoi.net/dengrenshan)) ([2eed1672](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/2eed16721aedaef315ee4df7a47a49b2bb5a59a3))
14
+ * **root:** 重构 create-component 技能 (By [@dengrenshan](https://gitlab.seakoi.net/dengrenshan)) ([3b45d12a](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/3b45d12a49ec9d3a21718c06b9c321498a10b637))
15
+ * **native-ui:** 重构 Overflow 组件架构 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([9c91647b](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/9c91647b6f00df2b8a45cfc6ad2deb578e6778c8))
16
+ * **native-ui:** 重构 Select 组件 API 为扁平化结构 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([07f6b042](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/07f6b042a3e154b59cf56d1fa771376088d99d88))
17
+ * **native-ui:** 重构 Select 组件样式系统和 Props 结构、修复受控与非受控模式 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([e7cee1b6](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/e7cee1b6fc1bd20b927fcaceffa063859e799f09))
18
+
19
+
20
+ ### ⚡Performance Improvements
21
+
22
+ * **native-ui:** 修复 Select 组件代码审查问题 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([912357c8](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/912357c8db91e14fd50600d2e4865b65f7c53883))
23
+
24
+
25
+ ### ✨Features
26
+
27
+ * **native-ui:** 增强 Portal 组件样式自定义能力 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([0c0967da](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/0c0967dac6730b717af1f0624e22303a516d4bc7))
28
+ * **native-ui:** 实现 Tabs 组件均分模式和徽标功能 (By [@xuzhijun](https://gitlab.seakoi.net/xuzhijun)) ([36d50faa](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/36d50faaf4b243c555487e81c9e724fcf88c7575))
29
+ * **native-ui:** 扩展共享工具函数 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([0b872987](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/0b872987a840b8e0d7bc90b3b631e577bde7d640))
30
+ * **native-ui:** 新增 Overflow 溢出处理组件 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([34b850f5](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/34b850f56e319e3e941ce2aba5829f86441eeeb4))
31
+ * **native-ui:** 新增 Select 选择器组件 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([0adbc6d7](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/0adbc6d7d1c9ad25923d98c4781d5dcd618956d0))
32
+ * **root:** 添加 OpenSpec 工作流技能 (By [@dengrenshan](https://gitlab.seakoi.net/dengrenshan)) ([5f5da26c](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/5f5da26c17dde4ae39b29edb9dc2963a3cb2b030))
33
+
34
+
35
+ ### 🐛Bug Fixes
36
+
37
+ * **native-ui:** 修复 BaseInput 组件失去焦点后的值处理 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([3c1afbb5](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/3c1afbb524c0c0ac8a02f9b7927fe8f2c34b1c2d))
38
+ * **example:** 更新tabs的示例 (By [@xuzhijun](https://gitlab.seakoi.net/xuzhijun)) ([7e5531ff](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/7e5531ffeb5ea5014e12b5cb247d5dd68dfca254))
39
+
5
40
  # [1.2.0](https://gitlab.seakoi.net/digiziting_client/native-ui/compare/@seakoi/native-ui@1.1.3...@seakoi/native-ui@1.2.0) (2026-03-05)
6
41
 
7
42
 
@@ -256,7 +256,7 @@ Object.keys(_index21).forEach(function (key) {
256
256
  }
257
257
  });
258
258
  });
259
- var _index22 = require("./picker/index.js");
259
+ var _index22 = require("./overflow/index.js");
260
260
  Object.keys(_index22).forEach(function (key) {
261
261
  if (key === "default" || key === "__esModule") return;
262
262
  if (key in exports && exports[key] === _index22[key]) return;
@@ -267,7 +267,7 @@ Object.keys(_index22).forEach(function (key) {
267
267
  }
268
268
  });
269
269
  });
270
- var _index23 = require("./picker-backup/index.js");
270
+ var _index23 = require("./picker/index.js");
271
271
  Object.keys(_index23).forEach(function (key) {
272
272
  if (key === "default" || key === "__esModule") return;
273
273
  if (key in exports && exports[key] === _index23[key]) return;
@@ -278,7 +278,7 @@ Object.keys(_index23).forEach(function (key) {
278
278
  }
279
279
  });
280
280
  });
281
- var _index24 = require("./picker-view/index.js");
281
+ var _index24 = require("./picker-backup/index.js");
282
282
  Object.keys(_index24).forEach(function (key) {
283
283
  if (key === "default" || key === "__esModule") return;
284
284
  if (key in exports && exports[key] === _index24[key]) return;
@@ -289,7 +289,7 @@ Object.keys(_index24).forEach(function (key) {
289
289
  }
290
290
  });
291
291
  });
292
- var _index25 = require("./portal/index.js");
292
+ var _index25 = require("./picker-view/index.js");
293
293
  Object.keys(_index25).forEach(function (key) {
294
294
  if (key === "default" || key === "__esModule") return;
295
295
  if (key in exports && exports[key] === _index25[key]) return;
@@ -300,7 +300,7 @@ Object.keys(_index25).forEach(function (key) {
300
300
  }
301
301
  });
302
302
  });
303
- var _index26 = require("./radio/index.js");
303
+ var _index26 = require("./portal/index.js");
304
304
  Object.keys(_index26).forEach(function (key) {
305
305
  if (key === "default" || key === "__esModule") return;
306
306
  if (key in exports && exports[key] === _index26[key]) return;
@@ -311,7 +311,7 @@ Object.keys(_index26).forEach(function (key) {
311
311
  }
312
312
  });
313
313
  });
314
- var _index27 = require("./result/index.js");
314
+ var _index27 = require("./radio/index.js");
315
315
  Object.keys(_index27).forEach(function (key) {
316
316
  if (key === "default" || key === "__esModule") return;
317
317
  if (key in exports && exports[key] === _index27[key]) return;
@@ -322,7 +322,7 @@ Object.keys(_index27).forEach(function (key) {
322
322
  }
323
323
  });
324
324
  });
325
- var _index28 = require("./surface/index.js");
325
+ var _index28 = require("./result/index.js");
326
326
  Object.keys(_index28).forEach(function (key) {
327
327
  if (key === "default" || key === "__esModule") return;
328
328
  if (key in exports && exports[key] === _index28[key]) return;
@@ -333,7 +333,7 @@ Object.keys(_index28).forEach(function (key) {
333
333
  }
334
334
  });
335
335
  });
336
- var _index29 = require("./switch/index.js");
336
+ var _index29 = require("./select/index.js");
337
337
  Object.keys(_index29).forEach(function (key) {
338
338
  if (key === "default" || key === "__esModule") return;
339
339
  if (key in exports && exports[key] === _index29[key]) return;
@@ -344,7 +344,7 @@ Object.keys(_index29).forEach(function (key) {
344
344
  }
345
345
  });
346
346
  });
347
- var _index30 = require("./tabs/index.js");
347
+ var _index30 = require("./surface/index.js");
348
348
  Object.keys(_index30).forEach(function (key) {
349
349
  if (key === "default" || key === "__esModule") return;
350
350
  if (key in exports && exports[key] === _index30[key]) return;
@@ -355,7 +355,7 @@ Object.keys(_index30).forEach(function (key) {
355
355
  }
356
356
  });
357
357
  });
358
- var _index31 = require("./tag/index.js");
358
+ var _index31 = require("./switch/index.js");
359
359
  Object.keys(_index31).forEach(function (key) {
360
360
  if (key === "default" || key === "__esModule") return;
361
361
  if (key in exports && exports[key] === _index31[key]) return;
@@ -366,7 +366,7 @@ Object.keys(_index31).forEach(function (key) {
366
366
  }
367
367
  });
368
368
  });
369
- var _index32 = require("./text/index.js");
369
+ var _index32 = require("./tabs/index.js");
370
370
  Object.keys(_index32).forEach(function (key) {
371
371
  if (key === "default" || key === "__esModule") return;
372
372
  if (key in exports && exports[key] === _index32[key]) return;
@@ -376,4 +376,26 @@ Object.keys(_index32).forEach(function (key) {
376
376
  return _index32[key];
377
377
  }
378
378
  });
379
+ });
380
+ var _index33 = require("./tag/index.js");
381
+ Object.keys(_index33).forEach(function (key) {
382
+ if (key === "default" || key === "__esModule") return;
383
+ if (key in exports && exports[key] === _index33[key]) return;
384
+ Object.defineProperty(exports, key, {
385
+ enumerable: true,
386
+ get: function () {
387
+ return _index33[key];
388
+ }
389
+ });
390
+ });
391
+ var _index34 = require("./text/index.js");
392
+ Object.keys(_index34).forEach(function (key) {
393
+ if (key === "default" || key === "__esModule") return;
394
+ if (key in exports && exports[key] === _index34[key]) return;
395
+ Object.defineProperty(exports, key, {
396
+ enumerable: true,
397
+ get: function () {
398
+ return _index34[key];
399
+ }
400
+ });
379
401
  });
@@ -131,7 +131,9 @@ const BaseInput = ({
131
131
  if (!elementState.current.pointerDown) {
132
132
  props.onBlur?.(event);
133
133
  setInputIsFocused(false);
134
- setInputValue(inputValue?.trimEnd());
134
+ if (inputValue && inputValue?.trimEnd() !== inputValue) {
135
+ setInputValue(inputValue?.trimEnd());
136
+ }
135
137
  } else {
136
138
  inputRef.current?.focus();
137
139
  }
@@ -139,7 +141,7 @@ const BaseInput = ({
139
141
  pointerDown: false
140
142
  };
141
143
  }
142
- }), !!hasSuffixNode && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_index.Flex, {
144
+ }), hasSuffixNode && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_index.Flex, {
143
145
  align: "center",
144
146
  gap: theme.spacing.sm,
145
147
  children: [!!props.allowClear && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AllModeOverflow = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ /**
12
+ * 全部显示模式组件
13
+ */
14
+ const AllModeOverflow = ({
15
+ data,
16
+ renderItem,
17
+ prefix,
18
+ suffix,
19
+ style,
20
+ prefixStyle,
21
+ itemStyle,
22
+ suffixStyle,
23
+ onVisibleCountChange,
24
+ styles,
25
+ getKey
26
+ }) => {
27
+ (0, _react.useEffect)(() => {
28
+ onVisibleCountChange?.(data.length);
29
+ }, [data.length, onVisibleCountChange]);
30
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
31
+ style: [styles.container, style],
32
+ children: [prefix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
33
+ style: [styles.item, prefixStyle],
34
+ children: prefix
35
+ }), data.map((item, index) => {
36
+ const key = getKey(item, index);
37
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
38
+ style: [styles.item, itemStyle],
39
+ children: renderItem(item, {
40
+ index
41
+ })
42
+ }, key);
43
+ }), suffix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
44
+ style: [styles.item, suffixStyle],
45
+ children: suffix
46
+ })]
47
+ });
48
+ };
49
+ exports.AllModeOverflow = AllModeOverflow;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FixedCountOverflow = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ /**
12
+ * 固定数量模式组件
13
+ */
14
+ const FixedCountOverflow = ({
15
+ data,
16
+ renderItem,
17
+ renderRest,
18
+ maxCount,
19
+ prefix,
20
+ suffix,
21
+ style,
22
+ prefixStyle,
23
+ itemStyle,
24
+ suffixStyle,
25
+ restStyle,
26
+ onVisibleCountChange,
27
+ styles,
28
+ getKey
29
+ }) => {
30
+ const visibleCount = Math.min(data.length, maxCount);
31
+ const showRest = data.length > maxCount;
32
+ const omittedData = data.slice(maxCount);
33
+ (0, _react.useEffect)(() => {
34
+ onVisibleCountChange?.(visibleCount);
35
+ }, [visibleCount, onVisibleCountChange]);
36
+ const renderRestContent = (0, _react.useCallback)(() => {
37
+ if (typeof renderRest === 'function') {
38
+ return renderRest(omittedData);
39
+ }
40
+ if (renderRest) {
41
+ return renderRest;
42
+ }
43
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
44
+ style: [styles.rest],
45
+ children: ["+", omittedData.length, "..."]
46
+ });
47
+ }, [renderRest, omittedData, styles.rest]);
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
49
+ style: [styles.container, style],
50
+ children: [prefix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
51
+ style: [styles.item, prefixStyle],
52
+ children: prefix
53
+ }), data.slice(0, visibleCount).map((item, index) => {
54
+ const key = getKey(item, index);
55
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
56
+ style: [styles.item, itemStyle],
57
+ children: renderItem(item, {
58
+ index
59
+ })
60
+ }, key);
61
+ }), showRest && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
62
+ style: [styles.item, restStyle],
63
+ children: renderRestContent()
64
+ }), suffix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
65
+ style: [styles.item, suffixStyle],
66
+ children: suffix
67
+ })]
68
+ });
69
+ };
70
+ exports.FixedCountOverflow = FixedCountOverflow;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _overflow = require("./overflow.js");
7
+ Object.keys(_overflow).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _overflow[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _overflow[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Overflow = void 0;
7
+ var _lodashEs = require("lodash-es");
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _allModeOverflow = require("./all-mode-overflow.js");
10
+ var _fixedCountOverflow = require("./fixed-count-overflow.js");
11
+ var _responsiveOverflow = require("./responsive-overflow.js");
12
+ var _index = require("./style/index.js");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
+ /**
16
+ * Overflow 组件
17
+ *
18
+ * 利用 onLayout 在渲染前触发的特性,实现单次渲染的溢出处理组件
19
+ * 固定数量模式直接渲染,响应式模式通过预先计算确定最终显示状态
20
+ *
21
+ * @param props - 组件属性
22
+ * @returns React 元素
23
+ */
24
+ const Overflow = props => {
25
+ const {
26
+ maxCount = 'responsive',
27
+ itemKey
28
+ } = props;
29
+ const styles = (0, _index.useOverflowStyles)({
30
+ maxCount
31
+ });
32
+
33
+ /**
34
+ * 获取元素唯一标识
35
+ */
36
+ const getKey = (0, _react.useCallback)((item, index) => {
37
+ if (typeof itemKey === 'function') {
38
+ return itemKey(item, index);
39
+ }
40
+ if (itemKey && typeof item === 'object' && item !== null && typeof itemKey === 'string') {
41
+ const value = item[itemKey];
42
+ return typeof value === 'string' || typeof value === 'number' ? value : index;
43
+ }
44
+ return index;
45
+ }, [itemKey]);
46
+
47
+ // 固定数量模式
48
+ if ((0, _lodashEs.isNumber)(maxCount)) {
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_fixedCountOverflow.FixedCountOverflow, {
50
+ ...props,
51
+ styles: styles,
52
+ getKey: getKey
53
+ });
54
+ }
55
+
56
+ // 全部显示模式
57
+ if (maxCount === 'all') {
58
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_allModeOverflow.AllModeOverflow, {
59
+ ...props,
60
+ styles: styles,
61
+ getKey: getKey
62
+ });
63
+ }
64
+
65
+ // 响应式模式
66
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_responsiveOverflow.ResponsiveOverflow, {
67
+ ...props,
68
+ styles: styles,
69
+ getKey: getKey
70
+ });
71
+ };
72
+ exports.Overflow = Overflow;
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ResponsiveOverflow = void 0;
7
+ var _ahooks = require("ahooks");
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ /**
13
+ * 测量数据 - 存储所有测量的宽度信息
14
+ */
15
+
16
+ /**
17
+ * 计算结果 - 存储基于测量数据计算出的显示状态
18
+ */
19
+
20
+ /**
21
+ * 响应式 Overflow 组件
22
+ * 只有在 props 变化时才重新测量,onLayout 不直接触发测量
23
+ */
24
+ const ResponsiveOverflow = ({
25
+ data,
26
+ renderItem,
27
+ renderRest,
28
+ prefix,
29
+ suffix,
30
+ style,
31
+ prefixStyle,
32
+ itemStyle,
33
+ suffixStyle,
34
+ restStyle,
35
+ onVisibleCountChange,
36
+ itemsWidthTolerance = 0,
37
+ styles,
38
+ getKey
39
+ }) => {
40
+ // 测量数据
41
+ const measurementDataRef = (0, _react.useRef)({
42
+ container: 0,
43
+ items: new Map(),
44
+ prefix: 0,
45
+ suffix: 0,
46
+ rest: 0
47
+ });
48
+
49
+ // 计算结果
50
+ const calculationResultRef = (0, _react.useRef)({
51
+ visibleCount: 0,
52
+ showRest: false
53
+ });
54
+
55
+ // 上一次的结果(用于测量期间的显示优化)
56
+ const previousResultRef = (0, _react.useRef)({
57
+ visibleCount: 0,
58
+ showRest: false
59
+ });
60
+
61
+ // 测量完成标记
62
+ const measurementFlags = (0, _react.useRef)({
63
+ container: false,
64
+ prefix: false,
65
+ suffix: false,
66
+ rest: false,
67
+ items: new Set()
68
+ });
69
+
70
+ // 状态管理
71
+ const [, forceUpdate] = (0, _react.useState)({});
72
+ const [remeasureKey, setRemeasureKey] = (0, _react.useState)(0);
73
+ const isComplete = (0, _react.useRef)(false);
74
+ const triggerRerender = (0, _ahooks.useMemoizedFn)(() => forceUpdate({}));
75
+ /**
76
+ * 重置所有测量状态
77
+ */
78
+ const resetMeasurement = (0, _ahooks.useMemoizedFn)(() => {
79
+ if (!isComplete.current) {
80
+ return;
81
+ }
82
+ // 保存当前结果作为上一次的结果
83
+ previousResultRef.current = {
84
+ ...calculationResultRef.current
85
+ };
86
+ measurementDataRef.current = {
87
+ container: 0,
88
+ items: new Map(),
89
+ prefix: 0,
90
+ suffix: 0,
91
+ rest: 0
92
+ };
93
+ calculationResultRef.current = {
94
+ visibleCount: 0,
95
+ showRest: false
96
+ };
97
+ isComplete.current = false;
98
+ measurementFlags.current = {
99
+ container: false,
100
+ prefix: false,
101
+ suffix: false,
102
+ rest: false,
103
+ items: new Set()
104
+ };
105
+ setRemeasureKey(prev => prev + 1);
106
+ });
107
+
108
+ /**
109
+ * 检查是否所有必要的测量都已完成
110
+ */
111
+ const isAllMeasurementsComplete = () => {
112
+ const flags = measurementFlags.current;
113
+ if (!flags.container || !flags.rest) return false;
114
+ if (prefix && !flags.prefix) return false;
115
+ if (suffix && !flags.suffix) return false;
116
+
117
+ // 检查所有元素是否都已测量
118
+ for (let i = 0; i < data.length; i++) {
119
+ const key = getKey(data[i], i);
120
+ if (!flags.items.has(key)) return false;
121
+ }
122
+ return true;
123
+ };
124
+
125
+ /**
126
+ * 计算最终显示状态
127
+ */
128
+ const calculateDisplayState = measurementData => {
129
+ const {
130
+ container,
131
+ items,
132
+ prefix,
133
+ suffix,
134
+ rest
135
+ } = measurementData;
136
+ if (!container || data.length === 0) {
137
+ return {
138
+ visibleCount: 0,
139
+ showRest: false
140
+ };
141
+ }
142
+ const availableWidth = container - prefix - suffix;
143
+ let currentWidth = 0;
144
+ let visibleCount = 0;
145
+
146
+ // 计算所有元素的总宽度
147
+ let totalItemsWidth = 0;
148
+ for (let i = 0; i < data.length; i++) {
149
+ const key = getKey(data[i], i);
150
+ const itemWidth = items.get(key) || 0;
151
+ totalItemsWidth += itemWidth;
152
+ }
153
+
154
+ // 如果所有元素都能放下(考虑容差)
155
+ if (totalItemsWidth <= availableWidth + itemsWidthTolerance) {
156
+ return {
157
+ visibleCount: data.length,
158
+ showRest: false
159
+ };
160
+ }
161
+
162
+ // 需要截断,从前往后累积宽度
163
+ for (let i = 0; i < data.length; i++) {
164
+ const key = getKey(data[i], i);
165
+ const itemWidth = items.get(key) || 0;
166
+
167
+ // 检查加上当前元素和rest节点是否会超出
168
+ if (currentWidth + itemWidth + rest > availableWidth) {
169
+ // 如果是第一个元素就超出,至少显示一个
170
+ visibleCount = i === 0 ? 1 : i;
171
+ break;
172
+ }
173
+ currentWidth += itemWidth;
174
+ visibleCount = i + 1;
175
+ }
176
+ return {
177
+ visibleCount,
178
+ showRest: visibleCount < data.length
179
+ };
180
+ };
181
+
182
+ /**
183
+ * 完成测量并更新结果
184
+ */
185
+ const completeMeasurement = (0, _ahooks.useMemoizedFn)(() => {
186
+ if (!isAllMeasurementsComplete()) return;
187
+ const result = calculateDisplayState(measurementDataRef.current);
188
+ calculationResultRef.current = result;
189
+ isComplete.current = true;
190
+ previousResultRef.current = {
191
+ ...result
192
+ };
193
+ onVisibleCountChange?.(result.visibleCount);
194
+ triggerRerender();
195
+ });
196
+
197
+ // 影响布局的 props 变化时标记需要重新计算
198
+ (0, _react.useEffect)(() => {
199
+ resetMeasurement();
200
+ }, [data, renderItem, renderRest, prefix, suffix, style, prefixStyle, itemStyle, suffixStyle, restStyle, onVisibleCountChange, itemsWidthTolerance, styles, getKey]);
201
+
202
+ /**
203
+ * 布局测量处理函数
204
+ */
205
+ const createLayoutHandler = (0, _ahooks.useMemoizedFn)((elementType, itemKey) => event => {
206
+ // 测量完成后不再更新数据
207
+ if (isComplete.current) {
208
+ return;
209
+ }
210
+ const {
211
+ width
212
+ } = event.nativeEvent.layout;
213
+
214
+ // 更新测量数据和标记
215
+ if (elementType === 'items') {
216
+ measurementFlags.current.items.add(itemKey);
217
+ measurementDataRef.current.items.set(itemKey, width);
218
+ } else {
219
+ measurementFlags.current[elementType] = true;
220
+ measurementDataRef.current[elementType] = width;
221
+ }
222
+
223
+ // 检查是否可以完成测量
224
+ completeMeasurement();
225
+ });
226
+
227
+ /**
228
+ * 渲染 Rest 内容
229
+ */
230
+ const renderRestContent = () => {
231
+ const omittedData = data.slice(calculationResultRef.current.visibleCount);
232
+ if (typeof renderRest === 'function') {
233
+ return renderRest(omittedData);
234
+ }
235
+ if (renderRest) {
236
+ return renderRest;
237
+ }
238
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
239
+ style: [styles.rest, restStyle],
240
+ children: ["+", omittedData.length, "..."]
241
+ });
242
+ };
243
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
244
+ onLayout: createLayoutHandler('container'),
245
+ style: [styles.container, style],
246
+ children: [prefix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
247
+ onLayout: createLayoutHandler('prefix'),
248
+ style: [styles.item, prefixStyle],
249
+ children: prefix
250
+ }), data.map((item, index) => {
251
+ const key = getKey(item, index);
252
+
253
+ // 测量完成后,不渲染超出可见范围的元素
254
+ if (isComplete.current && index >= calculationResultRef.current.visibleCount) {
255
+ return null;
256
+ }
257
+
258
+ // 测量期间,如果有上一次的结果且当前元素超出上一次的可见范围,需要隐藏
259
+ const shouldHideInMeasurement = !isComplete.current && previousResultRef.current.visibleCount > 0 && index >= previousResultRef.current.visibleCount;
260
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
261
+ onLayout: createLayoutHandler('items', key),
262
+ style: [styles.item, itemStyle, shouldHideInMeasurement && styles.hidden],
263
+ children: renderItem(item, {
264
+ index
265
+ })
266
+ }, key);
267
+ }), !isComplete.current || calculationResultRef.current.showRest ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
268
+ onLayout: createLayoutHandler('rest'),
269
+ style: [styles.item, restStyle,
270
+ // 测量期间隐藏,测量完成后根据 showRest 决定是否隐藏
271
+ !isComplete.current && !previousResultRef.current.showRest && styles.hidden],
272
+ children: renderRestContent()
273
+ }) : null, suffix && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
274
+ onLayout: createLayoutHandler('suffix'),
275
+ style: [styles.item, suffixStyle],
276
+ children: suffix
277
+ })]
278
+ }, remeasureKey);
279
+ };
280
+ exports.ResponsiveOverflow = ResponsiveOverflow;