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":["dialogCss","HbDialogStyle0","Dialog","modelValue","title","width","fullscreen","modal","closeOnClickModal","closeOnPressEscape","showClose","destroyOnClose","hbOpen","hbClose","hbClosed","zIndex","panelRef","trap","handleVisibleChange","newVal","this","getNextZIndex","lockScroll","emit","document","addEventListener","handleKeyDown","unlockScroll","removeEventListener","disconnectedCallback","disconnect","componentDidRender","createFocusTrap","container","connect","e","key","close","setTimeout","handleOverlayClick","render","h","class","style","String","onClick","ref","el","role","type","name"],"sources":["src/components/Dialog/dialog.css?tag=hb-dialog&encapsulation=shadow","src/components/Dialog/Dialog.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n\n.hb-dialog-wrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n}\n\n.hb-dialog-wrapper--hidden {\n display: none;\n}\n\n.hb-dialog__overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--hb-color-bg-mask);\n transition: opacity 0.3s;\n pointer-events: auto;\n}\n\n.hb-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.9);\n background-color: var(--hb-dialog-bg);\n border-radius: var(--hb-dialog-radius);\n box-shadow: var(--hb-dialog-shadow);\n pointer-events: auto;\n opacity: 0;\n transition: opacity 0.3s, transform 0.3s;\n display: flex;\n flex-direction: column;\n max-height: 90vh;\n overflow: hidden;\n}\n\n.hb-dialog--visible {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n}\n\n.hb-dialog--fullscreen {\n width: 100% !important;\n height: 100vh;\n top: 0;\n left: 0;\n transform: none;\n border-radius: 0;\n max-height: 100vh;\n}\n.hb-dialog--fullscreen.hb-dialog--visible {\n transform: none;\n}\n\n.hb-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--hb-spacing-md) var(--hb-spacing-lg);\n border-bottom: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-dialog__title {\n font-size: var(--hb-font-size-lg);\n font-weight: 600;\n color: var(--hb-color-text-primary);\n}\n\n.hb-dialog__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n font-size: 18px;\n color: var(--hb-color-text-secondary);\n cursor: pointer;\n border-radius: var(--hb-border-radius-sm);\n transition: all var(--hb-transition-duration);\n}\n\n.hb-dialog__close:hover {\n background-color: var(--hb-color-fill-tertiary);\n color: var(--hb-color-text-primary);\n}\n\n.hb-dialog__body {\n flex: 1;\n padding: var(--hb-spacing-lg);\n overflow-y: auto;\n color: var(--hb-color-text);\n font-size: var(--hb-font-size-base);\n}\n\n.hb-dialog__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--hb-spacing-xs);\n padding: var(--hb-spacing-sm) var(--hb-spacing-lg);\n border-top: 1px solid var(--hb-color-border-secondary);\n}\n","import { Component, h, Prop, Event, EventEmitter, Watch, Element } from '@stencil/core';\nimport { lockScroll, unlockScroll, getNextZIndex } from '../../utils/popup-manager';\nimport { createFocusTrap, FocusTrap } from '../../utils/a11y';\n\n/**\n * Dialog 对话框组件\n * 在保留当前页面状态的情况下,告知用户并承载相关操作\n */\n@Component({\n tag: 'hb-dialog',\n styleUrl: 'dialog.css',\n shadow: true,\n})\nexport class Dialog {\n @Element() el: HTMLElement;\n\n /** 是否显示 */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /** 标题 */\n @Prop() title: string = '';\n\n /** 宽度 */\n @Prop() width: string = '50%';\n\n /** 是否全屏 */\n @Prop() fullscreen: boolean = false;\n\n /** 是否显示遮罩 */\n @Prop() modal: boolean = true;\n\n /** 是否点击遮罩关闭 */\n @Prop() closeOnClickModal: boolean = true;\n\n /** 是否按 ESC 关闭 */\n @Prop() closeOnPressEscape: boolean = true;\n\n /** 是否显示关闭按钮 */\n @Prop() showClose: boolean = true;\n\n /** 关闭时销毁 */\n @Prop() destroyOnClose: boolean = false;\n\n /** 打开事件 */\n @Event() hbOpen: EventEmitter<void>;\n\n /** 关闭事件 */\n @Event() hbClose: EventEmitter<void>;\n\n /** 已关闭动画结束事件 */\n @Event() hbClosed: EventEmitter<void>;\n\n private zIndex: number = 0;\n private panelRef?: HTMLElement;\n private trap?: FocusTrap;\n\n @Watch('modelValue')\n handleVisibleChange(newVal: boolean) {\n if (newVal) {\n this.zIndex = getNextZIndex();\n if (this.modal) lockScroll();\n this.hbOpen.emit();\n document.addEventListener('keydown', this.handleKeyDown);\n } else {\n if (this.modal) unlockScroll();\n document.removeEventListener('keydown', this.handleKeyDown);\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 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 private handleKeyDown = (e: KeyboardEvent) => {\n if (this.closeOnPressEscape && e.key === 'Escape') {\n this.close();\n }\n };\n\n private close = () => {\n this.modelValue = false;\n this.hbClose.emit();\n setTimeout(() => this.hbClosed.emit(), 300);\n };\n\n private handleOverlayClick = () => {\n if (this.closeOnClickModal) this.close();\n };\n\n render() {\n if (this.destroyOnClose && !this.modelValue) return null;\n\n return (\n <div class={{ 'hb-dialog-wrapper': true, 'hb-dialog-wrapper--hidden': !this.modelValue }}>\n {this.modal && (\n <div\n class=\"hb-dialog__overlay\"\n style={{ zIndex: String(this.zIndex) }}\n onClick={this.handleOverlayClick}\n />\n )}\n <div\n ref={(el) => (this.panelRef = el as HTMLElement)}\n class={{\n 'hb-dialog': true,\n 'hb-dialog--fullscreen': this.fullscreen,\n 'hb-dialog--visible': this.modelValue,\n }}\n style={{\n zIndex: String(this.zIndex + 1),\n width: this.fullscreen ? '100%' : this.width,\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=\"hb-dialog__header\">\n <span class=\"hb-dialog__title\">{this.title}</span>\n {this.showClose && (\n <button type=\"button\" class=\"hb-dialog__close\" aria-label=\"关闭\" onClick={this.close}>×</button>\n )}\n </div>\n <div class=\"hb-dialog__body\">\n <slot />\n </div>\n <div class=\"hb-dialog__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"+IAAA,MAAMA,EAAY,krPAClB,MAAAC,EAAeD,E,MCYFE,EAAM,M,oJAIQC,WAAsB,MAGvCC,MAAgB,GAGhBC,MAAgB,MAGhBC,WAAsB,MAGtBC,MAAiB,KAGjBC,kBAA6B,KAG7BC,mBAA8B,KAG9BC,UAAqB,KAGrBC,eAA0B,MAGzBC,OAGAC,QAGAC,SAEDC,OAAiB,EACjBC,SACAC,KAGR,mBAAAC,CAAoBC,GAClB,GAAIA,EAAQ,CACVC,KAAKL,OAASM,IACd,GAAID,KAAKb,MAAOe,IAChBF,KAAKR,OAAOW,OACZC,SAASC,iBAAiB,UAAWL,KAAKM,c,KACrC,CACL,GAAIN,KAAKb,MAAOoB,IAChBH,SAASI,oBAAoB,UAAWR,KAAKM,c,EAIjD,oBAAAG,GACE,GAAIT,KAAKjB,YAAciB,KAAKb,MAAOoB,IACnCH,SAASI,oBAAoB,UAAWR,KAAKM,eAC7CN,KAAKH,MAAMa,Y,CAGb,kBAAAC,GACE,IAAKX,KAAKJ,SAAU,OACpB,GAAII,KAAKjB,WAAY,CACnB,IAAKiB,KAAKH,KAAM,CACdG,KAAKH,KAAOe,EAAgB,CAAEC,UAAWb,KAAKJ,U,CAEhDI,KAAKH,KAAKiB,S,KACL,CACLd,KAAKH,MAAMa,Y,EAIPJ,cAAiBS,IACvB,GAAIf,KAAKX,oBAAsB0B,EAAEC,MAAQ,SAAU,CACjDhB,KAAKiB,O,GAIDA,MAAQ,KACdjB,KAAKjB,WAAa,MAClBiB,KAAKP,QAAQU,OACbe,YAAW,IAAMlB,KAAKN,SAASS,QAAQ,IAAI,EAGrCgB,mBAAqB,KAC3B,GAAInB,KAAKZ,kBAAmBY,KAAKiB,OAAO,EAG1C,MAAAG,GACE,GAAIpB,KAAKT,iBAAmBS,KAAKjB,WAAY,OAAO,KAEpD,OACEsC,EAAA,OAAKC,MAAO,CAAE,oBAAqB,KAAM,6BAA8BtB,KAAKjB,aACzEiB,KAAKb,OACJkC,EAAA,OACEC,MAAM,qBACNC,MAAO,CAAE5B,OAAQ6B,OAAOxB,KAAKL,SAC7B8B,QAASzB,KAAKmB,qBAGlBE,EAAA,OACEK,IAAMC,GAAQ3B,KAAKJ,SAAW+B,EAC9BL,MAAO,CACL,YAAa,KACb,wBAAyBtB,KAAKd,WAC9B,qBAAsBc,KAAKjB,YAE7BwC,MAAO,CACL5B,OAAQ6B,OAAOxB,KAAKL,OAAS,GAC7BV,MAAOe,KAAKd,WAAa,OAASc,KAAKf,OAEzC2C,KAAK,SAAQ,aACF,QAEXP,EAAA,OAAKC,MAAM,qBACTD,EAAA,QAAMC,MAAM,oBAAoBtB,KAAKhB,OACpCgB,KAAKV,WACJ+B,EAAA,UAAQQ,KAAK,SAASP,MAAM,mBAAkB,aAAY,KAAKG,QAASzB,KAAKiB,OAAK,MAGtFI,EAAA,OAAKC,MAAM,mBACTD,EAAA,cAEFA,EAAA,OAAKC,MAAM,qBACTD,EAAA,QAAMS,KAAK,a","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["colorPickerCss","HbColorPickerStyle0","ColorPicker","modelValue","disabled","colorFormat","showAlpha","predefine","isOpen","currentColor","hue","saturation","value","alpha","hbChange","hbActiveChange","componentDidLoad","this","updateHSVFromColor","document","addEventListener","handleDocumentClick","disconnectedCallback","removeEventListener","e","target","el","contains","handleValueChange","handleTriggerClick","handleKeyDown","key","preventDefault","normalizeHex","color","c","trim","test","toLowerCase","r","g","b","match","handleColorSelect","normalized","emit","handleSaturationClick","currentTarget","rect","getBoundingClientRect","x","clientX","left","y","clientY","top","Math","max","min","width","height","hex","hsvToHex","handleHueClick","handleInputChange","handleAlphaClick","round","getFormattedValue","handleRgbInputChange","index","rgb","hexToRgb","num","parseInt","isNaN","map","toString","length","join","result","exec","rgbToHsv","diff","h","s","v","hsvToRgb","abs","m","hsv","l","hsvToHsl","sl","render","predefinedColors","hueColor","class","onKeyDown","onClick","role","tabindex","style","backgroundColor","type","onInput","title"],"sources":["src/components/ColorPicker/color-picker.css?tag=hb-color-picker&encapsulation=shadow","src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n}\n\n.hb-color-picker {\n display: inline-block;\n}\n\n.hb-color-picker__trigger {\n display: inline-flex;\n align-items: center;\n padding: 4px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n cursor: pointer;\n transition: border-color 0.2s;\n}\n\n.hb-color-picker__trigger:hover:not(.hb-color-picker--disabled) {\n border-color: var(--hb-color-primary);\n}\n\n.hb-color-picker__color {\n width: 40px;\n height: 20px;\n border-radius: 2px;\n border: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n}\n\n.hb-color-picker__text {\n margin-left: 8px;\n font-size: 14px;\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-color-picker__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-color-white, #ffffff);\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n padding: 12px;\n min-width: 300px;\n}\n\n.hb-color-picker__saturation {\n position: relative;\n width: 100%;\n height: 180px;\n border-radius: 4px;\n overflow: hidden;\n cursor: crosshair;\n user-select: none;\n}\n\n.hb-color-picker__saturation-bg {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* 背景色会根据当前色相动态设置 */\n}\n\n.hb-color-picker__saturation-white {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));\n}\n\n.hb-color-picker__saturation-black {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));\n}\n\n.hb-color-picker__saturation-pointer {\n position: absolute;\n width: 12px;\n height: 12px;\n border: 2px solid var(--hb-color-white, #ffffff);\n border-radius: 50%;\n transform: translate(-50%, -50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n}\n\n.hb-color-picker__controls {\n margin-top: 12px;\n}\n\n.hb-color-picker__hue,\n.hb-color-picker__alpha {\n position: relative;\n height: 12px;\n border-radius: 2px;\n margin-bottom: 8px;\n cursor: pointer;\n}\n\n.hb-color-picker__hue {\n position: relative;\n}\n\n.hb-color-picker__hue-bar {\n height: 100%;\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n border-radius: 2px;\n}\n\n.hb-color-picker__hue-pointer {\n position: absolute;\n top: 0;\n width: 4px;\n height: 100%;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.3);\n border-radius: 2px;\n transform: translateX(-50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n pointer-events: none;\n}\n\n.hb-color-picker__alpha-bar {\n height: 100%;\n background-image: linear-gradient(45deg, #ccc 25%, transparent 25%), linear-gradient(-45deg, #ccc 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ccc 75%), linear-gradient(-45deg, transparent 75%, #ccc 75%);\n background-size: 8px 8px;\n background-position: 0 0, 0 4px, 4px -4px, -4px 0px;\n border-radius: 2px;\n}\n\n.hb-color-picker__alpha-pointer {\n position: absolute;\n top: 0;\n width: 4px;\n height: 100%;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.3);\n border-radius: 2px;\n transform: translateX(-50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n pointer-events: none;\n}\n\n.hb-color-picker__input {\n margin-top: 12px;\n}\n\n.hb-color-picker__input-hex {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n font-size: 13px;\n margin-bottom: 8px;\n}\n\n.hb-color-picker__input-rgb {\n display: flex;\n gap: 8px;\n}\n\n.hb-color-picker__input-rgb input {\n flex: 1;\n padding: 6px 8px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n font-size: 13px;\n}\n\n.hb-color-picker__predefine {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n}\n\n.hb-color-picker__predefine-color {\n width: 24px;\n height: 24px;\n border-radius: 4px;\n cursor: pointer;\n border: 2px solid transparent;\n transition: transform 0.2s;\n}\n\n.hb-color-picker__predefine-color:hover {\n transform: scale(1.1);\n}\n\n.hb-color-picker__predefine-color--selected {\n border-color: var(--hb-color-primary);\n transform: scale(1.1);\n}\n\n.hb-color-picker--disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.hb-color-picker--disabled .hb-color-picker__trigger {\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\n\n/**\n * ColorPicker 颜色选择器组件\n * 用于颜色选择,支持多种格式\n */\n@Component({\n tag: 'hb-color-picker',\n styleUrl: 'color-picker.css',\n shadow: true,\n})\nexport class ColorPicker {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 颜色格式\n */\n @Prop() colorFormat: 'hsl' | 'hsv' | 'hex' | 'rgb' = 'hex';\n\n /**\n * 是否显示透明度\n * @default false\n */\n @Prop() showAlpha: boolean = false;\n\n /**\n * 预定义颜色\n */\n @Prop() predefine?: string[];\n\n @State() isOpen: boolean = false;\n @State() currentColor: string = '#409EFF';\n @State() hue: number = 210; // 色相值 0-360\n @State() saturation: number = 100; // 饱和度 0-100\n @State() value: number = 100; // 明度 0-100\n @State() alpha: number = 100; // 透明度 0-100(仅 showAlpha=true 时生效)\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n /**\n * 激活时触发\n */\n @Event() hbActiveChange: EventEmitter<string>;\n\n componentDidLoad() {\n if (this.modelValue) {\n this.currentColor = this.modelValue;\n this.updateHSVFromColor(this.modelValue);\n } else {\n this.updateHSVFromColor(this.currentColor);\n }\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 if (this.modelValue) {\n this.currentColor = this.modelValue;\n this.updateHSVFromColor(this.modelValue);\n }\n }\n\n private handleTriggerClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n };\n\n /** 键盘交互:Escape 关闭面板(对齐 antd / WAI-ARIA) */\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (e.key === 'Escape' && this.isOpen) {\n e.preventDefault();\n this.isOpen = false;\n }\n };\n\n /** 把 3 位简写 hex 规范化为 6 位,避免后续 hexToRgb 解析失败 */\n private normalizeHex(color: string): string | null {\n if (typeof color !== 'string') return null;\n const c = color.trim();\n if (/^#([A-Fa-f0-9]{6})$/.test(c)) return c.toLowerCase();\n if (/^#([A-Fa-f0-9]{3})$/.test(c)) {\n const [, r, g, b] = c.match(/^#(.)(.)(.)$/)!;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n return null;\n }\n\n private handleColorSelect = (color: string) => {\n const normalized = this.normalizeHex(color);\n if (!normalized) return; // 非法颜色直接忽略,防止 currentColor 进入不可解析态\n this.currentColor = normalized;\n this.modelValue = normalized;\n this.hbChange.emit(normalized);\n this.hbActiveChange.emit(normalized);\n };\n\n private handleSaturationClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n \n // X 轴代表饱和度 (0-100%)\n this.saturation = Math.max(0, Math.min(100, (x / rect.width) * 100));\n // Y 轴代表明度 (0-100%,从上到下)\n this.value = Math.max(0, Math.min(100, 100 - (y / rect.height) * 100));\n \n const hex = this.hsvToHex(this.hue, this.saturation, this.value);\n this.handleColorSelect(hex);\n };\n\n private handleHueClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n \n // 色相值 0-360\n this.hue = Math.max(0, Math.min(360, (x / rect.width) * 360));\n \n const hex = this.hsvToHex(this.hue, this.saturation, this.value);\n this.handleColorSelect(hex);\n };\n\n private handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n // 验证 hex 颜色格式(3 位简写会被 handleColorSelect 内部规范化为 6 位)\n if (/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)) {\n this.handleColorSelect(value);\n }\n };\n\n /** 透明度条点击/拖动:X 轴映射到 alpha 0-100 */\n private handleAlphaClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n this.alpha = Math.max(0, Math.min(100, Math.round((x / rect.width) * 100)));\n // alpha 变化触发 active 事件(不改变 hex,但通知消费者透明度变化)\n this.hbActiveChange.emit(this.getFormattedValue());\n };\n\n private handleRgbInputChange = (index: number, value: string) => {\n const rgb = this.hexToRgb(this.currentColor);\n if (rgb) {\n const num = parseInt(value, 10);\n if (!isNaN(num) && num >= 0 && num <= 255) {\n if (index === 0) rgb.r = num;\n else if (index === 1) rgb.g = num;\n else if (index === 2) rgb.b = num;\n \n const hex = `#${[rgb.r, rgb.g, rgb.b].map(x => {\n const hex = x.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('')}`;\n this.handleColorSelect(hex);\n }\n }\n };\n\n private hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n // 先用 normalizeHex 兜底 3 位简写(#abc → #aabbcc),再解析\n const normalized = this.normalizeHex(hex);\n if (!normalized) return null;\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n }\n\n // RGB 转 HSV\n private rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n r = r / 255;\n g = g / 255;\n b = b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const diff = max - min;\n\n let h = 0;\n if (diff !== 0) {\n if (max === r) {\n h = ((g - b) / diff) % 6;\n } else if (max === g) {\n h = (b - r) / diff + 2;\n } else {\n h = (r - g) / diff + 4;\n }\n }\n h = Math.round(h * 60);\n if (h < 0) h += 360;\n\n const s = max === 0 ? 0 : Math.round((diff / max) * 100);\n const v = Math.round(max * 100);\n\n return { h, s, v };\n }\n\n // HSV 转 RGB\n private hsvToRgb(h: number, s: number, v: number): { r: number; g: number; b: number } {\n s = s / 100;\n v = v / 100;\n\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n\n let r = 0, g = 0, b = 0;\n\n if (h >= 0 && h < 60) {\n r = c; g = x; b = 0;\n } else if (h >= 60 && h < 120) {\n r = x; g = c; b = 0;\n } else if (h >= 120 && h < 180) {\n r = 0; g = c; b = x;\n } else if (h >= 180 && h < 240) {\n r = 0; g = x; b = c;\n } else if (h >= 240 && h < 300) {\n r = x; g = 0; b = c;\n } else if (h >= 300 && h < 360) {\n r = c; g = 0; b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n }\n\n // HSV 转 Hex\n private hsvToHex(h: number, s: number, v: number): string {\n const rgb = this.hsvToRgb(h, s, v);\n return `#${[rgb.r, rgb.g, rgb.b].map(x => {\n const hex = x.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('')}`;\n }\n\n // 从颜色值更新 HSV\n private updateHSVFromColor(color: string) {\n const rgb = this.hexToRgb(color);\n if (rgb) {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n this.hue = hsv.h;\n this.saturation = hsv.s;\n this.value = hsv.v;\n }\n }\n\n /** 按当前 colorFormat 输出最终颜色字符串(对齐 antd 的 format 行为) */\n private getFormattedValue(): string {\n const rgb = this.hexToRgb(this.currentColor);\n if (!rgb) return this.currentColor;\n switch (this.colorFormat) {\n case 'rgb':\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n case 'hsl': {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n const [h, s, l] = this.hsvToHsl(hsv.h, hsv.s, hsv.v);\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsv': {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n return `hsv(${hsv.h}, ${hsv.s}%, ${hsv.v}%)`;\n }\n case 'hex':\n default:\n return this.currentColor;\n }\n }\n\n /** HSV → HSL(HSL 字符串输出用) */\n private hsvToHsl(h: number, s: number, v: number): [number, number, number] {\n s /= 100;\n v /= 100;\n const l = v - (v * s) / 2;\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return [Math.round(h), Math.round(sl * 100), Math.round(l * 100)];\n }\n\n render() {\n const rgb = this.hexToRgb(this.currentColor);\n const predefinedColors = this.predefine || [\n '#ff4500', '#ff8c00', '#ffd700', '#90ee90', '#00ced1',\n '#1e90ff', '#c71585', '#000000', '#ffffff', '#808080',\n ];\n\n // 根据当前色相生成饱和度面板的背景色\n const hueColor = this.hsvToHex(this.hue, 100, 100);\n\n return (\n <div\n class={{\n 'hb-color-picker': true,\n 'hb-color-picker--open': this.isOpen,\n 'hb-color-picker--disabled': this.disabled,\n }}\n onKeyDown={this.handleKeyDown}\n >\n <div\n class=\"hb-color-picker__trigger\"\n onClick={this.handleTriggerClick}\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleTriggerClick();\n }\n }}\n >\n <div class=\"hb-color-picker__color\" style={{ backgroundColor: this.currentColor }}></div>\n <span class=\"hb-color-picker__text\">{this.currentColor}</span>\n </div>\n {this.isOpen && (\n <div class=\"hb-color-picker__dropdown\" role=\"dialog\">\n <div class=\"hb-color-picker__panel\">\n <div class=\"hb-color-picker__saturation\" onClick={this.handleSaturationClick}>\n <div class=\"hb-color-picker__saturation-bg\" style={{ backgroundColor: hueColor }}></div>\n <div class=\"hb-color-picker__saturation-white\"></div>\n <div class=\"hb-color-picker__saturation-black\"></div>\n <div\n class=\"hb-color-picker__saturation-pointer\"\n style={{\n left: `${this.saturation}%`,\n top: `${100 - this.value}%`,\n }}\n ></div>\n </div>\n <div class=\"hb-color-picker__controls\">\n <div class=\"hb-color-picker__hue\" onClick={this.handleHueClick}>\n <div class=\"hb-color-picker__hue-bar\"></div>\n <div\n class=\"hb-color-picker__hue-pointer\"\n style={{\n left: `${(this.hue / 360) * 100}%`,\n }}\n ></div>\n </div>\n {this.showAlpha && (\n <div class=\"hb-color-picker__alpha\" onClick={this.handleAlphaClick}>\n <div class=\"hb-color-picker__alpha-bar\" style={{ backgroundColor: this.currentColor }}></div>\n <div\n class=\"hb-color-picker__alpha-pointer\"\n style={{ left: `${this.alpha}%` }}\n ></div>\n </div>\n )}\n </div>\n <div class=\"hb-color-picker__input\">\n <input\n type=\"text\"\n class=\"hb-color-picker__input-hex\"\n value={this.currentColor}\n onInput={this.handleInputChange}\n aria-label=\"HEX 颜色值\"\n />\n {rgb && (\n <div class=\"hb-color-picker__input-rgb\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.r}\n onInput={(e) => this.handleRgbInputChange(0, (e.target as HTMLInputElement).value)}\n aria-label=\"红色通道\"\n />\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.g}\n onInput={(e) => this.handleRgbInputChange(1, (e.target as HTMLInputElement).value)}\n aria-label=\"绿色通道\"\n />\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.b}\n onInput={(e) => this.handleRgbInputChange(2, (e.target as HTMLInputElement).value)}\n aria-label=\"蓝色通道\"\n />\n </div>\n )}\n </div>\n {this.predefine && this.predefine.length > 0 && (\n <div class=\"hb-color-picker__predefine\">\n {predefinedColors.map((color) => {\n const normalized = this.normalizeHex(color) || color;\n return (\n <div\n class={{\n 'hb-color-picker__predefine-color': true,\n 'hb-color-picker__predefine-color--selected': normalized === this.currentColor,\n }}\n style={{ backgroundColor: color }}\n onClick={() => this.handleColorSelect(color)}\n title={color}\n ></div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["radioCss","HbRadioStyle0","Radio","modelValue","value","disabled","checked","name","radioId","label","border","size","hbChange","isChecked","handleValueChange","this","updateChecked","componentDidLoad","undefined","handleChange","e","target","preventDefault","emit","render","inputId","Math","random","toString","substr","h","key","class","type","id","onChange"],"sources":["src/components/Radio/radio.css?tag=hb-radio&encapsulation=shadow","src/components/Radio/Radio.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-radio-font-size: 14px;\n --hb-radio-color: var(--hb-color-primary);\n --hb-radio-border-color: var(--hb-border-color, #dcdfe6);\n --hb-radio-text-color: var(--hb-color-text-regular, #606266);\n --hb-radio-disabled-color: var(--hb-color-text-disabled, #c0c4cc);\n}\n\n.hb-radio {\n color: var(--hb-radio-text-color);\n font-weight: 500;\n font-size: var(--hb-radio-font-size);\n position: relative;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n user-select: none;\n margin-right: 30px;\n}\n\n.hb-radio:last-child {\n margin-right: 0;\n}\n\n.hb-radio__input {\n white-space: nowrap;\n cursor: pointer;\n outline: none;\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n}\n\n.hb-radio__original {\n opacity: 0;\n outline: none;\n position: absolute;\n margin: 0;\n width: 0;\n height: 0;\n z-index: -1;\n}\n\n.hb-radio__inner {\n border: 1px solid var(--hb-radio-border-color);\n border-radius: 50%;\n width: 14px;\n height: 14px;\n background-color: var(--hb-color-white, #ffffff);\n position: relative;\n cursor: pointer;\n display: inline-block;\n box-sizing: border-box;\n transition: all 0.2s;\n}\n\n.hb-radio__inner::after {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--hb-color-white, #ffffff);\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%) scale(0);\n transition: transform 0.15s ease-in;\n}\n\n.hb-radio--checked .hb-radio__inner {\n border-color: var(--hb-radio-color);\n background: var(--hb-radio-color);\n}\n\n.hb-radio--checked .hb-radio__inner::after {\n transform: translate(-50%, -50%) scale(1);\n}\n\n.hb-radio__label {\n padding-left: 8px;\n line-height: 1;\n font-size: var(--hb-radio-font-size);\n}\n\n.hb-radio--disabled {\n cursor: not-allowed;\n}\n\n.hb-radio--disabled .hb-radio__inner {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-radio-border-color);\n cursor: not-allowed;\n}\n\n.hb-radio--disabled .hb-radio__label {\n color: var(--hb-radio-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-radio--border {\n padding: 9px 15px 9px 9px;\n border-radius: 4px;\n border: 1px solid var(--hb-radio-border-color);\n box-sizing: border-box;\n white-space: nowrap;\n}\n\n.hb-radio--border.hb-radio--checked {\n border-color: var(--hb-radio-color);\n}\n\n.hb-radio--border.hb-radio--disabled {\n border-color: var(--hb-radio-border-color);\n cursor: not-allowed;\n}\n\n.hb-radio--small {\n font-size: 12px;\n}\n\n.hb-radio--small .hb-radio__inner {\n width: 12px;\n height: 12px;\n}\n\n.hb-radio--small .hb-radio__inner::after {\n width: 3px;\n height: 3px;\n}\n\n.hb-radio--small .hb-radio__label {\n padding-left: 6px;\n}\n\n.hb-radio--large {\n font-size: 16px;\n}\n\n.hb-radio--large .hb-radio__inner {\n width: 16px;\n height: 16px;\n}\n\n.hb-radio--large .hb-radio__inner::after {\n width: 5px;\n height: 5px;\n}\n\n.hb-radio--large .hb-radio__label {\n padding-left: 10px;\n}\n\n.hb-radio:hover:not(.hb-radio--disabled) .hb-radio__inner {\n border-color: var(--hb-radio-color);\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\n\n/**\n * Radio 单选框组件\n * 在一组备选项中进行单选\n */\n@Component({\n tag: 'hb-radio',\n styleUrl: 'radio.css',\n shadow: true,\n})\nexport class Radio {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string | number;\n\n /**\n * 单选框的值\n */\n @Prop() value?: string | number;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否选中\n * @default false\n */\n @Prop() checked: boolean = false;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() radioId?: string;\n\n /**\n * 文本标签\n */\n @Prop() label?: string;\n\n /**\n * 是否显示边框\n * @default false\n */\n @Prop() border: boolean = false;\n\n /**\n * 尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string | number | boolean>;\n\n @State() isChecked: boolean = false;\n\n @Watch('modelValue')\n @Watch('checked')\n @Watch('value')\n handleValueChange() {\n this.updateChecked();\n }\n\n componentDidLoad() {\n this.updateChecked();\n }\n\n private updateChecked() {\n if (this.value !== undefined) {\n // 在 radio group 中\n this.isChecked = this.modelValue === this.value;\n } else {\n // 单个 radio\n this.isChecked = this.checked;\n }\n }\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n \n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.value !== undefined) {\n // 在 radio group 中\n this.modelValue = this.value;\n this.isChecked = true;\n this.hbChange.emit(this.value);\n } else {\n // 单个 radio\n this.isChecked = target.checked;\n if (target.checked && this.value !== undefined) {\n this.hbChange.emit(this.value);\n } else {\n this.hbChange.emit(target.checked);\n }\n }\n };\n\n render() {\n const inputId = this.radioId || `hb-radio-${Math.random().toString(36).substr(2, 9)}`;\n \n return (\n <label\n class={{\n 'hb-radio': true,\n 'hb-radio--checked': this.isChecked,\n 'hb-radio--disabled': this.disabled,\n 'hb-radio--border': this.border,\n [`hb-radio--${this.size}`]: true,\n }}\n >\n <span class=\"hb-radio__input\">\n <input\n type=\"radio\"\n id={inputId}\n name={this.name}\n checked={this.isChecked}\n disabled={this.disabled}\n value={this.value}\n onChange={this.handleChange}\n class=\"hb-radio__original\"\n />\n <span class=\"hb-radio__inner\"></span>\n </span>\n {(this.label || this.value !== undefined) && (\n <span class=\"hb-radio__label\">\n <slot>{this.label || this.value}</slot>\n </span>\n )}\n </label>\n );\n }\n}\n\n"],"mappings":"yDAAA,MAAMA,EAAW,mvQACjB,MAAAC,EAAeD,E,MCUFE,EAAK,M,oFAMSC,WAKjBC,MAMAC,SAAoB,MAMpBC,QAAmB,MAKnBC,KAKAC,QAKAC,MAMAC,OAAkB,MAKlBC,KAAsC,UAKrCC,SAEAC,UAAqB,MAK9B,iBAAAC,GACEC,KAAKC,e,CAGP,gBAAAC,GACEF,KAAKC,e,CAGC,aAAAA,GACN,GAAID,KAAKX,QAAUc,UAAW,CAE5BH,KAAKF,UAAYE,KAAKZ,aAAeY,KAAKX,K,KACrC,CAELW,KAAKF,UAAYE,KAAKT,O,EAIlBa,aAAgBC,IACtB,MAAMC,EAASD,EAAEC,OAEjB,GAAIN,KAAKV,SAAU,CACjBe,EAAEE,iBACF,M,CAGF,GAAIP,KAAKX,QAAUc,UAAW,CAE5BH,KAAKZ,WAAaY,KAAKX,MACvBW,KAAKF,UAAY,KACjBE,KAAKH,SAASW,KAAKR,KAAKX,M,KACnB,CAELW,KAAKF,UAAYQ,EAAOf,QACxB,GAAIe,EAAOf,SAAWS,KAAKX,QAAUc,UAAW,CAC9CH,KAAKH,SAASW,KAAKR,KAAKX,M,KACnB,CACLW,KAAKH,SAASW,KAAKF,EAAOf,Q,IAKhC,MAAAkB,GACE,MAAMC,EAAUV,KAAKP,SAAW,YAAYkB,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,KAEjF,OACEC,EAAA,SAAAC,IAAA,2CACEC,MAAO,CACL,WAAY,KACZ,oBAAqBjB,KAAKF,UAC1B,qBAAsBE,KAAKV,SAC3B,mBAAoBU,KAAKL,OACzB,CAAC,aAAaK,KAAKJ,QAAS,OAG9BmB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACVF,EAAA,SAAAC,IAAA,2CACEE,KAAK,QACLC,GAAIT,EACJlB,KAAMQ,KAAKR,KACXD,QAASS,KAAKF,UACdR,SAAUU,KAAKV,SACfD,MAAOW,KAAKX,MACZ+B,SAAUpB,KAAKI,aACfa,MAAM,uBAERF,EAAA,QAAAC,IAAA,2CAAMC,MAAM,sBAEZjB,KAAKN,OAASM,KAAKX,QAAUc,YAC7BY,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACVF,EAAA,QAAAC,IAAA,4CAAOhB,KAAKN,OAASM,KAAKX,Q","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["collapseCss","HbCollapseStyle0","Collapse","accordion","componentDidLoad","this","el","addEventListener","e","active","detail","current","target","querySelectorAll","forEach","item","render","h","key","class"],"sources":["src/components/Collapse/collapse.css?tag=hb-collapse&encapsulation=shadow","src/components/Collapse/Collapse.tsx"],"sourcesContent":[":host { display: block; }\n.hb-collapse { border-top: 1px solid var(--hb-color-border-secondary); border-bottom: 1px solid var(--hb-color-border-secondary); }\n","import { Component, h, Prop, Element } from '@stencil/core';\n\n@Component({ tag: 'hb-collapse', styleUrl: 'collapse.css', shadow: true })\nexport class Collapse {\n @Element() el: HTMLElement;\n\n /** 是否开启手风琴模式(同时仅展开一项) */\n @Prop({ mutable: true }) accordion: boolean = false;\n\n componentDidLoad() {\n this.el.addEventListener(\n 'hbCollapseItemToggle',\n ((e: CustomEvent) => {\n if (!this.accordion) return;\n const { active } = e.detail;\n // 手风琴模式:某项展开时,关闭其余项\n if (!active) return;\n const current = e.target as HTMLElement;\n this.el.querySelectorAll('hb-collapse-item').forEach((item) => {\n if (item !== current) {\n (item as any).active = false;\n }\n });\n }) as EventListener,\n );\n }\n\n render() {\n return (\n <div class={{ 'hb-collapse': true, 'hb-collapse--accordion': this.accordion }}>\n <slot />\n </div>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAc,0sLACpB,MAAAC,EAAeD,E,MCEFE,EAAQ,M,iDAIMC,UAAqB,MAE9C,gBAAAC,GACEC,KAAKC,GAAGC,iBACN,wBACEC,IACA,IAAKH,KAAKF,UAAW,OACrB,MAAMM,OAAEA,GAAWD,EAAEE,OAErB,IAAKD,EAAQ,OACb,MAAME,EAAUH,EAAEI,OAClBP,KAAKC,GAAGO,iBAAiB,oBAAoBC,SAASC,IACpD,GAAIA,IAASJ,EAAS,CACnBI,EAAaN,OAAS,K,IAG5B,G,CAIL,MAAAO,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKC,MAAO,CAAE,cAAe,KAAM,yBAA0Bd,KAAKF,YAChEc,EAAA,QAAAC,IAAA,6C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,g as t,h as a}from"./p-e42dfa95.js";import{i as s}from"./p-cc0aeb50.js";const i=class{constructor(t){e(this,t)}get el(){return t(this)}key="";title="";disabled=false;active=false;isOpen=false;componentDidLoad(){this.isOpen=this.active}handleActiveChange(e){this.isOpen=e}toggle=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;this.active=this.isOpen;this.el.dispatchEvent(new CustomEvent("hbCollapseItemToggle",{detail:{key:this.key,active:this.isOpen},bubbles:true,composed:true}))};handleHeaderKeydown=e=>{if(this.disabled)return;if(s(e.key)){e.preventDefault();this.toggle()}};render(){return a("div",{key:"98bb39328b3f8286bdc192bafd79fc5745c6e44c",class:{"hb-collapse-item":true,"hb-collapse-item--active":this.isOpen,"hb-collapse-item--disabled":this.disabled}},a("div",{key:"777f4d272ac88422ac0035e7f58034535b419ec7",class:"hb-collapse-item__header",role:"button",tabindex:this.disabled?-1:0,"aria-expanded":this.isOpen?"true":"false","aria-disabled":this.disabled?"true":undefined,onClick:this.toggle,onKeyDown:this.handleHeaderKeydown},a("span",{key:"db1edadb885a81efd8b45d196d05da282a006cc5",class:"hb-collapse-item__title"},this.title),a("span",{key:"551dd3ecdda882b3bb32c0ee88203e5dfa73239c",class:{"hb-collapse-item__arrow":true,"hb-collapse-item__arrow--open":this.isOpen}},"▶")),a("div",{key:"292b47291364947872dc2fa71f470c93ace7fce8",class:{"hb-collapse-item__wrapper":true,"hb-collapse-item__wrapper--open":this.isOpen}},a("div",{key:"051d493b7d5f7f907480aad1c6b0684e83d1bd03",class:"hb-collapse-item__content"},a("slot",{key:"5f7e1afc4e416d9cf6f88925a7e06ea089572c7c"}))))}static get watchers(){return{active:["handleActiveChange"]}}};export{i as hb_collapse_item};
2
- //# sourceMappingURL=p-c6c91664.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["CollapseItem","key","title","disabled","active","isOpen","componentDidLoad","this","handleActiveChange","val","toggle","el","dispatchEvent","CustomEvent","detail","bubbles","composed","handleHeaderKeydown","e","isActivationKey","preventDefault","render","h","class","role","tabindex","undefined","onClick","onKeyDown"],"sources":["src/components/Collapse/CollapseItem.tsx"],"sourcesContent":["import { Component, h, Prop, State, Element, Watch } from '@stencil/core';\nimport { isActivationKey } from '../../utils/a11y';\n\n@Component({ tag: 'hb-collapse-item', shadow: true })\nexport class CollapseItem {\n @Element() el: HTMLElement;\n\n /** 唯一标识(手风琴模式协调用) */\n @Prop() key: string = '';\n\n /** 标题 */\n @Prop() title: string = '';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 是否展开(受控;由父级 hb-collapse 在手风琴模式下联动) */\n @Prop({ mutable: true }) active: boolean = false;\n\n @State() isOpen: boolean = false;\n\n componentDidLoad() {\n this.isOpen = this.active;\n }\n\n @Watch('active')\n handleActiveChange(val: boolean) {\n this.isOpen = val;\n }\n\n private toggle = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n this.active = this.isOpen;\n // 通知父级 hb-collapse(composed 穿越 shadow 边界,用于手风琴协调)\n this.el.dispatchEvent(\n new CustomEvent('hbCollapseItemToggle', {\n detail: { key: this.key, active: this.isOpen },\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n private handleHeaderKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (isActivationKey(e.key)) {\n e.preventDefault();\n this.toggle();\n }\n };\n\n render() {\n return (\n <div\n class={{ 'hb-collapse-item': true, 'hb-collapse-item--active': this.isOpen, 'hb-collapse-item--disabled': this.disabled }}\n >\n <div\n class=\"hb-collapse-item__header\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.toggle}\n onKeyDown={this.handleHeaderKeydown}\n >\n <span class=\"hb-collapse-item__title\">{this.title}</span>\n <span class={{ 'hb-collapse-item__arrow': true, 'hb-collapse-item__arrow--open': this.isOpen }}>▶</span>\n </div>\n <div class={{ 'hb-collapse-item__wrapper': true, 'hb-collapse-item__wrapper--open': this.isOpen }}>\n <div class=\"hb-collapse-item__content\">\n <slot />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"4FAIaA,EAAY,M,iDAIfC,IAAc,GAGdC,MAAgB,GAGhBC,SAAoB,MAGHC,OAAkB,MAElCC,OAAkB,MAE3B,gBAAAC,GACEC,KAAKF,OAASE,KAAKH,M,CAIrB,kBAAAI,CAAmBC,GACjBF,KAAKF,OAASI,C,CAGRC,OAAS,KACf,GAAIH,KAAKJ,SAAU,OACnBI,KAAKF,QAAUE,KAAKF,OACpBE,KAAKH,OAASG,KAAKF,OAEnBE,KAAKI,GAAGC,cACN,IAAIC,YAAY,uBAAwB,CACtCC,OAAQ,CAAEb,IAAKM,KAAKN,IAAKG,OAAQG,KAAKF,QACtCU,QAAS,KACTC,SAAU,OAEb,EAGKC,oBAAuBC,IAC7B,GAAIX,KAAKJ,SAAU,OACnB,GAAIgB,EAAgBD,EAAEjB,KAAM,CAC1BiB,EAAEE,iBACFb,KAAKG,Q,GAIT,MAAAW,GACE,OACEC,EAAA,OAAArB,IAAA,2CACEsB,MAAO,CAAE,mBAAoB,KAAM,2BAA4BhB,KAAKF,OAAQ,6BAA8BE,KAAKJ,WAE/GmB,EAAA,OAAArB,IAAA,2CACEsB,MAAM,2BACNC,KAAK,SACLC,SAAUlB,KAAKJ,UAAY,EAAI,EAAC,gBACjBI,KAAKF,OAAS,OAAS,QAAO,gBAC9BE,KAAKJ,SAAW,OAASuB,UACxCC,QAASpB,KAAKG,OACdkB,UAAWrB,KAAKU,qBAEhBK,EAAA,QAAArB,IAAA,2CAAMsB,MAAM,2BAA2BhB,KAAKL,OAC5CoB,EAAA,QAAArB,IAAA,2CAAMsB,MAAO,CAAE,0BAA2B,KAAM,gCAAiChB,KAAKF,SAAQ,MAEhGiB,EAAA,OAAArB,IAAA,2CAAKsB,MAAO,CAAE,4BAA6B,KAAM,kCAAmChB,KAAKF,SACvFiB,EAAA,OAAArB,IAAA,2CAAKsB,MAAM,6BACTD,EAAA,QAAArB,IAAA,+C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["stepsCss","HbStepsStyle0","Steps","active","processStatus","alignCenter","direction","steps","componentDidLoad","items","this","el","querySelectorAll","Array","from","map","item","node","title","getAttribute","description","undefined","icon","status","getStatus","index","meta","renderIcon","h","name","size","String","render","key","class","role","step","i","length"],"sources":["src/components/Steps/steps.css?tag=hb-steps&encapsulation=shadow","src/components/Steps/Steps.tsx"],"sourcesContent":[":host { display: block; }\n.hb-steps { display: flex; }\n.hb-steps--vertical { flex-direction: column; }\n.hb-steps__item { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; }\n.hb-steps--vertical .hb-steps__item { flex-direction: row; align-items: flex-start; gap: var(--hb-spacing-sm); padding-bottom: var(--hb-spacing-md); }\n.hb-steps__head { display: flex; align-items: center; width: 100%; }\n.hb-steps__icon {\n width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;\n font-size: var(--hb-font-size-sm); font-weight: 600; flex-shrink: 0;\n background: var(--hb-color-fill); color: var(--hb-color-text-secondary); transition: all 0.3s;\n}\n.hb-steps__item--process .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--finish .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--error .hb-steps__icon { background: var(--hb-color-danger); color: #fff; }\n.hb-steps__line { flex: 1; height: 2px; background: var(--hb-color-border-secondary); margin: 0 var(--hb-spacing-xs); }\n.hb-steps__item--finish .hb-steps__line { background: var(--hb-color-primary); }\n.hb-steps__main { text-align: center; margin-top: var(--hb-spacing-xs); }\n.hb-steps--vertical .hb-steps__main { text-align: left; }\n\n/* 对齐方式(alignCenter prop):默认 false 时图标与文字左对齐,true 时居中 */\n.hb-steps:not(.hb-steps--align-center) .hb-steps__item { align-items: flex-start; }\n.hb-steps:not(.hb-steps--align-center) .hb-steps__main { text-align: left; }\n.hb-steps__title { font-size: var(--hb-font-size-sm); font-weight: 600; }\n.hb-steps__item--process .hb-steps__title { color: var(--hb-color-primary); }\n.hb-steps__description { font-size: var(--hb-font-size-xs); color: var(--hb-color-text-secondary); margin-top: 2px; }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\n\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error';\n\ninterface StepMeta {\n title: string;\n description?: string;\n /** 自定义图标名/标记('hb-icon' name 或文本)。undefined 表示用默认序号/状态图标 */\n icon?: string;\n /** 子项显式状态覆盖(不指定则按 active 自动推导) */\n status?: StepStatus;\n}\n\n@Component({ tag: 'hb-steps', styleUrl: 'steps.css', shadow: true })\nexport class Steps {\n @Element() el: HTMLElement;\n @Prop() active: number = 0;\n @Prop() processStatus: StepStatus = 'process';\n @Prop() alignCenter: boolean = false;\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @State() steps: StepMeta[] = [];\n\n componentDidLoad() {\n const items = this.el.querySelectorAll('hb-step');\n this.steps = Array.from(items).map((item) => {\n const node = item as HTMLElement;\n // 仅用 getAttribute:hb-step 的 @Prop() status 默认值为 'wait',\n // 若读 (node as any).status 会拿到默认值,从而错误地覆盖 active 推导。\n // 用户显式在 HTML 上写 status=\"xxx\" 时 getAttribute 才有值。\n return {\n title: node.getAttribute('title') || '',\n description: node.getAttribute('description') || undefined,\n icon: node.getAttribute('icon') || undefined,\n status: (node.getAttribute('status') || undefined) as StepStatus | undefined,\n };\n });\n }\n\n private getStatus(index: number): StepStatus {\n const meta = this.steps[index];\n // 子项显式 status 优先(仅当用户在 HTML 上写了 status 属性)\n if (meta && meta.status) return meta.status;\n if (index < this.active) return 'finish';\n if (index === this.active) return this.processStatus;\n return 'wait';\n }\n\n /** 渲染图标:子项自定义 icon 优先;否则按状态(finish=✓、error=✕、其余=序号) */\n private renderIcon(index: number): any {\n const meta = this.steps[index];\n if (meta && meta.icon) {\n // 自定义图标名:若与 hb-icon 内置图标同名则渲染 hb-icon,否则按文本渲染\n return <hb-icon name={meta.icon} size={16} aria-hidden=\"true\" />;\n }\n const status = this.getStatus(index);\n if (status === 'finish') return '✓';\n if (status === 'error') return '✕';\n return String(index + 1);\n }\n\n render() {\n return (\n <ol\n class={{ 'hb-steps': true, [`hb-steps--${this.direction}`]: true, 'hb-steps--align-center': this.alignCenter }}\n role=\"list\"\n >\n {this.steps.map((step, i) => {\n const status = this.getStatus(i);\n return (\n <li\n class={{ 'hb-steps__item': true, [`hb-steps__item--${status}`]: true }}\n role=\"listitem\"\n aria-current={status === 'process' ? 'step' : undefined}\n aria-disabled={step.status === 'wait' && i > this.active ? 'true' : undefined}\n >\n <div class=\"hb-steps__head\">\n <span class=\"hb-steps__icon\" aria-hidden=\"true\">{this.renderIcon(i)}</span>\n {i < this.steps.length - 1 && <div class=\"hb-steps__line\"></div>}\n </div>\n <div class=\"hb-steps__main\">\n <div class=\"hb-steps__title\">{step.title}</div>\n {step.description && <div class=\"hb-steps__description\">{step.description}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,qrOACjB,MAAAC,EAAeD,E,MCaFE,EAAK,M,iDAERC,OAAiB,EACjBC,cAA4B,UAC5BC,YAAuB,MACvBC,UAAuC,aAEtCC,MAAoB,GAE7B,gBAAAC,GACE,MAAMC,EAAQC,KAAKC,GAAGC,iBAAiB,WACvCF,KAAKH,MAAQM,MAAMC,KAAKL,GAAOM,KAAKC,IAClC,MAAMC,EAAOD,EAIb,MAAO,CACLE,MAAOD,EAAKE,aAAa,UAAY,GACrCC,YAAaH,EAAKE,aAAa,gBAAkBE,UACjDC,KAAML,EAAKE,aAAa,SAAWE,UACnCE,OAASN,EAAKE,aAAa,WAAaE,UACzC,G,CAIG,SAAAG,CAAUC,GAChB,MAAMC,EAAOhB,KAAKH,MAAMkB,GAExB,GAAIC,GAAQA,EAAKH,OAAQ,OAAOG,EAAKH,OACrC,GAAIE,EAAQf,KAAKP,OAAQ,MAAO,SAChC,GAAIsB,IAAUf,KAAKP,OAAQ,OAAOO,KAAKN,cACvC,MAAO,M,CAID,UAAAuB,CAAWF,GACjB,MAAMC,EAAOhB,KAAKH,MAAMkB,GACxB,GAAIC,GAAQA,EAAKJ,KAAM,CAErB,OAAOM,EAAA,WAASC,KAAMH,EAAKJ,KAAMQ,KAAM,GAAE,cAAc,Q,CAEzD,MAAMP,EAASb,KAAKc,UAAUC,GAC9B,GAAIF,IAAW,SAAU,MAAO,IAChC,GAAIA,IAAW,QAAS,MAAO,IAC/B,OAAOQ,OAAON,EAAQ,E,CAGxB,MAAAO,GACE,OACEJ,EAAA,MAAAK,IAAA,2CACEC,MAAO,CAAE,WAAY,KAAM,CAAC,aAAaxB,KAAKJ,aAAc,KAAM,yBAA0BI,KAAKL,aACjG8B,KAAK,QAEJzB,KAAKH,MAAMQ,KAAI,CAACqB,EAAMC,KACrB,MAAMd,EAASb,KAAKc,UAAUa,GAC9B,OACET,EAAA,MACEM,MAAO,CAAE,iBAAkB,KAAM,CAAC,mBAAmBX,KAAW,MAChEY,KAAK,WAAU,eACDZ,IAAW,UAAY,OAASF,UAAS,gBACxCe,EAAKb,SAAW,QAAUc,EAAI3B,KAAKP,OAAS,OAASkB,WAEpEO,EAAA,OAAKM,MAAM,kBACTN,EAAA,QAAMM,MAAM,iBAAgB,cAAa,QAAQxB,KAAKiB,WAAWU,IAChEA,EAAI3B,KAAKH,MAAM+B,OAAS,GAAKV,EAAA,OAAKM,MAAM,oBAE3CN,EAAA,OAAKM,MAAM,kBACTN,EAAA,OAAKM,MAAM,mBAAmBE,EAAKlB,OAClCkB,EAAKhB,aAAeQ,EAAA,OAAKM,MAAM,yBAAyBE,EAAKhB,cAE7D,I","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- function e(e){return e==="Enter"||e===" "||e==="Spacebar"}const t=["a[href]","button:not([disabled])","textarea:not([disabled])","input:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])','[contenteditable="true"]'].join(",");function n(e){return Array.from(e.querySelectorAll(t)).filter((e=>e.getAttribute("aria-hidden")!=="true"&&e.style.display!=="none"))}function r(e){const{container:t,autoFocus:r=true,returnFocusTo:o}=e;let a=false;let c=null;const i=e=>{if(e.key!=="Tab")return;const r=n(t);if(r.length===0){e.preventDefault();t.focus();return}const o=r[0];const a=r[r.length-1];const c=document.activeElement;if(e.shiftKey){if(c===o||!t.contains(c)){e.preventDefault();a.focus()}}else{if(c===a){e.preventDefault();o.focus()}}};const s=()=>{if(a)return;a=true;c=o??document.activeElement;t.addEventListener("keydown",i);if(r){const e=n(t);(e[0]??t).focus()}};const u=()=>{if(!a)return;a=false;t.removeEventListener("keydown",i);if(c&&typeof c.focus==="function"){c.focus()}c=null};return{connect:s,disconnect:u}}function o(e,t){const{activeIndex:n,itemCount:r,loop:o=true}=t;if(r<=0)return{type:"none"};const a=e=>(e+r)%r;const c=e=>Math.max(0,Math.min(e,r-1));switch(e.key){case"ArrowDown":case"ArrowRight":return{type:"navigate",index:o?a(n+1):c(n+1)};case"ArrowUp":case"ArrowLeft":return{type:"navigate",index:o?a(n-1):c(n-1)};case"Home":return{type:"navigate",index:0};case"End":return{type:"navigate",index:r-1};case"Enter":case" ":case"Spacebar":return n>=0?{type:"select",index:n}:{type:"none"};case"Escape":return{type:"close"};default:return{type:"none"}}}export{r as c,o as h,e as i};
2
- //# sourceMappingURL=p-cc0aeb50.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["isActivationKey","key","FOCUSABLE_SELECTOR","join","getFocusableElements","container","Array","from","querySelectorAll","filter","el","getAttribute","style","display","createFocusTrap","options","autoFocus","returnFocusTo","active","previouslyFocused","handleKeydown","e","focusable","length","preventDefault","focus","first","last","activeEl","document","activeElement","shiftKey","contains","connect","addEventListener","disconnect","removeEventListener","handleListKeyboard","event","activeIndex","itemCount","loop","type","clamp","idx","within","Math","max","min","index"],"sources":["src/utils/a11y.ts"],"sourcesContent":["/**\n * 无障碍(a11y)工具集\n * 统一 ARIA 属性辅助、焦点陷阱、列表键盘导航等在交互组件(Dialog / Drawer / Menu /\n * Dropdown / Select 等)中重复出现且容易写错的可访问性逻辑。\n *\n * 参考标准:WAI-ARIA Authoring Practices 1.2。\n */\n\n/** 判定按键是否为「激活」键(Enter / Space),用于自定义可聚焦元素的点击替代 */\nexport function isActivationKey(key: string | undefined): boolean {\n return key === 'Enter' || key === ' ' || key === 'Spacebar';\n}\n\n/** 查询容器内可聚焦的元素顺序(tabindex >= 0 的语义元素) */\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.getAttribute('aria-hidden') !== 'true' && el.style.display !== 'none',\n );\n}\n\n/** 焦点陷阱选项 */\nexport interface FocusTrapOptions {\n /** 焦点受限的容器元素 */\n container: HTMLElement;\n /** 打开时是否自动聚焦容器内首个可聚焦元素 */\n autoFocus?: boolean;\n /** 容器激活前的元素(用于关闭时归还焦点) */\n returnFocusTo?: HTMLElement | null;\n}\n\n/** 焦点陷阱句柄 */\nexport interface FocusTrap {\n /** 启用:绑定 Tab 拦截,可选自动聚焦 */\n connect: () => void;\n /** 关闭:解除拦截,归还焦点 */\n disconnect: () => void;\n}\n\n/**\n * 创建焦点陷阱(Dialog / Drawer 打开时把 Tab 循环限制在容器内)。\n * 关键点:Tab 与 Shift+Tab 在容器边界时回环到另一端,防止焦点逃逸到背景。\n * 返回句柄,组件在打开时 connect()、关闭时 disconnect()。\n */\nexport function createFocusTrap(options: FocusTrapOptions): FocusTrap {\n const { container, autoFocus = true, returnFocusTo } = options;\n let active = false;\n let previouslyFocused: HTMLElement | null = null;\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const focusable = getFocusableElements(container);\n if (focusable.length === 0) {\n e.preventDefault();\n container.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeEl = document.activeElement;\n\n if (e.shiftKey) {\n if (activeEl === first || !container.contains(activeEl)) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (activeEl === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n const connect = () => {\n if (active) return;\n active = true;\n previouslyFocused = (returnFocusTo ?? document.activeElement) as HTMLElement | null;\n container.addEventListener('keydown', handleKeydown);\n if (autoFocus) {\n const focusable = getFocusableElements(container);\n (focusable[0] ?? container).focus();\n }\n };\n\n const disconnect = () => {\n if (!active) return;\n active = false;\n container.removeEventListener('keydown', handleKeydown);\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\n previouslyFocused.focus();\n }\n previouslyFocused = null;\n };\n\n return { connect, disconnect };\n}\n\n/** 列表键盘导航产生的动作 */\nexport type ListKeyAction =\n | { type: 'navigate'; index: number }\n | { type: 'select'; index: number }\n | { type: 'close' }\n | { type: 'none' };\n\n/** 列表键盘导航参数 */\nexport interface ListKeyboardOptions {\n /** 当前高亮项索引(-1 表示无高亮) */\n activeIndex: number;\n /** 列表项总数 */\n itemCount: number;\n /** 是否允许循环(首尾跳转) */\n loop?: boolean;\n}\n\n/**\n * 列表 / 菜单 / 下拉选项的键盘导航核心逻辑(listbox / menu / combobox 通用)。\n * 返回应执行的动作,由调用方据此更新 activeIndex / 触发选中 / 关闭。\n *\n * 支持:ArrowDown/ArrowUp(竖排)/ArrowRight/ArrowLeft(横排)移动、Home/End 跳首尾、\n * Enter/Space 选中、Escape 关闭。\n */\nexport function handleListKeyboard(event: KeyboardEvent, options: ListKeyboardOptions): ListKeyAction {\n const { activeIndex, itemCount, loop = true } = options;\n if (itemCount <= 0) return { type: 'none' };\n\n const clamp = (idx: number) => (idx + itemCount) % itemCount;\n const within = (idx: number) => Math.max(0, Math.min(idx, itemCount - 1));\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n return { type: 'navigate', index: loop ? clamp(activeIndex + 1) : within(activeIndex + 1) };\n case 'ArrowUp':\n case 'ArrowLeft':\n return { type: 'navigate', index: loop ? clamp(activeIndex - 1) : within(activeIndex - 1) };\n case 'Home':\n return { type: 'navigate', index: 0 };\n case 'End':\n return { type: 'navigate', index: itemCount - 1 };\n case 'Enter':\n case ' ':\n case 'Spacebar':\n return activeIndex >= 0 ? { type: 'select', index: activeIndex } : { type: 'none' };\n case 'Escape':\n return { type: 'close' };\n default:\n return { type: 'none' };\n }\n}\n\n/**\n * 为元素批量设置 ARIA 属性(不可变:返回新映射,但直接操作 DOM 属性是 a11y 的固有需求)。\n * 组件挂载后调用一次即可,避免每次 render 重复写 setAttribute。\n */\nexport function applyAria(el: HTMLElement, attrs: Record<string, string | boolean | undefined>): void {\n Object.entries(attrs).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n el.removeAttribute(`aria-${key}`);\n } else {\n el.setAttribute(`aria-${key}`, String(value));\n }\n });\n}\n"],"mappings":"SASgBA,EAAgBC,GAC9B,OAAOA,IAAQ,SAAWA,IAAQ,KAAOA,IAAQ,UACnD,CAGA,MAAMC,EAAqB,CACzB,UACA,yBACA,2BACA,wBACA,yBACA,kCACA,4BACAC,KAAK,K,SAESC,EAAqBC,GACnC,OAAOC,MAAMC,KAAKF,EAAUG,iBAA8BN,IAAqBO,QAC5EC,GAAOA,EAAGC,aAAa,iBAAmB,QAAUD,EAAGE,MAAMC,UAAY,QAE9E,C,SAyBgBC,EAAgBC,GAC9B,MAAMV,UAAEA,EAASW,UAAEA,EAAY,KAAIC,cAAEA,GAAkBF,EACvD,IAAIG,EAAS,MACb,IAAIC,EAAwC,KAE5C,MAAMC,EAAiBC,IACrB,GAAIA,EAAEpB,MAAQ,MAAO,OACrB,MAAMqB,EAAYlB,EAAqBC,GACvC,GAAIiB,EAAUC,SAAW,EAAG,CAC1BF,EAAEG,iBACFnB,EAAUoB,QACV,M,CAEF,MAAMC,EAAQJ,EAAU,GACxB,MAAMK,EAAOL,EAAUA,EAAUC,OAAS,GAC1C,MAAMK,EAAWC,SAASC,cAE1B,GAAIT,EAAEU,SAAU,CACd,GAAIH,IAAaF,IAAUrB,EAAU2B,SAASJ,GAAW,CACvDP,EAAEG,iBACFG,EAAKF,O,MAEF,CACL,GAAIG,IAAaD,EAAM,CACrBN,EAAEG,iBACFE,EAAMD,O,IAKZ,MAAMQ,EAAU,KACd,GAAIf,EAAQ,OACZA,EAAS,KACTC,EAAqBF,GAAiBY,SAASC,cAC/CzB,EAAU6B,iBAAiB,UAAWd,GACtC,GAAIJ,EAAW,CACb,MAAMM,EAAYlB,EAAqBC,IACtCiB,EAAU,IAAMjB,GAAWoB,O,GAIhC,MAAMU,EAAa,KACjB,IAAKjB,EAAQ,OACbA,EAAS,MACTb,EAAU+B,oBAAoB,UAAWhB,GACzC,GAAID,UAA4BA,EAAkBM,QAAU,WAAY,CACtEN,EAAkBM,O,CAEpBN,EAAoB,IAAI,EAG1B,MAAO,CAAEc,UAASE,aACpB,C,SA0BgBE,EAAmBC,EAAsBvB,GACvD,MAAMwB,YAAEA,EAAWC,UAAEA,EAASC,KAAEA,EAAO,MAAS1B,EAChD,GAAIyB,GAAa,EAAG,MAAO,CAAEE,KAAM,QAEnC,MAAMC,EAASC,IAAiBA,EAAMJ,GAAaA,EACnD,MAAMK,EAAUD,GAAgBE,KAAKC,IAAI,EAAGD,KAAKE,IAAIJ,EAAKJ,EAAY,IAEtE,OAAQF,EAAMrC,KACZ,IAAK,YACL,IAAK,aACH,MAAO,CAAEyC,KAAM,WAAYO,MAAOR,EAAOE,EAAMJ,EAAc,GAAKM,EAAON,EAAc,IACzF,IAAK,UACL,IAAK,YACH,MAAO,CAAEG,KAAM,WAAYO,MAAOR,EAAOE,EAAMJ,EAAc,GAAKM,EAAON,EAAc,IACzF,IAAK,OACH,MAAO,CAAEG,KAAM,WAAYO,MAAO,GACpC,IAAK,MACH,MAAO,CAAEP,KAAM,WAAYO,MAAOT,EAAY,GAChD,IAAK,QACL,IAAK,IACL,IAAK,WACH,OAAOD,GAAe,EAAI,CAAEG,KAAM,SAAUO,MAAOV,GAAgB,CAAEG,KAAM,QAC7E,IAAK,SACH,MAAO,CAAEA,KAAM,SACjB,QACE,MAAO,CAAEA,KAAM,QAErB,Q","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,g as i,h as a}from"./p-e42dfa95.js";import{c as r}from"./p-4ef5a884.js";import{p as o,f as n,a as s,g as d,M as l,W as c}from"./p-08b4005c.js";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{.grid{display:grid}.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-date-picker-font-size:14px;--hb-date-picker-height:32px;--hb-date-picker-border-color:var(--hb-border-color,#dcdfe6);--hb-date-picker-border-color-hover:var(--hb-color-primary);--hb-date-picker-bg-color:var(--hb-color-white,#fff);display:inline-block;position:relative}.hb-date-picker{display:inline-block;position:relative;width:240px}.hb-date-picker__input-wrapper{cursor:pointer;display:inline-block;position:relative;width:100%}.hb-date-picker__input{background-color:var(--hb-date-picker-bg-color);border:1px solid var(--hb-date-picker-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:inline-block;font-size:var(--hb-date-picker-font-size);height:var(--hb-date-picker-height);line-height:var(--hb-date-picker-height);outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-date-picker__input:focus,.hb-date-picker__input:hover:not(:disabled){border-color:var(--hb-date-picker-border-color-hover)}.hb-date-picker__suffix{align-items:center;display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-date-picker__clear{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-date-picker__clear svg{height:100%;width:100%}.hb-date-picker__clear:hover{color:var(--hb-color-text-regular,#606266)}.hb-date-picker__icon{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);display:inline-flex;height:14px;justify-content:center;width:14px}.hb-date-picker__icon svg{height:100%;width:100%}.hb-date-picker__dropdown{background-color:var(--hb-date-picker-bg-color);border:1px solid var(--hb-date-picker-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;min-width:280px;padding:12px;position:absolute;top:100%;z-index:1000}.hb-date-picker__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.hb-date-picker__header-label{color:var(--hb-color-text-regular,#606266);font-size:14px;font-weight:600}.hb-date-picker__next-btn,.hb-date-picker__prev-btn{background:0 0;border:none;color:var(--hb-color-text-regular,#606266);cursor:pointer;font-size:18px;padding:4px 8px;transition:color .2s}.hb-date-picker__next-btn:hover,.hb-date-picker__prev-btn:hover{color:var(--hb-color-primary)}.hb-date-picker__weekdays{display:grid;gap:4px;grid-template-columns:repeat(7,1fr);margin-bottom:8px}.hb-date-picker__weekday{color:var(--hb-color-text-placeholder,#c0c4cc);font-size:12px;font-weight:500;text-align:center}.hb-date-picker__days{display:grid;gap:4px;grid-template-columns:repeat(7,1fr)}.hb-date-picker__day{align-items:center;aspect-ratio:1;border-radius:4px;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:flex;font-size:13px;justify-content:center;transition:all .2s}.hb-date-picker__day:hover:not(.hb-date-picker__day--other-month){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-date-picker__day--other-month{color:var(--hb-color-text-placeholder,#c0c4cc);cursor:default}.hb-date-picker__day--today{color:var(--hb-color-primary);font-weight:600}.hb-date-picker__day--selected{background-color:var(--hb-color-primary);color:var(--hb-color-white,#fff)}.hb-date-picker__day--disabled{color:var(--hb-color-text-placeholder,#c0c4cc);cursor:not-allowed}.hb-date-picker__day--disabled:hover{background-color:#0000}.hb-date-picker--small{width:200px}.hb-date-picker--small .hb-date-picker__input{font-size:12px;height:24px;line-height:24px;padding:0 25px 0 12px}.hb-date-picker--large{width:280px}.hb-date-picker--large .hb-date-picker__input{font-size:16px;height:40px;line-height:40px;padding:0 35px 0 18px}.hb-date-picker--disabled{cursor:not-allowed}.hb-date-picker--disabled .hb-date-picker__input{background-color:var(--hb-fill-color-light,#f5f7fa);border-color:var(--hb-date-picker-border-color);color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}.hb-date-picker__month-grid,.hb-date-picker__year-grid{display:grid;gap:8px;grid-template-columns:repeat(3,1fr);padding:8px 12px}.hb-date-picker__month-cell,.hb-date-picker__year-cell{align-items:center;border-radius:4px;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:flex;font-size:var(--hb-cascader-font-size,14px);height:40px;justify-content:center;transition:background-color .2s,color .2s;-webkit-user-select:none;user-select:none}.hb-date-picker__month-cell:hover:not(.hb-date-picker__month-cell--disabled),.hb-date-picker__year-cell:hover:not(.hb-date-picker__year-cell--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-date-picker__month-cell--selected,.hb-date-picker__year-cell--selected{background-color:var(--hb-color-primary-bg,#e6f4ff);color:var(--hb-color-primary,#1677ff);font-weight:600}.hb-date-picker__month-cell--disabled,.hb-date-picker__year-cell--disabled{color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}@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 p=h;const b=class{constructor(i){e(this,i);this.hbChange=t(this,"hbChange",7)}get el(){return i(this)}modelValue;placeholder="请选择日期";disabled=false;size="default";clearable=false;format="YYYY-MM-DD";valueFormat;type="date";disabledDate;name;inputId;isOpen=false;inputValue="";selectedDate;panelViewDate=new Date;hbChange;clickOutside=r({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});componentDidLoad(){this.clickOutside=r({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});this.clickOutside.connect();this.updateInputValue()}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}updateInputValue(){const e=o(this.modelValue);if(!e){this.inputValue="";this.selectedDate=undefined;return}this.selectedDate=e;this.inputValue=n(e,this.format)}handleInputClick=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen&&(this.type==="month"||this.type==="year")){this.panelViewDate=this.selectedDate?new Date(this.selectedDate):new Date}};handleClear=e=>{e.stopPropagation();this.modelValue=undefined;this.inputValue="";this.selectedDate=undefined;this.isOpen=false;this.hbChange.emit(undefined)};handleDateSelect=e=>{if(this.disabledDate&&this.disabledDate(e))return;this.selectedDate=e;this.modelValue=this.valueFormat?n(e,this.format):e;this.updateInputValue();this.isOpen=false;this.hbChange.emit(this.modelValue)};handleMonthSelect=e=>{const t=new Date(this.panelViewDate.getFullYear(),e,1);if(this.disabledDate&&this.disabledDate(t))return;this.selectedDate=t;this.panelViewDate=new Date(t);const i=`${t.getFullYear()}-${String(e+1).padStart(2,"0")}`;this.inputValue=i;this.modelValue=i;this.isOpen=false;this.hbChange.emit(i)};handleYearSelect=e=>{const t=new Date(e,0,1);if(this.disabledDate&&this.disabledDate(t))return;this.selectedDate=t;this.panelViewDate=new Date(t);const i=String(e);this.inputValue=i;this.modelValue=i;this.isOpen=false;this.hbChange.emit(i)};changeMonth(e){this.selectedDate=s(this.selectedDate||new Date,e)}changePanelView(e){const t=new Date(this.panelViewDate);if(this.type==="month")t.setFullYear(t.getFullYear()+e);else t.setFullYear(t.getFullYear()+e*12);this.panelViewDate=t}isDateDisabled=e=>!!this.disabledDate&&this.disabledDate(e);render(){const e=d(this.selectedDate||new Date,this.selectedDate);const t=this.selectedDate||new Date;const i=this.panelViewDate||t;const r=this.type==="month"?`${i.getFullYear()} 年`:this.type==="year"?`${Math.floor(i.getFullYear()/12)*12} - ${Math.floor(i.getFullYear()/12)*12+11}`:`${t.getFullYear()}年 ${l[t.getMonth()]}`;return a("div",{key:"2d4d4082eee095d506d8450a7f58685cbd4bb1a9",class:{"hb-date-picker":true,"hb-date-picker--open":this.isOpen,"hb-date-picker--disabled":this.disabled,[`hb-date-picker--${this.size}`]:true,[`hb-date-picker--${this.type}`]:true}},a("div",{key:"6b740a744a4f1d24d1d1b8d65d44a0ca6d69b3fb",class:"hb-date-picker__input-wrapper",onClick:this.handleInputClick},a("input",{key:"7eeee5862662040a0f2858b04fa4ca96f01e3eb9",type:"text",id:this.inputId,name:this.name,class:"hb-date-picker__input",placeholder:this.placeholder,value:this.inputValue,disabled:this.disabled,readonly:true,role:"combobox","aria-haspopup":"dialog","aria-expanded":this.isOpen?"true":"false","aria-label":this.placeholder}),a("span",{key:"754144e78db34c6f674469e2c95a51c39828c965",class:"hb-date-picker__suffix"},this.clearable&&this.modelValue&&a("span",{key:"7766158871f0d0b5288b4320f10976704879f680",class:"hb-date-picker__clear",role:"button","aria-label":"清空",onClick:this.handleClear},a("svg",{key:"64ec132282290456ec08306f2219eae1fa420377",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},a("path",{key:"f1a41eedee2964a1fd92672f90591b2afdd7f0ca",d:"M6 6l12 12M18 6L6 18"}))),a("span",{key:"6c1972309c18139b1cd310f26855dbe846e03982",class:"hb-date-picker__icon","aria-hidden":"true"},a("svg",{key:"e15ef729755d5629fbe16d356a9723ea0ebda9ad",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},a("rect",{key:"db3dd7a69499a878ccd000eae533cbe9485b9d13",x:"3",y:"5",width:"18",height:"16",rx:"2"}),a("path",{key:"dec2aa31cdf761b591e462d8c9dedb061a73ed63",d:"M3 9h18M8 3v4M16 3v4"}))))),this.isOpen&&a("div",{key:"626c192f0e2d45e7b5efbd53dd02241af51119be",class:"hb-date-picker__dropdown",role:"dialog","aria-label":this.type==="month"?"选择月份":this.type==="year"?"选择年份":"选择日期"},a("div",{key:"a88b651f2defcee8a88ac07a4ce8a2e8a1857854",class:"hb-date-picker__header"},a("button",{key:"c47b93061818e710090959432b9e89f9281edb4e",type:"button",class:"hb-date-picker__prev-btn","aria-label":this.type==="date"?"上一月":"上一年",onClick:()=>this.type==="date"?this.changeMonth(-1):this.changePanelView(-1)},"‹"),a("span",{key:"ae85952f2be4f5cd1cb075c3cd9ea69503a0362e",class:"hb-date-picker__header-label","aria-live":"polite"},r),a("button",{key:"0114d37baea55623d2fc65680ae7d73749a1ef24",type:"button",class:"hb-date-picker__next-btn","aria-label":this.type==="date"?"下一月":"下一年",onClick:()=>this.type==="date"?this.changeMonth(1):this.changePanelView(1)},"›")),this.type==="date"&&a("div",{key:"754807f77924d8a74ff4b5fc26b6f4794f3fcf3b",class:"hb-date-picker__body",role:"grid"},a("div",{key:"80e7acb304dde0dd8dd256add20b5997c3d8311c",class:"hb-date-picker__weekdays",role:"row"},c.map((e=>a("div",{class:"hb-date-picker__weekday",role:"columnheader","aria-disabled":"true"},e)))),a("div",{key:"c8dce0eb806e015292e4841d4fe3dd349bc2a52b",class:"hb-date-picker__days",role:"row"},e.map(((e,t)=>{const i=e.isCurrentMonth&&this.isDateDisabled(e.date);return a("div",{key:t,class:{"hb-date-picker__day":true,"hb-date-picker__day--other-month":!e.isCurrentMonth,"hb-date-picker__day--today":e.isToday,"hb-date-picker__day--selected":e.isSelected,"hb-date-picker__day--disabled":i},role:"gridcell","aria-selected":e.isSelected?"true":"false","aria-disabled":!e.isCurrentMonth||i?"true":undefined,"aria-label":n(e.date,this.format),onClick:()=>e.isCurrentMonth&&!i&&this.handleDateSelect(e.date)},e.date.getDate())})))),this.type==="month"&&a("div",{key:"ebf1c3935e7c868153823113622e5c08ee0bdffd",class:"hb-date-picker__body hb-date-picker__month-grid",role:"grid"},l.map(((e,t)=>{const r=new Date(i.getFullYear(),t,1);const o=!!this.disabledDate&&this.disabledDate(r);const n=!!this.selectedDate&&this.selectedDate.getFullYear()===i.getFullYear()&&this.selectedDate.getMonth()===t;return a("div",{class:{"hb-date-picker__month-cell":true,"hb-date-picker__month-cell--selected":n,"hb-date-picker__month-cell--disabled":o},role:"gridcell","aria-selected":n?"true":"false","aria-disabled":o?"true":undefined,onClick:()=>!o&&this.handleMonthSelect(t)},e)}))),this.type==="year"&&a("div",{key:"1cf9555cc9c65d5a723528948cf5e63cc0e416f5",class:"hb-date-picker__body hb-date-picker__year-grid",role:"grid"},(()=>{const e=Math.floor(i.getFullYear()/12)*12;const t=[];for(let i=0;i<12;i++)t.push(e+i);return t.map((e=>{const t=new Date(e,0,1);const i=!!this.disabledDate&&this.disabledDate(t);const r=!!this.selectedDate&&this.selectedDate.getFullYear()===e;return a("div",{class:{"hb-date-picker__year-cell":true,"hb-date-picker__year-cell--selected":r,"hb-date-picker__year-cell--disabled":i},role:"gridcell","aria-selected":r?"true":"false","aria-disabled":i?"true":undefined,onClick:()=>!i&&this.handleYearSelect(e)},e)}))})())))}static get watchers(){return{modelValue:["handleValueChange"]}}};b.style=p;export{b as hb_date_picker};
2
- //# sourceMappingURL=p-d79a15b1.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["datePickerCss","HbDatePickerStyle0","DatePicker","modelValue","placeholder","disabled","size","clearable","format","valueFormat","type","disabledDate","name","inputId","isOpen","inputValue","selectedDate","panelViewDate","Date","hbChange","clickOutside","createClickOutsideHandler","host","this","onClose","componentDidLoad","el","connect","updateInputValue","disconnectedCallback","disconnect","handleValueChange","date","parseDate","undefined","formatDate","handleInputClick","handleClear","e","stopPropagation","emit","handleDateSelect","handleMonthSelect","monthIndex","next","getFullYear","iso","String","padStart","handleYearSelect","year","changeMonth","delta","addMonths","changePanelView","setFullYear","isDateDisabled","render","days","getCalendarDays","current","panelAnchor","headerLabel","Math","floor","MONTH_NAMES","getMonth","h","key","class","onClick","id","value","readonly","role","viewBox","fill","stroke","d","x","y","width","height","rx","WEEK_DAY_NAMES","map","day","index","dayDisabled","isCurrentMonth","isToday","isSelected","getDate","idx","probe","monthDisabled","startYear","years","i","push","yearDisabled"],"sources":["src/components/DatePicker/date-picker.css?tag=hb-date-picker&encapsulation=shadow","src/components/DatePicker/DatePicker.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-date-picker-font-size: 14px;\n --hb-date-picker-height: 32px;\n --hb-date-picker-border-color: var(--hb-border-color, #dcdfe6);\n --hb-date-picker-border-color-hover: var(--hb-color-primary);\n --hb-date-picker-bg-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-date-picker {\n display: inline-block;\n position: relative;\n width: 240px;\n}\n\n.hb-date-picker__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-date-picker__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-date-picker-height);\n line-height: var(--hb-date-picker-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-date-picker-font-size);\n color: var(--hb-color-text-regular, #606266);\n background-color: var(--hb-date-picker-bg-color);\n border: 1px solid var(--hb-date-picker-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-date-picker__input:hover:not(:disabled) {\n border-color: var(--hb-date-picker-border-color-hover);\n}\n\n.hb-date-picker__input:focus {\n border-color: var(--hb-date-picker-border-color-hover);\n}\n\n.hb-date-picker__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-date-picker__clear {\n margin-right: 8px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n transition: color 0.2s;\n}\n\n.hb-date-picker__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-date-picker__clear:hover {\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-date-picker__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-date-picker__icon svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-date-picker__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-date-picker-bg-color);\n border: 1px solid var(--hb-date-picker-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: 280px;\n padding: 12px;\n}\n\n.hb-date-picker__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.hb-date-picker__header-label {\n font-weight: 600;\n font-size: 14px;\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-date-picker__prev-btn,\n.hb-date-picker__next-btn {\n background: none;\n border: none;\n font-size: 18px;\n cursor: pointer;\n color: var(--hb-color-text-regular, #606266);\n padding: 4px 8px;\n transition: color 0.2s;\n}\n\n.hb-date-picker__prev-btn:hover,\n.hb-date-picker__next-btn:hover {\n color: var(--hb-color-primary);\n}\n\n.hb-date-picker__weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 4px;\n margin-bottom: 8px;\n}\n\n.hb-date-picker__weekday {\n text-align: center;\n font-size: 12px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n font-weight: 500;\n}\n\n.hb-date-picker__days {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 4px;\n}\n\n.hb-date-picker__day {\n aspect-ratio: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n color: var(--hb-color-text-regular, #606266);\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.hb-date-picker__day:hover:not(.hb-date-picker__day--other-month) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-date-picker__day--other-month {\n color: var(--hb-color-text-placeholder, #c0c4cc);\n cursor: default;\n}\n\n.hb-date-picker__day--today {\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-date-picker__day--selected {\n background-color: var(--hb-color-primary);\n color: var(--hb-color-white, #ffffff);\n}\n\n.hb-date-picker__day--disabled {\n color: var(--hb-color-text-placeholder, #c0c4cc);\n cursor: not-allowed;\n}\n\n.hb-date-picker__day--disabled:hover {\n background-color: transparent;\n}\n\n.hb-date-picker--small {\n width: 200px;\n}\n\n.hb-date-picker--small .hb-date-picker__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n padding: 0 25px 0 12px;\n}\n\n.hb-date-picker--large {\n width: 280px;\n}\n\n.hb-date-picker--large .hb-date-picker__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n padding: 0 35px 0 18px;\n}\n\n.hb-date-picker--disabled {\n cursor: not-allowed;\n}\n\n.hb-date-picker--disabled .hb-date-picker__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-date-picker-border-color);\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n\n/* ---- type=month / type=year 选择网格 ---- */\n.hb-date-picker__month-grid,\n.hb-date-picker__year-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding: 8px 12px;\n}\n\n.hb-date-picker__month-cell,\n.hb-date-picker__year-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 40px;\n font-size: var(--hb-cascader-font-size, 14px);\n color: var(--hb-color-text-regular, #606266);\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.2s, color 0.2s;\n user-select: none;\n}\n\n.hb-date-picker__month-cell:hover:not(.hb-date-picker__month-cell--disabled),\n.hb-date-picker__year-cell:hover:not(.hb-date-picker__year-cell--disabled) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-date-picker__month-cell--selected,\n.hb-date-picker__year-cell--selected {\n color: var(--hb-color-primary, #1677ff);\n font-weight: 600;\n background-color: var(--hb-color-primary-bg, #e6f4ff);\n}\n\n.hb-date-picker__month-cell--disabled,\n.hb-date-picker__year-cell--disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { getCalendarDays, formatDate, parseDate, addMonths, MONTH_NAMES, WEEK_DAY_NAMES } from '../../utils/date-helpers';\n\n/**\n * DatePicker 日期选择器组件\n * 用于选择或输入日期\n */\n@Component({\n tag: 'hb-date-picker',\n styleUrl: 'date-picker.css',\n shadow: true,\n})\nexport class DatePicker {\n @Element() el: HTMLElement;\n\n /** 绑定值 */\n @Prop({ mutable: true }) modelValue?: string | Date;\n\n /** 输入框占位文本 */\n @Prop() placeholder: string = '请选择日期';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 输入框尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否可清空 */\n @Prop() clearable: boolean = false;\n\n /** 日期格式 */\n @Prop() format: string = 'YYYY-MM-DD';\n\n /** 显示在输入框中的格式 */\n @Prop() valueFormat?: string;\n\n /**\n * 日期选择器类型:\n * - 'date':日选择(默认)\n * - 'month':月选择(month 视图网格,emit YYYY-MM)\n * - 'year':年选择(year 视图网格,emit YYYY)\n * 注:'datetime'/'week' 请用独立的 DateTimePicker 组件 / 后续补全。\n */\n @Prop() type: 'date' | 'month' | 'year' = 'date';\n\n /**\n * 禁用日期判定函数。返回 true 的日期在日历中不可选(加 disabled 态、不可点击、aria-disabled)。\n * @param date 当前日期格子的 Date 对象\n */\n @Prop() disabledDate?: (date: Date) => boolean;\n\n /** 原生 name 属性 */\n @Prop() name?: string;\n\n /** 原生 id 属性 */\n @Prop() inputId?: string;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n @State() selectedDate?: Date;\n /** month/year 模式的面板锚点(不随选择改变,仅导航用) */\n @State() panelViewDate: Date = new Date();\n\n /** 值改变事件 */\n @Event() hbChange: EventEmitter<string | Date>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n this.clickOutside.connect();\n this.updateInputValue();\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n private updateInputValue() {\n const date = parseDate(this.modelValue);\n if (!date) {\n this.inputValue = '';\n this.selectedDate = undefined;\n return;\n }\n this.selectedDate = date;\n this.inputValue = formatDate(date, this.format);\n }\n\n private handleInputClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n // month/year 模式打开时,从已选值或今天初始化面板锚点\n if (this.isOpen && (this.type === 'month' || this.type === 'year')) {\n this.panelViewDate = this.selectedDate ? new Date(this.selectedDate) : new Date();\n }\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.modelValue = undefined;\n this.inputValue = '';\n this.selectedDate = undefined;\n this.isOpen = false;\n this.hbChange.emit(undefined);\n };\n\n private handleDateSelect = (date: Date) => {\n // disabledDate 返回 true 的日期不可选\n if (this.disabledDate && this.disabledDate(date)) return;\n this.selectedDate = date;\n this.modelValue = this.valueFormat ? formatDate(date, this.format) : date;\n this.updateInputValue();\n this.isOpen = false;\n this.hbChange.emit(this.modelValue);\n };\n\n /** type='month':选某月 → 锚定到该月 1 号,emit YYYY-MM */\n private handleMonthSelect = (monthIndex: number) => {\n const next = new Date(this.panelViewDate.getFullYear(), monthIndex, 1);\n if (this.disabledDate && this.disabledDate(next)) return;\n this.selectedDate = next;\n this.panelViewDate = new Date(next);\n const iso = `${next.getFullYear()}-${String(monthIndex + 1).padStart(2, '0')}`;\n this.inputValue = iso;\n this.modelValue = iso;\n this.isOpen = false;\n this.hbChange.emit(iso);\n };\n\n /** type='year':选某年 → 锚定到该年 1 月 1 日,emit YYYY */\n private handleYearSelect = (year: number) => {\n const next = new Date(year, 0, 1);\n if (this.disabledDate && this.disabledDate(next)) return;\n this.selectedDate = next;\n this.panelViewDate = new Date(next);\n const iso = String(year);\n this.inputValue = iso;\n this.modelValue = iso;\n this.isOpen = false;\n this.hbChange.emit(iso);\n };\n\n private changeMonth(delta: number) {\n this.selectedDate = addMonths(this.selectedDate || new Date(), delta);\n }\n\n /** month/year 面板导航:month ±1 年、year ±12 年 */\n private changePanelView(delta: number) {\n const next = new Date(this.panelViewDate);\n if (this.type === 'month') next.setFullYear(next.getFullYear() + delta);\n else next.setFullYear(next.getFullYear() + delta * 12);\n this.panelViewDate = next;\n }\n\n /** 判断某日期是否被 disabledDate 禁用 */\n private isDateDisabled = (date: Date): boolean => {\n return !!this.disabledDate && this.disabledDate(date);\n };\n\n render() {\n const days = getCalendarDays(this.selectedDate || new Date(), this.selectedDate);\n const current = this.selectedDate || new Date();\n\n // month/year 面板锚点:默认用 panelViewDate,未打开时回退到 selectedDate/today\n const panelAnchor = this.panelViewDate || current;\n const headerLabel =\n this.type === 'month'\n ? `${panelAnchor.getFullYear()} 年`\n : this.type === 'year'\n ? `${Math.floor(panelAnchor.getFullYear() / 12) * 12} - ${Math.floor(panelAnchor.getFullYear() / 12) * 12 + 11}`\n : `${current.getFullYear()}年 ${MONTH_NAMES[current.getMonth()]}`;\n\n return (\n <div\n class={{\n 'hb-date-picker': true,\n 'hb-date-picker--open': this.isOpen,\n 'hb-date-picker--disabled': this.disabled,\n [`hb-date-picker--${this.size}`]: true,\n [`hb-date-picker--${this.type}`]: true,\n }}\n >\n <div class=\"hb-date-picker__input-wrapper\" onClick={this.handleInputClick}>\n <input\n type=\"text\"\n id={this.inputId}\n name={this.name}\n class=\"hb-date-picker__input\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-label={this.placeholder}\n />\n <span class=\"hb-date-picker__suffix\">\n {this.clearable && this.modelValue && (\n <span class=\"hb-date-picker__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 <span class=\"hb-date-picker__icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M3 9h18M8 3v4M16 3v4\" />\n </svg>\n </span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-date-picker__dropdown\" role=\"dialog\" aria-label={this.type === 'month' ? '选择月份' : this.type === 'year' ? '选择年份' : '选择日期'}>\n <div class=\"hb-date-picker__header\">\n <button\n type=\"button\"\n class=\"hb-date-picker__prev-btn\"\n aria-label={this.type === 'date' ? '上一月' : '上一年'}\n onClick={() => (this.type === 'date' ? this.changeMonth(-1) : this.changePanelView(-1))}\n >\n ‹\n </button>\n <span class=\"hb-date-picker__header-label\" aria-live=\"polite\">{headerLabel}</span>\n <button\n type=\"button\"\n class=\"hb-date-picker__next-btn\"\n aria-label={this.type === 'date' ? '下一月' : '下一年'}\n onClick={() => (this.type === 'date' ? this.changeMonth(1) : this.changePanelView(1))}\n >\n ›\n </button>\n </div>\n {this.type === 'date' && (\n <div class=\"hb-date-picker__body\" role=\"grid\">\n <div class=\"hb-date-picker__weekdays\" role=\"row\">\n {WEEK_DAY_NAMES.map(day => (\n <div class=\"hb-date-picker__weekday\" role=\"columnheader\" aria-disabled=\"true\">{day}</div>\n ))}\n </div>\n <div class=\"hb-date-picker__days\" role=\"row\">\n {days.map((day, index) => {\n const dayDisabled = day.isCurrentMonth && this.isDateDisabled(day.date);\n return (\n <div\n key={index}\n class={{\n 'hb-date-picker__day': true,\n 'hb-date-picker__day--other-month': !day.isCurrentMonth,\n 'hb-date-picker__day--today': day.isToday,\n 'hb-date-picker__day--selected': day.isSelected,\n 'hb-date-picker__day--disabled': dayDisabled,\n }}\n role=\"gridcell\"\n aria-selected={day.isSelected ? 'true' : 'false'}\n aria-disabled={!day.isCurrentMonth || dayDisabled ? 'true' : undefined}\n aria-label={formatDate(day.date, this.format)}\n onClick={() => day.isCurrentMonth && !dayDisabled && this.handleDateSelect(day.date)}\n >\n {day.date.getDate()}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {this.type === 'month' && (\n <div class=\"hb-date-picker__body hb-date-picker__month-grid\" role=\"grid\">\n {MONTH_NAMES.map((name, idx) => {\n const probe = new Date(panelAnchor.getFullYear(), idx, 1);\n const monthDisabled = !!this.disabledDate && this.disabledDate(probe);\n const isSelected =\n !!this.selectedDate &&\n this.selectedDate.getFullYear() === panelAnchor.getFullYear() &&\n this.selectedDate.getMonth() === idx;\n return (\n <div\n class={{\n 'hb-date-picker__month-cell': true,\n 'hb-date-picker__month-cell--selected': isSelected,\n 'hb-date-picker__month-cell--disabled': monthDisabled,\n }}\n role=\"gridcell\"\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={monthDisabled ? 'true' : undefined}\n onClick={() => !monthDisabled && this.handleMonthSelect(idx)}\n >\n {name}\n </div>\n );\n })}\n </div>\n )}\n {this.type === 'year' && (\n <div class=\"hb-date-picker__body hb-date-picker__year-grid\" role=\"grid\">\n {(() => {\n const startYear = Math.floor(panelAnchor.getFullYear() / 12) * 12;\n const years: number[] = [];\n for (let i = 0; i < 12; i++) years.push(startYear + i);\n return years.map(y => {\n const probe = new Date(y, 0, 1);\n const yearDisabled = !!this.disabledDate && this.disabledDate(probe);\n const isSelected = !!this.selectedDate && this.selectedDate.getFullYear() === y;\n return (\n <div\n class={{\n 'hb-date-picker__year-cell': true,\n 'hb-date-picker__year-cell--selected': isSelected,\n 'hb-date-picker__year-cell--disabled': yearDisabled,\n }}\n role=\"gridcell\"\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={yearDisabled ? 'true' : undefined}\n onClick={() => !yearDisabled && this.handleYearSelect(y)}\n >\n {y}\n </div>\n );\n });\n })()}\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["checkboxCss","HbCheckboxStyle0","Checkbox","modelValue","value","disabled","checked","indeterminate","name","checkboxId","label","border","size","hbChange","isChecked","handleValueChange","this","updateChecked","componentDidLoad","undefined","Array","isArray","includes","handleChange","e","target","preventDefault","newValue","filter","v","emit","render","inputId","Math","random","toString","substr","h","key","class","type","id","onChange"],"sources":["src/components/Checkbox/checkbox.css?tag=hb-checkbox&encapsulation=shadow","src/components/Checkbox/Checkbox.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-checkbox-font-size: 14px;\n --hb-checkbox-font-size-large: 16px;\n --hb-checkbox-font-size-small: 12px;\n --hb-checkbox-color: var(--hb-color-primary);\n --hb-checkbox-border-color: var(--hb-border-color, #dcdfe6);\n --hb-checkbox-border-color-checked: var(--hb-color-primary);\n --hb-checkbox-bg-color: var(--hb-color-white, #ffffff);\n --hb-checkbox-text-color: var(--hb-color-text-regular, #606266);\n --hb-checkbox-disabled-color: var(--hb-color-text-placeholder, #c0c4cc);\n --hb-checkbox-disabled-bg-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-checkbox {\n color: var(--hb-checkbox-text-color);\n font-weight: 500;\n font-size: var(--hb-checkbox-font-size);\n position: relative;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n user-select: none;\n margin-right: 30px;\n}\n\n.hb-checkbox:last-child {\n margin-right: 0;\n}\n\n.hb-checkbox__input {\n white-space: nowrap;\n cursor: pointer;\n outline: none;\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n}\n\n.hb-checkbox__original {\n opacity: 0;\n outline: none;\n position: absolute;\n margin: 0;\n width: 0;\n height: 0;\n z-index: -1;\n}\n\n.hb-checkbox__inner {\n display: inline-block;\n position: relative;\n border: var(--hb-border, 1px solid var(--hb-checkbox-border-color));\n border-radius: 2px;\n box-sizing: border-box;\n width: 14px;\n height: 14px;\n background-color: var(--hb-checkbox-bg-color);\n z-index: 1;\n transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),\n background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);\n}\n\n.hb-checkbox__inner::after {\n box-sizing: content-box;\n content: '';\n border: 2px solid var(--hb-color-white, #ffffff);\n border-left: 0;\n border-top: 0;\n height: 7px;\n left: 4px;\n position: absolute;\n top: 1px;\n transform: rotate(45deg) scaleY(0);\n width: 3px;\n transition: transform 0.15s ease-in 0.05s;\n transform-origin: center;\n}\n\n.hb-checkbox--checked .hb-checkbox__inner {\n background-color: var(--hb-checkbox-color);\n border-color: var(--hb-checkbox-border-color-checked);\n}\n\n.hb-checkbox--checked .hb-checkbox__inner::after {\n transform: rotate(45deg) scaleY(1);\n}\n\n.hb-checkbox__inner--indeterminate {\n background-color: var(--hb-checkbox-color);\n border-color: var(--hb-checkbox-border-color-checked);\n}\n\n.hb-checkbox__inner--indeterminate::after {\n content: '';\n position: absolute;\n display: block;\n background-color: var(--hb-color-white, #ffffff);\n height: 2px;\n transform: scaleX(0.5);\n left: 0;\n right: 0;\n top: 5px;\n}\n\n.hb-checkbox__label {\n padding-left: 8px;\n line-height: 1;\n font-size: var(--hb-checkbox-font-size);\n}\n\n.hb-checkbox--disabled {\n cursor: not-allowed;\n}\n\n.hb-checkbox--disabled .hb-checkbox__inner {\n background-color: var(--hb-checkbox-disabled-bg-color);\n border-color: var(--hb-checkbox-border-color);\n cursor: not-allowed;\n}\n\n.hb-checkbox--disabled .hb-checkbox__inner::after {\n cursor: not-allowed;\n border-color: var(--hb-checkbox-disabled-color);\n}\n\n.hb-checkbox--disabled .hb-checkbox__label {\n color: var(--hb-checkbox-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-checkbox--border {\n padding: 9px 15px 9px 9px;\n border-radius: 4px;\n border: 1px solid var(--hb-checkbox-border-color);\n box-sizing: border-box;\n white-space: nowrap;\n}\n\n.hb-checkbox--border.hb-checkbox--checked {\n border-color: var(--hb-checkbox-border-color-checked);\n}\n\n.hb-checkbox--border.hb-checkbox--disabled {\n border-color: var(--hb-checkbox-border-color);\n cursor: not-allowed;\n}\n\n.hb-checkbox--small {\n font-size: var(--hb-checkbox-font-size-small);\n}\n\n.hb-checkbox--small .hb-checkbox__inner {\n width: 12px;\n height: 12px;\n}\n\n.hb-checkbox--small .hb-checkbox__label {\n padding-left: 6px;\n}\n\n.hb-checkbox--large {\n font-size: var(--hb-checkbox-font-size-large);\n}\n\n.hb-checkbox--large .hb-checkbox__inner {\n width: 16px;\n height: 16px;\n}\n\n.hb-checkbox--large .hb-checkbox__label {\n padding-left: 10px;\n}\n\n.hb-checkbox:hover:not(.hb-checkbox--disabled) .hb-checkbox__inner {\n border-color: var(--hb-checkbox-border-color-checked);\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Watch } from '@stencil/core';\n\nexport interface CheckboxOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\n/**\n * Checkbox 多选框组件\n * 一组备选项中进行多选\n */\n@Component({\n tag: 'hb-checkbox',\n styleUrl: 'checkbox.css',\n shadow: true,\n})\nexport class Checkbox {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: boolean | (string | number)[] = false;\n\n /**\n * 当前值(用于单个 checkbox)\n */\n @Prop() value?: string | number;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否选中\n * @default false\n */\n @Prop() checked: boolean = false;\n\n /**\n * 是否不确定状态\n * @default false\n */\n @Prop() indeterminate: boolean = false;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() checkboxId?: string;\n\n /**\n * 文本标签\n */\n @Prop() label?: string;\n\n /**\n * 是否显示边框\n * @default false\n */\n @Prop() border: boolean = false;\n\n /**\n * 尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<boolean | (string | number)[]>;\n\n @State() isChecked: boolean = false;\n\n @Watch('modelValue')\n @Watch('checked')\n @Watch('value')\n handleValueChange() {\n this.updateChecked();\n }\n\n componentDidLoad() {\n this.updateChecked();\n }\n\n private updateChecked() {\n if (this.value !== undefined) {\n // 在 checkbox group 中\n const modelValue = this.modelValue as (string | number)[];\n this.isChecked = Array.isArray(modelValue) && modelValue.includes(this.value);\n } else {\n // 单个 checkbox\n this.isChecked = this.checked || (this.modelValue as boolean);\n }\n }\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n \n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.value !== undefined) {\n // 在 checkbox group 中\n const modelValue = (this.modelValue as (string | number)[]) || [];\n let newValue: (string | number)[];\n \n if (target.checked) {\n newValue = [...modelValue, this.value];\n } else {\n newValue = modelValue.filter(v => v !== this.value);\n }\n \n this.modelValue = newValue;\n this.hbChange.emit(newValue);\n } else {\n // 单个 checkbox\n this.modelValue = target.checked;\n this.isChecked = target.checked;\n this.hbChange.emit(target.checked);\n }\n };\n\n render() {\n const inputId = this.checkboxId || `hb-checkbox-${Math.random().toString(36).substr(2, 9)}`;\n \n return (\n <label\n class={{\n 'hb-checkbox': true,\n 'hb-checkbox--checked': this.isChecked,\n 'hb-checkbox--disabled': this.disabled,\n 'hb-checkbox--border': this.border,\n [`hb-checkbox--${this.size}`]: true,\n }}\n >\n <span class=\"hb-checkbox__input\">\n <input\n type=\"checkbox\"\n id={inputId}\n name={this.name}\n checked={this.isChecked}\n disabled={this.disabled}\n indeterminate={this.indeterminate}\n onChange={this.handleChange}\n class=\"hb-checkbox__original\"\n />\n <span\n class={{\n 'hb-checkbox__inner': true,\n 'hb-checkbox__inner--indeterminate': this.indeterminate,\n }}\n ></span>\n </span>\n {(this.label || this.value !== undefined) && (\n <span class=\"hb-checkbox__label\">\n <slot>{this.label || this.value}</slot>\n </span>\n )}\n </label>\n );\n }\n}\n\n"],"mappings":"kDAAA,MAAMA,EAAc,ytSACpB,MAAAC,EAAeD,E,MCgBFE,EAAQ,M,4DAIMC,WAA4C,MAK7DC,MAMAC,SAAoB,MAMpBC,QAAmB,MAMnBC,cAAyB,MAKzBC,KAKAC,WAKAC,MAMAC,OAAkB,MAKlBC,KAAsC,UAKrCC,SAEAC,UAAqB,MAK9B,iBAAAC,GACEC,KAAKC,e,CAGP,gBAAAC,GACEF,KAAKC,e,CAGC,aAAAA,GACN,GAAID,KAAKZ,QAAUe,UAAW,CAE5B,MAAMhB,EAAaa,KAAKb,WACxBa,KAAKF,UAAYM,MAAMC,QAAQlB,IAAeA,EAAWmB,SAASN,KAAKZ,M,KAClE,CAELY,KAAKF,UAAYE,KAAKV,SAAYU,KAAKb,U,EAInCoB,aAAgBC,IACtB,MAAMC,EAASD,EAAEC,OAEjB,GAAIT,KAAKX,SAAU,CACjBmB,EAAEE,iBACF,M,CAGF,GAAIV,KAAKZ,QAAUe,UAAW,CAE5B,MAAMhB,EAAca,KAAKb,YAAsC,GAC/D,IAAIwB,EAEJ,GAAIF,EAAOnB,QAAS,CAClBqB,EAAW,IAAIxB,EAAYa,KAAKZ,M,KAC3B,CACLuB,EAAWxB,EAAWyB,QAAOC,GAAKA,IAAMb,KAAKZ,O,CAG/CY,KAAKb,WAAawB,EAClBX,KAAKH,SAASiB,KAAKH,E,KACd,CAELX,KAAKb,WAAasB,EAAOnB,QACzBU,KAAKF,UAAYW,EAAOnB,QACxBU,KAAKH,SAASiB,KAAKL,EAAOnB,Q,GAI9B,MAAAyB,GACE,MAAMC,EAAUhB,KAAKP,YAAc,eAAewB,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,KAEvF,OACEC,EAAA,SAAAC,IAAA,2CACEC,MAAO,CACL,cAAe,KACf,uBAAwBvB,KAAKF,UAC7B,wBAAyBE,KAAKX,SAC9B,sBAAuBW,KAAKL,OAC5B,CAAC,gBAAgBK,KAAKJ,QAAS,OAGjCyB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,sBACVF,EAAA,SAAAC,IAAA,2CACEE,KAAK,WACLC,GAAIT,EACJxB,KAAMQ,KAAKR,KACXF,QAASU,KAAKF,UACdT,SAAUW,KAAKX,SACfE,cAAeS,KAAKT,cACpBmC,SAAU1B,KAAKO,aACfgB,MAAM,0BAERF,EAAA,QAAAC,IAAA,2CACEC,MAAO,CACL,qBAAsB,KACtB,oCAAqCvB,KAAKT,mBAI9CS,KAAKN,OAASM,KAAKZ,QAAUe,YAC7BkB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,sBACVF,EAAA,QAAAC,IAAA,4CAAOtB,KAAKN,OAASM,KAAKZ,Q","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["paginationCss","HbPaginationStyle0","Pagination","total","pageSize","currentPage","pageSizes","pagerCount","disabled","showTotal","showPageSize","internalCurrent","internalPageSize","hbCurrentChange","hbSizeChange","handleCurrentPageChange","this","handlePageSizeChange","componentDidLoad","totalPages","Math","max","ceil","handlePageClick","page","emit","handleSizeChange","e","target","size","parseInt","value","newTotal","safePage","min","getPages","pages","current","pager","i","push","half","floor","start","end","render","h","key","class","role","onChange","map","selected","type","onClick","undefined"],"sources":["src/components/Pagination/pagination.css?tag=hb-pagination&encapsulation=shadow","src/components/Pagination/Pagination.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-pagination {\n display: flex;\n align-items: center;\n gap: var(--hb-spacing-xxs);\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n user-select: none;\n}\n\n.hb-pagination--disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.hb-pagination__total {\n margin-right: var(--hb-spacing-xs);\n color: var(--hb-color-text-secondary);\n}\n\n.hb-pagination__sizes {\n height: 28px;\n padding: 0 var(--hb-spacing-xs);\n border: 1px solid var(--hb-color-border);\n border-radius: var(--hb-border-radius-sm);\n background: var(--hb-color-bg);\n color: var(--hb-color-text);\n font-size: var(--hb-font-size-sm);\n cursor: pointer;\n outline: none;\n margin-right: var(--hb-spacing-xs);\n}\n\n.hb-pagination__sizes:focus {\n border-color: var(--hb-color-primary);\n}\n\n.hb-pagination__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 4px;\n border: 1px solid var(--hb-color-border);\n border-radius: var(--hb-border-radius-sm);\n background: var(--hb-color-bg);\n color: var(--hb-color-text);\n font-size: var(--hb-font-size-sm);\n cursor: pointer;\n outline: none;\n transition: all var(--hb-transition-duration) var(--hb-transition-function);\n}\n\n.hb-pagination__btn:hover:not(:disabled):not(.hb-pagination__btn--active) {\n color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n}\n\n.hb-pagination__btn:disabled {\n color: var(--hb-color-text-disabled);\n cursor: not-allowed;\n background: var(--hb-color-fill-quaternary);\n}\n\n.hb-pagination__btn--active {\n background-color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n color: #fff;\n}\n\n.hb-pagination__ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n color: var(--hb-color-text-secondary);\n letter-spacing: 2px;\n}\n\n/* ============================================================\n * 响应式(移动端):小屏简化分页,\n * 隐藏非相邻页码与省略号,仅保留 首页/上一页/当前页/下一页/末页。\n * 通过 aria-hidden 而非 display:none,保持键盘可达性由 active 决定。\n * ============================================================ */\n@media (max-width: 575.98px) {\n /* 隐藏中间页码(保留 active 与首末按钮) */\n .hb-pagination__btn:not(.hb-pagination__btn--active):not(.hb-pagination__prev):not(.hb-pagination__next) {\n display: none;\n }\n\n /* 隐藏省略号 */\n .hb-pagination__ellipsis {\n display: none;\n }\n\n /* 隐藏\"共 N 条\"和\"每页 N 条\"选择器以节省空间(信息保留在 aria-label) */\n .hb-pagination__total,\n .hb-pagination__sizes {\n display: none;\n }\n}\n","import { Component, h, Prop, Event, EventEmitter, State, Watch } from '@stencil/core';\n\n/**\n * Pagination 分页组件\n * 当数据量过多时,使用分页分解数据\n */\n@Component({\n tag: 'hb-pagination',\n styleUrl: 'pagination.css',\n shadow: true,\n})\nexport class Pagination {\n /** 总条目数 */\n @Prop() total: number = 0;\n\n /** 每页显示条目数 */\n @Prop() pageSize: number = 10;\n\n /** 当前页数 */\n @Prop({ mutable: true }) currentPage: number = 1;\n\n /** 每页显示个数选择器的选项设置 */\n @Prop() pageSizes: number[] = [10, 20, 50, 100];\n\n /** 最大页码按钮数 */\n @Prop() pagerCount: number = 7;\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 是否显示总条数 */\n @Prop() showTotal: boolean = false;\n\n /** 是否显示每页条数选择器 */\n @Prop() showPageSize: boolean = false;\n\n @State() internalCurrent: number = 1;\n /** 内部每页条数:pageSize 变更时同步;size 切换后立即生效重算 totalPages */\n @State() internalPageSize: number = 10;\n\n /** 当前页改变事件 */\n @Event() hbCurrentChange: EventEmitter<number>;\n\n /** 每页条数改变事件 */\n @Event() hbSizeChange: EventEmitter<number>;\n\n @Watch('currentPage')\n handleCurrentPageChange() {\n this.internalCurrent = this.currentPage;\n }\n\n @Watch('pageSize')\n handlePageSizeChange() {\n this.internalPageSize = this.pageSize;\n }\n\n componentDidLoad() {\n this.internalCurrent = this.currentPage;\n this.internalPageSize = this.pageSize;\n }\n\n private get totalPages(): number {\n return Math.max(1, Math.ceil(this.total / this.internalPageSize));\n }\n\n private handlePageClick(page: number) {\n if (this.disabled || page === this.internalCurrent || page < 1 || page > this.totalPages) return;\n this.internalCurrent = page;\n this.currentPage = page;\n this.hbCurrentChange.emit(page);\n }\n\n private handleSizeChange(e: Event) {\n const target = e.target as HTMLSelectElement;\n const size = parseInt(target.value, 10);\n // 切 pageSize 后立即重算 totalPages,并防止 currentPage 越界\n this.internalPageSize = size;\n const newTotal = Math.max(1, Math.ceil(this.total / size));\n const safePage = Math.min(this.internalCurrent, newTotal);\n this.hbSizeChange.emit(size);\n this.internalCurrent = safePage;\n this.currentPage = safePage;\n if (safePage !== this.internalCurrent) {\n this.hbCurrentChange.emit(safePage);\n }\n }\n\n private getPages(): (number | '...')[] {\n const pages: (number | '...')[] = [];\n const total = this.totalPages;\n const current = this.internalCurrent;\n const pager = this.pagerCount;\n\n if (total <= pager) {\n for (let i = 1; i <= total; i++) pages.push(i);\n return pages;\n }\n\n const half = Math.floor((pager - 2) / 2);\n let start = current - half;\n let end = current + half;\n\n if (start < 2) {\n start = 2;\n end = Math.min(pager - 1, total - 1);\n }\n if (end > total - 1) {\n end = total - 1;\n start = Math.max(2, total - pager + 2);\n }\n\n pages.push(1);\n if (start > 2) pages.push('...');\n for (let i = start; i <= end; i++) pages.push(i);\n if (end < total - 1) pages.push('...');\n pages.push(total);\n\n return pages;\n }\n\n render() {\n const pages = this.getPages();\n\n return (\n <nav\n class={{ 'hb-pagination': true, 'hb-pagination--disabled': this.disabled }}\n role=\"navigation\"\n aria-label=\"分页\"\n >\n {this.showTotal && (\n <span class=\"hb-pagination__total\" aria-live=\"polite\">共 {this.total} 条</span>\n )}\n\n {this.showPageSize && (\n <select\n class=\"hb-pagination__sizes\"\n onChange={this.handleSizeChange}\n disabled={this.disabled}\n aria-label=\"每页条数\"\n >\n {this.pageSizes.map(size => (\n <option value={size} selected={size === this.internalPageSize}>{size} 条/页</option>\n ))}\n </select>\n )}\n\n <button\n type=\"button\"\n class=\"hb-pagination__btn hb-pagination__prev\"\n disabled={this.disabled || this.internalCurrent <= 1}\n onClick={() => this.handlePageClick(this.internalCurrent - 1)}\n aria-label=\"上一页\"\n >\n ‹\n </button>\n\n {pages.map(page =>\n page === '...' ? (\n <span class=\"hb-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n ) : (\n <button\n type=\"button\"\n class={{\n 'hb-pagination__btn': true,\n 'hb-pagination__btn--active': page === this.internalCurrent,\n }}\n disabled={this.disabled}\n onClick={() => this.handlePageClick(page as number)}\n aria-label={`第 ${page} 页`}\n aria-current={page === this.internalCurrent ? 'page' : undefined}\n >\n {page}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n class=\"hb-pagination__btn hb-pagination__next\"\n disabled={this.disabled || this.internalCurrent >= this.totalPages}\n onClick={() => this.handlePageClick(this.internalCurrent + 1)}\n aria-label=\"下一页\"\n >\n ›\n </button>\n </nav>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["scrollbarCss","HbScrollbarStyle0","Scrollbar","height","maxHeight","always","native","minSize","hbScroll","scrollbarVisible","thumbHeight","thumbTop","wrapRef","thumbRef","resizeObserver","isDragging","startY","startScrollTop","componentDidLoad","this","initScrollbar","disconnectedCallback","disconnect","removeEventListeners","handleSizeChange","updateScrollbar","setScrollTop","top","scrollTop","setScrollLeft","left","scrollLeft","getScrollTop","getScrollLeft","ResizeObserver","observe","addEventListeners","addEventListener","handleScroll","handleThumbMouseDown","document","handleMouseMove","handleMouseUp","removeEventListener","wrapHeight","clientHeight","scrollHeight","hasScroll","Math","max","maxThumbTop","min","emit","e","preventDefault","stopPropagation","clientY","deltaY","maxScrollTop","scrollDelta","newScrollTop","render","style","h","class","ref","el","onScroll","transform"],"sources":["src/components/Scrollbar/scrollbar.css?tag=hb-scrollbar&encapsulation=shadow","src/components/Scrollbar/Scrollbar.tsx"],"sourcesContent":[":host {\n display: block;\n --hb-scrollbar-bg-color: var(--hb-fill-color-light, #f5f7fa);\n --hb-scrollbar-thumb-color: var(--hb-fill-color, #c0c4cc);\n --hb-scrollbar-thumb-hover-color: var(--hb-fill-color-dark, #a0a4ac);\n}\n\n.hb-scrollbar {\n position: relative;\n height: 100%;\n overflow: hidden;\n}\n\n.hb-scrollbar__wrap {\n overflow: auto;\n height: 100%;\n scrollbar-width: thin;\n scrollbar-color: var(--hb-scrollbar-thumb-color) var(--hb-scrollbar-bg-color);\n}\n\n.hb-scrollbar__wrap::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.hb-scrollbar__wrap::-webkit-scrollbar-track {\n background: var(--hb-scrollbar-bg-color);\n border-radius: 3px;\n}\n\n.hb-scrollbar__wrap::-webkit-scrollbar-thumb {\n background: var(--hb-scrollbar-thumb-color);\n border-radius: 3px;\n}\n\n.hb-scrollbar__wrap::-webkit-scrollbar-thumb:hover {\n background: var(--hb-scrollbar-thumb-hover-color);\n}\n\n.hb-scrollbar--native .hb-scrollbar__wrap {\n overflow-y: auto;\n}\n\n.hb-scrollbar__view {\n width: 100%;\n}\n\n.hb-scrollbar__bar {\n position: absolute;\n right: 2px;\n bottom: 2px;\n z-index: 1;\n border-radius: 4px;\n opacity: 0;\n transition: opacity 0.12s ease-out;\n}\n\n.hb-scrollbar:hover .hb-scrollbar__bar {\n opacity: 1;\n}\n\n.hb-scrollbar__bar--vertical {\n width: 6px;\n top: 2px;\n}\n\n.hb-scrollbar__bar--vertical > div {\n width: 100%;\n}\n\n.hb-scrollbar__thumb {\n position: relative;\n display: block;\n width: 100%;\n height: 0;\n cursor: pointer;\n border-radius: inherit;\n background-color: var(--hb-scrollbar-thumb-color);\n transition: background-color 0.3s;\n}\n\n.hb-scrollbar__thumb:hover {\n background-color: var(--hb-scrollbar-thumb-hover-color);\n}\n\n","import { Component, h, Prop, Element, State, Watch, Event, EventEmitter, Method } from '@stencil/core';\n\n/**\n * Scrollbar 滚动条组件\n * 用于替换浏览器原生滚动条\n */\n@Component({\n tag: 'hb-scrollbar',\n styleUrl: 'scrollbar.css',\n shadow: true,\n})\nexport class Scrollbar {\n @Element() el: HTMLElement;\n\n /**\n * 滚动条高度\n */\n @Prop() height?: string;\n\n /**\n * 滚动条最大高度\n */\n @Prop() maxHeight?: string;\n\n /**\n * 是否总是显示滚动条\n * @default false\n */\n @Prop() always: boolean = false;\n\n /**\n * 是否显示原生滚动条\n * @default false\n */\n @Prop() native: boolean = false;\n\n /**\n * 滚动条的最小尺寸\n * @default 20\n */\n @Prop() minSize: number = 20;\n\n /**\n * 滚动事件\n */\n @Event() hbScroll: EventEmitter<{ scrollTop: number; scrollLeft: number }>;\n\n @State() scrollbarVisible: boolean = false;\n @State() thumbHeight: number = 0;\n @State() thumbTop: number = 0;\n\n private wrapRef?: HTMLDivElement;\n private thumbRef?: HTMLDivElement;\n private resizeObserver?: ResizeObserver;\n private isDragging: boolean = false;\n private startY: number = 0;\n private startScrollTop: number = 0;\n\n componentDidLoad() {\n if (!this.native) {\n this.initScrollbar();\n }\n }\n\n disconnectedCallback() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n this.removeEventListeners();\n }\n\n @Watch('height')\n @Watch('maxHeight')\n handleSizeChange() {\n this.updateScrollbar();\n }\n\n /**\n * 设置滚动条位置\n */\n @Method()\n async setScrollTop(top: number) {\n if (this.wrapRef) {\n this.wrapRef.scrollTop = top;\n this.updateScrollbar();\n }\n }\n\n /**\n * 设置滚动条位置\n */\n @Method()\n async setScrollLeft(left: number) {\n if (this.wrapRef) {\n this.wrapRef.scrollLeft = left;\n this.updateScrollbar();\n }\n }\n\n /**\n * 获取滚动条位置\n */\n @Method()\n async getScrollTop(): Promise<number> {\n return this.wrapRef?.scrollTop || 0;\n }\n\n /**\n * 获取滚动条位置\n */\n @Method()\n async getScrollLeft(): Promise<number> {\n return this.wrapRef?.scrollLeft || 0;\n }\n\n private initScrollbar() {\n if (!this.wrapRef) return;\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateScrollbar();\n });\n\n this.resizeObserver.observe(this.wrapRef);\n this.addEventListeners();\n this.updateScrollbar();\n }\n\n private addEventListeners() {\n if (this.wrapRef) {\n this.wrapRef.addEventListener('scroll', this.handleScroll);\n }\n if (this.thumbRef) {\n this.thumbRef.addEventListener('mousedown', this.handleThumbMouseDown);\n }\n document.addEventListener('mousemove', this.handleMouseMove);\n document.addEventListener('mouseup', this.handleMouseUp);\n }\n\n private removeEventListeners() {\n if (this.wrapRef) {\n this.wrapRef.removeEventListener('scroll', this.handleScroll);\n }\n if (this.thumbRef) {\n this.thumbRef.removeEventListener('mousedown', this.handleThumbMouseDown);\n }\n document.removeEventListener('mousemove', this.handleMouseMove);\n document.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n private updateScrollbar() {\n if (!this.wrapRef) return;\n\n const wrapHeight = this.wrapRef.clientHeight;\n const scrollHeight = this.wrapRef.scrollHeight;\n const scrollTop = this.wrapRef.scrollTop;\n\n const hasScroll = scrollHeight > wrapHeight;\n this.scrollbarVisible = hasScroll || this.always;\n\n if (hasScroll && this.thumbRef) {\n const thumbHeight = Math.max(\n this.minSize,\n (wrapHeight / scrollHeight) * wrapHeight\n );\n const maxThumbTop = wrapHeight - thumbHeight;\n const thumbTop = (scrollTop / (scrollHeight - wrapHeight)) * maxThumbTop;\n\n this.thumbHeight = thumbHeight;\n this.thumbTop = Math.max(0, Math.min(maxThumbTop, thumbTop));\n }\n }\n\n private handleScroll = () => {\n this.updateScrollbar();\n if (this.wrapRef) {\n this.hbScroll.emit({\n scrollTop: this.wrapRef.scrollTop,\n scrollLeft: this.wrapRef.scrollLeft,\n });\n }\n };\n\n private handleThumbMouseDown = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n this.startY = e.clientY;\n this.startScrollTop = this.wrapRef?.scrollTop || 0;\n };\n\n private handleMouseMove = (e: MouseEvent) => {\n if (!this.isDragging || !this.wrapRef) return;\n\n const deltaY = e.clientY - this.startY;\n const wrapHeight = this.wrapRef.clientHeight;\n const scrollHeight = this.wrapRef.scrollHeight;\n const maxScrollTop = scrollHeight - wrapHeight;\n const thumbHeight = this.thumbHeight;\n const maxThumbTop = wrapHeight - thumbHeight;\n\n const scrollDelta = (deltaY / maxThumbTop) * maxScrollTop;\n const newScrollTop = Math.max(0, Math.min(maxScrollTop, this.startScrollTop + scrollDelta));\n\n this.wrapRef.scrollTop = newScrollTop;\n };\n\n private handleMouseUp = () => {\n this.isDragging = false;\n };\n\n render() {\n const style: any = {};\n if (this.height) {\n style.height = this.height;\n }\n if (this.maxHeight) {\n style.maxHeight = this.maxHeight;\n }\n\n if (this.native) {\n return (\n <div\n class=\"hb-scrollbar hb-scrollbar--native\"\n style={style}\n >\n <div class=\"hb-scrollbar__wrap\">\n <div class=\"hb-scrollbar__view\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div class=\"hb-scrollbar\" style={style}>\n <div\n class=\"hb-scrollbar__wrap\"\n ref={(el) => (this.wrapRef = el)}\n onScroll={this.handleScroll}\n >\n <div class=\"hb-scrollbar__view\">\n <slot></slot>\n </div>\n </div>\n {this.scrollbarVisible && !this.native && (\n <div class=\"hb-scrollbar__bar hb-scrollbar__bar--vertical\">\n <div\n class=\"hb-scrollbar__thumb\"\n ref={(el) => {\n this.thumbRef = el;\n if (el && !this.native) {\n el.addEventListener('mousedown', this.handleThumbMouseDown);\n }\n }}\n style={{\n height: `${this.thumbHeight}px`,\n transform: `translateY(${this.thumbTop}px)`,\n }}\n ></div>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"yDAAA,MAAMA,EAAe,w4OACrB,MAAAC,EAAeD,E,MCUFE,EAAS,M,oFAMZC,OAKAC,UAMAC,OAAkB,MAMlBC,OAAkB,MAMlBC,QAAkB,GAKjBC,SAEAC,iBAA4B,MAC5BC,YAAsB,EACtBC,SAAmB,EAEpBC,QACAC,SACAC,eACAC,WAAsB,MACtBC,OAAiB,EACjBC,eAAyB,EAEjC,gBAAAC,GACE,IAAKC,KAAKb,OAAQ,CAChBa,KAAKC,e,EAIT,oBAAAC,GACE,GAAIF,KAAKL,eAAgB,CACvBK,KAAKL,eAAeQ,Y,CAEtBH,KAAKI,sB,CAKP,gBAAAC,GACEL,KAAKM,iB,CAOP,kBAAMC,CAAaC,GACjB,GAAIR,KAAKP,QAAS,CAChBO,KAAKP,QAAQgB,UAAYD,EACzBR,KAAKM,iB,EAQT,mBAAMI,CAAcC,GAClB,GAAIX,KAAKP,QAAS,CAChBO,KAAKP,QAAQmB,WAAaD,EAC1BX,KAAKM,iB,EAQT,kBAAMO,GACJ,OAAOb,KAAKP,SAASgB,WAAa,C,CAOpC,mBAAMK,GACJ,OAAOd,KAAKP,SAASmB,YAAc,C,CAG7B,aAAAX,GACN,IAAKD,KAAKP,QAAS,OAEnBO,KAAKL,eAAiB,IAAIoB,gBAAe,KACvCf,KAAKM,iBAAiB,IAGxBN,KAAKL,eAAeqB,QAAQhB,KAAKP,SACjCO,KAAKiB,oBACLjB,KAAKM,iB,CAGC,iBAAAW,GACN,GAAIjB,KAAKP,QAAS,CAChBO,KAAKP,QAAQyB,iBAAiB,SAAUlB,KAAKmB,a,CAE/C,GAAInB,KAAKN,SAAU,CACjBM,KAAKN,SAASwB,iBAAiB,YAAalB,KAAKoB,qB,CAEnDC,SAASH,iBAAiB,YAAalB,KAAKsB,iBAC5CD,SAASH,iBAAiB,UAAWlB,KAAKuB,c,CAGpC,oBAAAnB,GACN,GAAIJ,KAAKP,QAAS,CAChBO,KAAKP,QAAQ+B,oBAAoB,SAAUxB,KAAKmB,a,CAElD,GAAInB,KAAKN,SAAU,CACjBM,KAAKN,SAAS8B,oBAAoB,YAAaxB,KAAKoB,qB,CAEtDC,SAASG,oBAAoB,YAAaxB,KAAKsB,iBAC/CD,SAASG,oBAAoB,UAAWxB,KAAKuB,c,CAGvC,eAAAjB,GACN,IAAKN,KAAKP,QAAS,OAEnB,MAAMgC,EAAazB,KAAKP,QAAQiC,aAChC,MAAMC,EAAe3B,KAAKP,QAAQkC,aAClC,MAAMlB,EAAYT,KAAKP,QAAQgB,UAE/B,MAAMmB,EAAYD,EAAeF,EACjCzB,KAAKV,iBAAmBsC,GAAa5B,KAAKd,OAE1C,GAAI0C,GAAa5B,KAAKN,SAAU,CAC9B,MAAMH,EAAcsC,KAAKC,IACvB9B,KAAKZ,QACJqC,EAAaE,EAAgBF,GAEhC,MAAMM,EAAcN,EAAalC,EACjC,MAAMC,EAAYiB,GAAakB,EAAeF,GAAeM,EAE7D/B,KAAKT,YAAcA,EACnBS,KAAKR,SAAWqC,KAAKC,IAAI,EAAGD,KAAKG,IAAID,EAAavC,G,EAI9C2B,aAAe,KACrBnB,KAAKM,kBACL,GAAIN,KAAKP,QAAS,CAChBO,KAAKX,SAAS4C,KAAK,CACjBxB,UAAWT,KAAKP,QAAQgB,UACxBG,WAAYZ,KAAKP,QAAQmB,Y,GAKvBQ,qBAAwBc,IAC9BA,EAAEC,iBACFD,EAAEE,kBACFpC,KAAKJ,WAAa,KAClBI,KAAKH,OAASqC,EAAEG,QAChBrC,KAAKF,eAAiBE,KAAKP,SAASgB,WAAa,CAAC,EAG5Ca,gBAAmBY,IACzB,IAAKlC,KAAKJ,aAAeI,KAAKP,QAAS,OAEvC,MAAM6C,EAASJ,EAAEG,QAAUrC,KAAKH,OAChC,MAAM4B,EAAazB,KAAKP,QAAQiC,aAChC,MAAMC,EAAe3B,KAAKP,QAAQkC,aAClC,MAAMY,EAAeZ,EAAeF,EACpC,MAAMlC,EAAcS,KAAKT,YACzB,MAAMwC,EAAcN,EAAalC,EAEjC,MAAMiD,EAAeF,EAASP,EAAeQ,EAC7C,MAAME,EAAeZ,KAAKC,IAAI,EAAGD,KAAKG,IAAIO,EAAcvC,KAAKF,eAAiB0C,IAE9ExC,KAAKP,QAAQgB,UAAYgC,CAAY,EAG/BlB,cAAgB,KACtBvB,KAAKJ,WAAa,KAAK,EAGzB,MAAA8C,GACE,MAAMC,EAAa,GACnB,GAAI3C,KAAKhB,OAAQ,CACf2D,EAAM3D,OAASgB,KAAKhB,M,CAEtB,GAAIgB,KAAKf,UAAW,CAClB0D,EAAM1D,UAAYe,KAAKf,S,CAGzB,GAAIe,KAAKb,OAAQ,CACf,OACEyD,EAAA,OACEC,MAAM,oCACNF,MAAOA,GAEPC,EAAA,OAAKC,MAAM,sBACTD,EAAA,OAAKC,MAAM,sBACTD,EAAA,e,CAOV,OACEA,EAAA,OAAKC,MAAM,eAAeF,MAAOA,GAC/BC,EAAA,OACEC,MAAM,qBACNC,IAAMC,GAAQ/C,KAAKP,QAAUsD,EAC7BC,SAAUhD,KAAKmB,cAEfyB,EAAA,OAAKC,MAAM,sBACTD,EAAA,eAGH5C,KAAKV,mBAAqBU,KAAKb,QAC9ByD,EAAA,OAAKC,MAAM,iDACTD,EAAA,OACEC,MAAM,sBACNC,IAAMC,IACJ/C,KAAKN,SAAWqD,EAChB,GAAIA,IAAO/C,KAAKb,OAAQ,CACtB4D,EAAG7B,iBAAiB,YAAalB,KAAKoB,qB,GAG1CuB,MAAO,CACL3D,OAAQ,GAAGgB,KAAKT,gBAChB0D,UAAW,cAAcjD,KAAKR,kB","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,g as r,h as i}from"./p-e42dfa95.js";import{c as o}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{display:block}.hb-tree-select{box-sizing:border-box;color:var(--hb-color-text);font-size:var(--hb-font-size-base);position:relative;width:100%}.hb-tree-select__input-wrapper{align-items:center;background-color:var(--hb-color-bg-container);border:1px solid var(--hb-input-border-color,var(--hb-color-border));border-radius:var(--hb-input-radius,var(--hb-border-radius-sm));box-sizing:border-box;cursor:pointer;display:flex;height:var(--hb-size-default,32px);padding:0 var(--hb-spacing-sm);transition:border-color var(--hb-transition-duration,.2s)}.hb-tree-select__input-wrapper:hover{border-color:var(--hb-input-hover-border-color,var(--hb-color-primary))}.hb-tree-select--open .hb-tree-select__input-wrapper{border-color:var(--hb-input-focus-border-color,var(--hb-color-primary))}.hb-tree-select--disabled .hb-tree-select__input-wrapper{background-color:var(--hb-color-fill-tertiary);cursor:not-allowed;opacity:.6}.hb-tree-select__display{flex:1;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.hb-tree-select__display--placeholder{color:var(--hb-input-placeholder-color,var(--hb-color-text-placeholder))}.hb-tree-select__suffix{gap:var(--hb-spacing-xxs)}.hb-tree-select__clear,.hb-tree-select__suffix{align-items:center;color:var(--hb-color-text-tertiary);display:inline-flex}.hb-tree-select__clear{background-color:var(--hb-color-fill);border-radius:50%;cursor:pointer;height:16px;justify-content:center;width:16px}.hb-tree-select__clear svg{height:10px;width:10px}.hb-tree-select__clear:hover{color:var(--hb-color-text-secondary)}.hb-tree-select__arrow-icon{align-items:center;color:var(--hb-color-text-tertiary);display:inline-flex;height:12px;transition:transform var(--hb-transition-duration,.2s);width:12px}.hb-tree-select__arrow-icon svg{height:100%;width:100%}.hb-tree-select__arrow-icon--open{transform:rotate(180deg)}.hb-tree-select__dropdown{background-color:var(--hb-color-bg-elevated);border:1px solid var(--hb-color-border-secondary);border-radius:var(--hb-border-radius-sm);box-shadow:0 6px 16px #00000014;box-sizing:border-box;left:0;max-height:280px;overflow-y:auto;padding:var(--hb-spacing-xxs);position:absolute;top:calc(100% + 4px);width:100%;z-index:1050}.hb-tree-select__empty{color:var(--hb-color-text-tertiary);font-size:var(--hb-font-size-sm);padding:var(--hb-spacing-md);text-align:center}.hb-tree-select__children,.hb-tree-select__tree{list-style:none;margin:0;padding:0}.hb-tree-select__node{list-style:none;white-space:nowrap}.hb-tree-select__node-content{align-items:center;border-radius:var(--hb-border-radius-sm);box-sizing:border-box;cursor:pointer;display:flex;gap:var(--hb-spacing-xxs);height:28px;padding-right:var(--hb-spacing-xs);transition:background-color var(--hb-transition-duration,.2s)}.hb-tree-select__node-content:hover{background-color:var(--hb-color-fill-tertiary)}.hb-tree-select__node-content--selected{color:var(--hb-color-primary);font-weight:500}.hb-tree-select__node-content--checked,.hb-tree-select__node-content--selected{background-color:var(--hb-color-primary-bg)}.hb-tree-select__node--disabled>.hb-tree-select__node-content{cursor:not-allowed;opacity:.5}.hb-tree-select__node--disabled>.hb-tree-select__node-content:hover{background-color:#0000}.hb-tree-select__switcher{flex-shrink:0;height:18px;width:18px}.hb-tree-select__arrow,.hb-tree-select__switcher{align-items:center;color:var(--hb-color-text-tertiary);display:inline-flex;justify-content:center}.hb-tree-select__arrow{height:12px;transition:transform var(--hb-transition-duration,.2s);width:12px}.hb-tree-select__arrow svg{height:100%;width:100%}.hb-tree-select__arrow--expanded{transform:rotate(90deg)}.hb-tree-select__checkbox{align-items:center;background-color:var(--hb-color-bg-container);border:1px solid var(--hb-color-border);border-radius:var(--hb-border-radius-xs,2px);color:#fff;display:inline-flex;flex-shrink:0;height:16px;justify-content:center;transition:all var(--hb-transition-duration,.2s);width:16px}.hb-tree-select__checkbox svg{height:12px;width:12px}.hb-tree-select__checkbox-dash{background-color:#fff;border-radius:1px;display:block;height:2px;width:10px}.hb-tree-select__checkbox:hover:not(.hb-tree-select__checkbox--disabled){border-color:var(--hb-color-primary)}.hb-tree-select__checkbox--checked,.hb-tree-select__checkbox--indeterminate{background-color:var(--hb-color-primary);border-color:var(--hb-color-primary)}.hb-tree-select__checkbox--disabled{cursor:not-allowed}.hb-tree-select__title{flex:1;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}@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 n=s;const a=class{constructor(r){e(this,r);this.hbChange=t(this,"hbChange",7);this.hbVisibleChange=t(this,"hbVisibleChange",7)}get el(){return r(this)}data=[];modelValue="";multiple=false;placeholder="请选择";disabled=false;checkable=false;defaultExpandAll=false;isOpen=false;internalExpanded=[];internalSelected=[];internalChecked=[];hbChange;hbVisibleChange;clickOutside=o({host:null,isOpen:()=>this.isOpen,onClose:()=>this.closeDropdown()});componentWillLoad(){this.syncFromModelValue();if(this.defaultExpandAll){const e=[];this.collectExpandableKeys(this.data,e);this.internalExpanded=e}}componentDidLoad(){this.clickOutside=o({host:this.el,isOpen:()=>this.isOpen,onClose:()=>this.closeDropdown()});this.clickOutside.connect()}disconnectedCallback(){this.clickOutside.disconnect()}syncFromModelValue(){if(this.multiple){const e=Array.isArray(this.modelValue)?this.modelValue:[];this.internalSelected=[...e];this.internalChecked=[...e]}else{const e=typeof this.modelValue==="string"?this.modelValue:"";this.internalSelected=e?[e]:[];this.internalChecked=e?[e]:[]}}collectExpandableKeys(e,t){for(const r of e){if(r.children&&r.children.length>0){t.push(r.key);this.collectExpandableKeys(r.children,t)}}}findTitle(e,t){for(const r of e){if(r.key===t)return r.title;if(r.children){const e=this.findTitle(r.children,t);if(e)return e}}return null}getDisplayText(){if(this.multiple){const e=Array.isArray(this.modelValue)?this.modelValue:[];if(e.length===0)return"";const t=e.map((e=>this.findTitle(this.data,e)||e));return t.join(" / ")}const e=typeof this.modelValue==="string"?this.modelValue:"";return e?this.findTitle(this.data,e)||e:""}openDropdown=()=>{if(this.disabled||this.isOpen)return;this.isOpen=true;this.hbVisibleChange.emit(true)};closeDropdown=()=>{if(!this.isOpen)return;this.isOpen=false;this.hbVisibleChange.emit(false)};toggleDropdown=()=>{if(this.disabled)return;if(this.isOpen)this.closeDropdown();else this.openDropdown()};handleNodeSelect=e=>{if(this.multiple){const t=[...this.internalSelected];const r=t.indexOf(e);if(r>=0)t.splice(r,1);else t.push(e);this.internalSelected=t;this.modelValue=t;this.hbChange.emit(t)}else{this.internalSelected=[e];this.modelValue=e;this.hbChange.emit(e);this.closeDropdown()}};handleNodeCheck=e=>{const t=new Set(this.internalChecked);const r=t.has(e.key);if(r){this.removeDescendantKeys(e,t);t.delete(e.key)}else{t.add(e.key);this.collectCheckableDescendantKeys(e,t)}this.reconcileAncestors(e,t);const i=Array.from(t);this.internalChecked=i;this.modelValue=i;this.hbChange.emit(i)};removeDescendantKeys(e,t){if(!e.children)return;for(const r of e.children){t.delete(r.key);this.removeDescendantKeys(r,t)}}collectCheckableDescendantKeys(e,t){if(!e.children)return;for(const r of e.children){if(!r.disabled)t.add(r.key);this.collectCheckableDescendantKeys(r,t)}}reconcileAncestors(e,t){const r=this.findAncestors(this.data,e.key,[]);for(const e of r){if(e.disabled||!e.children||e.children.length===0)continue;const r=e.children.filter((e=>!e.disabled));if(r.length===0)continue;if(r.every((e=>t.has(e.key))))t.add(e.key);else t.delete(e.key)}}findAncestors(e,t,r){for(const i of e){if(i.key===t)return r;if(i.children&&i.children.length>0){const e=this.findAncestors(i.children,t,[i,...r]);if(e)return e}}return null}computeIndeterminateKeys(){const e=new Set;const t=new Set(this.internalChecked);const r=i=>{if(!i.children||i.children.length===0)return false;let o=false;for(const e of i.children){if(r(e))o=true;if(t.has(e.key))o=true}if(o&&!t.has(i.key))e.add(i.key);return o};for(const e of this.data)r(e);return e}handleToggleExpand=(e,t)=>{t.stopPropagation();const r=[...this.internalExpanded];const i=r.indexOf(e.key);if(i>=0)r.splice(i,1);else r.push(e.key);this.internalExpanded=r};handleClear=e=>{e.stopPropagation();if(this.disabled)return;this.internalSelected=[];this.internalChecked=[];this.modelValue=this.multiple?[]:"";this.hbChange.emit(this.modelValue)};renderNode=(e,t,r)=>{const o=!!(e.children&&e.children.length>0);const s=this.internalExpanded.includes(e.key);const n=this.internalSelected.includes(e.key);const a=this.internalChecked.includes(e.key);const l=r.has(e.key);const c=!!e.disabled;return i("li",{class:{"hb-tree-select__node":true,"hb-tree-select__node--disabled":c},role:"treeitem"},i("div",{class:{"hb-tree-select__node-content":true,"hb-tree-select__node-content--selected":n,"hb-tree-select__node-content--checked":a},style:{paddingLeft:`${t*18+8}px`}},i("span",{class:"hb-tree-select__switcher",onClick:t=>o&&this.handleToggleExpand(e,t)},o?i("span",{class:{"hb-tree-select__arrow":true,"hb-tree-select__arrow--expanded":s},"aria-hidden":"true"},i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},i("path",{d:"M9 6l6 6-6 6"}))):null),this.checkable&&i("span",{class:{"hb-tree-select__checkbox":true,"hb-tree-select__checkbox--checked":a,"hb-tree-select__checkbox--indeterminate":l,"hb-tree-select__checkbox--disabled":c},role:"checkbox","aria-checked":l?"mixed":a?"true":"false",onClick:()=>!c&&this.handleNodeCheck(e)},a?i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":3,"stroke-linecap":"round","stroke-linejoin":"round"},i("path",{d:"M5 12l5 5L20 7"})):l?i("span",{class:"hb-tree-select__checkbox-dash"}):null),i("span",{class:"hb-tree-select__title",onClick:()=>!c&&this.handleNodeSelect(e.key)},e.title)),o&&s&&i("ul",{class:"hb-tree-select__children",role:"group"},e.children.map((e=>this.renderNode(e,t+1,r)))))};render(){const e=this.getDisplayText();const t=this.multiple?Array.isArray(this.modelValue)&&this.modelValue.length>0:typeof this.modelValue==="string"&&this.modelValue!=="";const r=this.checkable?this.computeIndeterminateKeys():new Set;return i("div",{key:"f79d67b1bb02e0d51a9fe2b35a36a156801e9584",class:{"hb-tree-select":true,"hb-tree-select--open":this.isOpen,"hb-tree-select--disabled":this.disabled,"hb-tree-select--multiple":this.multiple}},i("div",{key:"59355a67c4316c98a682df3c27cd19387a8d4742",class:"hb-tree-select__input-wrapper",onClick:this.toggleDropdown},i("span",{key:"7b4fd7b9a4c15193f687f1f579eb2e8268b975df",class:{"hb-tree-select__display":true,"hb-tree-select__display--placeholder":!t}},t?e:this.placeholder),i("span",{key:"1640eacb50af399e02785b14d72c547afe8fcfcf",class:"hb-tree-select__suffix"},t&&i("span",{key:"c16d5a458d3738bccb3c70cc985df43dcacb4220",class:"hb-tree-select__clear",onClick:this.handleClear,role:"button","aria-label":"清空"},i("svg",{key:"757db41a4651d25df357d2c975810bbfdddcca22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},i("path",{key:"a72adce81b2900cdf11faa663f92dbaa7053921e",d:"M6 6l12 12M18 6L6 18"}))),i("span",{key:"0b40c484fe2f7e23b04cfb26cb0018f050522fec",class:{"hb-tree-select__arrow-icon":true,"hb-tree-select__arrow-icon--open":this.isOpen},"aria-hidden":"true"},i("svg",{key:"30523c9183feaab984ff557e8c735b7a04423f0c",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},i("path",{key:"15eae62246639d6e05071123e89ad31c82ea576a",d:"M6 9l6 6 6-6"}))))),this.isOpen&&i("div",{key:"e6eb7b145fe8b71b09511e8e0c3a3a9073508397",class:"hb-tree-select__dropdown"},this.data.length===0?i("div",{class:"hb-tree-select__empty"},"暂无数据"):i("ul",{class:"hb-tree-select__tree",role:"tree"},this.data.map((e=>this.renderNode(e,0,r))))))}};a.style=n;export{a as hb_tree_select};
2
- //# sourceMappingURL=p-edbda423.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["treeSelectCss","HbTreeSelectStyle0","TreeSelect","data","modelValue","multiple","placeholder","disabled","checkable","defaultExpandAll","isOpen","internalExpanded","internalSelected","internalChecked","hbChange","hbVisibleChange","clickOutside","createClickOutsideHandler","host","this","onClose","closeDropdown","componentWillLoad","syncFromModelValue","all","collectExpandableKeys","componentDidLoad","el","connect","disconnectedCallback","disconnect","arr","Array","isArray","single","nodes","out","node","children","length","push","key","findTitle","title","found","getDisplayText","titles","map","k","join","openDropdown","emit","toggleDropdown","handleNodeSelect","current","idx","indexOf","splice","handleNodeCheck","next","Set","wasChecked","has","removeDescendantKeys","delete","add","collectCheckableDescendantKeys","reconcileAncestors","result","from","child","parents","findAncestors","parent","filter","c","every","acc","computeIndeterminateKeys","checked","walk","hasChecked","root","handleToggleExpand","e","stopPropagation","handleClear","renderNode","level","indeterminateKeys","hasChildren","expanded","includes","selected","indeterminate","h","class","role","style","paddingLeft","onClick","viewBox","fill","stroke","d","render","displayText","hasValue"],"sources":["src/components/TreeSelect/tree-select.css?tag=hb-tree-select&encapsulation=shadow","src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-tree-select {\n position: relative;\n width: 100%;\n font-size: var(--hb-font-size-base);\n color: var(--hb-color-text);\n box-sizing: border-box;\n}\n\n.hb-tree-select__input-wrapper {\n display: flex;\n align-items: center;\n height: var(--hb-size-default, 32px);\n padding: 0 var(--hb-spacing-sm);\n border: 1px solid var(--hb-input-border-color, var(--hb-color-border));\n border-radius: var(--hb-input-radius, var(--hb-border-radius-sm));\n background-color: var(--hb-color-bg-container);\n cursor: pointer;\n transition: border-color var(--hb-transition-duration, 0.2s);\n box-sizing: border-box;\n}\n\n.hb-tree-select__input-wrapper:hover {\n border-color: var(--hb-input-hover-border-color, var(--hb-color-primary));\n}\n\n.hb-tree-select--open .hb-tree-select__input-wrapper {\n border-color: var(--hb-input-focus-border-color, var(--hb-color-primary));\n}\n\n.hb-tree-select--disabled .hb-tree-select__input-wrapper {\n background-color: var(--hb-color-fill-tertiary);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.hb-tree-select__display {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n}\n\n.hb-tree-select__display--placeholder {\n color: var(--hb-input-placeholder-color, var(--hb-color-text-placeholder));\n}\n\n.hb-tree-select__suffix {\n display: inline-flex;\n align-items: center;\n gap: var(--hb-spacing-xxs);\n color: var(--hb-color-text-tertiary);\n}\n\n.hb-tree-select__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n color: var(--hb-color-text-tertiary);\n background-color: var(--hb-color-fill);\n cursor: pointer;\n}\n\n.hb-tree-select__clear svg {\n width: 10px;\n height: 10px;\n}\n\n.hb-tree-select__clear:hover {\n color: var(--hb-color-text-secondary);\n}\n\n.hb-tree-select__arrow-icon {\n display: inline-flex;\n align-items: center;\n width: 12px;\n height: 12px;\n color: var(--hb-color-text-tertiary);\n transition: transform var(--hb-transition-duration, 0.2s);\n}\n\n.hb-tree-select__arrow-icon svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-tree-select__arrow-icon--open {\n transform: rotate(180deg);\n}\n\n.hb-tree-select__dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n width: 100%;\n max-height: 280px;\n overflow-y: auto;\n padding: var(--hb-spacing-xxs);\n background-color: var(--hb-color-bg-elevated);\n border: 1px solid var(--hb-color-border-secondary);\n border-radius: var(--hb-border-radius-sm);\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);\n box-sizing: border-box;\n z-index: 1050;\n}\n\n.hb-tree-select__empty {\n padding: var(--hb-spacing-md);\n text-align: center;\n color: var(--hb-color-text-tertiary);\n font-size: var(--hb-font-size-sm);\n}\n\n.hb-tree-select__tree,\n.hb-tree-select__children {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.hb-tree-select__node {\n list-style: none;\n white-space: nowrap;\n}\n\n.hb-tree-select__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);\n box-sizing: border-box;\n}\n\n.hb-tree-select__node-content:hover {\n background-color: var(--hb-color-fill-tertiary);\n}\n\n.hb-tree-select__node-content--selected {\n background-color: var(--hb-color-primary-bg);\n color: var(--hb-color-primary);\n font-weight: 500;\n}\n\n.hb-tree-select__node-content--checked {\n background-color: var(--hb-color-primary-bg);\n}\n\n.hb-tree-select__node--disabled > .hb-tree-select__node-content {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.hb-tree-select__node--disabled > .hb-tree-select__node-content:hover {\n background-color: transparent;\n}\n\n.hb-tree-select__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-select__arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n color: var(--hb-color-text-tertiary);\n transition: transform var(--hb-transition-duration, 0.2s);\n}\n\n.hb-tree-select__arrow svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-tree-select__arrow--expanded {\n transform: rotate(90deg);\n}\n\n.hb-tree-select__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 flex-shrink: 0;\n transition: all var(--hb-transition-duration, 0.2s);\n}\n\n.hb-tree-select__checkbox svg {\n width: 12px;\n height: 12px;\n}\n\n.hb-tree-select__checkbox-dash {\n display: block;\n width: 10px;\n height: 2px;\n background-color: #fff;\n border-radius: 1px;\n}\n\n.hb-tree-select__checkbox:hover:not(.hb-tree-select__checkbox--disabled) {\n border-color: var(--hb-color-primary);\n}\n\n.hb-tree-select__checkbox--checked,\n.hb-tree-select__checkbox--indeterminate {\n background-color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n}\n\n.hb-tree-select__checkbox--disabled {\n cursor: not-allowed;\n}\n\n.hb-tree-select__title {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n user-select: none;\n}\n","import { Component, h, Prop, Event, EventEmitter, State, Element } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport type { TreeNode } from '../Tree/Tree';\n\n/**\n * TreeSelect 树形选择器\n * 类似 Select,但下拉选项以树形结构展示,支持单选与多选\n */\n@Component({\n tag: 'hb-tree-select',\n styleUrl: 'tree-select.css',\n shadow: true,\n})\nexport class TreeSelect {\n @Element() el: HTMLElement;\n\n /**\n * 可选项数据源(与 Tree 相同的递归树结构)\n */\n @Prop() data: TreeNode[] = [];\n\n /**\n * (受控)绑定值,单选为 string,多选为 string[]\n */\n @Prop({ mutable: true }) modelValue: string | string[] = '';\n\n /**\n * 是否多选\n * @default false\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 占位文本\n * @default '请选择'\n */\n @Prop() placeholder: string = '请选择';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示 checkbox(多选模式下推荐开启)\n * @default false\n */\n @Prop() checkable: boolean = false;\n\n /**\n * 是否默认展开全部节点\n * @default false\n */\n @Prop() defaultExpandAll: boolean = false;\n\n @State() isOpen: boolean = false;\n @State() internalExpanded: string[] = [];\n @State() internalSelected: string[] = [];\n @State() internalChecked: string[] = [];\n\n /**\n * 值变化事件(单选为 string,多选为 string[])\n */\n @Event() hbChange: EventEmitter<string | string[]>;\n\n /**\n * 下拉浮层显隐变化事件\n */\n @Event() hbVisibleChange: EventEmitter<boolean>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n\n componentWillLoad() {\n this.syncFromModelValue();\n if (this.defaultExpandAll) {\n const all: string[] = [];\n this.collectExpandableKeys(this.data, all);\n this.internalExpanded = all;\n }\n }\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n this.clickOutside.connect();\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n private syncFromModelValue() {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n this.internalSelected = [...arr];\n this.internalChecked = [...arr];\n } else {\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n this.internalSelected = single ? [single] : [];\n this.internalChecked = single ? [single] : [];\n }\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 findTitle(nodes: TreeNode[], key: string): string | null {\n for (const node of nodes) {\n if (node.key === key) return node.title;\n if (node.children) {\n const found = this.findTitle(node.children, key);\n if (found) return found;\n }\n }\n return null;\n }\n\n private getDisplayText(): string {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n if (arr.length === 0) return '';\n const titles = arr.map((k) => this.findTitle(this.data, k) || k);\n return titles.join(' / ');\n }\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n return single ? this.findTitle(this.data, single) || single : '';\n }\n\n private openDropdown = () => {\n if (this.disabled || this.isOpen) return;\n this.isOpen = true;\n this.hbVisibleChange.emit(true);\n };\n\n private closeDropdown = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n };\n\n private toggleDropdown = () => {\n if (this.disabled) return;\n if (this.isOpen) this.closeDropdown();\n else this.openDropdown();\n };\n\n private handleNodeSelect = (key: string) => {\n if (this.multiple) {\n const current = [...this.internalSelected];\n const idx = current.indexOf(key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(key);\n this.internalSelected = current;\n this.modelValue = current;\n this.hbChange.emit(current);\n } else {\n this.internalSelected = [key];\n this.modelValue = key;\n this.hbChange.emit(key);\n this.closeDropdown();\n }\n };\n\n private handleNodeCheck = (node: TreeNode) => {\n // 父子联动(对齐 Tree 组件算法):勾选/取消自身 + 级联后代 + 自底向上修正祖先\n const next = new Set(this.internalChecked);\n const wasChecked = next.has(node.key);\n if (wasChecked) {\n this.removeDescendantKeys(node, next);\n next.delete(node.key);\n } else {\n next.add(node.key);\n this.collectCheckableDescendantKeys(node, next);\n }\n this.reconcileAncestors(node, next);\n const result = Array.from(next);\n this.internalChecked = result;\n this.modelValue = result;\n this.hbChange.emit(result);\n };\n\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 private collectCheckableDescendantKeys(node: TreeNode, out: Set<string>) {\n if (!node.children) return;\n for (const child of node.children) {\n if (!child.disabled) out.add(child.key);\n this.collectCheckableDescendantKeys(child, out);\n }\n }\n\n /** 自底向上修正祖先:所有非禁用子节点全选 → 父勾选;否则移出(部分选体现为 indeterminate) */\n private reconcileAncestors(node: TreeNode, next: Set<string>) {\n const parents = this.findAncestors(this.data, node.key, []);\n for (const parent of parents) {\n if (parent.disabled || !parent.children || parent.children.length === 0) continue;\n const checkable = parent.children.filter(c => !c.disabled);\n if (checkable.length === 0) continue;\n if (checkable.every(c => next.has(c.key))) next.add(parent.key);\n else next.delete(parent.key);\n }\n }\n\n private findAncestors(nodes: TreeNode[], key: string, acc: TreeNode[]): TreeNode[] | null {\n for (const node of nodes) {\n if (node.key === key) return acc;\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 /** 计算当前 checked 集合下处于「部分选中」的节点(用于三方态渲染) */\n private computeIndeterminateKeys(): Set<string> {\n const result = new Set<string>();\n const checked = new Set(this.internalChecked);\n const walk = (node: TreeNode): boolean => {\n if (!node.children || node.children.length === 0) return false;\n let hasChecked = false;\n for (const child of node.children) {\n if (walk(child)) hasChecked = true;\n if (checked.has(child.key)) hasChecked = true;\n }\n if (hasChecked && !checked.has(node.key)) result.add(node.key);\n return hasChecked;\n };\n for (const root of this.data) walk(root);\n return result;\n }\n\n private handleToggleExpand = (node: TreeNode, e: Event) => {\n e.stopPropagation();\n const current = [...this.internalExpanded];\n const idx = current.indexOf(node.key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(node.key);\n this.internalExpanded = current;\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n if (this.disabled) return;\n this.internalSelected = [];\n this.internalChecked = [];\n this.modelValue = this.multiple ? [] : '';\n this.hbChange.emit(this.modelValue);\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.internalExpanded.includes(node.key);\n const selected = this.internalSelected.includes(node.key);\n const checked = this.internalChecked.includes(node.key);\n const indeterminate = indeterminateKeys.has(node.key);\n const disabled = !!node.disabled;\n\n return (\n <li class={{ 'hb-tree-select__node': true, 'hb-tree-select__node--disabled': disabled }} role=\"treeitem\">\n <div\n class={{\n 'hb-tree-select__node-content': true,\n 'hb-tree-select__node-content--selected': selected,\n 'hb-tree-select__node-content--checked': checked,\n }}\n style={{ paddingLeft: `${level * 18 + 8}px` }}\n >\n <span class=\"hb-tree-select__switcher\" onClick={(e) => hasChildren && this.handleToggleExpand(node, e)}>\n {hasChildren ? (\n <span class={{ 'hb-tree-select__arrow': true, 'hb-tree-select__arrow--expanded': expanded }} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n </span>\n ) : null}\n </span>\n\n {this.checkable && (\n <span\n class={{\n 'hb-tree-select__checkbox': true,\n 'hb-tree-select__checkbox--checked': checked,\n 'hb-tree-select__checkbox--indeterminate': indeterminate,\n 'hb-tree-select__checkbox--disabled': disabled,\n }}\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked ? 'true' : 'false'}\n onClick={() => !disabled && this.handleNodeCheck(node)}\n >\n {checked ? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={3} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12l5 5L20 7\" />\n </svg>\n ) : indeterminate ? (\n <span class=\"hb-tree-select__checkbox-dash\" />\n ) : null}\n </span>\n )}\n\n <span class=\"hb-tree-select__title\" onClick={() => !disabled && this.handleNodeSelect(node.key)}>\n {node.title}\n </span>\n </div>\n\n {hasChildren && expanded && (\n <ul class=\"hb-tree-select__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 displayText = this.getDisplayText();\n const hasValue = this.multiple\n ? Array.isArray(this.modelValue) && this.modelValue.length > 0\n : typeof this.modelValue === 'string' && this.modelValue !== '';\n const indeterminateKeys = this.checkable ? this.computeIndeterminateKeys() : new Set<string>();\n\n return (\n <div\n class={{\n 'hb-tree-select': true,\n 'hb-tree-select--open': this.isOpen,\n 'hb-tree-select--disabled': this.disabled,\n 'hb-tree-select--multiple': this.multiple,\n }}\n >\n <div class=\"hb-tree-select__input-wrapper\" onClick={this.toggleDropdown}>\n <span\n class={{\n 'hb-tree-select__display': true,\n 'hb-tree-select__display--placeholder': !hasValue,\n }}\n >\n {hasValue ? displayText : this.placeholder}\n </span>\n <span class=\"hb-tree-select__suffix\">\n {hasValue && (\n <span class=\"hb-tree-select__clear\" onClick={this.handleClear} role=\"button\" aria-label=\"清空\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n <span class={{ 'hb-tree-select__arrow-icon': true, 'hb-tree-select__arrow-icon--open': this.isOpen }} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </span>\n </span>\n </div>\n\n {this.isOpen && (\n <div class=\"hb-tree-select__dropdown\">\n {this.data.length === 0 ? (\n <div class=\"hb-tree-select__empty\">暂无数据</div>\n ) : (\n <ul class=\"hb-tree-select__tree\" role=\"tree\">\n {this.data.map((node) => this.renderNode(node, 0, indeterminateKeys))}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["imageCss","HbImageStyle0","Image","src","alt","width","height","fit","lazy","preview","radius","loaded","error","previewVisible","handleLoad","this","handleError","render","h","key","class","style","borderRadius","objectFit","loading","undefined","onLoad","onError","onClick"],"sources":["src/components/Image/image.css?tag=hb-image&encapsulation=shadow","src/components/Image/Image.tsx"],"sourcesContent":[":host { display: inline-block; }\n.hb-image { position: relative; display: inline-flex; overflow: hidden; background: var(--hb-color-fill-quaternary); }\n.hb-image__inner { width: 100%; height: 100%; opacity: 0; transition: opacity 0.3s; }\n.hb-image__inner--loaded { opacity: 1; }\n.hb-image__error { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; font-size: var(--hb-font-size-sm); color: var(--hb-color-text-secondary); }\n.hb-image__preview { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.8); display: flex; align-items: center; justify-content: center; z-index: 2000; cursor: zoom-out; }\n.hb-image__preview-img { max-width: 90%; max-height: 90%; object-fit: contain; }\n","import { Component, h, Prop, State } from '@stencil/core';\n\n@Component({ tag: 'hb-image', styleUrl: 'image.css', shadow: true })\nexport class Image {\n @Prop() src: string = '';\n @Prop() alt: string = '';\n @Prop() width?: string;\n @Prop() height?: string;\n @Prop() fit: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down' = 'fill';\n @Prop() lazy: boolean = false;\n @Prop() preview: boolean = false;\n @Prop() radius?: string;\n\n @State() loaded: boolean = false;\n @State() error: boolean = false;\n @State() previewVisible: boolean = false;\n\n private handleLoad = () => { this.loaded = true; };\n private handleError = () => { this.error = true; };\n\n render() {\n return (\n <div class=\"hb-image\" style={{ width: this.width, height: this.height, borderRadius: this.radius }}>\n {!this.error ? (\n <img\n src={this.src} alt={this.alt}\n class={{ 'hb-image__inner': true, 'hb-image__inner--loaded': this.loaded }}\n style={{ objectFit: this.fit }}\n loading={this.lazy ? 'lazy' : undefined}\n onLoad={this.handleLoad}\n onError={this.handleError}\n onClick={() => this.preview && (this.previewVisible = true)}\n />\n ) : (\n <div class=\"hb-image__error\">图片加载失败</div>\n )}\n {this.previewVisible && (\n <div class=\"hb-image__preview\" onClick={() => { this.previewVisible = false; }}>\n <img src={this.src} alt={this.alt} class=\"hb-image__preview-img\" />\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"2CAAA,MAAMA,EAAW,opMACjB,MAAAC,EAAeD,E,MCEFE,EAAK,M,yBACRC,IAAc,GACdC,IAAc,GACdC,MACAC,OACAC,IAA4D,OAC5DC,KAAgB,MAChBC,QAAmB,MACnBC,OAECC,OAAkB,MAClBC,MAAiB,MACjBC,eAA0B,MAE3BC,WAAa,KAAQC,KAAKJ,OAAS,IAAI,EACvCK,YAAc,KAAQD,KAAKH,MAAQ,IAAI,EAE/C,MAAAK,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKC,MAAM,WAAWC,MAAO,CAAEhB,MAAOU,KAAKV,MAAOC,OAAQS,KAAKT,OAAQgB,aAAcP,KAAKL,UACtFK,KAAKH,MACLM,EAAA,OACEf,IAAKY,KAAKZ,IAAKC,IAAKW,KAAKX,IACzBgB,MAAO,CAAE,kBAAmB,KAAM,0BAA2BL,KAAKJ,QAClEU,MAAO,CAAEE,UAAWR,KAAKR,KACzBiB,QAAST,KAAKP,KAAO,OAASiB,UAC9BC,OAAQX,KAAKD,WACba,QAASZ,KAAKC,YACdY,QAAS,IAAMb,KAAKN,UAAYM,KAAKF,eAAiB,QAGxDK,EAAA,OAAKE,MAAM,mBAAiB,UAE7BL,KAAKF,gBACJK,EAAA,OAAAC,IAAA,2CAAKC,MAAM,oBAAoBQ,QAAS,KAAQb,KAAKF,eAAiB,KAAK,GACzEK,EAAA,OAAAC,IAAA,2CAAKhB,IAAKY,KAAKZ,IAAKC,IAAKW,KAAKX,IAAKgB,MAAM,2B","ignoreList":[]}