huibo-ui 0.3.0 → 0.5.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 (839) hide show
  1. package/dist/cjs/{a11y-802de67a.js → a11y-4385c871.js} +17 -2
  2. package/dist/cjs/a11y-4385c871.js.map +1 -0
  3. package/dist/cjs/{date-helpers-904747ff.js → date-helpers-c05ef385.js} +10 -17
  4. package/dist/cjs/date-helpers-c05ef385.js.map +1 -0
  5. package/dist/cjs/hb-affix.cjs.entry.js +1 -1
  6. package/dist/cjs/hb-alert.cjs.entry.js +2 -1
  7. package/dist/cjs/hb-alert.cjs.entry.js.map +1 -1
  8. package/dist/cjs/hb-aside.cjs.entry.js +1 -1
  9. package/dist/cjs/hb-avatar.cjs.entry.js +1 -1
  10. package/dist/cjs/hb-backtop.cjs.entry.js +2 -2
  11. package/dist/cjs/hb-badge.cjs.entry.js +1 -1
  12. package/dist/cjs/hb-breadcrumb-item.cjs.entry.js +1 -1
  13. package/dist/cjs/hb-breadcrumb.cjs.entry.js +1 -1
  14. package/dist/cjs/hb-button.cjs.entry.js +2 -2
  15. package/dist/cjs/hb-calendar.cjs.entry.js +78 -10
  16. package/dist/cjs/hb-calendar.cjs.entry.js.map +1 -1
  17. package/dist/cjs/hb-card.cjs.entry.js +1 -1
  18. package/dist/cjs/hb-cascader.cjs.entry.js +306 -146
  19. package/dist/cjs/hb-cascader.cjs.entry.js.map +1 -1
  20. package/dist/cjs/hb-checkbox-group.cjs.entry.js +12 -8
  21. package/dist/cjs/hb-checkbox-group.cjs.entry.js.map +1 -1
  22. package/dist/cjs/hb-checkbox.cjs.entry.js +9 -4
  23. package/dist/cjs/hb-checkbox.cjs.entry.js.map +1 -1
  24. package/dist/cjs/hb-collapse-item.cjs.entry.js +13 -4
  25. package/dist/cjs/hb-collapse-item.cjs.entry.js.map +1 -1
  26. package/dist/cjs/hb-collapse.cjs.entry.js +20 -15
  27. package/dist/cjs/hb-collapse.cjs.entry.js.map +1 -1
  28. package/dist/cjs/hb-color-picker-panel.cjs.entry.js +2 -2
  29. package/dist/cjs/hb-color-picker.cjs.entry.js +108 -28
  30. package/dist/cjs/hb-color-picker.cjs.entry.js.map +1 -1
  31. package/dist/cjs/hb-config-provider.cjs.entry.js +1 -1
  32. package/dist/cjs/hb-container.cjs.entry.js +2 -2
  33. package/dist/cjs/hb-date-picker-pane.cjs.entry.js +2 -2
  34. package/dist/cjs/hb-date-picker.cjs.entry.js +90 -9
  35. package/dist/cjs/hb-date-picker.cjs.entry.js.map +1 -1
  36. package/dist/cjs/hb-date-range-picker.cjs.entry.js +3 -3
  37. package/dist/cjs/hb-date-time-picker.cjs.entry.js +3 -3
  38. package/dist/cjs/hb-descriptions.cjs.entry.js +2 -2
  39. package/dist/cjs/hb-descriptions.cjs.entry.js.map +1 -1
  40. package/dist/cjs/hb-dialog.cjs.entry.js +51 -12
  41. package/dist/cjs/hb-dialog.cjs.entry.js.map +1 -1
  42. package/dist/cjs/hb-divider.cjs.entry.js +2 -2
  43. package/dist/cjs/hb-drawer.cjs.entry.js +34 -4
  44. package/dist/cjs/hb-drawer.cjs.entry.js.map +1 -1
  45. package/dist/cjs/hb-dropdown.cjs.entry.js +91 -11
  46. package/dist/cjs/hb-dropdown.cjs.entry.js.map +1 -1
  47. package/dist/cjs/hb-empty.cjs.entry.js +1 -1
  48. package/dist/cjs/hb-float-button.cjs.entry.js +2 -2
  49. package/dist/cjs/hb-footer.cjs.entry.js +1 -1
  50. package/dist/cjs/hb-form-item.cjs.entry.js +61 -9
  51. package/dist/cjs/hb-form-item.cjs.entry.js.map +1 -1
  52. package/dist/cjs/hb-form.cjs.entry.js +13 -8
  53. package/dist/cjs/hb-form.cjs.entry.js.map +1 -1
  54. package/dist/cjs/hb-header.cjs.entry.js +1 -1
  55. package/dist/cjs/hb-image-preview.cjs.entry.js +13 -9
  56. package/dist/cjs/hb-image-preview.cjs.entry.js.map +1 -1
  57. package/dist/cjs/hb-image.cjs.entry.js +21 -3
  58. package/dist/cjs/hb-image.cjs.entry.js.map +1 -1
  59. package/dist/cjs/hb-input-number.cjs.entry.js +7 -7
  60. package/dist/cjs/hb-input-number.cjs.entry.js.map +1 -1
  61. package/dist/cjs/hb-input-tag.cjs.entry.js +2 -2
  62. package/dist/cjs/hb-input.cjs.entry.js +40 -3
  63. package/dist/cjs/hb-input.cjs.entry.js.map +1 -1
  64. package/dist/cjs/hb-layout.cjs.entry.js +36 -14
  65. package/dist/cjs/hb-layout.cjs.entry.js.map +1 -1
  66. package/dist/cjs/hb-link.cjs.entry.js +2 -2
  67. package/dist/cjs/hb-loading.cjs.entry.js +2 -2
  68. package/dist/cjs/hb-main.cjs.entry.js +1 -1
  69. package/dist/cjs/hb-menu-item.cjs.entry.js +14 -5
  70. package/dist/cjs/hb-menu-item.cjs.entry.js.map +1 -1
  71. package/dist/cjs/hb-menu.cjs.entry.js +3 -3
  72. package/dist/cjs/hb-menu.cjs.entry.js.map +1 -1
  73. package/dist/cjs/hb-message.cjs.entry.js +13 -4
  74. package/dist/cjs/hb-message.cjs.entry.js.map +1 -1
  75. package/dist/cjs/hb-notification.cjs.entry.js +2 -2
  76. package/dist/cjs/hb-page-header.cjs.entry.js +1 -1
  77. package/dist/cjs/hb-pagination.cjs.entry.js +24 -8
  78. package/dist/cjs/hb-pagination.cjs.entry.js.map +1 -1
  79. package/dist/cjs/hb-popconfirm.cjs.entry.js +57 -8
  80. package/dist/cjs/hb-popconfirm.cjs.entry.js.map +1 -1
  81. package/dist/cjs/hb-popover.cjs.entry.js +37 -5
  82. package/dist/cjs/hb-popover.cjs.entry.js.map +1 -1
  83. package/dist/cjs/hb-progress.cjs.entry.js +1 -1
  84. package/dist/cjs/hb-radio.cjs.entry.js +8 -3
  85. package/dist/cjs/hb-radio.cjs.entry.js.map +1 -1
  86. package/dist/cjs/hb-rate.cjs.entry.js +46 -4
  87. package/dist/cjs/hb-rate.cjs.entry.js.map +1 -1
  88. package/dist/cjs/hb-result.cjs.entry.js +1 -1
  89. package/dist/cjs/hb-row.cjs.entry.js +2 -2
  90. package/dist/cjs/hb-scrollbar.cjs.entry.js +5 -5
  91. package/dist/cjs/hb-scrollbar.cjs.entry.js.map +1 -1
  92. package/dist/cjs/hb-segmented.cjs.entry.js +50 -5
  93. package/dist/cjs/hb-segmented.cjs.entry.js.map +1 -1
  94. package/dist/cjs/hb-select.cjs.entry.js +64 -16
  95. package/dist/cjs/hb-select.cjs.entry.js.map +1 -1
  96. package/dist/cjs/hb-slider.cjs.entry.js +186 -23
  97. package/dist/cjs/hb-slider.cjs.entry.js.map +1 -1
  98. package/dist/cjs/hb-space.cjs.entry.js +2 -2
  99. package/dist/cjs/hb-statistic.cjs.entry.js +1 -1
  100. package/dist/cjs/hb-step.cjs.entry.js +1 -1
  101. package/dist/cjs/hb-steps.cjs.entry.js +30 -9
  102. package/dist/cjs/hb-steps.cjs.entry.js.map +1 -1
  103. package/dist/cjs/hb-sub-menu.cjs.entry.js +5 -5
  104. package/dist/cjs/hb-switch.cjs.entry.js +9 -4
  105. package/dist/cjs/hb-switch.cjs.entry.js.map +1 -1
  106. package/dist/cjs/hb-tab-pane.cjs.entry.js +1 -1
  107. package/dist/cjs/hb-table.cjs.entry.js +26 -17
  108. package/dist/cjs/hb-table.cjs.entry.js.map +1 -1
  109. package/dist/cjs/hb-tabs.cjs.entry.js +31 -10
  110. package/dist/cjs/hb-tabs.cjs.entry.js.map +1 -1
  111. package/dist/cjs/hb-tag.cjs.entry.js +3 -2
  112. package/dist/cjs/hb-tag.cjs.entry.js.map +1 -1
  113. package/dist/cjs/hb-text.cjs.entry.js +2 -2
  114. package/dist/cjs/hb-time-picker.cjs.entry.js +14 -9
  115. package/dist/cjs/hb-time-picker.cjs.entry.js.map +1 -1
  116. package/dist/cjs/hb-time-select.cjs.entry.js +13 -4
  117. package/dist/cjs/hb-time-select.cjs.entry.js.map +1 -1
  118. package/dist/cjs/hb-timeline.cjs.entry.js +1 -1
  119. package/dist/cjs/hb-tooltip.cjs.entry.js +43 -6
  120. package/dist/cjs/hb-tooltip.cjs.entry.js.map +1 -1
  121. package/dist/cjs/hb-transfer.cjs.entry.js +2 -2
  122. package/dist/cjs/hb-tree-select.cjs.entry.js +215 -23
  123. package/dist/cjs/hb-tree-select.cjs.entry.js.map +1 -1
  124. package/dist/cjs/hb-tree.cjs.entry.js +145 -12
  125. package/dist/cjs/hb-tree.cjs.entry.js.map +1 -1
  126. package/dist/cjs/hb-upload.cjs.entry.js +3 -3
  127. package/dist/cjs/hb-watermark.cjs.entry.js +19 -11
  128. package/dist/cjs/hb-watermark.cjs.entry.js.map +1 -1
  129. package/dist/cjs/huibo-ui.cjs.js +1 -1
  130. package/dist/cjs/loader.cjs.js +1 -1
  131. package/dist/cjs/transition-59f1da0f.js +34 -0
  132. package/dist/cjs/transition-59f1da0f.js.map +1 -0
  133. package/dist/collection/collection-manifest.json +3 -3
  134. package/dist/collection/components/Affix/Affix.js +1 -1
  135. package/dist/collection/components/Alert/Alert.js +2 -1
  136. package/dist/collection/components/Alert/Alert.js.map +1 -1
  137. package/dist/collection/components/Avatar/Avatar.js +1 -1
  138. package/dist/collection/components/Backtop/Backtop.js +2 -2
  139. package/dist/collection/components/Badge/Badge.js +1 -1
  140. package/dist/collection/components/Breadcrumb/Breadcrumb.js +1 -1
  141. package/dist/collection/components/Breadcrumb/BreadcrumbItem.js +1 -1
  142. package/dist/collection/components/Button/Button.js +2 -2
  143. package/dist/collection/components/Calendar/Calendar.js +84 -10
  144. package/dist/collection/components/Calendar/Calendar.js.map +1 -1
  145. package/dist/collection/components/Calendar/calendar.css +16 -0
  146. package/dist/collection/components/Card/Card.js +1 -1
  147. package/dist/collection/components/Cascader/Cascader.js +410 -194
  148. package/dist/collection/components/Cascader/Cascader.js.map +1 -1
  149. package/dist/collection/components/Cascader/cascader.css +170 -16
  150. package/dist/collection/components/Checkbox/Checkbox.js +9 -4
  151. package/dist/collection/components/Checkbox/Checkbox.js.map +1 -1
  152. package/dist/collection/components/Checkbox/CheckboxGroup.js +12 -8
  153. package/dist/collection/components/Checkbox/CheckboxGroup.js.map +1 -1
  154. package/dist/collection/components/Collapse/Collapse.js +20 -15
  155. package/dist/collection/components/Collapse/Collapse.js.map +1 -1
  156. package/dist/collection/components/Collapse/CollapseItem.js +33 -4
  157. package/dist/collection/components/Collapse/CollapseItem.js.map +1 -1
  158. package/dist/collection/components/ColorPicker/ColorPicker.js +109 -28
  159. package/dist/collection/components/ColorPicker/ColorPicker.js.map +1 -1
  160. package/dist/collection/components/ColorPicker/color-picker.css +21 -3
  161. package/dist/collection/components/ColorPickerPanel/ColorPickerPanel.js +2 -2
  162. package/dist/collection/components/ConfigProvider/ConfigProvider.js +1 -1
  163. package/dist/collection/components/Container/Aside.js +1 -1
  164. package/dist/collection/components/Container/Container.js +2 -2
  165. package/dist/collection/components/Container/Footer.js +1 -1
  166. package/dist/collection/components/Container/Header.js +1 -1
  167. package/dist/collection/components/Container/Main.js +1 -1
  168. package/dist/collection/components/DatePicker/DatePicker.js +94 -12
  169. package/dist/collection/components/DatePicker/DatePicker.js.map +1 -1
  170. package/dist/collection/components/DatePicker/date-picker.css +63 -2
  171. package/dist/collection/components/DatePickerPane/DatePickerPane.js +1 -1
  172. package/dist/collection/components/DateRangePicker/DateRangePicker.js +2 -2
  173. package/dist/collection/components/DateTimePicker/DateTimePicker.js +2 -2
  174. package/dist/collection/components/Descriptions/Descriptions.js +1 -1
  175. package/dist/collection/components/Descriptions/descriptions.css +52 -10
  176. package/dist/collection/components/Dialog/Dialog.js +54 -10
  177. package/dist/collection/components/Dialog/Dialog.js.map +1 -1
  178. package/dist/collection/components/Dialog/dialog.css +57 -11
  179. package/dist/collection/components/Divider/Divider.js +2 -2
  180. package/dist/collection/components/Drawer/Drawer.js +34 -3
  181. package/dist/collection/components/Drawer/Drawer.js.map +1 -1
  182. package/dist/collection/components/Drawer/drawer.css +207 -17
  183. package/dist/collection/components/Dropdown/Dropdown.js +103 -12
  184. package/dist/collection/components/Dropdown/Dropdown.js.map +1 -1
  185. package/dist/collection/components/Dropdown/dropdown.css +26 -3
  186. package/dist/collection/components/Empty/Empty.js +1 -1
  187. package/dist/collection/components/FloatButton/FloatButton.js +2 -2
  188. package/dist/collection/components/Form/Form.js +14 -9
  189. package/dist/collection/components/Form/Form.js.map +1 -1
  190. package/dist/collection/components/Form/FormItem.js +62 -10
  191. package/dist/collection/components/Form/FormItem.js.map +1 -1
  192. package/dist/collection/components/Form/form-item.css +57 -6
  193. package/dist/collection/components/Form/form.css +1 -0
  194. package/dist/collection/components/Image/Image.js +24 -3
  195. package/dist/collection/components/Image/Image.js.map +1 -1
  196. package/dist/collection/components/ImagePreview/ImagePreview.js +13 -9
  197. package/dist/collection/components/ImagePreview/ImagePreview.js.map +1 -1
  198. package/dist/collection/components/Input/Input.js +39 -2
  199. package/dist/collection/components/Input/Input.js.map +1 -1
  200. package/dist/collection/components/Input/input.css +22 -4
  201. package/dist/collection/components/InputNumber/InputNumber.js +6 -6
  202. package/dist/collection/components/InputNumber/InputNumber.js.map +1 -1
  203. package/dist/collection/components/InputNumber/input-number.css +11 -1
  204. package/dist/collection/components/InputTag/InputTag.js +2 -2
  205. package/dist/collection/components/Layout/Layout.js +87 -34
  206. package/dist/collection/components/Layout/Layout.js.map +1 -1
  207. package/dist/collection/components/Layout/Row.js +2 -2
  208. package/dist/collection/components/Layout/layout.css +1732 -71
  209. package/dist/collection/components/Link/Link.js +2 -2
  210. package/dist/collection/components/Loading/Loading.js +2 -2
  211. package/dist/collection/components/Menu/Menu.js +2 -2
  212. package/dist/collection/components/Menu/MenuItem.js +34 -5
  213. package/dist/collection/components/Menu/MenuItem.js.map +1 -1
  214. package/dist/collection/components/Menu/SubMenu.js +4 -4
  215. package/dist/collection/components/Menu/menu.css +25 -0
  216. package/dist/collection/components/Message/Message.js +13 -4
  217. package/dist/collection/components/Message/Message.js.map +1 -1
  218. package/dist/collection/components/Notification/Notification.js +2 -2
  219. package/dist/collection/components/PageHeader/PageHeader.js +1 -1
  220. package/dist/collection/components/Pagination/Pagination.js +26 -7
  221. package/dist/collection/components/Pagination/Pagination.js.map +1 -1
  222. package/dist/collection/components/Pagination/pagination.css +23 -0
  223. package/dist/collection/components/Popconfirm/Popconfirm.js +66 -7
  224. package/dist/collection/components/Popconfirm/Popconfirm.js.map +1 -1
  225. package/dist/collection/components/Popconfirm/popconfirm.css +80 -16
  226. package/dist/collection/components/Popover/Popover.js +46 -4
  227. package/dist/collection/components/Popover/Popover.js.map +1 -1
  228. package/dist/collection/components/Popover/popover.css +49 -8
  229. package/dist/collection/components/Progress/Progress.js +1 -1
  230. package/dist/collection/components/Radio/Radio.js +8 -3
  231. package/dist/collection/components/Radio/Radio.js.map +1 -1
  232. package/dist/collection/components/Rate/Rate.js +46 -4
  233. package/dist/collection/components/Rate/Rate.js.map +1 -1
  234. package/dist/collection/components/Result/Result.js +1 -1
  235. package/dist/collection/components/Scrollbar/Scrollbar.js +5 -5
  236. package/dist/collection/components/Scrollbar/Scrollbar.js.map +1 -1
  237. package/dist/collection/components/Segmented/Segmented.js +65 -6
  238. package/dist/collection/components/Segmented/Segmented.js.map +1 -1
  239. package/dist/collection/components/Select/Select.js +63 -15
  240. package/dist/collection/components/Select/Select.js.map +1 -1
  241. package/dist/collection/components/Select/select.css +50 -5
  242. package/dist/collection/components/Slider/Slider.js +218 -24
  243. package/dist/collection/components/Slider/Slider.js.map +1 -1
  244. package/dist/collection/components/Slider/slider.css +57 -7
  245. package/dist/collection/components/Space/Space.js +2 -2
  246. package/dist/collection/components/Statistic/Statistic.js +1 -1
  247. package/dist/collection/components/Steps/Step.js +1 -1
  248. package/dist/collection/components/Steps/Steps.js +35 -8
  249. package/dist/collection/components/Steps/Steps.js.map +1 -1
  250. package/dist/collection/components/Switch/Switch.js +8 -3
  251. package/dist/collection/components/Switch/Switch.js.map +1 -1
  252. package/dist/collection/components/Switch/switch.css +47 -1
  253. package/dist/collection/components/Table/Table.js +25 -16
  254. package/dist/collection/components/Table/Table.js.map +1 -1
  255. package/dist/collection/components/Table/table.css +26 -2
  256. package/dist/collection/components/Tabs/TabPane.js +1 -1
  257. package/dist/collection/components/Tabs/Tabs.js +31 -10
  258. package/dist/collection/components/Tabs/Tabs.js.map +1 -1
  259. package/dist/collection/components/Tag/Tag.js +3 -2
  260. package/dist/collection/components/Tag/Tag.js.map +1 -1
  261. package/dist/collection/components/Text/Text.js +2 -2
  262. package/dist/collection/components/TimePicker/TimePicker.js +14 -9
  263. package/dist/collection/components/TimePicker/TimePicker.js.map +1 -1
  264. package/dist/collection/components/TimeSelect/TimeSelect.js +13 -4
  265. package/dist/collection/components/TimeSelect/TimeSelect.js.map +1 -1
  266. package/dist/collection/components/Timeline/Timeline.js +1 -1
  267. package/dist/collection/components/Tooltip/Tooltip.js +52 -6
  268. package/dist/collection/components/Tooltip/Tooltip.js.map +1 -1
  269. package/dist/collection/components/Tooltip/tooltip.css +24 -2
  270. package/dist/collection/components/Transfer/Transfer.js +2 -2
  271. package/dist/collection/components/Tree/Tree.js +147 -13
  272. package/dist/collection/components/Tree/Tree.js.map +1 -1
  273. package/dist/collection/components/TreeSelect/TreeSelect.js +219 -23
  274. package/dist/collection/components/TreeSelect/TreeSelect.js.map +1 -1
  275. package/dist/collection/components/TreeSelect/tree-select.css +41 -7
  276. package/dist/collection/components/Upload/Upload.js +3 -3
  277. package/dist/collection/components/Watermark/Watermark.js +19 -11
  278. package/dist/collection/components/Watermark/Watermark.js.map +1 -1
  279. package/dist/collection/utils/a11y.js +15 -1
  280. package/dist/collection/utils/a11y.js.map +1 -1
  281. package/dist/collection/utils/date-helpers.js +9 -16
  282. package/dist/collection/utils/date-helpers.js.map +1 -1
  283. package/dist/collection/utils/transition.js +29 -0
  284. package/dist/collection/utils/transition.js.map +1 -0
  285. package/dist/components/hb-affix.js +1 -1
  286. package/dist/components/hb-alert.js +2 -1
  287. package/dist/components/hb-alert.js.map +1 -1
  288. package/dist/components/hb-aside.js +1 -1
  289. package/dist/components/hb-avatar.js +1 -1
  290. package/dist/components/hb-backtop.js +2 -2
  291. package/dist/components/hb-badge.js +1 -1
  292. package/dist/components/hb-breadcrumb-item.js +1 -1
  293. package/dist/components/hb-breadcrumb.js +1 -1
  294. package/dist/components/hb-button.js +2 -2
  295. package/dist/components/hb-calendar.js +80 -11
  296. package/dist/components/hb-calendar.js.map +1 -1
  297. package/dist/components/hb-card.js +1 -1
  298. package/dist/components/hb-cascader.js +309 -146
  299. package/dist/components/hb-cascader.js.map +1 -1
  300. package/dist/components/hb-checkbox-group.js +12 -8
  301. package/dist/components/hb-checkbox-group.js.map +1 -1
  302. package/dist/components/hb-checkbox.js +9 -4
  303. package/dist/components/hb-checkbox.js.map +1 -1
  304. package/dist/components/hb-collapse-item.js +14 -4
  305. package/dist/components/hb-collapse-item.js.map +1 -1
  306. package/dist/components/hb-collapse.js +20 -15
  307. package/dist/components/hb-collapse.js.map +1 -1
  308. package/dist/components/hb-color-picker-panel.js +2 -2
  309. package/dist/components/hb-color-picker.js +110 -29
  310. package/dist/components/hb-color-picker.js.map +1 -1
  311. package/dist/components/hb-config-provider.js +1 -1
  312. package/dist/components/hb-container.js +2 -2
  313. package/dist/components/hb-date-picker-pane.js +2 -2
  314. package/dist/components/hb-date-picker.js +92 -10
  315. package/dist/components/hb-date-picker.js.map +1 -1
  316. package/dist/components/hb-date-range-picker.js +3 -3
  317. package/dist/components/hb-date-time-picker.js +3 -3
  318. package/dist/components/hb-descriptions.js +2 -2
  319. package/dist/components/hb-descriptions.js.map +1 -1
  320. package/dist/components/hb-dialog.js +53 -13
  321. package/dist/components/hb-dialog.js.map +1 -1
  322. package/dist/components/hb-divider.js +2 -2
  323. package/dist/components/hb-drawer.js +36 -5
  324. package/dist/components/hb-drawer.js.map +1 -1
  325. package/dist/components/hb-dropdown.js +94 -12
  326. package/dist/components/hb-dropdown.js.map +1 -1
  327. package/dist/components/hb-empty.js +1 -1
  328. package/dist/components/hb-float-button.js +2 -2
  329. package/dist/components/hb-footer.js +1 -1
  330. package/dist/components/hb-form-item.js +61 -9
  331. package/dist/components/hb-form-item.js.map +1 -1
  332. package/dist/components/hb-form.js +13 -8
  333. package/dist/components/hb-form.js.map +1 -1
  334. package/dist/components/hb-header.js +1 -1
  335. package/dist/components/hb-icon.js +1 -89
  336. package/dist/components/hb-icon.js.map +1 -1
  337. package/dist/components/hb-image-preview.js +13 -9
  338. package/dist/components/hb-image-preview.js.map +1 -1
  339. package/dist/components/hb-image.js +23 -3
  340. package/dist/components/hb-image.js.map +1 -1
  341. package/dist/components/hb-input-number.js +7 -7
  342. package/dist/components/hb-input-number.js.map +1 -1
  343. package/dist/components/hb-input-tag.js +2 -2
  344. package/dist/components/hb-input.js +40 -3
  345. package/dist/components/hb-input.js.map +1 -1
  346. package/dist/components/hb-layout.js +36 -14
  347. package/dist/components/hb-layout.js.map +1 -1
  348. package/dist/components/hb-link.js +2 -2
  349. package/dist/components/hb-loading.js +2 -2
  350. package/dist/components/hb-main.js +1 -1
  351. package/dist/components/hb-menu-item.js +15 -5
  352. package/dist/components/hb-menu-item.js.map +1 -1
  353. package/dist/components/hb-menu.js +3 -3
  354. package/dist/components/hb-menu.js.map +1 -1
  355. package/dist/components/hb-message.js +13 -4
  356. package/dist/components/hb-message.js.map +1 -1
  357. package/dist/components/hb-notification.js +2 -2
  358. package/dist/components/hb-page-header.js +1 -1
  359. package/dist/components/hb-pagination.js +28 -10
  360. package/dist/components/hb-pagination.js.map +1 -1
  361. package/dist/components/hb-popconfirm.js +58 -8
  362. package/dist/components/hb-popconfirm.js.map +1 -1
  363. package/dist/components/hb-popover.js +38 -5
  364. package/dist/components/hb-popover.js.map +1 -1
  365. package/dist/components/hb-progress.js +1 -1
  366. package/dist/components/hb-radio.js +8 -3
  367. package/dist/components/hb-radio.js.map +1 -1
  368. package/dist/components/hb-rate.js +46 -4
  369. package/dist/components/hb-rate.js.map +1 -1
  370. package/dist/components/hb-result.js +1 -1
  371. package/dist/components/hb-row.js +2 -2
  372. package/dist/components/hb-scrollbar.js +5 -5
  373. package/dist/components/hb-scrollbar.js.map +1 -1
  374. package/dist/components/hb-segmented.js +54 -6
  375. package/dist/components/hb-segmented.js.map +1 -1
  376. package/dist/components/hb-select.js +64 -16
  377. package/dist/components/hb-select.js.map +1 -1
  378. package/dist/components/hb-slider.js +191 -24
  379. package/dist/components/hb-slider.js.map +1 -1
  380. package/dist/components/hb-space.js +2 -2
  381. package/dist/components/hb-statistic.js +1 -1
  382. package/dist/components/hb-step.js +1 -1
  383. package/dist/components/hb-steps.js +35 -8
  384. package/dist/components/hb-steps.js.map +1 -1
  385. package/dist/components/hb-sub-menu.js +5 -5
  386. package/dist/components/hb-switch.js +9 -4
  387. package/dist/components/hb-switch.js.map +1 -1
  388. package/dist/components/hb-tab-pane.js +1 -1
  389. package/dist/components/hb-table.js +26 -17
  390. package/dist/components/hb-table.js.map +1 -1
  391. package/dist/components/hb-tabs.js +31 -10
  392. package/dist/components/hb-tabs.js.map +1 -1
  393. package/dist/components/hb-tag.js +3 -2
  394. package/dist/components/hb-tag.js.map +1 -1
  395. package/dist/components/hb-text.js +2 -2
  396. package/dist/components/hb-time-picker.js +14 -9
  397. package/dist/components/hb-time-picker.js.map +1 -1
  398. package/dist/components/hb-time-select.js +13 -4
  399. package/dist/components/hb-time-select.js.map +1 -1
  400. package/dist/components/hb-timeline.js +1 -1
  401. package/dist/components/hb-tooltip.js +44 -6
  402. package/dist/components/hb-tooltip.js.map +1 -1
  403. package/dist/components/hb-transfer.js +2 -2
  404. package/dist/components/hb-tree-select.js +219 -24
  405. package/dist/components/hb-tree-select.js.map +1 -1
  406. package/dist/components/hb-tree.js +147 -13
  407. package/dist/components/hb-tree.js.map +1 -1
  408. package/dist/components/hb-upload.js +3 -3
  409. package/dist/components/hb-watermark.js +19 -11
  410. package/dist/components/hb-watermark.js.map +1 -1
  411. package/dist/components/{p-cc0aeb50.js → p-00aa34c8.js} +17 -3
  412. package/dist/components/p-00aa34c8.js.map +1 -0
  413. package/dist/components/p-86d92faf.js +93 -0
  414. package/dist/components/p-86d92faf.js.map +1 -0
  415. package/dist/{esm/date-helpers-e4d85a67.js → components/p-e0876aca.js} +10 -17
  416. package/dist/components/p-e0876aca.js.map +1 -0
  417. package/dist/components/p-fad66d69.js +32 -0
  418. package/dist/components/p-fad66d69.js.map +1 -0
  419. package/dist/esm/{a11y-f9ab2964.js → a11y-e4cde5b0.js} +17 -3
  420. package/dist/esm/a11y-e4cde5b0.js.map +1 -0
  421. package/dist/{components/p-cf94cbf6.js → esm/date-helpers-259ed2f1.js} +10 -17
  422. package/dist/esm/date-helpers-259ed2f1.js.map +1 -0
  423. package/dist/esm/hb-affix.entry.js +1 -1
  424. package/dist/esm/hb-alert.entry.js +2 -1
  425. package/dist/esm/hb-alert.entry.js.map +1 -1
  426. package/dist/esm/hb-aside.entry.js +1 -1
  427. package/dist/esm/hb-avatar.entry.js +1 -1
  428. package/dist/esm/hb-backtop.entry.js +2 -2
  429. package/dist/esm/hb-badge.entry.js +1 -1
  430. package/dist/esm/hb-breadcrumb-item.entry.js +1 -1
  431. package/dist/esm/hb-breadcrumb.entry.js +1 -1
  432. package/dist/esm/hb-button.entry.js +2 -2
  433. package/dist/esm/hb-calendar.entry.js +78 -10
  434. package/dist/esm/hb-calendar.entry.js.map +1 -1
  435. package/dist/esm/hb-card.entry.js +1 -1
  436. package/dist/esm/hb-cascader.entry.js +306 -146
  437. package/dist/esm/hb-cascader.entry.js.map +1 -1
  438. package/dist/esm/hb-checkbox-group.entry.js +12 -8
  439. package/dist/esm/hb-checkbox-group.entry.js.map +1 -1
  440. package/dist/esm/hb-checkbox.entry.js +9 -4
  441. package/dist/esm/hb-checkbox.entry.js.map +1 -1
  442. package/dist/esm/hb-collapse-item.entry.js +13 -4
  443. package/dist/esm/hb-collapse-item.entry.js.map +1 -1
  444. package/dist/esm/hb-collapse.entry.js +20 -15
  445. package/dist/esm/hb-collapse.entry.js.map +1 -1
  446. package/dist/esm/hb-color-picker-panel.entry.js +2 -2
  447. package/dist/esm/hb-color-picker.entry.js +108 -28
  448. package/dist/esm/hb-color-picker.entry.js.map +1 -1
  449. package/dist/esm/hb-config-provider.entry.js +1 -1
  450. package/dist/esm/hb-container.entry.js +2 -2
  451. package/dist/esm/hb-date-picker-pane.entry.js +2 -2
  452. package/dist/esm/hb-date-picker.entry.js +90 -9
  453. package/dist/esm/hb-date-picker.entry.js.map +1 -1
  454. package/dist/esm/hb-date-range-picker.entry.js +3 -3
  455. package/dist/esm/hb-date-time-picker.entry.js +3 -3
  456. package/dist/esm/hb-descriptions.entry.js +2 -2
  457. package/dist/esm/hb-descriptions.entry.js.map +1 -1
  458. package/dist/esm/hb-dialog.entry.js +51 -12
  459. package/dist/esm/hb-dialog.entry.js.map +1 -1
  460. package/dist/esm/hb-divider.entry.js +2 -2
  461. package/dist/esm/hb-drawer.entry.js +34 -4
  462. package/dist/esm/hb-drawer.entry.js.map +1 -1
  463. package/dist/esm/hb-dropdown.entry.js +91 -11
  464. package/dist/esm/hb-dropdown.entry.js.map +1 -1
  465. package/dist/esm/hb-empty.entry.js +1 -1
  466. package/dist/esm/hb-float-button.entry.js +2 -2
  467. package/dist/esm/hb-footer.entry.js +1 -1
  468. package/dist/esm/hb-form-item.entry.js +61 -9
  469. package/dist/esm/hb-form-item.entry.js.map +1 -1
  470. package/dist/esm/hb-form.entry.js +13 -8
  471. package/dist/esm/hb-form.entry.js.map +1 -1
  472. package/dist/esm/hb-header.entry.js +1 -1
  473. package/dist/esm/hb-image-preview.entry.js +13 -9
  474. package/dist/esm/hb-image-preview.entry.js.map +1 -1
  475. package/dist/esm/hb-image.entry.js +21 -3
  476. package/dist/esm/hb-image.entry.js.map +1 -1
  477. package/dist/esm/hb-input-number.entry.js +7 -7
  478. package/dist/esm/hb-input-number.entry.js.map +1 -1
  479. package/dist/esm/hb-input-tag.entry.js +2 -2
  480. package/dist/esm/hb-input.entry.js +40 -3
  481. package/dist/esm/hb-input.entry.js.map +1 -1
  482. package/dist/esm/hb-layout.entry.js +36 -14
  483. package/dist/esm/hb-layout.entry.js.map +1 -1
  484. package/dist/esm/hb-link.entry.js +2 -2
  485. package/dist/esm/hb-loading.entry.js +2 -2
  486. package/dist/esm/hb-main.entry.js +1 -1
  487. package/dist/esm/hb-menu-item.entry.js +14 -5
  488. package/dist/esm/hb-menu-item.entry.js.map +1 -1
  489. package/dist/esm/hb-menu.entry.js +3 -3
  490. package/dist/esm/hb-menu.entry.js.map +1 -1
  491. package/dist/esm/hb-message.entry.js +13 -4
  492. package/dist/esm/hb-message.entry.js.map +1 -1
  493. package/dist/esm/hb-notification.entry.js +2 -2
  494. package/dist/esm/hb-page-header.entry.js +1 -1
  495. package/dist/esm/hb-pagination.entry.js +24 -8
  496. package/dist/esm/hb-pagination.entry.js.map +1 -1
  497. package/dist/esm/hb-popconfirm.entry.js +57 -8
  498. package/dist/esm/hb-popconfirm.entry.js.map +1 -1
  499. package/dist/esm/hb-popover.entry.js +37 -5
  500. package/dist/esm/hb-popover.entry.js.map +1 -1
  501. package/dist/esm/hb-progress.entry.js +1 -1
  502. package/dist/esm/hb-radio.entry.js +8 -3
  503. package/dist/esm/hb-radio.entry.js.map +1 -1
  504. package/dist/esm/hb-rate.entry.js +46 -4
  505. package/dist/esm/hb-rate.entry.js.map +1 -1
  506. package/dist/esm/hb-result.entry.js +1 -1
  507. package/dist/esm/hb-row.entry.js +2 -2
  508. package/dist/esm/hb-scrollbar.entry.js +5 -5
  509. package/dist/esm/hb-scrollbar.entry.js.map +1 -1
  510. package/dist/esm/hb-segmented.entry.js +51 -6
  511. package/dist/esm/hb-segmented.entry.js.map +1 -1
  512. package/dist/esm/hb-select.entry.js +64 -16
  513. package/dist/esm/hb-select.entry.js.map +1 -1
  514. package/dist/esm/hb-slider.entry.js +186 -23
  515. package/dist/esm/hb-slider.entry.js.map +1 -1
  516. package/dist/esm/hb-space.entry.js +2 -2
  517. package/dist/esm/hb-statistic.entry.js +1 -1
  518. package/dist/esm/hb-step.entry.js +1 -1
  519. package/dist/esm/hb-steps.entry.js +28 -7
  520. package/dist/esm/hb-steps.entry.js.map +1 -1
  521. package/dist/esm/hb-sub-menu.entry.js +5 -5
  522. package/dist/esm/hb-switch.entry.js +9 -4
  523. package/dist/esm/hb-switch.entry.js.map +1 -1
  524. package/dist/esm/hb-tab-pane.entry.js +1 -1
  525. package/dist/esm/hb-table.entry.js +26 -17
  526. package/dist/esm/hb-table.entry.js.map +1 -1
  527. package/dist/esm/hb-tabs.entry.js +31 -10
  528. package/dist/esm/hb-tabs.entry.js.map +1 -1
  529. package/dist/esm/hb-tag.entry.js +3 -2
  530. package/dist/esm/hb-tag.entry.js.map +1 -1
  531. package/dist/esm/hb-text.entry.js +2 -2
  532. package/dist/esm/hb-time-picker.entry.js +14 -9
  533. package/dist/esm/hb-time-picker.entry.js.map +1 -1
  534. package/dist/esm/hb-time-select.entry.js +13 -4
  535. package/dist/esm/hb-time-select.entry.js.map +1 -1
  536. package/dist/esm/hb-timeline.entry.js +1 -1
  537. package/dist/esm/hb-tooltip.entry.js +43 -6
  538. package/dist/esm/hb-tooltip.entry.js.map +1 -1
  539. package/dist/esm/hb-transfer.entry.js +2 -2
  540. package/dist/esm/hb-tree-select.entry.js +215 -23
  541. package/dist/esm/hb-tree-select.entry.js.map +1 -1
  542. package/dist/esm/hb-tree.entry.js +145 -12
  543. package/dist/esm/hb-tree.entry.js.map +1 -1
  544. package/dist/esm/hb-upload.entry.js +3 -3
  545. package/dist/esm/hb-watermark.entry.js +19 -11
  546. package/dist/esm/hb-watermark.entry.js.map +1 -1
  547. package/dist/esm/huibo-ui.js +1 -1
  548. package/dist/esm/loader.js +1 -1
  549. package/dist/esm/transition-4295d789.js +32 -0
  550. package/dist/esm/transition-4295d789.js.map +1 -0
  551. package/dist/huibo-ui/huibo-ui.css +1 -1
  552. package/dist/huibo-ui/huibo-ui.esm.js +1 -1
  553. package/dist/huibo-ui/huibo-ui.esm.js.map +1 -1
  554. package/dist/huibo-ui/p-00aa34c8.js +2 -0
  555. package/dist/huibo-ui/p-00aa34c8.js.map +1 -0
  556. package/dist/huibo-ui/p-02f15843.entry.js +2 -0
  557. package/dist/huibo-ui/p-0cc1e3f3.entry.js +2 -0
  558. package/dist/huibo-ui/p-0cc1e3f3.entry.js.map +1 -0
  559. package/dist/huibo-ui/{p-f1c084c5.entry.js → p-0ddae4e9.entry.js} +2 -2
  560. package/dist/huibo-ui/{p-672076c3.entry.js → p-10f6c184.entry.js} +2 -2
  561. package/dist/huibo-ui/p-10f6c184.entry.js.map +1 -0
  562. package/dist/huibo-ui/{p-6ac242fe.entry.js → p-14c3b47b.entry.js} +2 -2
  563. package/dist/huibo-ui/{p-8c80a765.entry.js → p-15db24e9.entry.js} +2 -2
  564. package/dist/huibo-ui/{p-8b027491.entry.js → p-193efdc0.entry.js} +2 -2
  565. package/dist/huibo-ui/{p-8d925e3d.entry.js → p-1b0fbe69.entry.js} +2 -2
  566. package/dist/huibo-ui/{p-85f68526.entry.js → p-1b98152b.entry.js} +2 -2
  567. package/dist/huibo-ui/p-1b98152b.entry.js.map +1 -0
  568. package/dist/huibo-ui/p-1f6d0adb.entry.js +2 -0
  569. package/dist/huibo-ui/p-1f6d0adb.entry.js.map +1 -0
  570. package/dist/huibo-ui/{p-f374d5a3.entry.js → p-20632186.entry.js} +2 -2
  571. package/dist/huibo-ui/{p-e6f2d71d.entry.js → p-20fc554b.entry.js} +2 -2
  572. package/dist/huibo-ui/{p-64ca0980.entry.js → p-29092b85.entry.js} +2 -2
  573. package/dist/huibo-ui/p-29092b85.entry.js.map +1 -0
  574. package/dist/huibo-ui/p-2bc30b1b.entry.js +2 -0
  575. package/dist/huibo-ui/p-2bc30b1b.entry.js.map +1 -0
  576. package/dist/huibo-ui/{p-fd19813c.entry.js → p-2bcda1bb.entry.js} +2 -2
  577. package/dist/huibo-ui/{p-231a7335.entry.js → p-2ca9796a.entry.js} +2 -2
  578. package/dist/huibo-ui/p-2ca9796a.entry.js.map +1 -0
  579. package/dist/huibo-ui/{p-e0768565.entry.js → p-3042f986.entry.js} +2 -2
  580. package/dist/huibo-ui/{p-be48d2aa.entry.js → p-3dacb26b.entry.js} +2 -2
  581. package/dist/huibo-ui/{p-6a1ec3ff.entry.js → p-3deff48c.entry.js} +2 -2
  582. package/dist/huibo-ui/{p-c321c4aa.entry.js → p-412ff618.entry.js} +2 -2
  583. package/dist/huibo-ui/p-415295f3.entry.js +2 -0
  584. package/dist/huibo-ui/p-415295f3.entry.js.map +1 -0
  585. package/dist/huibo-ui/p-494e6c25.entry.js +2 -0
  586. package/dist/huibo-ui/p-494e6c25.entry.js.map +1 -0
  587. package/dist/huibo-ui/p-4d87d7f4.entry.js +2 -0
  588. package/dist/huibo-ui/p-4d87d7f4.entry.js.map +1 -0
  589. package/dist/huibo-ui/p-54a28052.entry.js +2 -0
  590. package/dist/huibo-ui/p-54a28052.entry.js.map +1 -0
  591. package/dist/huibo-ui/{p-88127de1.entry.js → p-55cd13eb.entry.js} +2 -2
  592. package/dist/huibo-ui/{p-58ebb9b3.entry.js → p-5c839288.entry.js} +2 -2
  593. package/dist/huibo-ui/p-5e253c15.entry.js +2 -0
  594. package/dist/huibo-ui/p-5e253c15.entry.js.map +1 -0
  595. package/dist/huibo-ui/p-63d68c61.entry.js +2 -0
  596. package/dist/huibo-ui/p-63d68c61.entry.js.map +1 -0
  597. package/dist/huibo-ui/{p-a042e3d0.entry.js → p-6518c435.entry.js} +2 -2
  598. package/dist/huibo-ui/p-687d8dff.entry.js +2 -0
  599. package/dist/huibo-ui/p-687d8dff.entry.js.map +1 -0
  600. package/dist/huibo-ui/p-688460ce.entry.js +2 -0
  601. package/dist/huibo-ui/p-688460ce.entry.js.map +1 -0
  602. package/dist/huibo-ui/p-69bb1dd9.entry.js +2 -0
  603. package/dist/huibo-ui/p-69bb1dd9.entry.js.map +1 -0
  604. package/dist/huibo-ui/{p-a0015341.entry.js → p-6bfeab80.entry.js} +2 -2
  605. package/dist/huibo-ui/{p-4001c08d.entry.js → p-6c23fbd1.entry.js} +2 -2
  606. package/dist/huibo-ui/p-6c23fbd1.entry.js.map +1 -0
  607. package/dist/huibo-ui/p-6c8cf248.entry.js +2 -0
  608. package/dist/huibo-ui/p-6c8cf248.entry.js.map +1 -0
  609. package/dist/huibo-ui/p-6efed295.entry.js +2 -0
  610. package/dist/huibo-ui/p-6efed295.entry.js.map +1 -0
  611. package/dist/huibo-ui/{p-8b1ae77e.entry.js → p-746a11a3.entry.js} +2 -2
  612. package/dist/huibo-ui/{p-c3e8893d.entry.js → p-79b24b83.entry.js} +2 -2
  613. package/dist/huibo-ui/p-79b24b83.entry.js.map +1 -0
  614. package/dist/huibo-ui/p-7a38b3e2.entry.js +2 -0
  615. package/dist/huibo-ui/p-7a38b3e2.entry.js.map +1 -0
  616. package/dist/huibo-ui/{p-c922d672.entry.js → p-7a682c56.entry.js} +2 -2
  617. package/dist/huibo-ui/{p-8c987d57.entry.js → p-7f65dc36.entry.js} +2 -2
  618. package/dist/huibo-ui/{p-463de26d.entry.js → p-815fc943.entry.js} +2 -2
  619. package/dist/huibo-ui/{p-d87fc21a.entry.js → p-88a6c905.entry.js} +2 -2
  620. package/dist/huibo-ui/{p-77017274.entry.js → p-89be7973.entry.js} +2 -2
  621. package/dist/huibo-ui/p-8a202bc5.entry.js +2 -0
  622. package/dist/huibo-ui/p-8a202bc5.entry.js.map +1 -0
  623. package/dist/huibo-ui/{p-315feadf.entry.js → p-8c4415ed.entry.js} +2 -2
  624. package/dist/huibo-ui/p-8c4415ed.entry.js.map +1 -0
  625. package/dist/huibo-ui/{p-9319c650.entry.js → p-950e7465.entry.js} +2 -2
  626. package/dist/huibo-ui/{p-6b381d0e.entry.js → p-96cecd21.entry.js} +2 -2
  627. package/dist/huibo-ui/p-96cecd21.entry.js.map +1 -0
  628. package/dist/huibo-ui/{p-710f38de.entry.js → p-98b513cd.entry.js} +2 -2
  629. package/dist/huibo-ui/p-98b513cd.entry.js.map +1 -0
  630. package/dist/huibo-ui/{p-5df47135.entry.js → p-a190ca89.entry.js} +2 -2
  631. package/dist/huibo-ui/{p-0e65e1bd.entry.js → p-ac18c68b.entry.js} +2 -2
  632. package/dist/huibo-ui/p-ac18c68b.entry.js.map +1 -0
  633. package/dist/huibo-ui/{p-d64b91ef.entry.js → p-ac45291c.entry.js} +2 -2
  634. package/dist/huibo-ui/p-ac45291c.entry.js.map +1 -0
  635. package/dist/huibo-ui/{p-477d8568.entry.js → p-aeae83af.entry.js} +2 -2
  636. package/dist/huibo-ui/{p-b489a526.entry.js → p-b06c8020.entry.js} +2 -2
  637. package/dist/huibo-ui/{p-dfaf7e37.entry.js → p-b105cf76.entry.js} +2 -2
  638. package/dist/huibo-ui/p-b105cf76.entry.js.map +1 -0
  639. package/dist/huibo-ui/{p-c3e665f6.entry.js → p-b38802b0.entry.js} +2 -2
  640. package/dist/huibo-ui/p-b38802b0.entry.js.map +1 -0
  641. package/dist/huibo-ui/{p-ea74fcae.entry.js → p-b3fd12c7.entry.js} +2 -2
  642. package/dist/huibo-ui/p-b3fd12c7.entry.js.map +1 -0
  643. package/dist/huibo-ui/p-b5ea18ba.entry.js +2 -0
  644. package/dist/huibo-ui/p-b5ea18ba.entry.js.map +1 -0
  645. package/dist/huibo-ui/{p-e2a8a396.entry.js → p-b6afe81e.entry.js} +2 -2
  646. package/dist/huibo-ui/{p-2b286698.entry.js → p-b7885d4a.entry.js} +2 -2
  647. package/dist/huibo-ui/p-b7900dee.entry.js +2 -0
  648. package/dist/huibo-ui/p-b7900dee.entry.js.map +1 -0
  649. package/dist/huibo-ui/p-b8c83751.entry.js +2 -0
  650. package/dist/huibo-ui/p-b8c83751.entry.js.map +1 -0
  651. package/dist/huibo-ui/p-c7713947.entry.js +2 -0
  652. package/dist/huibo-ui/p-c7713947.entry.js.map +1 -0
  653. package/dist/huibo-ui/{p-e0ab9010.entry.js → p-c869842c.entry.js} +2 -2
  654. package/dist/huibo-ui/p-c869842c.entry.js.map +1 -0
  655. package/dist/huibo-ui/{p-476527c1.entry.js → p-c8e917db.entry.js} +2 -2
  656. package/dist/huibo-ui/p-c8e917db.entry.js.map +1 -0
  657. package/dist/huibo-ui/p-cb66dbef.entry.js +2 -0
  658. package/dist/huibo-ui/p-cb66dbef.entry.js.map +1 -0
  659. package/dist/huibo-ui/p-cde83f76.entry.js +2 -0
  660. package/dist/huibo-ui/p-cde83f76.entry.js.map +1 -0
  661. package/dist/huibo-ui/{p-10c088f3.entry.js → p-d9c7c378.entry.js} +2 -2
  662. package/dist/huibo-ui/{p-332c8877.entry.js → p-dd9c6459.entry.js} +2 -2
  663. package/dist/huibo-ui/{p-80aca641.entry.js → p-dfccc7aa.entry.js} +2 -2
  664. package/dist/huibo-ui/{p-21682e92.entry.js → p-dfd144d8.entry.js} +2 -2
  665. package/dist/huibo-ui/p-e0876aca.js +2 -0
  666. package/dist/huibo-ui/p-e0876aca.js.map +1 -0
  667. package/dist/huibo-ui/p-e1773c93.entry.js +2 -0
  668. package/dist/huibo-ui/p-e1773c93.entry.js.map +1 -0
  669. package/dist/huibo-ui/{p-079a4130.entry.js → p-e3155cd7.entry.js} +2 -2
  670. package/dist/huibo-ui/{p-59b2e61c.entry.js → p-e73c357f.entry.js} +2 -2
  671. package/dist/huibo-ui/p-e73c357f.entry.js.map +1 -0
  672. package/dist/huibo-ui/{p-c1b4eacb.entry.js → p-e7c73624.entry.js} +2 -2
  673. package/dist/huibo-ui/p-e7c73624.entry.js.map +1 -0
  674. package/dist/huibo-ui/{p-d7815b4f.entry.js → p-e9e7abca.entry.js} +2 -2
  675. package/dist/huibo-ui/{p-f81ec512.entry.js → p-ea0823f3.entry.js} +2 -2
  676. package/dist/huibo-ui/p-ea0823f3.entry.js.map +1 -0
  677. package/dist/huibo-ui/{p-2e6584ea.entry.js → p-f1f2483f.entry.js} +2 -2
  678. package/dist/huibo-ui/{p-465dcb4c.entry.js → p-f2c78699.entry.js} +2 -2
  679. package/dist/huibo-ui/p-fad66d69.js +2 -0
  680. package/dist/huibo-ui/p-fad66d69.js.map +1 -0
  681. package/dist/huibo-ui/{p-4d8b1404.entry.js → p-fd6831f9.entry.js} +2 -2
  682. package/dist/huibo-ui/p-ff6bc5cc.entry.js +2 -0
  683. package/dist/huibo-ui/p-ff6bc5cc.entry.js.map +1 -0
  684. package/dist/types/components/Calendar/Calendar.d.ts +13 -1
  685. package/dist/types/components/Cascader/Cascader.d.ts +80 -90
  686. package/dist/types/components/Checkbox/Checkbox.d.ts +5 -0
  687. package/dist/types/components/Checkbox/CheckboxGroup.d.ts +1 -0
  688. package/dist/types/components/Collapse/Collapse.d.ts +2 -0
  689. package/dist/types/components/Collapse/CollapseItem.d.ts +8 -1
  690. package/dist/types/components/ColorPicker/ColorPicker.d.ts +11 -0
  691. package/dist/types/components/DatePicker/DatePicker.d.ts +14 -3
  692. package/dist/types/components/Dialog/Dialog.d.ts +13 -1
  693. package/dist/types/components/Drawer/Drawer.d.ts +4 -0
  694. package/dist/types/components/Dropdown/Dropdown.d.ts +18 -1
  695. package/dist/types/components/Form/Form.d.ts +2 -0
  696. package/dist/types/components/Form/FormItem.d.ts +10 -0
  697. package/dist/types/components/Image/Image.d.ts +6 -0
  698. package/dist/types/components/ImagePreview/ImagePreview.d.ts +5 -1
  699. package/dist/types/components/Input/Input.d.ts +9 -0
  700. package/dist/types/components/Layout/Layout.d.ts +20 -10
  701. package/dist/types/components/Menu/MenuItem.d.ts +8 -1
  702. package/dist/types/components/Message/Message.d.ts +3 -0
  703. package/dist/types/components/Pagination/Pagination.d.ts +3 -0
  704. package/dist/types/components/Popconfirm/Popconfirm.d.ts +16 -0
  705. package/dist/types/components/Popover/Popover.d.ts +14 -0
  706. package/dist/types/components/Radio/Radio.d.ts +5 -0
  707. package/dist/types/components/Rate/Rate.d.ts +7 -0
  708. package/dist/types/components/Segmented/Segmented.d.ts +18 -1
  709. package/dist/types/components/Select/Select.d.ts +11 -0
  710. package/dist/types/components/Slider/Slider.d.ts +27 -1
  711. package/dist/types/components/Steps/Steps.d.ts +14 -6
  712. package/dist/types/components/Table/Table.d.ts +8 -2
  713. package/dist/types/components/Tabs/Tabs.d.ts +6 -0
  714. package/dist/types/components/Tooltip/Tooltip.d.ts +15 -1
  715. package/dist/types/components/Tree/Tree.d.ts +24 -0
  716. package/dist/types/components/TreeSelect/TreeSelect.d.ts +26 -0
  717. package/dist/types/components/Watermark/Watermark.d.ts +7 -1
  718. package/dist/types/components.d.ts +290 -98
  719. package/dist/types/utils/a11y.d.ts +9 -0
  720. package/dist/types/utils/date-helpers.d.ts +1 -1
  721. package/dist/types/utils/transition.d.ts +27 -0
  722. package/package.json +8 -2
  723. package/readme.md +88 -73
  724. package/dist/cjs/a11y-802de67a.js.map +0 -1
  725. package/dist/cjs/date-helpers-904747ff.js.map +0 -1
  726. package/dist/components/p-cc0aeb50.js.map +0 -1
  727. package/dist/components/p-cf94cbf6.js.map +0 -1
  728. package/dist/esm/a11y-f9ab2964.js.map +0 -1
  729. package/dist/esm/date-helpers-e4d85a67.js.map +0 -1
  730. package/dist/huibo-ui/p-003cee87.entry.js +0 -2
  731. package/dist/huibo-ui/p-003cee87.entry.js.map +0 -1
  732. package/dist/huibo-ui/p-0a033738.entry.js +0 -2
  733. package/dist/huibo-ui/p-0a033738.entry.js.map +0 -1
  734. package/dist/huibo-ui/p-0bef78ac.entry.js +0 -2
  735. package/dist/huibo-ui/p-0bef78ac.entry.js.map +0 -1
  736. package/dist/huibo-ui/p-0e65e1bd.entry.js.map +0 -1
  737. package/dist/huibo-ui/p-0f189251.entry.js +0 -2
  738. package/dist/huibo-ui/p-0f189251.entry.js.map +0 -1
  739. package/dist/huibo-ui/p-1b5acd6d.entry.js +0 -2
  740. package/dist/huibo-ui/p-1b5acd6d.entry.js.map +0 -1
  741. package/dist/huibo-ui/p-231a7335.entry.js.map +0 -1
  742. package/dist/huibo-ui/p-24ad7eec.entry.js +0 -2
  743. package/dist/huibo-ui/p-24ad7eec.entry.js.map +0 -1
  744. package/dist/huibo-ui/p-315feadf.entry.js.map +0 -1
  745. package/dist/huibo-ui/p-3c7f73c8.entry.js +0 -2
  746. package/dist/huibo-ui/p-3c7f73c8.entry.js.map +0 -1
  747. package/dist/huibo-ui/p-4001c08d.entry.js.map +0 -1
  748. package/dist/huibo-ui/p-44c48246.entry.js +0 -2
  749. package/dist/huibo-ui/p-44c48246.entry.js.map +0 -1
  750. package/dist/huibo-ui/p-476527c1.entry.js.map +0 -1
  751. package/dist/huibo-ui/p-4d0dff15.entry.js +0 -2
  752. package/dist/huibo-ui/p-58d20809.entry.js +0 -2
  753. package/dist/huibo-ui/p-58d20809.entry.js.map +0 -1
  754. package/dist/huibo-ui/p-59b2e61c.entry.js.map +0 -1
  755. package/dist/huibo-ui/p-64ca0980.entry.js.map +0 -1
  756. package/dist/huibo-ui/p-672076c3.entry.js.map +0 -1
  757. package/dist/huibo-ui/p-6b381d0e.entry.js.map +0 -1
  758. package/dist/huibo-ui/p-710f38de.entry.js.map +0 -1
  759. package/dist/huibo-ui/p-756acbdb.entry.js +0 -2
  760. package/dist/huibo-ui/p-756acbdb.entry.js.map +0 -1
  761. package/dist/huibo-ui/p-75a93de3.entry.js +0 -2
  762. package/dist/huibo-ui/p-75a93de3.entry.js.map +0 -1
  763. package/dist/huibo-ui/p-769960f4.entry.js +0 -2
  764. package/dist/huibo-ui/p-769960f4.entry.js.map +0 -1
  765. package/dist/huibo-ui/p-7f6975ad.entry.js +0 -2
  766. package/dist/huibo-ui/p-7f6975ad.entry.js.map +0 -1
  767. package/dist/huibo-ui/p-85f68526.entry.js.map +0 -1
  768. package/dist/huibo-ui/p-8d615521.entry.js +0 -2
  769. package/dist/huibo-ui/p-8d615521.entry.js.map +0 -1
  770. package/dist/huibo-ui/p-953b9514.entry.js +0 -2
  771. package/dist/huibo-ui/p-953b9514.entry.js.map +0 -1
  772. package/dist/huibo-ui/p-965d4d02.entry.js +0 -2
  773. package/dist/huibo-ui/p-965d4d02.entry.js.map +0 -1
  774. package/dist/huibo-ui/p-ad6b0c6e.entry.js +0 -2
  775. package/dist/huibo-ui/p-ad6b0c6e.entry.js.map +0 -1
  776. package/dist/huibo-ui/p-c1a059d9.entry.js +0 -2
  777. package/dist/huibo-ui/p-c1a059d9.entry.js.map +0 -1
  778. package/dist/huibo-ui/p-c1b4eacb.entry.js.map +0 -1
  779. package/dist/huibo-ui/p-c3e665f6.entry.js.map +0 -1
  780. package/dist/huibo-ui/p-c3e8893d.entry.js.map +0 -1
  781. package/dist/huibo-ui/p-cc0aeb50.js +0 -2
  782. package/dist/huibo-ui/p-cc0aeb50.js.map +0 -1
  783. package/dist/huibo-ui/p-cf94cbf6.js +0 -2
  784. package/dist/huibo-ui/p-cf94cbf6.js.map +0 -1
  785. package/dist/huibo-ui/p-d3939d44.entry.js +0 -2
  786. package/dist/huibo-ui/p-d3939d44.entry.js.map +0 -1
  787. package/dist/huibo-ui/p-d64b91ef.entry.js.map +0 -1
  788. package/dist/huibo-ui/p-dd05cb2c.entry.js +0 -2
  789. package/dist/huibo-ui/p-dd05cb2c.entry.js.map +0 -1
  790. package/dist/huibo-ui/p-dfaf7e37.entry.js.map +0 -1
  791. package/dist/huibo-ui/p-e0ab9010.entry.js.map +0 -1
  792. package/dist/huibo-ui/p-e9490259.entry.js +0 -2
  793. package/dist/huibo-ui/p-e9490259.entry.js.map +0 -1
  794. package/dist/huibo-ui/p-ea74fcae.entry.js.map +0 -1
  795. package/dist/huibo-ui/p-ebd04656.entry.js +0 -2
  796. package/dist/huibo-ui/p-ebd04656.entry.js.map +0 -1
  797. package/dist/huibo-ui/p-ed0ff857.entry.js +0 -2
  798. package/dist/huibo-ui/p-ed0ff857.entry.js.map +0 -1
  799. package/dist/huibo-ui/p-f0ac7db5.entry.js +0 -2
  800. package/dist/huibo-ui/p-f0ac7db5.entry.js.map +0 -1
  801. package/dist/huibo-ui/p-f81ec512.entry.js.map +0 -1
  802. /package/dist/huibo-ui/{p-4d0dff15.entry.js.map → p-02f15843.entry.js.map} +0 -0
  803. /package/dist/huibo-ui/{p-f1c084c5.entry.js.map → p-0ddae4e9.entry.js.map} +0 -0
  804. /package/dist/huibo-ui/{p-6ac242fe.entry.js.map → p-14c3b47b.entry.js.map} +0 -0
  805. /package/dist/huibo-ui/{p-8c80a765.entry.js.map → p-15db24e9.entry.js.map} +0 -0
  806. /package/dist/huibo-ui/{p-8b027491.entry.js.map → p-193efdc0.entry.js.map} +0 -0
  807. /package/dist/huibo-ui/{p-8d925e3d.entry.js.map → p-1b0fbe69.entry.js.map} +0 -0
  808. /package/dist/huibo-ui/{p-f374d5a3.entry.js.map → p-20632186.entry.js.map} +0 -0
  809. /package/dist/huibo-ui/{p-e6f2d71d.entry.js.map → p-20fc554b.entry.js.map} +0 -0
  810. /package/dist/huibo-ui/{p-fd19813c.entry.js.map → p-2bcda1bb.entry.js.map} +0 -0
  811. /package/dist/huibo-ui/{p-e0768565.entry.js.map → p-3042f986.entry.js.map} +0 -0
  812. /package/dist/huibo-ui/{p-be48d2aa.entry.js.map → p-3dacb26b.entry.js.map} +0 -0
  813. /package/dist/huibo-ui/{p-6a1ec3ff.entry.js.map → p-3deff48c.entry.js.map} +0 -0
  814. /package/dist/huibo-ui/{p-c321c4aa.entry.js.map → p-412ff618.entry.js.map} +0 -0
  815. /package/dist/huibo-ui/{p-88127de1.entry.js.map → p-55cd13eb.entry.js.map} +0 -0
  816. /package/dist/huibo-ui/{p-58ebb9b3.entry.js.map → p-5c839288.entry.js.map} +0 -0
  817. /package/dist/huibo-ui/{p-a042e3d0.entry.js.map → p-6518c435.entry.js.map} +0 -0
  818. /package/dist/huibo-ui/{p-a0015341.entry.js.map → p-6bfeab80.entry.js.map} +0 -0
  819. /package/dist/huibo-ui/{p-8b1ae77e.entry.js.map → p-746a11a3.entry.js.map} +0 -0
  820. /package/dist/huibo-ui/{p-c922d672.entry.js.map → p-7a682c56.entry.js.map} +0 -0
  821. /package/dist/huibo-ui/{p-8c987d57.entry.js.map → p-7f65dc36.entry.js.map} +0 -0
  822. /package/dist/huibo-ui/{p-463de26d.entry.js.map → p-815fc943.entry.js.map} +0 -0
  823. /package/dist/huibo-ui/{p-d87fc21a.entry.js.map → p-88a6c905.entry.js.map} +0 -0
  824. /package/dist/huibo-ui/{p-77017274.entry.js.map → p-89be7973.entry.js.map} +0 -0
  825. /package/dist/huibo-ui/{p-9319c650.entry.js.map → p-950e7465.entry.js.map} +0 -0
  826. /package/dist/huibo-ui/{p-5df47135.entry.js.map → p-a190ca89.entry.js.map} +0 -0
  827. /package/dist/huibo-ui/{p-477d8568.entry.js.map → p-aeae83af.entry.js.map} +0 -0
  828. /package/dist/huibo-ui/{p-b489a526.entry.js.map → p-b06c8020.entry.js.map} +0 -0
  829. /package/dist/huibo-ui/{p-e2a8a396.entry.js.map → p-b6afe81e.entry.js.map} +0 -0
  830. /package/dist/huibo-ui/{p-2b286698.entry.js.map → p-b7885d4a.entry.js.map} +0 -0
  831. /package/dist/huibo-ui/{p-10c088f3.entry.js.map → p-d9c7c378.entry.js.map} +0 -0
  832. /package/dist/huibo-ui/{p-332c8877.entry.js.map → p-dd9c6459.entry.js.map} +0 -0
  833. /package/dist/huibo-ui/{p-80aca641.entry.js.map → p-dfccc7aa.entry.js.map} +0 -0
  834. /package/dist/huibo-ui/{p-21682e92.entry.js.map → p-dfd144d8.entry.js.map} +0 -0
  835. /package/dist/huibo-ui/{p-079a4130.entry.js.map → p-e3155cd7.entry.js.map} +0 -0
  836. /package/dist/huibo-ui/{p-d7815b4f.entry.js.map → p-e9e7abca.entry.js.map} +0 -0
  837. /package/dist/huibo-ui/{p-2e6584ea.entry.js.map → p-f1f2483f.entry.js.map} +0 -0
  838. /package/dist/huibo-ui/{p-465dcb4c.entry.js.map → p-f2c78699.entry.js.map} +0 -0
  839. /package/dist/huibo-ui/{p-4d8b1404.entry.js.map → p-fd6831f9.entry.js.map} +0 -0
@@ -8,36 +8,87 @@
8
8
  gap: var(--hb-spacing-sm);
9
9
  }
10
10
 
11
+ /* label 位置:顶部(对齐 antd label-position="top")——
12
+ 需要 Form 通过 class 下发,但 FormItem 在独立使用时也支持自身包装。
13
+ 这里用 :host([data-label-position="top"]) 兜底,Form 可通过 setting attribute 生效。 */
14
+ :host([data-label-top]) .hb-form-item,
15
+ .hb-form-item--label-top {
16
+ flex-direction: column;
17
+ align-items: stretch;
18
+ gap: var(--hb-spacing-xs);
19
+ }
20
+
11
21
  .hb-form-item__label {
12
22
  display: inline-flex;
13
23
  align-items: center;
14
24
  justify-content: flex-end;
15
- height: var(--hb-size-default);
16
- font-size: var(--hb-font-size-sm);
25
+ height: var(--hb-size-default, 32px);
26
+ font-size: var(--hb-font-size-sm, 14px);
17
27
  color: var(--hb-color-text);
18
28
  white-space: nowrap;
19
29
  flex-shrink: 0;
20
30
  }
21
31
 
32
+ /* label-position=top 时标签左对齐 */
33
+ :host([data-label-top]) .hb-form-item__label,
34
+ .hb-form-item--label-top .hb-form-item__label {
35
+ justify-content: flex-start;
36
+ height: auto;
37
+ padding-bottom: var(--hb-spacing-xxs, 2px);
38
+ }
39
+
40
+ /* label-position=left 时标签左对齐 */
41
+ .hb-form-item--label-left .hb-form-item__label {
42
+ justify-content: flex-start;
43
+ }
44
+
22
45
  .hb-form-item__required {
23
46
  color: var(--hb-color-danger);
24
47
  margin-right: 4px;
48
+ font-size: var(--hb-font-size-sm, 14px);
49
+ font-family: SimSun, sans-serif;
25
50
  }
26
51
 
27
52
  .hb-form-item__content {
28
53
  flex: 1;
29
54
  position: relative;
55
+ min-width: 0;
30
56
  }
31
57
 
32
58
  .hb-form-item__error {
33
- font-size: var(--hb-font-size-xs);
59
+ font-size: var(--hb-font-size-xs, 12px);
34
60
  color: var(--hb-color-danger);
35
61
  margin-top: 4px;
36
- line-height: 1;
62
+ line-height: 1.5;
63
+ min-height: 0;
37
64
  animation: hb-form-error-fade-in 0.2s ease-out;
38
65
  }
39
66
 
40
67
  @keyframes hb-form-error-fade-in {
41
- from { opacity: 0; transform: translateY(-4px); }
42
- to { opacity: 1; transform: translateY(0); }
68
+ from {
69
+ opacity: 0;
70
+ transform: translateY(-4px);
71
+ }
72
+ to {
73
+ opacity: 1;
74
+ transform: translateY(0);
75
+ }
76
+ }
77
+
78
+ /* ============================================================
79
+ * 响应式(移动端):小屏强制 label 顶部布局,
80
+ * 避免标签列在窄屏被挤压。覆盖 hb-form-item--label-left/right。
81
+ * ============================================================ */
82
+ @media (max-width: 575.98px) {
83
+ .hb-form-item {
84
+ flex-direction: column !important;
85
+ align-items: stretch !important;
86
+ gap: var(--hb-spacing-xs) !important;
87
+ }
88
+
89
+ .hb-form-item__label {
90
+ justify-content: flex-start !important;
91
+ height: auto !important;
92
+ padding-bottom: var(--hb-spacing-xxs, 2px) !important;
93
+ }
43
94
  }
@@ -12,4 +12,5 @@
12
12
  flex-direction: row;
13
13
  flex-wrap: wrap;
14
14
  gap: var(--hb-spacing-sm) var(--hb-spacing-lg);
15
+ align-items: flex-start;
15
16
  }
@@ -11,10 +11,25 @@ export class Image {
11
11
  loaded = false;
12
12
  error = false;
13
13
  previewVisible = false;
14
- handleLoad = () => { this.loaded = true; };
15
- handleError = () => { this.error = true; };
14
+ /**
15
+ * src 时重置 loaded/error
16
+ * 修复 B5——修复前换 src 不清状态:坏图换好图卡在错误占位(error 不清零),
17
+ * 好图换坏图 loaded 仍 true 造成短暂状态错乱。
18
+ */
19
+ handleSrcChange() {
20
+ this.loaded = false;
21
+ this.error = false;
22
+ }
23
+ handleLoad = () => {
24
+ this.loaded = true;
25
+ };
26
+ handleError = () => {
27
+ this.error = true;
28
+ };
16
29
  render() {
17
- return (h("div", { key: 'c6ededfba4d6a1d4b9356c1b18dc7b19aa8c8631', class: "hb-image", style: { width: this.width, height: this.height, borderRadius: this.radius } }, !this.error ? (h("img", { src: this.src, alt: this.alt, class: { 'hb-image__inner': true, 'hb-image__inner--loaded': this.loaded }, style: { objectFit: this.fit }, loading: this.lazy ? 'lazy' : undefined, onLoad: this.handleLoad, onError: this.handleError, onClick: () => this.preview && (this.previewVisible = true) })) : (h("div", { class: "hb-image__error" }, "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25")), this.previewVisible && (h("div", { key: 'b32748bc6a54360e9cfab47ee06671f4568bae8c', class: "hb-image__preview", onClick: () => { this.previewVisible = false; } }, h("img", { key: '7bcc5a1f9b34756827fb8566a953296f808febea', src: this.src, alt: this.alt, class: "hb-image__preview-img" })))));
30
+ return (h("div", { key: 'c9bbb745e78918ca3659138a91e7472911ac4c09', class: "hb-image", style: { width: this.width, height: this.height, borderRadius: this.radius } }, !this.error ? (h("img", { src: this.src, alt: this.alt, class: { 'hb-image__inner': true, 'hb-image__inner--loaded': this.loaded }, style: { objectFit: this.fit }, loading: this.lazy ? 'lazy' : undefined, onLoad: this.handleLoad, onError: this.handleError, onClick: () => this.preview && (this.previewVisible = true) })) : (h("div", { class: "hb-image__error" }, "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25")), this.previewVisible && (h("div", { key: '7d3b00d09c919169eab62ab6f525b2ef2f038a4c', class: "hb-image__preview", onClick: () => {
31
+ this.previewVisible = false;
32
+ } }, h("img", { key: '7c05ea33e51493d3a297f0e1c7d3511efae46a6c', src: this.src, alt: this.alt, class: "hb-image__preview-img" })))));
18
33
  }
19
34
  static get is() { return "hb-image"; }
20
35
  static get encapsulation() { return "shadow"; }
@@ -196,5 +211,11 @@ export class Image {
196
211
  "previewVisible": {}
197
212
  };
198
213
  }
214
+ static get watchers() {
215
+ return [{
216
+ "propName": "src",
217
+ "methodName": "handleSrcChange"
218
+ }];
219
+ }
199
220
  }
200
221
  //# sourceMappingURL=Image.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG1D,MAAM,OAAO,KAAK;IACR,GAAG,GAAW,EAAE,CAAC;IACjB,GAAG,GAAW,EAAE,CAAC;IACjB,KAAK,CAAU;IACf,MAAM,CAAU;IAChB,GAAG,GAAyD,MAAM,CAAC;IACnE,IAAI,GAAY,KAAK,CAAC;IACtB,OAAO,GAAY,KAAK,CAAC;IACzB,MAAM,CAAU;IAEf,MAAM,GAAY,KAAK,CAAC;IACxB,KAAK,GAAY,KAAK,CAAC;IACvB,cAAc,GAAY,KAAK,CAAC;IAEjC,UAAU,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnD,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;YAC/F,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,WACE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAC5B,KAAK,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,CAAC,MAAM,EAAE,EAC1E,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAC9B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvC,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAC3D,CACH,CAAC,CAAC,CAAC,CACF,WAAK,KAAK,EAAC,iBAAiB,2CAAa,CAC1C;YACA,IAAI,CAAC,cAAc,IAAI,CACtB,4DAAK,KAAK,EAAC,mBAAmB,EAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC5E,4DAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,uBAAuB,GAAG,CAC/D,CACP,CACG,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, State } from '@stencil/core';\n\n@Component({ tag: 'hb-image', styleUrl: 'image.css', shadow: true })\nexport class Image {\n @Prop() src: string = '';\n @Prop() alt: string = '';\n @Prop() width?: string;\n @Prop() height?: string;\n @Prop() fit: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down' = 'fill';\n @Prop() lazy: boolean = false;\n @Prop() preview: boolean = false;\n @Prop() radius?: string;\n\n @State() loaded: boolean = false;\n @State() error: boolean = false;\n @State() previewVisible: boolean = false;\n\n private handleLoad = () => { this.loaded = true; };\n private handleError = () => { this.error = true; };\n\n render() {\n return (\n <div class=\"hb-image\" style={{ width: this.width, height: this.height, borderRadius: this.radius }}>\n {!this.error ? (\n <img\n src={this.src} alt={this.alt}\n class={{ 'hb-image__inner': true, 'hb-image__inner--loaded': this.loaded }}\n style={{ objectFit: this.fit }}\n loading={this.lazy ? 'lazy' : undefined}\n onLoad={this.handleLoad}\n onError={this.handleError}\n onClick={() => this.preview && (this.previewVisible = true)}\n />\n ) : (\n <div class=\"hb-image__error\">图片加载失败</div>\n )}\n {this.previewVisible && (\n <div class=\"hb-image__preview\" onClick={() => { this.previewVisible = false; }}>\n <img src={this.src} alt={this.alt} class=\"hb-image__preview-img\" />\n </div>\n )}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGjE,MAAM,OAAO,KAAK;IACR,GAAG,GAAW,EAAE,CAAC;IACjB,GAAG,GAAW,EAAE,CAAC;IACjB,KAAK,CAAU;IACf,MAAM,CAAU;IAChB,GAAG,GAAyD,MAAM,CAAC;IACnE,IAAI,GAAY,KAAK,CAAC;IACtB,OAAO,GAAY,KAAK,CAAC;IACzB,MAAM,CAAU;IAEf,MAAM,GAAY,KAAK,CAAC;IACxB,KAAK,GAAY,KAAK,CAAC;IACvB,cAAc,GAAY,KAAK,CAAC;IAEzC;;;;OAIG;IAEH,eAAe;QACb,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,UAAU,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC;IACM,WAAW,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;YAC/F,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,WACE,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,KAAK,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,CAAC,MAAM,EAAE,EAC1E,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAC9B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvC,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAC3D,CACH,CAAC,CAAC,CAAC,CACF,WAAK,KAAK,EAAC,iBAAiB,2CAAa,CAC1C;YACA,IAAI,CAAC,cAAc,IAAI,CACtB,4DACE,KAAK,EAAC,mBAAmB,EACzB,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC9B,CAAC;gBAED,4DAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,uBAAuB,GAAG,CAC/D,CACP,CACG,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, State, Watch } from '@stencil/core';\n\n@Component({ tag: 'hb-image', styleUrl: 'image.css', shadow: true })\nexport class Image {\n @Prop() src: string = '';\n @Prop() alt: string = '';\n @Prop() width?: string;\n @Prop() height?: string;\n @Prop() fit: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down' = 'fill';\n @Prop() lazy: boolean = false;\n @Prop() preview: boolean = false;\n @Prop() radius?: string;\n\n @State() loaded: boolean = false;\n @State() error: boolean = false;\n @State() previewVisible: boolean = false;\n\n /**\n * 换 src 时重置 loaded/error。\n * 修复 B5——修复前换 src 不清状态:坏图换好图卡在错误占位(error 不清零),\n * 好图换坏图 loaded 仍 true 造成短暂状态错乱。\n */\n @Watch('src')\n handleSrcChange() {\n this.loaded = false;\n this.error = false;\n }\n\n private handleLoad = () => {\n this.loaded = true;\n };\n private handleError = () => {\n this.error = true;\n };\n\n render() {\n return (\n <div class=\"hb-image\" style={{ width: this.width, height: this.height, borderRadius: this.radius }}>\n {!this.error ? (\n <img\n src={this.src}\n alt={this.alt}\n class={{ 'hb-image__inner': true, 'hb-image__inner--loaded': this.loaded }}\n style={{ objectFit: this.fit }}\n loading={this.lazy ? 'lazy' : undefined}\n onLoad={this.handleLoad}\n onError={this.handleError}\n onClick={() => this.preview && (this.previewVisible = true)}\n />\n ) : (\n <div class=\"hb-image__error\">图片加载失败</div>\n )}\n {this.previewVisible && (\n <div\n class=\"hb-image__preview\"\n onClick={() => {\n this.previewVisible = false;\n }}\n >\n <img src={this.src} alt={this.alt} class=\"hb-image__preview-img\" />\n </div>\n )}\n </div>\n );\n }\n}\n"]}
@@ -129,16 +129,20 @@ export class ImagePreview {
129
129
  handleRotateRight = () => {
130
130
  this.rotate = this.rotate + 90;
131
131
  };
132
- /** 滚轮缩放 */
132
+ /**
133
+ * 滚轮缩放(平滑 + 像素级响应):
134
+ * 按 deltaY 的绝对值映射缩放因子(小滚幅小步、大滚幅大步),
135
+ * 并夹取到 [minZoom, maxZoom],避免抖动与越界。
136
+ */
133
137
  handleWheel = (e) => {
134
- // TODO: 平滑缩放 + 图片中心锚点;当前实现为基础步长缩放
135
138
  e.preventDefault();
136
- if (e.deltaY < 0) {
137
- this.zoomIn();
138
- }
139
- else {
140
- this.zoomOut();
141
- }
139
+ // deltaY 映射成指数缩放系数:wheel 越快缩放越激进,但单次不超 zoomStep*2
140
+ const dir = e.deltaY < 0 ? 1 : -1;
141
+ const intensity = Math.min(Math.abs(e.deltaY) / 100, 2); // 0~2
142
+ const factor = 1 + dir * this.zoomStep * Math.max(1, intensity);
143
+ const next = Math.max(this.minZoom, Math.min(this.zoom * factor, this.maxZoom));
144
+ // 平滑:小数位保留两位,避免浮点累积误差
145
+ this.zoom = Math.round(next * 100) / 100;
142
146
  };
143
147
  /** 点击遮罩空白处关闭 */
144
148
  handleOverlayClick = (e) => {
@@ -156,7 +160,7 @@ export class ImagePreview {
156
160
  const imgStyle = {
157
161
  transform: `scale(${this.zoom}) rotate(${this.rotate}deg)`,
158
162
  };
159
- return (h("div", { class: "hb-image-preview", onClick: this.handleOverlayClick }, h("div", { class: "hb-image-preview__wrapper" }, h("img", { class: "hb-image-preview__img", src: this.currentSrc, alt: "", style: imgStyle, onWheel: this.handleWheel })), this.isMulti && (h("button", { type: "button", class: "hb-image-preview__btn hb-image-preview__btn--prev", onClick: this.prev, "aria-label": "\u4E0A\u4E00\u5F20" }, "\u2039")), this.isMulti && (h("button", { type: "button", class: "hb-image-preview__btn hb-image-preview__btn--next", onClick: this.next, "aria-label": "\u4E0B\u4E00\u5F20" }, "\u203A")), h("div", { class: "hb-image-preview__toolbar", onClick: (e) => e.stopPropagation() }, h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.zoomOut, "aria-label": "\u7F29\u5C0F" }, "\uFF0D"), h("span", { class: "hb-image-preview__tool-label" }, Math.round(this.zoom * 100), "%"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.zoomIn, "aria-label": "\u653E\u5927" }, "\uFF0B"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleRotateLeft, "aria-label": "\u5DE6\u65CB" }, "\u21BA"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleRotateRight, "aria-label": "\u53F3\u65CB" }, "\u21BB"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleReset, "aria-label": "\u91CD\u7F6E" }, "\u27F2"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.stopAndClose, "aria-label": "\u5173\u95ED" }, "\u2715")), h("button", { type: "button", class: "hb-image-preview__close", onClick: this.stopAndClose, "aria-label": "\u5173\u95ED" }, "\u00D7")));
163
+ return (h("div", { class: "hb-image-preview", onClick: this.handleOverlayClick }, h("div", { class: "hb-image-preview__wrapper" }, h("img", { class: "hb-image-preview__img", src: this.currentSrc, alt: "", style: imgStyle, onWheel: this.handleWheel })), this.isMulti && (h("button", { type: "button", class: "hb-image-preview__btn hb-image-preview__btn--prev", onClick: this.prev, "aria-label": "\u4E0A\u4E00\u5F20" }, "\u2039")), this.isMulti && (h("button", { type: "button", class: "hb-image-preview__btn hb-image-preview__btn--next", onClick: this.next, "aria-label": "\u4E0B\u4E00\u5F20" }, "\u203A")), h("div", { class: "hb-image-preview__toolbar", onClick: e => e.stopPropagation() }, h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.zoomOut, "aria-label": "\u7F29\u5C0F" }, "\uFF0D"), h("span", { class: "hb-image-preview__tool-label" }, Math.round(this.zoom * 100), "%"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.zoomIn, "aria-label": "\u653E\u5927" }, "\uFF0B"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleRotateLeft, "aria-label": "\u5DE6\u65CB" }, "\u21BA"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleRotateRight, "aria-label": "\u53F3\u65CB" }, "\u21BB"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.handleReset, "aria-label": "\u91CD\u7F6E" }, "\u27F2"), h("button", { type: "button", class: "hb-image-preview__tool", onClick: this.stopAndClose, "aria-label": "\u5173\u95ED" }, "\u2715")), h("button", { type: "button", class: "hb-image-preview__close", onClick: this.stopAndClose, "aria-label": "\u5173\u95ED" }, "\u00D7")));
160
164
  }
161
165
  static get is() { return "hb-image-preview"; }
162
166
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePreview.js","sourceRoot":"","sources":["../../../src/components/ImagePreview/ImagePreview.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\n\nexport interface ImagePreviewChangeDetail {\n src: string;\n index: number;\n}\n\n/**\n * ImagePreview 图片预览组件\n * 点击图片后展示大图,支持缩放、旋转、多图切换\n */\n@Component({\n tag: 'hb-image-preview',\n styleUrl: 'image-preview.css',\n shadow: true,\n})\nexport class ImagePreview {\n @Element() el: HTMLElement;\n\n /** 是否显示预览(受控,可双向) */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /** 单图源(srcList 为空时使用) */\n @Prop() src: string = '';\n\n /** 多图源列表 */\n @Prop() srcList: string[] = [];\n\n /** 多图当前索引 */\n @Prop({ mutable: true }) current: number = 0;\n\n /** 单次缩放步长 */\n @Prop() zoomStep: number = 0.2;\n\n /** 最小缩放比例 */\n @Prop() minZoom: number = 0.5;\n\n /** 最大缩放比例 */\n @Prop() maxZoom: number = 3;\n\n /** 关闭事件 */\n @Event() hbClose: EventEmitter<void>;\n\n /** 切换事件,detail 为 { src, index } */\n @Event() hbChange: EventEmitter<ImagePreviewChangeDetail>;\n\n /** 当前缩放比例 */\n @State() zoom: number = 1;\n\n /** 当前旋转角度 */\n @State() rotate: number = 0;\n\n private keyDownHandler = (e: KeyboardEvent) => {\n if (!this.modelValue) return;\n if (e.key === 'Escape') {\n this.close();\n } else if (e.key === 'ArrowLeft') {\n this.prev();\n } else if (e.key === 'ArrowRight') {\n this.next();\n }\n };\n\n @Watch('modelValue')\n handleVisibleChange(newVal: boolean) {\n if (newVal) {\n // 打开时重置缩放与旋转\n this.zoom = 1;\n this.rotate = 0;\n document.addEventListener('keydown', this.keyDownHandler);\n } else {\n document.removeEventListener('keydown', this.keyDownHandler);\n }\n }\n\n @Watch('current')\n handleCurrentChange() {\n // 切换图片时重置变换\n this.zoom = 1;\n this.rotate = 0;\n }\n\n componentDidLoad() {\n if (this.modelValue) {\n document.addEventListener('keydown', this.keyDownHandler);\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.keyDownHandler);\n }\n\n /** 实际可切换的图片列表 */\n private get imageList(): string[] {\n if (this.srcList && this.srcList.length > 0) {\n return this.srcList;\n }\n return this.src ? [this.src] : [];\n }\n\n private get currentIndex(): number {\n const list = this.imageList;\n if (list.length === 0) return 0;\n if (this.current < 0) return 0;\n if (this.current >= list.length) return list.length - 1;\n return this.current;\n }\n\n private get currentSrc(): string {\n const list = this.imageList;\n if (list.length === 0) return '';\n return list[this.currentIndex] || '';\n }\n\n private get isMulti(): boolean {\n return this.imageList.length > 1;\n }\n\n private close = () => {\n this.modelValue = false;\n this.hbClose.emit();\n };\n\n private emitChange() {\n this.hbChange.emit({ src: this.currentSrc, index: this.currentIndex });\n }\n\n private next = () => {\n const list = this.imageList;\n if (list.length <= 1) return;\n this.current = (this.currentIndex + 1) % list.length;\n this.emitChange();\n };\n\n private prev = () => {\n const list = this.imageList;\n if (list.length <= 1) return;\n this.current = (this.currentIndex - 1 + list.length) % list.length;\n this.emitChange();\n };\n\n private zoomIn = () => {\n const next = Math.min(this.zoom + this.zoomStep, this.maxZoom);\n this.zoom = Math.round(next * 100) / 100;\n };\n\n private zoomOut = () => {\n const next = Math.max(this.zoom - this.zoomStep, this.minZoom);\n this.zoom = Math.round(next * 100) / 100;\n };\n\n private handleReset = () => {\n this.zoom = 1;\n this.rotate = 0;\n };\n\n private handleRotateLeft = () => {\n this.rotate = this.rotate - 90;\n };\n\n private handleRotateRight = () => {\n this.rotate = this.rotate + 90;\n };\n\n /** 滚轮缩放 */\n private handleWheel = (e: WheelEvent) => {\n // TODO: 平滑缩放 + 图片中心锚点;当前实现为基础步长缩放\n e.preventDefault();\n if (e.deltaY < 0) {\n this.zoomIn();\n } else {\n this.zoomOut();\n }\n };\n\n /** 点击遮罩空白处关闭 */\n private handleOverlayClick = (e: MouseEvent) => {\n if (e.target === e.currentTarget) {\n this.close();\n }\n };\n\n private stopAndClose = (e: MouseEvent) => {\n e.stopPropagation();\n this.close();\n };\n\n render() {\n if (!this.modelValue) return null;\n\n const imgStyle = {\n transform: `scale(${this.zoom}) rotate(${this.rotate}deg)`,\n };\n\n return (\n <div class=\"hb-image-preview\" onClick={this.handleOverlayClick}>\n <div class=\"hb-image-preview__wrapper\">\n <img\n class=\"hb-image-preview__img\"\n src={this.currentSrc}\n alt=\"\"\n style={imgStyle}\n onWheel={this.handleWheel}\n />\n </div>\n\n {this.isMulti && (\n <button\n type=\"button\"\n class=\"hb-image-preview__btn hb-image-preview__btn--prev\"\n onClick={this.prev}\n aria-label=\"上一张\"\n >\n ‹\n </button>\n )}\n {this.isMulti && (\n <button\n type=\"button\"\n class=\"hb-image-preview__btn hb-image-preview__btn--next\"\n onClick={this.next}\n aria-label=\"下一张\"\n >\n ›\n </button>\n )}\n\n <div class=\"hb-image-preview__toolbar\" onClick={(e) => e.stopPropagation()}>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.zoomOut} aria-label=\"缩小\">\n -\n </button>\n <span class=\"hb-image-preview__tool-label\">{Math.round(this.zoom * 100)}%</span>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.zoomIn} aria-label=\"放大\">\n +\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleRotateLeft} aria-label=\"左旋\">\n ↺\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleRotateRight} aria-label=\"右旋\">\n ↻\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleReset} aria-label=\"重置\">\n ⟲\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.stopAndClose} aria-label=\"关闭\">\n ✕\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"hb-image-preview__close\"\n onClick={this.stopAndClose}\n aria-label=\"关闭\"\n >\n ×\n </button>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ImagePreview.js","sourceRoot":"","sources":["../../../src/components/ImagePreview/ImagePreview.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\n\nexport interface ImagePreviewChangeDetail {\n src: string;\n index: number;\n}\n\n/**\n * ImagePreview 图片预览组件\n * 点击图片后展示大图,支持缩放、旋转、多图切换\n */\n@Component({\n tag: 'hb-image-preview',\n styleUrl: 'image-preview.css',\n shadow: true,\n})\nexport class ImagePreview {\n @Element() el: HTMLElement;\n\n /** 是否显示预览(受控,可双向) */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /** 单图源(srcList 为空时使用) */\n @Prop() src: string = '';\n\n /** 多图源列表 */\n @Prop() srcList: string[] = [];\n\n /** 多图当前索引 */\n @Prop({ mutable: true }) current: number = 0;\n\n /** 单次缩放步长 */\n @Prop() zoomStep: number = 0.2;\n\n /** 最小缩放比例 */\n @Prop() minZoom: number = 0.5;\n\n /** 最大缩放比例 */\n @Prop() maxZoom: number = 3;\n\n /** 关闭事件 */\n @Event() hbClose: EventEmitter<void>;\n\n /** 切换事件,detail 为 { src, index } */\n @Event() hbChange: EventEmitter<ImagePreviewChangeDetail>;\n\n /** 当前缩放比例 */\n @State() zoom: number = 1;\n\n /** 当前旋转角度 */\n @State() rotate: number = 0;\n\n private keyDownHandler = (e: KeyboardEvent) => {\n if (!this.modelValue) return;\n if (e.key === 'Escape') {\n this.close();\n } else if (e.key === 'ArrowLeft') {\n this.prev();\n } else if (e.key === 'ArrowRight') {\n this.next();\n }\n };\n\n @Watch('modelValue')\n handleVisibleChange(newVal: boolean) {\n if (newVal) {\n // 打开时重置缩放与旋转\n this.zoom = 1;\n this.rotate = 0;\n document.addEventListener('keydown', this.keyDownHandler);\n } else {\n document.removeEventListener('keydown', this.keyDownHandler);\n }\n }\n\n @Watch('current')\n handleCurrentChange() {\n // 切换图片时重置变换\n this.zoom = 1;\n this.rotate = 0;\n }\n\n componentDidLoad() {\n if (this.modelValue) {\n document.addEventListener('keydown', this.keyDownHandler);\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.keyDownHandler);\n }\n\n /** 实际可切换的图片列表 */\n private get imageList(): string[] {\n if (this.srcList && this.srcList.length > 0) {\n return this.srcList;\n }\n return this.src ? [this.src] : [];\n }\n\n private get currentIndex(): number {\n const list = this.imageList;\n if (list.length === 0) return 0;\n if (this.current < 0) return 0;\n if (this.current >= list.length) return list.length - 1;\n return this.current;\n }\n\n private get currentSrc(): string {\n const list = this.imageList;\n if (list.length === 0) return '';\n return list[this.currentIndex] || '';\n }\n\n private get isMulti(): boolean {\n return this.imageList.length > 1;\n }\n\n private close = () => {\n this.modelValue = false;\n this.hbClose.emit();\n };\n\n private emitChange() {\n this.hbChange.emit({ src: this.currentSrc, index: this.currentIndex });\n }\n\n private next = () => {\n const list = this.imageList;\n if (list.length <= 1) return;\n this.current = (this.currentIndex + 1) % list.length;\n this.emitChange();\n };\n\n private prev = () => {\n const list = this.imageList;\n if (list.length <= 1) return;\n this.current = (this.currentIndex - 1 + list.length) % list.length;\n this.emitChange();\n };\n\n private zoomIn = () => {\n const next = Math.min(this.zoom + this.zoomStep, this.maxZoom);\n this.zoom = Math.round(next * 100) / 100;\n };\n\n private zoomOut = () => {\n const next = Math.max(this.zoom - this.zoomStep, this.minZoom);\n this.zoom = Math.round(next * 100) / 100;\n };\n\n private handleReset = () => {\n this.zoom = 1;\n this.rotate = 0;\n };\n\n private handleRotateLeft = () => {\n this.rotate = this.rotate - 90;\n };\n\n private handleRotateRight = () => {\n this.rotate = this.rotate + 90;\n };\n\n /**\n * 滚轮缩放(平滑 + 像素级响应):\n * 按 deltaY 的绝对值映射缩放因子(小滚幅小步、大滚幅大步),\n * 并夹取到 [minZoom, maxZoom],避免抖动与越界。\n */\n private handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n // 把 deltaY 映射成指数缩放系数:wheel 越快缩放越激进,但单次不超 zoomStep*2\n const dir = e.deltaY < 0 ? 1 : -1;\n const intensity = Math.min(Math.abs(e.deltaY) / 100, 2); // 0~2\n const factor = 1 + dir * this.zoomStep * Math.max(1, intensity);\n const next = Math.max(this.minZoom, Math.min(this.zoom * factor, this.maxZoom));\n // 平滑:小数位保留两位,避免浮点累积误差\n this.zoom = Math.round(next * 100) / 100;\n };\n\n /** 点击遮罩空白处关闭 */\n private handleOverlayClick = (e: MouseEvent) => {\n if (e.target === e.currentTarget) {\n this.close();\n }\n };\n\n private stopAndClose = (e: MouseEvent) => {\n e.stopPropagation();\n this.close();\n };\n\n render() {\n if (!this.modelValue) return null;\n\n const imgStyle = {\n transform: `scale(${this.zoom}) rotate(${this.rotate}deg)`,\n };\n\n return (\n <div class=\"hb-image-preview\" onClick={this.handleOverlayClick}>\n <div class=\"hb-image-preview__wrapper\">\n <img class=\"hb-image-preview__img\" src={this.currentSrc} alt=\"\" style={imgStyle} onWheel={this.handleWheel} />\n </div>\n\n {this.isMulti && (\n <button type=\"button\" class=\"hb-image-preview__btn hb-image-preview__btn--prev\" onClick={this.prev} aria-label=\"上一张\">\n ‹\n </button>\n )}\n {this.isMulti && (\n <button type=\"button\" class=\"hb-image-preview__btn hb-image-preview__btn--next\" onClick={this.next} aria-label=\"下一张\">\n ›\n </button>\n )}\n\n <div class=\"hb-image-preview__toolbar\" onClick={e => e.stopPropagation()}>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.zoomOut} aria-label=\"缩小\">\n -\n </button>\n <span class=\"hb-image-preview__tool-label\">{Math.round(this.zoom * 100)}%</span>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.zoomIn} aria-label=\"放大\">\n +\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleRotateLeft} aria-label=\"左旋\">\n ↺\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleRotateRight} aria-label=\"右旋\">\n ↻\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.handleReset} aria-label=\"重置\">\n ⟲\n </button>\n <button type=\"button\" class=\"hb-image-preview__tool\" onClick={this.stopAndClose} aria-label=\"关闭\">\n ✕\n </button>\n </div>\n\n <button type=\"button\" class=\"hb-image-preview__close\" onClick={this.stopAndClose} aria-label=\"关闭\">\n ×\n </button>\n </div>\n );\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { hasInputValue, isClearVisible, sizeClassMap } from "../../utils/form-input-base";
3
+ import { activationClickHandler } from "../../utils/a11y";
3
4
  /**
4
5
  * Input 输入框组件
5
6
  * 通过鼠标或键盘输入字符
@@ -119,10 +120,13 @@ export class Input {
119
120
  handleValueChange() {
120
121
  this.inputValue = this.modelValue;
121
122
  this.updateClearVisible();
123
+ // textarea autosize:外部改值也要重算高度
124
+ this.resizeTextarea();
122
125
  }
123
126
  componentDidLoad() {
124
127
  this.inputValue = this.modelValue;
125
128
  this.updateClearVisible();
129
+ this.resizeTextarea();
126
130
  }
127
131
  updateClearVisible() {
128
132
  this.showClear = isClearVisible({
@@ -132,12 +136,45 @@ export class Input {
132
136
  hasValue: hasInputValue(this.inputValue),
133
137
  });
134
138
  }
139
+ /**
140
+ * textarea 自适应高度(autosize)。
141
+ * - autosize=false 或非 textarea:跳过。
142
+ * - autosize=true:按内容自适应。
143
+ * - autosize={minRows,maxRows}:在最小/最大行数间夹取。
144
+ * 算法:先把 height 置 auto 让浏览器按内容重排,再读 scrollHeight,
145
+ * 减去 padding 后按行高换算成行数,最后按 min/max 夹取并写回 height。
146
+ */
147
+ resizeTextarea() {
148
+ if (this.type !== 'textarea' || !this.autosize)
149
+ return;
150
+ const ta = this.inputRef;
151
+ if (!ta)
152
+ return;
153
+ // 行高:优先取计算样式,兜底 22px
154
+ const computed = typeof window !== 'undefined' ? window.getComputedStyle(ta) : null;
155
+ const lineHeight = computed && parseFloat(computed.lineHeight) ? parseFloat(computed.lineHeight) : 22;
156
+ const paddingTop = computed ? parseFloat(computed.paddingTop) || 0 : 0;
157
+ const paddingBottom = computed ? parseFloat(computed.paddingBottom) || 0 : 0;
158
+ const opts = typeof this.autosize === 'object' ? this.autosize : {};
159
+ const minRows = opts.minRows ?? 1;
160
+ const maxRows = opts.maxRows ?? Infinity;
161
+ const minH = minRows * lineHeight + paddingTop + paddingBottom;
162
+ const maxH = maxRows === Infinity ? Infinity : maxRows * lineHeight + paddingTop + paddingBottom;
163
+ // 先 reset 高度以读取真实内容高度
164
+ ta.style.height = 'auto';
165
+ const scrollH = ta.scrollHeight;
166
+ const clamped = Math.max(minH, Math.min(scrollH, maxH === Infinity ? scrollH : maxH));
167
+ ta.style.height = `${clamped}px`;
168
+ // overflow:能滚动时才显示滚动条
169
+ ta.style.overflowY = scrollH > clamped ? 'auto' : 'hidden';
170
+ }
135
171
  handleInput = (e) => {
136
172
  const target = e.target;
137
173
  this.inputValue = target.value;
138
174
  this.modelValue = target.value;
139
175
  this.updateClearVisible();
140
176
  this.hbInput.emit(target.value);
177
+ this.resizeTextarea();
141
178
  };
142
179
  handleChange = (e) => {
143
180
  const target = e.target;
@@ -176,11 +213,11 @@ export class Input {
176
213
  render() {
177
214
  const isTextarea = this.type === 'textarea';
178
215
  const InputTag = isTextarea ? 'textarea' : 'input';
179
- return (h("div", { key: '22b51bd1c9e0c3086ed167eea57f3b5818685785', class: {
216
+ return (h("div", { key: '541681cbcc3f5bc9f0d6ed4e8b5d5d41e498f2a1', class: {
180
217
  ...sizeClassMap('hb-input', this.size),
181
218
  'hb-input--disabled': this.disabled,
182
219
  'hb-input--focused': this.isFocused,
183
- } }, this.prefixIcon && (h("span", { key: 'ef3b02d947c45ac282814a0e2e4909f8473469eb', class: "hb-input__prefix" }, h("i", { key: '88f95312bf9aa489d5d27a1f701b2eadc794d7cf', class: this.prefixIcon }))), h(InputTag, { key: 'fe5de1f3dcf5441aebb5bcc943c64d59221211d7', ref: (el) => (this.inputRef = el), type: isTextarea ? undefined : this.getInputType(), id: this.inputId, name: this.name, class: "hb-input__inner", placeholder: this.placeholder, value: this.inputValue, disabled: this.disabled, readonly: this.readonly, autocomplete: this.autocomplete, autofocus: this.autofocus, maxlength: this.maxlength, minlength: this.minlength, rows: isTextarea ? this.rows : undefined, style: isTextarea && this.resize ? { resize: this.resize } : undefined, onInput: this.handleInput, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur }), (this.showClear || this.suffixIcon || (this.type === 'password' && this.showPassword)) && (h("span", { key: 'db106e66989483c48171aad758cd5a443ef7670a', class: "hb-input__suffix" }, this.showClear && (h("span", { key: '3fa676f9860aa3018247c9d61bad432afdea4345', class: "hb-input__suffix-inner hb-input__clear", onClick: this.handleClear }, "\u00D7")), this.type === 'password' && this.showPassword && (h("span", { key: '8911301b65aa3435f7f3b933b9b8de1b055c266e', class: "hb-input__suffix-inner hb-input__password", onClick: this.togglePasswordVisible }, this.passwordVisible ? '👁️' : '👁️‍🗨️')), this.suffixIcon && (h("span", { key: '14fa885ec429419525ea5cd550fc7d9cec9f3ee4', class: "hb-input__suffix-inner" }, h("i", { key: '36995c1f4e5d2c258170e7ad8a012e586d905e62', class: this.suffixIcon }))))), this.showWordLimit && this.maxlength && (h("span", { key: '383d7d25fbbb77dad3df3ebbbf4e0b1fc504a4b4', class: "hb-input__count" }, h("span", { key: '564d4a6ac0feae0be61378f52aae3b22872566fb', class: "hb-input__count-inner" }, this.inputValue.length, " / ", this.maxlength)))));
220
+ } }, this.prefixIcon && (h("span", { key: '5dc6ad6f39d472528e900654de37e13e42e7ea19', class: "hb-input__prefix" }, h("i", { key: '2f28864c2a8d60281eacbfe7c8d65b72e75744f9', class: this.prefixIcon }))), h(InputTag, { key: '2945de32bd65b0eb22849338aa0f4f966ccd0ad5', ref: el => (this.inputRef = el), type: isTextarea ? undefined : this.getInputType(), id: this.inputId, name: this.name, class: "hb-input__inner", placeholder: this.placeholder, value: this.inputValue, disabled: this.disabled, readonly: this.readonly, autocomplete: this.autocomplete, autofocus: this.autofocus, maxlength: this.maxlength, minlength: this.minlength, rows: isTextarea ? this.rows : undefined, style: isTextarea ? { resize: this.autosize ? 'none' : this.resize || 'none' } : undefined, onInput: this.handleInput, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur }), (this.showClear || this.suffixIcon || (this.type === 'password' && this.showPassword)) && (h("span", { key: '0b416f3f55c1b195bcfc7584eb96de3a47373b49', class: "hb-input__suffix" }, this.showClear && (h("span", { key: '4bd40fa20686602e0049f46bfe3a4ba1eedd704c', class: "hb-input__suffix-inner hb-input__clear", role: "button", "aria-label": "\u6E05\u7A7A", tabIndex: 0, onClick: this.handleClear, onKeyDown: activationClickHandler }, h("svg", { key: 'b4494db539d933d0686fad6744589955669ec402', viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { key: '02fde0709695629e71d90104f58d2926ae77ce8b', d: "M6 6l12 12M18 6L6 18" })))), this.type === 'password' && this.showPassword && (h("span", { key: 'fed9e94f2f0491d97a06b2ca4faeb86d4d0b4d79', class: "hb-input__suffix-inner hb-input__password", role: "button", "aria-label": this.passwordVisible ? '隐藏密码' : '显示密码', tabIndex: 0, onClick: this.togglePasswordVisible, onKeyDown: activationClickHandler }, this.passwordVisible ? (h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { d: "M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z" }), h("circle", { cx: "12", cy: "12", r: "3" }))) : (h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("path", { d: "M3 3l18 18M10.6 10.6a3 3 0 0 0 4.2 4.2M9.9 5.1A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-2.2 3.2M6.1 6.1A17.7 17.7 0 0 0 2 12s3.5 7 10 7a10.5 10.5 0 0 0 4-.8" }))))), this.suffixIcon && (h("span", { key: 'b7c39885d1c3528746855cd852fed3274d055b0f', class: "hb-input__suffix-inner" }, h("i", { key: 'e6952c4362150d3140feffaa51d9c0ac7f00a4b8', class: this.suffixIcon }))))), this.showWordLimit && this.maxlength && (h("span", { key: 'a6d207cc284a30911e3d17cd44bac5e061c20fac', class: "hb-input__count" }, h("span", { key: '52fa6d789528a8079d34fc4082b0532f52ce43ef', class: "hb-input__count-inner" }, this.inputValue.length, " / ", this.maxlength)))));
184
221
  }
185
222
  static get is() { return "hb-input"; }
186
223
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\nimport { ComponentSize, hasInputValue, isClearVisible, sizeClassMap } from '../../utils/form-input-base';\n\n/**\n * Input 输入框组件\n * 通过鼠标或键盘输入字符\n */\n@Component({\n tag: 'hb-input',\n styleUrl: 'input.css',\n shadow: true,\n})\nexport class Input {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: string = '';\n\n /**\n * 输入框类型\n */\n @Prop() type: string = 'text';\n\n /**\n * 输入框尺寸\n */\n @Prop() size: ComponentSize = 'default';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否只读\n * @default false\n */\n @Prop() readonly: boolean = false;\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder?: string;\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 是否显示密码可见性切换\n * @default false\n */\n @Prop() showPassword: boolean = false;\n\n /**\n * 是否显示字数统计\n * @default false\n */\n @Prop() showWordLimit: boolean = false;\n\n /**\n * 最大输入长度\n */\n @Prop() maxlength?: number;\n\n /**\n * 最小输入长度\n */\n @Prop() minlength?: number;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n /**\n * 原生 autocomplete 属性\n */\n @Prop() autocomplete?: string;\n\n /**\n * 原生 autofocus 属性\n */\n @Prop() autofocus: boolean = false;\n\n /**\n * 输入框头部图标\n */\n @Prop() prefixIcon?: string;\n\n /**\n * 输入框尾部图标\n */\n @Prop() suffixIcon?: string;\n\n /**\n * 输入框行数,仅 type 为 'textarea' 时有效\n */\n @Prop() rows: number = 2;\n\n /**\n * 是否自适应内容高度,仅 type 为 'textarea' 时有效\n */\n @Prop() autosize: boolean | { minRows?: number; maxRows?: number } = false;\n\n /**\n * 是否调整 textarea 大小\n */\n @Prop() resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n\n @State() isFocused: boolean = false;\n @State() showClear: boolean = false;\n @State() passwordVisible: boolean = false;\n @State() inputValue: string = '';\n\n private inputRef?: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n /**\n * 输入事件\n */\n @Event() hbInput: EventEmitter<string>;\n\n /**\n * 聚焦事件\n */\n @Event() hbFocus: EventEmitter<FocusEvent>;\n\n /**\n * 失焦事件\n */\n @Event() hbBlur: EventEmitter<FocusEvent>;\n\n /**\n * 清空事件\n */\n @Event() hbClear: EventEmitter<void>;\n\n @Watch('modelValue')\n handleValueChange() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n }\n\n componentDidLoad() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n }\n\n private updateClearVisible() {\n this.showClear = isClearVisible({\n clearable: this.clearable,\n disabled: this.disabled,\n readonly: this.readonly,\n hasValue: hasInputValue(this.inputValue),\n });\n }\n\n private handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.inputValue = target.value;\n this.modelValue = target.value;\n this.updateClearVisible();\n this.hbInput.emit(target.value);\n };\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.hbChange.emit(target.value);\n };\n\n private handleFocus = (e: FocusEvent) => {\n this.isFocused = true;\n this.updateClearVisible();\n this.hbFocus.emit(e);\n };\n\n private handleBlur = (e: FocusEvent) => {\n this.isFocused = false;\n this.updateClearVisible();\n this.hbBlur.emit(e);\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.inputValue = '';\n this.modelValue = '';\n this.updateClearVisible();\n this.hbClear.emit();\n this.hbChange.emit('');\n if (this.inputRef) {\n this.inputRef.focus();\n }\n };\n\n private togglePasswordVisible = () => {\n this.passwordVisible = !this.passwordVisible;\n };\n\n private getInputType(): string {\n if (this.type === 'password' && this.showPassword) {\n return this.passwordVisible ? 'text' : 'password';\n }\n return this.type;\n }\n\n render() {\n const isTextarea = this.type === 'textarea';\n const InputTag = isTextarea ? 'textarea' : 'input';\n\n return (\n <div\n class={{\n ...sizeClassMap('hb-input', this.size),\n 'hb-input--disabled': this.disabled,\n 'hb-input--focused': this.isFocused,\n }}\n >\n {this.prefixIcon && (\n <span class=\"hb-input__prefix\">\n <i class={this.prefixIcon}></i>\n </span>\n )}\n <InputTag\n ref={(el) => (this.inputRef = el)}\n type={isTextarea ? undefined : this.getInputType()}\n id={this.inputId}\n name={this.name}\n class=\"hb-input__inner\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly={this.readonly}\n autocomplete={this.autocomplete}\n autofocus={this.autofocus}\n maxlength={this.maxlength}\n minlength={this.minlength}\n rows={isTextarea ? this.rows : undefined}\n style={isTextarea && this.resize ? { resize: this.resize } : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n {(this.showClear || this.suffixIcon || (this.type === 'password' && this.showPassword)) && (\n <span class=\"hb-input__suffix\">\n {this.showClear && (\n <span class=\"hb-input__suffix-inner hb-input__clear\" onClick={this.handleClear}>\n ×\n </span>\n )}\n {this.type === 'password' && this.showPassword && (\n <span class=\"hb-input__suffix-inner hb-input__password\" onClick={this.togglePasswordVisible}>\n {this.passwordVisible ? '👁️' : '👁️‍🗨️'}\n </span>\n )}\n {this.suffixIcon && (\n <span class=\"hb-input__suffix-inner\">\n <i class={this.suffixIcon}></i>\n </span>\n )}\n </span>\n )}\n {this.showWordLimit && this.maxlength && (\n <span class=\"hb-input__count\">\n <span class=\"hb-input__count-inner\">\n {this.inputValue.length} / {this.maxlength}\n </span>\n </span>\n )}\n </div>\n );\n }\n}\n\n"]}
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgB,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAiB,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACzG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AAMH,MAAM,OAAO,KAAK;IACL,EAAE,CAAc;IAE3B;;OAEG;IACsB,UAAU,GAAW,EAAE,CAAC;IAEjD;;OAEG;IACK,IAAI,GAAW,MAAM,CAAC;IAE9B;;OAEG;IACK,IAAI,GAAkB,SAAS,CAAC;IAExC;;;OAGG;IACK,QAAQ,GAAY,KAAK,CAAC;IAElC;;;OAGG;IACK,QAAQ,GAAY,KAAK,CAAC;IAElC;;OAEG;IACK,WAAW,CAAU;IAE7B;;;OAGG;IACK,SAAS,GAAY,KAAK,CAAC;IAEnC;;;OAGG;IACK,YAAY,GAAY,KAAK,CAAC;IAEtC;;;OAGG;IACK,aAAa,GAAY,KAAK,CAAC;IAEvC;;OAEG;IACK,SAAS,CAAU;IAE3B;;OAEG;IACK,SAAS,CAAU;IAE3B;;OAEG;IACK,IAAI,CAAU;IAEtB;;OAEG;IACK,OAAO,CAAU;IAEzB;;OAEG;IACK,YAAY,CAAU;IAE9B;;OAEG;IACK,SAAS,GAAY,KAAK,CAAC;IAEnC;;OAEG;IACK,UAAU,CAAU;IAE5B;;OAEG;IACK,UAAU,CAAU;IAE5B;;OAEG;IACK,IAAI,GAAW,CAAC,CAAC;IAEzB;;OAEG;IACK,QAAQ,GAAqD,KAAK,CAAC;IAE3E;;OAEG;IACK,MAAM,CAA+C;IAEpD,SAAS,GAAY,KAAK,CAAC;IAC3B,SAAS,GAAY,KAAK,CAAC;IAC3B,eAAe,GAAY,KAAK,CAAC;IACjC,UAAU,GAAW,EAAE,CAAC;IAEzB,QAAQ,CAA0C;IAE1D;;OAEG;IACM,QAAQ,CAAuB;IAExC;;OAEG;IACM,OAAO,CAAuB;IAEvC;;OAEG;IACM,OAAO,CAA2B;IAE3C;;OAEG;IACM,MAAM,CAA2B;IAE1C;;OAEG;IACM,OAAO,CAAqB;IAGrC,iBAAiB;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,+BAA+B;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,QAA2C,CAAC;QAC5D,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,qBAAqB;QACrB,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,MAAM,UAAU,GAAG,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;QAEzC,MAAM,IAAI,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;QAEjG,sBAAsB;QACtB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC;QACjC,sBAAsB;QACtB,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7D,CAAC;IAEO,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAgD,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC,CAAC;IAEM,YAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAgD,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;IAEM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IAEM,UAAU,GAAG,CAAC,CAAa,EAAE,EAAE;QACrC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC;IAEM,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE;QACjC,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IAEM,qBAAqB,GAAG,GAAG,EAAE;QACnC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;IAC/C,CAAC,CAAC;IAEM,YAAY;QAClB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;QAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAEnD,OAAO,CACL,4DACE,KAAK,EAAE;gBACL,GAAG,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;gBACtC,oBAAoB,EAAE,IAAI,CAAC,QAAQ;gBACnC,mBAAmB,EAAE,IAAI,CAAC,SAAS;aACpC;YAEA,IAAI,CAAC,UAAU,IAAI,CAClB,6DAAM,KAAK,EAAC,kBAAkB;gBAC5B,0DAAG,KAAK,EAAE,IAAI,CAAC,UAAU,GAAM,CAC1B,CACR;YACD,EAAC,QAAQ,qDACP,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAC/B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,EAClD,EAAE,EAAE,IAAI,CAAC,OAAO,EAChB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAC,iBAAiB,EACvB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,EACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACxC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1F,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,MAAM,EAAE,IAAI,CAAC,UAAU,GACvB;YACD,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CACzF,6DAAM,KAAK,EAAC,kBAAkB;gBAC3B,IAAI,CAAC,SAAS,IAAI,CACjB,6DAAM,KAAK,EAAC,wCAAwC,EAAC,IAAI,EAAC,QAAQ,gBAAY,cAAI,EAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,sBAAsB;oBAC1J,4DAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAe,CAAC,oBAAiB,OAAO,qBAAiB,OAAO,iBAAa,MAAM;wBAC3I,6DAAM,CAAC,EAAC,sBAAsB,GAAG,CAC7B,CACD,CACR;gBACA,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,CAChD,6DACE,KAAK,EAAC,2CAA2C,EACjD,IAAI,EAAC,QAAQ,gBACD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAClD,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,IAAI,CAAC,qBAAqB,EACnC,SAAS,EAAE,sBAAsB,IAEhC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CACtB,WAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAe,CAAC,oBAAiB,OAAO,qBAAiB,OAAO,iBAAa,MAAM;oBAC3I,YAAM,CAAC,EAAC,kDAAkD,GAAG;oBAC7D,cAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAG,CAC5B,CACP,CAAC,CAAC,CAAC,CACF,WAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,kBAAe,CAAC,oBAAiB,OAAO,qBAAiB,OAAO,iBAAa,MAAM;oBAC3I,YAAM,CAAC,EAAC,0KAA0K,GAAG,CACjL,CACP,CACI,CACR;gBACA,IAAI,CAAC,UAAU,IAAI,CAClB,6DAAM,KAAK,EAAC,wBAAwB;oBAClC,0DAAG,KAAK,EAAE,IAAI,CAAC,UAAU,GAAM,CAC1B,CACR,CACI,CACR;YACA,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,CACvC,6DAAM,KAAK,EAAC,iBAAiB;gBAC3B,6DAAM,KAAK,EAAC,uBAAuB;oBAChC,IAAI,CAAC,UAAU,CAAC,MAAM;;oBAAK,IAAI,CAAC,SAAS,CACrC,CACF,CACR,CACG,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\nimport { ComponentSize, hasInputValue, isClearVisible, sizeClassMap } from '../../utils/form-input-base';\nimport { activationClickHandler } from '../../utils/a11y';\n\n/**\n * Input 输入框组件\n * 通过鼠标或键盘输入字符\n */\n@Component({\n tag: 'hb-input',\n styleUrl: 'input.css',\n shadow: true,\n})\nexport class Input {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: string = '';\n\n /**\n * 输入框类型\n */\n @Prop() type: string = 'text';\n\n /**\n * 输入框尺寸\n */\n @Prop() size: ComponentSize = 'default';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否只读\n * @default false\n */\n @Prop() readonly: boolean = false;\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder?: string;\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 是否显示密码可见性切换\n * @default false\n */\n @Prop() showPassword: boolean = false;\n\n /**\n * 是否显示字数统计\n * @default false\n */\n @Prop() showWordLimit: boolean = false;\n\n /**\n * 最大输入长度\n */\n @Prop() maxlength?: number;\n\n /**\n * 最小输入长度\n */\n @Prop() minlength?: number;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n /**\n * 原生 autocomplete 属性\n */\n @Prop() autocomplete?: string;\n\n /**\n * 原生 autofocus 属性\n */\n @Prop() autofocus: boolean = false;\n\n /**\n * 输入框头部图标\n */\n @Prop() prefixIcon?: string;\n\n /**\n * 输入框尾部图标\n */\n @Prop() suffixIcon?: string;\n\n /**\n * 输入框行数,仅 type 为 'textarea' 时有效\n */\n @Prop() rows: number = 2;\n\n /**\n * 是否自适应内容高度,仅 type 为 'textarea' 时有效\n */\n @Prop() autosize: boolean | { minRows?: number; maxRows?: number } = false;\n\n /**\n * 是否调整 textarea 大小\n */\n @Prop() resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n\n @State() isFocused: boolean = false;\n @State() showClear: boolean = false;\n @State() passwordVisible: boolean = false;\n @State() inputValue: string = '';\n\n private inputRef?: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n /**\n * 输入事件\n */\n @Event() hbInput: EventEmitter<string>;\n\n /**\n * 聚焦事件\n */\n @Event() hbFocus: EventEmitter<FocusEvent>;\n\n /**\n * 失焦事件\n */\n @Event() hbBlur: EventEmitter<FocusEvent>;\n\n /**\n * 清空事件\n */\n @Event() hbClear: EventEmitter<void>;\n\n @Watch('modelValue')\n handleValueChange() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n // textarea autosize:外部改值也要重算高度\n this.resizeTextarea();\n }\n\n componentDidLoad() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n this.resizeTextarea();\n }\n\n private updateClearVisible() {\n this.showClear = isClearVisible({\n clearable: this.clearable,\n disabled: this.disabled,\n readonly: this.readonly,\n hasValue: hasInputValue(this.inputValue),\n });\n }\n\n /**\n * textarea 自适应高度(autosize)。\n * - autosize=false 或非 textarea:跳过。\n * - autosize=true:按内容自适应。\n * - autosize={minRows,maxRows}:在最小/最大行数间夹取。\n * 算法:先把 height 置 auto 让浏览器按内容重排,再读 scrollHeight,\n * 减去 padding 后按行高换算成行数,最后按 min/max 夹取并写回 height。\n */\n private resizeTextarea() {\n if (this.type !== 'textarea' || !this.autosize) return;\n const ta = this.inputRef as HTMLTextAreaElement | undefined;\n if (!ta) return;\n\n // 行高:优先取计算样式,兜底 22px\n const computed = typeof window !== 'undefined' ? window.getComputedStyle(ta) : null;\n const lineHeight = computed && parseFloat(computed.lineHeight) ? parseFloat(computed.lineHeight) : 22;\n const paddingTop = computed ? parseFloat(computed.paddingTop) || 0 : 0;\n const paddingBottom = computed ? parseFloat(computed.paddingBottom) || 0 : 0;\n\n const opts = typeof this.autosize === 'object' ? this.autosize : {};\n const minRows = opts.minRows ?? 1;\n const maxRows = opts.maxRows ?? Infinity;\n\n const minH = minRows * lineHeight + paddingTop + paddingBottom;\n const maxH = maxRows === Infinity ? Infinity : maxRows * lineHeight + paddingTop + paddingBottom;\n\n // 先 reset 高度以读取真实内容高度\n ta.style.height = 'auto';\n const scrollH = ta.scrollHeight;\n const clamped = Math.max(minH, Math.min(scrollH, maxH === Infinity ? scrollH : maxH));\n ta.style.height = `${clamped}px`;\n // overflow:能滚动时才显示滚动条\n ta.style.overflowY = scrollH > clamped ? 'auto' : 'hidden';\n }\n\n private handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.inputValue = target.value;\n this.modelValue = target.value;\n this.updateClearVisible();\n this.hbInput.emit(target.value);\n this.resizeTextarea();\n };\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.hbChange.emit(target.value);\n };\n\n private handleFocus = (e: FocusEvent) => {\n this.isFocused = true;\n this.updateClearVisible();\n this.hbFocus.emit(e);\n };\n\n private handleBlur = (e: FocusEvent) => {\n this.isFocused = false;\n this.updateClearVisible();\n this.hbBlur.emit(e);\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.inputValue = '';\n this.modelValue = '';\n this.updateClearVisible();\n this.hbClear.emit();\n this.hbChange.emit('');\n if (this.inputRef) {\n this.inputRef.focus();\n }\n };\n\n private togglePasswordVisible = () => {\n this.passwordVisible = !this.passwordVisible;\n };\n\n private getInputType(): string {\n if (this.type === 'password' && this.showPassword) {\n return this.passwordVisible ? 'text' : 'password';\n }\n return this.type;\n }\n\n render() {\n const isTextarea = this.type === 'textarea';\n const InputTag = isTextarea ? 'textarea' : 'input';\n\n return (\n <div\n class={{\n ...sizeClassMap('hb-input', this.size),\n 'hb-input--disabled': this.disabled,\n 'hb-input--focused': this.isFocused,\n }}\n >\n {this.prefixIcon && (\n <span class=\"hb-input__prefix\">\n <i class={this.prefixIcon}></i>\n </span>\n )}\n <InputTag\n ref={el => (this.inputRef = el)}\n type={isTextarea ? undefined : this.getInputType()}\n id={this.inputId}\n name={this.name}\n class=\"hb-input__inner\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly={this.readonly}\n autocomplete={this.autocomplete}\n autofocus={this.autofocus}\n maxlength={this.maxlength}\n minlength={this.minlength}\n rows={isTextarea ? this.rows : undefined}\n style={isTextarea ? { resize: this.autosize ? 'none' : this.resize || 'none' } : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n {(this.showClear || this.suffixIcon || (this.type === 'password' && this.showPassword)) && (\n <span class=\"hb-input__suffix\">\n {this.showClear && (\n <span class=\"hb-input__suffix-inner hb-input__clear\" role=\"button\" aria-label=\"清空\" tabIndex={0} onClick={this.handleClear} onKeyDown={activationClickHandler}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n {this.type === 'password' && this.showPassword && (\n <span\n class=\"hb-input__suffix-inner hb-input__password\"\n role=\"button\"\n aria-label={this.passwordVisible ? '隐藏密码' : '显示密码'}\n tabIndex={0}\n onClick={this.togglePasswordVisible}\n onKeyDown={activationClickHandler}\n >\n {this.passwordVisible ? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 3l18 18M10.6 10.6a3 3 0 0 0 4.2 4.2M9.9 5.1A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-2.2 3.2M6.1 6.1A17.7 17.7 0 0 0 2 12s3.5 7 10 7a10.5 10.5 0 0 0 4-.8\" />\n </svg>\n )}\n </span>\n )}\n {this.suffixIcon && (\n <span class=\"hb-input__suffix-inner\">\n <i class={this.suffixIcon}></i>\n </span>\n )}\n </span>\n )}\n {this.showWordLimit && this.maxlength && (\n <span class=\"hb-input__count\">\n <span class=\"hb-input__count-inner\">\n {this.inputValue.length} / {this.maxlength}\n </span>\n </span>\n )}\n </div>\n );\n }\n}\n"]}
@@ -107,21 +107,40 @@
107
107
  }
108
108
 
109
109
  .hb-input__clear {
110
- font-size: 16px;
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ width: 16px;
114
+ height: 16px;
111
115
  color: var(--hb-input-placeholder-color);
112
116
  transition: color 0.2s;
113
117
  }
114
118
 
119
+ .hb-input__clear svg {
120
+ width: 100%;
121
+ height: 100%;
122
+ }
123
+
115
124
  .hb-input__clear:hover {
116
125
  color: var(--hb-input-text-color);
117
126
  }
118
127
 
119
128
  .hb-input__password {
120
- font-size: 16px;
129
+ display: inline-flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ width: 16px;
133
+ height: 16px;
134
+ color: var(--hb-input-text-color);
121
135
  cursor: pointer;
122
136
  }
123
137
 
124
- .hb-input__inner[type="textarea"] {
138
+ .hb-input__password svg {
139
+ width: 100%;
140
+ height: 100%;
141
+ }
142
+
143
+ .hb-input__inner[type='textarea'] {
125
144
  min-height: 60px;
126
145
  padding: 5px 15px;
127
146
  line-height: 1.5;
@@ -141,4 +160,3 @@
141
160
  background-color: var(--hb-input-bg-color);
142
161
  padding: 0 4px;
143
162
  }
144
-
@@ -129,25 +129,25 @@ export class InputNumber {
129
129
  this.hbChange.emit(newValue);
130
130
  };
131
131
  render() {
132
- return (h("div", { key: '490fe763a00f34486cbbe6502204433071a863eb', class: {
132
+ return (h("div", { key: 'cf809c8e0c9c722a4be473a3455626f58aab40d9', class: {
133
133
  'hb-input-number': true,
134
134
  [`hb-input-number--${this.size}`]: true,
135
135
  'hb-input-number--disabled': this.disabled,
136
136
  'hb-input-number--controls-right': this.controlsPosition === 'right',
137
137
  'hb-input-number--without-controls': !this.controls,
138
- } }, this.controls && this.controlsPosition !== 'right' && (h("span", { key: 'a43a038a8914dbff0c8b9759c04c74fa791f2e6c', class: {
138
+ } }, this.controls && this.controlsPosition !== 'right' && (h("button", { key: 'b97e5a774d7747fa61ee59650517ab0f64167dda', type: "button", class: {
139
139
  'hb-input-number__decrease': true,
140
140
  'hb-input-number__decrease--disabled': this.currentValue <= this.min,
141
- }, onClick: this.decrease }, "\u2212")), h("input", { key: '83a7bb1d73a709e92f31044396fdb73daed77ea9', type: "number", id: this.inputId, name: this.name, class: "hb-input-number__inner", value: this.currentValue, disabled: this.disabled, readonly: this.readonly, placeholder: this.placeholder, min: this.min, max: this.max, step: this.step, onInput: this.handleInput, onChange: this.handleChange }), this.controls && this.controlsPosition === 'right' && (h("span", { key: 'e202c7b06c991550eb9a5cae441ead7d82231b0f', class: "hb-input-number__controls" }, h("span", { key: '876db137bb4539e93a1f7ccb08a2fb754722a7bf', class: {
141
+ }, "aria-label": "\u51CF\u5C11", "aria-disabled": this.currentValue <= this.min || this.disabled, disabled: this.currentValue <= this.min || this.disabled, onClick: this.decrease }, "\u2212")), h("input", { key: '3b5357639f8b3676bb4de27dd67297288020a97f', type: "number", id: this.inputId, name: this.name, class: "hb-input-number__inner", value: this.currentValue, disabled: this.disabled, readonly: this.readonly, placeholder: this.placeholder, min: this.min, max: this.max, step: this.step, onInput: this.handleInput, onChange: this.handleChange }), this.controls && this.controlsPosition === 'right' && (h("span", { key: '00f8a845f5226999d02914ba6e62a29d24f1a26f', class: "hb-input-number__controls" }, h("button", { key: '886db946083adb10bdf8312dc985194b872000c4', type: "button", class: {
142
142
  'hb-input-number__increase': true,
143
143
  'hb-input-number__increase--disabled': this.currentValue >= this.max,
144
- }, onClick: this.increase }, "+"), h("span", { key: '98acd918f10a7f8d3c399aa60677eac231be503b', class: {
144
+ }, "aria-label": "\u589E\u52A0", "aria-disabled": this.currentValue >= this.max || this.disabled, disabled: this.currentValue >= this.max || this.disabled, onClick: this.increase }, "+"), h("button", { key: '9c9b8d9fa6871e354a38bd5691d0a01b0b87cf9a', type: "button", class: {
145
145
  'hb-input-number__decrease': true,
146
146
  'hb-input-number__decrease--disabled': this.currentValue <= this.min,
147
- }, onClick: this.decrease }, "\u2212"))), this.controls && this.controlsPosition !== 'right' && (h("span", { key: '4befdfc2a0d7ac3af63027f0947f27d866fbe158', class: {
147
+ }, "aria-label": "\u51CF\u5C11", "aria-disabled": this.currentValue <= this.min || this.disabled, disabled: this.currentValue <= this.min || this.disabled, onClick: this.decrease }, "\u2212"))), this.controls && this.controlsPosition !== 'right' && (h("button", { key: 'c32d05810f4c0d9cd660483f45aac0f0f7ac48a5', type: "button", class: {
148
148
  'hb-input-number__increase': true,
149
149
  'hb-input-number__increase--disabled': this.currentValue >= this.max,
150
- }, onClick: this.increase }, "+"))));
150
+ }, "aria-label": "\u589E\u52A0", "aria-disabled": this.currentValue >= this.max || this.disabled, disabled: this.currentValue >= this.max || this.disabled, onClick: this.increase }, "+"))));
151
151
  }
152
152
  static get is() { return "hb-input-number"; }
153
153
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.js","sourceRoot":"","sources":["../../../src/components/InputNumber/InputNumber.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch } from '@stencil/core';\n\n/**\n * InputNumber 数字输入框组件\n * 仅允许输入标准的数字值,可定义范围\n */\n@Component({\n tag: 'hb-input-number',\n styleUrl: 'input-number.css',\n shadow: true,\n})\nexport class InputNumber {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: number = 0;\n\n /**\n * 计数器尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否只读\n * @default false\n */\n @Prop() readonly: boolean = false;\n\n /**\n * 最小值\n * @default -Infinity\n */\n @Prop() min: number = -Infinity;\n\n /**\n * 最大值\n * @default Infinity\n */\n @Prop() max: number = Infinity;\n\n /**\n * 计数器步长\n * @default 1\n */\n @Prop() step: number = 1;\n\n /**\n * 精度\n */\n @Prop() precision?: number;\n\n /**\n * 是否只能输入 step 的倍数\n * @default false\n */\n @Prop() stepStrictly: boolean = false;\n\n /**\n * 是否使用控制按钮\n * @default true\n */\n @Prop() controls: boolean = true;\n\n /**\n * 控制按钮位置\n */\n @Prop() controlsPosition: '' | 'right' = '';\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n /**\n * 原生 placeholder 属性\n */\n @Prop() placeholder?: string;\n\n @State() currentValue: number = 0;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<number>;\n\n /**\n * 输入事件\n */\n @Event() hbInput: EventEmitter<number>;\n\n componentDidLoad() {\n this.currentValue = this.modelValue;\n }\n\n /** 受控模式:外部修改 modelValue 时同步内部 currentValue,保证 UI 与值一致 */\n @Watch('modelValue')\n handleModelValueChange() {\n this.currentValue = this.modelValue;\n }\n\n private formatValue(value: number): number {\n if (this.precision !== undefined) {\n return Number(value.toFixed(this.precision));\n }\n return value;\n }\n\n private clampValue(value: number): number {\n let clamped = Math.max(this.min, Math.min(this.max, value));\n \n if (this.stepStrictly) {\n const step = this.step;\n clamped = Math.round(clamped / step) * step;\n }\n \n return this.formatValue(clamped);\n }\n\n private handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = parseFloat(target.value);\n \n if (isNaN(value)) {\n this.currentValue = this.min;\n } else {\n this.currentValue = this.clampValue(value);\n }\n \n this.modelValue = this.currentValue;\n this.hbInput.emit(this.currentValue);\n };\n\n private handleChange = () => {\n this.hbChange.emit(this.currentValue);\n };\n\n private increase = () => {\n if (this.disabled || this.readonly) return;\n const newValue = this.clampValue(this.currentValue + this.step);\n this.currentValue = newValue;\n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n };\n\n private decrease = () => {\n if (this.disabled || this.readonly) return;\n const newValue = this.clampValue(this.currentValue - this.step);\n this.currentValue = newValue;\n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n };\n\n render() {\n return (\n <div\n class={{\n 'hb-input-number': true,\n [`hb-input-number--${this.size}`]: true,\n 'hb-input-number--disabled': this.disabled,\n 'hb-input-number--controls-right': this.controlsPosition === 'right',\n 'hb-input-number--without-controls': !this.controls,\n }}\n >\n {this.controls && this.controlsPosition !== 'right' && (\n <span\n class={{\n 'hb-input-number__decrease': true,\n 'hb-input-number__decrease--disabled': this.currentValue <= this.min,\n }}\n onClick={this.decrease}\n >\n −\n </span>\n )}\n <input\n type=\"number\"\n id={this.inputId}\n name={this.name}\n class=\"hb-input-number__inner\"\n value={this.currentValue}\n disabled={this.disabled}\n readonly={this.readonly}\n placeholder={this.placeholder}\n min={this.min}\n max={this.max}\n step={this.step}\n onInput={this.handleInput}\n onChange={this.handleChange}\n />\n {this.controls && this.controlsPosition === 'right' && (\n <span class=\"hb-input-number__controls\">\n <span\n class={{\n 'hb-input-number__increase': true,\n 'hb-input-number__increase--disabled': this.currentValue >= this.max,\n }}\n onClick={this.increase}\n >\n +\n </span>\n <span\n class={{\n 'hb-input-number__decrease': true,\n 'hb-input-number__decrease--disabled': this.currentValue <= this.min,\n }}\n onClick={this.decrease}\n >\n −\n </span>\n </span>\n )}\n {this.controls && this.controlsPosition !== 'right' && (\n <span\n class={{\n 'hb-input-number__increase': true,\n 'hb-input-number__increase--disabled': this.currentValue >= this.max,\n }}\n onClick={this.increase}\n >\n +\n </span>\n )}\n </div>\n );\n }\n}\n\n"]}
1
+ {"version":3,"file":"InputNumber.js","sourceRoot":"","sources":["../../../src/components/InputNumber/InputNumber.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Watch } from '@stencil/core';\n\n/**\n * InputNumber 数字输入框组件\n * 仅允许输入标准的数字值,可定义范围\n */\n@Component({\n tag: 'hb-input-number',\n styleUrl: 'input-number.css',\n shadow: true,\n})\nexport class InputNumber {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: number = 0;\n\n /**\n * 计数器尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否只读\n * @default false\n */\n @Prop() readonly: boolean = false;\n\n /**\n * 最小值\n * @default -Infinity\n */\n @Prop() min: number = -Infinity;\n\n /**\n * 最大值\n * @default Infinity\n */\n @Prop() max: number = Infinity;\n\n /**\n * 计数器步长\n * @default 1\n */\n @Prop() step: number = 1;\n\n /**\n * 精度\n */\n @Prop() precision?: number;\n\n /**\n * 是否只能输入 step 的倍数\n * @default false\n */\n @Prop() stepStrictly: boolean = false;\n\n /**\n * 是否使用控制按钮\n * @default true\n */\n @Prop() controls: boolean = true;\n\n /**\n * 控制按钮位置\n */\n @Prop() controlsPosition: '' | 'right' = '';\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n /**\n * 原生 placeholder 属性\n */\n @Prop() placeholder?: string;\n\n @State() currentValue: number = 0;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<number>;\n\n /**\n * 输入事件\n */\n @Event() hbInput: EventEmitter<number>;\n\n componentDidLoad() {\n this.currentValue = this.modelValue;\n }\n\n /** 受控模式:外部修改 modelValue 时同步内部 currentValue,保证 UI 与值一致 */\n @Watch('modelValue')\n handleModelValueChange() {\n this.currentValue = this.modelValue;\n }\n\n private formatValue(value: number): number {\n if (this.precision !== undefined) {\n return Number(value.toFixed(this.precision));\n }\n return value;\n }\n\n private clampValue(value: number): number {\n let clamped = Math.max(this.min, Math.min(this.max, value));\n\n if (this.stepStrictly) {\n const step = this.step;\n clamped = Math.round(clamped / step) * step;\n }\n\n return this.formatValue(clamped);\n }\n\n private handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = parseFloat(target.value);\n\n if (isNaN(value)) {\n this.currentValue = this.min;\n } else {\n this.currentValue = this.clampValue(value);\n }\n\n this.modelValue = this.currentValue;\n this.hbInput.emit(this.currentValue);\n };\n\n private handleChange = () => {\n this.hbChange.emit(this.currentValue);\n };\n\n private increase = () => {\n if (this.disabled || this.readonly) return;\n const newValue = this.clampValue(this.currentValue + this.step);\n this.currentValue = newValue;\n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n };\n\n private decrease = () => {\n if (this.disabled || this.readonly) return;\n const newValue = this.clampValue(this.currentValue - this.step);\n this.currentValue = newValue;\n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n };\n\n render() {\n return (\n <div\n class={{\n 'hb-input-number': true,\n [`hb-input-number--${this.size}`]: true,\n 'hb-input-number--disabled': this.disabled,\n 'hb-input-number--controls-right': this.controlsPosition === 'right',\n 'hb-input-number--without-controls': !this.controls,\n }}\n >\n {this.controls && this.controlsPosition !== 'right' && (\n <button\n type=\"button\"\n class={{\n 'hb-input-number__decrease': true,\n 'hb-input-number__decrease--disabled': this.currentValue <= this.min,\n }}\n aria-label=\"减少\"\n aria-disabled={this.currentValue <= this.min || this.disabled}\n disabled={this.currentValue <= this.min || this.disabled}\n onClick={this.decrease}\n >\n −\n </button>\n )}\n <input\n type=\"number\"\n id={this.inputId}\n name={this.name}\n class=\"hb-input-number__inner\"\n value={this.currentValue}\n disabled={this.disabled}\n readonly={this.readonly}\n placeholder={this.placeholder}\n min={this.min}\n max={this.max}\n step={this.step}\n onInput={this.handleInput}\n onChange={this.handleChange}\n />\n {this.controls && this.controlsPosition === 'right' && (\n <span class=\"hb-input-number__controls\">\n <button\n type=\"button\"\n class={{\n 'hb-input-number__increase': true,\n 'hb-input-number__increase--disabled': this.currentValue >= this.max,\n }}\n aria-label=\"增加\"\n aria-disabled={this.currentValue >= this.max || this.disabled}\n disabled={this.currentValue >= this.max || this.disabled}\n onClick={this.increase}\n >\n +\n </button>\n <button\n type=\"button\"\n class={{\n 'hb-input-number__decrease': true,\n 'hb-input-number__decrease--disabled': this.currentValue <= this.min,\n }}\n aria-label=\"减少\"\n aria-disabled={this.currentValue <= this.min || this.disabled}\n disabled={this.currentValue <= this.min || this.disabled}\n onClick={this.decrease}\n >\n −\n </button>\n </span>\n )}\n {this.controls && this.controlsPosition !== 'right' && (\n <button\n type=\"button\"\n class={{\n 'hb-input-number__increase': true,\n 'hb-input-number__increase--disabled': this.currentValue >= this.max,\n }}\n aria-label=\"增加\"\n aria-disabled={this.currentValue >= this.max || this.disabled}\n disabled={this.currentValue >= this.max || this.disabled}\n onClick={this.increase}\n >\n +\n </button>\n )}\n </div>\n );\n }\n}\n"]}
@@ -73,6 +73,17 @@
73
73
  align-items: center;
74
74
  justify-content: center;
75
75
  transition: all 0.2s;
76
+ /* button 默认样式重置(A1:从 span 改为 button 后需要) */
77
+ padding: 0;
78
+ border: none;
79
+ font-family: inherit;
80
+ line-height: 1;
81
+ }
82
+
83
+ .hb-input-number__increase:focus-visible,
84
+ .hb-input-number__decrease:focus-visible {
85
+ outline: 2px solid var(--hb-color-primary, #409eff);
86
+ outline-offset: -2px;
76
87
  }
77
88
 
78
89
  .hb-input-number__increase:hover:not(.hb-input-number__increase--disabled),
@@ -165,4 +176,3 @@
165
176
  .hb-input-number--disabled {
166
177
  cursor: not-allowed;
167
178
  }
168
-