@haoyulong1112/jh-ui 0.1.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 (213) hide show
  1. package/dist/components/alert/index.d.ts +125 -0
  2. package/dist/components/alert/src/alert.vue.d.ts +73 -0
  3. package/dist/components/alert/src/props.d.ts +32 -0
  4. package/dist/components/alert/src/types.d.ts +2 -0
  5. package/dist/components/backtop/index.d.ts +102 -0
  6. package/dist/components/backtop/src/backtop.vue.d.ts +57 -0
  7. package/dist/components/backtop/src/props.d.ts +22 -0
  8. package/dist/components/backtop/src/types.d.ts +3 -0
  9. package/dist/components/badge/index.d.ts +101 -0
  10. package/dist/components/badge/src/badge.vue.d.ts +59 -0
  11. package/dist/components/badge/src/props.d.ts +24 -0
  12. package/dist/components/badge/src/types.d.ts +2 -0
  13. package/dist/components/button/index.d.ts +123 -0
  14. package/dist/components/button/src/button.vue.d.ts +69 -0
  15. package/dist/components/button/src/props.d.ts +33 -0
  16. package/dist/components/button/src/types.d.ts +3 -0
  17. package/dist/components/carousel/index.d.ts +187 -0
  18. package/dist/components/carousel/src/carousel-item.vue.d.ts +24 -0
  19. package/dist/components/carousel/src/carousel.vue.d.ts +86 -0
  20. package/dist/components/carousel/src/props.d.ts +44 -0
  21. package/dist/components/carousel/src/types.d.ts +11 -0
  22. package/dist/components/cascader/index.d.ts +68 -0
  23. package/dist/components/cascader/src/cascader.vue.d.ts +67 -0
  24. package/dist/components/cascader/src/props.d.ts +33 -0
  25. package/dist/components/cascader/src/types.d.ts +13 -0
  26. package/dist/components/checkbox/index.d.ts +139 -0
  27. package/dist/components/checkbox/src/checkbox-group.vue.d.ts +34 -0
  28. package/dist/components/checkbox/src/checkbox.vue.d.ts +44 -0
  29. package/dist/components/checkbox/src/props.d.ts +31 -0
  30. package/dist/components/checkbox/src/types.d.ts +8 -0
  31. package/dist/components/collapse/index.d.ts +120 -0
  32. package/dist/components/collapse/src/collapse-item.vue.d.ts +37 -0
  33. package/dist/components/collapse/src/collapse.vue.d.ts +33 -0
  34. package/dist/components/collapse/src/props.d.ts +24 -0
  35. package/dist/components/collapse/src/types.d.ts +8 -0
  36. package/dist/components/date-picker/index.d.ts +32 -0
  37. package/dist/components/date-picker/src/date-picker.vue.d.ts +30 -0
  38. package/dist/components/date-picker/src/props.d.ts +16 -0
  39. package/dist/components/date-picker/src/types.d.ts +1 -0
  40. package/dist/components/date-time-picker/index.d.ts +32 -0
  41. package/dist/components/date-time-picker/src/date-time-picker.vue.d.ts +30 -0
  42. package/dist/components/date-time-picker/src/props.d.ts +16 -0
  43. package/dist/components/date-time-picker/src/types.d.ts +1 -0
  44. package/dist/components/dialog/index.d.ts +97 -0
  45. package/dist/components/dialog/src/dialog.vue.d.ts +54 -0
  46. package/dist/components/dialog/src/props.d.ts +22 -0
  47. package/dist/components/dialog/src/types.d.ts +1 -0
  48. package/dist/components/drawer/index.d.ts +139 -0
  49. package/dist/components/drawer/src/drawer.vue.d.ts +79 -0
  50. package/dist/components/drawer/src/props.d.ts +33 -0
  51. package/dist/components/drawer/src/types.d.ts +2 -0
  52. package/dist/components/dropdown/index.d.ts +115 -0
  53. package/dist/components/dropdown/src/dropdown.vue.d.ts +67 -0
  54. package/dist/components/dropdown/src/props.d.ts +30 -0
  55. package/dist/components/dropdown/src/types.d.ts +9 -0
  56. package/dist/components/form/index.d.ts +127 -0
  57. package/dist/components/form/src/form-item.vue.d.ts +27 -0
  58. package/dist/components/form/src/form.vue.d.ts +45 -0
  59. package/dist/components/form/src/props.d.ts +24 -0
  60. package/dist/components/form/src/types.d.ts +19 -0
  61. package/dist/components/icon/index.d.ts +53 -0
  62. package/dist/components/icon/src/icon.vue.d.ts +31 -0
  63. package/dist/components/icon/src/props.d.ts +13 -0
  64. package/dist/components/icon/src/types.d.ts +1 -0
  65. package/dist/components/index.d.ts +6387 -0
  66. package/dist/components/infinite-scroll/index.d.ts +107 -0
  67. package/dist/components/infinite-scroll/src/infinite-scroll.vue.d.ts +59 -0
  68. package/dist/components/infinite-scroll/src/props.d.ts +21 -0
  69. package/dist/components/infinite-scroll/src/types.d.ts +5 -0
  70. package/dist/components/input/index.d.ts +110 -0
  71. package/dist/components/input/src/input.vue.d.ts +58 -0
  72. package/dist/components/input/src/props.d.ts +26 -0
  73. package/dist/components/input/src/types.d.ts +1 -0
  74. package/dist/components/link/index.d.ts +84 -0
  75. package/dist/components/link/src/link.vue.d.ts +48 -0
  76. package/dist/components/link/src/props.d.ts +23 -0
  77. package/dist/components/link/src/types.d.ts +2 -0
  78. package/dist/components/message/index.d.ts +7 -0
  79. package/dist/components/message/src/message.vue.d.ts +79 -0
  80. package/dist/components/message/src/props.d.ts +33 -0
  81. package/dist/components/message/src/types.d.ts +32 -0
  82. package/dist/components/message-box/index.d.ts +7 -0
  83. package/dist/components/message-box/src/message-box.vue.d.ts +101 -0
  84. package/dist/components/message-box/src/props.d.ts +42 -0
  85. package/dist/components/message-box/src/types.d.ts +27 -0
  86. package/dist/components/notification/index.d.ts +7 -0
  87. package/dist/components/notification/src/notification.vue.d.ts +95 -0
  88. package/dist/components/notification/src/props.d.ts +46 -0
  89. package/dist/components/notification/src/types.d.ts +36 -0
  90. package/dist/components/pagination/index.d.ts +45 -0
  91. package/dist/components/pagination/src/pagination.vue.d.ts +43 -0
  92. package/dist/components/pagination/src/props.d.ts +23 -0
  93. package/dist/components/pagination/src/types.d.ts +4 -0
  94. package/dist/components/radio/index.d.ts +112 -0
  95. package/dist/components/radio/src/props.d.ts +25 -0
  96. package/dist/components/radio/src/radio-group.vue.d.ts +27 -0
  97. package/dist/components/radio/src/radio.vue.d.ts +36 -0
  98. package/dist/components/radio/src/types.d.ts +8 -0
  99. package/dist/components/scrollbar/index.d.ts +60 -0
  100. package/dist/components/scrollbar/src/props.d.ts +14 -0
  101. package/dist/components/scrollbar/src/scrollbar.vue.d.ts +33 -0
  102. package/dist/components/scrollbar/src/types.d.ts +4 -0
  103. package/dist/components/select/index.d.ts +43 -0
  104. package/dist/components/select/src/props.d.ts +22 -0
  105. package/dist/components/select/src/select.vue.d.ts +42 -0
  106. package/dist/components/select/src/types.d.ts +6 -0
  107. package/dist/components/table/index.d.ts +147 -0
  108. package/dist/components/table/src/props.d.ts +31 -0
  109. package/dist/components/table/src/table.vue.d.ts +88 -0
  110. package/dist/components/table/src/types.d.ts +11 -0
  111. package/dist/components/tabs/index.d.ts +112 -0
  112. package/dist/components/tabs/src/props.d.ts +23 -0
  113. package/dist/components/tabs/src/tab-pane.vue.d.ts +35 -0
  114. package/dist/components/tabs/src/tabs.vue.d.ts +31 -0
  115. package/dist/components/tabs/src/types.d.ts +14 -0
  116. package/dist/components/text/index.d.ts +86 -0
  117. package/dist/components/text/src/props.d.ts +23 -0
  118. package/dist/components/text/src/text.vue.d.ts +51 -0
  119. package/dist/components/text/src/types.d.ts +3 -0
  120. package/dist/components/time-select/index.d.ts +64 -0
  121. package/dist/components/time-select/src/props.d.ts +29 -0
  122. package/dist/components/time-select/src/time-select.vue.d.ts +63 -0
  123. package/dist/components/time-select/src/types.d.ts +4 -0
  124. package/dist/components/tree/index.d.ts +167 -0
  125. package/dist/components/tree/src/props.d.ts +39 -0
  126. package/dist/components/tree/src/tree.vue.d.ts +97 -0
  127. package/dist/components/tree/src/types.d.ts +21 -0
  128. package/dist/components/upload/index.d.ts +89 -0
  129. package/dist/components/upload/src/props.d.ts +41 -0
  130. package/dist/components/upload/src/types.d.ts +11 -0
  131. package/dist/components/upload/src/upload.vue.d.ts +88 -0
  132. package/dist/components/waterfall/index.d.ts +195 -0
  133. package/dist/components/waterfall/src/props.d.ts +42 -0
  134. package/dist/components/waterfall/src/types.d.ts +17 -0
  135. package/dist/components/waterfall/src/waterfall.vue.d.ts +122 -0
  136. package/dist/es/components/alert/style/css.js +1 -0
  137. package/dist/es/components/alert/style/style.css +128 -0
  138. package/dist/es/components/backtop/style/css.js +1 -0
  139. package/dist/es/components/backtop/style/style.css +67 -0
  140. package/dist/es/components/badge/style/css.js +1 -0
  141. package/dist/es/components/badge/style/style.css +88 -0
  142. package/dist/es/components/button/style/css.js +1 -0
  143. package/dist/es/components/button/style/style.css +207 -0
  144. package/dist/es/components/carousel/style/css.js +1 -0
  145. package/dist/es/components/carousel/style/style.css +118 -0
  146. package/dist/es/components/cascader/style/css.js +1 -0
  147. package/dist/es/components/cascader/style/style.css +172 -0
  148. package/dist/es/components/checkbox/style/css.js +1 -0
  149. package/dist/es/components/checkbox/style/style.css +95 -0
  150. package/dist/es/components/collapse/style/css.js +1 -0
  151. package/dist/es/components/collapse/style/style.css +91 -0
  152. package/dist/es/components/date-picker/style/css.js +1 -0
  153. package/dist/es/components/date-picker/style/style.css +78 -0
  154. package/dist/es/components/date-time-picker/style/css.js +1 -0
  155. package/dist/es/components/date-time-picker/style/style.css +78 -0
  156. package/dist/es/components/dialog/style/css.js +1 -0
  157. package/dist/es/components/dialog/style/style.css +129 -0
  158. package/dist/es/components/drawer/style/css.js +1 -0
  159. package/dist/es/components/drawer/style/style.css +162 -0
  160. package/dist/es/components/dropdown/style/css.js +1 -0
  161. package/dist/es/components/dropdown/style/style.css +138 -0
  162. package/dist/es/components/form/style/css.js +1 -0
  163. package/dist/es/components/form/style/style.css +73 -0
  164. package/dist/es/components/icon/style/css.js +1 -0
  165. package/dist/es/components/icon/style/style.css +61 -0
  166. package/dist/es/components/infinite-scroll/style/css.js +1 -0
  167. package/dist/es/components/infinite-scroll/style/style.css +54 -0
  168. package/dist/es/components/input/style/css.js +1 -0
  169. package/dist/es/components/input/style/style.css +152 -0
  170. package/dist/es/components/link/style/css.js +1 -0
  171. package/dist/es/components/link/style/style.css +82 -0
  172. package/dist/es/components/message/style/css.js +1 -0
  173. package/dist/es/components/message/style/style.css +111 -0
  174. package/dist/es/components/message-box/style/css.js +1 -0
  175. package/dist/es/components/message-box/style/style.css +156 -0
  176. package/dist/es/components/notification/style/css.js +1 -0
  177. package/dist/es/components/notification/style/style.css +128 -0
  178. package/dist/es/components/pagination/style/css.js +1 -0
  179. package/dist/es/components/pagination/style/style.css +89 -0
  180. package/dist/es/components/radio/style/css.js +1 -0
  181. package/dist/es/components/radio/style/style.css +91 -0
  182. package/dist/es/components/scrollbar/style/css.js +1 -0
  183. package/dist/es/components/scrollbar/style/style.css +75 -0
  184. package/dist/es/components/select/style/css.js +1 -0
  185. package/dist/es/components/select/style/style.css +140 -0
  186. package/dist/es/components/table/style/css.js +1 -0
  187. package/dist/es/components/table/style/style.css +177 -0
  188. package/dist/es/components/tabs/style/css.js +1 -0
  189. package/dist/es/components/tabs/style/style.css +85 -0
  190. package/dist/es/components/text/style/css.js +1 -0
  191. package/dist/es/components/text/style/style.css +84 -0
  192. package/dist/es/components/time-select/style/css.js +1 -0
  193. package/dist/es/components/time-select/style/style.css +153 -0
  194. package/dist/es/components/tree/style/css.js +1 -0
  195. package/dist/es/components/tree/style/style.css +113 -0
  196. package/dist/es/components/upload/style/css.js +1 -0
  197. package/dist/es/components/upload/style/style.css +148 -0
  198. package/dist/es/components/waterfall/style/css.js +1 -0
  199. package/dist/es/components/waterfall/style/style.css +85 -0
  200. package/dist/index.cjs +2 -0
  201. package/dist/index.cjs.map +1 -0
  202. package/dist/index.css +1 -0
  203. package/dist/index.d.ts +63 -0
  204. package/dist/index.mjs +3341 -0
  205. package/dist/index.mjs.map +1 -0
  206. package/dist/resolver.cjs +2 -0
  207. package/dist/resolver.cjs.map +1 -0
  208. package/dist/resolver.d.ts +14 -0
  209. package/dist/resolver.mjs +59 -0
  210. package/dist/resolver.mjs.map +1 -0
  211. package/dist/utils/src/index.d.ts +1 -0
  212. package/dist/utils/src/install.d.ts +3 -0
  213. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../utils/src/install.ts","../../components/icon/src/props.ts","../../components/icon/src/icon.vue","../../components/icon/index.ts","../../components/alert/src/props.ts","../../components/alert/src/alert.vue","../../components/alert/index.ts","../../components/backtop/src/props.ts","../../components/backtop/src/backtop.vue","../../components/backtop/index.ts","../../components/badge/src/props.ts","../../components/badge/src/badge.vue","../../components/badge/index.ts","../../components/button/src/props.ts","../../components/button/src/button.vue","../../components/button/index.ts","../../components/cascader/src/props.ts","../../components/cascader/src/cascader.vue","../../components/cascader/index.ts","../../components/carousel/src/types.ts","../../components/carousel/src/props.ts","../../components/carousel/src/carousel.vue","../../components/carousel/src/carousel-item.vue","../../components/carousel/index.ts","../../components/checkbox/src/props.ts","../../components/checkbox/src/types.ts","../../components/checkbox/src/checkbox.vue","../../components/checkbox/src/checkbox-group.vue","../../components/checkbox/index.ts","../../components/collapse/src/types.ts","../../components/collapse/src/props.ts","../../components/collapse/src/collapse.vue","../../components/collapse/src/collapse-item.vue","../../components/collapse/index.ts","../../components/date-picker/src/props.ts","../../components/date-picker/src/date-picker.vue","../../components/date-picker/index.ts","../../components/date-time-picker/src/props.ts","../../components/date-time-picker/src/date-time-picker.vue","../../components/date-time-picker/index.ts","../../components/dialog/src/props.ts","../../components/dialog/src/dialog.vue","../../components/dialog/index.ts","../../components/drawer/src/props.ts","../../components/drawer/src/drawer.vue","../../components/drawer/index.ts","../../components/dropdown/src/props.ts","../../components/dropdown/src/dropdown.vue","../../components/dropdown/index.ts","../../components/form/src/props.ts","../../components/form/src/types.ts","../../components/form/src/form.vue","../../components/form/src/form-item.vue","../../components/form/index.ts","../../components/infinite-scroll/src/props.ts","../../components/infinite-scroll/src/infinite-scroll.vue","../../components/infinite-scroll/index.ts","../../components/input/src/props.ts","../../components/input/src/input.vue","../../components/input/index.ts","../../components/link/src/props.ts","../../components/link/src/link.vue","../../components/link/index.ts","../../components/message/src/props.ts","../../components/message/src/message.vue","../../components/message/index.ts","../../components/message-box/src/props.ts","../../components/message-box/src/message-box.vue","../../components/message-box/index.ts","../../components/notification/src/props.ts","../../components/notification/src/notification.vue","../../components/notification/index.ts","../../components/pagination/src/props.ts","../../components/pagination/src/pagination.vue","../../components/pagination/index.ts","../../components/radio/src/props.ts","../../components/radio/src/types.ts","../../components/radio/src/radio.vue","../../components/radio/src/radio-group.vue","../../components/radio/index.ts","../../components/scrollbar/src/props.ts","../../components/scrollbar/src/scrollbar.vue","../../components/scrollbar/index.ts","../../components/select/src/props.ts","../../components/select/src/select.vue","../../components/select/index.ts","../../components/table/src/props.ts","../../components/table/src/table.vue","../../components/table/index.ts","../../components/tabs/src/types.ts","../../components/tabs/src/props.ts","../../components/tabs/src/tabs.vue","../../components/tabs/src/tab-pane.vue","../../components/tabs/index.ts","../../components/text/src/props.ts","../../components/text/src/text.vue","../../components/text/index.ts","../../components/time-select/src/props.ts","../../components/time-select/src/time-select.vue","../../components/time-select/index.ts","../../components/tree/src/props.ts","../../components/tree/src/tree.vue","../../components/tree/index.ts","../../components/upload/src/props.ts","../../components/upload/src/upload.vue","../../components/upload/index.ts","../../components/waterfall/src/props.ts","../../components/waterfall/src/waterfall.vue","../../components/waterfall/index.ts","../../components/index.ts","../src/index.ts"],"sourcesContent":["import type { App, Component, Plugin } from 'vue'\n\nexport type SFCWithInstall<T> = T & Plugin\n\nexport const withInstall = <T extends Component>(component: T) => {\n ;(component as SFCWithInstall<T>).install = (app: App) => {\n const name = component.name\n if (name) app.component(name, component)\n }\n\n return component as SFCWithInstall<T>\n}\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconName } from './types'\n\nexport const iconNames: IconName[] = [\n 'plus',\n 'close',\n 'search',\n 'eye',\n 'eye-off',\n 'loading',\n 'arrow-left',\n 'arrow-right'\n]\n\nexport const iconProps = {\n name: String as PropType<IconName>,\n size: {\n type: [Number, String] as PropType<number | string>,\n default: undefined\n },\n color: String,\n spin: Boolean\n} as const\n\nexport type IconProps = ExtractPropTypes<typeof iconProps>\n","<template>\n <span class=\"jh-icon\" :class=\"{ 'is-spin': spin || name === 'loading' }\" :style=\"iconStyle\">\n <svg\n v-if=\"name\"\n class=\"jh-icon__svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <template v-if=\"name === 'plus'\">\n <path d=\"M12 5v14\" />\n <path d=\"M5 12h14\" />\n </template>\n <template v-else-if=\"name === 'close'\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </template>\n <template v-else-if=\"name === 'search'\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m20 20-3.5-3.5\" />\n </template>\n <template v-else-if=\"name === 'eye'\">\n <path d=\"M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </template>\n <template v-else-if=\"name === 'eye-off'\">\n <path d=\"M3 3l18 18\" />\n <path d=\"M10.6 10.6a3 3 0 0 0 4.2 4.2\" />\n <path d=\"M9.9 5.3A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.2 17.2 0 0 1-3.2 4.2\" />\n <path d=\"M6.6 6.6C3.6 8.6 2 12 2 12s3.5 7 10 7c1 0 1.9-.2 2.8-.5\" />\n </template>\n <template v-else-if=\"name === 'loading'\">\n <path d=\"M21 12a9 9 0 1 1-6.2-8.6\" />\n </template>\n <template v-else-if=\"name === 'arrow-left'\">\n <path d=\"m15 18-6-6 6-6\" />\n </template>\n <template v-else-if=\"name === 'arrow-right'\">\n <path d=\"m9 18 6-6-6-6\" />\n </template>\n </svg>\n <slot v-else />\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { iconProps } from './props'\n\ndefineOptions({\n name: 'JhIcon'\n})\n\nconst props = defineProps(iconProps)\n\nconst iconStyle = computed(() => ({\n color: props.color,\n fontSize: typeof props.size === 'number' ? `${props.size}px` : props.size\n}))\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Icon from './src/icon.vue'\n\nexport const JhIcon = withInstall(Icon)\nexport default JhIcon\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { AlertEffect, AlertType } from './types'\n\nexport const alertTypes: AlertType[] = ['success', 'warning', 'info', 'danger']\nexport const alertEffects: AlertEffect[] = ['light', 'dark']\n\nexport const alertProps = {\n title: {\n type: String,\n default: ''\n },\n description: {\n type: String,\n default: ''\n },\n type: {\n type: String as PropType<AlertType>,\n default: 'info',\n validator: (value: AlertType) => alertTypes.includes(value)\n },\n effect: {\n type: String as PropType<AlertEffect>,\n default: 'light',\n validator: (value: AlertEffect) => alertEffects.includes(value)\n },\n closable: {\n type: Boolean,\n default: true\n },\n showIcon: Boolean\n} as const\n\nexport const alertEmits = {\n close: () => true\n}\n","<template>\n <div v-if=\"visible\" class=\"jh-alert\" :class=\"[`jh-alert--${type}`, `jh-alert--${effect}`]\" role=\"alert\">\n <span v-if=\"showIcon\" class=\"jh-alert__icon\" aria-hidden=\"true\" />\n <div class=\"jh-alert__content\">\n <div v-if=\"title || $slots.title\" class=\"jh-alert__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div v-if=\"description || $slots.default\" class=\"jh-alert__description\">\n <slot>{{ description }}</slot>\n </div>\n </div>\n <button v-if=\"closable\" class=\"jh-alert__close\" type=\"button\" aria-label=\"Close alert\" @click=\"handleClose\">\n <JhIcon name=\"close\" />\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { alertEmits, alertProps } from './props'\n\ndefineOptions({\n name: 'JhAlert'\n})\n\ndefineProps(alertProps)\nconst emit = defineEmits(alertEmits)\nconst visible = ref(true)\n\nconst handleClose = () => {\n visible.value = false\n emit('close')\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Alert from './src/alert.vue'\n\nexport const JhAlert = withInstall(Alert)\nexport default JhAlert\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { BacktopClickPayload } from './types'\n\nexport const backtopProps = {\n target: {\n type: String,\n default: ''\n },\n visibilityHeight: {\n type: Number,\n default: 200\n },\n right: {\n type: Number,\n default: 40\n },\n bottom: {\n type: Number,\n default: 40\n }\n} as const\n\nexport const backtopEmits = {\n click: (payload: BacktopClickPayload) => Boolean(payload.target)\n}\n","<template>\n <Transition name=\"jh-backtop-fade\">\n <button\n v-show=\"visible\"\n class=\"jh-backtop\"\n type=\"button\"\n :style=\"backtopStyle\"\n aria-label=\"Back to top\"\n @click=\"handleClick\"\n >\n <slot>\n <JhIcon name=\"arrow-left\" />\n </slot>\n </button>\n </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { backtopEmits, backtopProps } from './props'\n\ndefineOptions({\n name: 'JhBacktop'\n})\n\nconst props = defineProps(backtopProps)\nconst emit = defineEmits(backtopEmits)\nconst visible = ref(false)\nconst scrollTarget = ref<Window | HTMLElement>()\n\nconst backtopStyle = computed(() => ({\n right: `${props.right}px`,\n bottom: `${props.bottom}px`\n}))\n\nconst getScrollTop = () => {\n const target = scrollTarget.value\n if (!target) return 0\n if (typeof window !== 'undefined' && target === window) {\n return window.scrollY || document.documentElement.scrollTop\n }\n return (target as HTMLElement).scrollTop\n}\n\nconst handleScroll = () => {\n visible.value = getScrollTop() >= props.visibilityHeight\n}\n\nconst resolveTarget = () => {\n if (!props.target) return window\n return document.querySelector<HTMLElement>(props.target) || window\n}\n\nconst bindScroll = () => {\n if (typeof window === 'undefined') return\n scrollTarget.value = resolveTarget()\n scrollTarget.value.addEventListener('scroll', handleScroll)\n handleScroll()\n}\n\nconst unbindScroll = () => {\n scrollTarget.value?.removeEventListener('scroll', handleScroll)\n}\n\nconst handleClick = () => {\n const target = scrollTarget.value\n if (!target) return\n if (typeof window !== 'undefined' && target === window) {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n } else {\n const element = target as HTMLElement\n element.scrollTo({ top: 0, behavior: 'smooth' })\n }\n emit('click', { target })\n}\n\nonMounted(() => {\n nextTick(bindScroll)\n})\n\nonBeforeUnmount(() => {\n unbindScroll()\n})\n\ndefineExpose({\n handleScroll\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Backtop from './src/backtop.vue'\n\nexport const JhBacktop = withInstall(Backtop)\nexport default JhBacktop\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { BadgeType, BadgeValue } from './types'\n\nexport const badgeTypes: BadgeType[] = ['primary', 'success', 'warning', 'danger', 'info']\n\nexport const badgeProps = {\n value: {\n type: [String, Number] as PropType<BadgeValue>,\n default: ''\n },\n max: {\n type: Number,\n default: 0\n },\n type: {\n type: String as PropType<BadgeType>,\n default: 'danger',\n validator: (value: BadgeType) => badgeTypes.includes(value)\n },\n color: {\n type: String,\n default: ''\n },\n hidden: Boolean,\n isDot: Boolean\n} as const\n","<template>\n <span class=\"jh-badge\">\n <slot />\n <sup\n v-if=\"!hidden && (isDot || displayValue !== '')\"\n class=\"jh-badge__content\"\n :class=\"[`jh-badge__content--${type}`, { 'is-dot': isDot, 'is-custom-color': color }]\"\n :style=\"badgeStyle\"\n >\n <template v-if=\"!isDot\">{{ displayValue }}</template>\n </sup>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { badgeProps } from './props'\n\ndefineOptions({\n name: 'JhBadge'\n})\n\nconst props = defineProps(badgeProps)\n\nconst displayValue = computed(() => {\n if (props.isDot) return ''\n if (typeof props.value === 'number' && props.max > 0 && props.value > props.max) {\n return `${props.max}+`\n }\n return props.value\n})\n\nconst badgeStyle = computed(() => (props.color ? { backgroundColor: props.color } : undefined))\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Badge from './src/badge.vue'\n\nexport const JhBadge = withInstall(Badge)\nexport default JhBadge\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconName } from '../../icon'\nimport type { ButtonNativeType, ButtonSize, ButtonType } from './types'\n\nexport const buttonTypes: ButtonType[] = [\n 'default',\n 'primary',\n 'success',\n 'warning',\n 'danger',\n 'info'\n]\nexport const buttonSizes: ButtonSize[] = ['small', 'default', 'large']\nexport const buttonNativeTypes: ButtonNativeType[] = ['button', 'submit', 'reset']\n\nexport const buttonProps = {\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n validator: (value: ButtonType) => buttonTypes.includes(value)\n },\n size: {\n type: String as PropType<ButtonSize>,\n default: 'default',\n validator: (value: ButtonSize) => buttonSizes.includes(value)\n },\n disabled: Boolean,\n loading: Boolean,\n plain: Boolean,\n round: Boolean,\n circle: Boolean,\n icon: String as PropType<IconName>,\n nativeType: {\n type: String as PropType<ButtonNativeType>,\n default: 'button',\n validator: (value: ButtonNativeType) => buttonNativeTypes.includes(value)\n }\n} as const\n\nexport const buttonEmits = {\n click: (event: MouseEvent) => event instanceof MouseEvent\n}\n\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>\n","<template>\n <button\n class=\"jh-button\"\n :class=\"buttonClasses\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :aria-disabled=\"disabled || loading\"\n @click=\"handleClick\"\n >\n <JhIcon v-if=\"loading\" class=\"jh-button__loading\" name=\"loading\" />\n <JhIcon v-else-if=\"icon\" class=\"jh-button__icon\" :name=\"icon\" />\n <span v-if=\"$slots.default\" class=\"jh-button__content\">\n <slot />\n </span>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { buttonEmits, buttonProps } from './props'\n\ndefineOptions({\n name: 'JhButton'\n})\n\nconst props = defineProps(buttonProps)\nconst emit = defineEmits(buttonEmits)\n\nconst buttonClasses = computed(() => [\n `jh-button--${props.type}`,\n props.size !== 'default' ? `jh-button--${props.size}` : '',\n {\n 'is-disabled': props.disabled,\n 'is-loading': props.loading,\n 'is-plain': props.plain,\n 'is-round': props.round,\n 'is-circle': props.circle\n }\n])\n\nconst handleClick = (event: MouseEvent) => {\n if (props.disabled || props.loading) return\n emit('click', event)\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Button from './src/button.vue'\n\nexport const JhButton = withInstall(Button)\nexport default JhButton\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { CascaderFieldNames, CascaderOption, CascaderValue } from './types'\n\nexport const cascaderProps = {\n modelValue: {\n type: Array as PropType<CascaderValue[]>,\n default: () => []\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n default: () => []\n },\n placeholder: {\n type: String,\n default: 'Please select'\n },\n disabled: Boolean,\n clearable: Boolean,\n separator: {\n type: String,\n default: ' / '\n },\n fieldNames: {\n type: Object as PropType<CascaderFieldNames>,\n default: () => ({})\n }\n} as const\n\nexport const cascaderEmits = {\n 'update:modelValue': (_value: CascaderValue[]) => true,\n change: (_value: CascaderValue[], _selectedOptions: CascaderOption[]) => true,\n 'visible-change': (_visible: boolean) => true,\n clear: () => true\n}\n\nexport type CascaderProps = ExtractPropTypes<typeof cascaderProps>\n","<template>\n <div ref=\"cascaderRef\" class=\"jh-cascader\" :class=\"cascaderClasses\">\n <button\n class=\"jh-cascader__trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-expanded=\"visible\"\n @click=\"toggleVisible\"\n >\n <span class=\"jh-cascader__label\" :class=\"{ 'is-placeholder': !displayLabel }\">\n {{ displayLabel || placeholder }}\n </span>\n <button\n v-if=\"showClear\"\n class=\"jh-cascader__clear\"\n type=\"button\"\n aria-label=\"Clear cascader\"\n @click.stop=\"handleClear\"\n >\n <JhIcon name=\"close\" />\n </button>\n <JhIcon v-else class=\"jh-cascader__arrow\" name=\"arrow-right\" />\n </button>\n\n <Transition name=\"jh-cascader-fade\">\n <div v-if=\"visible\" class=\"jh-cascader__panel\">\n <ul v-for=\"(menu, level) in menus\" :key=\"level\" class=\"jh-cascader__menu\">\n <li v-for=\"option in menu\" :key=\"String(getValue(option))\" class=\"jh-cascader__menu-item\">\n <button\n class=\"jh-cascader__option\"\n :class=\"{\n 'is-active': isActive(option, level),\n 'is-disabled': isDisabled(option)\n }\"\n type=\"button\"\n :disabled=\"isDisabled(option)\"\n @click=\"handleOptionClick(option, level)\"\n >\n <span>{{ getLabel(option) }}</span>\n <JhIcon v-if=\"hasChildren(option)\" name=\"arrow-right\" class=\"jh-cascader__option-arrow\" />\n </button>\n </li>\n </ul>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { cascaderEmits, cascaderProps } from './props'\nimport type { CascaderOption, CascaderValue } from './types'\n\ndefineOptions({\n name: 'JhCascader'\n})\n\nconst props = defineProps(cascaderProps)\nconst emit = defineEmits(cascaderEmits)\n\nconst visible = ref(false)\nconst activePath = ref<CascaderValue[]>([])\nconst cascaderRef = ref<HTMLElement>()\n\nconst cascaderClasses = computed(() => ({\n 'is-disabled': props.disabled,\n 'is-visible': visible.value\n}))\n\nconst labelKey = computed(() => props.fieldNames.label || 'label')\nconst valueKey = computed(() => props.fieldNames.value || 'value')\nconst childrenKey = computed(() => props.fieldNames.children || 'children')\nconst disabledKey = computed(() => props.fieldNames.disabled || 'disabled')\n\nconst getLabel = (option: CascaderOption) => String(option[labelKey.value as keyof CascaderOption] ?? '')\nconst getValue = (option: CascaderOption) =>\n option[valueKey.value as keyof CascaderOption] as CascaderValue\nconst getChildren = (option: CascaderOption) =>\n (option[childrenKey.value as keyof CascaderOption] as CascaderOption[] | undefined) || []\nconst isDisabled = (option: CascaderOption) =>\n Boolean(option[disabledKey.value as keyof CascaderOption])\nconst hasChildren = (option: CascaderOption) => getChildren(option).length > 0\n\nconst resolvePath = (path: CascaderValue[]) => {\n const selectedOptions: CascaderOption[] = []\n let currentOptions = props.options\n\n for (const value of path) {\n const matched = currentOptions.find((option) => getValue(option) === value)\n if (!matched) break\n\n selectedOptions.push(matched)\n currentOptions = getChildren(matched)\n }\n\n return selectedOptions\n}\n\nconst selectedOptions = computed(() => resolvePath(props.modelValue))\nconst displayLabel = computed(() =>\n selectedOptions.value.length\n ? selectedOptions.value.map((option) => getLabel(option)).join(props.separator)\n : ''\n)\n\nconst menus = computed(() => {\n const result: CascaderOption[][] = []\n let currentOptions = props.options\n\n result.push(currentOptions)\n\n for (const value of activePath.value) {\n const matched = currentOptions.find((option) => getValue(option) === value)\n if (!matched) break\n\n const children = getChildren(matched)\n if (!children.length) break\n\n result.push(children)\n currentOptions = children\n }\n\n return result.filter((menu) => menu.length)\n})\n\nconst showClear = computed(\n () => props.clearable && !props.disabled && props.modelValue.length > 0\n)\n\nconst setVisible = (nextVisible: boolean) => {\n if (props.disabled) return\n if (visible.value === nextVisible) return\n\n visible.value = nextVisible\n emit('visible-change', nextVisible)\n}\n\nconst toggleVisible = () => {\n setVisible(!visible.value)\n}\n\nconst close = () => {\n setVisible(false)\n}\n\nconst isActive = (option: CascaderOption, level: number) => activePath.value[level] === getValue(option)\n\nconst handleOptionClick = (option: CascaderOption, level: number) => {\n if (isDisabled(option)) return\n\n const nextPath = activePath.value.slice(0, level)\n nextPath.push(getValue(option))\n activePath.value = nextPath\n\n if (hasChildren(option)) return\n\n const nextSelectedOptions = resolvePath(nextPath)\n emit('update:modelValue', [...nextPath])\n emit('change', [...nextPath], nextSelectedOptions)\n close()\n}\n\nconst handleClear = () => {\n activePath.value = []\n emit('update:modelValue', [])\n emit('change', [], [])\n emit('clear')\n close()\n}\n\nconst handleDocumentClick = (event: MouseEvent) => {\n if (!visible.value) return\n if (cascaderRef.value?.contains(event.target as Node)) return\n close()\n}\n\nwatch(\n () => visible.value,\n (nextVisible) => {\n if (nextVisible) {\n activePath.value = [...props.modelValue]\n document.addEventListener('click', handleDocumentClick)\n } else {\n document.removeEventListener('click', handleDocumentClick)\n }\n }\n)\n\nwatch(\n () => props.modelValue,\n (value) => {\n activePath.value = [...value]\n },\n { immediate: true }\n)\n\nonBeforeUnmount(() => {\n document.removeEventListener('click', handleDocumentClick)\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Cascader from './src/cascader.vue'\n\nexport const JhCascader = withInstall(Cascader)\nexport default JhCascader\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { InjectionKey, Ref } from 'vue'\n\nexport type CarouselArrow = 'always' | 'hover' | 'never'\n\nexport interface CarouselItemContext {\n uid: symbol\n}\n\nexport interface CarouselContext {\n activeUid: Ref<symbol | undefined>\n registerItem: (item: CarouselItemContext) => void\n unregisterItem: (item: CarouselItemContext) => void\n}\n\nexport const carouselContextKey: InjectionKey<CarouselContext> = Symbol('carouselContextKey')\n","import type { PropType } from 'vue'\nimport type { CarouselArrow } from './types'\n\nexport const carouselArrows: CarouselArrow[] = ['always', 'hover', 'never']\n\nexport const carouselProps = {\n modelValue: {\n type: Number,\n default: undefined\n },\n height: {\n type: String,\n default: '200px'\n },\n autoplay: {\n type: Boolean,\n default: true\n },\n interval: {\n type: Number,\n default: 3000\n },\n loop: {\n type: Boolean,\n default: true\n },\n arrow: {\n type: String as PropType<CarouselArrow>,\n default: 'hover',\n validator: (value: CarouselArrow) => carouselArrows.includes(value)\n },\n indicator: {\n type: Boolean,\n default: true\n }\n} as const\n\nexport const carouselEmits = {\n 'update:modelValue': (value: number) => Number.isInteger(value),\n change: (current: number, previous: number) => Number.isInteger(current) && Number.isInteger(previous)\n}\n\nexport const carouselItemProps = {\n name: {\n type: String,\n default: ''\n }\n} as const\n","<template>\n <div class=\"jh-carousel\" :class=\"[`jh-carousel--arrow-${arrow}`]\" @mouseenter=\"pause\" @mouseleave=\"start\">\n <div class=\"jh-carousel__container\" :style=\"{ height }\">\n <slot />\n\n <button\n v-if=\"arrow !== 'never' && items.length > 1\"\n class=\"jh-carousel__arrow jh-carousel__arrow--left\"\n type=\"button\"\n aria-label=\"Previous\"\n @click=\"prev\"\n >\n <JhIcon name=\"arrow-left\" />\n </button>\n <button\n v-if=\"arrow !== 'never' && items.length > 1\"\n class=\"jh-carousel__arrow jh-carousel__arrow--right\"\n type=\"button\"\n aria-label=\"Next\"\n @click=\"next\"\n >\n <JhIcon name=\"arrow-right\" />\n </button>\n </div>\n\n <div v-if=\"indicator && items.length > 1\" class=\"jh-carousel__indicators\">\n <button\n v-for=\"(_, index) in items\"\n :key=\"index\"\n class=\"jh-carousel__indicator\"\n :class=\"{ 'is-active': index === activeIndex }\"\n type=\"button\"\n :aria-label=\"`Go to slide ${index + 1}`\"\n @click=\"setActive(index)\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, provide, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { carouselContextKey, type CarouselItemContext } from './types'\nimport { carouselEmits, carouselProps } from './props'\n\ndefineOptions({\n name: 'JhCarousel'\n})\n\nconst props = defineProps(carouselProps)\nconst emit = defineEmits(carouselEmits)\n\nconst items = ref<CarouselItemContext[]>([])\nconst innerIndex = ref(props.modelValue ?? 0)\nconst activeUid = computed(() => items.value[activeIndex.value]?.uid)\nlet timer: number | undefined\n\nconst activeIndex = computed(() => {\n if (items.value.length === 0) return 0\n return Math.min(Math.max(innerIndex.value, 0), items.value.length - 1)\n})\n\nconst emitChange = (nextIndex: number, previousIndex: number) => {\n innerIndex.value = nextIndex\n emit('update:modelValue', nextIndex)\n if (nextIndex !== previousIndex) emit('change', nextIndex, previousIndex)\n}\n\nconst setActive = (index: number) => {\n if (items.value.length === 0) return\n const previousIndex = activeIndex.value\n const maxIndex = items.value.length - 1\n let nextIndex = index\n\n if (nextIndex < 0) nextIndex = props.loop ? maxIndex : 0\n if (nextIndex > maxIndex) nextIndex = props.loop ? 0 : maxIndex\n\n emitChange(nextIndex, previousIndex)\n}\n\nconst prev = () => setActive(activeIndex.value - 1)\nconst next = () => setActive(activeIndex.value + 1)\n\nconst clearTimer = () => {\n if (!timer) return\n window.clearInterval(timer)\n timer = undefined\n}\n\nconst start = () => {\n clearTimer()\n if (!props.autoplay || props.interval <= 0 || items.value.length <= 1) return\n timer = window.setInterval(next, props.interval)\n}\n\nconst pause = () => clearTimer()\n\nconst registerItem = (item: CarouselItemContext) => {\n items.value.push(item)\n start()\n}\n\nconst unregisterItem = (item: CarouselItemContext) => {\n items.value = items.value.filter((current) => current.uid !== item.uid)\n if (innerIndex.value > items.value.length - 1) innerIndex.value = Math.max(items.value.length - 1, 0)\n start()\n}\n\nprovide(carouselContextKey, {\n activeUid,\n registerItem,\n unregisterItem\n})\n\nwatch(\n () => props.modelValue,\n (value) => {\n if (typeof value === 'number') innerIndex.value = value\n }\n)\n\nwatch(\n () => [props.autoplay, props.interval, items.value.length],\n () => start()\n)\n\nonBeforeUnmount(() => {\n clearTimer()\n})\n</script>\n","<template>\n <div v-show=\"isActive\" class=\"jh-carousel__item\" :class=\"{ 'is-active': isActive }\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted } from 'vue'\nimport { carouselContextKey } from './types'\nimport { carouselItemProps } from './props'\n\ndefineOptions({\n name: 'JhCarouselItem'\n})\n\ndefineProps(carouselItemProps)\n\nconst carousel = inject(carouselContextKey, undefined)\nconst uid = Symbol('carouselItem')\nconst isActive = computed(() => carousel?.activeUid.value === uid)\n\nconst item = {\n uid\n}\n\nonMounted(() => {\n carousel?.registerItem(item)\n})\n\nonBeforeUnmount(() => {\n carousel?.unregisterItem(item)\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Carousel from './src/carousel.vue'\nimport CarouselItem from './src/carousel-item.vue'\n\nexport const JhCarousel = withInstall(Carousel)\nexport const JhCarouselItem = withInstall(CarouselItem)\nexport default JhCarousel\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { CheckboxValue } from './types'\n\nexport const checkboxProps = {\n modelValue: {\n type: [Boolean, Array] as PropType<boolean | CheckboxValue[]>,\n default: false\n },\n value: {\n type: [String, Number, Boolean] as PropType<CheckboxValue>,\n default: true\n },\n label: String,\n disabled: Boolean\n} as const\n\nexport const checkboxGroupProps = {\n modelValue: {\n type: Array as PropType<CheckboxValue[]>,\n default: () => []\n },\n disabled: Boolean\n} as const\n\nexport const checkboxEmits = {\n 'update:modelValue': (_value: boolean | CheckboxValue[]) => true,\n change: (_value: boolean | CheckboxValue[]) => true\n}\n\nexport const checkboxGroupEmits = {\n 'update:modelValue': (_value: CheckboxValue[]) => true,\n change: (_value: CheckboxValue[]) => true\n}\n\nexport type CheckboxProps = ExtractPropTypes<typeof checkboxProps>\nexport type CheckboxGroupProps = ExtractPropTypes<typeof checkboxGroupProps>\n","import type { InjectionKey } from 'vue'\n\nexport type CheckboxValue = string | number | boolean\n\nexport interface CheckboxGroupContext {\n modelValue: () => CheckboxValue[]\n disabled: () => boolean\n changeValue: (value: CheckboxValue, checked: boolean) => void\n}\n\nexport const checkboxGroupKey: InjectionKey<CheckboxGroupContext> = Symbol('JhCheckboxGroup')\n","<template>\n <label class=\"jh-checkbox\" :class=\"{ 'is-checked': checked, 'is-disabled': mergedDisabled }\">\n <span class=\"jh-checkbox__input\">\n <input\n class=\"jh-checkbox__original\"\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"mergedDisabled\"\n @change=\"handleChange\"\n />\n <span class=\"jh-checkbox__inner\" />\n </span>\n <span v-if=\"$slots.default || label\" class=\"jh-checkbox__label\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { checkboxEmits, checkboxProps } from './props'\nimport { checkboxGroupKey } from './types'\n\ndefineOptions({\n name: 'JhCheckbox'\n})\n\nconst props = defineProps(checkboxProps)\nconst emit = defineEmits(checkboxEmits)\nconst group = inject(checkboxGroupKey, undefined)\n\nconst mergedDisabled = computed(() => props.disabled || Boolean(group?.disabled()))\nconst checked = computed(() => {\n if (group) return group.modelValue().includes(props.value)\n if (Array.isArray(props.modelValue)) return props.modelValue.includes(props.value)\n return Boolean(props.modelValue)\n})\n\nconst handleChange = (event: Event) => {\n const nextChecked = (event.target as HTMLInputElement).checked\n\n if (group) {\n group.changeValue(props.value, nextChecked)\n return\n }\n\n if (Array.isArray(props.modelValue)) {\n const nextValue = nextChecked\n ? [...props.modelValue, props.value]\n : props.modelValue.filter((item) => item !== props.value)\n emit('update:modelValue', nextValue)\n emit('change', nextValue)\n return\n }\n\n emit('update:modelValue', nextChecked)\n emit('change', nextChecked)\n}\n</script>\n","<template>\n <div class=\"jh-checkbox-group\" :class=\"{ 'is-disabled': disabled }\" role=\"group\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue'\nimport { checkboxGroupEmits, checkboxGroupProps } from './props'\nimport { checkboxGroupKey, type CheckboxValue } from './types'\n\ndefineOptions({\n name: 'JhCheckboxGroup'\n})\n\nconst props = defineProps(checkboxGroupProps)\nconst emit = defineEmits(checkboxGroupEmits)\n\nconst changeValue = (value: CheckboxValue, checked: boolean) => {\n const nextValue = checked\n ? [...props.modelValue, value]\n : props.modelValue.filter((item) => item !== value)\n\n emit('update:modelValue', nextValue)\n emit('change', nextValue)\n}\n\nprovide(checkboxGroupKey, {\n modelValue: () => props.modelValue,\n disabled: () => props.disabled,\n changeValue\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Checkbox from './src/checkbox.vue'\nimport CheckboxGroup from './src/checkbox-group.vue'\n\nexport const JhCheckbox = withInstall(Checkbox)\nexport const JhCheckboxGroup = withInstall(CheckboxGroup)\nexport default JhCheckbox\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { InjectionKey } from 'vue'\n\nexport type CollapseName = string | number\n\nexport type CollapseModelValue = CollapseName | CollapseName[]\n\nexport interface CollapseContext {\n isActive: (name: CollapseName) => boolean\n toggle: (name: CollapseName) => void\n}\n\nexport const collapseContextKey: InjectionKey<CollapseContext> = Symbol('collapseContextKey')\n","import type { PropType } from 'vue'\nimport type { CollapseModelValue, CollapseName } from './types'\n\nexport const collapseProps = {\n modelValue: {\n type: [String, Number, Array] as PropType<CollapseModelValue>,\n default: () => []\n },\n accordion: Boolean\n} as const\n\nexport const collapseEmits = {\n 'update:modelValue': (value: CollapseModelValue) =>\n typeof value === 'string' || typeof value === 'number' || Array.isArray(value),\n change: (value: CollapseModelValue) =>\n typeof value === 'string' || typeof value === 'number' || Array.isArray(value)\n}\n\nexport const collapseItemProps = {\n name: {\n type: [String, Number] as PropType<CollapseName>,\n required: true\n },\n title: {\n type: String,\n default: ''\n },\n disabled: Boolean\n} as const\n","<template>\n <div class=\"jh-collapse\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue'\nimport { collapseContextKey, type CollapseName } from './types'\nimport { collapseEmits, collapseProps } from './props'\n\ndefineOptions({\n name: 'JhCollapse'\n})\n\nconst props = defineProps(collapseProps)\nconst emit = defineEmits(collapseEmits)\n\nconst getActiveNames = () => (Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue])\n\nconst isActive = (name: CollapseName) => getActiveNames().includes(name)\n\nconst toggle = (name: CollapseName) => {\n if (props.accordion) {\n const nextValue = isActive(name) ? '' : name\n emit('update:modelValue', nextValue)\n emit('change', nextValue)\n return\n }\n\n const activeNames = getActiveNames().filter((item) => item !== '')\n const nextValue = isActive(name)\n ? activeNames.filter((item) => item !== name)\n : [...activeNames, name]\n\n emit('update:modelValue', nextValue)\n emit('change', nextValue)\n}\n\nprovide(collapseContextKey, {\n isActive,\n toggle\n})\n</script>\n","<template>\n <div\n class=\"jh-collapse-item\"\n :class=\"{ 'is-active': active, 'is-disabled': disabled }\"\n >\n <button class=\"jh-collapse-item__header\" type=\"button\" :disabled=\"disabled\" @click=\"handleClick\">\n <slot name=\"title\">{{ title }}</slot>\n <JhIcon class=\"jh-collapse-item__arrow\" name=\"arrow-right\" />\n </button>\n <div v-show=\"active\" class=\"jh-collapse-item__wrap\">\n <div class=\"jh-collapse-item__content\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { collapseContextKey } from './types'\nimport { collapseItemProps } from './props'\n\ndefineOptions({\n name: 'JhCollapseItem'\n})\n\nconst props = defineProps(collapseItemProps)\nconst collapse = inject(collapseContextKey, undefined)\n\nconst active = computed(() => collapse?.isActive(props.name) ?? false)\n\nconst handleClick = () => {\n if (props.disabled) return\n collapse?.toggle(props.name)\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Collapse from './src/collapse.vue'\nimport CollapseItem from './src/collapse-item.vue'\n\nexport const JhCollapse = withInstall(Collapse)\nexport const JhCollapseItem = withInstall(CollapseItem)\nexport default JhCollapse\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes } from 'vue'\n\nexport const datePickerProps = {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: String,\n disabled: Boolean,\n clearable: Boolean\n} as const\n\nexport const datePickerEmits = {\n 'update:modelValue': (_value: string) => true,\n change: (_value: string) => true,\n clear: () => true\n}\n\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>\n","<template>\n <div class=\"jh-date-picker\" :class=\"{ 'is-disabled': disabled }\">\n <input\n class=\"jh-date-picker__inner\"\n type=\"date\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n />\n <button v-if=\"showClear\" class=\"jh-date-picker__clear\" type=\"button\" @click=\"handleClear\">\n <JhIcon name=\"close\" />\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { datePickerEmits, datePickerProps } from './props'\n\ndefineOptions({\n name: 'JhDatePicker'\n})\n\nconst props = defineProps(datePickerProps)\nconst emit = defineEmits(datePickerEmits)\n\nconst showClear = computed(() => props.clearable && !props.disabled && Boolean(props.modelValue))\n\nconst handleInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value)\n}\n\nconst handleChange = (event: Event) => {\n emit('change', (event.target as HTMLInputElement).value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('change', '')\n emit('clear')\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport DatePicker from './src/date-picker.vue'\n\nexport const JhDatePicker = withInstall(DatePicker)\nexport default JhDatePicker\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes } from 'vue'\n\nexport const dateTimePickerProps = {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: String,\n disabled: Boolean,\n clearable: Boolean\n} as const\n\nexport const dateTimePickerEmits = {\n 'update:modelValue': (_value: string) => true,\n change: (_value: string) => true,\n clear: () => true\n}\n\nexport type DateTimePickerProps = ExtractPropTypes<typeof dateTimePickerProps>\n","<template>\n <div class=\"jh-date-picker\" :class=\"{ 'is-disabled': disabled }\">\n <input\n class=\"jh-date-picker__inner\"\n type=\"datetime-local\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n />\n <button v-if=\"showClear\" class=\"jh-date-picker__clear\" type=\"button\" @click=\"handleClear\">\n <JhIcon name=\"close\" />\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { dateTimePickerEmits, dateTimePickerProps } from './props'\n\ndefineOptions({\n name: 'JhDateTimePicker'\n})\n\nconst props = defineProps(dateTimePickerProps)\nconst emit = defineEmits(dateTimePickerEmits)\n\nconst showClear = computed(() => props.clearable && !props.disabled && Boolean(props.modelValue))\n\nconst handleInput = (event: Event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value)\n}\n\nconst handleChange = (event: Event) => {\n emit('change', (event.target as HTMLInputElement).value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('change', '')\n emit('clear')\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport DateTimePicker from './src/date-time-picker.vue'\n\nexport const JhDateTimePicker = withInstall(DateTimePicker)\nexport default JhDateTimePicker\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { DialogBeforeClose } from './types'\n\nexport const dialogProps = {\n modelValue: Boolean,\n title: String,\n width: {\n type: String,\n default: '50%'\n },\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n beforeClose: Function as PropType<DialogBeforeClose>\n} as const\n\nexport const dialogEmits = {\n 'update:modelValue': (_value: boolean) => true,\n open: () => true,\n close: () => true,\n closed: () => true\n}\n\nexport type DialogProps = ExtractPropTypes<typeof dialogProps>\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"jh-dialog-fade\" @after-leave=\"emit('closed')\">\n <div v-if=\"modelValue\" class=\"jh-overlay\" @click=\"handleModalClick\">\n <div\n class=\"jh-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"title || 'Dialog'\"\n :style=\"dialogStyle\"\n @click.stop\n >\n <header class=\"jh-dialog__header\">\n <slot name=\"header\">\n <span class=\"jh-dialog__title\">{{ title }}</span>\n </slot>\n <button class=\"jh-dialog__close\" type=\"button\" aria-label=\"Close dialog\" @click=\"requestClose\">\n x\n </button>\n </header>\n\n <section class=\"jh-dialog__body\">\n <slot />\n </section>\n\n <footer v-if=\"$slots.footer\" class=\"jh-dialog__footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\nimport { dialogEmits, dialogProps } from './props'\n\ndefineOptions({\n name: 'JhDialog'\n})\n\nconst props = defineProps(dialogProps)\nconst emit = defineEmits(dialogEmits)\n\nconst dialogStyle = computed(() => ({\n width: props.width\n}))\n\nconst close = () => {\n emit('update:modelValue', false)\n emit('close')\n}\n\nconst requestClose = () => {\n if (props.beforeClose) {\n props.beforeClose(close)\n return\n }\n\n close()\n}\n\nconst handleModalClick = () => {\n if (!props.closeOnClickModal) return\n requestClose()\n}\n\nwatch(\n () => props.modelValue,\n (visible) => {\n if (visible) emit('open')\n }\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Dialog from './src/dialog.vue'\n\nexport const JhDialog = withInstall(Dialog)\nexport default JhDialog\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { DrawerBeforeClose, DrawerDirection } from './types'\n\nexport const drawerDirections: DrawerDirection[] = ['rtl', 'ltr', 'ttb', 'btt']\n\nexport const drawerProps = {\n modelValue: Boolean,\n title: {\n type: String,\n default: ''\n },\n size: {\n type: String,\n default: '30%'\n },\n direction: {\n type: String as PropType<DrawerDirection>,\n default: 'rtl',\n validator: (value: DrawerDirection) => drawerDirections.includes(value)\n },\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n beforeClose: {\n type: Function as PropType<DrawerBeforeClose>,\n default: undefined\n }\n} as const\n\nexport const drawerEmits = {\n 'update:modelValue': (_value: boolean) => true,\n open: () => true,\n close: () => true,\n closed: () => true\n}\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"jh-drawer-fade\" @after-leave=\"emit('closed')\">\n <div\n v-if=\"modelValue\"\n class=\"jh-drawer-overlay\"\n :class=\"`jh-drawer-overlay--${direction}`\"\n @click=\"handleModalClick\"\n >\n <aside\n class=\"jh-drawer\"\n :class=\"`jh-drawer--${direction}`\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"title || 'Drawer'\"\n :style=\"drawerStyle\"\n @click.stop\n >\n <header class=\"jh-drawer__header\">\n <slot name=\"header\">\n <span class=\"jh-drawer__title\">{{ title }}</span>\n </slot>\n <button\n class=\"jh-drawer__close\"\n type=\"button\"\n aria-label=\"Close drawer\"\n @click=\"requestClose\"\n >\n <JhIcon name=\"close\" />\n </button>\n </header>\n <section class=\"jh-drawer__body\">\n <slot />\n </section>\n <footer v-if=\"$slots.footer\" class=\"jh-drawer__footer\">\n <slot name=\"footer\" />\n </footer>\n </aside>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { drawerEmits, drawerProps } from './props'\n\ndefineOptions({\n name: 'JhDrawer'\n})\n\nconst props = defineProps(drawerProps)\nconst emit = defineEmits(drawerEmits)\n\nconst drawerStyle = computed(() => {\n if (props.direction === 'ttb' || props.direction === 'btt') return { height: props.size }\n return { width: props.size }\n})\n\nconst close = () => {\n emit('update:modelValue', false)\n emit('close')\n}\n\nconst requestClose = () => {\n if (props.beforeClose) {\n props.beforeClose(close)\n return\n }\n close()\n}\n\nconst handleModalClick = () => {\n if (!props.closeOnClickModal) return\n requestClose()\n}\n\nwatch(\n () => props.modelValue,\n (visible) => {\n if (visible) emit('open')\n }\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Drawer from './src/drawer.vue'\n\nexport const JhDrawer = withInstall(Drawer)\nexport default JhDrawer\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { DropdownCommand, DropdownOption, DropdownPlacement, DropdownTrigger } from './types'\n\nexport const dropdownTriggers: DropdownTrigger[] = ['click', 'hover']\nexport const dropdownPlacements: DropdownPlacement[] = ['bottom-start', 'bottom-end']\n\nexport const dropdownProps = {\n options: {\n type: Array as PropType<DropdownOption[]>,\n default: () => []\n },\n trigger: {\n type: String as PropType<DropdownTrigger>,\n default: 'click',\n validator: (value: DropdownTrigger) => dropdownTriggers.includes(value)\n },\n placement: {\n type: String as PropType<DropdownPlacement>,\n default: 'bottom-start',\n validator: (value: DropdownPlacement) => dropdownPlacements.includes(value)\n },\n disabled: Boolean,\n hideOnClick: {\n type: Boolean,\n default: true\n }\n} as const\n\nexport const dropdownEmits = {\n command: (_command: DropdownCommand, _option: DropdownOption) => true,\n 'visible-change': (_visible: boolean) => true\n}\n\nexport type DropdownProps = ExtractPropTypes<typeof dropdownProps>\n","<template>\n <div\n ref=\"dropdownRef\"\n class=\"jh-dropdown\"\n :class=\"dropdownClasses\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <button\n v-if=\"!$slots.default\"\n class=\"jh-dropdown__trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-expanded=\"visible\"\n aria-haspopup=\"menu\"\n @click=\"handleTriggerClick\"\n >\n Dropdown\n <JhIcon name=\"arrow-right\" class=\"jh-dropdown__arrow\" />\n </button>\n <div\n v-else\n class=\"jh-dropdown__trigger\"\n :aria-expanded=\"visible\"\n aria-haspopup=\"menu\"\n @click=\"handleTriggerClick\"\n >\n <slot />\n </div>\n\n <Transition name=\"jh-dropdown-fade\">\n <div v-if=\"visible\" class=\"jh-dropdown__menu\" role=\"menu\">\n <slot name=\"dropdown\">\n <button\n v-for=\"option in options\"\n :key=\"option.command\"\n class=\"jh-dropdown__item\"\n :class=\"{ 'is-disabled': option.disabled, 'is-divided': option.divided }\"\n type=\"button\"\n role=\"menuitem\"\n :disabled=\"option.disabled\"\n @click=\"handleOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n </slot>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { dropdownEmits, dropdownProps } from './props'\nimport type { DropdownOption } from './types'\n\ndefineOptions({\n name: 'JhDropdown'\n})\n\nconst props = defineProps(dropdownProps)\nconst emit = defineEmits(dropdownEmits)\n\nconst visible = ref(false)\nconst dropdownRef = ref<HTMLElement>()\n\nconst dropdownClasses = computed(() => ({\n 'is-disabled': props.disabled,\n 'is-visible': visible.value,\n [`jh-dropdown--${props.placement}`]: true\n}))\n\nconst setVisible = (nextVisible: boolean) => {\n if (props.disabled) return\n if (visible.value === nextVisible) return\n\n visible.value = nextVisible\n emit('visible-change', nextVisible)\n}\n\nconst close = () => setVisible(false)\nconst toggle = () => setVisible(!visible.value)\n\nconst handleTriggerClick = () => {\n if (props.trigger !== 'click') return\n toggle()\n}\n\nconst handleMouseEnter = () => {\n if (props.trigger !== 'hover') return\n setVisible(true)\n}\n\nconst handleMouseLeave = () => {\n if (props.trigger !== 'hover') return\n close()\n}\n\nconst handleOptionClick = (option: DropdownOption) => {\n if (option.disabled) return\n\n emit('command', option.command, option)\n if (props.hideOnClick) close()\n}\n\nconst handleDocumentClick = (event: MouseEvent) => {\n if (!visible.value) return\n if (dropdownRef.value?.contains(event.target as Node)) return\n close()\n}\n\nwatch(\n () => visible.value,\n (nextVisible) => {\n if (props.trigger !== 'click') return\n\n if (nextVisible) {\n document.addEventListener('click', handleDocumentClick)\n } else {\n document.removeEventListener('click', handleDocumentClick)\n }\n }\n)\n\nonBeforeUnmount(() => {\n document.removeEventListener('click', handleDocumentClick)\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Dropdown from './src/dropdown.vue'\n\nexport const JhDropdown = withInstall(Dropdown)\nexport default JhDropdown\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { FormRule, FormRules } from './types'\n\nexport const formProps = {\n model: {\n type: Object as PropType<Record<string, unknown>>,\n default: () => ({})\n },\n rules: {\n type: Object as PropType<FormRules>,\n default: () => ({})\n },\n labelWidth: {\n type: String,\n default: '100px'\n }\n} as const\n\nexport const formItemProps = {\n label: String,\n prop: String,\n rules: [Object, Array] as PropType<FormRule | FormRule[]>,\n required: Boolean\n} as const\n\nexport type FormProps = ExtractPropTypes<typeof formProps>\nexport type FormItemProps = ExtractPropTypes<typeof formItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport interface FormRule {\n required?: boolean\n message?: string\n validator?: (value: unknown, model: Record<string, unknown>) => boolean | string | Promise<boolean | string>\n}\n\nexport type FormRules = Record<string, FormRule | FormRule[]>\n\nexport interface FormItemContext {\n prop?: string\n validate: () => Promise<boolean>\n resetField: () => void\n}\n\nexport interface FormContext {\n model: Record<string, unknown>\n rules: FormRules\n registerItem: (item: FormItemContext) => void\n unregisterItem: (item: FormItemContext) => void\n}\n\nexport const formContextKey: InjectionKey<FormContext> = Symbol('JhForm')\n","<template>\n <form class=\"jh-form\" :style=\"{ '--jh-form-label-width': labelWidth }\" @submit.prevent>\n <slot />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, ref } from 'vue'\nimport { formProps } from './props'\nimport { formContextKey, type FormItemContext } from './types'\n\ndefineOptions({\n name: 'JhForm'\n})\n\nconst props = defineProps(formProps)\nconst fields = ref<FormItemContext[]>([])\n\nconst registerItem = (item: FormItemContext) => {\n fields.value.push(item)\n}\n\nconst unregisterItem = (item: FormItemContext) => {\n fields.value = fields.value.filter((field) => field !== item)\n}\n\nconst validate = async () => {\n const results = await Promise.all(fields.value.map((field) => field.validate()))\n return results.every(Boolean)\n}\n\nconst resetFields = () => {\n fields.value.forEach((field) => field.resetField())\n}\n\nprovide(formContextKey, {\n model: props.model,\n rules: props.rules,\n registerItem,\n unregisterItem\n})\n\ndefineExpose({\n validate,\n resetFields\n})\n</script>\n","<template>\n <div class=\"jh-form-item\" :class=\"{ 'is-error': Boolean(errorMessage), 'is-required': isRequired }\">\n <label v-if=\"label\" class=\"jh-form-item__label\">{{ label }}</label>\n <div class=\"jh-form-item__content\">\n <slot />\n <div v-if=\"errorMessage\" class=\"jh-form-item__error\">{{ errorMessage }}</div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { formItemProps } from './props'\nimport { formContextKey } from './types'\n\ndefineOptions({\n name: 'JhFormItem'\n})\n\nconst props = defineProps(formItemProps)\nconst form = inject(formContextKey, undefined)\nconst errorMessage = ref('')\n\nconst rules = computed(() => {\n const propRules = props.prop ? form?.rules[props.prop] : undefined\n const mergedRules = props.rules || propRules || []\n return Array.isArray(mergedRules) ? mergedRules : [mergedRules]\n})\n\nconst isRequired = computed(() => props.required || rules.value.some((rule) => rule.required))\n\nconst getValue = () => (props.prop ? form?.model[props.prop] : undefined)\n\nconst validate = async () => {\n errorMessage.value = ''\n\n for (const rule of rules.value) {\n const value = getValue()\n\n if ((props.required || rule.required) && (value === '' || value === undefined || value === null)) {\n errorMessage.value = rule.message || `${props.label || props.prop || 'Field'} is required`\n return false\n }\n\n if (rule.validator) {\n const result = await rule.validator(value, form?.model || {})\n if (result !== true) {\n errorMessage.value = typeof result === 'string' ? result : rule.message || 'Validation failed'\n return false\n }\n }\n }\n\n return true\n}\n\nconst resetField = () => {\n if (props.prop && form?.model) {\n form.model[props.prop] = ''\n }\n errorMessage.value = ''\n}\n\nconst context = {\n prop: props.prop,\n validate,\n resetField\n}\n\nonMounted(() => {\n form?.registerItem(context)\n})\n\nonBeforeUnmount(() => {\n form?.unregisterItem(context)\n})\n\ndefineExpose({\n validate,\n resetField\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Form from './src/form.vue'\nimport FormItem from './src/form-item.vue'\n\nexport const JhForm = withInstall(Form)\nexport const JhFormItem = withInstall(FormItem)\nexport default JhForm\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { InfiniteScrollLoadPayload } from './types'\n\nexport const infiniteScrollProps = {\n height: {\n type: String,\n default: '240px'\n },\n distance: {\n type: Number,\n default: 0\n },\n delay: {\n type: Number,\n default: 200\n },\n disabled: Boolean,\n loading: Boolean,\n immediate: Boolean\n} as const\n\nexport const infiniteScrollEmits = {\n load: (payload: InfiniteScrollLoadPayload) =>\n Number.isFinite(payload.scrollTop) &&\n Number.isFinite(payload.clientHeight) &&\n Number.isFinite(payload.scrollHeight)\n}\n","<template>\n <div\n ref=\"containerRef\"\n class=\"jh-infinite-scroll\"\n :class=\"{ 'is-disabled': disabled, 'is-loading': loading }\"\n :style=\"{ height }\"\n @scroll=\"handleScroll\"\n >\n <slot />\n <div v-if=\"$slots.loading || loading\" class=\"jh-infinite-scroll__loading\">\n <slot name=\"loading\">Loading...</slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref } from 'vue'\nimport { infiniteScrollEmits, infiniteScrollProps } from './props'\n\ndefineOptions({\n name: 'JhInfiniteScroll'\n})\n\nconst props = defineProps(infiniteScrollProps)\nconst emit = defineEmits(infiniteScrollEmits)\nconst containerRef = ref<HTMLElement>()\nlet timer: number | undefined\n\nconst clearTimer = () => {\n if (!timer) return\n window.clearTimeout(timer)\n timer = undefined\n}\n\nconst shouldLoad = (element: HTMLElement) =>\n element.scrollHeight - element.scrollTop - element.clientHeight <= props.distance\n\nconst emitLoad = (element: HTMLElement) => {\n if (props.disabled || props.loading) return\n emit('load', {\n scrollTop: element.scrollTop,\n clientHeight: element.clientHeight,\n scrollHeight: element.scrollHeight\n })\n}\n\nconst check = () => {\n const element = containerRef.value\n if (!element || !shouldLoad(element)) return\n emitLoad(element)\n}\n\nconst handleScroll = () => {\n clearTimer()\n timer = window.setTimeout(check, props.delay)\n}\n\nonMounted(() => {\n if (!props.immediate) return\n nextTick(check)\n})\n\ndefineExpose({\n check\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport InfiniteScroll from './src/infinite-scroll.vue'\n\nexport const JhInfiniteScroll = withInstall(InfiniteScroll)\nexport default JhInfiniteScroll\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconName } from '../../icon'\nimport type { InputModelValue } from './types'\n\nexport const inputProps = {\n modelValue: {\n type: [String, Number] as PropType<InputModelValue>,\n default: ''\n },\n placeholder: String,\n disabled: Boolean,\n clearable: Boolean,\n password: Boolean,\n prefixIcon: String as PropType<IconName>,\n suffixIcon: String as PropType<IconName>,\n name: String,\n autocomplete: String\n} as const\n\nexport const inputEmits = {\n 'update:modelValue': (_value: InputModelValue) => true,\n input: (_value: InputModelValue) => true,\n change: (_value: InputModelValue) => true,\n clear: () => true,\n focus: (event: FocusEvent) => event instanceof FocusEvent,\n blur: (event: FocusEvent) => event instanceof FocusEvent\n}\n\nexport type InputProps = ExtractPropTypes<typeof inputProps>\n","<template>\n <div class=\"jh-input\" :class=\"inputClasses\">\n <span v-if=\"$slots.prefix || prefixIcon\" class=\"jh-input__prefix\">\n <slot name=\"prefix\">\n <JhIcon v-if=\"prefixIcon\" class=\"jh-input__icon\" :name=\"prefixIcon\" />\n </slot>\n </span>\n\n <input\n ref=\"inputRef\"\n class=\"jh-input__inner\"\n :value=\"modelValue\"\n :type=\"nativeType\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :autocomplete=\"autocomplete\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <span v-if=\"showSuffix\" class=\"jh-input__suffix\">\n <button\n v-if=\"showClear\"\n class=\"jh-input__action\"\n type=\"button\"\n :disabled=\"disabled\"\n aria-label=\"Clear input\"\n @mousedown.prevent\n @click=\"handleClear\"\n >\n <JhIcon name=\"close\" />\n </button>\n <button\n v-else-if=\"password\"\n class=\"jh-input__action\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"passwordVisible ? 'Hide password' : 'Show password'\"\n @mousedown.prevent\n @click=\"togglePasswordVisible\"\n >\n <JhIcon :name=\"passwordVisible ? 'eye-off' : 'eye'\" />\n </button>\n <slot v-else name=\"suffix\">\n <JhIcon v-if=\"suffixIcon\" class=\"jh-input__icon\" :name=\"suffixIcon\" />\n </slot>\n </span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { inputEmits, inputProps } from './props'\nimport type { InputModelValue } from './types'\n\ndefineOptions({\n name: 'JhInput'\n})\n\nconst props = defineProps(inputProps)\nconst emit = defineEmits(inputEmits)\n\nconst inputRef = ref<HTMLInputElement>()\nconst passwordVisible = ref(false)\nconst isFocused = ref(false)\n\nconst slots = defineSlots<{\n prefix?: () => unknown\n suffix?: () => unknown\n}>()\n\nconst nativeType = computed(() => (props.password && !passwordVisible.value ? 'password' : 'text'))\nconst hasValue = computed(() => props.modelValue !== '' && props.modelValue !== undefined)\nconst showClear = computed(() => props.clearable && !props.disabled && hasValue.value)\nconst showSuffix = computed(\n () => showClear.value || props.password || Boolean(props.suffixIcon) || Boolean(slots.suffix)\n)\n\nconst inputClasses = computed(() => ({\n 'is-disabled': props.disabled,\n 'is-focus': isFocused.value,\n 'jh-input--prefix': Boolean(slots.prefix) || Boolean(props.prefixIcon),\n 'jh-input--suffix': showSuffix.value\n}))\n\nconst emitValue = (value: InputModelValue) => {\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleInput = (event: Event) => {\n emitValue((event.target as HTMLInputElement).value)\n}\n\nconst handleChange = (event: Event) => {\n emit('change', (event.target as HTMLInputElement).value)\n}\n\nconst handleClear = () => {\n if (props.disabled) return\n emitValue('')\n emit('clear')\n inputRef.value?.focus()\n}\n\nconst togglePasswordVisible = () => {\n if (props.disabled) return\n passwordVisible.value = !passwordVisible.value\n inputRef.value?.focus()\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocused.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocused.value = false\n emit('blur', event)\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Input from './src/input.vue'\n\nexport const JhInput = withInstall(Input)\nexport default JhInput\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconName } from '../../icon'\nimport type { LinkTarget, LinkType } from './types'\n\nexport const linkTypes: LinkType[] = ['default', 'primary', 'success', 'warning', 'danger', 'info']\n\nexport const linkProps = {\n type: {\n type: String as PropType<LinkType>,\n default: 'default',\n validator: (value: LinkType) => linkTypes.includes(value)\n },\n href: String,\n target: String as PropType<LinkTarget>,\n disabled: Boolean,\n underline: {\n type: Boolean,\n default: true\n },\n icon: String as PropType<IconName>\n} as const\n\nexport const linkEmits = {\n click: (event: MouseEvent) => event instanceof MouseEvent\n}\n\nexport type LinkProps = ExtractPropTypes<typeof linkProps>\n","<template>\n <a\n class=\"jh-link\"\n :class=\"linkClasses\"\n :href=\"disabled ? undefined : href\"\n :target=\"disabled ? undefined : target\"\n :aria-disabled=\"disabled\"\n @click=\"handleClick\"\n >\n <JhIcon v-if=\"icon\" class=\"jh-link__icon\" :name=\"icon\" />\n <span v-if=\"$slots.default\" class=\"jh-link__inner\">\n <slot />\n </span>\n </a>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { linkEmits, linkProps } from './props'\n\ndefineOptions({\n name: 'JhLink'\n})\n\nconst props = defineProps(linkProps)\nconst emit = defineEmits(linkEmits)\n\nconst linkClasses = computed(() => [\n `jh-link--${props.type}`,\n {\n 'is-disabled': props.disabled,\n 'is-underline': props.underline\n }\n])\n\nconst handleClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault()\n return\n }\n\n emit('click', event)\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Link from './src/link.vue'\n\nexport const JhLink = withInstall(Link)\nexport default JhLink\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { MessageType } from './types'\n\nexport const messageTypes: MessageType[] = ['success', 'warning', 'info', 'danger']\n\nexport const messageProps = {\n id: {\n type: String,\n required: true\n },\n message: {\n type: String,\n default: ''\n },\n type: {\n type: String as PropType<MessageType>,\n default: 'info',\n validator: (value: MessageType) => messageTypes.includes(value)\n },\n duration: {\n type: Number,\n default: 3000\n },\n showClose: Boolean,\n offset: {\n type: Number,\n default: 20\n },\n zIndex: {\n type: Number,\n default: 3000\n },\n onClose: Function as PropType<() => void>,\n onDestroy: Function as PropType<() => void>\n} as const\n","<template>\n <Transition name=\"jh-message-fade\" @after-leave=\"handleAfterLeave\">\n <div\n v-show=\"visible\"\n class=\"jh-message\"\n :class=\"`jh-message--${type}`\"\n role=\"alert\"\n :style=\"messageStyle\"\n @mouseenter=\"clearTimer\"\n @mouseleave=\"startTimer\"\n >\n <span class=\"jh-message__icon\" aria-hidden=\"true\" />\n <span class=\"jh-message__content\">\n <slot>{{ message }}</slot>\n </span>\n <button\n v-if=\"showClose\"\n class=\"jh-message__close\"\n type=\"button\"\n aria-label=\"Close message\"\n @click=\"close\"\n >\n <JhIcon name=\"close\" />\n </button>\n </div>\n </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { messageProps } from './props'\n\ndefineOptions({\n name: 'JhMessage'\n})\n\nconst props = defineProps(messageProps)\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | undefined\n\nconst messageStyle = computed(() => ({\n top: `${props.offset}px`,\n zIndex: props.zIndex\n}))\n\nconst clearTimer = () => {\n if (!timer) return\n clearTimeout(timer)\n timer = undefined\n}\n\nconst close = () => {\n if (!visible.value) return\n visible.value = false\n props.onClose?.()\n}\n\nconst startTimer = () => {\n if (props.duration <= 0) return\n clearTimer()\n timer = setTimeout(close, props.duration)\n}\n\nconst handleAfterLeave = () => {\n props.onDestroy?.()\n}\n\nonMounted(() => {\n visible.value = true\n startTimer()\n})\n\nonBeforeUnmount(() => {\n clearTimer()\n})\n\ndefineExpose({\n close\n})\n</script>\n","import { createVNode, render } from 'vue'\nimport type { App } from 'vue'\nimport Message from './src/message.vue'\nimport type {\n MessageFn,\n MessageHandler,\n MessageInstance,\n MessageOptions,\n MessageType\n} from './src/types'\n\nconst instances: MessageInstance[] = []\nlet seed = 1\n\nconst normalizeOptions = (options: string | MessageOptions = {}): MessageOptions => {\n if (typeof options === 'string') return { message: options }\n return options\n}\n\nconst getOffset = (baseOffset: number) => baseOffset + instances.length * 56\n\nconst createMessage = (options: string | MessageOptions = {}): MessageHandler => {\n if (typeof document === 'undefined') {\n return { close: () => undefined }\n }\n\n const normalized = normalizeOptions(options)\n const container = document.createElement('div')\n const id = `jh-message-${seed++}`\n\n const close = () => {\n const instance = instances.find((item) => item.id === id)\n instance?.close()\n }\n\n const props = {\n id,\n message: normalized.message ?? '',\n type: normalized.type ?? 'info',\n duration: normalized.duration ?? 3000,\n showClose: normalized.showClose ?? false,\n offset: getOffset(normalized.offset ?? 20),\n zIndex: normalized.zIndex ?? 3000,\n onClose: normalized.onClose,\n onDestroy: () => {\n const index = instances.findIndex((item) => item.id === id)\n if (index > -1) instances.splice(index, 1)\n render(null, container)\n container.remove()\n }\n }\n\n const vnode = createVNode(Message, props)\n render(vnode, container)\n document.body.appendChild(container)\n\n instances.push({\n id,\n close: () => {\n const exposed = vnode.component?.exposed as { close?: () => void } | undefined\n exposed?.close?.()\n }\n })\n\n return { close }\n}\n\nconst typedMessage =\n (type: MessageType) =>\n (options: string | Omit<MessageOptions, 'type'> = {}) =>\n createMessage({\n ...normalizeOptions(options),\n type\n })\n\nexport const JhMessage = createMessage as MessageFn\nJhMessage.success = typedMessage('success')\nJhMessage.warning = typedMessage('warning')\nJhMessage.info = typedMessage('info')\nJhMessage.danger = typedMessage('danger')\nJhMessage.closeAll = () => {\n ;[...instances].forEach((instance) => instance.close())\n}\n\nJhMessage.install = (app: App) => {\n app.config.globalProperties.$message = JhMessage\n}\n\nexport default JhMessage\nexport { Message }\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { MessageBoxAction, MessageBoxType } from './types'\n\nexport const messageBoxTypes: MessageBoxType[] = ['success', 'warning', 'info', 'danger']\n\nexport const messageBoxProps = {\n title: {\n type: String,\n default: 'Message'\n },\n message: {\n type: String,\n default: ''\n },\n type: {\n type: String as PropType<MessageBoxType>,\n default: 'info',\n validator: (value: MessageBoxType) => messageBoxTypes.includes(value)\n },\n confirmButtonText: {\n type: String,\n default: 'OK'\n },\n cancelButtonText: {\n type: String,\n default: 'Cancel'\n },\n showCancelButton: Boolean,\n showClose: {\n type: Boolean,\n default: true\n },\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n zIndex: {\n type: Number,\n default: 3000\n },\n beforeClose: Function as PropType<(action: MessageBoxAction, done: () => void) => void>,\n onAction: Function as PropType<(action: MessageBoxAction) => void>,\n onDestroy: Function as PropType<() => void>\n} as const\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"jh-message-box-fade\" @after-leave=\"handleAfterLeave\">\n <div\n v-if=\"visible\"\n class=\"jh-message-box-overlay\"\n :style=\"{ zIndex }\"\n @click=\"handleModalClick\"\n >\n <section\n class=\"jh-message-box\"\n :class=\"`jh-message-box--${type}`\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"title\"\n @click.stop\n >\n <header class=\"jh-message-box__header\">\n <div class=\"jh-message-box__title\">{{ title }}</div>\n <button\n v-if=\"showClose\"\n class=\"jh-message-box__close\"\n type=\"button\"\n aria-label=\"Close message box\"\n @click=\"handleAction('close')\"\n >\n <JhIcon name=\"close\" />\n </button>\n </header>\n <div class=\"jh-message-box__body\">\n <span class=\"jh-message-box__status\" aria-hidden=\"true\" />\n <div class=\"jh-message-box__message\">\n <slot>{{ message }}</slot>\n </div>\n </div>\n <footer class=\"jh-message-box__footer\">\n <JhButton v-if=\"showCancelButton\" @click=\"handleAction('cancel')\">\n {{ cancelButtonText }}\n </JhButton>\n <JhButton type=\"primary\" @click=\"handleAction('confirm')\">\n {{ confirmButtonText }}\n </JhButton>\n </footer>\n </section>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { JhButton } from '../../button'\nimport { JhIcon } from '../../icon'\nimport { messageBoxProps } from './props'\nimport type { MessageBoxAction } from './types'\n\ndefineOptions({\n name: 'JhMessageBox'\n})\n\nconst props = defineProps(messageBoxProps)\nconst visible = ref(false)\nlet actionTriggered = false\n\nconst close = () => {\n visible.value = false\n}\n\nconst handleAction = (action: MessageBoxAction) => {\n if (actionTriggered) return\n const done = () => {\n actionTriggered = true\n props.onAction?.(action)\n close()\n }\n\n if (props.beforeClose) {\n props.beforeClose(action, done)\n return\n }\n done()\n}\n\nconst handleModalClick = () => {\n if (!props.closeOnClickModal) return\n handleAction('close')\n}\n\nconst handleAfterLeave = () => {\n props.onDestroy?.()\n}\n\nonMounted(() => {\n visible.value = true\n})\n\ndefineExpose({\n close: () => handleAction('close')\n})\n</script>\n","import { createVNode, render } from 'vue'\nimport type { App } from 'vue'\nimport MessageBox from './src/message-box.vue'\nimport type {\n MessageBoxAction,\n MessageBoxFn,\n MessageBoxInput,\n MessageBoxOptions\n} from './src/types'\n\nconst normalizeOptions = (options: MessageBoxInput = {}): MessageBoxOptions => {\n if (typeof options === 'string') return { message: options }\n return options\n}\n\nconst createMessageBox = (options: MessageBoxInput = {}) => {\n if (typeof document === 'undefined') {\n return Promise.resolve('close' as MessageBoxAction)\n }\n\n const normalized = normalizeOptions(options)\n const container = document.createElement('div')\n\n return new Promise<MessageBoxAction>((resolve) => {\n const props = {\n title: normalized.title ?? 'Message',\n message: normalized.message ?? '',\n type: normalized.type ?? 'info',\n confirmButtonText: normalized.confirmButtonText ?? 'OK',\n cancelButtonText: normalized.cancelButtonText ?? 'Cancel',\n showCancelButton: normalized.showCancelButton ?? false,\n showClose: normalized.showClose ?? true,\n closeOnClickModal: normalized.closeOnClickModal ?? true,\n zIndex: normalized.zIndex ?? 3000,\n beforeClose: normalized.beforeClose,\n onAction: (action: MessageBoxAction) => {\n resolve(action)\n },\n onDestroy: () => {\n render(null, container)\n container.remove()\n }\n }\n\n const vnode = createVNode(MessageBox, props)\n render(vnode, container)\n document.body.appendChild(container)\n })\n}\n\nexport const JhMessageBox = createMessageBox as MessageBoxFn\nJhMessageBox.alert = (message, title = 'Message', options = {}) =>\n createMessageBox({\n ...options,\n title,\n message,\n showCancelButton: false\n })\nJhMessageBox.confirm = (message, title = 'Message', options = {}) =>\n createMessageBox({\n ...options,\n title,\n message,\n showCancelButton: true\n })\nJhMessageBox.install = (app: App) => {\n app.config.globalProperties.$messageBox = JhMessageBox\n}\n\nexport default JhMessageBox\nexport { MessageBox }\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { NotificationPosition, NotificationType } from './types'\n\nexport const notificationTypes: NotificationType[] = ['success', 'warning', 'info', 'danger']\nexport const notificationPositions: NotificationPosition[] = [\n 'top-right',\n 'top-left',\n 'bottom-right',\n 'bottom-left'\n]\n\nexport const notificationProps = {\n id: {\n type: String,\n required: true\n },\n title: {\n type: String,\n default: ''\n },\n message: {\n type: String,\n default: ''\n },\n type: {\n type: String as PropType<NotificationType>,\n default: 'info',\n validator: (value: NotificationType) => notificationTypes.includes(value)\n },\n duration: {\n type: Number,\n default: 4500\n },\n showClose: {\n type: Boolean,\n default: true\n },\n position: {\n type: String as PropType<NotificationPosition>,\n default: 'top-right',\n validator: (value: NotificationPosition) => notificationPositions.includes(value)\n },\n offset: {\n type: Number,\n default: 20\n },\n zIndex: {\n type: Number,\n default: 3000\n },\n onClose: Function as PropType<() => void>,\n onDestroy: Function as PropType<() => void>\n} as const\n","<template>\n <Transition :name=\"transitionName\" @after-leave=\"handleAfterLeave\">\n <section\n v-show=\"visible\"\n class=\"jh-notification\"\n :class=\"[`jh-notification--${type}`, `jh-notification--${position}`]\"\n role=\"alert\"\n :style=\"notificationStyle\"\n @mouseenter=\"clearTimer\"\n @mouseleave=\"startTimer\"\n >\n <span class=\"jh-notification__status\" aria-hidden=\"true\" />\n <div class=\"jh-notification__content\">\n <div v-if=\"title\" class=\"jh-notification__title\">{{ title }}</div>\n <div v-if=\"message\" class=\"jh-notification__message\">{{ message }}</div>\n </div>\n <button\n v-if=\"showClose\"\n class=\"jh-notification__close\"\n type=\"button\"\n aria-label=\"Close notification\"\n @click=\"close\"\n >\n <JhIcon name=\"close\" />\n </button>\n </section>\n </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { notificationProps } from './props'\n\ndefineOptions({\n name: 'JhNotification'\n})\n\nconst props = defineProps(notificationProps)\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | undefined\n\nconst isRight = computed(() => props.position.endsWith('right'))\nconst isBottom = computed(() => props.position.startsWith('bottom'))\nconst transitionName = computed(() =>\n isRight.value ? 'jh-notification-slide-right' : 'jh-notification-slide-left'\n)\nconst notificationStyle = computed(() => ({\n zIndex: props.zIndex,\n [isRight.value ? 'right' : 'left']: '20px',\n [isBottom.value ? 'bottom' : 'top']: `${props.offset}px`\n}))\n\nconst clearTimer = () => {\n if (!timer) return\n clearTimeout(timer)\n timer = undefined\n}\n\nconst close = () => {\n if (!visible.value) return\n visible.value = false\n props.onClose?.()\n}\n\nconst startTimer = () => {\n if (props.duration <= 0) return\n clearTimer()\n timer = setTimeout(close, props.duration)\n}\n\nconst handleAfterLeave = () => {\n props.onDestroy?.()\n}\n\nonMounted(() => {\n visible.value = true\n startTimer()\n})\n\nonBeforeUnmount(() => {\n clearTimer()\n})\n\ndefineExpose({\n close\n})\n</script>\n","import { createVNode, render } from 'vue'\nimport type { App } from 'vue'\nimport Notification from './src/notification.vue'\nimport type {\n NotificationFn,\n NotificationHandler,\n NotificationInstance,\n NotificationOptions,\n NotificationPosition,\n NotificationType\n} from './src/types'\n\nconst instances: NotificationInstance[] = []\nlet seed = 1\n\nconst normalizeOptions = (options: string | NotificationOptions = {}): NotificationOptions => {\n if (typeof options === 'string') return { message: options }\n return options\n}\n\nconst getOffset = (position: NotificationPosition, baseOffset: number) =>\n baseOffset + instances.filter((item) => item.position === position).length * 92\n\nconst createNotification = (options: string | NotificationOptions = {}): NotificationHandler => {\n if (typeof document === 'undefined') {\n return { close: () => undefined }\n }\n\n const normalized = normalizeOptions(options)\n const position = normalized.position ?? 'top-right'\n const id = `jh-notification-${seed++}`\n const container = document.createElement('div')\n\n const close = () => {\n instances.find((item) => item.id === id)?.close()\n }\n\n const props = {\n id,\n title: normalized.title ?? '',\n message: normalized.message ?? '',\n type: normalized.type ?? 'info',\n duration: normalized.duration ?? 4500,\n showClose: normalized.showClose ?? true,\n position,\n offset: getOffset(position, normalized.offset ?? 20),\n zIndex: normalized.zIndex ?? 3000,\n onClose: normalized.onClose,\n onDestroy: () => {\n const index = instances.findIndex((item) => item.id === id)\n if (index > -1) instances.splice(index, 1)\n render(null, container)\n container.remove()\n }\n }\n\n const vnode = createVNode(Notification, props)\n render(vnode, container)\n document.body.appendChild(container)\n\n instances.push({\n id,\n position,\n close: () => {\n const exposed = vnode.component?.exposed as { close?: () => void } | undefined\n exposed?.close?.()\n }\n })\n\n return { close }\n}\n\nconst typedNotification =\n (type: NotificationType) =>\n (options: string | Omit<NotificationOptions, 'type'> = {}) =>\n createNotification({\n ...normalizeOptions(options),\n type\n })\n\nexport const JhNotification = createNotification as NotificationFn\nJhNotification.success = typedNotification('success')\nJhNotification.warning = typedNotification('warning')\nJhNotification.info = typedNotification('info')\nJhNotification.danger = typedNotification('danger')\nJhNotification.closeAll = () => {\n ;[...instances].forEach((instance) => instance.close())\n}\nJhNotification.install = (app: App) => {\n app.config.globalProperties.$notify = JhNotification\n}\n\nexport default JhNotification\nexport { Notification }\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes } from 'vue'\nimport type { PaginationChangePayload } from './types'\n\nexport const paginationProps = {\n currentPage: {\n type: Number,\n default: 1\n },\n pageSize: {\n type: Number,\n default: 10\n },\n total: {\n type: Number,\n default: 0\n },\n disabled: Boolean\n} as const\n\nexport const paginationEmits = {\n 'update:currentPage': (_page: number) => true,\n 'update:pageSize': (_pageSize: number) => true,\n 'page-change': (_payload: PaginationChangePayload) => true\n}\n\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\n","<template>\n <nav class=\"jh-pagination\" :class=\"{ 'is-disabled': disabled }\" aria-label=\"Pagination\">\n <button\n class=\"jh-pagination__button\"\n type=\"button\"\n :disabled=\"disabled || safeCurrentPage <= 1\"\n aria-label=\"Previous page\"\n @click=\"changePage(safeCurrentPage - 1)\"\n >\n <JhIcon name=\"arrow-left\" />\n </button>\n\n <button\n v-for=\"page in pages\"\n :key=\"page\"\n class=\"jh-pagination__pager\"\n :class=\"{ 'is-active': page === safeCurrentPage }\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-current=\"page === safeCurrentPage ? 'page' : undefined\"\n @click=\"changePage(page)\"\n >\n {{ page }}\n </button>\n\n <button\n class=\"jh-pagination__button\"\n type=\"button\"\n :disabled=\"disabled || safeCurrentPage >= pageCount\"\n aria-label=\"Next page\"\n @click=\"changePage(safeCurrentPage + 1)\"\n >\n <JhIcon name=\"arrow-right\" />\n </button>\n\n <span class=\"jh-pagination__total\">Total {{ total }}</span>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { paginationEmits, paginationProps } from './props'\n\ndefineOptions({\n name: 'JhPagination'\n})\n\nconst props = defineProps(paginationProps)\nconst emit = defineEmits(paginationEmits)\n\nconst normalizedPageSize = computed(() => Math.max(1, props.pageSize || 1))\nconst pageCount = computed(() => Math.max(1, Math.ceil(props.total / normalizedPageSize.value)))\nconst safeCurrentPage = computed(() => clampPage(props.currentPage))\n\nconst pages = computed(() => {\n const count = pageCount.value\n const current = safeCurrentPage.value\n const maxPagerCount = 7\n\n if (count <= maxPagerCount) {\n return Array.from({ length: count }, (_, index) => index + 1)\n }\n\n let start = Math.max(1, current - 3)\n const end = Math.min(count, start + maxPagerCount - 1)\n start = Math.max(1, end - maxPagerCount + 1)\n\n return Array.from({ length: end - start + 1 }, (_, index) => start + index)\n})\n\nfunction clampPage(page: number) {\n if (!Number.isFinite(page)) return 1\n return Math.min(Math.max(1, Math.trunc(page)), pageCount.value)\n}\n\nfunction emitPageChange(page: number, pageSize = normalizedPageSize.value) {\n emit('update:currentPage', page)\n emit('page-change', {\n currentPage: page,\n pageSize\n })\n}\n\nfunction changePage(page: number) {\n if (props.disabled) return\n\n const nextPage = clampPage(page)\n if (nextPage === safeCurrentPage.value) return\n\n emitPageChange(nextPage)\n}\n\nwatch(\n () => props.pageSize,\n (pageSize, oldPageSize) => {\n const normalized = Math.max(1, pageSize || 1)\n if (normalized !== pageSize) {\n emit('update:pageSize', normalized)\n }\n\n if (oldPageSize === undefined) return\n\n const nextPage = clampPage(props.currentPage)\n if (nextPage !== props.currentPage) {\n emitPageChange(nextPage, normalized)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.currentPage,\n (page) => {\n const nextPage = clampPage(page)\n if (nextPage !== page) {\n emitPageChange(nextPage)\n }\n },\n { immediate: true }\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Pagination from './src/pagination.vue'\n\nexport const JhPagination = withInstall(Pagination)\nexport default JhPagination\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { RadioValue } from './types'\n\nexport const radioProps = {\n modelValue: [String, Number, Boolean] as PropType<RadioValue>,\n value: {\n type: [String, Number, Boolean] as PropType<RadioValue>,\n required: true\n },\n label: String,\n disabled: Boolean\n} as const\n\nexport const radioGroupProps = {\n modelValue: [String, Number, Boolean] as PropType<RadioValue>,\n disabled: Boolean\n} as const\n\nexport const radioEmits = {\n 'update:modelValue': (_value: RadioValue) => true,\n change: (_value: RadioValue) => true\n}\n\nexport const radioGroupEmits = {\n 'update:modelValue': (_value: RadioValue) => true,\n change: (_value: RadioValue) => true\n}\n\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\nexport type RadioGroupProps = ExtractPropTypes<typeof radioGroupProps>\n","import type { InjectionKey } from 'vue'\n\nexport type RadioValue = string | number | boolean\n\nexport interface RadioGroupContext {\n modelValue: () => RadioValue | undefined\n disabled: () => boolean\n changeValue: (value: RadioValue) => void\n}\n\nexport const radioGroupKey: InjectionKey<RadioGroupContext> = Symbol('JhRadioGroup')\n","<template>\n <label class=\"jh-radio\" :class=\"{ 'is-checked': checked, 'is-disabled': mergedDisabled }\">\n <span class=\"jh-radio__input\">\n <input\n class=\"jh-radio__original\"\n type=\"radio\"\n :checked=\"checked\"\n :disabled=\"mergedDisabled\"\n @change=\"handleChange\"\n />\n <span class=\"jh-radio__inner\" />\n </span>\n <span v-if=\"$slots.default || label\" class=\"jh-radio__label\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { radioEmits, radioProps } from './props'\nimport { radioGroupKey } from './types'\n\ndefineOptions({\n name: 'JhRadio'\n})\n\nconst props = defineProps(radioProps)\nconst emit = defineEmits(radioEmits)\nconst group = inject(radioGroupKey, undefined)\n\nconst mergedDisabled = computed(() => props.disabled || Boolean(group?.disabled()))\nconst checked = computed(() => (group ? group.modelValue() === props.value : props.modelValue === props.value))\n\nconst handleChange = () => {\n if (mergedDisabled.value) return\n\n if (group) {\n group.changeValue(props.value)\n return\n }\n\n emit('update:modelValue', props.value)\n emit('change', props.value)\n}\n</script>\n","<template>\n <div class=\"jh-radio-group\" :class=\"{ 'is-disabled': disabled }\" role=\"radiogroup\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue'\nimport { radioGroupEmits, radioGroupProps } from './props'\nimport { radioGroupKey, type RadioValue } from './types'\n\ndefineOptions({\n name: 'JhRadioGroup'\n})\n\nconst props = defineProps(radioGroupProps)\nconst emit = defineEmits(radioGroupEmits)\n\nconst changeValue = (value: RadioValue) => {\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nprovide(radioGroupKey, {\n modelValue: () => props.modelValue,\n disabled: () => props.disabled,\n changeValue\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Radio from './src/radio.vue'\nimport RadioGroup from './src/radio-group.vue'\n\nexport const JhRadio = withInstall(Radio)\nexport const JhRadioGroup = withInstall(RadioGroup)\nexport default JhRadio\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { ScrollbarScrollPayload } from './types'\n\nexport const scrollbarProps = {\n height: [String, Number] as PropType<string | number>,\n maxHeight: [String, Number] as PropType<string | number>,\n always: Boolean,\n native: Boolean,\n wrapClass: String,\n viewClass: String\n} as const\n\nexport const scrollbarEmits = {\n scroll: (_payload: ScrollbarScrollPayload) => true\n}\n\nexport type ScrollbarProps = ExtractPropTypes<typeof scrollbarProps>\n","<template>\n <div class=\"jh-scrollbar\" :class=\"{ 'is-always': always, 'is-native': native }\">\n <div\n ref=\"wrapRef\"\n class=\"jh-scrollbar__wrap\"\n :class=\"wrapClass\"\n :style=\"wrapStyle\"\n @scroll=\"handleScroll\"\n >\n <div class=\"jh-scrollbar__view\" :class=\"viewClass\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { scrollbarEmits, scrollbarProps } from './props'\n\ndefineOptions({\n name: 'JhScrollbar'\n})\n\nconst props = defineProps(scrollbarProps)\nconst emit = defineEmits(scrollbarEmits)\nconst wrapRef = ref<HTMLDivElement>()\n\nconst normalizeSize = (value?: string | number) => {\n if (typeof value === 'number') return `${value}px`\n return value\n}\n\nconst wrapStyle = computed(() => ({\n height: normalizeSize(props.height),\n maxHeight: normalizeSize(props.maxHeight)\n}))\n\nconst handleScroll = () => {\n if (!wrapRef.value) return\n emit('scroll', {\n scrollTop: wrapRef.value.scrollTop,\n scrollLeft: wrapRef.value.scrollLeft\n })\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Scrollbar from './src/scrollbar.vue'\n\nexport const JhScrollbar = withInstall(Scrollbar)\nexport default JhScrollbar\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { SelectOption, SelectValue } from './types'\n\nexport const selectProps = {\n modelValue: [String, Number] as PropType<SelectValue>,\n options: {\n type: Array as PropType<SelectOption[]>,\n default: () => []\n },\n placeholder: {\n type: String,\n default: 'Please select'\n },\n disabled: Boolean,\n clearable: Boolean\n} as const\n\nexport const selectEmits = {\n 'update:modelValue': (_value: SelectValue | undefined) => true,\n change: (_value: SelectValue | undefined, _option?: SelectOption) => true,\n 'visible-change': (_visible: boolean) => true,\n clear: () => true\n}\n\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\n","<template>\n <div ref=\"selectRef\" class=\"jh-select\" :class=\"{ 'is-disabled': disabled, 'is-visible': visible }\">\n <button\n class=\"jh-select__trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-expanded=\"visible\"\n @click=\"toggleVisible\"\n >\n <span class=\"jh-select__label\" :class=\"{ 'is-placeholder': !selectedOption }\">\n {{ selectedOption?.label || placeholder }}\n </span>\n <button v-if=\"showClear\" class=\"jh-select__clear\" type=\"button\" @click.stop=\"handleClear\">\n <JhIcon name=\"close\" />\n </button>\n <JhIcon v-else class=\"jh-select__arrow\" name=\"arrow-right\" />\n </button>\n\n <Transition name=\"jh-select-fade\">\n <div v-if=\"visible\" class=\"jh-select__menu\">\n <button\n v-for=\"option in options\"\n :key=\"option.value\"\n class=\"jh-select__option\"\n :class=\"{ 'is-active': option.value === modelValue, 'is-disabled': option.disabled }\"\n type=\"button\"\n :disabled=\"option.disabled\"\n @click=\"handleOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { selectEmits, selectProps } from './props'\nimport type { SelectOption } from './types'\n\ndefineOptions({\n name: 'JhSelect'\n})\n\nconst props = defineProps(selectProps)\nconst emit = defineEmits(selectEmits)\nconst visible = ref(false)\nconst selectRef = ref<HTMLElement>()\n\nconst selectedOption = computed(() => props.options.find((option) => option.value === props.modelValue))\nconst showClear = computed(() => props.clearable && !props.disabled && props.modelValue !== undefined)\n\nconst setVisible = (nextVisible: boolean) => {\n if (props.disabled) return\n if (visible.value === nextVisible) return\n visible.value = nextVisible\n emit('visible-change', nextVisible)\n}\n\nconst toggleVisible = () => setVisible(!visible.value)\nconst close = () => setVisible(false)\n\nconst handleOptionClick = (option: SelectOption) => {\n if (option.disabled) return\n emit('update:modelValue', option.value)\n emit('change', option.value, option)\n close()\n}\n\nconst handleClear = () => {\n emit('update:modelValue', undefined)\n emit('change', undefined)\n emit('clear')\n close()\n}\n\nconst handleDocumentClick = (event: MouseEvent) => {\n if (!visible.value) return\n if (selectRef.value?.contains(event.target as Node)) return\n close()\n}\n\nwatch(\n () => visible.value,\n (nextVisible) => {\n if (nextVisible) document.addEventListener('click', handleDocumentClick)\n else document.removeEventListener('click', handleDocumentClick)\n }\n)\n\nonBeforeUnmount(() => {\n document.removeEventListener('click', handleDocumentClick)\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Select from './src/select.vue'\n\nexport const JhSelect = withInstall(Select)\nexport default JhSelect\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { TableColumn, TableRow, TableRowKeyGetter, TableSelectable } from './types'\n\nexport const tableProps = {\n data: {\n type: Array as PropType<TableRow[]>,\n default: () => []\n },\n columns: {\n type: Array as PropType<TableColumn[]>,\n default: () => []\n },\n loading: Boolean,\n border: Boolean,\n stripe: Boolean,\n selection: Boolean,\n rowKey: {\n type: [String, Function] as PropType<TableRowKeyGetter>,\n default: undefined\n },\n selectable: Function as PropType<TableSelectable>,\n emptyText: {\n type: String,\n default: 'No Data'\n }\n} as const\n\nexport const tableEmits = {\n select: (_selection: TableRow[], _row: TableRow) => true,\n 'select-all': (_selection: TableRow[]) => true,\n 'selection-change': (_selection: TableRow[]) => true\n}\n\nexport type TableProps = ExtractPropTypes<typeof tableProps>\n","<template>\n <div class=\"jh-table\" :class=\"tableClasses\">\n <div class=\"jh-table__wrapper\">\n <table class=\"jh-table__table\">\n <colgroup>\n <col v-if=\"selection\" class=\"jh-table__selection-col\" />\n <col v-for=\"column in columns\" :key=\"column.prop\" :style=\"getColumnStyle(column)\" />\n </colgroup>\n <thead class=\"jh-table__header\">\n <tr>\n <th v-if=\"selection\" class=\"jh-table__cell jh-table__selection-cell\">\n <input\n ref=\"selectAllRef\"\n class=\"jh-table__selection\"\n type=\"checkbox\"\n aria-label=\"Select all rows\"\n :checked=\"isAllSelected\"\n :aria-checked=\"isIndeterminate ? 'mixed' : isAllSelected\"\n :disabled=\"!selectableRows.length\"\n @change=\"toggleSelectAll\"\n />\n </th>\n <th\n v-for=\"column in columns\"\n :key=\"column.prop\"\n class=\"jh-table__cell\"\n :class=\"getAlignClass(column)\"\n >\n {{ column.label }}\n </th>\n </tr>\n </thead>\n <tbody class=\"jh-table__body\">\n <tr v-for=\"(row, rowIndex) in data\" :key=\"rowIndex\" class=\"jh-table__row\">\n <td v-if=\"selection\" class=\"jh-table__cell jh-table__selection-cell\">\n <input\n class=\"jh-table__selection\"\n type=\"checkbox\"\n aria-label=\"Select row\"\n :checked=\"isRowSelected(row)\"\n :disabled=\"!isRowSelectable(row, rowIndex)\"\n @change=\"toggleRowSelection(row, rowIndex)\"\n />\n </td>\n <td\n v-for=\"column in columns\"\n :key=\"column.prop\"\n class=\"jh-table__cell\"\n :class=\"getAlignClass(column)\"\n >\n <slot\n v-if=\"column.slot && $slots[column.slot]\"\n :name=\"column.slot\"\n :row=\"row\"\n :column=\"column\"\n :index=\"rowIndex\"\n :value=\"row[column.prop]\"\n />\n <slot\n v-else-if=\"$slots.cell\"\n name=\"cell\"\n :row=\"row\"\n :column=\"column\"\n :index=\"rowIndex\"\n :value=\"row[column.prop]\"\n />\n <span v-else>{{ formatCellValue(row[column.prop]) }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-if=\"!data.length && !loading\" class=\"jh-table__empty\">\n <slot name=\"empty\">{{ emptyText }}</slot>\n </div>\n\n <div v-if=\"loading\" class=\"jh-table__loading\" aria-live=\"polite\">\n <span class=\"jh-table__spinner\" aria-hidden=\"true\" />\n <span>Loading</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, watchEffect } from 'vue'\nimport { tableEmits, tableProps } from './props'\nimport type { TableColumn, TableRow, TableRowKey } from './types'\n\ndefineOptions({\n name: 'JhTable'\n})\n\nconst props = defineProps(tableProps)\nconst emit = defineEmits(tableEmits)\nconst selectedKeys = ref(new Set<TableRowKey>())\nconst selectAllRef = ref<HTMLInputElement>()\n\nconst tableClasses = computed(() => ({\n 'is-border': props.border,\n 'is-stripe': props.stripe,\n 'is-loading': props.loading,\n 'is-selection': props.selection\n}))\n\nconst getRowKey = (row: TableRow, index: number): TableRowKey => {\n if (typeof props.rowKey === 'function') return props.rowKey(row)\n if (typeof props.rowKey === 'string') {\n const value = row[props.rowKey]\n if (typeof value === 'string' || typeof value === 'number') return value\n }\n\n return index\n}\n\nconst isRowSelectable = (row: TableRow, index: number) =>\n props.selectable ? props.selectable(row, index) : true\n\nconst selectableRows = computed(() =>\n props.data\n .map((row, index) => ({ row, index, key: getRowKey(row, index) }))\n .filter(({ row, index }) => isRowSelectable(row, index))\n)\n\nconst selectedRows = computed(() =>\n props.data.filter((row, index) => selectedKeys.value.has(getRowKey(row, index)))\n)\n\nconst isAllSelected = computed(\n () =>\n Boolean(selectableRows.value.length) &&\n selectableRows.value.every(({ key }) => selectedKeys.value.has(key))\n)\n\nconst isIndeterminate = computed(\n () =>\n selectableRows.value.some(({ key }) => selectedKeys.value.has(key)) && !isAllSelected.value\n)\n\nwatchEffect(() => {\n if (selectAllRef.value) {\n selectAllRef.value.indeterminate = isIndeterminate.value\n }\n})\n\nwatch(\n () => [props.data, props.rowKey] as const,\n () => {\n const currentKeys = new Set(props.data.map((row, index) => getRowKey(row, index)))\n selectedKeys.value = new Set([...selectedKeys.value].filter((key) => currentKeys.has(key)))\n },\n { deep: true }\n)\n\nconst getAlignClass = (column: TableColumn) =>\n column.align && column.align !== 'left' ? `is-${column.align}` : ''\n\nconst getColumnStyle = (column: TableColumn) => {\n if (!column.width) return undefined\n const width = typeof column.width === 'number' ? `${column.width}px` : column.width\n return { width }\n}\n\nconst formatCellValue = (value: unknown) => {\n if (value === null || value === undefined) return ''\n return String(value)\n}\n\nconst emitSelectionChange = () => {\n emit('selection-change', selectedRows.value)\n}\n\nconst isRowSelected = (row: TableRow) => {\n const index = props.data.indexOf(row)\n return selectedKeys.value.has(getRowKey(row, index))\n}\n\nconst toggleRowSelection = (row: TableRow, index: number) => {\n if (!isRowSelectable(row, index)) return\n\n const nextSelectedKeys = new Set(selectedKeys.value)\n const key = getRowKey(row, index)\n\n if (nextSelectedKeys.has(key)) {\n nextSelectedKeys.delete(key)\n } else {\n nextSelectedKeys.add(key)\n }\n\n selectedKeys.value = nextSelectedKeys\n emit('select', selectedRows.value, row)\n emitSelectionChange()\n}\n\nconst toggleSelectAll = () => {\n const nextSelectedKeys = new Set(selectedKeys.value)\n\n if (isAllSelected.value) {\n selectableRows.value.forEach(({ key }) => nextSelectedKeys.delete(key))\n } else {\n selectableRows.value.forEach(({ key }) => nextSelectedKeys.add(key))\n }\n\n selectedKeys.value = nextSelectedKeys\n emit('select-all', selectedRows.value)\n emitSelectionChange()\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Table from './src/table.vue'\n\nexport const JhTable = withInstall(Table)\nexport default JhTable\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { InjectionKey, Ref } from 'vue'\n\nexport type TabName = string | number\n\nexport interface TabsPaneContext {\n uid: symbol\n name: TabName\n label: string\n disabled: boolean\n}\n\nexport interface TabsContext {\n activeName: Ref<TabName>\n registerPane: (pane: TabsPaneContext) => void\n unregisterPane: (pane: TabsPaneContext) => void\n}\n\nexport const tabsContextKey: InjectionKey<TabsContext> = Symbol('tabsContextKey')\n","import type { PropType } from 'vue'\nimport type { TabName } from './types'\n\nexport const tabsProps = {\n modelValue: {\n type: [String, Number] as PropType<TabName>,\n default: ''\n }\n} as const\n\nexport const tabsEmits = {\n 'update:modelValue': (value: TabName) => typeof value === 'string' || typeof value === 'number',\n change: (value: TabName) => typeof value === 'string' || typeof value === 'number'\n}\n\nexport const tabPaneProps = {\n label: {\n type: String,\n default: ''\n },\n name: {\n type: [String, Number] as PropType<TabName>,\n required: true\n },\n disabled: Boolean\n} as const\n","<template>\n <div class=\"jh-tabs\">\n <div class=\"jh-tabs__nav\" role=\"tablist\">\n <button\n v-for=\"pane in panes\"\n :key=\"pane.name\"\n class=\"jh-tabs__tab\"\n :class=\"{ 'is-active': pane.name === activeName, 'is-disabled': pane.disabled }\"\n type=\"button\"\n role=\"tab\"\n :disabled=\"pane.disabled\"\n :aria-selected=\"pane.name === activeName\"\n @click=\"handleTabClick(pane)\"\n >\n {{ pane.label }}\n </button>\n </div>\n <div class=\"jh-tabs__content\">\n <slot />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\nimport { tabsContextKey, type TabName, type TabsPaneContext } from './types'\nimport { tabsEmits, tabsProps } from './props'\n\ndefineOptions({\n name: 'JhTabs'\n})\n\nconst props = defineProps(tabsProps)\nconst emit = defineEmits(tabsEmits)\nconst panes = ref<TabsPaneContext[]>([])\nconst innerActiveName = ref<TabName>(props.modelValue)\nconst activeName = computed(() => innerActiveName.value || panes.value[0]?.name || '')\n\nconst setActiveName = (name: TabName) => {\n innerActiveName.value = name\n emit('update:modelValue', name)\n emit('change', name)\n}\n\nconst handleTabClick = (pane: TabsPaneContext) => {\n if (pane.disabled) return\n if (pane.name === activeName.value) return\n setActiveName(pane.name)\n}\n\nconst registerPane = (pane: TabsPaneContext) => {\n panes.value.push(pane)\n if (!innerActiveName.value) innerActiveName.value = pane.name\n}\n\nconst unregisterPane = (pane: TabsPaneContext) => {\n panes.value = panes.value.filter((item) => item.uid !== pane.uid)\n}\n\nprovide(tabsContextKey, {\n activeName,\n registerPane,\n unregisterPane\n})\n\nwatch(\n () => props.modelValue,\n (value) => {\n innerActiveName.value = value\n }\n)\n</script>\n","<template>\n <div v-show=\"active\" class=\"jh-tab-pane\" role=\"tabpanel\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, watch } from 'vue'\nimport { tabsContextKey, type TabsPaneContext } from './types'\nimport { tabPaneProps } from './props'\n\ndefineOptions({\n name: 'JhTabPane'\n})\n\nconst props = defineProps(tabPaneProps)\nconst tabs = inject(tabsContextKey, undefined)\nconst uid = Symbol('tabPane')\nconst pane = computed<TabsPaneContext>(() => ({\n uid,\n name: props.name,\n label: props.label || String(props.name),\n disabled: props.disabled\n}))\nconst active = computed(() => tabs?.activeName.value === props.name)\n\nonMounted(() => {\n tabs?.registerPane(pane.value)\n})\n\nonBeforeUnmount(() => {\n tabs?.unregisterPane(pane.value)\n})\n\nwatch(\n () => [props.label, props.name, props.disabled],\n () => {\n tabs?.unregisterPane(pane.value)\n tabs?.registerPane(pane.value)\n }\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Tabs from './src/tabs.vue'\nimport TabPane from './src/tab-pane.vue'\n\nexport const JhTabs = withInstall(Tabs)\nexport const JhTabPane = withInstall(TabPane)\nexport default JhTabs\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { TextSize, TextTag, TextType } from './types'\n\nexport const textTypes: TextType[] = ['default', 'primary', 'success', 'warning', 'danger', 'info']\nexport const textSizes: TextSize[] = ['small', 'default', 'large']\n\nexport const textProps = {\n type: {\n type: String as PropType<TextType>,\n default: 'default',\n validator: (value: TextType) => textTypes.includes(value)\n },\n size: {\n type: String as PropType<TextSize>,\n default: 'default',\n validator: (value: TextSize) => textSizes.includes(value)\n },\n tag: {\n type: String as PropType<TextTag>,\n default: 'span'\n },\n truncated: Boolean,\n lineClamp: Number\n} as const\n\nexport type TextProps = ExtractPropTypes<typeof textProps>\n","<template>\n <component :is=\"tag\" class=\"jh-text\" :class=\"textClasses\" :style=\"textStyle\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { textProps } from './props'\n\ndefineOptions({\n name: 'JhText'\n})\n\nconst props = defineProps(textProps)\n\nconst textClasses = computed(() => [\n `jh-text--${props.type}`,\n props.size !== 'default' ? `jh-text--${props.size}` : '',\n {\n 'is-truncated': props.truncated,\n 'is-line-clamp': Boolean(props.lineClamp)\n }\n])\n\nconst textStyle = computed(() =>\n props.lineClamp\n ? {\n '--jh-text-line-clamp': props.lineClamp\n }\n : undefined\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Text from './src/text.vue'\n\nexport const JhText = withInstall(Text)\nexport default JhText\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { TimeSelectOption } from './types'\n\nexport const timeSelectProps = {\n modelValue: {\n type: String,\n default: ''\n },\n start: {\n type: String,\n default: '09:00'\n },\n end: {\n type: String,\n default: '18:00'\n },\n step: {\n type: String,\n default: '00:30'\n },\n placeholder: {\n type: String,\n default: 'Select time'\n },\n disabled: Boolean,\n clearable: Boolean\n} as const\n\nexport const timeSelectEmits = {\n 'update:modelValue': (value: string) => typeof value === 'string',\n change: (value: string, option?: TimeSelectOption) => typeof value === 'string' && (!option || Boolean(option))\n}\n","<template>\n <div\n ref=\"timeSelectRef\"\n class=\"jh-time-select\"\n :class=\"{ 'is-disabled': disabled, 'is-visible': visible }\"\n >\n <button\n class=\"jh-time-select__trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-expanded=\"visible\"\n @click=\"toggleVisible\"\n >\n <span class=\"jh-time-select__label\" :class=\"{ 'is-placeholder': !modelValue }\">\n {{ modelValue || placeholder }}\n </span>\n <button v-if=\"showClear\" class=\"jh-time-select__clear\" type=\"button\" @click.stop=\"handleClear\">\n <JhIcon name=\"close\" />\n </button>\n <JhIcon v-else class=\"jh-time-select__arrow\" name=\"arrow-right\" />\n </button>\n\n <Transition name=\"jh-time-select-fade\">\n <div v-if=\"visible\" class=\"jh-time-select__menu\">\n <button\n v-for=\"option in options\"\n :key=\"option.value\"\n class=\"jh-time-select__option\"\n :class=\"{ 'is-active': option.value === modelValue }\"\n type=\"button\"\n @click=\"handleOptionClick(option)\"\n >\n {{ option.label }}\n </button>\n <div v-if=\"options.length === 0\" class=\"jh-time-select__empty\">No data</div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { timeSelectEmits, timeSelectProps } from './props'\nimport type { TimeSelectOption } from './types'\n\ndefineOptions({\n name: 'JhTimeSelect'\n})\n\nconst props = defineProps(timeSelectProps)\nconst emit = defineEmits(timeSelectEmits)\nconst visible = ref(false)\nconst timeSelectRef = ref<HTMLElement>()\n\nconst parseTime = (value: string) => {\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(value)\n if (!match) return Number.NaN\n const hours = Number(match[1])\n const minutes = Number(match[2])\n if (hours > 23 || minutes > 59) return Number.NaN\n return hours * 60 + minutes\n}\n\nconst formatTime = (minutes: number) => {\n const hours = Math.floor(minutes / 60)\n const restMinutes = minutes % 60\n return `${String(hours).padStart(2, '0')}:${String(restMinutes).padStart(2, '0')}`\n}\n\nconst options = computed<TimeSelectOption[]>(() => {\n const start = parseTime(props.start)\n const end = parseTime(props.end)\n const step = parseTime(props.step)\n\n if (!Number.isFinite(start) || !Number.isFinite(end) || !Number.isFinite(step)) return []\n if (step <= 0 || start > end) return []\n\n const result: TimeSelectOption[] = []\n for (let current = start; current <= end; current += step) {\n const value = formatTime(current)\n result.push({ label: value, value })\n }\n return result\n})\n\nconst showClear = computed(() => props.clearable && !props.disabled && Boolean(props.modelValue))\n\nconst setVisible = (nextVisible: boolean) => {\n if (props.disabled) return\n visible.value = nextVisible\n}\n\nconst toggleVisible = () => setVisible(!visible.value)\nconst close = () => setVisible(false)\n\nconst handleOptionClick = (option: TimeSelectOption) => {\n emit('update:modelValue', option.value)\n emit('change', option.value, option)\n close()\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('change', '')\n close()\n}\n\nconst handleDocumentClick = (event: MouseEvent) => {\n if (!visible.value) return\n if (timeSelectRef.value?.contains(event.target as Node)) return\n close()\n}\n\nwatch(\n () => visible.value,\n (nextVisible) => {\n if (nextVisible) document.addEventListener('click', handleDocumentClick)\n else document.removeEventListener('click', handleDocumentClick)\n }\n)\n\nonBeforeUnmount(() => {\n document.removeEventListener('click', handleDocumentClick)\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport TimeSelect from './src/time-select.vue'\n\nexport const JhTimeSelect = withInstall(TimeSelect)\nexport default JhTimeSelect\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { TreeFieldNames, TreeKey, TreeNodeData } from './types'\n\nexport const treeProps = {\n data: {\n type: Array as PropType<TreeNodeData[]>,\n default: () => []\n },\n nodeKey: {\n type: String,\n default: 'value'\n },\n fieldNames: {\n type: Object as PropType<TreeFieldNames>,\n default: () => ({})\n },\n defaultExpandedKeys: {\n type: Array as PropType<TreeKey[]>,\n default: () => []\n },\n checkedKeys: {\n type: Array as PropType<TreeKey[]>,\n default: () => []\n },\n showCheckbox: Boolean,\n checkStrictly: Boolean,\n expandOnClickNode: {\n type: Boolean,\n default: true\n },\n emptyText: {\n type: String,\n default: 'No data'\n }\n} as const\n\nexport const treeEmits = {\n 'update:checkedKeys': (keys: TreeKey[]) => Array.isArray(keys),\n 'node-click': (node: TreeNodeData, key: TreeKey) => Boolean(node) && key !== undefined,\n check: (keys: TreeKey[], node: TreeNodeData) => Array.isArray(keys) && Boolean(node)\n}\n","<template>\n <div class=\"jh-tree\">\n <div v-if=\"visibleNodes.length === 0\" class=\"jh-tree__empty\">{{ emptyText }}</div>\n <div\n v-for=\"item in visibleNodes\"\n :key=\"item.key\"\n class=\"jh-tree__node\"\n :class=\"{ 'is-disabled': item.disabled, 'is-expanded': isExpanded(item.key) }\"\n :style=\"{ '--jh-tree-node-level': item.level }\"\n >\n <button\n class=\"jh-tree__expand\"\n type=\"button\"\n :disabled=\"!item.hasChildren\"\n :aria-label=\"isExpanded(item.key) ? 'Collapse node' : 'Expand node'\"\n @click=\"toggleExpand(item)\"\n >\n <JhIcon v-if=\"item.hasChildren\" name=\"arrow-right\" />\n </button>\n <input\n v-if=\"showCheckbox\"\n class=\"jh-tree__checkbox\"\n type=\"checkbox\"\n :checked=\"isChecked(item.key)\"\n :disabled=\"item.disabled\"\n @change=\"handleCheck(item)\"\n />\n <button\n class=\"jh-tree__label\"\n type=\"button\"\n :disabled=\"item.disabled\"\n @click=\"handleNodeClick(item)\"\n >\n <slot name=\"node\" :node=\"item.node\" :data=\"item.node\" :label=\"item.label\">\n {{ item.label }}\n </slot>\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { treeEmits, treeProps } from './props'\nimport type { TreeKey, TreeNodeData, TreeVisibleNode } from './types'\n\ndefineOptions({\n name: 'JhTree'\n})\n\nconst props = defineProps(treeProps)\nconst emit = defineEmits(treeEmits)\nconst expandedKeys = ref<TreeKey[]>([...props.defaultExpandedKeys])\n\nconst labelKey = computed(() => props.fieldNames.label || 'label')\nconst valueKey = computed(() => props.fieldNames.value || props.nodeKey)\nconst childrenKey = computed(() => props.fieldNames.children || 'children')\nconst disabledKey = computed(() => props.fieldNames.disabled || 'disabled')\n\nconst getLabel = (node: TreeNodeData) => String(node[labelKey.value] ?? '')\nconst getKey = (node: TreeNodeData) => node[valueKey.value] as TreeKey\nconst getChildren = (node: TreeNodeData) =>\n (node[childrenKey.value] as TreeNodeData[] | undefined) || []\nconst isDisabled = (node: TreeNodeData) => Boolean(node[disabledKey.value])\nconst hasChildren = (node: TreeNodeData) => getChildren(node).length > 0\n\nconst isExpanded = (key: TreeKey) => expandedKeys.value.includes(key)\nconst isChecked = (key: TreeKey) => props.checkedKeys.includes(key)\n\nconst collectVisibleNodes = (\n nodes: TreeNodeData[],\n level = 0,\n result: TreeVisibleNode[] = []\n) => {\n nodes.forEach((node) => {\n const key = getKey(node)\n const item = {\n node,\n key,\n label: getLabel(node),\n level,\n disabled: isDisabled(node),\n hasChildren: hasChildren(node)\n }\n\n result.push(item)\n\n if (item.hasChildren && isExpanded(key)) {\n collectVisibleNodes(getChildren(node), level + 1, result)\n }\n })\n\n return result\n}\n\nconst collectDescendantKeys = (node: TreeNodeData) => {\n const keys: TreeKey[] = []\n const walk = (current: TreeNodeData) => {\n keys.push(getKey(current))\n getChildren(current).forEach(walk)\n }\n walk(node)\n return keys\n}\n\nconst visibleNodes = computed(() => collectVisibleNodes(props.data))\n\nconst toggleExpand = (item: TreeVisibleNode) => {\n if (!item.hasChildren) return\n\n expandedKeys.value = isExpanded(item.key)\n ? expandedKeys.value.filter((key) => key !== item.key)\n : [...expandedKeys.value, item.key]\n}\n\nconst handleNodeClick = (item: TreeVisibleNode) => {\n if (item.disabled) return\n if (props.expandOnClickNode && item.hasChildren) toggleExpand(item)\n emit('node-click', item.node, item.key)\n}\n\nconst handleCheck = (item: TreeVisibleNode) => {\n if (item.disabled) return\n\n const currentKeys = new Set(props.checkedKeys)\n const targetKeys = props.checkStrictly ? [item.key] : collectDescendantKeys(item.node)\n const checked = isChecked(item.key)\n\n targetKeys.forEach((key) => {\n if (checked) currentKeys.delete(key)\n else currentKeys.add(key)\n })\n\n const nextKeys = Array.from(currentKeys)\n emit('update:checkedKeys', nextKeys)\n emit('check', nextKeys, item.node)\n}\n\nwatch(\n () => props.defaultExpandedKeys,\n (keys) => {\n expandedKeys.value = [...keys]\n }\n)\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Tree from './src/tree.vue'\n\nexport const JhTree = withInstall(Tree)\nexport default JhTree\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { UploadBeforeUpload, UploadFile } from './types'\n\nexport const uploadProps = {\n fileList: {\n type: Array as PropType<UploadFile[]>,\n default: () => []\n },\n action: {\n type: String,\n default: ''\n },\n accept: {\n type: String,\n default: ''\n },\n multiple: Boolean,\n disabled: Boolean,\n drag: Boolean,\n limit: {\n type: Number,\n default: 0\n },\n buttonText: {\n type: String,\n default: 'Click to upload'\n },\n tip: {\n type: String,\n default: ''\n },\n beforeUpload: {\n type: Function as PropType<UploadBeforeUpload>,\n default: undefined\n }\n} as const\n\nexport const uploadEmits = {\n 'update:fileList': (files: UploadFile[]) => Array.isArray(files),\n change: (file: UploadFile, files: UploadFile[]) => Boolean(file) && Array.isArray(files),\n remove: (file: UploadFile, files: UploadFile[]) => Boolean(file) && Array.isArray(files),\n exceed: (files: File[], uploadFiles: UploadFile[]) => Array.isArray(files) && Array.isArray(uploadFiles)\n}\n","<template>\n <div\n class=\"jh-upload\"\n :class=\"{ 'is-disabled': disabled, 'is-drag': drag, 'is-dragover': dragover }\"\n @dragover.prevent=\"handleDragover\"\n @dragleave.prevent=\"handleDragleave\"\n @drop.prevent=\"handleDrop\"\n >\n <input\n ref=\"inputRef\"\n class=\"jh-upload__input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n @change=\"handleFileChange\"\n />\n\n <button class=\"jh-upload__trigger\" type=\"button\" :disabled=\"disabled\" @click=\"openFileDialog\">\n <JhIcon name=\"plus\" />\n <span>{{ buttonText }}</span>\n </button>\n\n <div v-if=\"tip\" class=\"jh-upload__tip\">{{ tip }}</div>\n\n <ul v-if=\"fileList.length\" class=\"jh-upload__list\">\n <li v-for=\"file in fileList\" :key=\"file.uid\" class=\"jh-upload__item\">\n <span class=\"jh-upload__name\">{{ file.name }}</span>\n <button\n class=\"jh-upload__remove\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"handleRemove(file)\"\n >\n <JhIcon name=\"close\" />\n </button>\n </li>\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { JhIcon } from '../../icon'\nimport { uploadEmits, uploadProps } from './props'\nimport type { UploadFile } from './types'\n\ndefineOptions({\n name: 'JhUpload'\n})\n\nconst props = defineProps(uploadProps)\nconst emit = defineEmits(uploadEmits)\nconst inputRef = ref<HTMLInputElement>()\nconst dragover = ref(false)\n\nlet uidSeed = 0\n\nconst createUploadFile = (file: File): UploadFile => ({\n uid: `${Date.now()}-${uidSeed++}`,\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'ready',\n raw: file\n})\n\nconst openFileDialog = () => {\n if (props.disabled) return\n inputRef.value?.click()\n}\n\nconst resolveFiles = async (files: File[]) => {\n const acceptedFiles: File[] = []\n\n for (const file of files) {\n const result = props.beforeUpload ? await props.beforeUpload(file) : true\n if (result) acceptedFiles.push(file)\n }\n\n return acceptedFiles.map(createUploadFile)\n}\n\nconst addFiles = async (files: File[]) => {\n if (props.disabled || files.length === 0) return\n\n if (props.limit > 0 && props.fileList.length + files.length > props.limit) {\n emit('exceed', files, props.fileList)\n return\n }\n\n const uploadFiles = await resolveFiles(files)\n if (uploadFiles.length === 0) return\n\n const nextFiles = [...props.fileList, ...uploadFiles]\n emit('update:fileList', nextFiles)\n uploadFiles.forEach((file) => emit('change', file, nextFiles))\n}\n\nconst handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement\n addFiles(Array.from(input.files || []))\n input.value = ''\n}\n\nconst handleRemove = (file: UploadFile) => {\n if (props.disabled) return\n const nextFiles = props.fileList.filter((item) => item.uid !== file.uid)\n emit('update:fileList', nextFiles)\n emit('remove', file, nextFiles)\n}\n\nconst handleDragover = () => {\n if (props.disabled || !props.drag) return\n dragover.value = true\n}\n\nconst handleDragleave = () => {\n dragover.value = false\n}\n\nconst handleDrop = (event: DragEvent) => {\n if (props.disabled || !props.drag) return\n dragover.value = false\n addFiles(Array.from(event.dataTransfer?.files || []))\n}\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Upload from './src/upload.vue'\n\nexport const JhUpload = withInstall(Upload)\nexport default JhUpload\n\nexport * from './src/props'\nexport * from './src/types'\n","import type { PropType } from 'vue'\nimport type { WaterfallItem, WaterfallItemHeight, WaterfallItemKey } from './types'\n\nexport const waterfallProps = {\n data: {\n type: Array as PropType<WaterfallItem[]>,\n default: () => []\n },\n columns: {\n type: Number,\n default: 2,\n validator: (value: number) => Number.isInteger(value) && value > 0\n },\n gap: {\n type: [Number, String] as PropType<number | string>,\n default: 16\n },\n itemKey: {\n type: [String, Function] as PropType<WaterfallItemKey>,\n default: 'id'\n },\n itemHeight: {\n type: [Number, String, Function] as PropType<WaterfallItemHeight>,\n default: 'height'\n },\n batchSize: {\n type: Number,\n default: 40,\n validator: (value: number) => Number.isInteger(value) && value > 0\n },\n emptyText: {\n type: String,\n default: 'No data'\n },\n immediate: {\n type: Boolean,\n default: true\n }\n} as const\n\nexport const waterfallEmits = {\n 'layout-start': () => true,\n 'layout-end': () => true\n}\n","<template>\n <div class=\"jh-waterfall\" :style=\"waterfallStyle\">\n <div v-if=\"data.length === 0\" class=\"jh-waterfall__empty\">\n <slot name=\"empty\">{{ emptyText }}</slot>\n </div>\n <template v-else>\n <div class=\"jh-waterfall__columns\">\n <div\n v-for=\"(column, columnIndex) in waterfallColumns\"\n :key=\"columnIndex\"\n class=\"jh-waterfall__column\"\n >\n <div v-for=\"renderItem in column.items\" :key=\"renderItem.key\" class=\"jh-waterfall__item\">\n <slot\n :item=\"renderItem.item\"\n :index=\"renderItem.index\"\n :column-index=\"columnIndex\"\n :height=\"renderItem.height\"\n />\n </div>\n </div>\n </div>\n\n <div ref=\"measureRef\" class=\"jh-waterfall__measure\" aria-hidden=\"true\">\n <div\n v-for=\"measureItem in measuringItems\"\n :key=\"measureItem.key\"\n class=\"jh-waterfall__measure-item\"\n >\n <slot\n :item=\"measureItem.item\"\n :index=\"measureItem.index\"\n :column-index=\"-1\"\n :height=\"measureItem.height\"\n />\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { waterfallEmits, waterfallProps } from './props'\nimport type { WaterfallColumn, WaterfallItem, WaterfallRenderItem } from './types'\n\ndefineOptions({\n name: 'JhWaterfall'\n})\n\nconst props = defineProps(waterfallProps)\nconst emit = defineEmits(waterfallEmits)\n\nconst measureRef = ref<HTMLElement>()\nconst waterfallColumns = ref<WaterfallColumn[]>([])\nconst measuringItems = ref<WaterfallRenderItem[]>([])\nconst cursor = ref(0)\nlet layoutId = 0\nlet frameId: number | undefined\n\nconst normalizeColumns = () => Math.max(1, Math.floor(props.columns))\nconst gapValue = computed(() => (typeof props.gap === 'number' ? `${props.gap}px` : props.gap))\nconst gapSize = computed(() => {\n if (typeof props.gap === 'number') return props.gap\n const parsed = Number.parseFloat(props.gap)\n return Number.isFinite(parsed) ? parsed : 0\n})\nconst columnWidth = computed(\n () => `calc((100% - (${gapValue.value} * ${normalizeColumns() - 1})) / ${normalizeColumns()})`\n)\nconst waterfallStyle = computed(() => ({\n '--jh-waterfall-gap': gapValue.value,\n '--jh-waterfall-column-width': columnWidth.value\n}))\n\nconst getItemKey = (item: WaterfallItem, index: number) => {\n if (typeof props.itemKey === 'function') return props.itemKey(item, index)\n return (item[props.itemKey] as string | number | undefined) ?? index\n}\n\nconst getConfiguredHeight = (item: WaterfallItem, index: number) => {\n if (typeof props.itemHeight === 'number') return props.itemHeight\n if (typeof props.itemHeight === 'function') return props.itemHeight(item, index)\n const value = item[props.itemHeight]\n return typeof value === 'number' ? value : 0\n}\n\nconst createColumns = () =>\n Array.from({ length: normalizeColumns() }, () => ({\n height: 0,\n items: []\n }))\n\nconst createRenderItem = (item: WaterfallItem, index: number): WaterfallRenderItem => ({\n item,\n index,\n key: getItemKey(item, index),\n height: getConfiguredHeight(item, index)\n})\n\nconst getShortestColumnIndex = () => {\n let targetIndex = 0\n let minHeight = waterfallColumns.value[0]?.height ?? 0\n waterfallColumns.value.forEach((column, index) => {\n if (column.height < minHeight) {\n minHeight = column.height\n targetIndex = index\n }\n })\n return targetIndex\n}\n\nconst addToShortestColumn = (renderItem: WaterfallRenderItem, measuredHeight: number) => {\n const targetIndex = getShortestColumnIndex()\n const targetColumn = waterfallColumns.value[targetIndex]\n const height = measuredHeight || renderItem.height || 0\n\n targetColumn.items.push({\n ...renderItem,\n height\n })\n targetColumn.height += height + gapSize.value\n}\n\nconst nextFrame = () =>\n new Promise<void>((resolve) => {\n if (typeof window === 'undefined' || typeof window.requestAnimationFrame !== 'function') {\n setTimeout(resolve, 0)\n return\n }\n frameId = window.requestAnimationFrame(() => resolve())\n })\n\nconst layoutBatch = async (currentLayoutId: number) => {\n if (currentLayoutId !== layoutId) return\n if (cursor.value >= props.data.length) {\n measuringItems.value = []\n emit('layout-end')\n return\n }\n\n const nextItems = props.data\n .slice(cursor.value, cursor.value + props.batchSize)\n .map((item, index) => createRenderItem(item, cursor.value + index))\n\n measuringItems.value = nextItems\n await nextTick()\n await nextFrame()\n if (currentLayoutId !== layoutId) return\n\n const elements = Array.from(measureRef.value?.children ?? []) as HTMLElement[]\n nextItems.forEach((renderItem, index) => {\n const measuredHeight = elements[index]?.getBoundingClientRect().height ?? 0\n addToShortestColumn(renderItem, measuredHeight)\n })\n\n cursor.value += nextItems.length\n measuringItems.value = []\n await nextTick()\n await nextFrame()\n layoutBatch(currentLayoutId)\n}\n\nconst layout = () => {\n layoutId += 1\n cursor.value = 0\n measuringItems.value = []\n waterfallColumns.value = createColumns()\n\n if (props.data.length === 0) return\n emit('layout-start')\n layoutBatch(layoutId)\n}\n\nconst refresh = () => {\n layout()\n}\n\nwatch(\n () => [props.data, props.columns, props.gap, props.batchSize, props.itemHeight, props.itemKey],\n () => layout(),\n { deep: false }\n)\n\nonMounted(() => {\n if (props.immediate) layout()\n})\n\nonBeforeUnmount(() => {\n layoutId += 1\n if (frameId !== undefined && typeof window !== 'undefined') {\n window.cancelAnimationFrame(frameId)\n }\n})\n\ndefineExpose({\n refresh\n})\n</script>\n","import { withInstall } from '@jh-ui/utils'\nimport Waterfall from './src/waterfall.vue'\n\nexport const JhWaterfall = withInstall(Waterfall)\nexport default JhWaterfall\n\nexport * from './src/props'\nexport * from './src/types'\n","export * from './alert'\nexport * from './backtop'\nexport * from './badge'\nexport * from './button'\nexport * from './cascader'\nexport * from './carousel'\nexport * from './checkbox'\nexport * from './collapse'\nexport * from './date-picker'\nexport * from './date-time-picker'\nexport * from './dialog'\nexport * from './drawer'\nexport * from './dropdown'\nexport * from './form'\nexport * from './icon'\nexport * from './infinite-scroll'\nexport * from './input'\nexport * from './link'\nexport * from './message'\nexport * from './message-box'\nexport type {\n MessageFn,\n MessageHandler,\n MessageInstance,\n MessageOptions,\n MessageProps,\n MessageType\n} from './message/src/types'\nexport type {\n MessageBoxAction,\n MessageBoxFn,\n MessageBoxInput,\n MessageBoxOptions,\n MessageBoxProps,\n MessageBoxType\n} from './message-box/src/types'\nexport * from './notification'\nexport type {\n NotificationFn,\n NotificationHandler,\n NotificationInstance,\n NotificationOptions,\n NotificationPosition,\n NotificationProps,\n NotificationType\n} from './notification/src/types'\nexport * from './pagination'\nexport * from './radio'\nexport * from './scrollbar'\nexport * from './select'\nexport * from './table'\nexport * from './tabs'\nexport * from './text'\nexport * from './time-select'\nexport * from './tree'\nexport * from './upload'\nexport * from './waterfall'\n\nimport { JhAlert } from './alert'\nimport { JhBacktop } from './backtop'\nimport { JhBadge } from './badge'\nimport { JhButton } from './button'\nimport { JhCascader } from './cascader'\nimport { JhCarousel, JhCarouselItem } from './carousel'\nimport { JhCheckbox, JhCheckboxGroup } from './checkbox'\nimport { JhCollapse, JhCollapseItem } from './collapse'\nimport { JhDatePicker } from './date-picker'\nimport { JhDateTimePicker } from './date-time-picker'\nimport { JhDialog } from './dialog'\nimport { JhDrawer } from './drawer'\nimport { JhDropdown } from './dropdown'\nimport { JhForm, JhFormItem } from './form'\nimport { JhIcon } from './icon'\nimport { JhInfiniteScroll } from './infinite-scroll'\nimport { JhInput } from './input'\nimport { JhLink } from './link'\nimport { JhMessage } from './message'\nimport { JhMessageBox } from './message-box'\nimport { JhNotification } from './notification'\nimport { JhPagination } from './pagination'\nimport { JhRadio, JhRadioGroup } from './radio'\nimport { JhScrollbar } from './scrollbar'\nimport { JhSelect } from './select'\nimport { JhTable } from './table'\nimport { JhTabs, JhTabPane } from './tabs'\nimport { JhText } from './text'\nimport { JhTimeSelect } from './time-select'\nimport { JhTree } from './tree'\nimport { JhUpload } from './upload'\nimport { JhWaterfall } from './waterfall'\n\nexport default [\n JhAlert,\n JhBacktop,\n JhBadge,\n JhButton,\n JhCascader,\n JhCarousel,\n JhCarouselItem,\n JhCheckbox,\n JhCheckboxGroup,\n JhCollapse,\n JhCollapseItem,\n JhDatePicker,\n JhDateTimePicker,\n JhDialog,\n JhDrawer,\n JhDropdown,\n JhForm,\n JhFormItem,\n JhIcon,\n JhInfiniteScroll,\n JhInput,\n JhLink,\n JhMessage,\n JhMessageBox,\n JhNotification,\n JhPagination,\n JhRadio,\n JhRadioGroup,\n JhScrollbar,\n JhSelect,\n JhTable,\n JhTabs,\n JhTabPane,\n JhText,\n JhTimeSelect,\n JhTree,\n JhUpload,\n JhWaterfall\n]\n","import type { App, Plugin } from 'vue'\nimport '@jh-ui/theme-chalk/src/index.scss'\nimport components from '@jh-ui/components'\n\ntype MessageType = 'success' | 'warning' | 'info' | 'danger'\ninterface MessageOptions {\n message?: string\n type?: MessageType\n duration?: number\n showClose?: boolean\n offset?: number\n zIndex?: number\n onClose?: () => void\n}\ninterface MessageHandler {\n close: () => void\n}\ntype MessageFn = {\n (options?: string | MessageOptions): MessageHandler\n success: (options?: string | Omit<MessageOptions, 'type'>) => MessageHandler\n warning: (options?: string | Omit<MessageOptions, 'type'>) => MessageHandler\n info: (options?: string | Omit<MessageOptions, 'type'>) => MessageHandler\n danger: (options?: string | Omit<MessageOptions, 'type'>) => MessageHandler\n closeAll: () => void\n}\ntype MessageBoxAction = 'confirm' | 'cancel' | 'close'\ninterface MessageBoxOptions {\n title?: string\n message?: string\n type?: MessageType\n confirmButtonText?: string\n cancelButtonText?: string\n showCancelButton?: boolean\n showClose?: boolean\n closeOnClickModal?: boolean\n zIndex?: number\n beforeClose?: (action: MessageBoxAction, done: () => void) => void\n}\ntype MessageBoxFn = {\n (options?: string | MessageBoxOptions): Promise<MessageBoxAction>\n alert: (\n message: string,\n title?: string,\n options?: Omit<MessageBoxOptions, 'message' | 'title'>\n ) => Promise<MessageBoxAction>\n confirm: (\n message: string,\n title?: string,\n options?: Omit<MessageBoxOptions, 'message' | 'title'>\n ) => Promise<MessageBoxAction>\n}\ntype NotificationPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\ninterface NotificationOptions extends MessageOptions {\n title?: string\n position?: NotificationPosition\n}\ntype NotificationFn = {\n (options?: string | NotificationOptions): MessageHandler\n success: (options?: string | Omit<NotificationOptions, 'type'>) => MessageHandler\n warning: (options?: string | Omit<NotificationOptions, 'type'>) => MessageHandler\n info: (options?: string | Omit<NotificationOptions, 'type'>) => MessageHandler\n danger: (options?: string | Omit<NotificationOptions, 'type'>) => MessageHandler\n closeAll: () => void\n}\n\nexport * from '@jh-ui/components'\n\nconst JhUI: Plugin = {\n install(app: App) {\n components.forEach((component) => {\n app.use(component)\n })\n }\n}\n\nexport default JhUI\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $message: MessageFn\n $messageBox: MessageBoxFn\n $notify: NotificationFn\n }\n}\n"],"names":["withInstall","component","app","name","iconNames","iconProps","props","__props","iconStyle","computed","_createElementBlock","_normalizeClass","spin","_openBlock","_hoisted_1","_Fragment","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_renderSlot","_ctx","JhIcon","Icon","alertTypes","alertEffects","alertProps","value","alertEmits","emit","__emit","visible","ref","handleClose","type","effect","showIcon","title","$slots","description","closable","_createVNode","_unref","JhAlert","Alert","backtopProps","backtopEmits","payload","scrollTarget","backtopStyle","getScrollTop","target","handleScroll","resolveTarget","bindScroll","unbindScroll","_a","handleClick","onMounted","nextTick","onBeforeUnmount","__expose","_createBlock","_Transition","JhBacktop","Backtop","badgeTypes","badgeProps","displayValue","badgeStyle","hidden","isDot","color","JhBadge","Badge","buttonTypes","buttonSizes","buttonNativeTypes","buttonProps","buttonEmits","event","buttonClasses","nativeType","disabled","loading","icon","JhButton","Button","cascaderProps","cascaderEmits","_value","_selectedOptions","_visible","activePath","cascaderRef","cascaderClasses","labelKey","valueKey","childrenKey","disabledKey","getLabel","option","getValue","getChildren","isDisabled","hasChildren","resolvePath","path","selectedOptions","currentOptions","matched","displayLabel","menus","result","children","menu","showClear","setVisible","nextVisible","toggleVisible","close","isActive","level","handleOptionClick","nextPath","nextSelectedOptions","handleClear","handleDocumentClick","watch","_toDisplayString","placeholder","_renderList","$event","JhCascader","Cascader","carouselContextKey","carouselArrows","carouselProps","carouselEmits","current","previous","carouselItemProps","items","innerIndex","activeUid","activeIndex","timer","emitChange","nextIndex","previousIndex","setActive","index","maxIndex","prev","next","clearTimer","start","pause","registerItem","item","unregisterItem","provide","arrow","height","indicator","_","carousel","inject","uid","JhCarousel","Carousel","JhCarouselItem","CarouselItem","checkboxProps","checkboxGroupProps","checkboxEmits","checkboxGroupEmits","checkboxGroupKey","group","mergedDisabled","checked","handleChange","nextChecked","nextValue","label","changeValue","JhCheckbox","Checkbox","JhCheckboxGroup","CheckboxGroup","collapseContextKey","collapseProps","collapseEmits","collapseItemProps","getActiveNames","toggle","activeNames","collapse","active","_withDirectives","JhCollapse","Collapse","JhCollapseItem","CollapseItem","datePickerProps","datePickerEmits","handleInput","modelValue","JhDatePicker","DatePicker","dateTimePickerProps","dateTimePickerEmits","JhDateTimePicker","DateTimePicker","dialogProps","dialogEmits","dialogStyle","requestClose","handleModalClick","_Teleport","_hoisted_5","JhDialog","Dialog","drawerDirections","drawerProps","drawerEmits","drawerStyle","direction","JhDrawer","Drawer","dropdownTriggers","dropdownPlacements","dropdownProps","dropdownEmits","_command","_option","dropdownRef","dropdownClasses","handleTriggerClick","handleMouseEnter","handleMouseLeave","options","JhDropdown","Dropdown","formProps","formItemProps","formContextKey","fields","field","validate","resetFields","labelWidth","form","errorMessage","rules","propRules","mergedRules","isRequired","rule","resetField","context","JhForm","Form","JhFormItem","FormItem","infiniteScrollProps","infiniteScrollEmits","containerRef","shouldLoad","element","emitLoad","check","JhInfiniteScroll","InfiniteScroll","inputProps","inputEmits","inputRef","passwordVisible","isFocused","slots","_useSlots","hasValue","showSuffix","inputClasses","emitValue","togglePasswordVisible","handleFocus","handleBlur","prefixIcon","autocomplete","password","suffixIcon","JhInput","Input","linkTypes","linkProps","linkEmits","linkClasses","href","JhLink","Link","messageTypes","messageProps","messageStyle","startTimer","handleAfterLeave","message","showClose","instances","seed","normalizeOptions","getOffset","baseOffset","createMessage","normalized","container","id","instance","render","vnode","createVNode","Message","exposed","_b","typedMessage","JhMessage","messageBoxTypes","messageBoxProps","actionTriggered","handleAction","action","done","zIndex","_hoisted_6","showCancelButton","cancelButtonText","confirmButtonText","createMessageBox","resolve","MessageBox","JhMessageBox","notificationTypes","notificationPositions","notificationProps","isRight","isBottom","transitionName","notificationStyle","position","createNotification","Notification","typedNotification","JhNotification","paginationProps","paginationEmits","_page","_pageSize","_payload","normalizedPageSize","pageCount","safeCurrentPage","clampPage","pages","count","maxPagerCount","end","page","emitPageChange","pageSize","changePage","nextPage","oldPageSize","_cache","total","JhPagination","Pagination","radioProps","radioGroupProps","radioEmits","radioGroupEmits","radioGroupKey","JhRadio","Radio","JhRadioGroup","RadioGroup","scrollbarProps","scrollbarEmits","wrapRef","normalizeSize","wrapStyle","always","native","wrapClass","viewClass","JhScrollbar","Scrollbar","selectProps","selectEmits","selectRef","selectedOption","JhSelect","Select","tableProps","tableEmits","_selection","_row","selectedKeys","selectAllRef","tableClasses","getRowKey","row","isRowSelectable","selectableRows","selectedRows","isAllSelected","key","isIndeterminate","watchEffect","currentKeys","getAlignClass","column","getColumnStyle","formatCellValue","emitSelectionChange","isRowSelected","toggleRowSelection","nextSelectedKeys","toggleSelectAll","selection","columns","_normalizeStyle","_hoisted_7","data","rowIndex","_hoisted_8","_hoisted_11","emptyText","_hoisted_12","JhTable","Table","tabsContextKey","tabsProps","tabsEmits","tabPaneProps","panes","innerActiveName","activeName","setActiveName","handleTabClick","pane","registerPane","unregisterPane","tabs","JhTabs","Tabs","JhTabPane","TabPane","textTypes","textSizes","textProps","textClasses","textStyle","_resolveDynamicComponent","tag","JhText","Text","timeSelectProps","timeSelectEmits","timeSelectRef","parseTime","match","hours","minutes","formatTime","restMinutes","step","JhTimeSelect","TimeSelect","treeProps","treeEmits","keys","node","expandedKeys","getKey","isExpanded","isChecked","collectVisibleNodes","nodes","collectDescendantKeys","walk","visibleNodes","toggleExpand","handleNodeClick","handleCheck","targetKeys","nextKeys","showCheckbox","_createTextVNode","JhTree","Tree","uploadProps","uploadEmits","files","file","uploadFiles","dragover","uidSeed","createUploadFile","openFileDialog","resolveFiles","acceptedFiles","addFiles","nextFiles","handleFileChange","input","handleRemove","handleDragover","handleDragleave","handleDrop","drag","accept","multiple","buttonText","tip","fileList","JhUpload","Upload","waterfallProps","waterfallEmits","measureRef","waterfallColumns","measuringItems","cursor","layoutId","frameId","normalizeColumns","gapValue","gapSize","parsed","columnWidth","waterfallStyle","getItemKey","getConfiguredHeight","createColumns","createRenderItem","getShortestColumnIndex","targetIndex","minHeight","addToShortestColumn","renderItem","measuredHeight","targetColumn","nextFrame","layoutBatch","currentLayoutId","nextItems","elements","layout","refresh","columnIndex","measureItem","JhWaterfall","Waterfall","components","JhUI"],"mappings":"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"}