huibo-ui 0.4.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 (656) 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-1ffddc59.js → date-helpers-c05ef385.js} +5 -16
  4. package/dist/cjs/date-helpers-c05ef385.js.map +1 -0
  5. package/dist/cjs/hb-alert.cjs.entry.js +2 -1
  6. package/dist/cjs/hb-alert.cjs.entry.js.map +1 -1
  7. package/dist/cjs/hb-calendar.cjs.entry.js +2 -2
  8. package/dist/cjs/hb-calendar.cjs.entry.js.map +1 -1
  9. package/dist/cjs/hb-cascader.cjs.entry.js +48 -12
  10. package/dist/cjs/hb-cascader.cjs.entry.js.map +1 -1
  11. package/dist/cjs/hb-checkbox-group.cjs.entry.js +12 -8
  12. package/dist/cjs/hb-checkbox-group.cjs.entry.js.map +1 -1
  13. package/dist/cjs/hb-checkbox.cjs.entry.js +9 -4
  14. package/dist/cjs/hb-checkbox.cjs.entry.js.map +1 -1
  15. package/dist/cjs/hb-collapse-item.cjs.entry.js +13 -4
  16. package/dist/cjs/hb-collapse-item.cjs.entry.js.map +1 -1
  17. package/dist/cjs/hb-collapse.cjs.entry.js +20 -15
  18. package/dist/cjs/hb-collapse.cjs.entry.js.map +1 -1
  19. package/dist/cjs/hb-color-picker.cjs.entry.js +22 -19
  20. package/dist/cjs/hb-color-picker.cjs.entry.js.map +1 -1
  21. package/dist/cjs/hb-date-picker-pane.cjs.entry.js +1 -1
  22. package/dist/cjs/hb-date-picker.cjs.entry.js +13 -10
  23. package/dist/cjs/hb-date-picker.cjs.entry.js.map +1 -1
  24. package/dist/cjs/hb-date-range-picker.cjs.entry.js +1 -1
  25. package/dist/cjs/hb-date-time-picker.cjs.entry.js +1 -1
  26. package/dist/cjs/hb-descriptions.cjs.entry.js.map +1 -1
  27. package/dist/cjs/hb-dialog.cjs.entry.js +51 -12
  28. package/dist/cjs/hb-dialog.cjs.entry.js.map +1 -1
  29. package/dist/cjs/hb-drawer.cjs.entry.js +34 -4
  30. package/dist/cjs/hb-drawer.cjs.entry.js.map +1 -1
  31. package/dist/cjs/hb-dropdown.cjs.entry.js +27 -15
  32. package/dist/cjs/hb-dropdown.cjs.entry.js.map +1 -1
  33. package/dist/cjs/hb-empty.cjs.entry.js +1 -1
  34. package/dist/cjs/hb-float-button.cjs.entry.js +2 -2
  35. package/dist/cjs/hb-form-item.cjs.entry.js +11 -10
  36. package/dist/cjs/hb-form-item.cjs.entry.js.map +1 -1
  37. package/dist/cjs/hb-form.cjs.entry.js +12 -7
  38. package/dist/cjs/hb-form.cjs.entry.js.map +1 -1
  39. package/dist/cjs/hb-image-preview.cjs.entry.js +1 -1
  40. package/dist/cjs/hb-image-preview.cjs.entry.js.map +1 -1
  41. package/dist/cjs/hb-image.cjs.entry.js +21 -3
  42. package/dist/cjs/hb-image.cjs.entry.js.map +1 -1
  43. package/dist/cjs/hb-input-number.cjs.entry.js +7 -7
  44. package/dist/cjs/hb-input-number.cjs.entry.js.map +1 -1
  45. package/dist/cjs/hb-input-tag.cjs.entry.js +2 -2
  46. package/dist/cjs/hb-input.cjs.entry.js +3 -2
  47. package/dist/cjs/hb-input.cjs.entry.js.map +1 -1
  48. package/dist/cjs/hb-layout.cjs.entry.js.map +1 -1
  49. package/dist/cjs/hb-link.cjs.entry.js +2 -2
  50. package/dist/cjs/hb-loading.cjs.entry.js +2 -2
  51. package/dist/cjs/hb-menu-item.cjs.entry.js +14 -5
  52. package/dist/cjs/hb-menu-item.cjs.entry.js.map +1 -1
  53. package/dist/cjs/hb-menu.cjs.entry.js +2 -2
  54. package/dist/cjs/hb-message.cjs.entry.js +13 -4
  55. package/dist/cjs/hb-message.cjs.entry.js.map +1 -1
  56. package/dist/cjs/hb-page-header.cjs.entry.js +1 -1
  57. package/dist/cjs/hb-pagination.cjs.entry.js +8 -5
  58. package/dist/cjs/hb-pagination.cjs.entry.js.map +1 -1
  59. package/dist/cjs/hb-popconfirm.cjs.entry.js +27 -8
  60. package/dist/cjs/hb-popconfirm.cjs.entry.js.map +1 -1
  61. package/dist/cjs/hb-popover.cjs.entry.js +26 -14
  62. package/dist/cjs/hb-popover.cjs.entry.js.map +1 -1
  63. package/dist/cjs/hb-progress.cjs.entry.js +1 -1
  64. package/dist/cjs/hb-radio.cjs.entry.js +8 -3
  65. package/dist/cjs/hb-radio.cjs.entry.js.map +1 -1
  66. package/dist/cjs/hb-rate.cjs.entry.js +3 -3
  67. package/dist/cjs/hb-rate.cjs.entry.js.map +1 -1
  68. package/dist/cjs/hb-row.cjs.entry.js +2 -2
  69. package/dist/cjs/hb-scrollbar.cjs.entry.js +5 -5
  70. package/dist/cjs/hb-scrollbar.cjs.entry.js.map +1 -1
  71. package/dist/cjs/hb-segmented.cjs.entry.js +13 -2
  72. package/dist/cjs/hb-segmented.cjs.entry.js.map +1 -1
  73. package/dist/cjs/hb-select.cjs.entry.js +21 -12
  74. package/dist/cjs/hb-select.cjs.entry.js.map +1 -1
  75. package/dist/cjs/hb-slider.cjs.entry.js +6 -12
  76. package/dist/cjs/hb-slider.cjs.entry.js.map +1 -1
  77. package/dist/cjs/hb-space.cjs.entry.js +2 -2
  78. package/dist/cjs/hb-statistic.cjs.entry.js +1 -1
  79. package/dist/cjs/hb-step.cjs.entry.js +1 -1
  80. package/dist/cjs/hb-steps.cjs.entry.js +2 -2
  81. package/dist/cjs/hb-steps.cjs.entry.js.map +1 -1
  82. package/dist/cjs/hb-sub-menu.cjs.entry.js +5 -5
  83. package/dist/cjs/hb-switch.cjs.entry.js +3 -3
  84. package/dist/cjs/hb-switch.cjs.entry.js.map +1 -1
  85. package/dist/cjs/hb-tab-pane.cjs.entry.js +1 -1
  86. package/dist/cjs/hb-table.cjs.entry.js +25 -16
  87. package/dist/cjs/hb-table.cjs.entry.js.map +1 -1
  88. package/dist/cjs/hb-tabs.cjs.entry.js +31 -10
  89. package/dist/cjs/hb-tabs.cjs.entry.js.map +1 -1
  90. package/dist/cjs/hb-tag.cjs.entry.js +3 -2
  91. package/dist/cjs/hb-tag.cjs.entry.js.map +1 -1
  92. package/dist/cjs/hb-text.cjs.entry.js +2 -2
  93. package/dist/cjs/hb-time-picker.cjs.entry.js +14 -9
  94. package/dist/cjs/hb-time-picker.cjs.entry.js.map +1 -1
  95. package/dist/cjs/hb-time-select.cjs.entry.js +13 -4
  96. package/dist/cjs/hb-time-select.cjs.entry.js.map +1 -1
  97. package/dist/cjs/hb-tooltip.cjs.entry.js +30 -10
  98. package/dist/cjs/hb-tooltip.cjs.entry.js.map +1 -1
  99. package/dist/cjs/hb-tree-select.cjs.entry.js +125 -10
  100. package/dist/cjs/hb-tree-select.cjs.entry.js.map +1 -1
  101. package/dist/cjs/hb-tree.cjs.entry.js +145 -12
  102. package/dist/cjs/hb-tree.cjs.entry.js.map +1 -1
  103. package/dist/cjs/hb-watermark.cjs.entry.js +19 -11
  104. package/dist/cjs/hb-watermark.cjs.entry.js.map +1 -1
  105. package/dist/cjs/huibo-ui.cjs.js +1 -1
  106. package/dist/cjs/loader.cjs.js +1 -1
  107. package/dist/cjs/transition-59f1da0f.js +34 -0
  108. package/dist/cjs/transition-59f1da0f.js.map +1 -0
  109. package/dist/collection/components/Alert/Alert.js +2 -1
  110. package/dist/collection/components/Alert/Alert.js.map +1 -1
  111. package/dist/collection/components/Calendar/Calendar.js +2 -2
  112. package/dist/collection/components/Calendar/Calendar.js.map +1 -1
  113. package/dist/collection/components/Cascader/Cascader.js +47 -11
  114. package/dist/collection/components/Cascader/Cascader.js.map +1 -1
  115. package/dist/collection/components/Checkbox/Checkbox.js +9 -4
  116. package/dist/collection/components/Checkbox/Checkbox.js.map +1 -1
  117. package/dist/collection/components/Checkbox/CheckboxGroup.js +12 -8
  118. package/dist/collection/components/Checkbox/CheckboxGroup.js.map +1 -1
  119. package/dist/collection/components/Collapse/Collapse.js +20 -15
  120. package/dist/collection/components/Collapse/Collapse.js.map +1 -1
  121. package/dist/collection/components/Collapse/CollapseItem.js +33 -4
  122. package/dist/collection/components/Collapse/CollapseItem.js.map +1 -1
  123. package/dist/collection/components/ColorPicker/ColorPicker.js +22 -19
  124. package/dist/collection/components/ColorPicker/ColorPicker.js.map +1 -1
  125. package/dist/collection/components/ColorPicker/color-picker.css +8 -3
  126. package/dist/collection/components/DatePicker/DatePicker.js +12 -9
  127. package/dist/collection/components/DatePicker/DatePicker.js.map +1 -1
  128. package/dist/collection/components/DatePicker/date-picker.css +3 -2
  129. package/dist/collection/components/Descriptions/descriptions.css +30 -10
  130. package/dist/collection/components/Dialog/Dialog.js +54 -10
  131. package/dist/collection/components/Dialog/Dialog.js.map +1 -1
  132. package/dist/collection/components/Dialog/dialog.css +57 -11
  133. package/dist/collection/components/Drawer/Drawer.js +34 -3
  134. package/dist/collection/components/Drawer/Drawer.js.map +1 -1
  135. package/dist/collection/components/Drawer/drawer.css +207 -17
  136. package/dist/collection/components/Dropdown/Dropdown.js +28 -13
  137. package/dist/collection/components/Dropdown/Dropdown.js.map +1 -1
  138. package/dist/collection/components/Dropdown/dropdown.css +24 -2
  139. package/dist/collection/components/Empty/Empty.js +1 -1
  140. package/dist/collection/components/FloatButton/FloatButton.js +2 -2
  141. package/dist/collection/components/Form/Form.js +14 -9
  142. package/dist/collection/components/Form/Form.js.map +1 -1
  143. package/dist/collection/components/Form/FormItem.js +13 -12
  144. package/dist/collection/components/Form/FormItem.js.map +1 -1
  145. package/dist/collection/components/Form/form-item.css +8 -2
  146. package/dist/collection/components/Image/Image.js +24 -3
  147. package/dist/collection/components/Image/Image.js.map +1 -1
  148. package/dist/collection/components/ImagePreview/ImagePreview.js +1 -1
  149. package/dist/collection/components/ImagePreview/ImagePreview.js.map +1 -1
  150. package/dist/collection/components/Input/Input.js +3 -2
  151. package/dist/collection/components/Input/Input.js.map +1 -1
  152. package/dist/collection/components/Input/input.css +1 -2
  153. package/dist/collection/components/InputNumber/InputNumber.js +6 -6
  154. package/dist/collection/components/InputNumber/InputNumber.js.map +1 -1
  155. package/dist/collection/components/InputNumber/input-number.css +11 -1
  156. package/dist/collection/components/InputTag/InputTag.js +2 -2
  157. package/dist/collection/components/Layout/Layout.js.map +1 -1
  158. package/dist/collection/components/Layout/Row.js +2 -2
  159. package/dist/collection/components/Layout/layout.css +1713 -576
  160. package/dist/collection/components/Link/Link.js +2 -2
  161. package/dist/collection/components/Loading/Loading.js +2 -2
  162. package/dist/collection/components/Menu/Menu.js +2 -2
  163. package/dist/collection/components/Menu/MenuItem.js +34 -5
  164. package/dist/collection/components/Menu/MenuItem.js.map +1 -1
  165. package/dist/collection/components/Menu/SubMenu.js +4 -4
  166. package/dist/collection/components/Message/Message.js +13 -4
  167. package/dist/collection/components/Message/Message.js.map +1 -1
  168. package/dist/collection/components/PageHeader/PageHeader.js +1 -1
  169. package/dist/collection/components/Pagination/Pagination.js +8 -5
  170. package/dist/collection/components/Pagination/Pagination.js.map +1 -1
  171. package/dist/collection/components/Popconfirm/Popconfirm.js +28 -6
  172. package/dist/collection/components/Popconfirm/Popconfirm.js.map +1 -1
  173. package/dist/collection/components/Popconfirm/popconfirm.css +80 -16
  174. package/dist/collection/components/Popover/Popover.js +27 -12
  175. package/dist/collection/components/Popover/Popover.js.map +1 -1
  176. package/dist/collection/components/Popover/popover.css +49 -8
  177. package/dist/collection/components/Progress/Progress.js +1 -1
  178. package/dist/collection/components/Radio/Radio.js +8 -3
  179. package/dist/collection/components/Radio/Radio.js.map +1 -1
  180. package/dist/collection/components/Rate/Rate.js +3 -3
  181. package/dist/collection/components/Rate/Rate.js.map +1 -1
  182. package/dist/collection/components/Scrollbar/Scrollbar.js +5 -5
  183. package/dist/collection/components/Scrollbar/Scrollbar.js.map +1 -1
  184. package/dist/collection/components/Segmented/Segmented.js +15 -1
  185. package/dist/collection/components/Segmented/Segmented.js.map +1 -1
  186. package/dist/collection/components/Select/Select.js +21 -12
  187. package/dist/collection/components/Select/Select.js.map +1 -1
  188. package/dist/collection/components/Select/select.css +0 -1
  189. package/dist/collection/components/Slider/Slider.js +6 -12
  190. package/dist/collection/components/Slider/Slider.js.map +1 -1
  191. package/dist/collection/components/Slider/slider.css +0 -1
  192. package/dist/collection/components/Space/Space.js +2 -2
  193. package/dist/collection/components/Statistic/Statistic.js +1 -1
  194. package/dist/collection/components/Steps/Step.js +1 -1
  195. package/dist/collection/components/Steps/Steps.js +2 -2
  196. package/dist/collection/components/Steps/Steps.js.map +1 -1
  197. package/dist/collection/components/Switch/Switch.js +3 -3
  198. package/dist/collection/components/Switch/Switch.js.map +1 -1
  199. package/dist/collection/components/Switch/switch.css +3 -2
  200. package/dist/collection/components/Table/Table.js +25 -16
  201. package/dist/collection/components/Table/Table.js.map +1 -1
  202. package/dist/collection/components/Table/table.css +6 -2
  203. package/dist/collection/components/Tabs/TabPane.js +1 -1
  204. package/dist/collection/components/Tabs/Tabs.js +31 -10
  205. package/dist/collection/components/Tabs/Tabs.js.map +1 -1
  206. package/dist/collection/components/Tag/Tag.js +3 -2
  207. package/dist/collection/components/Tag/Tag.js.map +1 -1
  208. package/dist/collection/components/Text/Text.js +2 -2
  209. package/dist/collection/components/TimePicker/TimePicker.js +14 -9
  210. package/dist/collection/components/TimePicker/TimePicker.js.map +1 -1
  211. package/dist/collection/components/TimeSelect/TimeSelect.js +13 -4
  212. package/dist/collection/components/TimeSelect/TimeSelect.js.map +1 -1
  213. package/dist/collection/components/Tooltip/Tooltip.js +31 -8
  214. package/dist/collection/components/Tooltip/Tooltip.js.map +1 -1
  215. package/dist/collection/components/Tooltip/tooltip.css +24 -2
  216. package/dist/collection/components/Tree/Tree.js +147 -13
  217. package/dist/collection/components/Tree/Tree.js.map +1 -1
  218. package/dist/collection/components/TreeSelect/TreeSelect.js +130 -11
  219. package/dist/collection/components/TreeSelect/TreeSelect.js.map +1 -1
  220. package/dist/collection/components/Watermark/Watermark.js +19 -11
  221. package/dist/collection/components/Watermark/Watermark.js.map +1 -1
  222. package/dist/collection/utils/a11y.js +15 -1
  223. package/dist/collection/utils/a11y.js.map +1 -1
  224. package/dist/collection/utils/date-helpers.js +4 -15
  225. package/dist/collection/utils/date-helpers.js.map +1 -1
  226. package/dist/collection/utils/transition.js +29 -0
  227. package/dist/collection/utils/transition.js.map +1 -0
  228. package/dist/components/hb-alert.js +2 -1
  229. package/dist/components/hb-alert.js.map +1 -1
  230. package/dist/components/hb-calendar.js +2 -2
  231. package/dist/components/hb-calendar.js.map +1 -1
  232. package/dist/components/hb-cascader.js +48 -12
  233. package/dist/components/hb-cascader.js.map +1 -1
  234. package/dist/components/hb-checkbox-group.js +12 -8
  235. package/dist/components/hb-checkbox-group.js.map +1 -1
  236. package/dist/components/hb-checkbox.js +9 -4
  237. package/dist/components/hb-checkbox.js.map +1 -1
  238. package/dist/components/hb-collapse-item.js +14 -4
  239. package/dist/components/hb-collapse-item.js.map +1 -1
  240. package/dist/components/hb-collapse.js +20 -15
  241. package/dist/components/hb-collapse.js.map +1 -1
  242. package/dist/components/hb-color-picker.js +22 -19
  243. package/dist/components/hb-color-picker.js.map +1 -1
  244. package/dist/components/hb-date-picker-pane.js +1 -1
  245. package/dist/components/hb-date-picker.js +13 -10
  246. package/dist/components/hb-date-picker.js.map +1 -1
  247. package/dist/components/hb-date-range-picker.js +1 -1
  248. package/dist/components/hb-date-time-picker.js +1 -1
  249. package/dist/components/hb-descriptions.js.map +1 -1
  250. package/dist/components/hb-dialog.js +53 -13
  251. package/dist/components/hb-dialog.js.map +1 -1
  252. package/dist/components/hb-drawer.js +36 -5
  253. package/dist/components/hb-drawer.js.map +1 -1
  254. package/dist/components/hb-dropdown.js +28 -15
  255. package/dist/components/hb-dropdown.js.map +1 -1
  256. package/dist/components/hb-empty.js +1 -1
  257. package/dist/components/hb-float-button.js +2 -2
  258. package/dist/components/hb-form-item.js +11 -10
  259. package/dist/components/hb-form-item.js.map +1 -1
  260. package/dist/components/hb-form.js +12 -7
  261. package/dist/components/hb-form.js.map +1 -1
  262. package/dist/components/hb-image-preview.js +1 -1
  263. package/dist/components/hb-image-preview.js.map +1 -1
  264. package/dist/components/hb-image.js +23 -3
  265. package/dist/components/hb-image.js.map +1 -1
  266. package/dist/components/hb-input-number.js +7 -7
  267. package/dist/components/hb-input-number.js.map +1 -1
  268. package/dist/components/hb-input-tag.js +2 -2
  269. package/dist/components/hb-input.js +3 -2
  270. package/dist/components/hb-input.js.map +1 -1
  271. package/dist/components/hb-layout.js.map +1 -1
  272. package/dist/components/hb-link.js +2 -2
  273. package/dist/components/hb-loading.js +2 -2
  274. package/dist/components/hb-menu-item.js +15 -5
  275. package/dist/components/hb-menu-item.js.map +1 -1
  276. package/dist/components/hb-menu.js +2 -2
  277. package/dist/components/hb-message.js +13 -4
  278. package/dist/components/hb-message.js.map +1 -1
  279. package/dist/components/hb-page-header.js +1 -1
  280. package/dist/components/hb-pagination.js +8 -5
  281. package/dist/components/hb-pagination.js.map +1 -1
  282. package/dist/components/hb-popconfirm.js +28 -8
  283. package/dist/components/hb-popconfirm.js.map +1 -1
  284. package/dist/components/hb-popover.js +27 -14
  285. package/dist/components/hb-popover.js.map +1 -1
  286. package/dist/components/hb-progress.js +1 -1
  287. package/dist/components/hb-radio.js +8 -3
  288. package/dist/components/hb-radio.js.map +1 -1
  289. package/dist/components/hb-rate.js +3 -3
  290. package/dist/components/hb-rate.js.map +1 -1
  291. package/dist/components/hb-row.js +2 -2
  292. package/dist/components/hb-scrollbar.js +5 -5
  293. package/dist/components/hb-scrollbar.js.map +1 -1
  294. package/dist/components/hb-segmented.js +15 -2
  295. package/dist/components/hb-segmented.js.map +1 -1
  296. package/dist/components/hb-select.js +21 -12
  297. package/dist/components/hb-select.js.map +1 -1
  298. package/dist/components/hb-slider.js +6 -12
  299. package/dist/components/hb-slider.js.map +1 -1
  300. package/dist/components/hb-space.js +2 -2
  301. package/dist/components/hb-statistic.js +1 -1
  302. package/dist/components/hb-step.js +1 -1
  303. package/dist/components/hb-steps.js +2 -2
  304. package/dist/components/hb-steps.js.map +1 -1
  305. package/dist/components/hb-sub-menu.js +5 -5
  306. package/dist/components/hb-switch.js +3 -3
  307. package/dist/components/hb-switch.js.map +1 -1
  308. package/dist/components/hb-tab-pane.js +1 -1
  309. package/dist/components/hb-table.js +25 -16
  310. package/dist/components/hb-table.js.map +1 -1
  311. package/dist/components/hb-tabs.js +31 -10
  312. package/dist/components/hb-tabs.js.map +1 -1
  313. package/dist/components/hb-tag.js +3 -2
  314. package/dist/components/hb-tag.js.map +1 -1
  315. package/dist/components/hb-text.js +2 -2
  316. package/dist/components/hb-time-picker.js +14 -9
  317. package/dist/components/hb-time-picker.js.map +1 -1
  318. package/dist/components/hb-time-select.js +13 -4
  319. package/dist/components/hb-time-select.js.map +1 -1
  320. package/dist/components/hb-tooltip.js +31 -10
  321. package/dist/components/hb-tooltip.js.map +1 -1
  322. package/dist/components/hb-tree-select.js +129 -11
  323. package/dist/components/hb-tree-select.js.map +1 -1
  324. package/dist/components/hb-tree.js +147 -13
  325. package/dist/components/hb-tree.js.map +1 -1
  326. package/dist/components/hb-watermark.js +19 -11
  327. package/dist/components/hb-watermark.js.map +1 -1
  328. package/dist/{esm/a11y-f9ab2964.js → components/p-00aa34c8.js} +17 -3
  329. package/dist/components/p-00aa34c8.js.map +1 -0
  330. package/dist/components/{p-08b4005c.js → p-e0876aca.js} +5 -16
  331. package/dist/components/p-e0876aca.js.map +1 -0
  332. package/dist/components/p-fad66d69.js +32 -0
  333. package/dist/components/p-fad66d69.js.map +1 -0
  334. package/dist/{components/p-cc0aeb50.js → esm/a11y-e4cde5b0.js} +17 -3
  335. package/dist/esm/a11y-e4cde5b0.js.map +1 -0
  336. package/dist/esm/{date-helpers-44507189.js → date-helpers-259ed2f1.js} +5 -16
  337. package/dist/esm/date-helpers-259ed2f1.js.map +1 -0
  338. package/dist/esm/hb-alert.entry.js +2 -1
  339. package/dist/esm/hb-alert.entry.js.map +1 -1
  340. package/dist/esm/hb-calendar.entry.js +2 -2
  341. package/dist/esm/hb-calendar.entry.js.map +1 -1
  342. package/dist/esm/hb-cascader.entry.js +48 -12
  343. package/dist/esm/hb-cascader.entry.js.map +1 -1
  344. package/dist/esm/hb-checkbox-group.entry.js +12 -8
  345. package/dist/esm/hb-checkbox-group.entry.js.map +1 -1
  346. package/dist/esm/hb-checkbox.entry.js +9 -4
  347. package/dist/esm/hb-checkbox.entry.js.map +1 -1
  348. package/dist/esm/hb-collapse-item.entry.js +13 -4
  349. package/dist/esm/hb-collapse-item.entry.js.map +1 -1
  350. package/dist/esm/hb-collapse.entry.js +20 -15
  351. package/dist/esm/hb-collapse.entry.js.map +1 -1
  352. package/dist/esm/hb-color-picker.entry.js +22 -19
  353. package/dist/esm/hb-color-picker.entry.js.map +1 -1
  354. package/dist/esm/hb-date-picker-pane.entry.js +1 -1
  355. package/dist/esm/hb-date-picker.entry.js +13 -10
  356. package/dist/esm/hb-date-picker.entry.js.map +1 -1
  357. package/dist/esm/hb-date-range-picker.entry.js +1 -1
  358. package/dist/esm/hb-date-time-picker.entry.js +1 -1
  359. package/dist/esm/hb-descriptions.entry.js.map +1 -1
  360. package/dist/esm/hb-dialog.entry.js +51 -12
  361. package/dist/esm/hb-dialog.entry.js.map +1 -1
  362. package/dist/esm/hb-drawer.entry.js +34 -4
  363. package/dist/esm/hb-drawer.entry.js.map +1 -1
  364. package/dist/esm/hb-dropdown.entry.js +27 -15
  365. package/dist/esm/hb-dropdown.entry.js.map +1 -1
  366. package/dist/esm/hb-empty.entry.js +1 -1
  367. package/dist/esm/hb-float-button.entry.js +2 -2
  368. package/dist/esm/hb-form-item.entry.js +11 -10
  369. package/dist/esm/hb-form-item.entry.js.map +1 -1
  370. package/dist/esm/hb-form.entry.js +12 -7
  371. package/dist/esm/hb-form.entry.js.map +1 -1
  372. package/dist/esm/hb-image-preview.entry.js +1 -1
  373. package/dist/esm/hb-image-preview.entry.js.map +1 -1
  374. package/dist/esm/hb-image.entry.js +21 -3
  375. package/dist/esm/hb-image.entry.js.map +1 -1
  376. package/dist/esm/hb-input-number.entry.js +7 -7
  377. package/dist/esm/hb-input-number.entry.js.map +1 -1
  378. package/dist/esm/hb-input-tag.entry.js +2 -2
  379. package/dist/esm/hb-input.entry.js +3 -2
  380. package/dist/esm/hb-input.entry.js.map +1 -1
  381. package/dist/esm/hb-layout.entry.js.map +1 -1
  382. package/dist/esm/hb-link.entry.js +2 -2
  383. package/dist/esm/hb-loading.entry.js +2 -2
  384. package/dist/esm/hb-menu-item.entry.js +14 -5
  385. package/dist/esm/hb-menu-item.entry.js.map +1 -1
  386. package/dist/esm/hb-menu.entry.js +2 -2
  387. package/dist/esm/hb-message.entry.js +13 -4
  388. package/dist/esm/hb-message.entry.js.map +1 -1
  389. package/dist/esm/hb-page-header.entry.js +1 -1
  390. package/dist/esm/hb-pagination.entry.js +8 -5
  391. package/dist/esm/hb-pagination.entry.js.map +1 -1
  392. package/dist/esm/hb-popconfirm.entry.js +27 -8
  393. package/dist/esm/hb-popconfirm.entry.js.map +1 -1
  394. package/dist/esm/hb-popover.entry.js +26 -14
  395. package/dist/esm/hb-popover.entry.js.map +1 -1
  396. package/dist/esm/hb-progress.entry.js +1 -1
  397. package/dist/esm/hb-radio.entry.js +8 -3
  398. package/dist/esm/hb-radio.entry.js.map +1 -1
  399. package/dist/esm/hb-rate.entry.js +3 -3
  400. package/dist/esm/hb-rate.entry.js.map +1 -1
  401. package/dist/esm/hb-row.entry.js +2 -2
  402. package/dist/esm/hb-scrollbar.entry.js +5 -5
  403. package/dist/esm/hb-scrollbar.entry.js.map +1 -1
  404. package/dist/esm/hb-segmented.entry.js +13 -2
  405. package/dist/esm/hb-segmented.entry.js.map +1 -1
  406. package/dist/esm/hb-select.entry.js +21 -12
  407. package/dist/esm/hb-select.entry.js.map +1 -1
  408. package/dist/esm/hb-slider.entry.js +6 -12
  409. package/dist/esm/hb-slider.entry.js.map +1 -1
  410. package/dist/esm/hb-space.entry.js +2 -2
  411. package/dist/esm/hb-statistic.entry.js +1 -1
  412. package/dist/esm/hb-step.entry.js +1 -1
  413. package/dist/esm/hb-steps.entry.js +2 -2
  414. package/dist/esm/hb-steps.entry.js.map +1 -1
  415. package/dist/esm/hb-sub-menu.entry.js +5 -5
  416. package/dist/esm/hb-switch.entry.js +3 -3
  417. package/dist/esm/hb-switch.entry.js.map +1 -1
  418. package/dist/esm/hb-tab-pane.entry.js +1 -1
  419. package/dist/esm/hb-table.entry.js +25 -16
  420. package/dist/esm/hb-table.entry.js.map +1 -1
  421. package/dist/esm/hb-tabs.entry.js +31 -10
  422. package/dist/esm/hb-tabs.entry.js.map +1 -1
  423. package/dist/esm/hb-tag.entry.js +3 -2
  424. package/dist/esm/hb-tag.entry.js.map +1 -1
  425. package/dist/esm/hb-text.entry.js +2 -2
  426. package/dist/esm/hb-time-picker.entry.js +14 -9
  427. package/dist/esm/hb-time-picker.entry.js.map +1 -1
  428. package/dist/esm/hb-time-select.entry.js +13 -4
  429. package/dist/esm/hb-time-select.entry.js.map +1 -1
  430. package/dist/esm/hb-tooltip.entry.js +30 -10
  431. package/dist/esm/hb-tooltip.entry.js.map +1 -1
  432. package/dist/esm/hb-tree-select.entry.js +125 -10
  433. package/dist/esm/hb-tree-select.entry.js.map +1 -1
  434. package/dist/esm/hb-tree.entry.js +145 -12
  435. package/dist/esm/hb-tree.entry.js.map +1 -1
  436. package/dist/esm/hb-watermark.entry.js +19 -11
  437. package/dist/esm/hb-watermark.entry.js.map +1 -1
  438. package/dist/esm/huibo-ui.js +1 -1
  439. package/dist/esm/loader.js +1 -1
  440. package/dist/esm/transition-4295d789.js +32 -0
  441. package/dist/esm/transition-4295d789.js.map +1 -0
  442. package/dist/huibo-ui/huibo-ui.esm.js +1 -1
  443. package/dist/huibo-ui/huibo-ui.esm.js.map +1 -1
  444. package/dist/huibo-ui/p-00aa34c8.js +2 -0
  445. package/dist/huibo-ui/p-00aa34c8.js.map +1 -0
  446. package/dist/huibo-ui/p-0cc1e3f3.entry.js +2 -0
  447. package/dist/huibo-ui/p-0cc1e3f3.entry.js.map +1 -0
  448. package/dist/huibo-ui/{p-678b4212.entry.js → p-0ddae4e9.entry.js} +2 -2
  449. package/dist/huibo-ui/p-10f6c184.entry.js.map +1 -1
  450. package/dist/huibo-ui/{p-f4336be9.entry.js → p-14c3b47b.entry.js} +2 -2
  451. package/dist/huibo-ui/{p-c50ad398.entry.js → p-193efdc0.entry.js} +2 -2
  452. package/dist/huibo-ui/{p-735bceef.entry.js → p-1b98152b.entry.js} +2 -2
  453. package/dist/huibo-ui/p-1b98152b.entry.js.map +1 -0
  454. package/dist/huibo-ui/p-1f6d0adb.entry.js +2 -0
  455. package/dist/huibo-ui/p-1f6d0adb.entry.js.map +1 -0
  456. package/dist/huibo-ui/{p-2943f5d0.entry.js → p-29092b85.entry.js} +2 -2
  457. package/dist/huibo-ui/p-29092b85.entry.js.map +1 -0
  458. package/dist/huibo-ui/p-2bc30b1b.entry.js +2 -0
  459. package/dist/huibo-ui/p-2bc30b1b.entry.js.map +1 -0
  460. package/dist/huibo-ui/{p-0d4b2997.entry.js → p-2bcda1bb.entry.js} +2 -2
  461. package/dist/huibo-ui/{p-b8d87f7e.entry.js → p-2ca9796a.entry.js} +2 -2
  462. package/dist/huibo-ui/p-2ca9796a.entry.js.map +1 -0
  463. package/dist/huibo-ui/{p-7da14d7c.entry.js → p-3042f986.entry.js} +2 -2
  464. package/dist/huibo-ui/{p-e039155d.entry.js → p-3dacb26b.entry.js} +2 -2
  465. package/dist/huibo-ui/{p-a084b8e5.entry.js → p-412ff618.entry.js} +2 -2
  466. package/dist/huibo-ui/{p-6beb5b81.entry.js → p-415295f3.entry.js} +2 -2
  467. package/dist/huibo-ui/p-415295f3.entry.js.map +1 -0
  468. package/dist/huibo-ui/p-494e6c25.entry.js +2 -0
  469. package/dist/huibo-ui/p-494e6c25.entry.js.map +1 -0
  470. package/dist/huibo-ui/p-4d87d7f4.entry.js +2 -0
  471. package/dist/huibo-ui/p-4d87d7f4.entry.js.map +1 -0
  472. package/dist/huibo-ui/{p-2811e603.entry.js → p-54a28052.entry.js} +2 -2
  473. package/dist/huibo-ui/p-54a28052.entry.js.map +1 -0
  474. package/dist/huibo-ui/p-5e253c15.entry.js +2 -0
  475. package/dist/huibo-ui/p-5e253c15.entry.js.map +1 -0
  476. package/dist/huibo-ui/p-63d68c61.entry.js +2 -0
  477. package/dist/huibo-ui/p-63d68c61.entry.js.map +1 -0
  478. package/dist/huibo-ui/{p-ccd09d5a.entry.js → p-6518c435.entry.js} +2 -2
  479. package/dist/huibo-ui/{p-1f8db37a.entry.js → p-687d8dff.entry.js} +2 -2
  480. package/dist/huibo-ui/p-687d8dff.entry.js.map +1 -0
  481. package/dist/huibo-ui/p-688460ce.entry.js +2 -0
  482. package/dist/huibo-ui/p-688460ce.entry.js.map +1 -0
  483. package/dist/huibo-ui/p-69bb1dd9.entry.js +2 -0
  484. package/dist/huibo-ui/p-69bb1dd9.entry.js.map +1 -0
  485. package/dist/huibo-ui/{p-e5cbfa9e.entry.js → p-6c23fbd1.entry.js} +2 -2
  486. package/dist/huibo-ui/p-6c23fbd1.entry.js.map +1 -0
  487. package/dist/huibo-ui/p-6c8cf248.entry.js.map +1 -1
  488. package/dist/huibo-ui/p-6efed295.entry.js +2 -0
  489. package/dist/huibo-ui/p-6efed295.entry.js.map +1 -0
  490. package/dist/huibo-ui/{p-c80f8ace.entry.js → p-79b24b83.entry.js} +2 -2
  491. package/dist/huibo-ui/p-79b24b83.entry.js.map +1 -0
  492. package/dist/huibo-ui/p-7a38b3e2.entry.js +2 -0
  493. package/dist/huibo-ui/p-7a38b3e2.entry.js.map +1 -0
  494. package/dist/huibo-ui/{p-cad57c2d.entry.js → p-7a682c56.entry.js} +2 -2
  495. package/dist/huibo-ui/{p-a8996d22.entry.js → p-815fc943.entry.js} +2 -2
  496. package/dist/huibo-ui/{p-af74667d.entry.js → p-89be7973.entry.js} +2 -2
  497. package/dist/huibo-ui/p-8a202bc5.entry.js.map +1 -1
  498. package/dist/huibo-ui/{p-213b9de7.entry.js → p-8c4415ed.entry.js} +2 -2
  499. package/dist/huibo-ui/p-8c4415ed.entry.js.map +1 -0
  500. package/dist/huibo-ui/{p-8fdbd17c.entry.js → p-950e7465.entry.js} +2 -2
  501. package/dist/huibo-ui/{p-ab9cf0e4.entry.js → p-96cecd21.entry.js} +2 -2
  502. package/dist/huibo-ui/p-96cecd21.entry.js.map +1 -0
  503. package/dist/huibo-ui/{p-2b4556ff.entry.js → p-98b513cd.entry.js} +2 -2
  504. package/dist/huibo-ui/p-98b513cd.entry.js.map +1 -0
  505. package/dist/huibo-ui/{p-86bdc48a.entry.js → p-ac18c68b.entry.js} +2 -2
  506. package/dist/huibo-ui/p-ac18c68b.entry.js.map +1 -0
  507. package/dist/huibo-ui/{p-89ea1141.entry.js → p-ac45291c.entry.js} +2 -2
  508. package/dist/huibo-ui/{p-e10fcfbe.entry.js → p-b105cf76.entry.js} +2 -2
  509. package/dist/huibo-ui/p-b105cf76.entry.js.map +1 -0
  510. package/dist/huibo-ui/{p-9a5406f0.entry.js → p-b38802b0.entry.js} +2 -2
  511. package/dist/huibo-ui/{p-9a5406f0.entry.js.map → p-b38802b0.entry.js.map} +1 -1
  512. package/dist/huibo-ui/{p-ea74fcae.entry.js → p-b3fd12c7.entry.js} +2 -2
  513. package/dist/huibo-ui/p-b3fd12c7.entry.js.map +1 -0
  514. package/dist/huibo-ui/p-b5ea18ba.entry.js +2 -0
  515. package/dist/huibo-ui/p-b5ea18ba.entry.js.map +1 -0
  516. package/dist/huibo-ui/{p-41d9c846.entry.js → p-b6afe81e.entry.js} +2 -2
  517. package/dist/huibo-ui/p-b7900dee.entry.js +2 -0
  518. package/dist/huibo-ui/p-b7900dee.entry.js.map +1 -0
  519. package/dist/huibo-ui/p-b8c83751.entry.js +2 -0
  520. package/dist/huibo-ui/p-b8c83751.entry.js.map +1 -0
  521. package/dist/huibo-ui/p-c7713947.entry.js +2 -0
  522. package/dist/huibo-ui/p-c7713947.entry.js.map +1 -0
  523. package/dist/huibo-ui/{p-33de6878.entry.js → p-c869842c.entry.js} +2 -2
  524. package/dist/huibo-ui/p-c869842c.entry.js.map +1 -0
  525. package/dist/huibo-ui/p-c8e917db.entry.js.map +1 -1
  526. package/dist/huibo-ui/p-cb66dbef.entry.js +2 -0
  527. package/dist/huibo-ui/p-cb66dbef.entry.js.map +1 -0
  528. package/dist/huibo-ui/p-cde83f76.entry.js +2 -0
  529. package/dist/huibo-ui/p-cde83f76.entry.js.map +1 -0
  530. package/dist/huibo-ui/{p-f5969181.entry.js → p-dd9c6459.entry.js} +2 -2
  531. package/dist/huibo-ui/{p-08b4005c.js → p-e0876aca.js} +1 -1
  532. package/dist/huibo-ui/p-e0876aca.js.map +1 -0
  533. package/dist/huibo-ui/{p-aa5e5e02.entry.js → p-e1773c93.entry.js} +2 -2
  534. package/dist/huibo-ui/p-e1773c93.entry.js.map +1 -0
  535. package/dist/huibo-ui/{p-626b48f1.entry.js → p-e73c357f.entry.js} +2 -2
  536. package/dist/huibo-ui/p-e73c357f.entry.js.map +1 -0
  537. package/dist/huibo-ui/{p-60532a1f.entry.js → p-e7c73624.entry.js} +2 -2
  538. package/dist/huibo-ui/p-e7c73624.entry.js.map +1 -0
  539. package/dist/huibo-ui/{p-13010da2.entry.js → p-e9e7abca.entry.js} +2 -2
  540. package/dist/huibo-ui/{p-f6889710.entry.js → p-ea0823f3.entry.js} +2 -2
  541. package/dist/huibo-ui/p-ea0823f3.entry.js.map +1 -0
  542. package/dist/huibo-ui/{p-b468858e.entry.js → p-f1f2483f.entry.js} +2 -2
  543. package/dist/huibo-ui/p-fad66d69.js +2 -0
  544. package/dist/huibo-ui/p-fad66d69.js.map +1 -0
  545. package/dist/huibo-ui/{p-fd8301c6.entry.js → p-fd6831f9.entry.js} +2 -2
  546. package/dist/huibo-ui/p-ff6bc5cc.entry.js +2 -0
  547. package/dist/huibo-ui/p-ff6bc5cc.entry.js.map +1 -0
  548. package/dist/types/components/Cascader/Cascader.d.ts +12 -0
  549. package/dist/types/components/Checkbox/Checkbox.d.ts +5 -0
  550. package/dist/types/components/Checkbox/CheckboxGroup.d.ts +1 -0
  551. package/dist/types/components/Collapse/Collapse.d.ts +2 -0
  552. package/dist/types/components/Collapse/CollapseItem.d.ts +8 -1
  553. package/dist/types/components/Dialog/Dialog.d.ts +13 -1
  554. package/dist/types/components/Drawer/Drawer.d.ts +4 -0
  555. package/dist/types/components/Dropdown/Dropdown.d.ts +6 -2
  556. package/dist/types/components/Form/Form.d.ts +2 -0
  557. package/dist/types/components/Image/Image.d.ts +6 -0
  558. package/dist/types/components/Menu/MenuItem.d.ts +8 -1
  559. package/dist/types/components/Message/Message.d.ts +3 -0
  560. package/dist/types/components/Popconfirm/Popconfirm.d.ts +6 -2
  561. package/dist/types/components/Popover/Popover.d.ts +6 -1
  562. package/dist/types/components/Radio/Radio.d.ts +5 -0
  563. package/dist/types/components/Segmented/Segmented.d.ts +6 -0
  564. package/dist/types/components/Select/Select.d.ts +5 -0
  565. package/dist/types/components/Table/Table.d.ts +8 -2
  566. package/dist/types/components/Tabs/Tabs.d.ts +6 -0
  567. package/dist/types/components/Tooltip/Tooltip.d.ts +6 -0
  568. package/dist/types/components/Tree/Tree.d.ts +24 -0
  569. package/dist/types/components/TreeSelect/TreeSelect.d.ts +17 -0
  570. package/dist/types/components/Watermark/Watermark.d.ts +7 -1
  571. package/dist/types/components.d.ts +40 -4
  572. package/dist/types/utils/a11y.d.ts +9 -0
  573. package/dist/types/utils/transition.d.ts +27 -0
  574. package/package.json +1 -1
  575. package/dist/cjs/a11y-802de67a.js.map +0 -1
  576. package/dist/cjs/date-helpers-1ffddc59.js.map +0 -1
  577. package/dist/components/p-08b4005c.js.map +0 -1
  578. package/dist/components/p-cc0aeb50.js.map +0 -1
  579. package/dist/esm/a11y-f9ab2964.js.map +0 -1
  580. package/dist/esm/date-helpers-44507189.js.map +0 -1
  581. package/dist/huibo-ui/p-08b4005c.js.map +0 -1
  582. package/dist/huibo-ui/p-1f8db37a.entry.js.map +0 -1
  583. package/dist/huibo-ui/p-213b9de7.entry.js.map +0 -1
  584. package/dist/huibo-ui/p-25fd7d5c.entry.js +0 -2
  585. package/dist/huibo-ui/p-25fd7d5c.entry.js.map +0 -1
  586. package/dist/huibo-ui/p-2811e603.entry.js.map +0 -1
  587. package/dist/huibo-ui/p-2943f5d0.entry.js.map +0 -1
  588. package/dist/huibo-ui/p-2b4556ff.entry.js.map +0 -1
  589. package/dist/huibo-ui/p-33de6878.entry.js.map +0 -1
  590. package/dist/huibo-ui/p-3807da71.entry.js +0 -2
  591. package/dist/huibo-ui/p-3807da71.entry.js.map +0 -1
  592. package/dist/huibo-ui/p-47ef7a86.entry.js +0 -2
  593. package/dist/huibo-ui/p-47ef7a86.entry.js.map +0 -1
  594. package/dist/huibo-ui/p-4d34e43e.entry.js +0 -2
  595. package/dist/huibo-ui/p-4d34e43e.entry.js.map +0 -1
  596. package/dist/huibo-ui/p-54aa2fd8.entry.js +0 -2
  597. package/dist/huibo-ui/p-54aa2fd8.entry.js.map +0 -1
  598. package/dist/huibo-ui/p-60532a1f.entry.js.map +0 -1
  599. package/dist/huibo-ui/p-626b48f1.entry.js.map +0 -1
  600. package/dist/huibo-ui/p-639f167d.entry.js +0 -2
  601. package/dist/huibo-ui/p-639f167d.entry.js.map +0 -1
  602. package/dist/huibo-ui/p-6beb5b81.entry.js.map +0 -1
  603. package/dist/huibo-ui/p-735bceef.entry.js.map +0 -1
  604. package/dist/huibo-ui/p-76519752.entry.js +0 -2
  605. package/dist/huibo-ui/p-76519752.entry.js.map +0 -1
  606. package/dist/huibo-ui/p-79af2efa.entry.js +0 -2
  607. package/dist/huibo-ui/p-79af2efa.entry.js.map +0 -1
  608. package/dist/huibo-ui/p-7f6975ad.entry.js +0 -2
  609. package/dist/huibo-ui/p-7f6975ad.entry.js.map +0 -1
  610. package/dist/huibo-ui/p-86bdc48a.entry.js.map +0 -1
  611. package/dist/huibo-ui/p-8a8443b8.entry.js +0 -2
  612. package/dist/huibo-ui/p-8a8443b8.entry.js.map +0 -1
  613. package/dist/huibo-ui/p-8fd788c9.entry.js +0 -2
  614. package/dist/huibo-ui/p-8fd788c9.entry.js.map +0 -1
  615. package/dist/huibo-ui/p-92521c31.entry.js +0 -2
  616. package/dist/huibo-ui/p-92521c31.entry.js.map +0 -1
  617. package/dist/huibo-ui/p-965d4d02.entry.js +0 -2
  618. package/dist/huibo-ui/p-965d4d02.entry.js.map +0 -1
  619. package/dist/huibo-ui/p-aa5e5e02.entry.js.map +0 -1
  620. package/dist/huibo-ui/p-ab9cf0e4.entry.js.map +0 -1
  621. package/dist/huibo-ui/p-b8d87f7e.entry.js.map +0 -1
  622. package/dist/huibo-ui/p-c6c91664.entry.js +0 -2
  623. package/dist/huibo-ui/p-c6c91664.entry.js.map +0 -1
  624. package/dist/huibo-ui/p-c80f8ace.entry.js.map +0 -1
  625. package/dist/huibo-ui/p-cc0aeb50.js +0 -2
  626. package/dist/huibo-ui/p-cc0aeb50.js.map +0 -1
  627. package/dist/huibo-ui/p-d79a15b1.entry.js +0 -2
  628. package/dist/huibo-ui/p-d79a15b1.entry.js.map +0 -1
  629. package/dist/huibo-ui/p-e10fcfbe.entry.js.map +0 -1
  630. package/dist/huibo-ui/p-e5cbfa9e.entry.js.map +0 -1
  631. package/dist/huibo-ui/p-ea74fcae.entry.js.map +0 -1
  632. package/dist/huibo-ui/p-edbda423.entry.js +0 -2
  633. package/dist/huibo-ui/p-edbda423.entry.js.map +0 -1
  634. package/dist/huibo-ui/p-f6889710.entry.js.map +0 -1
  635. package/dist/huibo-ui/p-f9bb5217.entry.js +0 -2
  636. package/dist/huibo-ui/p-f9bb5217.entry.js.map +0 -1
  637. package/dist/huibo-ui/p-fea20295.entry.js +0 -2
  638. package/dist/huibo-ui/p-fea20295.entry.js.map +0 -1
  639. /package/dist/huibo-ui/{p-678b4212.entry.js.map → p-0ddae4e9.entry.js.map} +0 -0
  640. /package/dist/huibo-ui/{p-f4336be9.entry.js.map → p-14c3b47b.entry.js.map} +0 -0
  641. /package/dist/huibo-ui/{p-c50ad398.entry.js.map → p-193efdc0.entry.js.map} +0 -0
  642. /package/dist/huibo-ui/{p-0d4b2997.entry.js.map → p-2bcda1bb.entry.js.map} +0 -0
  643. /package/dist/huibo-ui/{p-7da14d7c.entry.js.map → p-3042f986.entry.js.map} +0 -0
  644. /package/dist/huibo-ui/{p-e039155d.entry.js.map → p-3dacb26b.entry.js.map} +0 -0
  645. /package/dist/huibo-ui/{p-a084b8e5.entry.js.map → p-412ff618.entry.js.map} +0 -0
  646. /package/dist/huibo-ui/{p-ccd09d5a.entry.js.map → p-6518c435.entry.js.map} +0 -0
  647. /package/dist/huibo-ui/{p-cad57c2d.entry.js.map → p-7a682c56.entry.js.map} +0 -0
  648. /package/dist/huibo-ui/{p-a8996d22.entry.js.map → p-815fc943.entry.js.map} +0 -0
  649. /package/dist/huibo-ui/{p-af74667d.entry.js.map → p-89be7973.entry.js.map} +0 -0
  650. /package/dist/huibo-ui/{p-8fdbd17c.entry.js.map → p-950e7465.entry.js.map} +0 -0
  651. /package/dist/huibo-ui/{p-89ea1141.entry.js.map → p-ac45291c.entry.js.map} +0 -0
  652. /package/dist/huibo-ui/{p-41d9c846.entry.js.map → p-b6afe81e.entry.js.map} +0 -0
  653. /package/dist/huibo-ui/{p-f5969181.entry.js.map → p-dd9c6459.entry.js.map} +0 -0
  654. /package/dist/huibo-ui/{p-13010da2.entry.js.map → p-e9e7abca.entry.js.map} +0 -0
  655. /package/dist/huibo-ui/{p-b468858e.entry.js.map → p-f1f2483f.entry.js.map} +0 -0
  656. /package/dist/huibo-ui/{p-fd8301c6.entry.js.map → p-fd6831f9.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["tableCss","HbTableStyle0","Table","data","columns","stripe","border","size","loading","rowKey","emptyText","maxHeight","highlightCurrentRow","selectable","actions","virtualScroll","itemHeight","virtualScrollHeight","treeProps","editable","sortProp","sortDirection","currentRow","selectedRows","Set","scrollTop","expandedRowKeys","editingCell","hbSortChange","hbRowClick","hbSelectionChange","hbAction","hbExpandChange","hbCellChange","handleDataChange","this","emitSelection","isTreeMode","childrenField","children","flattenTree","list","level","parentKeyPath","field","result","forEach","row","i","keyPath","key","kids","hasKids","Array","isArray","length","push","hasChildren","index","indexOf","toggleExpand","idx","expanded","filter","k","emit","startEdit","e","prop","stopPropagation","commitEdit","input","target","value","onEditKeydown","preventDefault","allCheckboxRef","componentDidRender","indeterminate","isIndeterminate","virtualBuffer","handleVirtualScroll","visibleRange","total","startIndex","endIndex","viewport","Math","floor","ceil","virtualTotalHeight","handleSort","order","sortedData","direction","sort","a","b","va","vb","isAllSelected","toggleRow","next","has","delete","add","toggleAll","map","_","selected","from","Boolean","handleRowClick","handleAction","action","hasActions","fixedOffsets","leftAcc","c","side","fixed","left","width","rightAcc","right","cellStyle","base","off","style","position","zIndex","renderRow","rowIndex","fr","tree","rowKeyVal","indent","isEditing","h","class","onClick","type","checked","onChange","col","colIdx","isFirstCol","showExpand","editing","editableActive","textAlign","align","undefined","display","onBlur","onKeyDown","name","formatter","whiteSpace","act","disabled","label","renderHeader","ref","el","minWidth","sortable","render","displayData","isEmpty","flatRows","renderVirtualBody","offsetTop","height","overflowY","onScroll","colSpan","slice","renderNormalBody","overflow"],"sources":["src/components/Table/table.css?tag=hb-table&encapsulation=shadow","src/components/Table/Table.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-table {\n position: relative;\n overflow: hidden;\n border-radius: var(--hb-border-radius-base);\n background-color: var(--hb-color-bg);\n}\n\n.hb-table--border {\n border: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table--border .hb-table__td,\n.hb-table--border .hb-table__table th {\n border-right: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table__wrapper {\n overflow-x: auto;\n}\n\n.hb-table__table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n table-layout: auto;\n}\n\n.hb-table__table th {\n background-color: var(--hb-table-header-bg);\n color: var(--hb-table-header-color);\n font-weight: 600;\n font-size: var(--hb-font-size-sm);\n padding: 10px 12px;\n text-align: left;\n border-bottom: 1px solid var(--hb-color-border-secondary);\n white-space: nowrap;\n user-select: none;\n}\n\n.hb-table__th-content {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.hb-table__th--sortable {\n cursor: pointer;\n}\n\n.hb-table__th--sortable:hover {\n background-color: var(--hb-color-fill-tertiary);\n}\n\n.hb-table__sort {\n display: inline-flex;\n flex-direction: column;\n line-height: 1;\n font-size: 10px;\n gap: 1px;\n}\n\n.hb-table__sort-icon {\n color: var(--hb-color-text-quaternary);\n transition: color var(--hb-transition-duration);\n}\n\n.hb-table__sort-icon--active {\n color: var(--hb-color-primary);\n}\n\n.hb-table__td {\n padding: 10px 12px;\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n border-bottom: 1px solid var(--hb-table-border-color);\n transition: background-color var(--hb-transition-duration);\n}\n\n.hb-table__row:hover .hb-table__td {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n.hb-table__row--striped .hb-table__td {\n background-color: var(--hb-table-stripe-bg);\n}\n\n.hb-table__row--current .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n.hb-table__empty {\n text-align: center;\n color: var(--hb-color-text-secondary);\n padding: var(--hb-spacing-xl) 0;\n}\n\n.hb-table__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 1;\n}\n\n.hb-table__loading-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid var(--hb-color-border-secondary);\n border-top-color: var(--hb-color-primary);\n border-radius: 50%;\n animation: hb-spin 0.8s linear infinite;\n}\n\n/* ---- 尺寸 ---- */\n.hb-table--small .hb-table__table th,\n.hb-table--small .hb-table__td {\n padding: 6px 8px;\n font-size: var(--hb-font-size-xs);\n}\n\n.hb-table--large .hb-table__table th,\n.hb-table--large .hb-table__td {\n padding: 14px 16px;\n font-size: var(--hb-font-size-base);\n}\n\n/* ---- 行选择 ---- */\n.hb-table__selection {\n width: 48px;\n min-width: 48px;\n text-align: center;\n white-space: nowrap;\n}\n.hb-table__checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--hb-color-primary);\n vertical-align: middle;\n}\n.hb-table__selection .hb-table__checkbox {\n margin: 0;\n}\n.hb-table__row--selected .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n/* ---- 固定列(sticky) ---- */\n/* 固定列单元格需要不透明背景,避免横向滚动时底层内容透出 */\n.hb-table__cell--fixed-left,\n.hb-table__cell--fixed-right {\n position: sticky;\n z-index: 2;\n background-color: var(--hb-color-bg);\n}\n.hb-table__table th.hb-table__cell--fixed-left,\n.hb-table__table th.hb-table__cell--fixed-right {\n background-color: var(--hb-table-header-bg);\n}\n.hb-table__cell--fixed-right {\n box-shadow: -4px 0 8px rgba(0, 0, 0, 0.06);\n}\n.hb-table__cell--fixed-left:not(.hb-table__cell--fixed-right) {\n box-shadow: 4px 0 8px rgba(0, 0, 0, 0.06);\n}\n/* 固定列在选中行需保持选中背景 */\n.hb-table__row--selected .hb-table__cell--fixed-left,\n.hb-table__row--selected .hb-table__cell--fixed-right {\n background-color: var(--hb-color-primary-bg);\n}\n.hb-table__row:hover .hb-table__cell--fixed-left,\n.hb-table__row:hover .hb-table__cell--fixed-right {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n@keyframes hb-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* 行操作按钮(link 风格,类 Ant Design) */\n.hb-table__action {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font-size: var(--hb-font-size-sm, 14px);\n line-height: 1.5;\n color: var(--hb-color-primary, #1677ff);\n transition: opacity var(--hb-transition-duration, 0.2s);\n}\n.hb-table__action:hover {\n opacity: 0.8;\n}\n.hb-table__action:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n.hb-table__action--danger {\n color: var(--hb-color-danger, #f5222d);\n}\n.hb-table__action--danger:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n}\n.hb-table__action + .hb-table__action {\n margin-left: var(--hb-spacing-sm, 12px);\n}\n\n/* ---- 虚拟滚动 ---- */\n.hb-table--virtual {\n overflow: hidden;\n}\n.hb-table__virtual-wrapper {\n display: flex;\n flex-direction: column;\n}\n.hb-table__virtual-viewport {\n overflow-y: auto;\n overflow-x: auto;\n position: relative;\n}\n.hb-table__virtual-spacer {\n position: relative;\n width: 100%;\n}\n.hb-table__table--virtual {\n width: 100%;\n table-layout: fixed;\n}\n.hb-table__table--virtual tbody {\n /* 可见窗口的行紧跟在 offset 占位行之后,撑高容器由 spacer 负责 */\n position: relative;\n}\n\n/* ---- 树形数据(可展开行) ---- */\n.hb-table__expand {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--hb-color-text-secondary, #595959);\n font-size: 10px;\n line-height: 1;\n vertical-align: middle;\n transition: color var(--hb-transition-duration, 0.2s);\n flex-shrink: 0;\n}\n.hb-table__expand:hover {\n color: var(--hb-color-primary, #1677ff);\n}\n.hb-table__row--tree .hb-table__td {\n /* 树形行第一列内容随缩进对齐 */\n white-space: nowrap;\n}\n\n/* ---- 行内编辑 ---- */\n.hb-table__cell--editable {\n cursor: text;\n}\n.hb-table__cell--editable:hover {\n background-color: var(--hb-color-fill-tertiary, #f5f5f5);\n}\n.hb-table__edit-input {\n width: 100%;\n min-width: 60px;\n box-sizing: border-box;\n padding: 2px 6px;\n font-size: var(--hb-font-size-sm, 14px);\n color: var(--hb-color-text, #262626);\n border: 1px solid var(--hb-color-primary, #1677ff);\n border-radius: var(--hb-border-radius-base, 4px);\n outline: none;\n background-color: var(--hb-color-bg, #fff);\n}\n\n/* ============================================================\n * 响应式(移动端):\n * - 小屏强制最小宽度,避免列被挤压到不可读(保留横向滚动)\n * - sticky 表头在滚动时保持可见\n * ============================================================ */\n@media (max-width: 575.98px) {\n .hb-table__table {\n /* 最小宽度保证列内容可读,超出靠 wrapper 横向滚动 */\n min-width: 480px;\n }\n\n /* sticky 表头:横向滚动时表头跟随 */\n .hb-table__table thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--hb-color-bg-container, #fafafa);\n }\n}\n","import { Component, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface TableColumn {\n /** 列字段名 */\n prop: string;\n /** 列标题 */\n label: string;\n /** 列宽 */\n width?: string;\n /** 最小列宽 */\n minWidth?: string;\n /** 是否可排序 */\n sortable?: boolean;\n /** 对齐方式 */\n align?: 'left' | 'center' | 'right';\n /** 固定列:left / right / true(等同 left) */\n fixed?: 'left' | 'right' | boolean;\n /** 单元格文本格式化(框架无关,返回纯文本字符串) */\n formatter?: (row: Record<string, any>, index: number) => string;\n /** 该列是否可(行内)编辑;需同时开启 Table.editable 才生效 */\n editable?: boolean;\n}\n\n/**\n * 行操作按钮配置(框架无关)。\n * 由 Table 自身渲染按钮(在 shadow DOM 内),点击派发 hbAction 事件,\n * 消费方据此执行编辑/删除等逻辑——无需往每行塞框架专属元素,绕开「slot 跨行共享」限制。\n */\nexport interface TableAction {\n /** 操作标识,回传到 hbAction.detail.action */\n key: string;\n /** 按钮文案 */\n label: string;\n /** 按钮样式:default 主色文字 / danger 危险色 */\n type?: 'default' | 'primary' | 'danger';\n /** 是否禁用(按行判断) */\n disabled?: (row: Record<string, any>, index: number) => boolean;\n}\n\nexport type SortDirection = 'ascending' | 'descending' | null;\n\n/**\n * 树形数据配置。\n * `children` 指定子节点在每行数据中的字段名(默认 'children'),\n * 行存在该字段(非空数组)时渲染展开箭头,可递归展开后代。\n */\nexport interface TableTreeProps {\n children?: string;\n}\n\n/**\n * 拍平后的可见行:保留原始 row + 嵌套层级 + 唯一 key,\n * 供 render 一次性 map 成 <tr>(仅含已展开链路上的后代)。\n */\ninterface FlatRow {\n row: Record<string, any>;\n level: number;\n key: string | number;\n /** 该行是否有非空 children(决定是否渲染展开箭头) */\n hasChildren: boolean;\n /** 该行在父层数组中的索引(用于 rowKey 缺省回退与稳定 key) */\n index: number;\n}\n\ninterface FixedOffset {\n side?: 'left' | 'right';\n left?: string;\n right?: string;\n}\n\n/**\n * Table 表格组件\n * 用于展示多条结构类似的数据,可对数据进行排序、筛选、选择等操作\n */\n@Component({\n tag: 'hb-table',\n styleUrl: 'table.css',\n shadow: true,\n})\nexport class Table {\n /** 数据源 */\n @Prop() data: Record<string, any>[] = [];\n\n /** 列配置 */\n @Prop() columns: TableColumn[] = [];\n\n /** 是否带斑马纹 */\n @Prop() stripe: boolean = false;\n\n /** 是否带边框 */\n @Prop() border: boolean = false;\n\n /** 表格尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否显示加载状态 */\n @Prop() loading: boolean = false;\n\n /** 行数据的 Key */\n @Prop() rowKey: string = '';\n\n /** 空数据文案 */\n @Prop() emptyText: string = '暂无数据';\n\n /** 最大高度(超出固定表头) */\n @Prop() maxHeight?: string;\n\n /** 是否高亮当前行 */\n @Prop() highlightCurrentRow: boolean = false;\n\n /** 是否开启行选择(显示 checkbox 列) */\n @Prop() selectable: boolean = false;\n\n /** 行操作配置;非空时自动在末尾渲染「操作」列 */\n @Prop() actions: TableAction[] = [];\n\n /** 是否开启虚拟滚动(大数据量场景,默认关闭,向后兼容) */\n @Prop() virtualScroll: boolean = false;\n\n /** 虚拟滚动每行预估高度(px),用于计算撑高容器与可见窗口 */\n @Prop() itemHeight: number = 48;\n\n /** 虚拟滚动视口高度(px),超过此高度出现滚动条 */\n @Prop() virtualScrollHeight: number = 400;\n\n /**\n * 树形数据配置:传入后启用「可展开行」模式。\n * data 行含 `children` 字段(字段名可经此配置覆盖)时渲染展开箭头。\n * 默认 undefined —— 不启用树形。\n */\n @Prop() treeProps?: TableTreeProps;\n\n /** 是否开启行内编辑模式(默认关闭)。需列配置 column.editable=true 才对该列生效 */\n @Prop() editable: boolean = false;\n\n @State() sortProp: string = '';\n @State() sortDirection: SortDirection = null;\n @State() currentRow: number = -1;\n @State() selectedRows: Set<number> = new Set();\n /** 虚拟滚动:当前滚动位置(px),驱动可见窗口计算 */\n @State() scrollTop: number = 0;\n\n /** 树形模式:已展开行的 key 列表 */\n @State() expandedRowKeys: Array<string | number> = [];\n\n /** 行内编辑:当前正在编辑的单元格 { key, prop },null 表示无 */\n @State() editingCell: { rowKey: string | number; prop: string } | null = null;\n\n /** 排序变化事件 */\n @Event() hbSortChange: EventEmitter<{ prop: string; order: SortDirection }>;\n\n /** 行点击事件 */\n @Event() hbRowClick: EventEmitter<{ row: Record<string, any>; index: number }>;\n\n /** 选择变化事件 */\n @Event() hbSelectionChange: EventEmitter<Record<string, any>[]>;\n\n /** 行操作点击事件 */\n @Event() hbAction: EventEmitter<{ row: Record<string, any>; index: number; action: string }>;\n\n /** 树形行展开/收起事件 */\n @Event() hbExpandChange: EventEmitter<{ expanded: boolean; row: Record<string, any> }>;\n\n /** 行内编辑提交事件 */\n @Event() hbCellChange: EventEmitter<{ row: Record<string, any>; prop: string; value: any }>;\n\n @Watch('data')\n handleDataChange() {\n this.selectedRows = new Set();\n this.emitSelection();\n }\n\n /** 树形模式是否启用(显式传入 treeProps 即启用) */\n private get isTreeMode(): boolean {\n return !!this.treeProps;\n }\n\n /** 子节点字段名(treeProps.children 缺省回退 'children') */\n private get childrenField(): string {\n return (this.treeProps && this.treeProps.children) || 'children';\n }\n\n /**\n * 把树拍平成可见行列表:仅保留「祖先链路全部已展开」的后代。\n * @param list 当前层级的数组\n * @param level 当前层级(根 = 0)\n * @param parentKeyPath 父级 key 路径,用于构造深层稳定 key(避免不同分支同 index 撞 key)\n */\n private flattenTree(list: Record<string, any>[], level: number = 0, parentKeyPath: string = ''): FlatRow[] {\n const field = this.childrenField;\n const result: FlatRow[] = [];\n list.forEach((row, i) => {\n const keyPath = parentKeyPath ? `${parentKeyPath}.${i}` : `${i}`;\n const key = this.rowKey ? row[this.rowKey] : keyPath;\n const kids = row[field];\n const hasKids = Array.isArray(kids) && kids.length > 0;\n result.push({ row, level, key, hasChildren: hasKids, index: i });\n // 仅当该行已展开时,递归拍入其 children\n if (hasKids && this.expandedRowKeys.indexOf(key) !== -1) {\n result.push(...this.flattenTree(kids as Record<string, any>[], level + 1, keyPath));\n }\n });\n return result;\n }\n\n /** 树形展开/收起切换 */\n private toggleExpand = (row: Record<string, any>, key: string | number) => {\n const idx = this.expandedRowKeys.indexOf(key);\n const expanded = idx === -1;\n this.expandedRowKeys = expanded ? [...this.expandedRowKeys, key] : this.expandedRowKeys.filter((k) => k !== key);\n this.hbExpandChange.emit({ expanded, row });\n };\n\n /** 行内编辑:进入编辑态 */\n private startEdit = (e: Event, key: string | number, prop: string) => {\n e.stopPropagation();\n if (!this.editable) return;\n this.editingCell = { rowKey: key, prop };\n };\n\n /** 行内编辑:提交(回车 / 失焦 / Change) */\n private commitEdit = (e: Event, row: Record<string, any>, prop: string) => {\n const input = e.target as HTMLInputElement;\n const value = input.value;\n // 就地更新(简单可用版):修改 row[prop] 后强制重渲染\n row[prop] = value;\n this.editingCell = null;\n this.hbCellChange.emit({ row, prop, value });\n };\n\n /** 行内编辑:回车提交 / Esc 取消 */\n private onEditKeydown = (e: KeyboardEvent, row: Record<string, any>, prop: string) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.commitEdit(e, row, prop);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.editingCell = null;\n }\n };\n\n private allCheckboxRef?: HTMLInputElement;\n\n componentDidRender() {\n // indeterminate 不是可反射的 HTML 属性,必须通过 DOM 属性设置\n if (this.allCheckboxRef) {\n this.allCheckboxRef.indeterminate = this.isIndeterminate;\n }\n }\n\n /** 虚拟滚动上下缓冲行数 */\n private readonly virtualBuffer = 5;\n\n /** 虚拟滚动:滚动事件回调,更新 scrollTop 触发可见窗口重算 */\n private handleVirtualScroll = (e: Event) => {\n const target = e.target as HTMLElement;\n this.scrollTop = target.scrollTop;\n };\n\n /** 虚拟滚动:计算可见窗口 [startIndex, endIndex) */\n private get visibleRange(): { startIndex: number; endIndex: number } {\n const total = this.data.length;\n if (total === 0) return { startIndex: 0, endIndex: 0 };\n\n const itemHeight = this.itemHeight > 0 ? this.itemHeight : 1;\n const viewport = this.virtualScrollHeight;\n\n let startIndex = Math.floor(this.scrollTop / itemHeight) - this.virtualBuffer;\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.ceil((this.scrollTop + viewport) / itemHeight) + this.virtualBuffer;\n if (endIndex > total) endIndex = total;\n\n return { startIndex, endIndex };\n }\n\n /** 虚拟滚动:撑高容器总高度 */\n private get virtualTotalHeight(): number {\n return this.data.length * (this.itemHeight > 0 ? this.itemHeight : 1);\n }\n\n private handleSort = (prop: string) => {\n if (this.sortProp === prop) {\n this.sortDirection =\n this.sortDirection === 'ascending' ? 'descending' : this.sortDirection === 'descending' ? null : 'ascending';\n } else {\n this.sortProp = prop;\n this.sortDirection = 'ascending';\n }\n this.hbSortChange.emit({ prop, order: this.sortDirection });\n };\n\n private get sortedData(): Record<string, any>[] {\n if (!this.sortProp || !this.sortDirection) return this.data;\n const direction = this.sortDirection === 'ascending' ? 1 : -1;\n return [...this.data].sort((a, b) => {\n const va = a[this.sortProp];\n const vb = b[this.sortProp];\n if (va < vb) return -1 * direction;\n if (va > vb) return 1 * direction;\n return 0;\n });\n };\n\n private get isAllSelected(): boolean {\n return this.data.length > 0 && this.selectedRows.size === this.data.length;\n }\n\n private get isIndeterminate(): boolean {\n return this.selectedRows.size > 0 && this.selectedRows.size < this.data.length;\n }\n\n private toggleRow = (index: number, e: Event) => {\n e.stopPropagation();\n const next = new Set(this.selectedRows);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n this.selectedRows = next;\n this.emitSelection();\n };\n\n private toggleAll = () => {\n if (this.isAllSelected) {\n this.selectedRows = new Set();\n } else {\n this.selectedRows = new Set(this.data.map((_, i) => i));\n }\n this.emitSelection();\n };\n\n private emitSelection() {\n const selected = Array.from(this.selectedRows)\n .sort((a, b) => a - b)\n .map((i) => this.data[i])\n .filter(Boolean);\n this.hbSelectionChange.emit(selected);\n }\n\n private handleRowClick = (row: Record<string, any>, index: number) => {\n this.currentRow = index;\n this.hbRowClick.emit({ row, index });\n };\n\n private handleAction = (row: Record<string, any>, index: number, action: string) => {\n this.hbAction.emit({ row, index, action });\n };\n\n private get hasActions(): boolean {\n return !!this.actions && this.actions.length > 0;\n }\n\n /** 计算固定列的 sticky 偏移(左侧/右侧累计宽度) */\n private get fixedOffsets(): Record<string, FixedOffset> {\n const result: Record<string, FixedOffset> = {};\n let leftAcc = '0px';\n for (const c of this.columns) {\n const side = c.fixed === true ? 'left' : c.fixed;\n if (side === 'left') {\n result[c.prop] = { side: 'left', left: leftAcc };\n leftAcc = `calc(${leftAcc} + ${c.width || '0px'})`;\n }\n }\n let rightAcc = '0px';\n for (let i = this.columns.length - 1; i >= 0; i--) {\n const c = this.columns[i];\n if (c.fixed === 'right') {\n result[c.prop] = { side: 'right', right: rightAcc };\n rightAcc = `calc(${rightAcc} + ${c.width || '0px'})`;\n }\n }\n return result;\n }\n\n private cellStyle(prop: string, base?: Record<string, string>): Record<string, string> {\n const off = this.fixedOffsets[prop];\n const style: Record<string, string> = { ...(base || {}) };\n if (off?.side === 'left') {\n style.position = 'sticky';\n style.left = off.left as string;\n style.zIndex = '2';\n } else if (off?.side === 'right') {\n style.position = 'sticky';\n style.right = off.right as string;\n style.zIndex = '2';\n }\n return style;\n }\n\n /**\n * 渲染单行(普通 + 虚拟滚动 + 树形 共用)。\n * - 普通模式:rowIndex 为在 sortedData 中的全局索引。\n * - 树形模式:fr.level 决定缩进,第一列渲染展开箭头,key 取 fr.key。\n * fr 为可选;未传时按普通模式渲染。\n */\n private renderRow(row: Record<string, any>, rowIndex: number, fr?: FlatRow) {\n const tree = !!fr;\n const level = fr ? fr.level : 0;\n const rowKeyVal = fr ? fr.key : this.rowKey ? row[this.rowKey] : rowIndex;\n const indent = level * 16;\n\n const isEditing = (prop: string) => !!this.editingCell && this.editingCell.rowKey === rowKeyVal && this.editingCell.prop === prop;\n\n return (\n <tr\n key={rowKeyVal}\n class={{\n 'hb-table__row': true,\n 'hb-table__row--striped': this.stripe && rowIndex % 2 === 1,\n 'hb-table__row--current': this.highlightCurrentRow && rowIndex === this.currentRow,\n 'hb-table__row--selected': this.selectedRows.has(rowIndex),\n 'hb-table__row--tree': tree,\n }}\n onClick={() => this.handleRowClick(row, rowIndex)}\n >\n {this.selectable && (\n <td class=\"hb-table__selection\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n class=\"hb-table__checkbox\"\n checked={this.selectedRows.has(rowIndex)}\n onChange={(e) => this.toggleRow(rowIndex, e)}\n />\n </td>\n )}\n {this.columns.map((col, colIdx) => {\n const off = this.fixedOffsets[col.prop];\n // 树形模式:第一列加缩进 + 展开箭头\n const isFirstCol = colIdx === 0;\n const showExpand = tree && isFirstCol && fr!.hasChildren;\n const expanded = showExpand && this.expandedRowKeys.indexOf(rowKeyVal) !== -1;\n const editing = this.editable && !!col.editable && isEditing(col.prop);\n const editableActive = this.editable && !!col.editable;\n\n return (\n <td\n key={col.prop}\n style={this.cellStyle(col.prop, { textAlign: col.align || 'left' })}\n class={{\n 'hb-table__td': true,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n 'hb-table__cell--editable': editableActive,\n }}\n onClick={editableActive ? (e) => this.startEdit(e, rowKeyVal, col.prop) : undefined}\n >\n {tree && isFirstCol && (\n <span class=\"hb-table__indent\" style={{ display: 'inline-block', width: `${indent}px` }} aria-hidden=\"true\" />\n )}\n {showExpand && (\n <button\n type=\"button\"\n class={{ 'hb-table__expand': true, 'hb-table__expand--expanded': expanded }}\n aria-label={expanded ? '收起' : '展开'}\n onClick={(e) => {\n e.stopPropagation();\n this.toggleExpand(row, rowKeyVal);\n }}\n >\n {expanded ? '▼' : '▶'}\n </button>\n )}\n {showExpand === false && tree && isFirstCol && (\n <span class=\"hb-table__expand-placeholder\" style={{ display: 'inline-block', width: '16px' }} aria-hidden=\"true\" />\n )}\n {editing ? (\n <input\n class=\"hb-table__edit-input\"\n type=\"text\"\n value={row[col.prop] ?? ''}\n onBlur={(e) => this.commitEdit(e, row, col.prop)}\n onKeyDown={(e) => this.onEditKeydown(e, row, col.prop)}\n />\n ) : (\n <slot name={`cell-${col.prop}`}>{col.formatter ? col.formatter(row, rowIndex) : row[col.prop] ?? ''}</slot>\n )}\n </td>\n );\n })}\n {this.hasActions && (\n <td class=\"hb-table__td--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }} onClick={(e) => e.stopPropagation()}>\n {this.actions.map((act) => (\n <button\n type=\"button\"\n class={{\n 'hb-table__action': true,\n 'hb-table__action--primary': act.type === 'primary',\n 'hb-table__action--danger': act.type === 'danger',\n }}\n disabled={act.disabled ? act.disabled(row, rowIndex) : false}\n onClick={() => this.handleAction(row, rowIndex, act.key)}\n >\n {act.label}\n </button>\n ))}\n </td>\n )}\n </tr>\n );\n }\n\n /** 渲染表头(普通 + 虚拟滚动共用,表头始终固定不随滚) */\n private renderHeader() {\n return (\n <thead>\n <tr>\n {this.selectable && (\n <th class=\"hb-table__selection\">\n <input\n type=\"checkbox\"\n class=\"hb-table__checkbox\"\n checked={this.isAllSelected}\n ref={(el) => {\n this.allCheckboxRef = el as HTMLInputElement;\n }}\n onChange={this.toggleAll}\n />\n </th>\n )}\n {this.columns.map((col) => {\n const off = this.fixedOffsets[col.prop];\n return (\n <th\n key={col.prop}\n style={this.cellStyle(col.prop, {\n width: col.width,\n minWidth: col.minWidth,\n textAlign: col.align || 'left',\n })}\n class={{\n 'hb-table__th--sortable': col.sortable,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n }}\n onClick={col.sortable ? () => this.handleSort(col.prop) : undefined}\n >\n <div class=\"hb-table__th-content\">\n <span>{col.label}</span>\n {col.sortable && (\n <span class=\"hb-table__sort\">\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'ascending' }}>▲</span>\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'descending' }}>▼</span>\n </span>\n )}\n </div>\n </th>\n );\n })}\n {this.hasActions && (\n <th class=\"hb-table__th--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }}>\n 操作\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n render() {\n const displayData = this.sortedData;\n const isEmpty = displayData.length === 0;\n\n // 树形模式:把可见树拍平成带 level 的行列表(仅含已展开链路上的后代)\n const flatRows: FlatRow[] = this.isTreeMode ? this.flattenTree(displayData) : [];\n\n // 虚拟滚动:固定高度滚动视口 + 撑高容器 + 仅渲染可见窗口行(绝对定位 offset)\n // 注意:树形 + 虚拟滚动组合较复杂,此处虚拟滚动沿用普通行渲染(不展开树),\n // 保留树形仅在普通模式下生效以降低风险。\n const renderVirtualBody = () => {\n const { startIndex, endIndex } = this.visibleRange;\n const offsetTop = startIndex * (this.itemHeight > 0 ? this.itemHeight : 1);\n return (\n <div\n class=\"hb-table__virtual-viewport\"\n style={{ height: `${this.virtualScrollHeight}px`, overflowY: 'auto' }}\n onScroll={this.handleVirtualScroll}\n >\n <div class=\"hb-table__virtual-spacer\" style={{ height: `${this.virtualTotalHeight}px`, position: 'relative' }}>\n <table class=\"hb-table__table hb-table__table--virtual\">\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : (\n <tr style={{ height: `${offsetTop}px` }} aria-hidden=\"true\" />\n )}\n {displayData.slice(startIndex, endIndex).map((row, i) => this.renderRow(row, startIndex + i))}\n </tbody>\n </table>\n </div>\n </div>\n );\n };\n\n // 普通模式:树形启用时按拍平列表渲染(带 level 缩进 + 展开箭头),否则原样按行渲染\n const renderNormalBody = () => (\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : this.isTreeMode ? (\n flatRows.map((fr, i) => this.renderRow(fr.row, i, fr))\n ) : (\n displayData.map((row, rowIndex) => this.renderRow(row, rowIndex))\n )}\n </tbody>\n );\n\n return (\n <div class={{ 'hb-table': true, [`hb-table--${this.size}`]: true, 'hb-table--border': this.border, 'hb-table--virtual': this.virtualScroll }}>\n {this.loading && (\n <div class=\"hb-table__loading\">\n <div class=\"hb-table__loading-spinner\"></div>\n </div>\n )}\n {this.virtualScroll ? (\n <div class=\"hb-table__virtual-wrapper\">\n <table class=\"hb-table__table\">\n {this.renderHeader()}\n </table>\n {renderVirtualBody()}\n </div>\n ) : (\n <div class=\"hb-table__wrapper\" style={this.maxHeight ? { maxHeight: this.maxHeight, overflow: 'auto' } : undefined}>\n <table class=\"hb-table__table\">\n {this.renderHeader()}\n {renderNormalBody()}\n </table>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["treeCss","HbTreeStyle0","Tree","data","expandedKeys","selectedKeys","checkable","checkedKeys","defaultExpandAll","showLine","internalExpanded","internalSelected","internalChecked","hbSelect","hbExpand","hbCheck","componentWillLoad","this","all","collectExpandableKeys","handleDataChange","current","getExpandedKeys","merged","deduped","Array","from","Set","handleExpandedKeysChange","handleSelectedKeysChange","handleCheckedKeysChange","nodes","out","node","children","length","push","key","getSelectedKeys","getCheckedKeys","isExpanded","includes","isSelected","isChecked","handleToggleExpand","e","stopPropagation","disabled","idx","indexOf","splice","emit","handleSelect","handleCheck","wasChecked","next","removeDescendantKeys","delete","add","collectCheckableDescendantKeys","reconcileAncestors","result","child","parents","findAncestors","parent","checkableChildren","filter","c","allChecked","every","has","acc","found","computeIndeterminateKeys","checked","walk","hasCheckedDescendant","childState","root","renderNode","level","indeterminateKeys","hasChildren","expanded","selected","indeterminate","h","class","role","String","undefined","tabindex","style","paddingLeft","onClick","title","map","render"],"sources":["src/components/Tree/tree.css?tag=hb-tree&encapsulation=shadow","src/components/Tree/Tree.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-tree {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: var(--hb-font-size-base);\n color: var(--hb-color-text);\n background-color: var(--hb-color-bg-container);\n box-sizing: border-box;\n}\n\n.hb-tree__children {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.hb-tree__node {\n list-style: none;\n white-space: nowrap;\n}\n\n.hb-tree__node-content {\n display: flex;\n align-items: center;\n gap: var(--hb-spacing-xxs);\n height: 28px;\n padding-right: var(--hb-spacing-xs);\n border-radius: var(--hb-border-radius-sm);\n cursor: pointer;\n transition: background-color var(--hb-transition-duration, 0.2s) var(--hb-transition-function, ease);\n box-sizing: border-box;\n}\n\n.hb-tree__node-content:hover {\n background-color: var(--hb-color-fill-tertiary);\n}\n\n.hb-tree__node-content--selected {\n background-color: var(--hb-color-primary-bg);\n}\n\n.hb-tree__node--disabled > .hb-tree__node-content {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.hb-tree__node--disabled > .hb-tree__node-content:hover {\n background-color: transparent;\n}\n\n.hb-tree__switcher {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n color: var(--hb-color-text-tertiary);\n}\n\n.hb-tree__arrow {\n font-size: 10px;\n display: inline-block;\n transition: transform var(--hb-transition-duration, 0.2s);\n}\n\n.hb-tree__arrow--expanded {\n transform: rotate(90deg);\n}\n\n.hb-tree--show-line .hb-tree__switcher {\n color: var(--hb-color-border);\n}\n\n.hb-tree__line-dot {\n width: 6px;\n height: 6px;\n border-left: 1px solid var(--hb-color-border);\n border-bottom: 1px solid var(--hb-color-border);\n border-bottom-left-radius: var(--hb-border-radius-sm);\n}\n\n.hb-tree__checkbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: 1px solid var(--hb-color-border);\n border-radius: var(--hb-border-radius-xs, 2px);\n background-color: var(--hb-color-bg-container);\n color: #fff;\n font-size: 11px;\n line-height: 1;\n flex-shrink: 0;\n transition: all var(--hb-transition-duration, 0.2s);\n}\n\n.hb-tree__checkbox:hover:not(.hb-tree__checkbox--disabled) {\n border-color: var(--hb-color-primary);\n}\n\n.hb-tree__checkbox--checked {\n background-color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n}\n\n.hb-tree__checkbox--indeterminate {\n background-color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n}\n\n.hb-tree__checkbox--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.hb-tree__title {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n user-select: none;\n}\n\n.hb-tree__node-content--selected .hb-tree__title {\n color: var(--hb-color-primary);\n font-weight: 500;\n}\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\n\nexport interface TreeNode {\n /** 节点唯一标识 */\n key: string;\n /** 节点标题 */\n title: string;\n /** 子节点 */\n children?: TreeNode[];\n /** 是否禁用 */\n disabled?: boolean;\n}\n\n/**\n * Tree 树形组件\n * 文件夹、组织架构、分类导航等层级结构的展示与选择\n */\n@Component({\n tag: 'hb-tree',\n styleUrl: 'tree.css',\n shadow: true,\n})\nexport class Tree {\n @Element() el: HTMLElement;\n\n /**\n * 可选项数据源(递归树结构)\n */\n @Prop() data: TreeNode[] = [];\n\n /**\n * (受控)展开的节点 key 集合\n */\n @Prop({ mutable: true }) expandedKeys: string[] = [];\n\n /**\n * (受控)选中的节点 key 集合\n */\n @Prop({ mutable: true }) selectedKeys: string[] = [];\n\n /**\n * 是否显示 checkbox 复选框\n * @default false\n */\n @Prop() checkable: boolean = false;\n\n /**\n * (受控)勾选的节点 key 集合\n */\n @Prop({ mutable: true }) checkedKeys: string[] = [];\n\n /**\n * 是否默认展开全部节点\n * @default false\n */\n @Prop() defaultExpandAll: boolean = false;\n\n /**\n * 是否显示连接线\n * @default false\n */\n @Prop() showLine: boolean = false;\n\n @State() internalExpanded: string[] | null = null;\n @State() internalSelected: string[] | null = null;\n @State() internalChecked: string[] | null = null;\n\n /**\n * 选中节点变化事件(detail: 选中节点 key 数组)\n */\n @Event() hbSelect: EventEmitter<string[]>;\n\n /**\n * 展开节点变化事件(detail: 展开节点 key 数组)\n */\n @Event() hbExpand: EventEmitter<string[]>;\n\n /**\n * 勾选节点变化事件(detail: 勾选节点 key 数组)\n */\n @Event() hbCheck: EventEmitter<string[]>;\n\n componentWillLoad() {\n if (this.defaultExpandAll) {\n const all: string[] = [];\n this.collectExpandableKeys(this.data, all);\n this.internalExpanded = all;\n }\n }\n\n /**\n * data 变化时,若 defaultExpandAll=true,把所有含 children 的节点 key\n * 合并进 expandedKeys(保留用户已手动展开的节点,不收起任何已展开项)。\n * 解决「先 mount 再赋 data」时 componentWillLoad 基于空数据计算导致不展开的问题。\n */\n @Watch('data')\n handleDataChange() {\n if (!this.defaultExpandAll) {\n return;\n }\n const current = this.getExpandedKeys();\n const merged = [...current];\n this.collectExpandableKeys(this.data, merged);\n // 去重\n const deduped = Array.from(new Set(merged));\n this.internalExpanded = deduped;\n this.expandedKeys = deduped;\n }\n\n @Watch('expandedKeys')\n handleExpandedKeysChange() {\n this.internalExpanded = null;\n }\n\n @Watch('selectedKeys')\n handleSelectedKeysChange() {\n this.internalSelected = null;\n }\n\n @Watch('checkedKeys')\n handleCheckedKeysChange() {\n this.internalChecked = null;\n }\n\n private collectExpandableKeys(nodes: TreeNode[], out: string[]) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n out.push(node.key);\n this.collectExpandableKeys(node.children, out);\n }\n }\n }\n\n private getExpandedKeys(): string[] {\n return this.internalExpanded !== null ? this.internalExpanded : this.expandedKeys;\n }\n\n private getSelectedKeys(): string[] {\n return this.internalSelected !== null ? this.internalSelected : this.selectedKeys;\n }\n\n private getCheckedKeys(): string[] {\n return this.internalChecked !== null ? this.internalChecked : this.checkedKeys;\n }\n\n private isExpanded = (key: string) => this.getExpandedKeys().includes(key);\n private isSelected = (key: string) => this.getSelectedKeys().includes(key);\n private isChecked = (key: string) => this.getCheckedKeys().includes(key);\n\n private handleToggleExpand = (node: TreeNode, e: Event) => {\n e.stopPropagation();\n if (node.disabled) return;\n const current = [...this.getExpandedKeys()];\n const idx = current.indexOf(node.key);\n if (idx >= 0) {\n current.splice(idx, 1);\n } else {\n current.push(node.key);\n }\n this.internalExpanded = current;\n this.expandedKeys = current;\n this.hbExpand.emit(current);\n };\n\n private handleSelect = (node: TreeNode) => {\n if (node.disabled) return;\n const current = [...this.getSelectedKeys()];\n const idx = current.indexOf(node.key);\n if (idx >= 0) {\n current.splice(idx, 1);\n } else {\n current.push(node.key);\n }\n this.internalSelected = current;\n this.selectedKeys = current;\n this.hbSelect.emit(current);\n };\n\n private handleCheck = (node: TreeNode, e: Event) => {\n e.stopPropagation();\n if (node.disabled) return;\n const current = [...this.getCheckedKeys()];\n const wasChecked = current.includes(node.key);\n\n // 计算本次操作应进入/移出 checkedKeys 的所有 key 集合(含级联)。\n // 不可变:始终基于副本计算,绝不原地修改 current。\n const next = new Set(current);\n if (wasChecked) {\n // 取消:取消自身 + 取消所有后代(含禁用后代,因为它们当时是被父级带选的)。\n this.removeDescendantKeys(node, next);\n next.delete(node.key);\n } else {\n // 勾选:勾选自身 + 勾选所有非禁用后代。\n next.add(node.key);\n this.collectCheckableDescendantKeys(node, next);\n }\n\n // 父子联动自底向上修正祖先:所有非禁用子节点全选 → 父加入 checkedKeys;\n // 子节点部分选/全未选 → 父移出 checkedKeys(部分选体现为 indeterminate,由 detail 暴露)。\n this.reconcileAncestors(node, next);\n\n const result = Array.from(next);\n this.internalChecked = result;\n this.checkedKeys = result;\n this.hbCheck.emit(result);\n };\n\n /**\n * 从集合中移除某节点所有后代 key(含禁用项),用于取消父级时级联取消。\n * 不可变:仅修改传入的 Set 副本,不修改树本身。\n */\n private removeDescendantKeys(node: TreeNode, out: Set<string>) {\n if (!node.children) return;\n for (const child of node.children) {\n out.delete(child.key);\n this.removeDescendantKeys(child, out);\n }\n }\n\n /**\n * 收集某节点所有「可勾选(非禁用)」后代 key,用于勾选父级时级联勾选。\n * 注意:禁用子节点本身不可手动勾选,但若其下还有非禁用后代,仍应被级联勾选。\n */\n private collectCheckableDescendantKeys(node: TreeNode, out: Set<string>) {\n if (!node.children) return;\n for (const child of node.children) {\n if (!child.disabled) {\n out.add(child.key);\n }\n // 无论 child 是否禁用,继续向下寻找可勾选后代。\n this.collectCheckableDescendantKeys(child, out);\n }\n }\n\n /**\n * 自底向上修正 checkedKeys 中某节点的所有祖先勾选状态。\n * 规则:一个祖先节点,当且仅当其所有「非禁用子节点」均被勾选时,自身才被勾选;\n * 否则移出 checkedKeys(部分选情况由 indeterminate 集合在渲染层暴露,不进入 checkedKeys)。\n */\n private reconcileAncestors(node: TreeNode, next: Set<string>) {\n const parents = this.findAncestors(this.data, node.key, []);\n // parents 为从直接父到根的数组;逐层判断。\n for (const parent of parents) {\n if (parent.disabled || !parent.children || parent.children.length === 0) continue;\n const checkableChildren = parent.children.filter((c) => !c.disabled);\n if (checkableChildren.length === 0) continue;\n const allChecked = checkableChildren.every((c) => next.has(c.key));\n if (allChecked) {\n next.add(parent.key);\n } else {\n next.delete(parent.key);\n }\n }\n }\n\n /**\n * 递归查找某 key 的祖先链(不含自身),返回从直接父到根的数组。\n * 找不到返回空数组(key 为根节点或不存在时)。\n */\n private findAncestors(nodes: TreeNode[], key: string, acc: TreeNode[]): TreeNode[] | null {\n for (const node of nodes) {\n if (node.key === key) {\n return acc;\n }\n if (node.children && node.children.length > 0) {\n const found = this.findAncestors(node.children, key, [node, ...acc]);\n if (found) return found;\n }\n }\n return null;\n }\n\n /**\n * 计算当前 checkedKeys 下处于「部分选中(indeterminate)」的节点 key 集合。\n * 一个节点为 indeterminate 当:其本身不在 checkedKeys,但其下(递归)存在被勾选的后代。\n * 用于渲染层暴露三方态(aria-checked=\"mixed\" + class)。\n */\n private computeIndeterminateKeys(): Set<string> {\n const checked = this.getCheckedKeys();\n const result = new Set<string>();\n const walk = (node: TreeNode): { hasCheckedDescendant: boolean } => {\n if (!node.children || node.children.length === 0) {\n return { hasCheckedDescendant: false };\n }\n let hasCheckedDescendant = false;\n for (const child of node.children) {\n const childState = walk(child);\n if (checked.includes(child.key) || childState.hasCheckedDescendant) {\n hasCheckedDescendant = true;\n }\n }\n // 节点本身未勾选,但有被勾选后代 → indeterminate\n if (hasCheckedDescendant && !checked.includes(node.key)) {\n result.add(node.key);\n }\n return { hasCheckedDescendant };\n };\n for (const root of this.data) {\n walk(root);\n }\n return result;\n }\n\n private renderNode = (node: TreeNode, level: number, indeterminateKeys: Set<string>): any => {\n const hasChildren = !!(node.children && node.children.length > 0);\n const expanded = this.isExpanded(node.key);\n const selected = this.isSelected(node.key);\n const checked = this.isChecked(node.key);\n const indeterminate = indeterminateKeys.has(node.key);\n const disabled = !!node.disabled;\n\n return (\n <li\n class={{\n 'hb-tree__node': true,\n 'hb-tree__node--disabled': disabled,\n }}\n role=\"treeitem\"\n aria-level={level + 1}\n aria-expanded={hasChildren ? String(expanded) : undefined}\n aria-selected={selected ? 'true' : 'false'}\n aria-checked={\n this.checkable\n ? indeterminate\n ? 'mixed'\n : checked\n ? 'true'\n : 'false'\n : undefined\n }\n aria-disabled={disabled ? 'true' : undefined}\n tabindex={selected ? 0 : -1}\n >\n <div\n class={{\n 'hb-tree__node-content': true,\n 'hb-tree__node-content--selected': selected,\n }}\n style={{ paddingLeft: `${level * 18 + 8}px` }}\n >\n <span class=\"hb-tree__switcher\" onClick={(e) => hasChildren && this.handleToggleExpand(node, e)}>\n {hasChildren ? (\n <span class={{ 'hb-tree__arrow': true, 'hb-tree__arrow--expanded': expanded }}>▶</span>\n ) : this.showLine ? (\n <span class=\"hb-tree__line-dot\" />\n ) : null}\n </span>\n\n {this.checkable && (\n <span\n class={{\n 'hb-tree__checkbox': true,\n 'hb-tree__checkbox--checked': checked,\n 'hb-tree__checkbox--indeterminate': indeterminate,\n 'hb-tree__checkbox--disabled': disabled,\n }}\n onClick={(e) => this.handleCheck(node, e)}\n >\n {checked ? '✓' : indeterminate ? '–' : ''}\n </span>\n )}\n\n <span class=\"hb-tree__title\" onClick={() => this.handleSelect(node)}>\n {node.title}\n </span>\n </div>\n\n {hasChildren && expanded && (\n <ul class=\"hb-tree__children\" role=\"group\">\n {node.children!.map((child) => this.renderNode(child, level + 1, indeterminateKeys))}\n </ul>\n )}\n </li>\n );\n };\n\n render() {\n const indeterminateKeys = this.checkable ? this.computeIndeterminateKeys() : new Set<string>();\n return (\n <ul class={{ 'hb-tree': true, 'hb-tree--show-line': this.showLine }} role=\"tree\">\n {this.data.map((node) => this.renderNode(node, 0, indeterminateKeys))}\n </ul>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAU,gyPAChB,MAAAC,EAAeD,E,MCqBFE,EAAI,M,wJAMPC,KAAmB,GAKFC,aAAyB,GAKzBC,aAAyB,GAM1CC,UAAqB,MAKJC,YAAwB,GAMzCC,iBAA4B,MAM5BC,SAAoB,MAEnBC,iBAAoC,KACpCC,iBAAoC,KACpCC,gBAAmC,KAKnCC,SAKAC,SAKAC,QAET,iBAAAC,GACE,GAAIC,KAAKT,iBAAkB,CACzB,MAAMU,EAAgB,GACtBD,KAAKE,sBAAsBF,KAAKd,KAAMe,GACtCD,KAAKP,iBAAmBQ,C,EAU5B,gBAAAE,GACE,IAAKH,KAAKT,iBAAkB,CAC1B,M,CAEF,MAAMa,EAAUJ,KAAKK,kBACrB,MAAMC,EAAS,IAAIF,GACnBJ,KAAKE,sBAAsBF,KAAKd,KAAMoB,GAEtC,MAAMC,EAAUC,MAAMC,KAAK,IAAIC,IAAIJ,IACnCN,KAAKP,iBAAmBc,EACxBP,KAAKb,aAAeoB,C,CAItB,wBAAAI,GACEX,KAAKP,iBAAmB,I,CAI1B,wBAAAmB,GACEZ,KAAKN,iBAAmB,I,CAI1B,uBAAAmB,GACEb,KAAKL,gBAAkB,I,CAGjB,qBAAAO,CAAsBY,EAAmBC,GAC/C,IAAK,MAAMC,KAAQF,EAAO,CACxB,GAAIE,EAAKC,UAAYD,EAAKC,SAASC,OAAS,EAAG,CAC7CH,EAAII,KAAKH,EAAKI,KACdpB,KAAKE,sBAAsBc,EAAKC,SAAUF,E,GAKxC,eAAAV,GACN,OAAOL,KAAKP,mBAAqB,KAAOO,KAAKP,iBAAmBO,KAAKb,Y,CAG/D,eAAAkC,GACN,OAAOrB,KAAKN,mBAAqB,KAAOM,KAAKN,iBAAmBM,KAAKZ,Y,CAG/D,cAAAkC,GACN,OAAOtB,KAAKL,kBAAoB,KAAOK,KAAKL,gBAAkBK,KAAKV,W,CAG7DiC,WAAcH,GAAgBpB,KAAKK,kBAAkBmB,SAASJ,GAC9DK,WAAcL,GAAgBpB,KAAKqB,kBAAkBG,SAASJ,GAC9DM,UAAaN,GAAgBpB,KAAKsB,iBAAiBE,SAASJ,GAE5DO,mBAAqB,CAACX,EAAgBY,KAC5CA,EAAEC,kBACF,GAAIb,EAAKc,SAAU,OACnB,MAAM1B,EAAU,IAAIJ,KAAKK,mBACzB,MAAM0B,EAAM3B,EAAQ4B,QAAQhB,EAAKI,KACjC,GAAIW,GAAO,EAAG,CACZ3B,EAAQ6B,OAAOF,EAAK,E,KACf,CACL3B,EAAQe,KAAKH,EAAKI,I,CAEpBpB,KAAKP,iBAAmBW,EACxBJ,KAAKb,aAAeiB,EACpBJ,KAAKH,SAASqC,KAAK9B,EAAQ,EAGrB+B,aAAgBnB,IACtB,GAAIA,EAAKc,SAAU,OACnB,MAAM1B,EAAU,IAAIJ,KAAKqB,mBACzB,MAAMU,EAAM3B,EAAQ4B,QAAQhB,EAAKI,KACjC,GAAIW,GAAO,EAAG,CACZ3B,EAAQ6B,OAAOF,EAAK,E,KACf,CACL3B,EAAQe,KAAKH,EAAKI,I,CAEpBpB,KAAKN,iBAAmBU,EACxBJ,KAAKZ,aAAegB,EACpBJ,KAAKJ,SAASsC,KAAK9B,EAAQ,EAGrBgC,YAAc,CAACpB,EAAgBY,KACrCA,EAAEC,kBACF,GAAIb,EAAKc,SAAU,OACnB,MAAM1B,EAAU,IAAIJ,KAAKsB,kBACzB,MAAMe,EAAajC,EAAQoB,SAASR,EAAKI,KAIzC,MAAMkB,EAAO,IAAI5B,IAAIN,GACrB,GAAIiC,EAAY,CAEdrC,KAAKuC,qBAAqBvB,EAAMsB,GAChCA,EAAKE,OAAOxB,EAAKI,I,KACZ,CAELkB,EAAKG,IAAIzB,EAAKI,KACdpB,KAAK0C,+BAA+B1B,EAAMsB,E,CAK5CtC,KAAK2C,mBAAmB3B,EAAMsB,GAE9B,MAAMM,EAASpC,MAAMC,KAAK6B,GAC1BtC,KAAKL,gBAAkBiD,EACvB5C,KAAKV,YAAcsD,EACnB5C,KAAKF,QAAQoC,KAAKU,EAAO,EAOnB,oBAAAL,CAAqBvB,EAAgBD,GAC3C,IAAKC,EAAKC,SAAU,OACpB,IAAK,MAAM4B,KAAS7B,EAAKC,SAAU,CACjCF,EAAIyB,OAAOK,EAAMzB,KACjBpB,KAAKuC,qBAAqBM,EAAO9B,E,EAQ7B,8BAAA2B,CAA+B1B,EAAgBD,GACrD,IAAKC,EAAKC,SAAU,OACpB,IAAK,MAAM4B,KAAS7B,EAAKC,SAAU,CACjC,IAAK4B,EAAMf,SAAU,CACnBf,EAAI0B,IAAII,EAAMzB,I,CAGhBpB,KAAK0C,+BAA+BG,EAAO9B,E,EASvC,kBAAA4B,CAAmB3B,EAAgBsB,GACzC,MAAMQ,EAAU9C,KAAK+C,cAAc/C,KAAKd,KAAM8B,EAAKI,IAAK,IAExD,IAAK,MAAM4B,KAAUF,EAAS,CAC5B,GAAIE,EAAOlB,WAAakB,EAAO/B,UAAY+B,EAAO/B,SAASC,SAAW,EAAG,SACzE,MAAM+B,EAAoBD,EAAO/B,SAASiC,QAAQC,IAAOA,EAAErB,WAC3D,GAAImB,EAAkB/B,SAAW,EAAG,SACpC,MAAMkC,EAAaH,EAAkBI,OAAOF,GAAMb,EAAKgB,IAAIH,EAAE/B,OAC7D,GAAIgC,EAAY,CACdd,EAAKG,IAAIO,EAAO5B,I,KACX,CACLkB,EAAKE,OAAOQ,EAAO5B,I,GASjB,aAAA2B,CAAcjC,EAAmBM,EAAamC,GACpD,IAAK,MAAMvC,KAAQF,EAAO,CACxB,GAAIE,EAAKI,MAAQA,EAAK,CACpB,OAAOmC,C,CAET,GAAIvC,EAAKC,UAAYD,EAAKC,SAASC,OAAS,EAAG,CAC7C,MAAMsC,EAAQxD,KAAK+C,cAAc/B,EAAKC,SAAUG,EAAK,CAACJ,KAASuC,IAC/D,GAAIC,EAAO,OAAOA,C,EAGtB,OAAO,I,CAQD,wBAAAC,GACN,MAAMC,EAAU1D,KAAKsB,iBACrB,MAAMsB,EAAS,IAAIlC,IACnB,MAAMiD,EAAQ3C,IACZ,IAAKA,EAAKC,UAAYD,EAAKC,SAASC,SAAW,EAAG,CAChD,MAAO,CAAE0C,qBAAsB,M,CAEjC,IAAIA,EAAuB,MAC3B,IAAK,MAAMf,KAAS7B,EAAKC,SAAU,CACjC,MAAM4C,EAAaF,EAAKd,GACxB,GAAIa,EAAQlC,SAASqB,EAAMzB,MAAQyC,EAAWD,qBAAsB,CAClEA,EAAuB,I,EAI3B,GAAIA,IAAyBF,EAAQlC,SAASR,EAAKI,KAAM,CACvDwB,EAAOH,IAAIzB,EAAKI,I,CAElB,MAAO,CAAEwC,uBAAsB,EAEjC,IAAK,MAAME,KAAQ9D,KAAKd,KAAM,CAC5ByE,EAAKG,E,CAEP,OAAOlB,C,CAGDmB,WAAa,CAAC/C,EAAgBgD,EAAeC,KACnD,MAAMC,KAAiBlD,EAAKC,UAAYD,EAAKC,SAASC,OAAS,GAC/D,MAAMiD,EAAWnE,KAAKuB,WAAWP,EAAKI,KACtC,MAAMgD,EAAWpE,KAAKyB,WAAWT,EAAKI,KACtC,MAAMsC,EAAU1D,KAAK0B,UAAUV,EAAKI,KACpC,MAAMiD,EAAgBJ,EAAkBX,IAAItC,EAAKI,KACjD,MAAMU,IAAad,EAAKc,SAExB,OACEwC,EAAA,MACEC,MAAO,CACL,gBAAiB,KACjB,0BAA2BzC,GAE7B0C,KAAK,WAAU,aACHR,EAAQ,EAAC,gBACNE,EAAcO,OAAON,GAAYO,UAAS,gBAC1CN,EAAW,OAAS,QAAO,eAExCpE,KAAKX,UACDgF,EACE,QACAX,EACE,OACA,QACJgB,UAAS,gBAEA5C,EAAW,OAAS4C,UACnCC,SAAUP,EAAW,GAAK,GAE1BE,EAAA,OACEC,MAAO,CACL,wBAAyB,KACzB,kCAAmCH,GAErCQ,MAAO,CAAEC,YAAa,GAAGb,EAAQ,GAAK,QAEtCM,EAAA,QAAMC,MAAM,oBAAoBO,QAAUlD,GAAMsC,GAAelE,KAAK2B,mBAAmBX,EAAMY,IAC1FsC,EACCI,EAAA,QAAMC,MAAO,CAAE,iBAAkB,KAAM,2BAA4BJ,IAAU,KAC3EnE,KAAKR,SACP8E,EAAA,QAAMC,MAAM,sBACV,MAGLvE,KAAKX,WACJiF,EAAA,QACEC,MAAO,CACL,oBAAqB,KACrB,6BAA8Bb,EAC9B,mCAAoCW,EACpC,8BAA+BvC,GAEjCgD,QAAUlD,GAAM5B,KAAKoC,YAAYpB,EAAMY,IAEtC8B,EAAU,IAAMW,EAAgB,IAAM,IAI3CC,EAAA,QAAMC,MAAM,iBAAiBO,QAAS,IAAM9E,KAAKmC,aAAanB,IAC3DA,EAAK+D,QAITb,GAAeC,GACdG,EAAA,MAAIC,MAAM,oBAAoBC,KAAK,SAChCxD,EAAKC,SAAU+D,KAAKnC,GAAU7C,KAAK+D,WAAWlB,EAAOmB,EAAQ,EAAGC,MAGlE,EAIT,MAAAgB,GACE,MAAMhB,EAAoBjE,KAAKX,UAAYW,KAAKyD,2BAA6B,IAAI/C,IACjF,OACE4D,EAAA,MAAAlD,IAAA,2CAAImD,MAAO,CAAE,UAAW,KAAM,qBAAsBvE,KAAKR,UAAYgF,KAAK,QACvExE,KAAKd,KAAK8F,KAAKhE,GAAShB,KAAK+D,WAAW/C,EAAM,EAAGiD,K","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["checkboxGroupCss","HbCheckboxGroupStyle0","CheckboxGroup","modelValue","disabled","size","border","min","max","hbChange","checkboxes","componentDidLoad","this","updateCheckboxes","handleValueChange","updateCheckboxesState","handlePropsChange","Array","from","el","querySelectorAll","forEach","checkbox","addEventListener","handleCheckboxChange","value","undefined","isChecked","includes","filter","v","e","target","newValue","length","emit","render","h","key","class"],"sources":["src/components/Checkbox/checkbox-group.css?tag=hb-checkbox-group&encapsulation=shadow","src/components/Checkbox/CheckboxGroup.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n.hb-checkbox-group {\n display: inline-block;\n font-size: 0;\n}\n\n::slotted(hb-checkbox) {\n margin-right: 30px;\n}\n\n::slotted(hb-checkbox:last-child) {\n margin-right: 0;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\n\n/**\n * CheckboxGroup 多选框组组件\n * 用于管理多个 checkbox\n */\n@Component({\n tag: 'hb-checkbox-group',\n styleUrl: 'checkbox-group.css',\n shadow: true,\n})\nexport class CheckboxGroup {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: (string | number)[] = [];\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否显示边框\n * @default false\n */\n @Prop() border: boolean = false;\n\n /**\n * 最小选中数量\n */\n @Prop() min?: number;\n\n /**\n * 最大选中数量\n */\n @Prop() max?: number;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<(string | number)[]>;\n\n @State() checkboxes: HTMLHbCheckboxElement[] = [];\n\n componentDidLoad() {\n this.updateCheckboxes();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateCheckboxesState();\n }\n\n @Watch('disabled')\n @Watch('size')\n @Watch('border')\n handlePropsChange() {\n this.updateCheckboxes();\n }\n\n private updateCheckboxes() {\n const checkboxes = Array.from(\n this.el.querySelectorAll('hb-checkbox')\n ) as HTMLHbCheckboxElement[];\n\n this.checkboxes = checkboxes;\n\n checkboxes.forEach((checkbox) => {\n checkbox.disabled = this.disabled || checkbox.disabled;\n checkbox.size = this.size;\n checkbox.border = this.border;\n \n // 监听checkbox变化\n checkbox.addEventListener('hbChange', this.handleCheckboxChange);\n });\n\n this.updateCheckboxesState();\n }\n\n private updateCheckboxesState() {\n this.checkboxes.forEach((checkbox) => {\n if (checkbox.value !== undefined) {\n const isChecked = this.modelValue.includes(checkbox.value);\n checkbox.modelValue = isChecked\n ? [...this.modelValue]\n : this.modelValue.filter((v) => v !== checkbox.value);\n }\n });\n }\n\n private handleCheckboxChange = (e: CustomEvent) => {\n const checkbox = e.target as HTMLHbCheckboxElement;\n const value = checkbox.value;\n\n if (value === undefined) return;\n\n let newValue: (string | number)[];\n\n if (this.modelValue.includes(value)) {\n newValue = this.modelValue.filter((v) => v !== value);\n // 取消选中后不能低于最小数量\n if (this.min !== undefined && newValue.length < this.min) {\n return;\n }\n } else {\n // 选中后不能超过最大数量\n if (this.max !== undefined && this.modelValue.length >= this.max) {\n return;\n }\n newValue = [...this.modelValue, value];\n }\n\n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n };\n\n render() {\n return (\n <div\n class={{\n 'hb-checkbox-group': true,\n }}\n >\n <slot></slot>\n </div>\n );\n }\n}\n\n"],"mappings":"yDAAA,MAAMA,EAAmB,k4LACzB,MAAAC,EAAeD,E,MCUFE,EAAa,M,oFAMCC,WAAkC,GAMnDC,SAAoB,MAKpBC,KAAsC,UAMtCC,OAAkB,MAKlBC,IAKAC,IAKCC,SAEAC,WAAsC,GAE/C,gBAAAC,GACEC,KAAKC,kB,CAIP,iBAAAC,GACEF,KAAKG,uB,CAMP,iBAAAC,GACEJ,KAAKC,kB,CAGC,gBAAAA,GACN,MAAMH,EAAaO,MAAMC,KACvBN,KAAKO,GAAGC,iBAAiB,gBAG3BR,KAAKF,WAAaA,EAElBA,EAAWW,SAASC,IAClBA,EAASlB,SAAWQ,KAAKR,UAAYkB,EAASlB,SAC9CkB,EAASjB,KAAOO,KAAKP,KACrBiB,EAAShB,OAASM,KAAKN,OAGvBgB,EAASC,iBAAiB,WAAYX,KAAKY,qBAAqB,IAGlEZ,KAAKG,uB,CAGC,qBAAAA,GACNH,KAAKF,WAAWW,SAASC,IACvB,GAAIA,EAASG,QAAUC,UAAW,CAChC,MAAMC,EAAYf,KAAKT,WAAWyB,SAASN,EAASG,OACpDH,EAASnB,WAAawB,EAClB,IAAIf,KAAKT,YACTS,KAAKT,WAAW0B,QAAQC,GAAMA,IAAMR,EAASG,O,KAK/CD,qBAAwBO,IAC9B,MAAMT,EAAWS,EAAEC,OACnB,MAAMP,EAAQH,EAASG,MAEvB,GAAIA,IAAUC,UAAW,OAEzB,IAAIO,EAEJ,GAAIrB,KAAKT,WAAWyB,SAASH,GAAQ,CACnCQ,EAAWrB,KAAKT,WAAW0B,QAAQC,GAAMA,IAAML,IAE/C,GAAIb,KAAKL,MAAQmB,WAAaO,EAASC,OAAStB,KAAKL,IAAK,CACxD,M,MAEG,CAEL,GAAIK,KAAKJ,MAAQkB,WAAad,KAAKT,WAAW+B,QAAUtB,KAAKJ,IAAK,CAChE,M,CAEFyB,EAAW,IAAIrB,KAAKT,WAAYsB,E,CAGlCb,KAAKT,WAAa8B,EAClBrB,KAAKH,SAAS0B,KAAKF,EAAS,EAG9B,MAAAG,GACE,OACEC,EAAA,OAAAC,IAAA,2CACEC,MAAO,CACL,oBAAqB,OAGvBF,EAAA,QAAAC,IAAA,6C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,g as t,h as i}from"./p-e42dfa95.js";import{i as s}from"./p-cc0aeb50.js";const a=class{constructor(t){e(this,t)}get el(){return t(this)}key="";disabled=false;icon;active=false;handleClick=()=>{if(this.disabled)return;const e=this.el.closest("hb-menu");if(e){e.dispatchEvent(new CustomEvent("hbMenuItemSelect",{detail:this.key,bubbles:true}))}};handleKeydown=e=>{if(this.disabled)return;if(s(e.key)){e.preventDefault();this.handleClick()}};render(){return i("li",{key:"73a414a55166b598c78b6a3d0471cae5559a6aa6",class:{"hb-menu-item":true,"hb-menu-item--active":this.active,"hb-menu-item--disabled":this.disabled},role:"menuitem",tabindex:this.disabled?-1:0,"aria-disabled":this.disabled?"true":undefined,"aria-current":this.active?"page":undefined,onClick:this.handleClick,onKeyDown:this.handleKeydown},this.icon&&i("span",{key:"375938585e3f0b1550912723c93fe2f391f4e407",class:"hb-menu-item__icon"},this.icon),i("span",{key:"6db5289368546e0695d386826700805d53660c68",class:"hb-menu-item__text"},i("slot",{key:"1d2fc9baece71764747c07148de07de612b2f4b1"})))}};export{a as hb_menu_item};
2
- //# sourceMappingURL=p-3807da71.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["MenuItem","key","disabled","icon","active","handleClick","this","menu","el","closest","dispatchEvent","CustomEvent","detail","bubbles","handleKeydown","e","isActivationKey","preventDefault","render","h","class","role","tabindex","undefined","onClick","onKeyDown"],"sources":["src/components/Menu/MenuItem.tsx"],"sourcesContent":["import { Component, h, Prop, Element } from '@stencil/core';\nimport { isActivationKey } from '../../utils/a11y';\n\n/**\n * MenuItem 菜单项\n */\n@Component({\n tag: 'hb-menu-item',\n shadow: true,\n})\nexport class MenuItem {\n @Element() el: HTMLElement;\n\n /** 唯一标识 */\n @Prop() key: string = '';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 图标 */\n @Prop() icon?: string;\n\n /** 是否激活(由父级 Menu 设置) */\n @Prop() active: boolean = false;\n\n private handleClick = () => {\n if (this.disabled) return;\n const menu = this.el.closest('hb-menu');\n if (menu) {\n // 使用内部事件名 hbMenuItemSelect,与 Menu 向外发射的公开事件 hbSelect 区分,\n // 否则 Menu 的 @Listen('hbSelect') 会被自身 emit 的事件再次触发,导致无限递归。\n menu.dispatchEvent(new CustomEvent('hbMenuItemSelect', { detail: this.key, bubbles: true }));\n }\n };\n\n private handleKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (isActivationKey(e.key)) {\n e.preventDefault();\n this.handleClick();\n }\n };\n\n render() {\n return (\n <li\n class={{\n 'hb-menu-item': true,\n 'hb-menu-item--active': this.active,\n 'hb-menu-item--disabled': this.disabled,\n }}\n role=\"menuitem\"\n tabindex={this.disabled ? -1 : 0}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-current={this.active ? 'page' : undefined}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n >\n {this.icon && <span class=\"hb-menu-item__icon\">{this.icon}</span>}\n <span class=\"hb-menu-item__text\"><slot /></span>\n </li>\n );\n }\n}\n"],"mappings":"4FAUaA,EAAQ,M,iDAIXC,IAAc,GAGdC,SAAoB,MAGpBC,KAGAC,OAAkB,MAElBC,YAAc,KACpB,GAAIC,KAAKJ,SAAU,OACnB,MAAMK,EAAOD,KAAKE,GAAGC,QAAQ,WAC7B,GAAIF,EAAM,CAGRA,EAAKG,cAAc,IAAIC,YAAY,mBAAoB,CAAEC,OAAQN,KAAKL,IAAKY,QAAS,O,GAIhFC,cAAiBC,IACvB,GAAIT,KAAKJ,SAAU,OACnB,GAAIc,EAAgBD,EAAEd,KAAM,CAC1Bc,EAAEE,iBACFX,KAAKD,a,GAIT,MAAAa,GACE,OACEC,EAAA,MAAAlB,IAAA,2CACEmB,MAAO,CACL,eAAgB,KAChB,uBAAwBd,KAAKF,OAC7B,yBAA0BE,KAAKJ,UAEjCmB,KAAK,WACLC,SAAUhB,KAAKJ,UAAY,EAAI,EAAC,gBACjBI,KAAKJ,SAAW,OAASqB,UAAS,eACnCjB,KAAKF,OAAS,OAASmB,UACrCC,QAASlB,KAAKD,YACdoB,UAAWnB,KAAKQ,eAEfR,KAAKH,MAAQgB,EAAA,QAAAlB,IAAA,2CAAMmB,MAAM,sBAAsBd,KAAKH,MACrDgB,EAAA,QAAAlB,IAAA,2CAAMmB,MAAM,sBAAqBD,EAAA,QAAAlB,IAAA,8C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,h as i}from"./p-e42dfa95.js";import{g as r,l as a,u as o}from"./p-ecce2b5e.js";import{c as n}from"./p-cc0aeb50.js";const s='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.container{width:100%}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:contents}.hb-drawer-wrapper{inset:0;pointer-events:none;position:fixed;z-index:1000}.hb-drawer__overlay{background:var(--hb-color-bg-mask);inset:0;transition:opacity .3s}.hb-drawer,.hb-drawer__overlay{pointer-events:auto;position:fixed}.hb-drawer{background:var(--hb-color-bg-elevated);box-shadow:var(--hb-box-shadow-lg);display:flex;flex-direction:column;transition:transform .3s}.hb-drawer--rtl{bottom:0;right:0;top:0;transform:translate(100%)}.hb-drawer--ltr{bottom:0;left:0;top:0;transform:translate(-100%)}.hb-drawer--ttb{left:0;right:0;top:0;transform:translateY(-100%)}.hb-drawer--btt{bottom:0;left:0;right:0;transform:translateY(100%)}.hb-drawer--visible.hb-drawer--ltr,.hb-drawer--visible.hb-drawer--rtl{transform:translate(0)}.hb-drawer--visible.hb-drawer--btt,.hb-drawer--visible.hb-drawer--ttb{transform:translateY(0)}.hb-drawer__header{align-items:center;border-bottom:1px solid var(--hb-color-border-secondary);display:flex;justify-content:space-between;padding:var(--hb-spacing-md)var(--hb-spacing-lg)}.hb-drawer__title{font-size:var(--hb-font-size-lg);font-weight:600}.hb-drawer__close{align-items:center;background:0 0;border:none;border-radius:var(--hb-border-radius-sm);color:var(--hb-color-text-secondary);cursor:pointer;display:flex;font-size:18px;height:28px;justify-content:center;width:28px}.hb-drawer__close:hover{background:var(--hb-color-fill-tertiary)}.hb-drawer__body{flex:1;overflow-y:auto;padding:var(--hb-spacing-lg)}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}';const l=s;const d=class{constructor(i){e(this,i);this.hbOpen=t(this,"hbOpen",7);this.hbClose=t(this,"hbClose",7)}modelValue=false;title="";size="30%";direction="rtl";closeOnClickModal=true;showClose=true;modal=true;closeOnPressEscape=true;zIndexState=0;zIndex=0;panelRef;trap;hbOpen;hbClose;handleVisible(e){if(e){this.zIndex=r();this.zIndexState=this.zIndex;if(this.modal)a();this.hbOpen.emit();document.addEventListener("keydown",this.handleKeyDown)}else{if(this.modal)o();this.hbClose.emit();document.removeEventListener("keydown",this.handleKeyDown)}}componentDidRender(){if(!this.panelRef)return;if(this.modelValue){if(!this.trap){this.trap=n({container:this.panelRef})}this.trap.connect()}else{this.trap?.disconnect()}}disconnectedCallback(){if(this.modelValue&&this.modal)o();document.removeEventListener("keydown",this.handleKeyDown);this.trap?.disconnect()}handleKeyDown=e=>{if(this.closeOnPressEscape&&e.key==="Escape"){this.close()}};close=()=>{this.modelValue=false};render(){const e=this.direction;const t=e==="ttb"||e==="btt";const r=t?{height:this.size}:{width:this.size};const a=`hb-drawer--${e}`;return i("div",{key:"e85f1040fdaacbf6e5d329f5561cdae25b2d4bc7",class:{"hb-drawer-wrapper":true,"hb-drawer-wrapper--visible":this.modelValue}},this.modal&&i("div",{key:"274cc165c21ea6490ca8f08be672b0605abc5d64",class:"hb-drawer__overlay",style:{zIndex:String(this.zIndexState)},onClick:()=>this.closeOnClickModal&&this.close()}),i("div",{key:"8be6526f044035cfa31aebc66c5d459dbb2102af",ref:e=>this.panelRef=e,class:{"hb-drawer":true,[a]:true,"hb-drawer--visible":this.modelValue},style:{...r,zIndex:String(this.zIndexState+1)},role:"dialog","aria-modal":"true","aria-label":this.title||undefined},i("div",{key:"826172fbe94e295fa146ef451455307fc97c7925",class:"hb-drawer__header"},i("span",{key:"a9fc420dea4707d6bd9ae38752c1ef08892ee44b",class:"hb-drawer__title"},this.title),this.showClose&&i("button",{key:"b10452826b00e8fddc37a895af118c88b6c90ea4",type:"button",class:"hb-drawer__close","aria-label":"关闭",onClick:this.close},"×")),i("div",{key:"f251c9c87ec21647c9bbc5363c6818b7fba4f7b5",class:"hb-drawer__body"},i("slot",{key:"48e06fdeac538ec34aded9216c4a6ea98bd262ca"}))))}static get watchers(){return{modelValue:["handleVisible"]}}};d.style=l;export{d as hb_drawer};
2
- //# sourceMappingURL=p-47ef7a86.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["drawerCss","HbDrawerStyle0","Drawer","modelValue","title","size","direction","closeOnClickModal","showClose","modal","closeOnPressEscape","zIndexState","zIndex","panelRef","trap","hbOpen","hbClose","handleVisible","val","this","getNextZIndex","lockScroll","emit","document","addEventListener","handleKeyDown","unlockScroll","removeEventListener","componentDidRender","createFocusTrap","container","connect","disconnect","disconnectedCallback","e","key","close","render","dir","isVertical","sizeStyle","height","width","translateClass","h","class","style","String","onClick","ref","el","role","undefined","type"],"sources":["src/components/Drawer/drawer.css?tag=hb-drawer&encapsulation=shadow","src/components/Drawer/Drawer.tsx"],"sourcesContent":[":host { display: contents; }\n.hb-drawer-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 1000; }\n.hb-drawer__overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--hb-color-bg-mask); pointer-events: auto; transition: opacity 0.3s; }\n.hb-drawer {\n position: fixed; background: var(--hb-color-bg-elevated); box-shadow: var(--hb-box-shadow-lg);\n display: flex; flex-direction: column; pointer-events: auto; transition: transform 0.3s ease;\n}\n.hb-drawer--rtl { top: 0; right: 0; bottom: 0; transform: translateX(100%); }\n.hb-drawer--ltr { top: 0; left: 0; bottom: 0; transform: translateX(-100%); }\n.hb-drawer--ttb { left: 0; right: 0; top: 0; transform: translateY(-100%); }\n.hb-drawer--btt { left: 0; right: 0; bottom: 0; transform: translateY(100%); }\n.hb-drawer--visible.hb-drawer--rtl, .hb-drawer--visible.hb-drawer--ltr { transform: translateX(0); }\n.hb-drawer--visible.hb-drawer--ttb, .hb-drawer--visible.hb-drawer--btt { transform: translateY(0); }\n.hb-drawer__header { display: flex; align-items: center; justify-content: space-between; padding: var(--hb-spacing-md) var(--hb-spacing-lg); border-bottom: 1px solid var(--hb-color-border-secondary); }\n.hb-drawer__title { font-size: var(--hb-font-size-lg); font-weight: 600; }\n.hb-drawer__close { border: none; background: none; font-size: 18px; cursor: pointer; color: var(--hb-color-text-secondary); width: 28px; height: 28px; border-radius: var(--hb-border-radius-sm); display: flex; align-items: center; justify-content: center; }\n.hb-drawer__close:hover { background: var(--hb-color-fill-tertiary); }\n.hb-drawer__body { flex: 1; padding: var(--hb-spacing-lg); overflow-y: auto; }\n","import { Component, h, Prop, Event, EventEmitter, Watch, State } from '@stencil/core';\nimport { lockScroll, unlockScroll, getNextZIndex } from '../../utils/popup-manager';\nimport { createFocusTrap, FocusTrap } from '../../utils/a11y';\n\n@Component({ tag: 'hb-drawer', styleUrl: 'drawer.css', shadow: true })\nexport class Drawer {\n @Prop({ mutable: true }) modelValue: boolean = false;\n @Prop() title: string = '';\n @Prop() size: string = '30%';\n @Prop() direction: 'ltr' | 'rtl' | 'ttb' | 'btt' = 'rtl';\n @Prop() closeOnClickModal: boolean = true;\n @Prop() showClose: boolean = true;\n @Prop() modal: boolean = true;\n /** 是否按 ESC 关闭 */\n @Prop() closeOnPressEscape: boolean = true;\n @State() private zIndexState: number = 0;\n private zIndex: number = 0;\n private panelRef?: HTMLElement;\n private trap?: FocusTrap;\n\n @Event() hbOpen: EventEmitter<void>;\n @Event() hbClose: EventEmitter<void>;\n\n @Watch('modelValue')\n handleVisible(val: boolean) {\n if (val) {\n this.zIndex = getNextZIndex();\n this.zIndexState = this.zIndex;\n if (this.modal) lockScroll();\n this.hbOpen.emit();\n document.addEventListener('keydown', this.handleKeyDown);\n } else {\n if (this.modal) unlockScroll();\n this.hbClose.emit();\n document.removeEventListener('keydown', this.handleKeyDown);\n }\n }\n\n componentDidRender() {\n if (!this.panelRef) return;\n if (this.modelValue) {\n if (!this.trap) {\n this.trap = createFocusTrap({ container: this.panelRef });\n }\n this.trap.connect();\n } else {\n this.trap?.disconnect();\n }\n }\n\n disconnectedCallback() {\n if (this.modelValue && this.modal) unlockScroll();\n document.removeEventListener('keydown', this.handleKeyDown);\n this.trap?.disconnect();\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.closeOnPressEscape && e.key === 'Escape') {\n this.close();\n }\n };\n\n private close = () => { this.modelValue = false; };\n\n render() {\n const dir = this.direction;\n const isVertical = dir === 'ttb' || dir === 'btt';\n const sizeStyle = isVertical ? { height: this.size } : { width: this.size };\n const translateClass = `hb-drawer--${dir}`;\n\n return (\n <div class={{ 'hb-drawer-wrapper': true, 'hb-drawer-wrapper--visible': this.modelValue }}>\n {this.modal && <div class=\"hb-drawer__overlay\" style={{ zIndex: String(this.zIndexState) }} onClick={() => this.closeOnClickModal && this.close()} />}\n <div\n ref={(el) => (this.panelRef = el as HTMLElement)}\n class={{ 'hb-drawer': true, [translateClass]: true, 'hb-drawer--visible': this.modelValue }}\n style={{ ...sizeStyle, zIndex: String(this.zIndexState + 1) }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={this.title || undefined}\n >\n <div class=\"hb-drawer__header\">\n <span class=\"hb-drawer__title\">{this.title}</span>\n {this.showClose && <button type=\"button\" class=\"hb-drawer__close\" aria-label=\"关闭\" onClick={this.close}>×</button>}\n </div>\n <div class=\"hb-drawer__body\"><slot /></div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"wIAAA,MAAMA,EAAY,4yOAClB,MAAAC,EAAeD,E,MCIFE,EAAM,M,yFACQC,WAAsB,MACvCC,MAAgB,GAChBC,KAAe,MACfC,UAA2C,MAC3CC,kBAA6B,KAC7BC,UAAqB,KACrBC,MAAiB,KAEjBC,mBAA8B,KACrBC,YAAsB,EAC/BC,OAAiB,EACjBC,SACAC,KAECC,OACAC,QAGT,aAAAC,CAAcC,GACZ,GAAIA,EAAK,CACPC,KAAKP,OAASQ,IACdD,KAAKR,YAAcQ,KAAKP,OACxB,GAAIO,KAAKV,MAAOY,IAChBF,KAAKJ,OAAOO,OACZC,SAASC,iBAAiB,UAAWL,KAAKM,c,KACrC,CACL,GAAIN,KAAKV,MAAOiB,IAChBP,KAAKH,QAAQM,OACbC,SAASI,oBAAoB,UAAWR,KAAKM,c,EAIjD,kBAAAG,GACE,IAAKT,KAAKN,SAAU,OACpB,GAAIM,KAAKhB,WAAY,CACnB,IAAKgB,KAAKL,KAAM,CACdK,KAAKL,KAAOe,EAAgB,CAAEC,UAAWX,KAAKN,U,CAEhDM,KAAKL,KAAKiB,S,KACL,CACLZ,KAAKL,MAAMkB,Y,EAIf,oBAAAC,GACE,GAAId,KAAKhB,YAAcgB,KAAKV,MAAOiB,IACnCH,SAASI,oBAAoB,UAAWR,KAAKM,eAC7CN,KAAKL,MAAMkB,Y,CAGLP,cAAiBS,IACvB,GAAIf,KAAKT,oBAAsBwB,EAAEC,MAAQ,SAAU,CACjDhB,KAAKiB,O,GAIDA,MAAQ,KAAQjB,KAAKhB,WAAa,KAAK,EAE/C,MAAAkC,GACE,MAAMC,EAAMnB,KAAKb,UACjB,MAAMiC,EAAaD,IAAQ,OAASA,IAAQ,MAC5C,MAAME,EAAYD,EAAa,CAAEE,OAAQtB,KAAKd,MAAS,CAAEqC,MAAOvB,KAAKd,MACrE,MAAMsC,EAAiB,cAAcL,IAErC,OACEM,EAAA,OAAAT,IAAA,2CAAKU,MAAO,CAAE,oBAAqB,KAAM,6BAA8B1B,KAAKhB,aACzEgB,KAAKV,OAASmC,EAAA,OAAAT,IAAA,2CAAKU,MAAM,qBAAqBC,MAAO,CAAElC,OAAQmC,OAAO5B,KAAKR,cAAgBqC,QAAS,IAAM7B,KAAKZ,mBAAqBY,KAAKiB,UAC1IQ,EAAA,OAAAT,IAAA,2CACEc,IAAMC,GAAQ/B,KAAKN,SAAWqC,EAC9BL,MAAO,CAAE,YAAa,KAAMF,CAACA,GAAiB,KAAM,qBAAsBxB,KAAKhB,YAC/E2C,MAAO,IAAKN,EAAW5B,OAAQmC,OAAO5B,KAAKR,YAAc,IACzDwC,KAAK,SAAQ,aACF,OAAM,aACLhC,KAAKf,OAASgD,WAE1BR,EAAA,OAAAT,IAAA,2CAAKU,MAAM,qBACTD,EAAA,QAAAT,IAAA,2CAAMU,MAAM,oBAAoB1B,KAAKf,OACpCe,KAAKX,WAAaoC,EAAA,UAAAT,IAAA,2CAAQkB,KAAK,SAASR,MAAM,mBAAkB,aAAY,KAAKG,QAAS7B,KAAKiB,OAAK,MAEvGQ,EAAA,OAAAT,IAAA,2CAAKU,MAAM,mBAAkBD,EAAA,QAAAT,IAAA,+C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as t,c as e,g as i,h as n}from"./p-e42dfa95.js";const o=["large","default","small"];function r(t,e){const i=e&&o.includes(e)?e:"default";return`${t}--${i}`}function a(t){return Boolean(t.clearable&&!t.disabled&&!t.readonly&&t.hasValue)}function s(t){if(t===null||t===undefined)return false;if(typeof t==="string")return t.length>0;if(typeof t==="number")return!Number.isNaN(t);if(Array.isArray(t))return t.length>0;return true}function l(t,e){return{[t]:true,[r(t,e)]:true}}const h='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hidden{display:none}.resize{resize:both}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{--hb-input-font-size:14px;--hb-input-font-size-large:16px;--hb-input-font-size-small:12px;--hb-input-height:32px;--hb-input-height-large:40px;--hb-input-height-small:24px;--hb-input-border-color:var(--hb-border-color,#dcdfe6);--hb-input-border-color-hover:var(--hb-color-primary);--hb-input-bg-color:var(--hb-color-white,#fff);--hb-input-text-color:var(--hb-color-text-regular,#606266);--hb-input-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);--hb-input-disabled-color:var(--hb-color-text-disabled,#c0c4cc);--hb-input-disabled-bg-color:var(--hb-fill-color-light,#f5f7fa);display:inline-block;position:relative}.hb-input{font-size:var(--hb-input-font-size);position:relative}.hb-input,.hb-input__inner{display:inline-block;width:100%}.hb-input__inner{-webkit-appearance:none;background-color:var(--hb-input-bg-color);background-image:none;border:1px solid var(--hb-input-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-input-text-color);font-size:inherit;height:var(--hb-input-height);line-height:var(--hb-input-height);outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-input__inner::placeholder{color:var(--hb-input-placeholder-color)}.hb-input__inner:focus,.hb-input__inner:hover:not(:disabled){border-color:var(--hb-input-border-color-hover)}.hb-input__inner:disabled{background-color:var(--hb-input-disabled-bg-color);border-color:var(--hb-input-border-color);color:var(--hb-input-disabled-color);cursor:not-allowed}.hb-input__inner[readonly]{background-color:var(--hb-input-disabled-bg-color);cursor:default}.hb-input--small .hb-input__inner{font-size:var(--hb-input-font-size-small);height:var(--hb-input-height-small);line-height:var(--hb-input-height-small);padding:0 12px}.hb-input--large .hb-input__inner{font-size:var(--hb-input-font-size-large);height:var(--hb-input-height-large);line-height:var(--hb-input-height-large);padding:0 18px}.hb-input__prefix,.hb-input__suffix{align-items:center;color:var(--hb-input-placeholder-color);display:flex;height:100%;position:absolute;text-align:center;top:0;transition:all .3s}.hb-input__prefix{left:5px}.hb-input__suffix{right:5px}.hb-input__suffix-inner{align-items:center;cursor:pointer;display:flex;-webkit-user-select:none;user-select:none}.hb-input__clear{align-items:center;color:var(--hb-input-placeholder-color);display:inline-flex;height:16px;justify-content:center;transition:color .2s;width:16px}.hb-input__clear svg{height:100%;width:100%}.hb-input__clear:hover,.hb-input__password{color:var(--hb-input-text-color)}.hb-input__password{align-items:center;cursor:pointer;display:inline-flex;height:16px;justify-content:center;width:16px}.hb-input__password svg{height:100%;width:100%}.hb-input__inner[type=textarea]{line-height:1.5;min-height:60px;padding:5px 15px;resize:vertical;vertical-align:bottom}.hb-input__count{bottom:5px;color:var(--hb-input-placeholder-color);font-size:12px;position:absolute;right:10px}.hb-input__count-inner{background-color:var(--hb-input-bg-color);padding:0 4px}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const d=h;const p=class{constructor(i){t(this,i);this.hbChange=e(this,"hbChange",7);this.hbInput=e(this,"hbInput",7);this.hbFocus=e(this,"hbFocus",7);this.hbBlur=e(this,"hbBlur",7);this.hbClear=e(this,"hbClear",7)}get el(){return i(this)}modelValue="";type="text";size="default";disabled=false;readonly=false;placeholder;clearable=false;showPassword=false;showWordLimit=false;maxlength;minlength;name;inputId;autocomplete;autofocus=false;prefixIcon;suffixIcon;rows=2;autosize=false;resize;isFocused=false;showClear=false;passwordVisible=false;inputValue="";inputRef;hbChange;hbInput;hbFocus;hbBlur;hbClear;handleValueChange(){this.inputValue=this.modelValue;this.updateClearVisible();this.resizeTextarea()}componentDidLoad(){this.inputValue=this.modelValue;this.updateClearVisible();this.resizeTextarea()}updateClearVisible(){this.showClear=a({clearable:this.clearable,disabled:this.disabled,readonly:this.readonly,hasValue:s(this.inputValue)})}resizeTextarea(){if(this.type!=="textarea"||!this.autosize)return;const t=this.inputRef;if(!t)return;const e=typeof window!=="undefined"?window.getComputedStyle(t):null;const i=e&&parseFloat(e.lineHeight)?parseFloat(e.lineHeight):22;const n=e?parseFloat(e.paddingTop)||0:0;const o=e?parseFloat(e.paddingBottom)||0:0;const r=typeof this.autosize==="object"?this.autosize:{};const a=r.minRows??1;const s=r.maxRows??Infinity;const l=a*i+n+o;const h=s===Infinity?Infinity:s*i+n+o;t.style.height="auto";const d=t.scrollHeight;const p=Math.max(l,Math.min(d,h===Infinity?d:h));t.style.height=`${p}px`;t.style.overflowY=d>p?"auto":"hidden"}handleInput=t=>{const e=t.target;this.inputValue=e.value;this.modelValue=e.value;this.updateClearVisible();this.hbInput.emit(e.value);this.resizeTextarea()};handleChange=t=>{const e=t.target;this.hbChange.emit(e.value)};handleFocus=t=>{this.isFocused=true;this.updateClearVisible();this.hbFocus.emit(t)};handleBlur=t=>{this.isFocused=false;this.updateClearVisible();this.hbBlur.emit(t)};handleClear=t=>{t.stopPropagation();this.inputValue="";this.modelValue="";this.updateClearVisible();this.hbClear.emit();this.hbChange.emit("");if(this.inputRef){this.inputRef.focus()}};togglePasswordVisible=()=>{this.passwordVisible=!this.passwordVisible};getInputType(){if(this.type==="password"&&this.showPassword){return this.passwordVisible?"text":"password"}return this.type}render(){const t=this.type==="textarea";const e=t?"textarea":"input";return n("div",{key:"200ae1b7d9257131fa15c06e950962559eaf6509",class:{...l("hb-input",this.size),"hb-input--disabled":this.disabled,"hb-input--focused":this.isFocused}},this.prefixIcon&&n("span",{key:"1ba978d8de430fe70864b1daf5781e925cc35b5c",class:"hb-input__prefix"},n("i",{key:"72abd536835d18ad5e7f75a09f896ebe41ca75d4",class:this.prefixIcon})),n(e,{key:"80049f50544c8118c73e545223450e5aecfc97ab",ref:t=>this.inputRef=t,type:t?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:t?this.rows:undefined,style:t?{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)&&n("span",{key:"9ef7d5b2592fbb890f2915c97c5ecb6a5790ef97",class:"hb-input__suffix"},this.showClear&&n("span",{key:"c727eb595e73882d7c8c0d74cb65464062724377",class:"hb-input__suffix-inner hb-input__clear",role:"button","aria-label":"清空",onClick:this.handleClear},n("svg",{key:"49060a94eba1105ffe4a97a48be513919586737d",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},n("path",{key:"49c82790d5035f47c3f722b2d714f230394b2dda",d:"M6 6l12 12M18 6L6 18"}))),this.type==="password"&&this.showPassword&&n("span",{key:"209212e83bc6c4c0939c6ace984648212c320312",class:"hb-input__suffix-inner hb-input__password",role:"button","aria-label":this.passwordVisible?"隐藏密码":"显示密码",onClick:this.togglePasswordVisible},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",{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"}))),this.suffixIcon&&n("span",{key:"661c50477f3a7d99feb22d71920493a184d66beb",class:"hb-input__suffix-inner"},n("i",{key:"f626ef9a8e095ee15ed0b8d3c903635c66d160c1",class:this.suffixIcon}))),this.showWordLimit&&this.maxlength&&n("span",{key:"47eba0fd638cbf8c510f0a94ee1dac808e3bba78",class:"hb-input__count"},n("span",{key:"2d73a2813633592d8462b9decb3fb3f81fa3abde",class:"hb-input__count-inner"},this.inputValue.length," / ",this.maxlength)))}static get watchers(){return{modelValue:["handleValueChange"]}}};p.style=d;export{p as hb_input};
2
- //# sourceMappingURL=p-4d34e43e.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["COMPONENT_SIZES","buildSizeClass","base","size","normalized","includes","isClearVisible","options","Boolean","clearable","disabled","readonly","hasValue","hasInputValue","value","undefined","length","Number","isNaN","Array","isArray","sizeClassMap","inputCss","HbInputStyle0","Input","modelValue","type","placeholder","showPassword","showWordLimit","maxlength","minlength","name","inputId","autocomplete","autofocus","prefixIcon","suffixIcon","rows","autosize","resize","isFocused","showClear","passwordVisible","inputValue","inputRef","hbChange","hbInput","hbFocus","hbBlur","hbClear","handleValueChange","this","updateClearVisible","resizeTextarea","componentDidLoad","ta","computed","window","getComputedStyle","lineHeight","parseFloat","paddingTop","paddingBottom","opts","minRows","maxRows","Infinity","minH","maxH","style","height","scrollH","scrollHeight","clamped","Math","max","min","overflowY","handleInput","e","target","emit","handleChange","handleFocus","handleBlur","handleClear","stopPropagation","focus","togglePasswordVisible","getInputType","render","isTextarea","InputTag","h","key","class","ref","el","id","onInput","onChange","onFocus","onBlur","role","onClick","viewBox","fill","stroke","d","cx","cy","r"],"sources":["src/utils/form-input-base.ts","src/components/Input/input.css?tag=hb-input&encapsulation=shadow","src/components/Input/Input.tsx"],"sourcesContent":["/**\n * 表单输入组件共享基础\n * 统一 size / disabled / clearable / modelValue 这一组在 Input / Select / Cascader /\n * DatePicker / InputNumber / TimePicker 等组件中重复出现的包装模式。\n *\n * 设计原则:纯函数 + 类型导出,不引入基类继承,避免 Stencil 装饰器在继承链上的隐式行为。\n * 组件按需 import 对应工具,渲染时调用即可。\n */\n\n/** 组件尺寸(与 Ant Design 对齐,便于迁移) */\nexport type ComponentSize = 'large' | 'default' | 'small';\n\n/** 全部合法尺寸,用于运行期校验 */\nexport const COMPONENT_SIZES: readonly ComponentSize[] = ['large', 'default', 'small'] as const;\n\n/**\n * 表单输入组件共享的 prop 契约。\n * 跨框架消费方(React / Vue / 原生)可据此推断任一表单输入组件的通用能力,\n * 各组件在此基础上扩展自身特有 prop。\n */\nexport interface FormInputProps {\n /** 绑定值(双向,配合 hbChange 事件) */\n modelValue: unknown;\n /** 尺寸 */\n size?: ComponentSize;\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否只读 */\n readonly?: boolean;\n /** 是否可清空 */\n clearable?: boolean;\n /** 占位文本 */\n placeholder?: string;\n}\n\n/**\n * 生成尺寸 class 名:buildSizeClass('hb-input', 'large') -> 'hb-input--large'\n * 用于替代各组件 render 中重复的 `[`hb-input--${this.size}`]: true` 模板字面量。\n */\nexport function buildSizeClass(base: string, size: ComponentSize | undefined): string {\n const normalized = size && COMPONENT_SIZES.includes(size) ? size : 'default';\n return `${base}--${normalized}`;\n}\n\n/** 清空按钮可见性判定参数 */\nexport interface ClearVisibleOptions {\n /** 是否声明了 clearable */\n clearable: boolean;\n /** 是否禁用(禁用时不显示) */\n disabled?: boolean;\n /** 是否只读(只读时不显示) */\n readonly?: boolean;\n /** 当前是否有值(无值时不显示) */\n hasValue: boolean;\n}\n\n/**\n * 判定清空按钮是否应显示。\n * 抽取自 Input/Select/Cascader 中重复的 `clearable && !disabled && !readonly && hasValue`。\n */\nexport function isClearVisible(options: ClearVisibleOptions): boolean {\n return Boolean(options.clearable && !options.disabled && !options.readonly && options.hasValue);\n}\n\n/**\n * 判定一个值是否「非空」(用于清空按钮显隐)。\n * 兼容字符串、数字、数组(多选)。\n */\nexport function hasInputValue(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.length > 0;\n if (typeof value === 'number') return !Number.isNaN(value);\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\n/**\n * 尺寸 class 集合生成器:返回包含 base 与 size class 的对象,可直接展开进 JSX class 绑定。\n * 例:sizeClassMap('hb-input', 'large', this.size) -> { 'hb-input': true, 'hb-input--large': true }\n */\nexport function sizeClassMap(base: string, size: ComponentSize | undefined): Record<string, boolean> {\n return { [base]: true, [buildSizeClass(base, size)]: true };\n}\n",":host {\n display: inline-block;\n position: relative;\n --hb-input-font-size: 14px;\n --hb-input-font-size-large: 16px;\n --hb-input-font-size-small: 12px;\n --hb-input-height: 32px;\n --hb-input-height-large: 40px;\n --hb-input-height-small: 24px;\n --hb-input-border-color: var(--hb-border-color, #dcdfe6);\n --hb-input-border-color-hover: var(--hb-color-primary);\n --hb-input-bg-color: var(--hb-color-white, #ffffff);\n --hb-input-text-color: var(--hb-color-text-regular, #606266);\n --hb-input-placeholder-color: var(--hb-color-text-placeholder, #c0c4cc);\n --hb-input-disabled-color: var(--hb-color-text-disabled, #c0c4cc);\n --hb-input-disabled-bg-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-input {\n position: relative;\n font-size: var(--hb-input-font-size);\n display: inline-block;\n width: 100%;\n}\n\n.hb-input__inner {\n -webkit-appearance: none;\n background-color: var(--hb-input-bg-color);\n background-image: none;\n border-radius: 4px;\n border: 1px solid var(--hb-input-border-color);\n box-sizing: border-box;\n color: var(--hb-input-text-color);\n display: inline-block;\n font-size: inherit;\n height: var(--hb-input-height);\n line-height: var(--hb-input-height);\n outline: none;\n padding: 0 15px;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n width: 100%;\n}\n\n.hb-input__inner::placeholder {\n color: var(--hb-input-placeholder-color);\n}\n\n.hb-input__inner:hover:not(:disabled) {\n border-color: var(--hb-input-border-color-hover);\n}\n\n.hb-input__inner:focus {\n border-color: var(--hb-input-border-color-hover);\n}\n\n.hb-input__inner:disabled {\n background-color: var(--hb-input-disabled-bg-color);\n border-color: var(--hb-input-border-color);\n color: var(--hb-input-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-input__inner[readonly] {\n background-color: var(--hb-input-disabled-bg-color);\n cursor: default;\n}\n\n.hb-input--small .hb-input__inner {\n height: var(--hb-input-height-small);\n line-height: var(--hb-input-height-small);\n font-size: var(--hb-input-font-size-small);\n padding: 0 12px;\n}\n\n.hb-input--large .hb-input__inner {\n height: var(--hb-input-height-large);\n line-height: var(--hb-input-height-large);\n font-size: var(--hb-input-font-size-large);\n padding: 0 18px;\n}\n\n.hb-input__prefix,\n.hb-input__suffix {\n position: absolute;\n top: 0;\n height: 100%;\n text-align: center;\n color: var(--hb-input-placeholder-color);\n transition: all 0.3s;\n display: flex;\n align-items: center;\n}\n\n.hb-input__prefix {\n left: 5px;\n}\n\n.hb-input__suffix {\n right: 5px;\n}\n\n.hb-input__suffix-inner {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n}\n\n.hb-input__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--hb-input-placeholder-color);\n transition: color 0.2s;\n}\n\n.hb-input__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-input__clear:hover {\n color: var(--hb-input-text-color);\n}\n\n.hb-input__password {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--hb-input-text-color);\n cursor: pointer;\n}\n\n.hb-input__password svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-input__inner[type=\"textarea\"] {\n min-height: 60px;\n padding: 5px 15px;\n line-height: 1.5;\n vertical-align: bottom;\n resize: vertical;\n}\n\n.hb-input__count {\n position: absolute;\n bottom: 5px;\n right: 10px;\n font-size: 12px;\n color: var(--hb-input-placeholder-color);\n}\n\n.hb-input__count-inner {\n background-color: var(--hb-input-bg-color);\n padding: 0 4px;\n}\n\n","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 // 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=\"清空\" onClick={this.handleClear}>\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 onClick={this.togglePasswordVisible}\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\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,g as t,h as i}from"./p-e42dfa95.js";import{c as o,g as a}from"./p-ecce2b5e.js";import{i as r}from"./p-cc0aeb50.js";const n='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;.hb-popover__trigger,:host{display:inline-block}.hb-popover__popup{animation:hb-popover-fade .15s ease-out;background:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);padding:var(--hb-spacing-sm)0;pointer-events:auto;position:fixed}.hb-popover__title{border-bottom:1px solid var(--hb-color-border-secondary);font-size:var(--hb-font-size-sm);font-weight:600;padding:var(--hb-spacing-xs)var(--hb-spacing-md)}.hb-popover__body{color:var(--hb-color-text);font-size:var(--hb-font-size-sm);padding:var(--hb-spacing-sm)var(--hb-spacing-md)}@keyframes hb-popover-fade{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const s=n;const l=class{constructor(t){e(this,t)}get el(){return t(this)}title="";width="240px";placement="bottom";trigger="hover";disabled=false;visible=false;popupStyle={};triggerRef;popupRef;show=()=>{if(!this.disabled){this.visible=true;requestAnimationFrame((()=>this.updatePosition()))}};hide=()=>{this.visible=false};toggle=()=>{if(this.visible){this.hide()}else{this.show()}};handleKeydown=e=>{if(this.disabled)return;if(e.key==="Escape"&&this.visible){e.preventDefault();this.hide();return}if(this.trigger==="click"&&r(e.key)){e.preventDefault();this.toggle()}};updatePosition(){if(!this.triggerRef||!this.popupRef)return;const e=this.triggerRef.getBoundingClientRect();const{width:t,height:i}=this.popupRef.getBoundingClientRect();const r=o(e,t,i,this.placement,8);this.popupStyle={top:`${r.top}px`,left:`${r.left}px`,zIndex:String(a())}}render(){const e=this.trigger==="hover"?{onMouseEnter:this.show,onMouseLeave:this.hide}:{onClick:this.toggle};return i("div",{key:"8085a1ce5c74415b6a54b30edb12cd894b6d6407",class:"hb-popover",...e,onKeyDown:this.handleKeydown},i("div",{key:"ca51e0624265da38c99ec4f035776429616a4444",ref:e=>{this.triggerRef=e},class:"hb-popover__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"dialog","aria-expanded":this.visible?"true":"false","aria-disabled":this.disabled?"true":"false",onFocus:this.trigger==="hover"?this.show:undefined,onBlur:this.trigger==="hover"?this.hide:undefined},i("slot",{key:"b2717c611c8f73c54e2463724c9b76bef24d5a88"})),this.visible&&i("div",{key:"13cc85f0c1a2b52c59afa6c9d90f3b70a7b4dbd9",ref:e=>{this.popupRef=e},class:"hb-popover__popup",style:{...this.popupStyle,width:this.width},role:"dialog","aria-labelledby":this.title?"hb-popover__title":undefined,onMouseEnter:()=>this.trigger==="hover"&&this.show(),onMouseLeave:()=>this.trigger==="hover"&&this.hide()},this.title&&i("div",{key:"e89dc3689137445d896cccd3a50a2ab9fa34d677",id:"hb-popover__title",class:"hb-popover__title"},this.title),i("div",{key:"27ab058045cd181074e3436a58ce234d23a648dc",class:"hb-popover__body"},i("slot",{key:"1fc7515e13a753f34d390c10dc8b87d376705a20",name:"content"}))))}};l.style=s;export{l as hb_popover};
2
- //# sourceMappingURL=p-54aa2fd8.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["popoverCss","HbPopoverStyle0","Popover","title","width","placement","trigger","disabled","visible","popupStyle","triggerRef","popupRef","show","this","requestAnimationFrame","updatePosition","hide","toggle","handleKeydown","e","key","preventDefault","isActivationKey","rect","getBoundingClientRect","pw","height","ph","pos","computePosition","top","left","zIndex","String","getNextZIndex","render","events","onMouseEnter","onMouseLeave","onClick","h","class","onKeyDown","ref","el","role","tabindex","onFocus","undefined","onBlur","style","id","name"],"sources":["src/components/Popover/popover.css?tag=hb-popover&encapsulation=shadow","src/components/Popover/Popover.tsx"],"sourcesContent":[":host { display: inline-block; }\n.hb-popover__trigger { display: inline-block; }\n.hb-popover__popup {\n position: fixed; background: var(--hb-color-bg-elevated);\n border-radius: var(--hb-border-radius-base); box-shadow: var(--hb-box-shadow);\n padding: var(--hb-spacing-sm) 0; animation: hb-popover-fade 0.15s ease-out; pointer-events: auto;\n}\n.hb-popover__title { padding: var(--hb-spacing-xs) var(--hb-spacing-md); font-weight: 600; font-size: var(--hb-font-size-sm); border-bottom: 1px solid var(--hb-color-border-secondary); }\n.hb-popover__body { padding: var(--hb-spacing-sm) var(--hb-spacing-md); font-size: var(--hb-font-size-sm); color: var(--hb-color-text); }\n@keyframes hb-popover-fade { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\nimport { computePosition, getNextZIndex, Placement } from '../../utils/popup-manager';\nimport { isActivationKey } from '../../utils/a11y';\n\n/**\n * Popover 气泡卡片\n * 无障碍(对齐 antd / WAI-ARIA):\n * - 触发器 role=button + aria-haspopup=dialog + aria-expanded\n * - 浮层 role=dialog + aria-labelledby(title)\n * - 键盘:trigger 上 Enter/Space 打开/关闭;Esc 关闭\n */\n@Component({ tag: 'hb-popover', styleUrl: 'popover.css', shadow: true })\nexport class Popover {\n @Element() el: HTMLElement;\n // 注意:使用默认值使其成为 required string,避免与 HTMLElement.title(string)\n // 的可选类型冲突;同时保留 Ant Design 兼容的 `title` API。\n @Prop() title: string = '';\n @Prop() width: string = '240px';\n @Prop() placement: Placement = 'bottom';\n @Prop() trigger: 'hover' | 'click' = 'hover';\n @Prop() disabled: boolean = false;\n @State() visible: boolean = false;\n @State() popupStyle: Record<string, string> = {};\n\n private triggerRef?: HTMLElement;\n private popupRef?: HTMLDivElement;\n\n private show = () => { if (!this.disabled) { this.visible = true; requestAnimationFrame(() => this.updatePosition()); } };\n private hide = () => { this.visible = false; };\n private toggle = () => {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n /** 触发器键盘:Enter/Space 切换;Esc 关闭(click 触发模式) */\n private handleKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (e.key === 'Escape' && this.visible) {\n e.preventDefault();\n this.hide();\n return;\n }\n // click 触发模式才允许键盘打开;hover 模式 focus 时已由 onFocus 展开\n if (this.trigger === 'click' && isActivationKey(e.key)) {\n e.preventDefault();\n this.toggle();\n }\n };\n\n private updatePosition() {\n if (!this.triggerRef || !this.popupRef) return;\n const rect = this.triggerRef.getBoundingClientRect();\n const { width: pw, height: ph } = this.popupRef.getBoundingClientRect();\n const pos = computePosition(rect, pw, ph, this.placement, 8);\n this.popupStyle = { top: `${pos.top}px`, left: `${pos.left}px`, zIndex: String(getNextZIndex()) };\n }\n\n render() {\n const events = this.trigger === 'hover'\n ? { onMouseEnter: this.show, onMouseLeave: this.hide }\n : { onClick: this.toggle };\n\n return (\n <div\n class=\"hb-popover\"\n {...events}\n onKeyDown={this.handleKeydown}\n >\n <div\n ref={(el: any) => { this.triggerRef = el; }}\n class=\"hb-popover__trigger\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={this.visible ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n // hover 触发模式:focus 也展开(键盘用户可见)\n onFocus={this.trigger === 'hover' ? this.show : undefined}\n onBlur={this.trigger === 'hover' ? this.hide : undefined}\n >\n <slot />\n </div>\n {this.visible && (\n <div\n ref={(el: any) => { this.popupRef = el; }}\n class=\"hb-popover__popup\"\n style={{ ...this.popupStyle, width: this.width }}\n role=\"dialog\"\n aria-labelledby={this.title ? 'hb-popover__title' : undefined}\n onMouseEnter={() => this.trigger === 'hover' && this.show()}\n onMouseLeave={() => this.trigger === 'hover' && this.hide()}\n >\n {this.title && <div id=\"hb-popover__title\" class=\"hb-popover__title\">{this.title}</div>}\n <div class=\"hb-popover__body\"><slot name=\"content\" /></div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"iIAAA,MAAMA,EAAa,+vMACnB,MAAAC,EAAeD,E,MCWFE,EAAO,M,iDAIVC,MAAgB,GAChBC,MAAgB,QAChBC,UAAuB,SACvBC,QAA6B,QAC7BC,SAAoB,MACnBC,QAAmB,MACnBC,WAAqC,GAEtCC,WACAC,SAEAC,KAAO,KAAQ,IAAKC,KAAKN,SAAU,CAAEM,KAAKL,QAAU,KAAMM,uBAAsB,IAAMD,KAAKE,kB,GAC3FC,KAAO,KAAQH,KAAKL,QAAU,KAAK,EACnCS,OAAS,KACf,GAAIJ,KAAKL,QAAS,CAChBK,KAAKG,M,KACA,CACLH,KAAKD,M,GAKDM,cAAiBC,IACvB,GAAIN,KAAKN,SAAU,OACnB,GAAIY,EAAEC,MAAQ,UAAYP,KAAKL,QAAS,CACtCW,EAAEE,iBACFR,KAAKG,OACL,M,CAGF,GAAIH,KAAKP,UAAY,SAAWgB,EAAgBH,EAAEC,KAAM,CACtDD,EAAEE,iBACFR,KAAKI,Q,GAID,cAAAF,GACN,IAAKF,KAAKH,aAAeG,KAAKF,SAAU,OACxC,MAAMY,EAAOV,KAAKH,WAAWc,wBAC7B,MAAQpB,MAAOqB,EAAIC,OAAQC,GAAOd,KAAKF,SAASa,wBAChD,MAAMI,EAAMC,EAAgBN,EAAME,EAAIE,EAAId,KAAKR,UAAW,GAC1DQ,KAAKJ,WAAa,CAAEqB,IAAK,GAAGF,EAAIE,QAASC,KAAM,GAAGH,EAAIG,SAAUC,OAAQC,OAAOC,K,CAGjF,MAAAC,GACE,MAAMC,EAASvB,KAAKP,UAAY,QAC5B,CAAE+B,aAAcxB,KAAKD,KAAM0B,aAAczB,KAAKG,MAC9C,CAAEuB,QAAS1B,KAAKI,QAEpB,OACEuB,EAAA,OAAApB,IAAA,2CACEqB,MAAM,gBACFL,EACJM,UAAW7B,KAAKK,eAEhBsB,EAAA,OAAApB,IAAA,2CACEuB,IAAMC,IAAc/B,KAAKH,WAAakC,CAAE,EACxCH,MAAM,sBACNI,KAAK,SACLC,SAAUjC,KAAKN,UAAY,EAAI,EAAC,gBAClB,SAAQ,gBACPM,KAAKL,QAAU,OAAS,QAAO,gBAC/BK,KAAKN,SAAW,OAAS,QAExCwC,QAASlC,KAAKP,UAAY,QAAUO,KAAKD,KAAOoC,UAChDC,OAAQpC,KAAKP,UAAY,QAAUO,KAAKG,KAAOgC,WAE/CR,EAAA,QAAApB,IAAA,8CAEDP,KAAKL,SACJgC,EAAA,OAAApB,IAAA,2CACEuB,IAAMC,IAAc/B,KAAKF,SAAWiC,CAAE,EACtCH,MAAM,oBACNS,MAAO,IAAKrC,KAAKJ,WAAYL,MAAOS,KAAKT,OACzCyC,KAAK,SAAQ,kBACIhC,KAAKV,MAAQ,oBAAsB6C,UACpDX,aAAc,IAAMxB,KAAKP,UAAY,SAAWO,KAAKD,OACrD0B,aAAc,IAAMzB,KAAKP,UAAY,SAAWO,KAAKG,QAEpDH,KAAKV,OAASqC,EAAA,OAAApB,IAAA,2CAAK+B,GAAG,oBAAoBV,MAAM,qBAAqB5B,KAAKV,OAC3EqC,EAAA,OAAApB,IAAA,2CAAKqB,MAAM,oBAAmBD,EAAA,QAAApB,IAAA,2CAAMgC,KAAK,c","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["timeSelectCss","HbTimeSelectStyle0","TimeSelect","modelValue","placeholder","disabled","size","clearable","start","end","step","minTime","maxTime","isOpen","inputValue","hbChange","componentDidLoad","this","updateInputValue","document","addEventListener","handleDocumentClick","disconnectedCallback","removeEventListener","e","target","el","contains","handleValueChange","generateTimeOptions","options","startHour","startMinute","split","map","Number","endHour","endMinute","startMinutes","endMinutes","minutes","hour","Math","floor","minute","timeStr","String","padStart","push","handleInputClick","handleClear","stopPropagation","undefined","emit","handleSelect","time","render","timeOptions","showClear","h","key","class","onClick","type","value","readonly"],"sources":["src/components/TimeSelect/time-select.css?tag=hb-time-select&encapsulation=shadow","src/components/TimeSelect/TimeSelect.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-time-select-font-size: 14px;\n --hb-time-select-height: 32px;\n --hb-time-select-border-color: var(--hb-border-color, #dcdfe6);\n --hb-time-select-border-color-hover: var(--hb-color-primary);\n --hb-time-select-bg-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-time-select {\n display: inline-block;\n position: relative;\n width: 200px;\n}\n\n.hb-time-select__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-time-select__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-time-select-height);\n line-height: var(--hb-time-select-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-time-select-font-size);\n color: var(--hb-color-text-regular, #606266);\n background-color: var(--hb-time-select-bg-color);\n border: 1px solid var(--hb-time-select-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-time-select__input:hover:not(:disabled) {\n border-color: var(--hb-time-select-border-color-hover);\n}\n\n.hb-time-select__suffix {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n}\n\n.hb-time-select__clear {\n margin-right: 8px;\n cursor: pointer;\n font-size: 16px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-time-select__arrow {\n font-size: 12px;\n transition: transform 0.3s;\n}\n\n.hb-time-select--open .hb-time-select__arrow {\n transform: rotate(180deg);\n}\n\n.hb-time-select__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-time-select-bg-color);\n border: 1px solid var(--hb-time-select-border-color);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 100%;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.hb-time-select__menu {\n margin: 0;\n padding: 6px 0;\n list-style: none;\n}\n\n.hb-time-select__menu-item {\n padding: 8px 20px;\n font-size: var(--hb-time-select-font-size);\n color: var(--hb-color-text-regular, #606266);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-time-select__menu-item:hover {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-time-select__menu-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n background-color: var(--hb-color-primary-light-9, #ecf5ff);\n}\n\n.hb-time-select--small {\n width: 180px;\n}\n\n.hb-time-select--small .hb-time-select__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n}\n\n.hb-time-select--large {\n width: 220px;\n}\n\n.hb-time-select--large .hb-time-select__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n}\n\n.hb-time-select--disabled {\n cursor: not-allowed;\n}\n\n.hb-time-select--disabled .hb-time-select__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-time-select-border-color);\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\n\n/**\n * TimeSelect 时间选择组件\n * 可用于时间选择\n */\n@Component({\n tag: 'hb-time-select',\n styleUrl: 'time-select.css',\n shadow: true,\n})\nexport class TimeSelect {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string;\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder: string = '请选择时间';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 输入框尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 开始时间\n * @default '09:00'\n */\n @Prop() start: string = '09:00';\n\n /**\n * 结束时间\n * @default '18:00'\n */\n @Prop() end: string = '18:00';\n\n /**\n * 间隔时间\n * @default 60\n */\n @Prop() step: number = 60;\n\n /**\n * 最小时间\n */\n @Prop() minTime?: string;\n\n /**\n * 最大时间\n */\n @Prop() maxTime?: string;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n componentDidLoad() {\n this.updateInputValue();\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n private handleDocumentClick = (e: MouseEvent) => {\n if (!this.isOpen) return;\n const target = e.target as HTMLElement;\n if (!this.el.contains(target)) {\n this.isOpen = false;\n }\n };\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n private updateInputValue() {\n this.inputValue = this.modelValue || '';\n }\n\n private generateTimeOptions(): string[] {\n const options: string[] = [];\n const [startHour, startMinute] = this.start.split(':').map(Number);\n const [endHour, endMinute] = this.end.split(':').map(Number);\n \n const startMinutes = startHour * 60 + startMinute;\n const endMinutes = endHour * 60 + endMinute;\n \n for (let minutes = startMinutes; minutes <= endMinutes; minutes += this.step) {\n const hour = Math.floor(minutes / 60);\n const minute = minutes % 60;\n const timeStr = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n \n if (this.minTime && timeStr < this.minTime) continue;\n if (this.maxTime && timeStr > this.maxTime) continue;\n \n options.push(timeStr);\n }\n \n return options;\n }\n\n private handleInputClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.modelValue = undefined;\n this.inputValue = '';\n this.isOpen = false;\n this.hbChange.emit(undefined);\n };\n\n private handleSelect = (time: string) => {\n this.modelValue = time;\n this.inputValue = time;\n this.isOpen = false;\n this.hbChange.emit(time);\n };\n\n render() {\n const timeOptions = this.generateTimeOptions();\n const showClear = this.clearable && this.modelValue;\n\n return (\n <div\n class={{\n 'hb-time-select': true,\n 'hb-time-select--open': this.isOpen,\n 'hb-time-select--disabled': this.disabled,\n [`hb-time-select--${this.size}`]: true,\n }}\n >\n <div class=\"hb-time-select__input-wrapper\" onClick={this.handleInputClick}>\n <input\n type=\"text\"\n class=\"hb-time-select__input\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly\n />\n <span class=\"hb-time-select__suffix\">\n {showClear && (\n <span class=\"hb-time-select__clear\" onClick={this.handleClear}>\n ×\n </span>\n )}\n <span class=\"hb-time-select__arrow\">▼</span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-time-select__dropdown\">\n <ul class=\"hb-time-select__menu\">\n {timeOptions.map((time) => (\n <li\n class={{\n 'hb-time-select__menu-item': true,\n 'hb-time-select__menu-item--selected': time === this.modelValue,\n }}\n onClick={() => this.handleSelect(time)}\n >\n {time}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["switchCss","HbSwitchStyle0","Switch","modelValue","disabled","activeText","inactiveText","activeColor","inactiveColor","activeValue","inactiveValue","width","inlinePrompt","hbChange","handleChange","e","this","preventDefault","checked","target","value","emit","render","isChecked","hasText","h","key","class","style","type","role","onChange","undefined"],"sources":["src/components/Switch/switch.css?tag=hb-switch&encapsulation=shadow","src/components/Switch/Switch.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-switch-width: 40px;\n --hb-switch-active-color: var(--hb-color-primary);\n --hb-switch-inactive-color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-switch {\n display: inline-flex;\n align-items: center;\n position: relative;\n font-size: 14px;\n line-height: 20px;\n height: 20px;\n vertical-align: middle;\n cursor: pointer;\n}\n\n.hb-switch__original {\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0;\n position: absolute;\n}\n\n.hb-switch__core {\n margin: 0;\n display: inline-block;\n position: relative;\n width: var(--hb-switch-width);\n height: 20px;\n border: 1px solid var(--hb-switch-inactive-color);\n outline: none;\n border-radius: 10px;\n box-sizing: border-box;\n background: var(--hb-switch-inactive-color);\n cursor: pointer;\n transition: border-color 0.3s, background-color 0.3s;\n vertical-align: middle;\n}\n\n.hb-switch__core::after {\n content: '';\n position: absolute;\n top: 1px;\n left: 1px;\n border-radius: 100%;\n transition: all 0.3s;\n width: 16px;\n height: 16px;\n background-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-switch--checked .hb-switch__core {\n border-color: var(--hb-switch-active-color);\n background-color: var(--hb-switch-active-color);\n}\n\n.hb-switch--checked .hb-switch__core::after {\n left: 100%;\n margin-left: -17px;\n}\n\n.hb-switch__inner {\n position: absolute;\n left: 23px;\n font-size: 12px;\n color: var(--hb-color-white, #ffffff);\n transition: all 0.3s;\n}\n\n.hb-switch--checked .hb-switch__inner {\n left: 5px;\n}\n\n.hb-switch--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.hb-switch--disabled .hb-switch__core {\n cursor: not-allowed;\n}\n\n\n/* ---- inlinePrompt:文字塞进圆点两侧 ---- */\n.hb-switch--inline-prompt .hb-switch__inner--inline {\n left: 0;\n right: 0;\n display: flex;\n height: 100%;\n align-items: center;\n font-size: 12px;\n color: #fff;\n pointer-events: none;\n}\n\n.hb-switch__inner-text {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n/* 关闭态:左侧(inactive)显示,圆点在右 */\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--inactive {\n opacity: 1;\n padding-left: 6px;\n padding-right: 22px;\n justify-content: flex-start;\n}\n\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--active {\n display: none;\n}\n\n/* 打开态:右侧(active)显示,圆点在左 */\n.hb-switch--checked .hb-switch__inner-text--active {\n opacity: 1;\n padding-left: 22px;\n padding-right: 6px;\n justify-content: flex-end;\n}\n\n.hb-switch--checked .hb-switch__inner-text--inactive {\n display: none;\n}\n","import { Component, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Switch 开关组件\n * 表示两种相互对立的状态间的切换,多用于触发「开/关」\n */\n@Component({\n tag: 'hb-switch',\n styleUrl: 'switch.css',\n shadow: true,\n})\nexport class Switch {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示文字描述\n * @default false\n */\n @Prop() activeText?: string;\n\n /**\n * 关闭时的文字描述\n */\n @Prop() inactiveText?: string;\n\n /**\n * 打开时的背景色\n */\n @Prop() activeColor?: string;\n\n /**\n * 关闭时的背景色\n */\n @Prop() inactiveColor?: string;\n\n /**\n * 打开时的值\n * @default true\n */\n @Prop() activeValue: boolean | string | number = true;\n\n /**\n * 关闭时的值\n * @default false\n */\n @Prop() inactiveValue: boolean | string | number = false;\n\n /**\n * 宽度\n */\n @Prop() width?: number;\n\n /**\n * 是否内联提示\n * @default false\n */\n @Prop() inlinePrompt: boolean = false;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<boolean | string | number>;\n\n private handleChange = (e: Event) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n const checked = (e.target as HTMLInputElement).checked;\n const value = checked ? this.activeValue : this.inactiveValue;\n \n this.modelValue = checked;\n this.hbChange.emit(value);\n };\n\n render() {\n const isChecked = this.modelValue === this.activeValue;\n // 宽度:inlinePrompt 与 text 模式都加宽;inlinePrompt 文字塞进圆点两侧,仍需更宽一些\n const hasText = !!(this.activeText || this.inactiveText);\n const width = this.width || (hasText ? (this.inlinePrompt ? 50 : 60) : 40);\n\n return (\n <label\n class={{\n 'hb-switch': true,\n 'hb-switch--checked': isChecked,\n 'hb-switch--disabled': this.disabled,\n 'hb-switch--inline-prompt': this.inlinePrompt && hasText,\n }}\n style={{\n '--hb-switch-width': `${width}px`,\n '--hb-switch-active-color': this.activeColor || 'var(--hb-color-primary)',\n '--hb-switch-inactive-color': this.inactiveColor || 'var(--hb-color-text-placeholder, #c0c4cc)',\n }}\n >\n <input\n type=\"checkbox\"\n class=\"hb-switch__original\"\n role=\"switch\"\n aria-checked={isChecked ? 'true' : 'false'}\n checked={isChecked}\n disabled={this.disabled}\n onChange={this.handleChange}\n aria-label={this.activeText || this.inactiveText || undefined}\n />\n <span class=\"hb-switch__core\">\n {hasText && !this.inlinePrompt && (\n <span class=\"hb-switch__inner\">\n {isChecked ? this.activeText : this.inactiveText}\n </span>\n )}\n {hasText && this.inlinePrompt && (\n // 内联提示:开/关文字塞进圆点两侧,随切换显隐\n <span class=\"hb-switch__inner hb-switch__inner--inline\">\n <span class=\"hb-switch__inner-text hb-switch__inner-text--active\">{this.activeText}</span>\n <span class=\"hb-switch__inner-text hb-switch__inner-text--inactive\">{this.inactiveText}</span>\n </span>\n )}\n </span>\n </label>\n );\n }\n}\n\n"],"mappings":"kDAAA,MAAMA,EAAY,gkPAClB,MAAAC,EAAeD,E,MCUFE,EAAM,M,4DAIQC,WAAsB,MAMvCC,SAAoB,MAMpBC,WAKAC,aAKAC,YAKAC,cAMAC,YAAyC,KAMzCC,cAA2C,MAK3CC,MAMAC,aAAwB,MAKvBC,SAEDC,aAAgBC,IACtB,GAAIC,KAAKZ,SAAU,CACjBW,EAAEE,iBACF,M,CAGF,MAAMC,EAAWH,EAAEI,OAA4BD,QAC/C,MAAME,EAAQF,EAAUF,KAAKP,YAAcO,KAAKN,cAEhDM,KAAKb,WAAae,EAClBF,KAAKH,SAASQ,KAAKD,EAAM,EAG3B,MAAAE,GACE,MAAMC,EAAYP,KAAKb,aAAea,KAAKP,YAE3C,MAAMe,KAAaR,KAAKX,YAAcW,KAAKV,cAC3C,MAAMK,EAAQK,KAAKL,QAAUa,EAAWR,KAAKJ,aAAe,GAAK,GAAM,IAEvE,OACEa,EAAA,SAAAC,IAAA,2CACEC,MAAO,CACL,YAAa,KACb,qBAAsBJ,EACtB,sBAAuBP,KAAKZ,SAC5B,2BAA4BY,KAAKJ,cAAgBY,GAEnDI,MAAO,CACL,oBAAqB,GAAGjB,MACxB,2BAA4BK,KAAKT,aAAe,0BAChD,6BAA8BS,KAAKR,eAAiB,8CAGtDiB,EAAA,SAAAC,IAAA,2CACEG,KAAK,WACLF,MAAM,sBACNG,KAAK,SAAQ,eACCP,EAAY,OAAS,QACnCL,QAASK,EACTnB,SAAUY,KAAKZ,SACf2B,SAAUf,KAAKF,aAAY,aACfE,KAAKX,YAAcW,KAAKV,cAAgB0B,YAEtDP,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACTH,IAAYR,KAAKJ,cAChBa,EAAA,QAAAC,IAAA,2CAAMC,MAAM,oBACTJ,EAAYP,KAAKX,WAAaW,KAAKV,cAGvCkB,GAAWR,KAAKJ,cAEfa,EAAA,QAAAC,IAAA,2CAAMC,MAAM,6CACVF,EAAA,QAAAC,IAAA,2CAAMC,MAAM,uDAAuDX,KAAKX,YACxEoB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,yDAAyDX,KAAKV,gB","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,g as a,h as r}from"./p-e42dfa95.js";import{c as i}from"./p-4ef5a884.js";const s='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{--hb-cascader-font-size:14px;--hb-cascader-font-size-large:16px;--hb-cascader-font-size-small:12px;--hb-cascader-border-color:var(--hb-border-color,#dcdfe6);--hb-cascader-border-color-hover:var(--hb-color-primary);--hb-cascader-bg-color:var(--hb-color-white,#fff);--hb-cascader-text-color:var(--hb-color-text-regular,#606266);--hb-cascader-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);--hb-cascader-disabled-color:var(--hb-color-text-disabled,#c0c4cc);--hb-cascader-disabled-bg-color:var(--hb-fill-color-light,#f5f7fa);display:inline-block;position:relative}.hb-cascader{display:inline-block;font-size:var(--hb-cascader-font-size);line-height:32px;position:relative}.hb-cascader__input-wrapper{cursor:pointer;display:inline-block;position:relative;width:100%}.hb-cascader__input{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-cascader-text-color);cursor:pointer;display:inline-block;font-size:var(--hb-cascader-font-size);height:32px;line-height:32px;outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-cascader__input::placeholder{color:var(--hb-cascader-placeholder-color)}.hb-cascader__input:focus,.hb-cascader__input:hover:not(:disabled){border-color:var(--hb-cascader-border-color-hover)}.hb-cascader__input:disabled{background-color:var(--hb-cascader-disabled-bg-color);border-color:var(--hb-cascader-border-color);color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__suffix{align-items:center;color:var(--hb-cascader-text-color);display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-cascader__clear{align-items:center;color:var(--hb-cascader-placeholder-color);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-cascader__clear svg{height:100%;width:100%}.hb-cascader__clear:hover{color:var(--hb-cascader-text-color)}.hb-cascader__arrow{align-items:center;color:var(--hb-cascader-placeholder-color);display:inline-flex;height:12px;transition:transform .3s;width:12px}.hb-cascader__arrow svg{height:100%;width:100%}.hb-cascader--open .hb-cascader__arrow{transform:rotate(180deg)}.hb-cascader__dropdown{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;max-height:300px;min-width:180px;overflow-y:auto;position:absolute;top:100%;width:max-content;z-index:1000}.hb-cascader__menus{display:flex;padding:6px 0}.hb-cascader__menu-list{list-style:none;margin:0;max-height:300px;min-width:180px;overflow-y:auto;padding:0}.hb-cascader__menus .hb-cascader__menu-list:not(:last-child){border-right:1px solid var(--hb-border-color-secondary,var(--hb-cascader-border-color))}.hb-cascader__menu-item{align-items:center;color:var(--hb-cascader-text-color);cursor:pointer;display:flex;font-size:var(--hb-cascader-font-size);justify-content:space-between;padding:8px 20px;transition:background-color .2s}.hb-cascader__menu-item:hover:not(.hb-cascader__menu-item--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-cascader__menu-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-cascader__menu-item--disabled{color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__menu-item-label{flex:1}.hb-cascader__menu-item-arrow{align-items:center;color:var(--hb-cascader-placeholder-color);display:inline-flex;height:12px;margin-left:8px;width:12px}.hb-cascader__menu-item-arrow svg{height:100%;width:100%}.hb-cascader__menu-item-loading{align-items:center;color:var(--hb-color-primary,#1677ff);display:inline-flex;height:12px;margin-left:8px;width:12px}.hb-cascader__menu-item-loading-svg{animation:hb-cascader-spin .8s linear infinite;height:100%;width:100%}.hb-cascader__menu-list--loading .hb-cascader__menu-item--loading{color:var(--hb-color-text-placeholder,#c0c4cc);justify-content:center}@keyframes hb-cascader-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.hb-cascader--large,.hb-cascader--large .hb-cascader__input{font-size:var(--hb-cascader-font-size-large);line-height:40px}.hb-cascader--large .hb-cascader__input{height:40px}.hb-cascader--small,.hb-cascader--small .hb-cascader__input{font-size:var(--hb-cascader-font-size-small);line-height:24px}.hb-cascader--small .hb-cascader__input{height:24px;padding:0 25px 0 12px}.hb-cascader--disabled{cursor:not-allowed}.hb-cascader__search{border-bottom:1px solid var(--hb-cascader-border-color);padding:8px}.hb-cascader__search-input{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-cascader-text-color);cursor:text;font-size:var(--hb-cascader-font-size);height:28px;line-height:28px;outline:none;padding:0 8px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-cascader__search-input:focus{border-color:var(--hb-cascader-border-color-hover)}.hb-cascader__search-results{max-height:264px;min-width:180px;overflow-y:auto;padding:6px 0}.hb-cascader__search-item{color:var(--hb-cascader-text-color);cursor:pointer;font-size:var(--hb-cascader-font-size);padding:8px 20px;transition:background-color .2s;white-space:nowrap}.hb-cascader__search-item:hover:not(.hb-cascader__search-item--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-cascader__search-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-cascader__search-item--disabled{color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__search-empty{color:var(--hb-cascader-placeholder-color);font-size:var(--hb-cascader-font-size);padding:16px 0;text-align:center}.hb-cascader--multiple .hb-cascader__input-wrapper{align-items:center;background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;display:flex;flex-wrap:wrap;min-height:32px;padding:3px 30px 3px 4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-cascader--multiple .hb-cascader__input-wrapper:hover{border-color:var(--hb-cascader-border-color-hover)}.hb-cascader--multiple .hb-cascader__input{background-color:#0000;border:none;flex:1;height:24px;line-height:24px;min-width:40px;padding:0 4px;width:auto}.hb-cascader__tag{align-items:center;background-color:var(--hb-fill-color,#f0f2f5);border-radius:3px;color:var(--hb-color-text-primary,#303133);display:inline-flex;font-size:var(--hb-cascader-font-size-small);height:22px;margin:2px;max-width:100%;padding:0 6px}.hb-cascader__tag-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hb-cascader__tag-close{align-items:center;color:var(--hb-cascader-placeholder-color);cursor:pointer;display:inline-flex;height:12px;justify-content:center;line-height:1;margin-left:4px;transition:color .2s;width:12px}.hb-cascader__tag-close svg{height:100%;width:100%}.hb-cascader__tag-close:hover{color:var(--hb-color-text-primary,#606266)}.hb-cascader__tag-overflow{align-items:center;color:var(--hb-cascader-text-color);display:inline-flex;font-size:var(--hb-cascader-font-size-small);height:22px;margin:2px;padding:0 6px}.hb-cascader__menu-item-checkbox{align-items:center;background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:2px;display:inline-flex;flex-shrink:0;height:14px;justify-content:center;margin-right:8px;transition:background-color .2s,border-color .2s;width:14px}.hb-cascader__menu-item-checkbox--checked,.hb-cascader__menu-item-checkbox--indeterminate{background-color:var(--hb-color-primary);border-color:var(--hb-color-primary)}.hb-cascader__menu-item-checkbox--checked:after{border:2px solid #fff;border-left:0;border-top:0;content:"";height:8px;transform:rotate(45deg)translate(-1px,-1px);width:4px}.hb-cascader__menu-item-checkbox--indeterminate:after{background-color:#fff;content:"";height:2px;width:8px}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const o=s;const c=class{constructor(a){e(this,a);this.hbChange=t(this,"hbChange",7);this.hbExpandChange=t(this,"hbExpandChange",7)}get el(){return a(this)}modelValue;options=[];placeholder="请选择";disabled=false;size="default";clearable=false;showAllLevels=true;name;inputId;separator=" / ";emitPath=true;filterable=false;lazy=false;load;multiple=false;checkStrictly=false;maxTagCount;isOpen=false;inputValue="";searchValue="";loadingKeys=new Set;filteredPaths=[];activePath=[];hbChange;hbExpandChange;clickOutside=i({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.closeAndClearSearch()}});componentDidLoad(){this.clickOutside=i({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.closeAndClearSearch()}});this.clickOutside.connect();this.updateInputValue()}closeAndClearSearch(){this.isOpen=false;this.searchValue="";this.filteredPaths=[]}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}updateInputValue(){if(this.multiple){this.inputValue="";return}if(!this.modelValue||this.modelValue.length===0){this.inputValue="";return}const e=this.modelValue;if(!this.showAllLevels){const t=e[e.length-1];const a=this.findOptionByValue(this.options,t);this.inputValue=a?a.label:"";return}const t=[];let a=this.options;for(const r of e){const e=a.find((e=>e.value===r));if(e){t.push(e.label);a=e.children||[]}else{break}}this.inputValue=t.join(this.separator)}findOptionByValue(e,t){for(const a of e){if(a.value===t)return a;if(a.children){const e=this.findOptionByValue(a.children,t);if(e)return e}}return null}getMultiModel(){if(!this.multiple)return[];const e=this.modelValue;if(Array.isArray(e)&&e.length>0&&Array.isArray(e[0]))return e;return[]}pathEquals(e,t){if(!e||e.length!==t.length)return false;return e.every(((e,a)=>e===t[a]))}collectLeafValuePaths(e,t){const a=[...t,e.value];const r=e.children&&e.children.length>0;if(!r||e.leaf)return[a];const i=[];for(const t of e.children){i.push(...this.collectLeafValuePaths(t,a))}return i}getCheckState(e,t){const a=[...t,e.value];const r=this.getMultiModel();if(this.checkStrictly){return r.some((e=>this.pathEquals(e,a)))?"checked":"unchecked"}const i=this.collectLeafValuePaths(e,t);if(i.every((e=>r.some((t=>this.pathEquals(t,e))))))return"checked";if(i.some((e=>r.some((t=>this.pathEquals(t,e))))))return"indeterminate";return"unchecked"}handleCheck(e,t){let a=this.getMultiModel().map((e=>[...e]));const r=[...t,e.value];if(this.checkStrictly){const e=a.findIndex((e=>this.pathEquals(e,r)));if(e>=0)a.splice(e,1);else a.push(r)}else{const r=this.collectLeafValuePaths(e,t);const i=r.every((e=>a.some((t=>this.pathEquals(t,e)))));if(i){a=a.filter((e=>!r.some((t=>this.pathEquals(t,e)))))}else{for(const e of r){if(!a.some((t=>this.pathEquals(t,e))))a.push([...e])}}}this.modelValue=a;this.hbChange.emit(a)}getDisplayTags(){return this.getMultiModel().map((e=>{const t=e.map((e=>{const t=this.findOptionByValue(this.options,e);return t?t.label:String(e)}));const a=this.showAllLevels?t.join(this.separator):t[t.length-1];return{label:a,path:e}}))}handleTagRemove=(e,t)=>{t.stopPropagation();const a=this.getMultiModel().filter((t=>!this.pathEquals(t,e)));this.modelValue=a;this.hbChange.emit(a)};hasValue(){return this.multiple?this.getMultiModel().length>0:!!this.modelValue&&this.modelValue.length>0}handleInputClick=()=>{if(this.disabled)return;if(this.isOpen){this.closeAndClearSearch()}else{this.isOpen=true}};handleKeyDown=e=>{if(this.disabled)return;const t=e.key;if(!this.isOpen){if(t==="Enter"||t===" "||t==="ArrowDown"){e.preventDefault();this.isOpen=true}return}if(t==="Escape"){e.preventDefault();this.closeAndClearSearch()}else if(t==="Enter"&&this.activePath.length>0&&!this.multiple){e.preventDefault();const t=this.activePath[this.activePath.length-1];const a=this.activePath.slice(0,-1);this.handleSelect(t,a)}};handleSearchInput=e=>{const t=e.target;this.searchValue=t.value;this.filteredPaths=this.collectFilteredPaths(this.searchValue)};collectFilteredPaths(e){const t=e.trim().toLowerCase();if(!t)return[];const a=[];const r=(e,i)=>{for(const s of e){const e=[...i,s];if(s.label.toLowerCase().includes(t))a.push(e);if(s.children&&s.children.length>0)r(s.children,e)}};r(this.options,[]);return a}handleSearchSelect=e=>{const t=e.map((e=>e.value));if(this.multiple){let e=this.getMultiModel().map((e=>[...e]));const a=e.findIndex((e=>this.pathEquals(e,t)));if(a>=0)e.splice(a,1);else e.push(t);this.modelValue=e;this.hbChange.emit(e);this.searchValue="";this.filteredPaths=[];return}const a=e[e.length-1];const r=!a.children||a.children.length===0||a.leaf;this.searchValue="";this.filteredPaths=[];if(r||this.checkStrictly){this.modelValue=t;this.updateInputValue();this.hbChange.emit(t);this.isOpen=false;this.activePath=[]}else{this.activePath=t;this.hbExpandChange.emit(t)}};handleClear=e=>{e.stopPropagation();if(this.multiple){this.modelValue=[];this.hbChange.emit([])}else{this.modelValue=undefined;this.inputValue="";this.hbChange.emit(undefined)}this.isOpen=false};handleItemClick=(e,t)=>{if(this.multiple){const a=!e.children||e.children.length===0||e.leaf;if(a){this.handleCheck(e,t)}else{const a=[...t,e.value];this.activePath=a;this.hbExpandChange.emit(a)}return}this.handleSelect(e.value,t)};handleSelect(e,t){const a=[...t,e];let r=this.options;let i=null;for(const e of a){i=r.find((t=>t.value===e))||null;if(!i)break;r=i.children||[]}if(this.lazy&&this.load&&i&&i.children===undefined&&!i.leaf){this.activePath=a;this.hbExpandChange.emit(a);void this.loadChildren(i,a);return}const s=!i||!i.children||i.children.length===0||i.leaf;if(this.checkStrictly||s){this.modelValue=a;this.updateInputValue();this.hbChange.emit(a);this.isOpen=false;this.activePath=[]}else{this.activePath=a;this.hbExpandChange.emit(a)}}async loadChildren(e,t){if(!this.load)return;this.loadingKeys=new Set([...this.loadingKeys,e.value]);try{const t=await this.load(e);this.options=this.replaceOptionChildren(this.options,e.value,t)}catch(t){console.error("[hb-cascader] lazy load failed:",t);this.activePath=this.activePath.slice(0,this.activePath.indexOf(e.value)+1)}finally{const t=new Set(this.loadingKeys);t.delete(e.value);this.loadingKeys=t}}replaceOptionChildren(e,t,a){return e.map((e=>{if(e.value===t)return{...e,children:a};if(e.children&&e.children.length>0){return{...e,children:this.replaceOptionChildren(e.children,t,a)}}return e}))}render(){return r("div",{key:"1a9caab72a8d1fc2b0db2e173b4a748fc45ff276",class:{"hb-cascader":true,"hb-cascader--open":this.isOpen,"hb-cascader--disabled":this.disabled,"hb-cascader--multiple":this.multiple,[`hb-cascader--${this.size}`]:true}},r("div",{key:"7a9d75ec8c3352681630a89b4a10704b5b16803d",class:"hb-cascader__input-wrapper",onClick:this.handleInputClick},this.multiple&&this.getDisplayTags().slice(0,this.maxTagCount===undefined?undefined:this.maxTagCount).map((e=>r("span",{class:"hb-cascader__tag"},r("span",{class:"hb-cascader__tag-label"},e.label),!this.disabled&&r("span",{class:"hb-cascader__tag-close",role:"button","aria-label":"删除",tabindex:0,onClick:t=>this.handleTagRemove(e.path,t),onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();this.handleTagRemove(e.path,t)}}},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},r("path",{d:"M6 6l12 12M18 6L6 18"})))))),this.multiple&&this.maxTagCount!==undefined&&this.getDisplayTags().length>this.maxTagCount&&r("span",{key:"9cf422ddb7983b98702921a6f0ea0d39050f0809",class:"hb-cascader__tag-overflow"},"+",this.getDisplayTags().length-this.maxTagCount),r("input",{key:"e7d65af511b4cbd1ceb04e1a5d3b5c49675f35d7",type:"text",id:this.inputId,name:this.name,class:"hb-cascader__input",placeholder:this.hasValue()?"":this.placeholder,value:this.multiple?"":this.inputValue,disabled:this.disabled,readonly:true,role:"combobox","aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false",onKeyDown:this.handleKeyDown}),r("span",{key:"8a12e6b4fc1f9c4e837804b6000991f9fc0a7777",class:"hb-cascader__suffix"},this.clearable&&this.hasValue()&&r("span",{key:"58f85ec90ae02f51e5feff247238a2fdf4c972cc",class:"hb-cascader__clear",role:"button","aria-label":"清空",tabindex:0,onClick:this.handleClear,onKeyDown:e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault();this.handleClear(e)}}},r("svg",{key:"276124b46eab355e251f9f28b83d595a752a26a6",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},r("path",{key:"3233726965c70fe312cf6b18986a3a45daddfa94",d:"M6 6l12 12M18 6L6 18"}))),r("span",{key:"5da5ecd851b2ae748d64a637c67c85c017e4044f",class:"hb-cascader__arrow","aria-hidden":"true"},r("svg",{key:"259fa6408e33a8566c3cd4b2c555594f277c0158",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},r("path",{key:"2ab1e510baa70268de00e17b13bc52f582927182",d:"M6 9l6 6 6-6"}))))),this.isOpen&&r("div",{key:"bb89f5c9c8dec2bc41eed6963aab25197673dee3",class:"hb-cascader__dropdown"},this.filterable&&r("div",{key:"d8a3b255c88bf6267588eea3313814f3b37c781f",class:"hb-cascader__search"},r("input",{key:"1f9830abe864388f075b9b70a9b3c07def27aeda",type:"text",class:"hb-cascader__search-input",placeholder:"搜索",value:this.searchValue,onInput:this.handleSearchInput,"aria-label":"搜索选项"})),this.filterable&&this.searchValue.trim()!==""?this.renderSearchResults():r("div",{class:"hb-cascader__menus",role:"listbox","aria-multiselectable":this.multiple?"true":"false"},this.renderCascaderMenus())))}renderCascaderMenus(){const e=[];let t=this.options;let a=[];e.push(this.renderMenu(t,a));for(let r=0;r<this.activePath.length;r++){const i=this.activePath[r];const s=t.find((e=>e.value===i));if(!s)break;if(s.children===undefined&&this.loadingKeys.has(s.value)){e.push(this.renderLoadingMenu());break}if(s.children&&s.children.length>0){a=[...a,i];t=s.children;e.push(this.renderMenu(t,a))}else{break}}return e}renderLoadingMenu(){return r("ul",{class:"hb-cascader__menu-list hb-cascader__menu-list--loading",role:"status","aria-live":"polite"},r("li",{class:"hb-cascader__menu-item hb-cascader__menu-item--loading"},r("span",{class:"hb-cascader__menu-item-label"},"加载中…")))}renderSearchResults(){if(this.filteredPaths.length===0){return r("div",{class:"hb-cascader__search-empty",role:"status"},"无匹配数据")}return r("div",{class:"hb-cascader__search-results",role:"listbox","aria-label":"搜索结果"},this.filteredPaths.map((e=>{const t=e.map((e=>e.label)).join(this.separator);const a=e.map((e=>e.value));const i=e[e.length-1];const s=!!i.disabled;const o=this.multiple?this.getMultiModel().some((e=>this.pathEquals(e,a))):!!this.modelValue&&this.pathEquals(this.modelValue,a);return r("div",{class:{"hb-cascader__search-item":true,"hb-cascader__search-item--selected":o,"hb-cascader__search-item--disabled":s},role:"option","aria-selected":o?"true":"false","aria-disabled":s?"true":undefined,onClick:()=>!s&&this.handleSearchSelect(e)},this.multiple&&r("span",{class:"hb-cascader__menu-item-checkbox","data-state":o?"checked":"unchecked",role:"checkbox","aria-checked":o?"true":"false"}),t)})))}renderMenu(e,t){if(!e||e.length===0)return null;return r("ul",{class:"hb-cascader__menu-list",role:"group"},e.map((e=>{const a=this.getCheckState(e,t);const i=!this.multiple&&t.length>0&&!!this.modelValue&&t.every(((e,t)=>this.modelValue[t]===e))&&this.modelValue.length===t.length+1&&this.modelValue[t.length]===e.value;const s=this.loadingKeys.has(e.value)?false:e.children&&e.children.length>0||this.lazy&&e.children===undefined&&!e.leaf;return r("li",{class:{"hb-cascader__menu-item":true,"hb-cascader__menu-item--selected":i,"hb-cascader__menu-item--disabled":e.disabled},role:"option","aria-selected":i?"true":"false","aria-disabled":e.disabled?"true":undefined,onClick:()=>!e.disabled&&this.handleItemClick(e,t)},this.multiple&&r("span",{class:{"hb-cascader__menu-item-checkbox":true,"hb-cascader__menu-item-checkbox--checked":a==="checked","hb-cascader__menu-item-checkbox--indeterminate":a==="indeterminate"},"data-state":a,role:"checkbox","aria-checked":a==="indeterminate"?"mixed":a==="checked"?"true":"false",onClick:a=>{a.stopPropagation();if(!e.disabled)this.handleCheck(e,t)}}),r("span",{class:"hb-cascader__menu-item-label"},e.label),this.loadingKeys.has(e.value)?r("span",{class:"hb-cascader__menu-item-loading","aria-hidden":"true"},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round",class:"hb-cascader__menu-item-loading-svg"},r("path",{d:"M12 5V2L8 6l4 4V7a5 5 0 1 1-5 5H5a7 7 0 1 0 7-7z"}))):s?r("span",{class:"hb-cascader__menu-item-arrow","aria-hidden":"true"},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},r("path",{d:"M9 6l6 6-6 6"}))):null)})))}static get watchers(){return{modelValue:["handleValueChange"]}}};c.style=o;export{c as hb_cascader};
2
- //# sourceMappingURL=p-639f167d.entry.js.map