fast-element-plus 1.0.21 → 2.0.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 (1169) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CONTRIBUTING.md +83 -0
  3. package/README.md +74 -115
  4. package/README.zh.md +74 -115
  5. package/SECURITY.md +34 -0
  6. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  7. package/dist/component.d.ts +4 -0
  8. package/dist/component.mjs +56 -0
  9. package/dist/component.mjs.map +1 -0
  10. package/dist/components/avatar/index.d.ts +15 -0
  11. package/dist/components/avatar/index.mjs +9 -0
  12. package/dist/components/avatar/index.mjs.map +1 -0
  13. package/dist/components/avatar/src/avatar.d.ts +128 -0
  14. package/dist/components/avatar/src/avatar.mjs +64 -0
  15. package/dist/components/avatar/src/avatar.mjs.map +1 -0
  16. package/dist/components/button/index.d.ts +14 -0
  17. package/dist/components/button/index.mjs +9 -0
  18. package/dist/components/button/index.mjs.map +1 -0
  19. package/dist/components/button/src/button.d.ts +180 -0
  20. package/dist/components/button/src/button.mjs +108 -0
  21. package/dist/components/button/src/button.mjs.map +1 -0
  22. package/dist/components/carNumber/index.d.ts +8 -0
  23. package/dist/components/carNumber/index.mjs +10 -0
  24. package/dist/components/carNumber/index.mjs.map +1 -0
  25. package/dist/components/carNumber/src/carNumber.d.ts +230 -0
  26. package/dist/components/carNumber/src/carNumber.mjs +149 -0
  27. package/dist/components/carNumber/src/carNumber.mjs.map +1 -0
  28. package/dist/components/carNumber/src/common.d.ts +15 -0
  29. package/dist/components/carNumber/src/common.mjs +97 -0
  30. package/dist/components/carNumber/src/common.mjs.map +1 -0
  31. package/dist/components/contextMenu/index.d.ts +8 -0
  32. package/dist/components/contextMenu/index.mjs +9 -0
  33. package/dist/components/contextMenu/index.mjs.map +1 -0
  34. package/dist/components/contextMenu/src/contextMenu.d.ts +32 -0
  35. package/dist/components/contextMenu/src/contextMenu.mjs +79 -0
  36. package/dist/components/contextMenu/src/contextMenu.mjs.map +1 -0
  37. package/dist/components/contextMenu/src/contextMenu.type.d.ts +31 -0
  38. package/dist/components/dialog/index.d.ts +14 -0
  39. package/dist/components/dialog/index.mjs +9 -0
  40. package/dist/components/dialog/index.mjs.map +1 -0
  41. package/dist/components/dialog/src/dialog.d.ts +472 -0
  42. package/dist/components/dialog/src/dialog.mjs +287 -0
  43. package/dist/components/dialog/src/dialog.mjs.map +1 -0
  44. package/dist/components/drawer/index.d.ts +15 -0
  45. package/dist/components/drawer/index.mjs +9 -0
  46. package/dist/components/drawer/index.mjs.map +1 -0
  47. package/dist/components/drawer/src/drawer.d.ts +470 -0
  48. package/dist/components/drawer/src/drawer.mjs +297 -0
  49. package/dist/components/drawer/src/drawer.mjs.map +1 -0
  50. package/dist/components/form/index.d.ts +23 -0
  51. package/dist/components/form/index.mjs +13 -0
  52. package/dist/components/form/index.mjs.map +1 -0
  53. package/dist/components/form/src/form.d.ts +208 -0
  54. package/dist/components/form/src/form.mjs +120 -0
  55. package/dist/components/form/src/form.mjs.map +1 -0
  56. package/dist/components/form/src/formItem.d.ts +208 -0
  57. package/dist/components/form/src/formItem.mjs +86 -0
  58. package/dist/components/form/src/formItem.mjs.map +1 -0
  59. package/dist/components/form/utils/form.d.ts +83 -0
  60. package/dist/components/form/utils/form.mjs +176 -0
  61. package/dist/components/form/utils/form.mjs.map +1 -0
  62. package/dist/components/formItemTip/index.d.ts +12 -0
  63. package/dist/components/formItemTip/index.mjs +9 -0
  64. package/dist/components/formItemTip/index.mjs.map +1 -0
  65. package/dist/components/formItemTip/src/formItemTip.d.ts +24 -0
  66. package/dist/components/formItemTip/src/formItemTip.mjs +30 -0
  67. package/dist/components/formItemTip/src/formItemTip.mjs.map +1 -0
  68. package/dist/components/icon/index.d.ts +12 -0
  69. package/dist/components/icon/index.mjs +9 -0
  70. package/dist/components/icon/index.mjs.map +1 -0
  71. package/dist/components/icon/src/icon.d.ts +40 -0
  72. package/dist/components/icon/src/icon.mjs +54 -0
  73. package/dist/components/icon/src/icon.mjs.map +1 -0
  74. package/dist/components/iconSelector/index.d.ts +7 -0
  75. package/dist/components/iconSelector/index.mjs +9 -0
  76. package/dist/components/iconSelector/index.mjs.map +1 -0
  77. package/dist/components/iconSelector/src/iconSelector.d.ts +35 -0
  78. package/dist/components/iconSelector/src/iconSelector.mjs +147 -0
  79. package/dist/components/iconSelector/src/iconSelector.mjs.map +1 -0
  80. package/dist/components/image/index.d.ts +12 -0
  81. package/dist/components/image/index.mjs +9 -0
  82. package/dist/components/image/index.mjs.map +1 -0
  83. package/dist/components/image/src/image.d.ts +277 -0
  84. package/dist/components/image/src/image.mjs +97 -0
  85. package/dist/components/image/src/image.mjs.map +1 -0
  86. package/dist/components/index.d.ts +22 -0
  87. package/dist/components/index.mjs +124 -0
  88. package/dist/components/index.mjs.map +1 -0
  89. package/dist/components/inputDialogPage/index.d.ts +14 -0
  90. package/dist/components/inputDialogPage/index.mjs +9 -0
  91. package/dist/components/inputDialogPage/index.mjs.map +1 -0
  92. package/dist/components/inputDialogPage/src/inputDialogPage.d.ts +134 -0
  93. package/dist/components/inputDialogPage/src/inputDialogPage.mjs +154 -0
  94. package/dist/components/inputDialogPage/src/inputDialogPage.mjs.map +1 -0
  95. package/dist/components/layoutGrid/index.d.ts +17 -0
  96. package/dist/components/layoutGrid/index.mjs +12 -0
  97. package/dist/components/layoutGrid/index.mjs.map +1 -0
  98. package/dist/components/layoutGrid/src/layoutGrid.d.ts +61 -0
  99. package/dist/components/layoutGrid/src/layoutGrid.mjs +163 -0
  100. package/dist/components/layoutGrid/src/layoutGrid.mjs.map +1 -0
  101. package/dist/components/layoutGrid/src/layoutGrid.type.d.ts +7 -0
  102. package/dist/components/layoutGrid/src/layoutGridItem.d.ts +101 -0
  103. package/dist/components/layoutGrid/src/layoutGridItem.mjs +85 -0
  104. package/dist/components/layoutGrid/src/layoutGridItem.mjs.map +1 -0
  105. package/dist/components/select/index.d.ts +23 -0
  106. package/dist/components/select/index.mjs +12 -0
  107. package/dist/components/select/index.mjs.map +1 -0
  108. package/dist/components/select/src/select.d.ts +618 -0
  109. package/dist/components/select/src/select.mjs +349 -0
  110. package/dist/components/select/src/select.mjs.map +1 -0
  111. package/dist/components/select/src/select.type.d.ts +32 -0
  112. package/dist/components/select/src/selectOption.d.ts +59 -0
  113. package/dist/components/select/src/selectOption.mjs +69 -0
  114. package/dist/components/select/src/selectOption.mjs.map +1 -0
  115. package/dist/components/selectPage/index.d.ts +14 -0
  116. package/dist/components/selectPage/index.mjs +9 -0
  117. package/dist/components/selectPage/index.mjs.map +1 -0
  118. package/dist/components/selectPage/src/selectPage.d.ts +583 -0
  119. package/dist/components/selectPage/src/selectPage.mjs +388 -0
  120. package/dist/components/selectPage/src/selectPage.mjs.map +1 -0
  121. package/dist/components/selectV2/index.d.ts +15 -0
  122. package/dist/components/selectV2/index.mjs +9 -0
  123. package/dist/components/selectV2/index.mjs.map +1 -0
  124. package/dist/components/selectV2/src/selectV2.d.ts +1477 -0
  125. package/dist/components/selectV2/src/selectV2.mjs +649 -0
  126. package/dist/components/selectV2/src/selectV2.mjs.map +1 -0
  127. package/dist/components/table/images/artwork.mjs +6 -0
  128. package/dist/components/table/images/artwork.mjs.map +1 -0
  129. package/dist/components/table/images/notImage.mjs +6 -0
  130. package/dist/components/table/images/notImage.mjs.map +1 -0
  131. package/dist/components/table/index.d.ts +34 -0
  132. package/dist/components/table/index.mjs +25 -0
  133. package/dist/components/table/index.mjs.map +1 -0
  134. package/dist/components/table/src/page.type.d.ts +145 -0
  135. package/dist/components/table/src/page.type.mjs +45 -0
  136. package/dist/components/table/src/page.type.mjs.map +1 -0
  137. package/dist/components/table/src/table.d.ts +1522 -0
  138. package/dist/components/table/src/table.mjs +1012 -0
  139. package/dist/components/table/src/table.mjs.map +1 -0
  140. package/dist/components/table/src/table.state.d.ts +113 -0
  141. package/dist/components/table/src/table.type.d.ts +266 -0
  142. package/dist/components/table/src/table.type.mjs +20 -0
  143. package/dist/components/table/src/table.type.mjs.map +1 -0
  144. package/dist/components/table/src/tableColumn.d.ts +666 -0
  145. package/dist/components/table/src/tableColumn.mjs +604 -0
  146. package/dist/components/table/src/tableColumn.mjs.map +1 -0
  147. package/dist/components/table/src/tableColumnSettingDialog.d.ts +18 -0
  148. package/dist/components/table/src/tableColumnSettingDialog.mjs +307 -0
  149. package/dist/components/table/src/tableColumnSettingDialog.mjs.map +1 -0
  150. package/dist/components/table/src/tablePagination.d.ts +24 -0
  151. package/dist/components/table/src/tablePagination.mjs +58 -0
  152. package/dist/components/table/src/tablePagination.mjs.map +1 -0
  153. package/dist/components/table/src/tableSearchForm.d.ts +86 -0
  154. package/dist/components/table/src/tableSearchForm.mjs +229 -0
  155. package/dist/components/table/src/tableSearchForm.mjs.map +1 -0
  156. package/dist/components/table/src/tableSearchFormItem.d.ts +35 -0
  157. package/dist/components/table/src/tableSearchFormItem.mjs +216 -0
  158. package/dist/components/table/src/tableSearchFormItem.mjs.map +1 -0
  159. package/dist/components/table/src/useTable.d.ts +44 -0
  160. package/dist/components/table/src/useTable.mjs +408 -0
  161. package/dist/components/table/src/useTable.mjs.map +1 -0
  162. package/dist/components/table/utils/table.d.ts +46 -0
  163. package/dist/components/table/utils/table.mjs +113 -0
  164. package/dist/components/table/utils/table.mjs.map +1 -0
  165. package/dist/components/tree/index.d.ts +15 -0
  166. package/dist/components/tree/index.mjs +9 -0
  167. package/dist/components/tree/index.mjs.map +1 -0
  168. package/dist/components/tree/src/tree.d.ts +579 -0
  169. package/dist/components/tree/src/tree.mjs +339 -0
  170. package/dist/components/tree/src/tree.mjs.map +1 -0
  171. package/dist/components/tree/src/tree.props.d.ts +33 -0
  172. package/dist/components/tree/src/tree.type.d.ts +38 -0
  173. package/dist/components/treeSelect/index.d.ts +14 -0
  174. package/dist/components/treeSelect/index.mjs +9 -0
  175. package/dist/components/treeSelect/index.mjs.map +1 -0
  176. package/dist/components/treeSelect/src/treeSelect.d.ts +1036 -0
  177. package/dist/components/treeSelect/src/treeSelect.mjs +463 -0
  178. package/dist/components/treeSelect/src/treeSelect.mjs.map +1 -0
  179. package/dist/components/upload/index.d.ts +14 -0
  180. package/dist/components/upload/index.mjs +9 -0
  181. package/dist/components/upload/index.mjs.map +1 -0
  182. package/dist/components/upload/src/upload.d.ts +488 -0
  183. package/dist/components/upload/src/upload.mjs +136 -0
  184. package/dist/components/upload/src/upload.mjs.map +1 -0
  185. package/dist/components/upload/src/useUpload.d.ts +35 -0
  186. package/dist/components/upload/src/useUpload.mjs +170 -0
  187. package/dist/components/upload/src/useUpload.mjs.map +1 -0
  188. package/dist/components/upload/utils/upload.d.ts +34 -0
  189. package/dist/components/upload/utils/upload.mjs +108 -0
  190. package/dist/components/upload/utils/upload.mjs.map +1 -0
  191. package/dist/components/uploadImage/index.d.ts +14 -0
  192. package/dist/components/uploadImage/index.mjs +9 -0
  193. package/dist/components/uploadImage/index.mjs.map +1 -0
  194. package/dist/components/uploadImage/src/uploadImage.d.ts +538 -0
  195. package/dist/components/uploadImage/src/uploadImage.mjs +203 -0
  196. package/dist/components/uploadImage/src/uploadImage.mjs.map +1 -0
  197. package/dist/components/uploadImages/index.d.ts +15 -0
  198. package/dist/components/uploadImages/index.mjs +9 -0
  199. package/dist/components/uploadImages/index.mjs.map +1 -0
  200. package/dist/components/uploadImages/src/uploadImages.d.ts +507 -0
  201. package/dist/components/uploadImages/src/uploadImages.mjs +186 -0
  202. package/dist/components/uploadImages/src/uploadImages.mjs.map +1 -0
  203. package/dist/constants/index.d.ts +2 -0
  204. package/dist/constants/mime.d.ts +59 -0
  205. package/dist/constants/mime.mjs +64 -0
  206. package/dist/constants/mime.mjs.map +1 -0
  207. package/dist/constants/regex.d.ts +76 -0
  208. package/dist/constants/regex.mjs +81 -0
  209. package/dist/constants/regex.mjs.map +1 -0
  210. package/dist/directive.d.ts +4 -0
  211. package/dist/directive.mjs +20 -0
  212. package/dist/directive.mjs.map +1 -0
  213. package/dist/directives/click-copy/index.d.ts +3 -0
  214. package/dist/directives/click-copy/index.mjs +39 -0
  215. package/dist/directives/click-copy/index.mjs.map +1 -0
  216. package/dist/directives/click-debounce/index.d.ts +7 -0
  217. package/dist/directives/click-debounce/index.mjs +17 -0
  218. package/dist/directives/click-debounce/index.mjs.map +1 -0
  219. package/dist/directives/click-draggable/index.d.ts +3 -0
  220. package/dist/directives/click-draggable/index.mjs +31 -0
  221. package/dist/directives/click-draggable/index.mjs.map +1 -0
  222. package/dist/directives/click-icon-copy/index.d.ts +3 -0
  223. package/dist/directives/click-icon-copy/index.mjs +47 -0
  224. package/dist/directives/click-icon-copy/index.mjs.map +1 -0
  225. package/dist/directives/click-longpress/index.d.ts +3 -0
  226. package/dist/directives/click-longpress/index.mjs +31 -0
  227. package/dist/directives/click-longpress/index.mjs.map +1 -0
  228. package/dist/directives/click-throttle/index.d.ts +7 -0
  229. package/dist/directives/click-throttle/index.mjs +26 -0
  230. package/dist/directives/click-throttle/index.mjs.map +1 -0
  231. package/dist/directives/index.d.ts +6 -0
  232. package/dist/element-plus.d.ts +8 -0
  233. package/dist/element-plus.mjs +172 -0
  234. package/dist/element-plus.mjs.map +1 -0
  235. package/dist/global.d.ts +58 -0
  236. package/dist/hooks/index.d.ts +3 -0
  237. package/dist/hooks/use-loading/index.d.ts +7 -0
  238. package/dist/hooks/use-loading/index.mjs +43 -0
  239. package/dist/hooks/use-loading/index.mjs.map +1 -0
  240. package/dist/hooks/use-overlay/index.d.ts +11 -0
  241. package/dist/hooks/use-overlay/index.mjs +33 -0
  242. package/dist/hooks/use-overlay/index.mjs.map +1 -0
  243. package/dist/hooks/use-screenFull/index.d.ts +15 -0
  244. package/dist/hooks/use-screenFull/index.mjs +56 -0
  245. package/dist/hooks/use-screenFull/index.mjs.map +1 -0
  246. package/dist/index.css +1 -0
  247. package/dist/index.css.map +1 -0
  248. package/dist/index.d.ts +20 -0
  249. package/dist/index.global.min.js +23 -0
  250. package/dist/index.global.min.js.map +1 -0
  251. package/dist/index.mjs +71 -0
  252. package/dist/index.mjs.map +1 -0
  253. package/dist/make-installer.d.ts +8 -0
  254. package/dist/make-installer.mjs +28 -0
  255. package/dist/make-installer.mjs.map +1 -0
  256. package/dist/node_modules/.pnpm/@vueuse_core@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/core/dist/index.mjs +100 -0
  257. package/dist/node_modules/.pnpm/@vueuse_core@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/core/dist/index.mjs.map +1 -0
  258. package/dist/node_modules/.pnpm/@vueuse_shared@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/shared/dist/index.mjs +25 -0
  259. package/dist/node_modules/.pnpm/@vueuse_shared@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/shared/dist/index.mjs.map +1 -0
  260. package/dist/node_modules/.pnpm/decimal.js@10.6.0/node_modules/decimal.js/decimal.mjs +1997 -0
  261. package/dist/node_modules/.pnpm/decimal.js@10.6.0/node_modules/decimal.js/decimal.mjs.map +1 -0
  262. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.mjs +8 -0
  263. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.mjs.map +1 -0
  264. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.mjs +30 -0
  265. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.mjs.map +1 -0
  266. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.mjs +30 -0
  267. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.mjs.map +1 -0
  268. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.mjs +8 -0
  269. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.mjs.map +1 -0
  270. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.mjs +30 -0
  271. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.mjs.map +1 -0
  272. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.mjs +8 -0
  273. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.mjs.map +1 -0
  274. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.mjs +8 -0
  275. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.mjs.map +1 -0
  276. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.mjs +23 -0
  277. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.mjs.map +1 -0
  278. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.mjs +27 -0
  279. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.mjs.map +1 -0
  280. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.mjs +8 -0
  281. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.mjs.map +1 -0
  282. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.mjs +8 -0
  283. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.mjs.map +1 -0
  284. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.mjs +8 -0
  285. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.mjs.map +1 -0
  286. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.mjs +24 -0
  287. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.mjs.map +1 -0
  288. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.mjs +19 -0
  289. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.mjs.map +1 -0
  290. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.mjs +22 -0
  291. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.mjs.map +1 -0
  292. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.mjs +26 -0
  293. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.mjs.map +1 -0
  294. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.mjs +19 -0
  295. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.mjs.map +1 -0
  296. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.mjs +18 -0
  297. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.mjs.map +1 -0
  298. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.mjs +20 -0
  299. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.mjs.map +1 -0
  300. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.mjs +23 -0
  301. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.mjs.map +1 -0
  302. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.mjs +19 -0
  303. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.mjs.map +1 -0
  304. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.mjs +19 -0
  305. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.mjs.map +1 -0
  306. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.mjs +19 -0
  307. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.mjs.map +1 -0
  308. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.mjs +24 -0
  309. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.mjs.map +1 -0
  310. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.mjs +118 -0
  311. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.mjs.map +1 -0
  312. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.mjs +27 -0
  313. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.mjs.map +1 -0
  314. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.mjs +31 -0
  315. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.mjs.map +1 -0
  316. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.mjs +21 -0
  317. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.mjs.map +1 -0
  318. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.mjs +22 -0
  319. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.mjs.map +1 -0
  320. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.mjs +24 -0
  321. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.mjs.map +1 -0
  322. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.mjs +19 -0
  323. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.mjs.map +1 -0
  324. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.mjs +26 -0
  325. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.mjs.map +1 -0
  326. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.mjs +61 -0
  327. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.mjs.map +1 -0
  328. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.mjs +19 -0
  329. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.mjs.map +1 -0
  330. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.mjs +37 -0
  331. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.mjs.map +1 -0
  332. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.mjs +19 -0
  333. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.mjs.map +1 -0
  334. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.mjs +47 -0
  335. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.mjs.map +1 -0
  336. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.mjs +22 -0
  337. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.mjs.map +1 -0
  338. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.mjs +23 -0
  339. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.mjs.map +1 -0
  340. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.mjs +24 -0
  341. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.mjs.map +1 -0
  342. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.mjs +25 -0
  343. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.mjs.map +1 -0
  344. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.mjs +19 -0
  345. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.mjs.map +1 -0
  346. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.mjs +29 -0
  347. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.mjs.map +1 -0
  348. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.mjs +17 -0
  349. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.mjs.map +1 -0
  350. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.mjs +31 -0
  351. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.mjs.map +1 -0
  352. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.mjs +16 -0
  353. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.mjs.map +1 -0
  354. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.mjs +21 -0
  355. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.mjs.map +1 -0
  356. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.mjs +18 -0
  357. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.mjs.map +1 -0
  358. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.mjs +27 -0
  359. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.mjs.map +1 -0
  360. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.mjs +18 -0
  361. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.mjs.map +1 -0
  362. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.mjs +19 -0
  363. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.mjs.map +1 -0
  364. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.mjs +19 -0
  365. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.mjs.map +1 -0
  366. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.mjs +18 -0
  367. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.mjs.map +1 -0
  368. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.mjs +19 -0
  369. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.mjs.map +1 -0
  370. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.mjs +30 -0
  371. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.mjs.map +1 -0
  372. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.mjs +18 -0
  373. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.mjs.map +1 -0
  374. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.mjs +18 -0
  375. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.mjs.map +1 -0
  376. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.mjs +8 -0
  377. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.mjs.map +1 -0
  378. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.mjs +18 -0
  379. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.mjs.map +1 -0
  380. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.mjs +13 -0
  381. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.mjs.map +1 -0
  382. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.mjs +57 -0
  383. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.mjs.map +1 -0
  384. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.mjs +77 -0
  385. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.mjs.map +1 -0
  386. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.mjs +56 -0
  387. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.mjs.map +1 -0
  388. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.mjs +18 -0
  389. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.mjs.map +1 -0
  390. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.mjs +7 -0
  391. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.mjs.map +1 -0
  392. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.mjs +18 -0
  393. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.mjs.map +1 -0
  394. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.mjs +19 -0
  395. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.mjs.map +1 -0
  396. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.mjs +18 -0
  397. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.mjs.map +1 -0
  398. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.mjs +19 -0
  399. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.mjs.map +1 -0
  400. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.mjs +8 -0
  401. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.mjs.map +1 -0
  402. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.mjs +38 -0
  403. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.mjs.map +1 -0
  404. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.mjs +24 -0
  405. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.mjs.map +1 -0
  406. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.mjs +24 -0
  407. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.mjs.map +1 -0
  408. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.mjs +45 -0
  409. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.mjs.map +1 -0
  410. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.mjs +16 -0
  411. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.mjs.map +1 -0
  412. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.mjs +17 -0
  413. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.mjs.map +1 -0
  414. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.mjs +20 -0
  415. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.mjs.map +1 -0
  416. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.mjs +27 -0
  417. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.mjs.map +1 -0
  418. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.mjs +21 -0
  419. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.mjs.map +1 -0
  420. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.mjs +24 -0
  421. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.mjs.map +1 -0
  422. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.mjs +22 -0
  423. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.mjs.map +1 -0
  424. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.mjs +66 -0
  425. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.mjs.map +1 -0
  426. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.mjs +18 -0
  427. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.mjs.map +1 -0
  428. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.mjs +20 -0
  429. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.mjs.map +1 -0
  430. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.mjs +22 -0
  431. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.mjs.map +1 -0
  432. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.mjs +24 -0
  433. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.mjs.map +1 -0
  434. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.mjs +16 -0
  435. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.mjs.map +1 -0
  436. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.mjs +21 -0
  437. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.mjs.map +1 -0
  438. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.mjs +18 -0
  439. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.mjs.map +1 -0
  440. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.mjs +16 -0
  441. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.mjs.map +1 -0
  442. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.mjs +25 -0
  443. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.mjs.map +1 -0
  444. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.mjs +19 -0
  445. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.mjs.map +1 -0
  446. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.mjs +18 -0
  447. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.mjs.map +1 -0
  448. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.mjs +24 -0
  449. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.mjs.map +1 -0
  450. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.mjs +23 -0
  451. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.mjs.map +1 -0
  452. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.mjs +20 -0
  453. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.mjs.map +1 -0
  454. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.mjs +18 -0
  455. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.mjs.map +1 -0
  456. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.mjs +18 -0
  457. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.mjs.map +1 -0
  458. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.mjs +22 -0
  459. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.mjs.map +1 -0
  460. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.mjs +19 -0
  461. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.mjs.map +1 -0
  462. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.mjs +24 -0
  463. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.mjs.map +1 -0
  464. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.mjs +7 -0
  465. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.mjs.map +1 -0
  466. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.mjs +7 -0
  467. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.mjs.map +1 -0
  468. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.mjs +19 -0
  469. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.mjs.map +1 -0
  470. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.mjs +20 -0
  471. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.mjs.map +1 -0
  472. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.mjs +21 -0
  473. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.mjs.map +1 -0
  474. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.mjs +18 -0
  475. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.mjs.map +1 -0
  476. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.mjs +28 -0
  477. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.mjs.map +1 -0
  478. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.mjs +18 -0
  479. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.mjs.map +1 -0
  480. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.mjs +10 -0
  481. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.mjs.map +1 -0
  482. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.mjs +21 -0
  483. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.mjs.map +1 -0
  484. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.mjs +17 -0
  485. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.mjs.map +1 -0
  486. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.mjs +19 -0
  487. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.mjs.map +1 -0
  488. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.mjs +16 -0
  489. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.mjs.map +1 -0
  490. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.mjs +29 -0
  491. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.mjs.map +1 -0
  492. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.mjs +17 -0
  493. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.mjs.map +1 -0
  494. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.mjs +19 -0
  495. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.mjs.map +1 -0
  496. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.mjs +17 -0
  497. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.mjs.map +1 -0
  498. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.mjs +17 -0
  499. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.mjs.map +1 -0
  500. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.mjs +35 -0
  501. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.mjs.map +1 -0
  502. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.mjs +25 -0
  503. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.mjs.map +1 -0
  504. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.mjs +20 -0
  505. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.mjs.map +1 -0
  506. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.mjs +25 -0
  507. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.mjs.map +1 -0
  508. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.mjs +29 -0
  509. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.mjs.map +1 -0
  510. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.mjs +40 -0
  511. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.mjs.map +1 -0
  512. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.mjs +23 -0
  513. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.mjs.map +1 -0
  514. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.mjs +24 -0
  515. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.mjs.map +1 -0
  516. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.mjs +36 -0
  517. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.mjs.map +1 -0
  518. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.mjs +29 -0
  519. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.mjs.map +1 -0
  520. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.mjs +35 -0
  521. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.mjs.map +1 -0
  522. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBoolean.mjs +29 -0
  523. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBoolean.mjs.map +1 -0
  524. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.mjs +31 -0
  525. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.mjs.map +1 -0
  526. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEqual.mjs +37 -0
  527. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEqual.mjs.map +1 -0
  528. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.mjs +34 -0
  529. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.mjs.map +1 -0
  530. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.mjs +36 -0
  531. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.mjs.map +1 -0
  532. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.mjs +27 -0
  533. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.mjs.map +1 -0
  534. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNil.mjs +28 -0
  535. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNil.mjs.map +1 -0
  536. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNull.mjs +25 -0
  537. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNull.mjs.map +1 -0
  538. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNumber.mjs +38 -0
  539. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNumber.mjs.map +1 -0
  540. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.mjs +34 -0
  541. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.mjs.map +1 -0
  542. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.mjs +32 -0
  543. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.mjs.map +1 -0
  544. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.mjs +54 -0
  545. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.mjs.map +1 -0
  546. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.mjs +27 -0
  547. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.mjs.map +1 -0
  548. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isString.mjs +30 -0
  549. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isString.mjs.map +1 -0
  550. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.mjs +29 -0
  551. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.mjs.map +1 -0
  552. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.mjs +27 -0
  553. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.mjs.map +1 -0
  554. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.mjs +25 -0
  555. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.mjs.map +1 -0
  556. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.mjs +39 -0
  557. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.mjs.map +1 -0
  558. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.mjs +34 -0
  559. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.mjs.map +1 -0
  560. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.mjs +23 -0
  561. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.mjs.map +1 -0
  562. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.mjs +65 -0
  563. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.mjs.map +1 -0
  564. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.mjs +52 -0
  565. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.mjs.map +1 -0
  566. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.mjs +26 -0
  567. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.mjs.map +1 -0
  568. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.mjs +21 -0
  569. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.mjs.map +1 -0
  570. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.mjs +30 -0
  571. package/dist/node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.mjs.map +1 -0
  572. package/dist/node_modules/.pnpm/screenfull@6.0.2/node_modules/screenfull/index.mjs +120 -0
  573. package/dist/node_modules/.pnpm/screenfull@6.0.2/node_modules/screenfull/index.mjs.map +1 -0
  574. package/dist/node_modules/.pnpm/sortablejs@1.15.7/node_modules/sortablejs/modular/sortable.esm.mjs +1925 -0
  575. package/dist/node_modules/.pnpm/sortablejs@1.15.7/node_modules/sortablejs/modular/sortable.esm.mjs.map +1 -0
  576. package/dist/utils/async/index.d.ts +35 -0
  577. package/dist/utils/async/index.mjs +94 -0
  578. package/dist/utils/async/index.mjs.map +1 -0
  579. package/dist/utils/date/index.d.ts +74 -0
  580. package/dist/utils/date/index.mjs +190 -0
  581. package/dist/utils/date/index.mjs.map +1 -0
  582. package/dist/utils/dom/index.d.ts +9 -0
  583. package/dist/utils/dom/index.mjs +35 -0
  584. package/dist/utils/dom/index.mjs.map +1 -0
  585. package/dist/utils/index.d.ts +10 -0
  586. package/dist/utils/string/index.d.ts +20 -0
  587. package/dist/utils/string/index.mjs +101 -0
  588. package/dist/utils/string/index.mjs.map +1 -0
  589. package/dist/utils/vue/emits.d.ts +23 -0
  590. package/dist/utils/vue/emits.mjs +47 -0
  591. package/dist/utils/vue/emits.mjs.map +1 -0
  592. package/dist/utils/vue/expose.d.ts +8 -0
  593. package/dist/utils/vue/expose.mjs +16 -0
  594. package/dist/utils/vue/expose.mjs.map +1 -0
  595. package/dist/utils/vue/func.d.ts +10 -0
  596. package/dist/utils/vue/func.mjs +16 -0
  597. package/dist/utils/vue/func.mjs.map +1 -0
  598. package/dist/utils/vue/index.d.ts +13 -0
  599. package/dist/utils/vue/install.d.ts +47 -0
  600. package/dist/utils/vue/install.mjs +123 -0
  601. package/dist/utils/vue/install.mjs.map +1 -0
  602. package/dist/utils/vue/props.d.ts +19 -0
  603. package/dist/utils/vue/props.mjs +41 -0
  604. package/dist/utils/vue/props.mjs.map +1 -0
  605. package/dist/utils/vue/render.d.ts +8 -0
  606. package/dist/utils/vue/render.mjs +17 -0
  607. package/dist/utils/vue/render.mjs.map +1 -0
  608. package/dist/utils/vue/slots.d.ts +18 -0
  609. package/dist/utils/vue/slots.mjs +13 -0
  610. package/dist/utils/vue/slots.mjs.map +1 -0
  611. package/dist/utils/vue/with.d.ts +8 -0
  612. package/dist/utils/vue/with.mjs +15 -0
  613. package/dist/utils/vue/with.mjs.map +1 -0
  614. package/dist/version.d.ts +2 -0
  615. package/dist/version.mjs +7 -0
  616. package/dist/version.mjs.map +1 -0
  617. package/package.json +91 -101
  618. package/dist/index.full.js +0 -27745
  619. package/dist/index.full.js.map +0 -1
  620. package/dist/index.full.min.js +0 -11042
  621. package/dist/index.full.min.js.map +0 -1
  622. package/dist/index.full.min.mjs +0 -11033
  623. package/dist/index.full.min.mjs.map +0 -1
  624. package/dist/index.full.mjs +0 -27737
  625. package/dist/index.full.mjs.map +0 -1
  626. package/dist/styles/index.css +0 -1003
  627. package/dist/styles/index.css.map +0 -1
  628. package/es/_virtual/_rolldown/runtime.mjs +0 -1
  629. package/es/component.d.ts +0 -3
  630. package/es/component.mjs +0 -2
  631. package/es/component.mjs.map +0 -1
  632. package/es/components/avatar/index.d.ts +0 -14
  633. package/es/components/avatar/index.mjs +0 -2
  634. package/es/components/avatar/index.mjs.map +0 -1
  635. package/es/components/avatar/src/avatar.d.ts +0 -125
  636. package/es/components/avatar/src/avatar.mjs +0 -2
  637. package/es/components/avatar/src/avatar.mjs.map +0 -1
  638. package/es/components/button/index.d.ts +0 -15
  639. package/es/components/button/index.mjs +0 -2
  640. package/es/components/button/index.mjs.map +0 -1
  641. package/es/components/button/src/button.d.ts +0 -177
  642. package/es/components/button/src/button.mjs +0 -2
  643. package/es/components/button/src/button.mjs.map +0 -1
  644. package/es/components/carNumber/index.d.ts +0 -9
  645. package/es/components/carNumber/index.mjs +0 -2
  646. package/es/components/carNumber/index.mjs.map +0 -1
  647. package/es/components/carNumber/src/carNumber.d.ts +0 -228
  648. package/es/components/carNumber/src/carNumber.mjs +0 -2
  649. package/es/components/carNumber/src/carNumber.mjs.map +0 -1
  650. package/es/components/carNumber/src/common.d.ts +0 -15
  651. package/es/components/carNumber/src/common.mjs +0 -2
  652. package/es/components/carNumber/src/common.mjs.map +0 -1
  653. package/es/components/contextMenu/index.d.ts +0 -9
  654. package/es/components/contextMenu/index.mjs +0 -2
  655. package/es/components/contextMenu/index.mjs.map +0 -1
  656. package/es/components/contextMenu/src/contextMenu.d.ts +0 -32
  657. package/es/components/contextMenu/src/contextMenu.mjs +0 -2
  658. package/es/components/contextMenu/src/contextMenu.mjs.map +0 -1
  659. package/es/components/contextMenu/src/contextMenu.type.d.ts +0 -33
  660. package/es/components/dialog/index.d.ts +0 -14
  661. package/es/components/dialog/index.mjs +0 -2
  662. package/es/components/dialog/index.mjs.map +0 -1
  663. package/es/components/dialog/src/dialog.d.ts +0 -454
  664. package/es/components/dialog/src/dialog.mjs +0 -2
  665. package/es/components/dialog/src/dialog.mjs.map +0 -1
  666. package/es/components/drawer/index.d.ts +0 -14
  667. package/es/components/drawer/index.mjs +0 -2
  668. package/es/components/drawer/index.mjs.map +0 -1
  669. package/es/components/drawer/src/drawer.d.ts +0 -458
  670. package/es/components/drawer/src/drawer.mjs +0 -2
  671. package/es/components/drawer/src/drawer.mjs.map +0 -1
  672. package/es/components/form/index.d.ts +0 -23
  673. package/es/components/form/index.mjs +0 -2
  674. package/es/components/form/index.mjs.map +0 -1
  675. package/es/components/form/src/form.d.ts +0 -194
  676. package/es/components/form/src/form.mjs +0 -2
  677. package/es/components/form/src/form.mjs.map +0 -1
  678. package/es/components/form/src/formItem.d.ts +0 -204
  679. package/es/components/form/src/formItem.mjs +0 -2
  680. package/es/components/form/src/formItem.mjs.map +0 -1
  681. package/es/components/form/utils/form.d.ts +0 -81
  682. package/es/components/form/utils/form.mjs +0 -2
  683. package/es/components/form/utils/form.mjs.map +0 -1
  684. package/es/components/formItemTip/index.d.ts +0 -12
  685. package/es/components/formItemTip/index.mjs +0 -2
  686. package/es/components/formItemTip/index.mjs.map +0 -1
  687. package/es/components/formItemTip/src/formItemTip.d.ts +0 -22
  688. package/es/components/formItemTip/src/formItemTip.mjs +0 -2
  689. package/es/components/formItemTip/src/formItemTip.mjs.map +0 -1
  690. package/es/components/icon/index.d.ts +0 -12
  691. package/es/components/icon/index.mjs +0 -2
  692. package/es/components/icon/index.mjs.map +0 -1
  693. package/es/components/icon/src/icon.d.ts +0 -39
  694. package/es/components/icon/src/icon.mjs +0 -2
  695. package/es/components/icon/src/icon.mjs.map +0 -1
  696. package/es/components/iconSelector/index.d.ts +0 -7
  697. package/es/components/iconSelector/index.mjs +0 -2
  698. package/es/components/iconSelector/index.mjs.map +0 -1
  699. package/es/components/iconSelector/src/iconSelector.d.ts +0 -23
  700. package/es/components/iconSelector/src/iconSelector.mjs +0 -2
  701. package/es/components/iconSelector/src/iconSelector.mjs.map +0 -1
  702. package/es/components/image/index.d.ts +0 -12
  703. package/es/components/image/index.mjs +0 -2
  704. package/es/components/image/index.mjs.map +0 -1
  705. package/es/components/image/src/image.d.ts +0 -232
  706. package/es/components/image/src/image.mjs +0 -2
  707. package/es/components/image/src/image.mjs.map +0 -1
  708. package/es/components/index.d.ts +0 -22
  709. package/es/components/index.mjs +0 -2
  710. package/es/components/index.mjs.map +0 -1
  711. package/es/components/inputDialogPage/index.d.ts +0 -14
  712. package/es/components/inputDialogPage/index.mjs +0 -2
  713. package/es/components/inputDialogPage/index.mjs.map +0 -1
  714. package/es/components/inputDialogPage/src/inputDialogPage.d.ts +0 -132
  715. package/es/components/inputDialogPage/src/inputDialogPage.mjs +0 -2
  716. package/es/components/inputDialogPage/src/inputDialogPage.mjs.map +0 -1
  717. package/es/components/layoutGrid/index.d.ts +0 -16
  718. package/es/components/layoutGrid/index.mjs +0 -2
  719. package/es/components/layoutGrid/index.mjs.map +0 -1
  720. package/es/components/layoutGrid/src/layoutGrid.d.ts +0 -60
  721. package/es/components/layoutGrid/src/layoutGrid.mjs +0 -2
  722. package/es/components/layoutGrid/src/layoutGrid.mjs.map +0 -1
  723. package/es/components/layoutGrid/src/layoutGrid.type.d.ts +0 -12
  724. package/es/components/layoutGrid/src/layoutGrid.type.mjs +0 -0
  725. package/es/components/layoutGrid/src/layoutGridItem.d.ts +0 -100
  726. package/es/components/layoutGrid/src/layoutGridItem.mjs +0 -2
  727. package/es/components/layoutGrid/src/layoutGridItem.mjs.map +0 -1
  728. package/es/components/select/index.d.ts +0 -22
  729. package/es/components/select/index.mjs +0 -2
  730. package/es/components/select/index.mjs.map +0 -1
  731. package/es/components/select/src/select.d.ts +0 -1206
  732. package/es/components/select/src/select.mjs +0 -2
  733. package/es/components/select/src/select.mjs.map +0 -1
  734. package/es/components/select/src/select.type.d.ts +0 -28
  735. package/es/components/select/src/select.type.mjs +0 -0
  736. package/es/components/select/src/selectOption.d.ts +0 -99
  737. package/es/components/select/src/selectOption.mjs +0 -2
  738. package/es/components/select/src/selectOption.mjs.map +0 -1
  739. package/es/components/selectPage/index.d.ts +0 -14
  740. package/es/components/selectPage/index.mjs +0 -2
  741. package/es/components/selectPage/index.mjs.map +0 -1
  742. package/es/components/selectPage/src/selectPage.d.ts +0 -609
  743. package/es/components/selectPage/src/selectPage.mjs +0 -2
  744. package/es/components/selectPage/src/selectPage.mjs.map +0 -1
  745. package/es/components/selectV2/index.d.ts +0 -14
  746. package/es/components/selectV2/index.mjs +0 -2
  747. package/es/components/selectV2/index.mjs.map +0 -1
  748. package/es/components/selectV2/src/selectV2.d.ts +0 -1399
  749. package/es/components/selectV2/src/selectV2.mjs +0 -2
  750. package/es/components/selectV2/src/selectV2.mjs.map +0 -1
  751. package/es/components/table/images/artwork.mjs +0 -2
  752. package/es/components/table/images/artwork.mjs.map +0 -1
  753. package/es/components/table/images/index.d.ts +0 -4
  754. package/es/components/table/images/notImage.mjs +0 -2
  755. package/es/components/table/images/notImage.mjs.map +0 -1
  756. package/es/components/table/index.d.ts +0 -35
  757. package/es/components/table/index.mjs +0 -2
  758. package/es/components/table/index.mjs.map +0 -1
  759. package/es/components/table/src/page.type.d.ts +0 -145
  760. package/es/components/table/src/page.type.mjs +0 -2
  761. package/es/components/table/src/page.type.mjs.map +0 -1
  762. package/es/components/table/src/table.d.ts +0 -1439
  763. package/es/components/table/src/table.mjs +0 -2
  764. package/es/components/table/src/table.mjs.map +0 -1
  765. package/es/components/table/src/table.state.d.ts +0 -111
  766. package/es/components/table/src/table.state.mjs +0 -0
  767. package/es/components/table/src/table.type.d.ts +0 -261
  768. package/es/components/table/src/table.type.mjs +0 -2
  769. package/es/components/table/src/table.type.mjs.map +0 -1
  770. package/es/components/table/src/tableColumn.d.ts +0 -658
  771. package/es/components/table/src/tableColumn.mjs +0 -2
  772. package/es/components/table/src/tableColumn.mjs.map +0 -1
  773. package/es/components/table/src/tableColumnSettingDialog.d.ts +0 -18
  774. package/es/components/table/src/tableColumnSettingDialog.mjs +0 -2
  775. package/es/components/table/src/tableColumnSettingDialog.mjs.map +0 -1
  776. package/es/components/table/src/tablePagination.d.ts +0 -24
  777. package/es/components/table/src/tablePagination.mjs +0 -2
  778. package/es/components/table/src/tablePagination.mjs.map +0 -1
  779. package/es/components/table/src/tableSearchForm.d.ts +0 -88
  780. package/es/components/table/src/tableSearchForm.mjs +0 -2
  781. package/es/components/table/src/tableSearchForm.mjs.map +0 -1
  782. package/es/components/table/src/tableSearchFormItem.d.ts +0 -37
  783. package/es/components/table/src/tableSearchFormItem.mjs +0 -2
  784. package/es/components/table/src/tableSearchFormItem.mjs.map +0 -1
  785. package/es/components/table/src/useTable.d.ts +0 -32
  786. package/es/components/table/src/useTable.mjs +0 -2
  787. package/es/components/table/src/useTable.mjs.map +0 -1
  788. package/es/components/table/utils/table.d.ts +0 -45
  789. package/es/components/table/utils/table.mjs +0 -2
  790. package/es/components/table/utils/table.mjs.map +0 -1
  791. package/es/components/tree/index.d.ts +0 -15
  792. package/es/components/tree/index.mjs +0 -2
  793. package/es/components/tree/index.mjs.map +0 -1
  794. package/es/components/tree/src/tree.d.ts +0 -562
  795. package/es/components/tree/src/tree.mjs +0 -2
  796. package/es/components/tree/src/tree.mjs.map +0 -1
  797. package/es/components/tree/src/tree.props.d.ts +0 -81
  798. package/es/components/tree/src/tree.props.mjs +0 -2
  799. package/es/components/tree/src/tree.props.mjs.map +0 -1
  800. package/es/components/tree/src/tree.type.d.ts +0 -36
  801. package/es/components/tree/src/tree.type.mjs +0 -0
  802. package/es/components/treeSelect/index.d.ts +0 -14
  803. package/es/components/treeSelect/index.mjs +0 -2
  804. package/es/components/treeSelect/index.mjs.map +0 -1
  805. package/es/components/treeSelect/src/treeSelect.d.ts +0 -965
  806. package/es/components/treeSelect/src/treeSelect.mjs +0 -2
  807. package/es/components/treeSelect/src/treeSelect.mjs.map +0 -1
  808. package/es/components/upload/index.d.ts +0 -15
  809. package/es/components/upload/index.mjs +0 -2
  810. package/es/components/upload/index.mjs.map +0 -1
  811. package/es/components/upload/src/upload.d.ts +0 -529
  812. package/es/components/upload/src/upload.mjs +0 -2
  813. package/es/components/upload/src/upload.mjs.map +0 -1
  814. package/es/components/upload/src/useUpload.d.ts +0 -65
  815. package/es/components/upload/src/useUpload.mjs +0 -2
  816. package/es/components/upload/src/useUpload.mjs.map +0 -1
  817. package/es/components/upload/utils/upload.d.ts +0 -30
  818. package/es/components/upload/utils/upload.mjs +0 -2
  819. package/es/components/upload/utils/upload.mjs.map +0 -1
  820. package/es/components/uploadImage/index.d.ts +0 -14
  821. package/es/components/uploadImage/index.mjs +0 -2
  822. package/es/components/uploadImage/index.mjs.map +0 -1
  823. package/es/components/uploadImage/src/uploadImage.d.ts +0 -579
  824. package/es/components/uploadImage/src/uploadImage.mjs +0 -2
  825. package/es/components/uploadImage/src/uploadImage.mjs.map +0 -1
  826. package/es/components/uploadImages/index.d.ts +0 -14
  827. package/es/components/uploadImages/index.mjs +0 -2
  828. package/es/components/uploadImages/index.mjs.map +0 -1
  829. package/es/components/uploadImages/src/uploadImages.d.ts +0 -548
  830. package/es/components/uploadImages/src/uploadImages.mjs +0 -2
  831. package/es/components/uploadImages/src/uploadImages.mjs.map +0 -1
  832. package/es/constants/index.d.ts +0 -2
  833. package/es/constants/index.mjs +0 -1
  834. package/es/constants/mime.d.ts +0 -61
  835. package/es/constants/mime.mjs +0 -2
  836. package/es/constants/mime.mjs.map +0 -1
  837. package/es/constants/regex.d.ts +0 -78
  838. package/es/constants/regex.mjs +0 -2
  839. package/es/constants/regex.mjs.map +0 -1
  840. package/es/directive.d.ts +0 -2
  841. package/es/directive.mjs +0 -2
  842. package/es/directive.mjs.map +0 -1
  843. package/es/directives/click-copy/index.d.ts +0 -2
  844. package/es/directives/click-copy/index.mjs +0 -2
  845. package/es/directives/click-copy/index.mjs.map +0 -1
  846. package/es/directives/click-debounce/index.d.ts +0 -2
  847. package/es/directives/click-debounce/index.mjs +0 -2
  848. package/es/directives/click-debounce/index.mjs.map +0 -1
  849. package/es/directives/click-draggable/index.d.ts +0 -2
  850. package/es/directives/click-draggable/index.mjs +0 -2
  851. package/es/directives/click-draggable/index.mjs.map +0 -1
  852. package/es/directives/click-icon-copy/index.d.ts +0 -2
  853. package/es/directives/click-icon-copy/index.mjs +0 -2
  854. package/es/directives/click-icon-copy/index.mjs.map +0 -1
  855. package/es/directives/click-longpress/index.d.ts +0 -2
  856. package/es/directives/click-longpress/index.mjs +0 -2
  857. package/es/directives/click-longpress/index.mjs.map +0 -1
  858. package/es/directives/click-throttle/index.d.ts +0 -2
  859. package/es/directives/click-throttle/index.mjs +0 -2
  860. package/es/directives/click-throttle/index.mjs.map +0 -1
  861. package/es/directives/index.d.ts +0 -6
  862. package/es/directives/index.mjs +0 -1
  863. package/es/element-plus.d.ts +0 -2
  864. package/es/element-plus.mjs +0 -2
  865. package/es/element-plus.mjs.map +0 -1
  866. package/es/hooks/index.d.ts +0 -3
  867. package/es/hooks/index.mjs +0 -1
  868. package/es/hooks/use-loading/index.d.ts +0 -4
  869. package/es/hooks/use-loading/index.mjs +0 -2
  870. package/es/hooks/use-loading/index.mjs.map +0 -1
  871. package/es/hooks/use-overlay/index.d.ts +0 -4
  872. package/es/hooks/use-overlay/index.mjs +0 -2
  873. package/es/hooks/use-overlay/index.mjs.map +0 -1
  874. package/es/hooks/use-screenFull/index.d.ts +0 -7
  875. package/es/hooks/use-screenFull/index.mjs +0 -2
  876. package/es/hooks/use-screenFull/index.mjs.map +0 -1
  877. package/es/index.d.ts +0 -14
  878. package/es/index.es.d.ts +0 -6
  879. package/es/index.mjs +0 -2
  880. package/es/index.mjs.map +0 -1
  881. package/es/make-installer.d.ts +0 -6
  882. package/es/make-installer.mjs +0 -2
  883. package/es/make-installer.mjs.map +0 -1
  884. package/es/version.d.ts +0 -1
  885. package/es/version.mjs +0 -2
  886. package/es/version.mjs.map +0 -1
  887. package/global.d.ts +0 -2
  888. package/lib/_virtual/_rolldown/runtime.js +0 -1
  889. package/lib/component.d.ts +0 -3
  890. package/lib/component.js +0 -2
  891. package/lib/component.js.map +0 -1
  892. package/lib/components/avatar/index.d.ts +0 -14
  893. package/lib/components/avatar/index.js +0 -2
  894. package/lib/components/avatar/index.js.map +0 -1
  895. package/lib/components/avatar/src/avatar.d.ts +0 -125
  896. package/lib/components/avatar/src/avatar.js +0 -2
  897. package/lib/components/avatar/src/avatar.js.map +0 -1
  898. package/lib/components/button/index.d.ts +0 -15
  899. package/lib/components/button/index.js +0 -2
  900. package/lib/components/button/index.js.map +0 -1
  901. package/lib/components/button/src/button.d.ts +0 -177
  902. package/lib/components/button/src/button.js +0 -2
  903. package/lib/components/button/src/button.js.map +0 -1
  904. package/lib/components/carNumber/index.d.ts +0 -9
  905. package/lib/components/carNumber/index.js +0 -2
  906. package/lib/components/carNumber/index.js.map +0 -1
  907. package/lib/components/carNumber/src/carNumber.d.ts +0 -228
  908. package/lib/components/carNumber/src/carNumber.js +0 -2
  909. package/lib/components/carNumber/src/carNumber.js.map +0 -1
  910. package/lib/components/carNumber/src/common.d.ts +0 -15
  911. package/lib/components/carNumber/src/common.js +0 -2
  912. package/lib/components/carNumber/src/common.js.map +0 -1
  913. package/lib/components/contextMenu/index.d.ts +0 -9
  914. package/lib/components/contextMenu/index.js +0 -2
  915. package/lib/components/contextMenu/index.js.map +0 -1
  916. package/lib/components/contextMenu/src/contextMenu.d.ts +0 -32
  917. package/lib/components/contextMenu/src/contextMenu.js +0 -2
  918. package/lib/components/contextMenu/src/contextMenu.js.map +0 -1
  919. package/lib/components/contextMenu/src/contextMenu.type.d.ts +0 -33
  920. package/lib/components/contextMenu/src/contextMenu.type.js +0 -0
  921. package/lib/components/dialog/index.d.ts +0 -14
  922. package/lib/components/dialog/index.js +0 -2
  923. package/lib/components/dialog/index.js.map +0 -1
  924. package/lib/components/dialog/src/dialog.d.ts +0 -454
  925. package/lib/components/dialog/src/dialog.js +0 -2
  926. package/lib/components/dialog/src/dialog.js.map +0 -1
  927. package/lib/components/drawer/index.d.ts +0 -14
  928. package/lib/components/drawer/index.js +0 -2
  929. package/lib/components/drawer/index.js.map +0 -1
  930. package/lib/components/drawer/src/drawer.d.ts +0 -458
  931. package/lib/components/drawer/src/drawer.js +0 -2
  932. package/lib/components/drawer/src/drawer.js.map +0 -1
  933. package/lib/components/form/index.d.ts +0 -23
  934. package/lib/components/form/index.js +0 -2
  935. package/lib/components/form/index.js.map +0 -1
  936. package/lib/components/form/src/form.d.ts +0 -194
  937. package/lib/components/form/src/form.js +0 -2
  938. package/lib/components/form/src/form.js.map +0 -1
  939. package/lib/components/form/src/formItem.d.ts +0 -204
  940. package/lib/components/form/src/formItem.js +0 -2
  941. package/lib/components/form/src/formItem.js.map +0 -1
  942. package/lib/components/form/utils/form.d.ts +0 -81
  943. package/lib/components/form/utils/form.js +0 -2
  944. package/lib/components/form/utils/form.js.map +0 -1
  945. package/lib/components/formItemTip/index.d.ts +0 -12
  946. package/lib/components/formItemTip/index.js +0 -2
  947. package/lib/components/formItemTip/index.js.map +0 -1
  948. package/lib/components/formItemTip/src/formItemTip.d.ts +0 -22
  949. package/lib/components/formItemTip/src/formItemTip.js +0 -2
  950. package/lib/components/formItemTip/src/formItemTip.js.map +0 -1
  951. package/lib/components/icon/index.d.ts +0 -12
  952. package/lib/components/icon/index.js +0 -2
  953. package/lib/components/icon/index.js.map +0 -1
  954. package/lib/components/icon/src/icon.d.ts +0 -39
  955. package/lib/components/icon/src/icon.js +0 -2
  956. package/lib/components/icon/src/icon.js.map +0 -1
  957. package/lib/components/iconSelector/index.d.ts +0 -7
  958. package/lib/components/iconSelector/index.js +0 -2
  959. package/lib/components/iconSelector/index.js.map +0 -1
  960. package/lib/components/iconSelector/src/iconSelector.d.ts +0 -23
  961. package/lib/components/iconSelector/src/iconSelector.js +0 -2
  962. package/lib/components/iconSelector/src/iconSelector.js.map +0 -1
  963. package/lib/components/image/index.d.ts +0 -12
  964. package/lib/components/image/index.js +0 -2
  965. package/lib/components/image/index.js.map +0 -1
  966. package/lib/components/image/src/image.d.ts +0 -232
  967. package/lib/components/image/src/image.js +0 -2
  968. package/lib/components/image/src/image.js.map +0 -1
  969. package/lib/components/index.d.ts +0 -22
  970. package/lib/components/index.js +0 -2
  971. package/lib/components/index.js.map +0 -1
  972. package/lib/components/inputDialogPage/index.d.ts +0 -14
  973. package/lib/components/inputDialogPage/index.js +0 -2
  974. package/lib/components/inputDialogPage/index.js.map +0 -1
  975. package/lib/components/inputDialogPage/src/inputDialogPage.d.ts +0 -132
  976. package/lib/components/inputDialogPage/src/inputDialogPage.js +0 -2
  977. package/lib/components/inputDialogPage/src/inputDialogPage.js.map +0 -1
  978. package/lib/components/layoutGrid/index.d.ts +0 -16
  979. package/lib/components/layoutGrid/index.js +0 -2
  980. package/lib/components/layoutGrid/index.js.map +0 -1
  981. package/lib/components/layoutGrid/src/layoutGrid.d.ts +0 -60
  982. package/lib/components/layoutGrid/src/layoutGrid.js +0 -2
  983. package/lib/components/layoutGrid/src/layoutGrid.js.map +0 -1
  984. package/lib/components/layoutGrid/src/layoutGrid.type.d.ts +0 -12
  985. package/lib/components/layoutGrid/src/layoutGrid.type.js +0 -0
  986. package/lib/components/layoutGrid/src/layoutGridItem.d.ts +0 -100
  987. package/lib/components/layoutGrid/src/layoutGridItem.js +0 -2
  988. package/lib/components/layoutGrid/src/layoutGridItem.js.map +0 -1
  989. package/lib/components/select/index.d.ts +0 -22
  990. package/lib/components/select/index.js +0 -2
  991. package/lib/components/select/index.js.map +0 -1
  992. package/lib/components/select/src/select.d.ts +0 -1206
  993. package/lib/components/select/src/select.js +0 -2
  994. package/lib/components/select/src/select.js.map +0 -1
  995. package/lib/components/select/src/select.type.d.ts +0 -28
  996. package/lib/components/select/src/select.type.js +0 -0
  997. package/lib/components/select/src/selectOption.d.ts +0 -99
  998. package/lib/components/select/src/selectOption.js +0 -2
  999. package/lib/components/select/src/selectOption.js.map +0 -1
  1000. package/lib/components/selectPage/index.d.ts +0 -14
  1001. package/lib/components/selectPage/index.js +0 -2
  1002. package/lib/components/selectPage/index.js.map +0 -1
  1003. package/lib/components/selectPage/src/selectPage.d.ts +0 -609
  1004. package/lib/components/selectPage/src/selectPage.js +0 -2
  1005. package/lib/components/selectPage/src/selectPage.js.map +0 -1
  1006. package/lib/components/selectV2/index.d.ts +0 -14
  1007. package/lib/components/selectV2/index.js +0 -2
  1008. package/lib/components/selectV2/index.js.map +0 -1
  1009. package/lib/components/selectV2/src/selectV2.d.ts +0 -1399
  1010. package/lib/components/selectV2/src/selectV2.js +0 -2
  1011. package/lib/components/selectV2/src/selectV2.js.map +0 -1
  1012. package/lib/components/table/images/artwork.js +0 -2
  1013. package/lib/components/table/images/artwork.js.map +0 -1
  1014. package/lib/components/table/images/index.d.ts +0 -4
  1015. package/lib/components/table/images/notImage.js +0 -2
  1016. package/lib/components/table/images/notImage.js.map +0 -1
  1017. package/lib/components/table/index.d.ts +0 -35
  1018. package/lib/components/table/index.js +0 -2
  1019. package/lib/components/table/index.js.map +0 -1
  1020. package/lib/components/table/src/page.type.d.ts +0 -145
  1021. package/lib/components/table/src/page.type.js +0 -2
  1022. package/lib/components/table/src/page.type.js.map +0 -1
  1023. package/lib/components/table/src/table.d.ts +0 -1439
  1024. package/lib/components/table/src/table.js +0 -2
  1025. package/lib/components/table/src/table.js.map +0 -1
  1026. package/lib/components/table/src/table.state.d.ts +0 -111
  1027. package/lib/components/table/src/table.state.js +0 -0
  1028. package/lib/components/table/src/table.type.d.ts +0 -261
  1029. package/lib/components/table/src/table.type.js +0 -2
  1030. package/lib/components/table/src/table.type.js.map +0 -1
  1031. package/lib/components/table/src/tableColumn.d.ts +0 -658
  1032. package/lib/components/table/src/tableColumn.js +0 -2
  1033. package/lib/components/table/src/tableColumn.js.map +0 -1
  1034. package/lib/components/table/src/tableColumnSettingDialog.d.ts +0 -18
  1035. package/lib/components/table/src/tableColumnSettingDialog.js +0 -2
  1036. package/lib/components/table/src/tableColumnSettingDialog.js.map +0 -1
  1037. package/lib/components/table/src/tablePagination.d.ts +0 -24
  1038. package/lib/components/table/src/tablePagination.js +0 -2
  1039. package/lib/components/table/src/tablePagination.js.map +0 -1
  1040. package/lib/components/table/src/tableSearchForm.d.ts +0 -88
  1041. package/lib/components/table/src/tableSearchForm.js +0 -2
  1042. package/lib/components/table/src/tableSearchForm.js.map +0 -1
  1043. package/lib/components/table/src/tableSearchFormItem.d.ts +0 -37
  1044. package/lib/components/table/src/tableSearchFormItem.js +0 -2
  1045. package/lib/components/table/src/tableSearchFormItem.js.map +0 -1
  1046. package/lib/components/table/src/useTable.d.ts +0 -32
  1047. package/lib/components/table/src/useTable.js +0 -2
  1048. package/lib/components/table/src/useTable.js.map +0 -1
  1049. package/lib/components/table/utils/table.d.ts +0 -45
  1050. package/lib/components/table/utils/table.js +0 -2
  1051. package/lib/components/table/utils/table.js.map +0 -1
  1052. package/lib/components/tree/index.d.ts +0 -15
  1053. package/lib/components/tree/index.js +0 -2
  1054. package/lib/components/tree/index.js.map +0 -1
  1055. package/lib/components/tree/src/tree.d.ts +0 -562
  1056. package/lib/components/tree/src/tree.js +0 -2
  1057. package/lib/components/tree/src/tree.js.map +0 -1
  1058. package/lib/components/tree/src/tree.props.d.ts +0 -81
  1059. package/lib/components/tree/src/tree.props.js +0 -2
  1060. package/lib/components/tree/src/tree.props.js.map +0 -1
  1061. package/lib/components/tree/src/tree.type.d.ts +0 -36
  1062. package/lib/components/tree/src/tree.type.js +0 -0
  1063. package/lib/components/treeSelect/index.d.ts +0 -14
  1064. package/lib/components/treeSelect/index.js +0 -2
  1065. package/lib/components/treeSelect/index.js.map +0 -1
  1066. package/lib/components/treeSelect/src/treeSelect.d.ts +0 -965
  1067. package/lib/components/treeSelect/src/treeSelect.js +0 -2
  1068. package/lib/components/treeSelect/src/treeSelect.js.map +0 -1
  1069. package/lib/components/upload/index.d.ts +0 -15
  1070. package/lib/components/upload/index.js +0 -2
  1071. package/lib/components/upload/index.js.map +0 -1
  1072. package/lib/components/upload/src/upload.d.ts +0 -529
  1073. package/lib/components/upload/src/upload.js +0 -2
  1074. package/lib/components/upload/src/upload.js.map +0 -1
  1075. package/lib/components/upload/src/useUpload.d.ts +0 -65
  1076. package/lib/components/upload/src/useUpload.js +0 -2
  1077. package/lib/components/upload/src/useUpload.js.map +0 -1
  1078. package/lib/components/upload/utils/upload.d.ts +0 -30
  1079. package/lib/components/upload/utils/upload.js +0 -2
  1080. package/lib/components/upload/utils/upload.js.map +0 -1
  1081. package/lib/components/uploadImage/index.d.ts +0 -14
  1082. package/lib/components/uploadImage/index.js +0 -2
  1083. package/lib/components/uploadImage/index.js.map +0 -1
  1084. package/lib/components/uploadImage/src/uploadImage.d.ts +0 -579
  1085. package/lib/components/uploadImage/src/uploadImage.js +0 -2
  1086. package/lib/components/uploadImage/src/uploadImage.js.map +0 -1
  1087. package/lib/components/uploadImages/index.d.ts +0 -14
  1088. package/lib/components/uploadImages/index.js +0 -2
  1089. package/lib/components/uploadImages/index.js.map +0 -1
  1090. package/lib/components/uploadImages/src/uploadImages.d.ts +0 -548
  1091. package/lib/components/uploadImages/src/uploadImages.js +0 -2
  1092. package/lib/components/uploadImages/src/uploadImages.js.map +0 -1
  1093. package/lib/constants/index.d.ts +0 -2
  1094. package/lib/constants/index.js +0 -1
  1095. package/lib/constants/mime.d.ts +0 -61
  1096. package/lib/constants/mime.js +0 -2
  1097. package/lib/constants/mime.js.map +0 -1
  1098. package/lib/constants/regex.d.ts +0 -78
  1099. package/lib/constants/regex.js +0 -2
  1100. package/lib/constants/regex.js.map +0 -1
  1101. package/lib/directive.d.ts +0 -2
  1102. package/lib/directive.js +0 -2
  1103. package/lib/directive.js.map +0 -1
  1104. package/lib/directives/click-copy/index.d.ts +0 -2
  1105. package/lib/directives/click-copy/index.js +0 -2
  1106. package/lib/directives/click-copy/index.js.map +0 -1
  1107. package/lib/directives/click-debounce/index.d.ts +0 -2
  1108. package/lib/directives/click-debounce/index.js +0 -2
  1109. package/lib/directives/click-debounce/index.js.map +0 -1
  1110. package/lib/directives/click-draggable/index.d.ts +0 -2
  1111. package/lib/directives/click-draggable/index.js +0 -2
  1112. package/lib/directives/click-draggable/index.js.map +0 -1
  1113. package/lib/directives/click-icon-copy/index.d.ts +0 -2
  1114. package/lib/directives/click-icon-copy/index.js +0 -2
  1115. package/lib/directives/click-icon-copy/index.js.map +0 -1
  1116. package/lib/directives/click-longpress/index.d.ts +0 -2
  1117. package/lib/directives/click-longpress/index.js +0 -2
  1118. package/lib/directives/click-longpress/index.js.map +0 -1
  1119. package/lib/directives/click-throttle/index.d.ts +0 -2
  1120. package/lib/directives/click-throttle/index.js +0 -2
  1121. package/lib/directives/click-throttle/index.js.map +0 -1
  1122. package/lib/directives/index.d.ts +0 -6
  1123. package/lib/directives/index.js +0 -1
  1124. package/lib/element-plus.d.ts +0 -2
  1125. package/lib/element-plus.js +0 -2
  1126. package/lib/element-plus.js.map +0 -1
  1127. package/lib/hooks/index.d.ts +0 -3
  1128. package/lib/hooks/index.js +0 -1
  1129. package/lib/hooks/use-loading/index.d.ts +0 -4
  1130. package/lib/hooks/use-loading/index.js +0 -2
  1131. package/lib/hooks/use-loading/index.js.map +0 -1
  1132. package/lib/hooks/use-overlay/index.d.ts +0 -4
  1133. package/lib/hooks/use-overlay/index.js +0 -2
  1134. package/lib/hooks/use-overlay/index.js.map +0 -1
  1135. package/lib/hooks/use-screenFull/index.d.ts +0 -7
  1136. package/lib/hooks/use-screenFull/index.js +0 -2
  1137. package/lib/hooks/use-screenFull/index.js.map +0 -1
  1138. package/lib/index.d.ts +0 -14
  1139. package/lib/index.es.d.ts +0 -6
  1140. package/lib/index.js +0 -2
  1141. package/lib/index.js.map +0 -1
  1142. package/lib/make-installer.d.ts +0 -6
  1143. package/lib/make-installer.js +0 -2
  1144. package/lib/make-installer.js.map +0 -1
  1145. package/lib/version.d.ts +0 -1
  1146. package/lib/version.js +0 -2
  1147. package/lib/version.js.map +0 -1
  1148. package/styles/common/animation.scss +0 -46
  1149. package/styles/common/common.scss +0 -44
  1150. package/styles/common/loading.scss +0 -29
  1151. package/styles/common/overlay.scss +0 -12
  1152. package/styles/components/carNumber.scss +0 -44
  1153. package/styles/components/contextMenu.scss +0 -34
  1154. package/styles/components/dialog.scss +0 -88
  1155. package/styles/components/drawer.scss +0 -87
  1156. package/styles/components/form.scss +0 -44
  1157. package/styles/components/formItemTip.scss +0 -7
  1158. package/styles/components/image.scss +0 -19
  1159. package/styles/components/select.scss +0 -35
  1160. package/styles/components/selectPage.scss +0 -44
  1161. package/styles/components/selectV2.scss +0 -22
  1162. package/styles/components/table.scss +0 -440
  1163. package/styles/components/tree.scss +0 -115
  1164. package/styles/components/uploadImage.scss +0 -61
  1165. package/styles/components/uploadImages.scss +0 -9
  1166. package/styles/index.scss +0 -19
  1167. package/types/components.d.ts +0 -145
  1168. package/types/env.d.ts +0 -17
  1169. /package/{es/components/contextMenu/src/contextMenu.type.mjs → dist/global.mjs} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.global.min.js","names":["computed","computed","getCurrentInstance","Avatar","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","Symbol","Symbol","symbolTag","INFINITY","symbolProto","Symbol","isObject","funcTag","genTag","isObject","funcToString","funcProto","objectProto","funcToString","hasOwnProperty","isObject","WeakMap","isObject","MAX_SAFE_INTEGER","hasOwnProperty","MAX_SAFE_INTEGER","objectProto","argsTag","objectProto","hasOwnProperty","propertyIsEnumerable","freeExports","freeModule","Buffer","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","freeExports","freeModule","hasOwnProperty","hasOwnProperty","hasOwnProperty","isObject","HASH_UNDEFINED","hasOwnProperty","hasOwnProperty","HASH_UNDEFINED","Map","Map","toString","toString","Symbol","objectTag","hasOwnProperty","Map","Buffer","Promise","Set","mapTag","objectTag","setTag","weakMapTag","dataViewTag","Map","Promise","Set","WeakMap","hasOwnProperty","Uint8Array","Uint8Array","symbolProto","Symbol","symbolValueOf","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","mapTag","getTag","setTag","getTag","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","isObject","getTag","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","COMPARE_PARTIAL_FLAG","boolTag","numberTag","stringTag","Symbol","Uint8Array","COMPARE_PARTIAL_FLAG","hasOwnProperty","hasOwnProperty","getTag","ref","screenfull","Button","watch","toValue","computed","unref","getCurrentInstance","ref","update:modelValue","CarNumber","Icon","ContextMenu","update:modelValue","Dialog","update:modelValue","Drawer","LayoutGrid","LayoutGridItem","FormItemTip","Form","FormItem","update:modelValue","onUpdate:visible","IconSelector","viewer-error","Image","useGlobalSize","ref","reactive","computed","nextTick","dayjs","version","clone","onUpdate:currentPage","Table","TableColumn","update:modelValue","update:label","InputDialogPage","update:modelValue","update:label","Select","SelectOption","update:modelValue","update:label","SelectPage","update:modelValue","end-reached","remove-tag","visible-change","update:label","SelectV2","update:modelValue","update:label","node-click","Tree","update:modelValue","update:label","node-click","TreeSelect","computed","ref","inject","formContextKey","formItemContextKey","uploadProps","genFileId","update:modelValue","update:fileList","Upload","update:modelValue","update:fileList","UploadImage","update:modelValue","update:fileList","UploadImages","copy","copyToClipboard","copyToClipboard","h","ElIcon","CopyDocument","ElMessageBox","ElementPlusIconsVue","ElementPlus","version","FastElementPlusIconsVue"],"sources":["../src/utils/async/index.ts","../src/utils/date/index.ts","../src/utils/dom/index.ts","../src/utils/string/index.ts","../src/utils/vue/emits.ts","../src/utils/vue/expose.ts","../src/utils/vue/func.ts","../src/utils/vue/install.ts","../src/utils/vue/props.ts","../src/utils/vue/render.ts","../src/utils/vue/slots.ts","../src/utils/vue/with.ts","../src/components/avatar/src/avatar.tsx","../src/components/avatar/index.ts","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isString.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBoolean.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNumber.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNil.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNull.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.js","../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.js","../src/hooks/use-loading/index.ts","../src/hooks/use-overlay/index.ts","../node_modules/.pnpm/screenfull@6.0.2/node_modules/screenfull/index.js","../src/hooks/use-screenFull/index.ts","../src/components/button/src/button.tsx","../src/components/button/index.ts","../node_modules/.pnpm/@vueuse+shared@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/shared/dist/index.js","../node_modules/.pnpm/@vueuse+core@14.4.0_vue@3.5.41_typescript@6.0.3_/node_modules/@vueuse/core/dist/index.js","../src/constants/mime.ts","../src/constants/regex.ts","../src/components/carNumber/src/common.ts","../src/components/carNumber/src/carNumber.tsx","../src/components/carNumber/index.ts","../src/components/icon/src/icon.tsx","../src/components/icon/index.ts","../src/components/contextMenu/src/contextMenu.tsx","../src/components/contextMenu/index.ts","../src/components/dialog/src/dialog.tsx","../src/components/dialog/index.ts","../src/components/drawer/src/drawer.tsx","../src/components/drawer/index.ts","../src/components/layoutGrid/src/layoutGrid.tsx","../src/components/layoutGrid/src/layoutGridItem.tsx","../src/components/layoutGrid/index.ts","../src/components/form/utils/form.ts","../src/components/form/src/form.tsx","../src/components/formItemTip/src/formItemTip.tsx","../src/components/formItemTip/index.ts","../src/components/form/src/formItem.tsx","../src/components/form/index.ts","../src/components/iconSelector/src/iconSelector.tsx","../src/components/iconSelector/index.ts","../src/components/image/src/image.tsx","../src/components/image/index.ts","../src/components/table/utils/table.ts","../src/components/table/src/table.type.ts","../src/components/table/images/artwork.png","../src/components/table/images/notImage.png","../src/components/table/src/useTable.ts","../src/components/table/src/tableColumn.tsx","../node_modules/.pnpm/sortablejs@1.15.7/node_modules/sortablejs/modular/sortable.esm.js","../src/components/table/src/tableColumnSettingDialog.tsx","../src/components/table/src/tablePagination.tsx","../src/components/table/src/tableSearchFormItem.tsx","../src/components/table/src/tableSearchForm.tsx","../src/components/table/src/table.tsx","../src/components/table/src/page.type.ts","../src/components/table/index.ts","../src/components/inputDialogPage/src/inputDialogPage.tsx","../src/components/inputDialogPage/index.ts","../src/components/select/src/selectOption.tsx","../src/components/select/src/select.tsx","../src/components/select/index.ts","../src/components/selectPage/src/selectPage.tsx","../src/components/selectPage/index.ts","../src/components/selectV2/src/selectV2.tsx","../src/components/selectV2/index.ts","../src/components/tree/src/tree.tsx","../src/components/tree/index.ts","../src/components/treeSelect/src/treeSelect.tsx","../src/components/treeSelect/index.ts","../node_modules/.pnpm/decimal.js@10.6.0/node_modules/decimal.js/decimal.mjs","../src/components/upload/utils/upload.ts","../src/components/upload/src/useUpload.ts","../src/components/upload/src/upload.tsx","../src/components/upload/index.ts","../src/components/uploadImage/src/uploadImage.tsx","../src/components/uploadImage/index.ts","../src/components/uploadImages/src/uploadImages.tsx","../src/components/uploadImages/index.ts","../src/component.ts","../src/directives/click-copy/index.ts","../src/directives/click-debounce/index.ts","../src/directives/click-draggable/index.ts","../src/directives/click-icon-copy/index.ts","../src/directives/click-longpress/index.ts","../src/directives/click-throttle/index.ts","../src/directive.ts","../src/element-plus.ts","../src/version.ts","../src/make-installer.ts","../src/components/index.ts","../src/index.ts"],"sourcesContent":["/** 统一同步返回值与 PromiseLike 返回值的内部回调签名。 */\ntype AsyncCallback<Arguments extends unknown[], Result> = (...arguments_: Arguments) => Result | PromiseLike<Result>;\n\n/** 记录同一防抖批次中每个调用方独立的 Promise 结算函数。 */\ninterface PromiseWaiter<Result> {\n\t/**\n\t * 使用批次失败原因拒绝当前调用方。\n\t * @param reason - `cancel` 提供的原因或共享回调抛出的原始错误。\n\t */\n\treject: (reason?: unknown) => void;\n\t/**\n\t * 使用共享回调结果完成当前调用方,并采用传入 PromiseLike 的最终状态。\n\t * @param value - 当前防抖批次唯一一次回调执行产生的共享结果。\n\t */\n\tresolve: (value: Result | PromiseLike<Result>) => void;\n}\n\n// 浏览器和 Node.js 的计时器普遍以有符号 32 位整数保存延迟;更大的值可能被\n// 静默截断为约 1 ms,因此公共 API 在进入平台计时器前统一拒绝它。\nconst maximumTimerDelay = 2_147_483_647;\n\n/** Promise 感知的防抖函数。 */\nexport interface DebouncedFunction<Arguments extends unknown[], Result> {\n\t/**\n\t * 调度一次调用;同一等待窗口内的调用共享最后一组参数对应的结果。\n\t * @param arguments_ - 传给原始回调的参数;后续调用会覆盖尚未执行批次保存的参数。\n\t * @returns 当前批次的独立 Promise,最终与共享回调结果保持相同状态。\n\t */\n\t(...arguments_: Arguments): Promise<Result>;\n\t/**\n\t * 取消尚未执行的批次,并拒绝该批次的所有 Promise。\n\t * @param reason - 可选拒绝原因;省略时使用内部取消错误。\n\t */\n\tcancel: (reason?: unknown) => void;\n\t/**\n\t * 立即执行待处理批次,不创建第二次回调执行。\n\t * @returns 待处理批次的共享执行 Promise;没有批次时返回 `undefined`。\n\t */\n\tflush: () => Promise<Result> | undefined;\n\t/** @returns 当前存在尚未开始的批次时返回 `true`;正在执行但没有等待批次时返回 `false`。 */\n\tpending: () => boolean;\n}\n\n/**\n * 校验宿主计时器可以稳定表示的延迟。\n *\n * @param milliseconds - 待校验的毫秒数。\n * @param name - 用于错误消息的参数名称。\n * @returns 原始延迟值,便于调用方在校验后直接使用。\n * @throws `RangeError` 当值非有限、为负数或超过 32 位计时器上限。\n */\nconst assertDelay = (milliseconds: number, name = \"milliseconds\"): number => {\n\tif (!Number.isFinite(milliseconds) || milliseconds < 0 || milliseconds > maximumTimerDelay) {\n\t\tthrow new RangeError(`\\`${name}\\` 必须是 0 到 ${maximumTimerDelay} 之间的有限数。`);\n\t}\n\treturn milliseconds;\n};\n\n/**\n * 创建 Promise 感知的防抖函数。\n *\n * @remarks 同一窗口内的所有调用都会等待最后一组参数对应的执行结果;回调错误会原样\n * 拒绝该批次的全部调用,不会留下永久 pending 的 Promise。\n * @param callback - 同步或异步回调。\n * @param delayMs - 0 至 2,147,483,647 的有限等待时间,默认 300 毫秒。\n * @returns 具有取消、立即执行和状态方法的防抖函数。\n * @throws `RangeError` 当延迟不在平台计时器支持范围内。\n */\nexport function debounce<Arguments extends unknown[], Result>(\n\tcallback: AsyncCallback<Arguments, Result>,\n\tdelayMs = 300\n): DebouncedFunction<Arguments, Awaited<Result>> {\n\tconst delay = assertDelay(delayMs, \"delayMs\");\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet latestArguments: Arguments | undefined;\n\tlet waiters: PromiseWaiter<Awaited<Result>>[] = [];\n\n\t/**\n\t * 执行并结算当前防抖批次。\n\t *\n\t * @returns 最后一组参数对应的回调结果。\n\t * @throws 没有待处理批次时抛出 `Error`;回调错误会原样传播给批次中的全部调用方。\n\t */\n\tconst execute = async (): Promise<Awaited<Result>> => {\n\t\tconst arguments_ = latestArguments;\n\t\tif (arguments_ === undefined) {\n\t\t\tthrow new Error(\"当前没有待处理的防抖调用。\");\n\t\t}\n\t\tlatestArguments = undefined;\n\t\ttimer = undefined;\n\t\tconst currentWaiters = waiters;\n\t\twaiters = [];\n\t\ttry {\n\t\t\tconst result = await callback(...arguments_);\n\t\t\tcurrentWaiters.forEach((waiter) => {\n\t\t\t\twaiter.resolve(result);\n\t\t\t});\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tcurrentWaiters.forEach((waiter) => {\n\t\t\t\twaiter.reject(error);\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n\t/**\n\t * 更新批次参数并返回当前调用方专属的等待 Promise。\n\t *\n\t * @param arguments_ - 本次调用参数;同批次中只有最后一组参数会执行。\n\t * @returns 与当前批次共享结果、但可独立结算的 Promise。\n\t */\n\tconst debounced = (...arguments_: Arguments): Promise<Awaited<Result>> => {\n\t\tlatestArguments = arguments_;\n\t\tif (timer !== undefined) clearTimeout(timer);\n\t\ttimer = setTimeout(() => {\n\t\t\tvoid execute().catch(() => undefined);\n\t\t}, delay);\n\t\treturn new Promise<Awaited<Result>>((resolve, reject) => waiters.push({ reject, resolve }));\n\t};\n\n\tdebounced.cancel = (reason?: unknown): void => {\n\t\tif (timer !== undefined) clearTimeout(timer);\n\t\ttimer = undefined;\n\t\tlatestArguments = undefined;\n\t\tconst error = reason ?? new Error(\"防抖调用已取消。\");\n\t\twaiters.forEach((waiter) => {\n\t\t\twaiter.reject(error);\n\t\t});\n\t\twaiters = [];\n\t};\n\tdebounced.flush = (): Promise<Awaited<Result>> | undefined => {\n\t\tif (timer === undefined) return undefined;\n\t\tclearTimeout(timer);\n\t\treturn execute();\n\t};\n\tdebounced.pending = (): boolean => timer !== undefined;\n\treturn debounced;\n}\n","/** 可转换为日期的输入;数字始终按 Unix 毫秒时间戳处理。 */\nexport type DateInput = Date | number | string;\n\n/**\n * 转换并克隆有效日期。\n *\n * @remarks 数字不进行秒/毫秒猜测;字符串遵循运行时 `Date` 解析规则,跨平台代码应传带显式时区的完整 ISO 8601。\n * @param value - Date、Unix 毫秒时间戳或运行时可解析字符串。\n * @returns 与输入不共享可变状态的新 Date。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function toDate(value: DateInput): Date {\n\tconst date = value instanceof Date ? new Date(value.getTime()) : new Date(value);\n\tif (!Number.isFinite(date.getTime())) {\n\t\tthrow new TypeError(\"该值不是有效日期。\");\n\t}\n\treturn date;\n}\n\n/**\n * 返回输入日期所在本地时区日期的 `00:00:00.000`,不修改输入。\n *\n * @param value - 有效日期输入。\n * @returns 新建的本地日开始时间。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function startOfDay(value: DateInput): Date {\n\tconst date = toDate(value);\n\tdate.setHours(0, 0, 0, 0);\n\treturn toDate(date);\n}\n\n/** 日期选择器单日期快捷项。 */\nexport interface DateShortcut {\n\t/** 面向中文日期选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应日期。\n\t * @returns 每次调用时基于当前本地时间创建的新 `Date`,调用方可安全修改。\n\t */\n\tvalue: () => Date;\n}\n\n/** 日期选择器范围快捷项。 */\nexport interface DateRangeShortcut {\n\t/** 面向中文日期范围选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应的本地日期范围。\n\t * @returns 每次调用时创建的新元组;起点为 `00:00:00.000`,终点为 `23:59:59.999`。\n\t */\n\tvalue: () => [start: Date, end: Date];\n}\n\n/** 历史快捷项允许移动的本地日历单位。 */\ntype CalendarUnit = \"day\" | \"month\" | \"year\";\n\n/**\n * 移动本地日历字段。\n *\n * @remarks 直接使用 Date Setter,以保留历史快捷项在月底和闰年的溢出语义。\n * @param date - 会被原地修改的日期。\n * @param amount - 对目标字段增加的整数。\n * @param unit - 要移动的日历字段。\n */\nconst shiftCalendarFieldInPlace = (date: Date, amount: number, unit: CalendarUnit): void => {\n\tswitch (unit) {\n\t\tcase \"day\":\n\t\t\tdate.setDate(date.getDate() + amount);\n\t\t\tbreak;\n\t\tcase \"month\":\n\t\t\tdate.setMonth(date.getMonth() + amount);\n\t\t\tbreak;\n\t\tcase \"year\":\n\t\t\tdate.setFullYear(date.getFullYear() + amount);\n\t\t\tbreak;\n\t}\n};\n\n/**\n * 创建动态单日期快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @returns 每次执行 `value` 都重新读取当前时间的快捷项。\n */\nconst createDateShortcut = (text: string, amount: number, unit: CalendarUnit): DateShortcut => ({\n\ttext,\n\tvalue: (): Date => {\n\t\tconst date = new Date();\n\t\tshiftCalendarFieldInPlace(date, amount, unit);\n\t\tdate.setHours(0, 0, 0, 0);\n\t\treturn date;\n\t},\n});\n\n/**\n * 创建动态日期范围快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 范围边界相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @param towardFuture - `true` 移动结束边界,`false` 移动开始边界。\n * @returns 每次求值都覆盖完整本地日边界的范围快捷项。\n */\nconst createRangeShortcut = (text: string, amount: number, unit: CalendarUnit, towardFuture: boolean): DateRangeShortcut => ({\n\ttext,\n\tvalue: (): [Date, Date] => {\n\t\tconst start = new Date();\n\t\tconst end = new Date();\n\t\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? amount : -amount, unit);\n\t\tstart.setHours(0, 0, 0, 0);\n\t\tend.setHours(23, 59, 59, 999);\n\t\treturn [start, end];\n\t},\n});\n\n/**\n * 把日期转换为固定中文相对时间文本。\n *\n * @remarks 10 位以内数字按 Unix 秒处理,其余数字按毫秒处理;月份与年份按本地日历月差计算。\n * @param value - Date、时间戳、可解析字符串或空值。\n * @returns 例如“3分钟前”“半年后”;非法或空输入返回空字符串。\n */\nexport function formatChineseRelativeTime(value: Date | number | string | null | undefined): string {\n\tif (value === null || value === undefined) return \"\";\n\tlet timestamp: number;\n\tif (typeof value === \"string\") timestamp = new Date(value).getTime();\n\telse if (typeof value === \"number\") timestamp = value.toString().length <= 10 ? value * 1000 : value;\n\telse timestamp = value.getTime();\n\tif (!Number.isFinite(timestamp)) return \"\";\n\n\tconst minute = 60_000;\n\tconst hour = minute * 60;\n\tconst day = hour * 24;\n\tconst currentTimestamp = Date.now();\n\tconst difference = currentTimestamp - timestamp;\n\tconst minuteDifference = Math.abs(difference) / minute;\n\tconst hourDifference = Math.abs(difference) / hour;\n\tconst dayDifference = Math.abs(difference) / day;\n\tconst currentDate = new Date(currentTimestamp);\n\tconst targetDate = new Date(timestamp);\n\tconst monthDifference = (currentDate.getFullYear() - targetDate.getFullYear()) * 12 + currentDate.getMonth() - targetDate.getMonth();\n\tconst suffix = difference < 0 ? \"后\" : \"前\";\n\tif (Math.abs(monthDifference) >= 12) return `${Math.floor(Math.abs(monthDifference) / 12)}年${suffix}`;\n\tif (Math.abs(monthDifference) >= 6) return `半年${suffix}`;\n\tif (Math.abs(monthDifference) >= 1) return `${Math.abs(monthDifference)}月${suffix}`;\n\tif (dayDifference >= 15) return `半月${suffix}`;\n\tif (dayDifference >= 7) return `${Math.floor(dayDifference / 7)}周${suffix}`;\n\tif (dayDifference >= 1) return `${Math.floor(dayDifference)}天${suffix}`;\n\tif (hourDifference >= 1) return `${Math.floor(hourDifference)}小时${suffix}`;\n\tif (minuteDifference >= 1) return `${Math.floor(minuteDifference)}分钟${suffix}`;\n\treturn \"刚刚\";\n}\n\n/**\n * 创建从今天到前后一个月日期的完整本地日范围。\n *\n * @param towardFuture - `true` 返回今天至一个月后,默认返回一个月前至今天。\n * @returns 每次调用新建的本地日首尾边界。\n */\nexport function createOneMonthRangeFromToday(towardFuture = false): [start: Date, end: Date] {\n\tconst start = new Date();\n\tconst end = new Date();\n\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? 1 : -1, \"month\");\n\tstart.setHours(0, 0, 0, 0);\n\tend.setHours(23, 59, 59, 999);\n\treturn [start, end];\n}\n\n/**\n * 创建面向过去或未来的常用完整日期范围快捷项。\n *\n * @param towardFuture - `true` 创建未来范围,默认创建历史范围。\n * @returns 每次求值都会重新读取当前时间的范围快捷项。\n */\nexport function createDateRangeShortcuts(towardFuture = false): DateRangeShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateRangeShortcut(\"后1天\", 1, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后3天\", 3, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1周\", 7, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1月\", 1, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后3月\", 3, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后6月\", 6, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后1年\", 1, \"year\", true),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateRangeShortcut(\"近1天\", 1, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近3天\", 3, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1周\", 7, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1月\", 1, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近3月\", 3, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近6月\", 6, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近1年\", 1, \"year\", false),\n\t\t\t];\n}\n\n/**\n * 创建面向过去或未来的常用单日期快捷项。\n *\n * @param towardFuture - `true` 创建未来日期,默认创建历史日期。\n * @returns 每次求值都会重新读取当前时间的单日期快捷项。\n */\nexport function createDateShortcuts(towardFuture = false): DateShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"明天\", 1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周后\", 7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月后\", 1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年后\", 1, \"year\"),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"昨天\", -1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周前\", -7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月前\", -1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年前\", -1, \"year\"),\n\t\t\t];\n}\n\n/**\n * 返回今天的本地零点。\n *\n * @returns 新建的 `00:00:00.000` Date。\n */\nexport function getStartOfToday(): Date {\n\treturn startOfDay(new Date());\n}\n","/**\n * 判断文本是否可按十进制数值追加 CSS 单位。\n *\n * @param value - 已去除外围空白的文本。\n * @returns 有限十进制数值返回 `true`;二、八、十六进制前缀返回 `false`。\n */\nconst isNumericString = (value: string): boolean => {\n\tif (value.length === 0 || !Number.isFinite(Number(value))) return false;\n\tconst unsigned = value.startsWith(\"+\") || value.startsWith(\"-\") ? value.slice(1) : value;\n\treturn !/^0[box]/iu.test(unsigned);\n};\n\n/**\n * 为数值或纯数字字符串添加 CSS 单位。\n *\n * @param value - 数字、数字字符串或已有单位的 CSS 值;空值返回空字符串。\n * @param unit - 非零数字使用的单位,默认 `px`。\n * @returns 零统一返回 `\"0\"`;非数字字符串保持原样。\n * @throws `RangeError` 当数字非有限或单位为空。\n */\nexport function addCssUnit(value?: string | number | null, unit = \"px\"): string {\n\tif (value === null || value === undefined || value === \"\") return \"\";\n\tif (unit.length === 0) throw new RangeError(\"`unit` 不能为空。\");\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) throw new RangeError(\"`value` 必须是有限数。\");\n\t\treturn value === 0 ? \"0\" : `${value}${unit}`;\n\t}\n\tconst trimmed = value.trim();\n\tif (!isNumericString(trimmed)) return value;\n\treturn Number(trimmed) === 0 ? \"0\" : `${trimmed}${unit}`;\n}\n","const defaultRandomAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst maximumRandomStringLength = 1_000_000;\nconst maximumRandomValuesPerBatch = 16_384;\nconst uint32Range = 0x1_0000_0000;\n\n/** 使用 Web Crypto 填充随机值,能力缺失时回退到 `Math.random()`。 */\nconst fillRandomValues = (values: Uint8Array<ArrayBuffer> | Uint32Array<ArrayBuffer>): void => {\n\tconst crypto = globalThis.crypto;\n\tif (typeof crypto?.getRandomValues === \"function\") {\n\t\tcrypto.getRandomValues(values);\n\t\treturn;\n\t}\n\tconst range = values.BYTES_PER_ELEMENT === Uint8Array.BYTES_PER_ELEMENT ? 0x100 : uint32Range;\n\tfor (let index = 0; index < values.length; index += 1) values[index] = Math.floor(Math.random() * range);\n};\n\n/**\n * 把文本复制到系统剪贴板。\n *\n * @remarks uni-app 使用 `setClipboardData`;浏览器优先使用 Clipboard API,并在该 API 不可用时\n * 回退到 `document.execCommand(\"copy\")`。平台拒绝访问剪贴板时不会静默忽略错误。\n * @param value - 要复制的文本。\n * @returns 复制完成后兑现的 Promise。\n * @throws `Error` 当运行时没有可用的剪贴板能力或复制失败。\n */\nexport async function copy(value: string): Promise<void> {\n\tconst uni: unknown = Reflect.get(globalThis, \"uni\");\n\tif (uni !== undefined) {\n\t\tif ((typeof uni !== \"object\" && typeof uni !== \"function\") || uni === null) {\n\t\t\tthrow new TypeError(\"全局 uni 对象未提供 `setClipboardData`。\");\n\t\t}\n\t\tconst setClipboardData: unknown = Reflect.get(uni, \"setClipboardData\");\n\t\tif (typeof setClipboardData !== \"function\") throw new TypeError(\"全局 uni 对象未提供 `setClipboardData`。\");\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tReflect.apply(setClipboardData, uni, [\n\t\t\t\t{\n\t\t\t\t\tdata: value,\n\t\t\t\t\tfail: (error: unknown): void => {\n\t\t\t\t\t\treject(error instanceof Error ? error : new Error(\"文本复制到剪贴板失败。\", { cause: error }));\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: resolve,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\t\treturn;\n\t}\n\n\tconst clipboard = globalThis.navigator?.clipboard;\n\tif (globalThis.isSecureContext === true && typeof clipboard?.writeText === \"function\") {\n\t\tawait clipboard.writeText(value);\n\t\treturn;\n\t}\n\n\tconst document = globalThis.document;\n\tif (typeof document?.createElement !== \"function\" || document.body === null || typeof document.execCommand !== \"function\") {\n\t\tthrow new Error(\"当前运行环境不支持访问剪贴板。\");\n\t}\n\tconst textarea = document.createElement(\"textarea\");\n\ttextarea.value = value;\n\ttextarea.style.left = \"-999999px\";\n\ttextarea.style.opacity = \"0\";\n\ttextarea.style.position = \"fixed\";\n\ttextarea.style.top = \"-999999px\";\n\tdocument.body.appendChild(textarea);\n\tlet copied: boolean;\n\ttry {\n\t\ttextarea.focus();\n\t\ttextarea.select();\n\t\tcopied = document.execCommand(\"copy\");\n\t} finally {\n\t\ttextarea.remove();\n\t}\n\tif (!copied) throw new Error(\"文本复制到剪贴板失败。\");\n}\n\n/**\n * 生成随机字符串。\n *\n * @remarks 优先使用 Web Crypto;平台缺少安全随机能力时回退到 `Math.random()`。\n * @param length - 字符数量,必须是 0 至 1,000,000 的安全整数。\n * @param alphabet - 不得为空、包含重复字符或超过 2^32 个 Unicode 码点。\n * @returns 由 `alphabet` 中 Unicode 码点组成的随机文本。\n * @throws `RangeError` 当长度或字母表非法。\n */\nexport function randomString(length: number, alphabet: string = defaultRandomAlphabet): string {\n\tif (!Number.isSafeInteger(length) || length < 0 || length > maximumRandomStringLength) {\n\t\tthrow new RangeError(`\\`length\\` 必须是 0 到 ${maximumRandomStringLength} 之间的安全整数。`);\n\t}\n\tconst characters = Array.from(alphabet);\n\tif (characters.length === 0) throw new RangeError(\"`alphabet` 不能为空。\");\n\tif (new Set(characters).size !== characters.length) throw new RangeError(\"`alphabet` 不能包含重复字符。\");\n\tif (characters.length > 0x1_0000_0000) throw new RangeError(\"`alphabet` 不能包含超过 2^32 个字符。\");\n\tif (length === 0) return \"\";\n\n\t// 丢弃不能平均映射到字母表的尾部区间,避免 `%` 造成前部字符概率偏高。\n\tconst acceptanceLimit = Math.floor(uint32Range / characters.length) * characters.length;\n\tconst result: string[] = [];\n\twhile (result.length < length) {\n\t\tconst remaining = length - result.length;\n\t\t// 分批填充可控制临时内存,并避开 Web Crypto 单次随机数组大小限制。\n\t\tconst samples = new Uint32Array(Math.min(remaining, maximumRandomValuesPerBatch));\n\t\tfillRandomValues(samples);\n\t\tfor (const sample of samples) {\n\t\t\tif (sample >= acceptanceLimit) continue;\n\t\t\tconst character = characters[sample % characters.length];\n\t\t\tif (character === undefined) continue;\n\t\t\tresult.push(character);\n\t\t\tif (result.length === length) break;\n\t\t}\n\t}\n\treturn result.join(\"\");\n}\n","import { computed } from \"vue\";\nimport type { ComputedRef } from \"vue\";\n\n/** Vue Emits 对象中允许的校验器形状。 */\ntype EmitValidator = ((...arguments_: never[]) => unknown) | null;\n/** 事件名到可选参数校验器的内部映射。 */\ntype EmitsOptions = Record<string, EmitValidator>;\n/** 从校验器中提取事件参数;无校验器时保留未知参数。 */\ntype EventArguments<Validator> = Validator extends (...arguments_: infer Arguments) => unknown ? Arguments : unknown[];\n/** 在类型层递归把 kebab-case 事件名转换为 PascalCase。 */\ntype PascalEventName<Value extends string> = Value extends `${infer Head}-${infer Tail}`\n\t? `${Capitalize<Head>}${PascalEventName<Tail>}`\n\t: Capitalize<Value>;\n\n/** 把事件配置映射为 Vue `onXxx` 属性。 */\nexport type EmitHandlers<Emits extends EmitsOptions> = {\n\t[Name in keyof Emits as Name extends string ? `on${PascalEventName<Name>}` : never]: (...arguments_: EventArguments<Emits[Name]>) => void;\n};\n\n/**\n * 把事件名转换为 Vue Handler Prop 名称。\n *\n * @param eventName - Emits 对象中的原始事件名,可使用 kebab-case。\n * @returns `onPascalCase` 形式的属性名。\n * @throws `TypeError` 当事件名包含空片段或无法生成有效 Handler 名称。\n */\nconst toHandlerName = (eventName: string): string => {\n\treturn `on${eventName\n\t\t.split(\"-\")\n\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t.join(\"\")}`;\n};\n\n/**\n * 构建响应式 Vue 事件处理器。\n *\n * @param emits - Vue emits 配置对象。\n * @param emit - `setup` 上下文提供的 emit 函数。\n * @param ignoredEvents - 不需要向子组件透传的事件名。\n * @returns 随配置重新计算的事件处理器对象。\n */\nexport function useEmits<Emits extends EmitsOptions>(\n\temits: Emits,\n\temit: (...arguments_: never[]) => unknown,\n\tignoredEvents: readonly (keyof Emits)[] = []\n): ComputedRef<Partial<EmitHandlers<Emits>>> {\n\tconst ignored = new Set<PropertyKey>(ignoredEvents);\n\tconst emitEvent = emit as unknown as (eventName: string, ...arguments_: unknown[]) => void;\n\treturn computed<Partial<EmitHandlers<Emits>>>(() => {\n\t\tconst handlers = {} as Partial<EmitHandlers<Emits>>;\n\t\tconst handlerNames = new Set<string>();\n\t\tfor (const eventName of Object.keys(emits)) {\n\t\t\tif (ignored.has(eventName)) continue;\n\t\t\tif (eventName.length === 0 || /\\s/u.test(eventName)) throw new TypeError(`无效的 Vue 事件名称:“${eventName}”。`);\n\t\t\tconst handlerName = toHandlerName(eventName);\n\t\t\tif (handlerNames.has(handlerName)) {\n\t\t\t\tthrow new TypeError(`多个 Vue 事件映射到同一处理器属性:“${handlerName}”。`);\n\t\t\t}\n\t\t\thandlerNames.add(handlerName);\n\t\t\tObject.defineProperty(handlers, handlerName, {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: (...arguments_: unknown[]): void => {\n\t\t\t\t\temitEvent(eventName, ...arguments_);\n\t\t\t\t},\n\t\t\t\twritable: true,\n\t\t\t});\n\t\t}\n\t\treturn handlers;\n\t});\n}\n","/**\n * 同时暴露组件实例能力并返回同一个对象,便于 `setup` 返回状态供 Vue Devtools 查看。\n *\n * @param expose - `setup` 上下文提供的 expose 函数。\n * @param exposed - 需要暴露的状态和方法。\n * @returns 原始 exposed 对象。\n */\nexport function useExpose<Exposed extends object>(expose: (exposed?: Exposed) => void, exposed: Exposed): Exposed {\n\texpose(exposed);\n\treturn exposed;\n}\n","/** 可同步或异步返回结果的函数。 */\nexport type AwaitableFunction<Arguments extends readonly unknown[], Result> = (...arguments_: Arguments) => Result | PromiseLike<Result>;\n\n/**\n * 统一执行同步或异步函数,异常保持原样向调用方传播。\n *\n * @param function_ - 可选的待执行函数。\n * @param arguments_ - 原样传入函数的参数。\n * @returns 函数结果;未传函数时返回 `undefined`。\n */\nexport async function callOptionalFunction<Arguments extends readonly unknown[], Result>(\n\tfunction_: AwaitableFunction<Arguments, Result> | null | undefined,\n\t...arguments_: Arguments\n): Promise<Awaited<Result> | undefined> {\n\tif (function_ === null || function_ === undefined) return undefined;\n\treturn Promise.resolve(function_(...arguments_));\n}\n","import type { App } from \"vue\";\n\n/** Vue 组件对象、函数组件或指令对象可接受的最小结构类型。 */\nexport type VueInstallValue = object | ((...arguments_: never[]) => unknown);\n\n/** 为 Vue 组件或指令附加供 Vue 3 `app.use()` 调用的安装能力。 */\nexport type Installable<Value> = Value & {\n\t/**\n\t * 把当前组件或指令安装到 Vue 3 App。\n\t * @param app - Vue 3 App 实例。\n\t */\n\tinstall: (app: App) => void;\n};\n\n/** TSX 组件安装类型;与 {@link Installable} 保持同一运行时契约。 */\nexport type TSXWithInstall<Value> = Installable<Value>;\n\n/** 组件、指令注册所需的 Vue 3 App 能力。 */\ninterface VueAppRegistrationTarget {\n\t/**\n\t * 读取或注册全局组件。\n\t *\n\t * @param name - 全局组件名。\n\t * @param component - 注册时传入的组件;省略时读取现有组件。\n\t * @returns Vue App 返回的现有组件、注册结果或 App 自身。\n\t */\n\tcomponent: (name: string, component?: unknown) => unknown;\n\t/**\n\t * 读取或注册全局指令。\n\t *\n\t * @param name - 不带 `v-` 的全局指令名。\n\t * @param directive - 注册时传入的指令;省略时读取现有指令。\n\t * @returns Vue App 返回的现有指令、注册结果或 App 自身。\n\t */\n\tdirective: (name: string, directive?: unknown) => unknown;\n}\n\n/**\n * 校验 Vue 3 插件安装目标。\n *\n * @param value - Vue 3 App 实例。\n * @returns 只包含组件和指令注册能力的 App。\n * @throws `TypeError` 当目标不是对象或缺少 `component`、`directive` 方法。\n */\nconst assertApp = (value: App): VueAppRegistrationTarget => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tthrow new TypeError(\"安装 Vue 插件需要 Vue 3 App 实例。\");\n\t}\n\tconst app = value as unknown as Partial<VueAppRegistrationTarget>;\n\tif (typeof app.component !== \"function\" || typeof app.directive !== \"function\") {\n\t\tthrow new TypeError(\"安装 Vue 插件需要 `component()` 和 `directive()` 注册方法。\");\n\t}\n\treturn app as VueAppRegistrationTarget;\n};\n\n/**\n * 提取组件的全局注册名称。\n *\n * @param component - 待注册组件。\n * @returns 经过校验的显式名称。\n * @throws `TypeError` 当组件没有非空字符串名称,或名称包含空白。\n */\nconst getComponentName = (component: VueInstallValue): string => {\n\tconst name = (component as { name?: unknown }).name;\n\tif (typeof name !== \"string\" || name.length === 0 || /\\s/u.test(name)) {\n\t\tthrow new TypeError(\"可安装的 Vue 组件必须公开不含空白的非空名称。\");\n\t}\n\treturn name;\n};\n\n/** 预检完成、可以无失败注册的组件动作。 */\ninterface ComponentRegistration {\n\t/** 已校验的组件引用。 */\n\tcomponent: VueInstallValue;\n\t/** 已校验的组件名称。 */\n\tname: string;\n\t/** 目标中是否已经注册了完全相同的组件引用。 */\n\tregistered: boolean;\n}\n\n/**\n * 预检单个组件注册。\n *\n * @remarks 先读取同名组件并完成冲突判断,再返回延迟执行动作;调用方可以在所有组件预检通过后统一提交。\n * @param app - 已校验的 Vue 3 App 注册目标。\n * @param component - 待注册组件。\n * @returns 已校验的组件引用、名称和目标中是否已经存在同一引用。\n * @throws `Error` 当同名位置已由其他组件占用。\n */\nconst prepareComponentRegistration = (app: VueAppRegistrationTarget, component: VueInstallValue): ComponentRegistration => {\n\tconst name = getComponentName(component);\n\tconst existing = app.component(name);\n\tif (existing !== undefined && existing !== component) {\n\t\tthrow new Error(`Vue 组件名称“${name}”已被其他组件注册。`);\n\t}\n\treturn { component, name, registered: existing === component };\n};\n\n/**\n * 为主组件附加 Vue 3 `app.use()` 安装能力。\n *\n * @remarks 函数会直接为 `main` 定义附属组件属性和 `install`。所有组件名称、附属属性\n * 冲突会在修改 `main` 前完成校验;安装到 App 时也会先预检全部全局名称,再统一注册。\n * @param main - 具有非空 `name` 的组件。\n * @param extras - 同时注册并以可枚举属性挂到主组件的附属组件映射。\n * @returns 原始 `main` 引用,并附加类型化的 `install` 与 `extras` 属性。\n * @throws `TypeError` 当组件缺少合法名称、已有 `install`、附属键或名称发生冲突。\n * @throws `Error` 当 App 中同名位置已经注册其他组件。\n */\nexport function withInstall<Main extends VueInstallValue, Extras extends Record<string, VueInstallValue> = Record<never, never>>(\n\tmain: Main,\n\textras?: Extras\n): Installable<Main> & Extras {\n\tconst componentNames = new Set([getComponentName(main)]);\n\tif (\"install\" in Object(main)) throw new TypeError(\"Vue 组件已定义 `install` 属性。\");\n\tconst extraEntries = Object.entries(extras ?? {});\n\tif (extras !== undefined && Object.getOwnPropertySymbols(extras).some((key) => Object.prototype.propertyIsEnumerable.call(extras, key))) {\n\t\tthrow new TypeError(\"Vue 组件附属项必须使用字符串属性名。\");\n\t}\n\tfor (const [key, component] of extraEntries) {\n\t\tconst componentName = getComponentName(component);\n\t\tif (componentNames.has(componentName)) throw new TypeError(`Vue 组件名称“${componentName}”被重复注册。`);\n\t\tcomponentNames.add(componentName);\n\t\tif (key === \"install\" || key in Object(main)) {\n\t\t\tthrow new TypeError(`Vue 组件附属项“${key}”会覆盖主组件上的属性。`);\n\t\t}\n\t}\n\tconst installable = main as Installable<Main> & Extras;\n\tfor (const [key, component] of extraEntries) {\n\t\tObject.defineProperty(installable, key, { configurable: true, enumerable: true, value: component, writable: true });\n\t}\n\tinstallable.install = (value: App): void => {\n\t\tconst app = assertApp(value);\n\t\t// 先完成全部冲突检查,再统一注册,避免安装到一半留下部分全局组件。\n\t\tconst registrations = [main, ...extraEntries.map(([, component]) => component)].map((component) =>\n\t\t\tprepareComponentRegistration(app, component)\n\t\t);\n\t\tfor (const registration of registrations) {\n\t\t\tif (!registration.registered) app.component(registration.name, registration.component);\n\t\t}\n\t};\n\treturn installable;\n}\n\n/**\n * 为不需要单独注册的附属组件附加空安装函数。\n *\n * @remarks 适用于只能作为主组件附属属性使用、但仍需满足 Vue Plugin 类型的组件。\n * 函数直接修改并返回传入组件,不会向 Vue 3 App 注册内容。\n * @param component - 尚未定义或继承 `install` 属性的组件。\n * @returns 原组件引用及无副作用的 `install` 方法。\n * @throws `TypeError` 当组件自身或原型链已经存在 `install`。\n */\nexport function withNoopInstall<Value extends VueInstallValue>(component: Value): TSXWithInstall<Value> {\n\tif (\"install\" in Object(component)) throw new TypeError(\"Vue 组件已定义 `install` 属性。\");\n\tconst installable = component as TSXWithInstall<Value>;\n\tinstallable.install = (): void => undefined;\n\treturn installable;\n}\n\n/**\n * 为 Vue 3 指令附加插件安装能力。\n *\n * @remarks 函数直接修改并返回指令。安装时重复注册同一引用保持幂等,不会覆盖同名的\n * 其他指令。名称只传给 `directive()`,不得包含 `v-` 前缀。\n * @param directive - 尚未定义或继承 `install` 属性的 Vue 指令对象。\n * @param name - 非空、无空白且不以 `v-` 开头的全局指令名。\n * @returns 原指令引用及 Vue Plugin `install` 方法。\n * @throws `TypeError` 当名称非法、指令已有 `install`,或安装目标无效。\n * @throws `Error` 当 App 中同名位置已经注册其他指令。\n */\nexport function withInstallDirective<Value extends VueInstallValue>(directive: Value, name: string): Installable<Value> {\n\tif (name.length === 0 || /\\s/u.test(name) || name.startsWith(\"v-\")) {\n\t\tthrow new TypeError(\"可安装的 Vue 指令名称不能包含空白或 `v-` 前缀。\");\n\t}\n\tif (\"install\" in Object(directive)) throw new TypeError(\"Vue 指令已定义 `install` 属性。\");\n\tconst installable = directive as Installable<Value>;\n\tinstallable.install = (value: App): void => {\n\t\tconst app = assertApp(value);\n\t\tconst existing = app.directive(name);\n\t\tif (existing !== undefined && existing !== directive) {\n\t\t\tthrow new Error(`Vue 指令名称“${name}”已被其他指令注册。`);\n\t\t}\n\t\tif (existing !== directive) app.directive(name, directive);\n\t};\n\treturn installable;\n}\n","import { computed } from \"vue\";\nimport type { ComputedRef, PropType } from \"vue\";\n\n/**\n * 为 Vue 运行时 Props 构造器附加泛型类型。\n *\n * @remarks 该函数只帮助 TypeScript 建模,不验证运行时值与 `Value` 一致;调用方仍应\n * 传入 Vue 支持的构造器或构造器数组。\n * @param runtimeType - Vue 支持的运行时构造器或构造器数组。\n * @returns 同一引用,仅在类型层收窄为 `PropType<Value>`。\n */\nexport function definePropType<Value>(runtimeType: unknown): PropType<Value> {\n\treturn runtimeType as PropType<Value>;\n}\n\n/**\n * 构建需要透传给子组件的响应式 Props。\n *\n * @param props - Vue `setup` 接收的只读响应式 Props 对象。\n * @param rawProps - 子组件的运行时 Props 配置。\n * @param ignoredProps - 不需要透传的 Props 名称。\n * @returns 只包含 `rawProps` 声明键且随 Props 更新的 ComputedRef。\n */\nexport function useProps<Props extends object, RawProps extends object, IgnoredProp extends keyof RawProps = never>(\n\tprops: Props,\n\trawProps: RawProps,\n\tignoredProps: readonly IgnoredProp[] = []\n): ComputedRef<Omit<Pick<Props, Extract<keyof Props, keyof RawProps>>, Extract<IgnoredProp, keyof Props>>> {\n\tconst ignored = new Set<PropertyKey>(ignoredProps);\n\ttype Result = Omit<Pick<Props, Extract<keyof Props, keyof RawProps>>, Extract<IgnoredProp, keyof Props>>;\n\treturn computed<Result>(() => {\n\t\tconst result = {} as Result;\n\t\tfor (const key of Reflect.ownKeys(rawProps)) {\n\t\t\tif (ignored.has(key) || !Object.hasOwn(props, key)) continue;\n\t\t\tObject.defineProperty(result, key, { configurable: true, enumerable: true, value: Reflect.get(props, key), writable: true });\n\t\t}\n\t\treturn result;\n\t});\n}\n","import { getCurrentInstance } from \"vue\";\nimport type { VNode } from \"vue\";\n\n/** `useRender` 需要写入的 Vue 3 内部组件实例字段。 */\ninterface MutableVueComponentInstance {\n\trender?: () => VNode;\n}\n\n/**\n * 在当前 Vue 3 组件实例上安装 TSX 渲染函数。\n * @remarks `setup` 仍可返回状态对象,因此状态能够显示在 Vue Devtools 中。\n * @param render - 当前组件的渲染函数。\n * @throws 不在组件 `setup` 调用栈中使用时抛出 `Error`。\n */\nexport function useRender(render: () => VNode): void {\n\tconst instance = getCurrentInstance();\n\tif (instance === null) throw new Error(\"`useRender` 必须在 `setup` 函数内部调用。\");\n\t(instance as unknown as MutableVueComponentInstance).render = render;\n}\n","import type { SlotsType, VNode } from \"vue\";\n\n/** Slot 名到 Props 类型的内部声明映射。 */\ntype RawSlots = Record<string, unknown>;\n/** 根据 Slot Props 是否为 never 生成无参数或有参数的 Slot 签名。 */\ntype VueSlot<Properties> = [Properties] extends [never] ? () => VNode[] : (properties: Properties) => VNode[];\n\n/** 把 Slot 名称与作用域参数映射为 Vue 3 Slot 函数。 */\nexport type TypedSlots<Slots extends RawSlots> = {\n\t[Name in keyof Slots]: VueSlot<Slots[Name]>;\n};\n\n/** Vue 3 `slots` 选项接受的运行时声明与官方静态类型标记。 */\nexport type TypedSlotsDeclaration<Slots extends RawSlots> = SlotsType<Partial<TypedSlots<Slots>>>;\n\n/**\n * 为 Options API 的 `slots` 选项创建带作用域参数的类型声明。\n *\n * @returns 运行时 `Object` 构造器,并携带仅供 TypeScript 使用的 Slot 类型标记。\n */\nexport function makeSlots<Slots extends RawSlots>(): TypedSlotsDeclaration<Slots> {\n\treturn Object as TypedSlotsDeclaration<Slots>;\n}\n","/**\n * 保留传入值并显式指定其 TypeScript 类型。\n *\n * @remarks 未传值时运行时结果为 `undefined`,仅适合为 reactive 对象的初始字段提供类型。\n * @param data - 可选的原始值。\n * @returns 传入值本身;省略时返回类型化的 `undefined`。\n */\nexport function withDefineType<Value>(data?: Value): Value {\n\treturn data as Value;\n}\n","import { computed, defineComponent, reactive } from \"vue\";\nimport { Picture } from \"@element-plus/icons-vue\";\nimport { ElAvatar, avatarEmits, avatarProps } from \"element-plus\";\nimport { definePropType, makeSlots, useEmits, useExpose, useProps, useRender } from \"../../../utils\";\nimport type { Component } from \"vue\";\n\n/** FaAvatar 的运行时 Props 定义。 */\nexport const faAvatarProps = {\n\t...avatarProps,\n\t/** @description representation type to icon, more info on icon component. */\n\ticon: {\n\t\ttype: definePropType<string | Component>([String, Object, Function]),\n\t\tdefault: (): string | Component => Picture,\n\t},\n\t/** @description Base64图片 */\n\tbase64: Boolean,\n\t/** @description 原图 */\n\toriginal: Boolean,\n\t/** @description 标准 */\n\tnormal: Boolean,\n\t/** @description 小图 */\n\tsmall: Boolean,\n\t/** @description 缩略图 */\n\tthumb: Boolean,\n};\n\n/** FaAvatar 的运行时 Emits 定义。 */\nexport const faAvatarEmits = {\n\t...avatarEmits,\n};\n\n/** FaAvatar 的插槽参数。 */\nexport interface FaAvatarSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: { src?: string };\n}\n\nexport default defineComponent({\n\tname: \"FaAvatar\",\n\tprops: faAvatarProps,\n\temits: faAvatarEmits,\n\tslots: makeSlots<FaAvatarSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst state = reactive({\n\t\t\tsrc: computed(() => {\n\t\t\t\tif (!props.src) return undefined;\n\t\t\t\tif (props.base64) {\n\t\t\t\t\treturn `data:image/png;base64,${props.src}`;\n\t\t\t\t} else if (props.original) {\n\t\t\t\t\treturn props.src;\n\t\t\t\t} else if (props.normal) {\n\t\t\t\t\treturn `${props.src}@!normal`;\n\t\t\t\t} else if (props.small) {\n\t\t\t\t\treturn `${props.src}@!small`;\n\t\t\t\t} else if (props.thumb) {\n\t\t\t\t\treturn `${props.src}@!thumb`;\n\t\t\t\t} else {\n\t\t\t\t\t// 默认使用缩略图\n\t\t\t\t\treturn `${props.src}@!thumb`;\n\t\t\t\t}\n\t\t\t}),\n\t\t});\n\n\t\tconst elAvatarProps = useProps(props, avatarProps, [\"src\"]);\n\t\tconst elAvatarEmits = useEmits(avatarEmits, emit);\n\n\t\tuseRender(() => (\n\t\t\t<ElAvatar {...elAvatarProps.value} {...elAvatarEmits.value} class=\"fa-avatar\" src={state.src}>\n\t\t\t\t{slots.default?.({ src: state.src })}\n\t\t\t</ElAvatar>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 图片路径 */\n\t\t\tsrc: state.src,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Avatar from \"./src/avatar\";\nimport type { faAvatarEmits, faAvatarProps } from \"./src/avatar\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持图片地址规格转换的头像组件。 */\nexport const FaAvatar: TSXWithInstall<typeof Avatar> = withInstall(Avatar);\nexport default FaAvatar;\n\nexport { faAvatarEmits, faAvatarProps } from \"./src/avatar\";\nexport type { FaAvatarSlots } from \"./src/avatar\";\n\n/** FaAvatar 暴露的组件实例类型。 */\nexport type FaAvatarInstance = InstanceType<typeof Avatar>;\n\n/** FaAvatar 的完整 Props 类型。 */\nexport type FaAvatarProps = ExtractPropTypes<typeof faAvatarProps>;\n\n/** FaAvatar 的 Emits 类型。 */\nexport type FaAvatarEmits = typeof faAvatarEmits;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nexport default isBoolean;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nexport default isNull;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n\n // Prevent prototype pollution:\n // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n var index = -1,\n length = path.length;\n\n if (!length) {\n return true;\n }\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n // Always block \"__proto__\" anywhere in the path if it's not expected\n if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n return false;\n }\n\n // Block constructor/prototype as non-terminal traversal keys to prevent\n // escaping the object graph into built-in constructors and prototypes.\n if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n return false;\n }\n }\n\n var obj = parent(object, path);\n return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n","let activeLoadingCount = 0;\nlet hideTimer: ReturnType<typeof setTimeout> | undefined;\n\n/** 全局页面加载效果控制器。 */\nexport const useLoading = {\n\t/** 显示全局页面加载效果。 */\n\tshow: (): void => {\n\t\tactiveLoadingCount++;\n\t\tif (hideTimer !== undefined) {\n\t\t\tclearTimeout(hideTimer);\n\t\t\thideTimer = undefined;\n\t\t}\n\t\t// 判断是否存在加载效果\n\t\tif (!document.querySelector(\".__fa-loading\")) {\n\t\t\tconst bodyEl: Element = document.body;\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.className = \"__fa-loading\";\n\t\t\tdiv.innerHTML = `\n<div class=\"__fa-loading__box\">\n\t<div class=\"__fa-loading__box-warp\">\n\t\t\t<div class=\"__fa-loading__box-warp__item\"></div>\n\t</div>\n</div>\n`;\n\t\t\tbodyEl.insertBefore(div, bodyEl.firstChild);\n\t\t}\n\t\twindow.loading = true;\n\t},\n\t/** 隐藏全局页面加载效果。 */\n\thide: (): void => {\n\t\tactiveLoadingCount = Math.max(activeLoadingCount - 1, 0);\n\t\tif (activeLoadingCount > 0 || !window.loading) return;\n\t\tif (hideTimer !== undefined) clearTimeout(hideTimer);\n\t\thideTimer = setTimeout(() => {\n\t\t\tdocument.querySelector(\".__fa-loading\")?.remove();\n\t\t\twindow.loading = false;\n\t\t\thideTimer = undefined;\n\t\t}, 500);\n\t},\n};\n","let activeOverlayCount = 0;\n\n/** 全局页面遮罩层控制器。 */\nexport const useOverlay = {\n\t/**\n\t * 显示全局页面遮罩层。\n\t *\n\t * @param transparent - 遮罩层透明度。\n\t */\n\tshow: (transparent = 0): void => {\n\t\tactiveOverlayCount++;\n\t\t// 判断是否存在遮罩层\n\t\tlet overlayEl = document.querySelector<HTMLElement>(\".__fa-overlay\");\n\t\tif (!overlayEl) {\n\t\t\tconst bodyEl: Element = document.body;\n\t\t\toverlayEl = document.createElement(\"div\");\n\t\t\toverlayEl.className = \"__fa-overlay\";\n\t\t\tbodyEl.insertBefore(overlayEl, bodyEl.firstChild);\n\t\t}\n\t\toverlayEl.style.backgroundColor = `rgba(0, 0, 0, ${transparent})`;\n\t\twindow.overlay = true;\n\t},\n\t/** 隐藏全局页面遮罩层。 */\n\thide: (): void => {\n\t\tactiveOverlayCount = Math.max(activeOverlayCount - 1, 0);\n\t\tif (activeOverlayCount > 0 || !window.overlay) return;\n\t\tdocument.querySelector(\".__fa-overlay\")?.remove();\n\t\twindow.overlay = false;\n\t},\n};\n","/* eslint-disable promise/prefer-await-to-then */\n\nconst methodMap = [\n\t[\n\t\t'requestFullscreen',\n\t\t'exitFullscreen',\n\t\t'fullscreenElement',\n\t\t'fullscreenEnabled',\n\t\t'fullscreenchange',\n\t\t'fullscreenerror',\n\t],\n\t// New WebKit\n\t[\n\t\t'webkitRequestFullscreen',\n\t\t'webkitExitFullscreen',\n\t\t'webkitFullscreenElement',\n\t\t'webkitFullscreenEnabled',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t// Old WebKit\n\t[\n\t\t'webkitRequestFullScreen',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitCurrentFullScreenElement',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t[\n\t\t'mozRequestFullScreen',\n\t\t'mozCancelFullScreen',\n\t\t'mozFullScreenElement',\n\t\t'mozFullScreenEnabled',\n\t\t'mozfullscreenchange',\n\t\t'mozfullscreenerror',\n\t],\n\t[\n\t\t'msRequestFullscreen',\n\t\t'msExitFullscreen',\n\t\t'msFullscreenElement',\n\t\t'msFullscreenEnabled',\n\t\t'MSFullscreenChange',\n\t\t'MSFullscreenError',\n\t],\n];\n\nconst nativeAPI = (() => {\n\tif (typeof document === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst unprefixedMethods = methodMap[0];\n\tconst returnValue = {};\n\n\tfor (const methodList of methodMap) {\n\t\tconst exitFullscreenMethod = methodList?.[1];\n\t\tif (exitFullscreenMethod in document) {\n\t\t\tfor (const [index, method] of methodList.entries()) {\n\t\t\t\treturnValue[unprefixedMethods[index]] = method;\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t}\n\t}\n\n\treturn false;\n})();\n\nconst eventNameMap = {\n\tchange: nativeAPI.fullscreenchange,\n\terror: nativeAPI.fullscreenerror,\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nlet screenfull = {\n\t// eslint-disable-next-line default-param-last\n\trequest(element = document.documentElement, options) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onFullScreenEntered = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenEntered);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenEntered);\n\n\t\t\tconst returnPromise = element[nativeAPI.requestFullscreen](options);\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\texit() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!screenfull.isFullscreen) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onFullScreenExit = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenExit);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenExit);\n\n\t\t\tconst returnPromise = document[nativeAPI.exitFullscreen]();\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\ttoggle(element, options) {\n\t\treturn screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);\n\t},\n\tonchange(callback) {\n\t\tscreenfull.on('change', callback);\n\t},\n\tonerror(callback) {\n\t\tscreenfull.on('error', callback);\n\t},\n\ton(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t}\n\t},\n\toff(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t}\n\t},\n\traw: nativeAPI,\n};\n\nObject.defineProperties(screenfull, {\n\tisFullscreen: {\n\t\tget: () => Boolean(document[nativeAPI.fullscreenElement]),\n\t},\n\telement: {\n\t\tenumerable: true,\n\t\tget: () => document[nativeAPI.fullscreenElement] ?? undefined,\n\t},\n\tisEnabled: {\n\t\tenumerable: true,\n\t\t// Coerce to boolean in case of old WebKit.\n\t\tget: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n\t},\n});\n\nif (!nativeAPI) {\n\tscreenfull = {isEnabled: false};\n}\n\nexport default screenfull;\n","import { ref } from \"vue\";\nimport { ElMessage } from \"element-plus\";\nimport screenfull from \"screenfull\";\n\nconst isFullscreen = ref(false);\nlet initialized = false;\n\nconst handleFullscreenChange = (): void => {\n\tisFullscreen.value = screenfull.isEnabled && screenfull.isFullscreen;\n};\n\n/** 浏览器全屏状态控制器。 */\nexport const useScreenFull = {\n\t/** 获取当前全屏状态。 */\n\tisFullscreen: (): boolean => isFullscreen.value,\n\t/** 初始化全屏状态监听。 */\n\tinit: (): void => {\n\t\tif (!screenfull.isEnabled || initialized) return;\n\t\tinitialized = true;\n\t\thandleFullscreenChange();\n\t\tscreenfull.on(\"change\", handleFullscreenChange);\n\t},\n\t/** 释放全屏状态监听。 */\n\tdispose: (): void => {\n\t\tif (!screenfull.isEnabled || !initialized) return;\n\t\tscreenfull.off(\"change\", handleFullscreenChange);\n\t\tinitialized = false;\n\t},\n\t/** 切换全屏状态。 */\n\ttoggle: (): void => {\n\t\tif (!screenfull.isEnabled) {\n\t\t\tElMessage.warning(\"当前您的浏览器不支持全屏 ❌\");\n\t\t\treturn;\n\t\t}\n\t\tvoid screenfull.toggle();\n\t},\n\t/** 进入全屏状态。 */\n\tfull: (): void => {\n\t\tif (!screenfull.isEnabled) {\n\t\t\tElMessage.warning(\"当前您的浏览器不支持全屏 ❌\");\n\t\t\treturn;\n\t\t}\n\t\tif (screenfull.isFullscreen) {\n\t\t\treturn;\n\t\t}\n\t\t// const htmlEl = document.querySelector(\"html\");\n\t\t// screenfull.request(htmlEl);\n\t\tvoid screenfull.request();\n\t},\n\t/** 退出全屏状态。 */\n\texit: (): void => {\n\t\tif (!screenfull.isEnabled) {\n\t\t\tElMessage.warning(\"当前您的浏览器不支持全屏 ❌\");\n\t\t\treturn;\n\t\t}\n\t\tif (screenfull.isFullscreen) {\n\t\t\tvoid screenfull.exit();\n\t\t}\n\t},\n};\n","import { computed, defineComponent, reactive, ref, watch, withModifiers } from \"vue\";\nimport { Eleme } from \"@element-plus/icons-vue\";\nimport { ElButton, buttonEmits, buttonProps } from \"element-plus\";\nimport { isFunction } from \"lodash-unified\";\nimport { useOverlay } from \"../../../hooks\";\nimport { callOptionalFunction, definePropType, makeSlots, useExpose, useProps, useRender } from \"../../../utils\";\nimport type { ButtonInstance } from \"element-plus\";\nimport type { Component, VNode } from \"vue\";\n\n/** FaButton 的运行时 Props 定义。 */\nexport const faButtonProps = {\n\t...buttonProps,\n\t/**\n\t * @description customize loading icon component\n\t * @default Eleme\n\t */\n\tloadingIcon: {\n\t\ttype: definePropType<string | Component>([String, Object, Function]),\n\t\tdefault: (): string | Component => Eleme,\n\t},\n\t/** @description 禁用加载 */\n\tdisabledLoading: Boolean,\n};\n\n/** FaButton 的运行时 Emits 定义。 */\nexport const faButtonEmits = {\n\t...buttonEmits,\n\t/**\n\t * @description 点击事件\n\t * @param done 需要手动隐藏Loading\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tclick: (event: MouseEvent, done: () => void = () => {}): boolean => event instanceof MouseEvent && isFunction(done),\n};\n\n/** FaButton 的插槽参数。 */\nexport interface FaButtonSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n\t/** @description 自定义加载中组件 */\n\tloading: never;\n\t/** @description 自定义图标组件 */\n\ticon: never;\n}\n\nexport default defineComponent({\n\tname: \"FaButton\",\n\tprops: faButtonProps,\n\temits: faButtonEmits,\n\tslots: makeSlots<FaButtonSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst state = reactive({\n\t\t\tloading: false,\n\t\t});\n\n\t\tconst buttonRef = ref<ButtonInstance>();\n\n\t\tconst showLoading = (): void => {\n\t\t\tstate.loading = true;\n\t\t\t// 这里默认透明\n\t\t\tuseOverlay.show(0);\n\t\t};\n\n\t\tconst hideLoading = (): void => {\n\t\t\tstate.loading = false;\n\t\t\tuseOverlay.hide();\n\t\t};\n\n\t\tconst handleLoading = (loadingFunction: () => void | Promise<void>): void => {\n\t\t\tstate.loading = true;\n\t\t\tvoid callOptionalFunction(loadingFunction).finally(() => {\n\t\t\t\tstate.loading = false;\n\t\t\t});\n\t\t};\n\n\t\tconst handleClick = (event: MouseEvent): void => {\n\t\t\tif (props.disabledLoading) {\n\t\t\t\t// 回调点击事件\n\t\t\t\temit(\"click\", event);\n\t\t\t} else {\n\t\t\t\tshowLoading();\n\t\t\t\t// 回调点击事件\n\t\t\t\temit(\"click\", event, hideLoading);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * 监听外部 loading 的值\n\t\t */\n\t\twatch(\n\t\t\t() => props.loading,\n\t\t\t(newValue) => {\n\t\t\t\tif (props.disabledLoading) return;\n\t\t\t\tif (newValue) {\n\t\t\t\t\tshowLoading();\n\t\t\t\t} else {\n\t\t\t\t\thideLoading();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tconst elButtonProps = useProps(props, buttonProps, [\"loading\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElButton\n\t\t\t\t{...elButtonProps.value}\n\t\t\t\tref={buttonRef}\n\t\t\t\tclass=\"fa-button\"\n\t\t\t\tloading={state.loading}\n\t\t\t\tonClick={withModifiers((event: Event) => handleClick(event as MouseEvent), [\"prevent\"])}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\tdefault: () => slots.default?.(),\n\t\t\t\t\t...(slots.loading && { loading: (): VNode[] => slots.loading?.() ?? [] }),\n\t\t\t\t\t...(slots.icon && { icon: (): VNode[] => slots.icon?.() ?? [] }),\n\t\t\t\t}}\n\t\t\t</ElButton>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 按钮 html 元素 */\n\t\t\tref: computed(() => buttonRef.value?.ref),\n\t\t\t/** @description 按钮尺寸 */\n\t\t\tsize: computed(() => buttonRef.value?.size),\n\t\t\t/** @description 按钮类型 */\n\t\t\ttype: computed(() => buttonRef.value?.type),\n\t\t\t/** @description 按钮已禁用 */\n\t\t\tdisabled: computed(() => buttonRef.value?.disabled),\n\t\t\t/** @description 是否在两个字符之间插入空格 */\n\t\t\tshouldAddSpace: computed(() => buttonRef.value?.shouldAddSpace),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 按钮加载 */\n\t\t\tdoLoading: handleLoading,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Button, { faButtonEmits, faButtonProps } from \"./src/button\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持异步加载状态和全局遮罩联动的按钮组件。 */\nexport const FaButton: TSXWithInstall<typeof Button> = withInstall(Button);\nexport default FaButton;\n\nexport { faButtonProps, faButtonEmits };\nexport type { FaButtonSlots } from \"./src/button\";\n\n/** FaButton 暴露的组件实例类型。 */\nexport type FaButtonInstance = InstanceType<typeof Button>;\n\n/** FaButton 的完整 Props 类型。 */\nexport type FaButtonProps = ExtractPropTypes<typeof faButtonProps>;\n\n/** FaButton 的 Emits 类型。 */\nexport type FaButtonEmits = typeof faButtonEmits;\n","import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get = typeof fn === \"function\" ? fn : fn.get;\n\tconst set = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset === null || set === void 0 || set(v);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n//#endregion\n//#region createDisposableDirective/index.ts\n/**\n* Utility for authoring disposable directives. Reactive effects created within `mounted` directive hook will be tracked and automatically disposed when directive is unmounted.\n*\n* @see https://vueuse.org/createDisposableDirective\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createDisposableDirective(origin = {}) {\n\tfunction isFunc(fn) {\n\t\treturn typeof fn === \"function\";\n\t}\n\tconst normalisedOrigin = isFunc(origin) ? {\n\t\tmounted: origin,\n\t\tupdated: origin\n\t} : origin;\n\tconst { mounted, unmounted } = normalisedOrigin;\n\tif (!isFunc(mounted)) return origin;\n\tconst scopeWeakMap = /* @__PURE__ */ new WeakMap();\n\treturn {\n\t\t...normalisedOrigin,\n\t\tmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get;\n\t\t\tconst scope = (_scopeWeakMap$get = scopeWeakMap.get(el)) !== null && _scopeWeakMap$get !== void 0 ? _scopeWeakMap$get : effectScope();\n\t\t\tscopeWeakMap.set(el, scope);\n\t\t\tscope.run(() => {\n\t\t\t\tmounted === null || mounted === void 0 || mounted(el, binding, vNode, prevNode);\n\t\t\t});\n\t\t},\n\t\tunmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get2;\n\t\t\t(_scopeWeakMap$get2 = scopeWeakMap.get(el)) === null || _scopeWeakMap$get2 === void 0 || _scopeWeakMap$get2.stop();\n\t\t\tscopeWeakMap.delete(el);\n\t\t\tif (isFunc(unmounted)) unmounted(el, binding, vNode, prevNode);\n\t\t}\n\t};\n}\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n//#endregion\n//#region createInjectionState/index.ts\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef<number>\n* @example createRef(1, false) // ShallowRef<number>\n* @example createRef(1, true) // Ref<number>\n* @example createRef(\"string\") // ShallowRef<string>\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n//#endregion\n//#region utils/is.ts\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n\tif (!condition) console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.hasOwn(val, key);\nconst isIOS = /* #__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n//#endregion\n//#region utils/filters.ts\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\tif (\"cancel\" in filter) Object.assign(wrapper, {\n\t\tcancel: filter.cancel,\n\t\tflush: filter.flush,\n\t\tisPending: filter.isPending\n\t});\n\treturn wrapper;\n}\nconst bypassFilter = (invoke) => {\n\treturn invoke();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tlet lastResolve = noop;\n\tconst _pending = shallowRef(false);\n\tconst _clearTimeout = (timer) => {\n\t\tclearTimeout(timer);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst handler = (invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\t_pending.value = false;\n\t\t\treturn Promise.resolve(invoke());\n\t\t}\n\t\t_pending.value = true;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastResolve = resolve;\n\t\t\tlastInvoker = invoke;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\t_pending.value = false;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\t_pending.value = false;\n\t\t\t\tresolve(invoke());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn Object.assign(handler, {\n\t\tcancel: () => {\n\t\t\tif (timer) {\n\t\t\t\t_clearTimeout(timer);\n\t\t\t\ttimer = void 0;\n\t\t\t}\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\t_pending.value = false;\n\t\t\tlastResolve = noop;\n\t\t},\n\t\tflush: () => {\n\t\t\tif (_pending.value) {\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = void 0;\n\t\t\t\t}\n\t\t\t\tif (maxTimer) {\n\t\t\t\t\tclearTimeout(maxTimer);\n\t\t\t\t\tmaxTimer = void 0;\n\t\t\t\t}\n\t\t\t\t_pending.value = false;\n\t\t\t\tconst resolve = lastResolve;\n\t\t\t\tlastRejector = noop;\n\t\t\t\tlastResolve = noop;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}\n\t\t},\n\t\tisPending: shallowReadonly(_pending)\n\t});\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(reject, ms, reason);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref;\n}\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param fn A function to be executed after delay milliseconds debounced.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param options Options\n*\n* @return A new, debounced, function with isPending, cancel, and flush properties.\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param fn A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n* to `callback` when the throttled-function is executed.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set(v, false);\n\treturn extendRef(ref, {\n\t\tget,\n\t\tset,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n//#endregion\n//#region set/index.ts\n/**\n* Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref, value] = args;\n\t\tref.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n//#endregion\n//#region watchPausable/index.ts\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\", ...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nconst pausableWatch = watchPausable;\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(watchPausable(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(watchPausable(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))));\n}\n//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value) => element[key] === toValue(value);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value) => element === toValue(value));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get = () => count.value;\n\tconst set = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget,\n\t\tset,\n\t\treset\n\t};\n}\n//#endregion\n//#region useDateFormat/index.ts\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count, ...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res;\n\t\tignoreUpdates(() => {\n\t\t\tres = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n//#endregion\n//#region whenever/index.ts\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createDisposableDirective, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\nexport * from \"@vueuse/shared\";\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true, name = \"ReusableTemplate\" } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({\n\t\tname: `${name}.define`,\n\t\tsetup(_, { slots }) {\n\t\t\treturn () => {\n\t\t\t\trender.value = slots.default;\n\t\t\t};\n\t\t}\n\t});\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tname: `${name}.reuse`,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index = instances.value.indexOf(props);\n\t\t\tif (index !== -1) instances.value.splice(index, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n//#endregion\n//#region _configurable.ts\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\treturn watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tconst cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));\n\t\tonCleanup(() => {\n\t\t\tcleanups.forEach((fn) => fn());\n\t\t});\n\t}, { flush: \"post\" });\n}\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target) => {\n\t\t\tif (typeof target === \"string\") return Array.from(window.document.querySelectorAll(target)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target) {\n\t\tconst vm = toValue(target);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target, event) {\n\t\tconst vm = toValue(target);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tlet activeEl = window.document.activeElement;\n\t\t\t\twhile (activeEl === null || activeEl === void 0 ? void 0 : activeEl.shadowRoot) activeEl = activeEl.shadowRoot.activeElement;\n\t\t\t\tif ((activeEl === null || activeEl === void 0 ? void 0 : activeEl.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"MutationObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window = defaultWindow, document = window === null || window === void 0 ? void 0 : window.document, flush = \"sync\" } = options;\n\tif (!window || !document) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed, ev);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document = defaultDocument, isTypedCharValid: isTypedCharValidFn = isTypedCharValid, isFocusedElementEditable: isFocusedElementEditableFn = isFocusedElementEditable } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditableFn() && isTypedCharValidFn(event)) callback(event);\n\t};\n\tif (document) useEventListener(document, \"keydown\", keydown, { passive: true });\n}\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window === null || window === void 0 ? void 0 : window.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document === null || document === void 0 ? void 0 : document.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document });\n\ttrigger();\n\treturn activeElement;\n}\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = null, window = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\tconst limit = toValue(fpsLimit);\n\t\treturn limit ? 1e3 / limit : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp) {\n\t\tif (!isActive.value || !window) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp;\n\t\tconst delta = timestamp - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window) {\n\t\t\twindow.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window) window.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise The promise / async function to be resolved\n* @param initialState The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay > 0) await promiseTimeout(delay);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t\treturn data;\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst events = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"bluetooth\" in navigator);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator === null || navigator === void 0 ? void 0 : navigator.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: shallowReadonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tconst queryStrings = toValue(query).split(\",\");\n\t\t\tmatches.value = queryStrings.some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window) return false;\n\t\treturn window.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue(a)) && match(\"max\", getValue(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"BroadcastChannel\" in window);\n\tconst isClosed = shallowRef(false);\n\tconst channel = shallowRef();\n\tconst data = shallowRef();\n\tconst error = shallowRef(null);\n\tconst post = (data) => {\n\t\tif (channel.value) channel.value.postMessage(data);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state, length } = (window === null || window === void 0 ? void 0 : window.history) || {};\n\t\tconst { origin } = (window === null || window === void 0 ? void 0 : window.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window === null || window === void 0 || (_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tfor (const [key, ref] of objectEntries(refs)) watch(ref, (value) => {\n\t\tif (!(window === null || window === void 0 ? void 0 : window.location) || window.location[key] === value) return;\n\t\twindow.location[key] = value;\n\t});\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (newSourceValue, cachedValue) => newSourceValue === cachedValue, options) {\n\tconst { deepRefs = true, ...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"permissions\" in navigator);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst copyPending = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tlet lastLegacyId = 0;\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value) {\n\t\tconst resolvedValue = value !== null && value !== void 0 ? value : toValue(source);\n\t\tif (isSupported.value && resolvedValue != null) {\n\t\t\tcopyPending.value = true;\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tconst clipboardItem = createClipboardItem(resolvedValue);\n\t\t\t\tawait navigator.clipboard.write([clipboardItem]);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) if (typeof resolvedValue === \"string\") {\n\t\t\t\ttext.value = resolvedValue;\n\t\t\t\tlegacyCopy(resolvedValue);\n\t\t\t} else {\n\t\t\t\tconst currentId = ++lastLegacyId;\n\t\t\t\tconst resolvedText = await resolvedValue();\n\t\t\t\tif (resolvedText != null && currentId === lastLegacyId) {\n\t\t\t\t\ttext.value = resolvedText;\n\t\t\t\t\tlegacyCopy(resolvedText);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t\tcopyPending.value = false;\n\t\t}\n\t}\n\tfunction createClipboardItem(value) {\n\t\tif (typeof value === \"string\") {\n\t\t\ttext.value = value;\n\t\t\treturn new ClipboardItem({ \"text/plain\": value });\n\t\t} else return new ClipboardItem({ \"text/plain\": value().then((resolvedText = \"\") => {\n\t\t\ttext.value = resolvedText;\n\t\t\treturn new Blob([resolvedText], { type: \"text/plain\" });\n\t\t}) });\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tta.setAttribute(\"readonly\", \"\");\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tcopyPending: shallowReadonly(copyPending),\n\t\tisSupported,\n\t\ttext: shallowReadonly(text),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy\n\t};\n}\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst content = shallowRef([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n//#endregion\n//#region ssr-handlers.ts\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* #__PURE__ */ getHandlers();\nfunction getHandlers() {\n\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n//#endregion\n//#region useColorMode/index.ts\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector, attribute, value) => {\n\t\tconst el = typeof selector === \"string\" ? window === null || window === void 0 ? void 0 : window.document.querySelector(selector) : unrefElement(selector);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n//#endregion\n//#region useCountdown/index.ts\nfunction getDefaultScheduler$8(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = 1e3, immediate = false } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options = {}) {\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst { scheduler = getDefaultScheduler$8(options), onTick, onComplete } = options;\n\tconst controls = scheduler(() => {\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\tonTick === null || onTick === void 0 || onTick();\n\t\tif (remaining.value <= 0) {\n\t\t\tcontrols.pause();\n\t\t\tonComplete === null || onComplete === void 0 || onComplete();\n\t\t}\n\t});\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tcontrols.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!controls.isActive.value) {\n\t\t\tif (remaining.value > 0) controls.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tcontrols.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: controls.pause,\n\t\tresume,\n\t\tisActive: controls.isActive\n\t};\n}\n//#endregion\n//#region useCssSupports/index.ts\nfunction useCssSupports(...args) {\n\tlet options = {};\n\tif (typeof toValue(args.at(-1)) === \"object\") options = args.pop();\n\tconst [prop, value] = args;\n\tconst { window = defaultWindow, ssrValue = false } = options;\n\tconst isMounted = useMounted();\n\treturn { isSupported: computed(() => {\n\t\tif (!isClient || !isMounted.value) return ssrValue;\n\t\treturn args.length === 2 ? window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop), toValue(value)) : window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop));\n\t}) };\n}\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window === null || window === void 0 || (_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tconst value = (_window$getComputedSt = window.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim();\n\t\t\tvariable.value = value || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index < 0) index = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode === \"dark\", defaultHandler, mode);\n\t\t\telse defaultHandler(mode);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window) {\n\t\t\tconst onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n\t\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\t\tacceleration.value = {\n\t\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t\t};\n\t\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t\t};\n\t\t\t\trotationRate.value = {\n\t\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t\t};\n\t\t\t\tinterval.value = event.interval;\n\t\t\t});\n\t\t\tuseEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n\t\t}\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"DeviceOrientationEvent\" in window);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window && isSupported.value) useEventListener(window, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window) stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: shallowReadonly(pixelRatio),\n\t\tstop\n\t};\n}\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated } = options;\n\tconst devices = shallowRef([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator.mediaDevices.enumerateDevices();\n\t\tonUpdated === null || onUpdated === void 0 || onUpdated(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tif (!document) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document.visibilityState);\n\tuseEventListener(document, \"visibilitychange\", () => {\n\t\tvisibility.value = document.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n//#endregion\n//#region useDraggable/index.ts\nconst defaultScrollConfig = {\n\tspeed: 2,\n\tmargin: 30,\n\tdirection: \"both\"\n};\nfunction clampContainerScroll(container) {\n\tif (container.scrollLeft > container.scrollWidth - container.clientWidth) container.scrollLeft = Math.max(0, container.scrollWidth - container.clientWidth);\n\tif (container.scrollTop > container.scrollHeight - container.clientHeight) container.scrollTop = Math.max(0, container.scrollHeight - container.clientHeight);\n}\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue, _toValue2, _toValue3, _scrollConfig$directi;\n\tconst { pointerTypes, preventDefault, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0], restrictInView, autoScroll = false } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst scrollConfig = toValue(autoScroll);\n\tconst scrollSettings = typeof scrollConfig === \"object\" ? {\n\t\tspeed: (_toValue2 = toValue(scrollConfig.speed)) !== null && _toValue2 !== void 0 ? _toValue2 : defaultScrollConfig.speed,\n\t\tmargin: (_toValue3 = toValue(scrollConfig.margin)) !== null && _toValue3 !== void 0 ? _toValue3 : defaultScrollConfig.margin,\n\t\tdirection: (_scrollConfig$directi = scrollConfig.direction) !== null && _scrollConfig$directi !== void 0 ? _scrollConfig$directi : defaultScrollConfig.direction\n\t} : defaultScrollConfig;\n\tconst getScrollAxisValues = (value) => typeof value === \"number\" ? [value, value] : [value.x, value.y];\n\tconst handleAutoScroll = (container, targetRect, position) => {\n\t\tconst { clientWidth, clientHeight, scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;\n\t\tconst [marginX, marginY] = getScrollAxisValues(scrollSettings.margin);\n\t\tconst [speedX, speedY] = getScrollAxisValues(scrollSettings.speed);\n\t\tlet deltaX = 0;\n\t\tlet deltaY = 0;\n\t\tif (scrollSettings.direction === \"x\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.x < marginX && scrollLeft > 0) deltaX = -speedX;\n\t\t\telse if (position.x + targetRect.width > clientWidth - marginX && scrollLeft < scrollWidth - clientWidth) deltaX = speedX;\n\t\t}\n\t\tif (scrollSettings.direction === \"y\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.y < marginY && scrollTop > 0) deltaY = -speedY;\n\t\t\telse if (position.y + targetRect.height > clientHeight - marginY && scrollTop < scrollHeight - clientHeight) deltaY = speedY;\n\t\t}\n\t\tif (deltaX || deltaY) container.scrollBy({\n\t\t\tleft: deltaX,\n\t\t\ttop: deltaY,\n\t\t\tbehavior: \"auto\"\n\t\t});\n\t};\n\tlet autoScrollInterval = null;\n\tconst startAutoScroll = () => {\n\t\tconst container = toValue(containerElement);\n\t\tif (container && !autoScrollInterval) autoScrollInterval = setInterval(() => {\n\t\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\t\tconst { x, y } = position.value;\n\t\t\tconst relativePosition = {\n\t\t\t\tx: x - container.scrollLeft,\n\t\t\t\ty: y - container.scrollTop\n\t\t\t};\n\t\t\tif (relativePosition.x >= 0 && relativePosition.y >= 0) {\n\t\t\t\thandleAutoScroll(container, targetRect, relativePosition);\n\t\t\t\trelativePosition.x += container.scrollLeft;\n\t\t\t\trelativePosition.y += container.scrollTop;\n\t\t\t\tposition.value = relativePosition;\n\t\t\t}\n\t\t}, 1e3 / 60);\n\t};\n\tconst stopAutoScroll = () => {\n\t\tif (autoScrollInterval) {\n\t\t\tclearInterval(autoScrollInterval);\n\t\t\tautoScrollInterval = null;\n\t\t}\n\t};\n\tconst isPointerNearEdge = (pointer, container, margin, targetRect) => {\n\t\tconst [marginX, marginY] = typeof margin === \"number\" ? [margin, margin] : [margin.x, margin.y];\n\t\tconst { clientWidth, clientHeight } = container;\n\t\treturn pointer.x < marginX || pointer.x + targetRect.width > clientWidth - marginX || pointer.y < marginY || pointer.y + targetRect.height > clientHeight - marginY;\n\t};\n\tconst checkAutoScroll = () => {\n\t\tif (toValue(options.disabled) || !pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (!container) return;\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst { x, y } = position.value;\n\t\tconst relativePosition = {\n\t\t\tx: x - container.scrollLeft,\n\t\t\ty: y - container.scrollTop\n\t\t};\n\t\tif (isPointerNearEdge(relativePosition, container, scrollSettings.margin, targetRect)) startAutoScroll();\n\t\telse stopAutoScroll();\n\t};\n\tif (toValue(autoScroll)) watch(position, checkAutoScroll);\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + (autoScroll ? 0 : container.scrollLeft) : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + (autoScroll ? 0 : container.scrollTop) : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (container instanceof HTMLElement) clampContainerScroll(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tif (toValue(autoScroll) && container) {\n\t\t\tif (autoScrollInterval === null) handleAutoScroll(container, targetRect, {\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t});\n\t\t\tx += container.scrollLeft;\n\t\t\ty += container.scrollTop;\n\t\t}\n\t\tif (container && (restrictInView || autoScroll)) {\n\t\t\tif (axis !== \"y\") {\n\t\t\t\tconst relativeX = x - container.scrollLeft;\n\t\t\t\tif (relativeX < 0) x = container.scrollLeft;\n\t\t\t\telse if (relativeX > container.clientWidth - targetRect.width) x = container.clientWidth - targetRect.width + container.scrollLeft;\n\t\t\t}\n\t\t\tif (axis !== \"x\") {\n\t\t\t\tconst relativeY = y - container.scrollTop;\n\t\t\t\tif (relativeY < 0) y = container.scrollTop;\n\t\t\t\telse if (relativeY > container.clientHeight - targetRect.height) y = container.clientHeight - targetRect.height + container.scrollTop;\n\t\t\t}\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tif (autoScroll) stopAutoScroll();\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, [\"pointerup\", \"pointercancel\"], end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `\n left: ${position.value.x}px;\n top: ${position.value.y}px;\n ${autoScroll ? \"text-wrap: nowrap;\" : \"\"}\n `)\n\t};\n}\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tif (_options.checkValidity) return _options.checkValidity(items);\n\t\t\tconst types = Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type);\n\t\t\tconst dataTypesValid = checkDataTypes(types);\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"ResizeObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n//#endregion\n//#region useElementByPoint/index.ts\nfunction getDefaultScheduler$7(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document = defaultDocument, multiple, scheduler = getDefaultScheduler$7(options) } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document && \"elementsFromPoint\" in document;\n\t\treturn document && \"elementFromPoint\" in document;\n\t});\n\tconst element = shallowRef(null);\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...scheduler(() => {\n\t\t\tvar _document$elementsFro, _document$elementFrom;\n\t\t\telement.value = toValue(multiple) ? (_document$elementsFro = document === null || document === void 0 ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document === null || document === void 0 ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t\t})\n\t};\n}\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n//#endregion\n//#region useElementOverflow/index.ts\n/**\n* react a dom's overflow state\n* @see https://vueuse.org/useElementOverflow\n* @param target\n* @param option\n*/\nfunction useElementOverflow(target, option = {}) {\n\tconst { observeMutation = false, onUpdated, window = defaultWindow } = option;\n\tconst isXOverflowed = shallowRef(false);\n\tconst isYOverflowed = shallowRef(false);\n\tfunction update(htmlEl) {\n\t\tisXOverflowed.value = htmlEl.scrollWidth > htmlEl.offsetWidth;\n\t\tisYOverflowed.value = htmlEl.scrollHeight > htmlEl.offsetHeight;\n\t}\n\tconst onResizeUpdated = onUpdated;\n\tconst targetEl = computed(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (!el || el instanceof SVGElement) return void 0;\n\t\treturn el;\n\t});\n\tconst targets = () => {\n\t\tconst el = targetEl.value;\n\t\tif (!el || el instanceof SVGElement) return [];\n\t\treturn [el, ...Array.from(el.children).filter((i) => i instanceof HTMLElement)];\n\t};\n\tuseResizeObserver(targets, (entries, observer) => {\n\t\tconst el = targetEl.value;\n\t\tif (el) update(el);\n\t\tonResizeUpdated === null || onResizeUpdated === void 0 || onResizeUpdated(entries, observer);\n\t}, { window });\n\tif (observeMutation) {\n\t\tconst onMutationUpdated = onUpdated;\n\t\tuseMutationObserver(targets, (entries, observer) => {\n\t\t\tconst el = targetEl.value;\n\t\t\tif (el) update(el);\n\t\t\tonMutationUpdated === null || onMutationUpdated === void 0 || onMutationUpdated(entries, observer);\n\t\t}, {\n\t\t\twindow,\n\t\t\t...typeof observeMutation === \"object\" ? observeMutation : {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tcharacterData: true\n\t\t\t}\n\t\t});\n\t}\n\treturn {\n\t\tisXOverflowed: shallowReadonly(isXOverflowed),\n\t\tisYOverflowed: shallowReadonly(isYOverflowed),\n\t\tstop,\n\t\tupdate: () => {\n\t\t\tconst el = targetEl.value;\n\t\t\tif (el && window) update(el);\n\t\t}\n\t};\n}\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele && \"offsetWidth\" in ele) if (box === \"content-box\" && window) {\n\t\t\tconst cs = window.getComputedStyle(ele);\n\t\t\tconst padX = Number.parseFloat(cs.paddingLeft) + Number.parseFloat(cs.paddingRight);\n\t\t\tconst padY = Number.parseFloat(cs.paddingTop) + Number.parseFloat(cs.paddingBottom);\n\t\t\tconst bdX = Number.parseFloat(cs.borderLeftWidth) + Number.parseFloat(cs.borderRightWidth);\n\t\t\tconst bdY = Number.parseFloat(cs.borderTopWidth) + Number.parseFloat(cs.borderBottomWidth);\n\t\t\twidth.value = ele.offsetWidth - padX - bdX;\n\t\t\theight.value = ele.offsetHeight - padY - bdY;\n\t\t} else {\n\t\t\twidth.value = ele.offsetWidth;\n\t\t\theight.value = ele.offsetHeight;\n\t\t}\n\t\telse if (ele) {\n\t\t\twidth.value = initialSize.width;\n\t\t\theight.value = initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects changes to a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin, threshold = 0, window = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"IntersectionObserver\" in window);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\ttoValue(rootMargin),\n\t\tisActive.value\n\t], ([targets, root, rootMargin]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementVisibility/index.ts\nfunction useElementVisibility(element, options = {}) {\n\tconst { window = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false, initialValue = false } = options;\n\tconst isVisible = shallowRef(initialValue);\n\tconst observerController = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = isVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\tisVisible.value = isIntersecting;\n\t\tif (once) watchOnce(isVisible, () => {\n\t\t\tobserverController.stop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow,\n\t\tthreshold,\n\t\trootMargin\n\t});\n\treturn options.controls ? {\n\t\t...observerController,\n\t\tisVisible\n\t} : isVisible;\n}\n//#endregion\n//#region useEventBus/internal.ts\nconst events = /* @__PURE__ */ new Map();\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tfunction on(listener) {\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\ttryOnScopeDispose(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document === null || document === void 0 ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document === null || document === void 0 ? void 0 : document.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument === null || document === void 0 || document.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tif (currentExecuteCounter === executeCounter) {\n\t\t\t\terror.value = errorData;\n\t\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\t}\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch]) => refetch && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: shallowReadonly(isFinished),\n\t\tisFetching: shallowReadonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch]) => refetch && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document ? document.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tconst result = event.target;\n\t\t\t\tfiles.value = result.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options.multiple);\n\t\tel.accept = toValue(options.accept);\n\t\tel.webkitdirectory = toValue(options.directory);\n\t\tif (hasOwn(options, \"capture\")) el.capture = toValue(options.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document === null || document === void 0 ? void 0 : document.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document && m in document);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document === null || document === void 0 ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document && document[fullscreenEnabled.value] != null) return document[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[fullscreenEnabled.value]) != null) return Boolean(target[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document === null || document === void 0 ? void 0 : document[exitMethod.value]) != null) await document[exitMethod.value]();\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[exitMethod.value]) != null) await target[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target = targetRef.value;\n\t\tif (requestMethod.value && (target === null || target === void 0 ? void 0 : target[requestMethod.value]) != null) {\n\t\t\tawait target[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getGamepads\" in navigator);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) {\n\t\t\tif (!gamepad) continue;\n\t\t\tconst index = gamepads.value.findIndex((x) => x.index === gamepad.index);\n\t\t\tif (index > -1) gamepads.value[index] = stateFromGamepad(gamepad);\n\t\t}\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"geolocation\" in navigator);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = shallowRef({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator) navigator.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events = defaultEvents$1, window = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window) {\n\t\tconst document = window.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events) useEventListener(window, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document, \"visibilitychange\", () => {\n\t\t\tif (document.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the <img> tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x) {\n\t\t\tscrollTo(x, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y) {\n\t\t\tscrollTo(void 0, y);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = window.getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window.document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window) return;\n\t\tconst eventTarget = (_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target;\n\t\tsetArrivedState(eventTarget);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = shallowRef();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tconst canLoad = computed(() => {\n\t\tif (!observedElement.value) return false;\n\t\treturn canLoadMore(observedElement.value);\n\t});\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoad.value || promise.value) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\tpromise.value = null;\n\t\t\tnextTick(() => checkAndLoad());\n\t\t});\n\t}\n\ttryOnUnmounted(watch(() => [\n\t\tstate.arrivedState[direction],\n\t\tisElementVisible.value,\n\t\tcanLoad.value\n\t], checkAndLoad, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t}));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events = defaultEvents, document = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document) events.forEach((listenerEvent) => {\n\t\tuseEventListener(document, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.localStorage, options);\n}\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n//#endregion\n//#region useMagicKeys/index.ts\n/**\n* Reactive keys pressed state, with magical keys combination support.\n*\n* @see https://vueuse.org/useMagicKeys\n*/\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = /* @__PURE__ */ new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (!key) return;\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key of values) {\n\t\t\tusedKeys.add(key);\n\t\t\tsetRefs(key, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key) => {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = shallowRef([]);\n\tconst tracks = shallowRef([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = Boolean(document && \"pictureInPictureEnabled\" in document);\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `<source>` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src, type, media }) => {\n\t\t\tconst source = document.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n//#endregion\n//#region useMemory/index.ts\nfunction getDefaultScheduler$6(options) {\n\tif (\"interval\" in options || \"immediate\" in options || \"immediateCallback\" in options) {\n\t\tconst { interval = 1e3, immediate, immediateCallback } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, {\n\t\t\timmediate,\n\t\t\timmediateCallback\n\t\t});\n\t}\n\treturn useIntervalFn;\n}\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = shallowRef();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { scheduler = getDefaultScheduler$6 } = options;\n\t\tscheduler(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window = defaultWindow, target = window, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window) {\n\t\t\t_prevScrollX = window.scrollX;\n\t\t\t_prevScrollY = window.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window === null || window === void 0 ? void 0 : window.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tfor (const rect of el.getClientRects()) {\n\t\t\tconst { left, top, width, height } = rect;\n\t\t\telementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n\t\t\telementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n\t\t\telementHeight.value = height;\n\t\t\telementWidth.value = width;\n\t\t\tconst elX = x.value - elementPositionX.value;\n\t\t\tconst elY = y.value - elementPositionY.value;\n\t\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\t\tif (handleOutside || !isOutside.value) {\n\t\t\t\telementX.value = elX;\n\t\t\t\telementY.value = elY;\n\t\t\t}\n\t\t\tif (!isOutside.value) break;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"language\" in navigator);\n\tconst language = shallowRef(navigator === null || navigator === void 0 ? void 0 : navigator.language);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tif (navigator) language.value = navigator.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"connection\" in navigator);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator) return;\n\t\tisOnline.value = navigator.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window) {\n\t\tuseEventListener(window, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: shallowReadonly(isOnline),\n\t\tsaveData: shallowReadonly(saveData),\n\t\tofflineAt: shallowReadonly(offlineAt),\n\t\tonlineAt: shallowReadonly(onlineAt),\n\t\tdownlink: shallowReadonly(downlink),\n\t\tdownlinkMax: shallowReadonly(downlinkMax),\n\t\teffectiveType: shallowReadonly(effectiveType),\n\t\trtt: shallowReadonly(rtt),\n\t\ttype: shallowReadonly(type)\n\t};\n}\n//#endregion\n//#region useNow/index.ts\nfunction getDefaultScheduler$5(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (fn) => useRafFn(fn, { immediate }) : (fn) => useIntervalFn(fn, interval, options);\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$5(options) } = options;\n\tconst now = shallowRef(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = scheduler(update);\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn shallowReadonly(url);\n}\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value) {\n\t\t\t_value.value = clamp(value, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window) return;\n\t\tevent = event || window.event;\n\t\tconst from = event.relatedTarget || event.toElement;\n\t\tisLeft.value = !from;\n\t};\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n\tconst screenOrientation = isSupported.value ? window.screen.orientation : {};\n\tconst orientation = shallowRef(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else {\n\t\t\t\tconst value = -(y.value - height.value / 2) / height.value;\n\t\t\t\treturn mouseRollAdjust(value);\n\t\t\t}\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else {\n\t\t\t\tconst value = (x.value - width.value / 2) / width.value;\n\t\t\t\treturn mouseTiltAdjust(value);\n\t\t\t}\n\t\t}),\n\t\tsource\n\t};\n}\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window = defaultWindow, immediate = true, ...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"PerformanceObserver\" in window);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n};\nconst keys = /* #__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document && \"pointerLockElement\" in document);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"pointerup\", \"pointercancel\"], (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: shallowReadonly(isSwiping),\n\t\tdirection: shallowReadonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef([\"en\"]);\n\tconst navigator = window.navigator;\n\tconst value = shallowRef(navigator.languages);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tvalue.value = navigator.languages;\n\t}, { passive: true });\n\treturn value;\n}\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n\t\tconst resolveWithElement = (el) => {\n\t\t\tscriptTag.value = el;\n\t\t\tresolve(el);\n\t\t\treturn el;\n\t\t};\n\t\tif (!document) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet shouldAppend = false;\n\t\tlet el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (!el) {\n\t\t\tel = document.createElement(\"script\");\n\t\t\tel.type = type;\n\t\t\tel.async = async;\n\t\t\tel.src = toValue(src);\n\t\t\tif (defer) el.defer = defer;\n\t\t\tif (crossOrigin) el.crossOrigin = crossOrigin;\n\t\t\tif (noModule) el.noModule = noModule;\n\t\t\tif (referrerPolicy) el.referrerPolicy = referrerPolicy;\n\t\t\tif (nonce) el.nonce = nonce;\n\t\t\tObject.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value));\n\t\t\tshouldAppend = true;\n\t\t} else if (el.hasAttribute(\"data-loaded\")) resolveWithElement(el);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"load\", () => {\n\t\t\tel.setAttribute(\"data-loaded\", \"true\");\n\t\t\tonLoaded(el);\n\t\t\tresolveWithElement(el);\n\t\t}, listenerOptions);\n\t\tif (shouldAppend) el = document.head.appendChild(el);\n\t\tif (!waitForScriptLoad) resolveWithElement(el);\n\t});\n\t/**\n\t* Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst load = (waitForScriptLoad = true) => {\n\t\tif (!_promise) _promise = loadScript(waitForScriptLoad);\n\t\treturn _promise;\n\t};\n\t/**\n\t* Unload the script specified by `src`.\n\t*/\n\tconst unload = () => {\n\t\tif (!document) return;\n\t\t_promise = null;\n\t\tif (scriptTag.value) scriptTag.value = null;\n\t\tconst el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (el) document.head.removeChild(el);\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnUnmounted(unload);\n\treturn {\n\t\tscriptTag,\n\t\tload,\n\t\tunload\n\t};\n}\n//#endregion\n//#region useScrollLock/index.ts\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n//#endregion\n//#region useSessionStorage/index.ts\n/**\n* Reactive SessionStorage.\n*\n* @see https://vueuse.org/useSessionStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useSessionStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.sessionStorage, options);\n}\n//#endregion\n//#region useShare/index.ts\n/**\n* Reactive Web Share API.\n*\n* @see https://vueuse.org/useShare\n* @param shareOptions\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useShare(shareOptions = {}, options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst _navigator = navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => _navigator && \"canShare\" in _navigator);\n\tconst share = async (overrideOptions = {}) => {\n\t\tif (isSupported.value) {\n\t\t\tconst data = {\n\t\t\t\t...toValue(shareOptions),\n\t\t\t\t...toValue(overrideOptions)\n\t\t\t};\n\t\t\tlet granted = false;\n\t\t\tif (_navigator.canShare) granted = _navigator.canShare(data);\n\t\t\tif (granted) return _navigator.share(data);\n\t\t}\n\t};\n\treturn {\n\t\tisSupported,\n\t\tshare\n\t};\n}\n//#endregion\n//#region useSorted/index.ts\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n\tconst [source] = args;\n\tlet compareFn = defaultCompare;\n\tlet options = {};\n\tif (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tvar _options$compareFn;\n\t\toptions = args[1];\n\t\tcompareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare;\n\t} else {\n\t\tvar _args$;\n\t\tcompareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare;\n\t}\n\telse if (args.length > 2) {\n\t\tvar _args$2, _args$3;\n\t\tcompareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare;\n\t\toptions = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {};\n\t}\n\tconst { dirty = false, sortFn = defaultSortFn } = options;\n\tif (!dirty) return computed(() => sortFn([...toValue(source)], compareFn));\n\twatchEffect(() => {\n\t\tconst result = sortFn(toValue(source), compareFn);\n\t\tif (isRef(source)) source.value = result;\n\t\telse source.splice(0, source.length, ...result);\n\t});\n\treturn source;\n}\n//#endregion\n//#region useSpeechRecognition/index.ts\n/**\n* Reactive SpeechRecognition.\n*\n* @see https://vueuse.org/useSpeechRecognition\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition\n* @param options\n*/\nfunction useSpeechRecognition(options = {}) {\n\tconst { interimResults = true, continuous = true, maxAlternatives = 1, window = defaultWindow } = options;\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst isListening = shallowRef(false);\n\tconst isFinal = shallowRef(false);\n\tconst result = shallowRef(\"\");\n\tconst confidence = shallowRef(0);\n\tconst error = shallowRef(void 0);\n\tlet recognition;\n\tconst start = () => {\n\t\tisListening.value = true;\n\t};\n\tconst stop = () => {\n\t\tisListening.value = false;\n\t};\n\tconst toggle = (value = !isListening.value) => {\n\t\tif (value) start();\n\t\telse stop();\n\t};\n\tconst SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => SpeechRecognition);\n\tif (isSupported.value) {\n\t\trecognition = new SpeechRecognition();\n\t\trecognition.continuous = continuous;\n\t\trecognition.interimResults = interimResults;\n\t\trecognition.lang = toValue(lang);\n\t\trecognition.maxAlternatives = maxAlternatives;\n\t\trecognition.onstart = () => {\n\t\t\tisListening.value = true;\n\t\t\tisFinal.value = false;\n\t\t};\n\t\twatch(lang, (lang) => {\n\t\t\tif (recognition && !isListening.value) recognition.lang = lang;\n\t\t});\n\t\trecognition.onresult = (event) => {\n\t\t\tconst currentResult = event.results[event.resultIndex];\n\t\t\tconst { transcript, confidence: alternativeConfidence } = currentResult[0];\n\t\t\tisFinal.value = currentResult.isFinal;\n\t\t\tresult.value = transcript;\n\t\t\tconfidence.value = alternativeConfidence;\n\t\t\terror.value = void 0;\n\t\t};\n\t\trecognition.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\trecognition.onend = () => {\n\t\t\tisListening.value = false;\n\t\t\trecognition.lang = toValue(lang);\n\t\t};\n\t\twatch(isListening, (newValue, oldValue) => {\n\t\t\tif (newValue === oldValue) return;\n\t\t\ttry {\n\t\t\t\tif (newValue) recognition.start();\n\t\t\t\telse recognition.stop();\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisListening,\n\t\tisFinal: shallowReadonly(isFinal),\n\t\trecognition,\n\t\tresult: shallowReadonly(result),\n\t\tconfidence: shallowReadonly(confidence),\n\t\terror,\n\t\ttoggle,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useSpeechSynthesis/index.ts\n/**\n* Reactive SpeechSynthesis.\n*\n* @see https://vueuse.org/useSpeechSynthesis\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis\n*/\nfunction useSpeechSynthesis(text, options = {}) {\n\tconst { pitch = 1, rate = 1, volume = 1, window = defaultWindow, onBoundary } = options;\n\tconst synth = window && window.speechSynthesis;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => synth);\n\tconst isPlaying = shallowRef(false);\n\tconst status = shallowRef(\"init\");\n\tconst spokenText = toRef(text || \"\");\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst error = shallowRef(void 0);\n\tconst toggle = (value = !isPlaying.value) => {\n\t\tisPlaying.value = value;\n\t};\n\tconst bindEventsForUtterance = (utterance) => {\n\t\tutterance.lang = toValue(lang);\n\t\tutterance.voice = toValue(options.voice) || null;\n\t\tutterance.pitch = toValue(pitch);\n\t\tutterance.rate = toValue(rate);\n\t\tutterance.volume = toValue(volume);\n\t\tutterance.onstart = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onpause = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"pause\";\n\t\t};\n\t\tutterance.onresume = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onend = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"end\";\n\t\t};\n\t\tutterance.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\tutterance.onboundary = (event) => {\n\t\t\tonBoundary === null || onBoundary === void 0 || onBoundary(event);\n\t\t};\n\t};\n\tconst utterance = computed(() => {\n\t\tisPlaying.value = false;\n\t\tstatus.value = \"init\";\n\t\tconst newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n\t\tbindEventsForUtterance(newUtterance);\n\t\treturn newUtterance;\n\t});\n\tconst speak = () => {\n\t\tsynth.cancel();\n\t\tif (utterance) synth.speak(utterance.value);\n\t};\n\tconst stop = () => {\n\t\tsynth.cancel();\n\t\tisPlaying.value = false;\n\t};\n\tif (isSupported.value) {\n\t\tbindEventsForUtterance(utterance.value);\n\t\twatch(lang, (lang) => {\n\t\t\tif (utterance.value && !isPlaying.value) utterance.value.lang = lang;\n\t\t});\n\t\tif (options.voice) watch(options.voice, () => {\n\t\t\tsynth.cancel();\n\t\t});\n\t\twatch(isPlaying, () => {\n\t\t\tif (isPlaying.value) synth.resume();\n\t\t\telse synth.pause();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tisPlaying.value = false;\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisPlaying,\n\t\tstatus,\n\t\tutterance,\n\t\terror,\n\t\tstop,\n\t\ttoggle,\n\t\tspeak\n\t};\n}\n//#endregion\n//#region useStepper/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useStepper(steps, initialStep) {\n\tconst stepsRef = ref(steps);\n\tconst stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n\tconst index = ref(stepNames.value.indexOf(initialStep !== null && initialStep !== void 0 ? initialStep : stepNames.value[0]));\n\tconst current = computed(() => at(index.value));\n\tconst isFirst = computed(() => index.value === 0);\n\tconst isLast = computed(() => index.value === stepNames.value.length - 1);\n\tconst next = computed(() => stepNames.value[index.value + 1]);\n\tconst previous = computed(() => stepNames.value[index.value - 1]);\n\tfunction at(index) {\n\t\tif (Array.isArray(stepsRef.value)) return stepsRef.value[index];\n\t\treturn stepsRef.value[stepNames.value[index]];\n\t}\n\tfunction get(step) {\n\t\tif (!stepNames.value.includes(step)) return;\n\t\treturn at(stepNames.value.indexOf(step));\n\t}\n\tfunction goTo(step) {\n\t\tif (stepNames.value.includes(step)) index.value = stepNames.value.indexOf(step);\n\t}\n\tfunction goToNext() {\n\t\tif (isLast.value) return;\n\t\tindex.value++;\n\t}\n\tfunction goToPrevious() {\n\t\tif (isFirst.value) return;\n\t\tindex.value--;\n\t}\n\tfunction goBackTo(step) {\n\t\tif (isAfter(step)) goTo(step);\n\t}\n\tfunction isNext(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value + 1;\n\t}\n\tfunction isPrevious(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value - 1;\n\t}\n\tfunction isCurrent(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value;\n\t}\n\tfunction isBefore(step) {\n\t\treturn index.value < stepNames.value.indexOf(step);\n\t}\n\tfunction isAfter(step) {\n\t\treturn index.value > stepNames.value.indexOf(step);\n\t}\n\treturn {\n\t\tsteps: stepsRef,\n\t\tstepNames,\n\t\tindex,\n\t\tcurrent,\n\t\tnext,\n\t\tprevious,\n\t\tisFirst,\n\t\tisLast,\n\t\tat,\n\t\tget,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoBackTo,\n\t\tisNext,\n\t\tisPrevious,\n\t\tisCurrent,\n\t\tisBefore,\n\t\tisAfter\n\t};\n}\n//#endregion\n//#region useStorageAsync/index.ts\n/**\n* Reactive Storage with async support.\n*\n* @see https://vueuse.org/useStorageAsync\n* @param key\n* @param initialValue\n* @param storage\n* @param options\n*/\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, onReady } = options;\n\tconst rawInit = toValue(initialValue);\n\tconst type = guessSerializerType(rawInit);\n\tconst data = (shallow ? shallowRef : ref)(toValue(initialValue));\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorageAsync\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tasync function read(event) {\n\t\tif (!storage || event && event.key !== key) return;\n\t\ttry {\n\t\t\tconst rawValue = event ? event.newValue : await storage.getItem(key);\n\t\t\tif (rawValue == null) {\n\t\t\t\tdata.value = rawInit;\n\t\t\t\tif (writeDefaults && rawInit !== null) await storage.setItem(key, await serializer.write(rawInit));\n\t\t\t} else if (mergeDefaults) {\n\t\t\t\tconst value = await serializer.read(rawValue);\n\t\t\t\tif (typeof mergeDefaults === \"function\") data.value = mergeDefaults(value, rawInit);\n\t\t\t\telse if (type === \"object\" && !Array.isArray(value)) data.value = {\n\t\t\t\t\t...rawInit,\n\t\t\t\t\t...value\n\t\t\t\t};\n\t\t\t\telse data.value = value;\n\t\t\t} else data.value = await serializer.read(rawValue);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tconst promise = new Promise((resolve) => {\n\t\tread().then(() => {\n\t\t\tonReady === null || onReady === void 0 || onReady(data.value);\n\t\t\tresolve(data);\n\t\t});\n\t});\n\tif (window && listenToStorageChanges) useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n\tif (storage) watchWithFilter(data, async () => {\n\t\ttry {\n\t\t\tif (data.value == null) await storage.removeItem(key);\n\t\t\telse await storage.setItem(key, await serializer.write(data.value));\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\tObject.assign(data, {\n\t\tthen: promise.then.bind(promise),\n\t\tcatch: promise.catch.bind(promise)\n\t});\n\treturn data;\n}\n//#endregion\n//#region useStyleTag/index.ts\nlet _id = 0;\nconst _refCount = /* @__PURE__ */ new WeakMap();\n/**\n* Inject <style> element in head.\n*\n* Overload: Omitted id\n*\n* @see https://vueuse.org/useStyleTag\n* @param css\n* @param options\n*/\nfunction useStyleTag(css, options = {}) {\n\tconst isLoaded = shallowRef(false);\n\tconst { document = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options;\n\tconst cssRef = shallowRef(css);\n\tlet stop = () => {};\n\tconst load = () => {\n\t\tvar _refCount$get;\n\t\tif (!document) return;\n\t\tconst el = document.getElementById(id) || document.createElement(\"style\");\n\t\tif (!el.isConnected) {\n\t\t\tel.id = id;\n\t\t\tif (options.nonce) el.nonce = options.nonce;\n\t\t\tif (options.media) el.media = options.media;\n\t\t\tdocument.head.appendChild(el);\n\t\t}\n\t\tif (isLoaded.value) return;\n\t\t_refCount.set(el, ((_refCount$get = _refCount.get(el)) !== null && _refCount$get !== void 0 ? _refCount$get : 0) + 1);\n\t\tstop = watch(cssRef, (value) => {\n\t\t\tel.textContent = value;\n\t\t}, { immediate: true });\n\t\tisLoaded.value = true;\n\t};\n\tconst unload = () => {\n\t\tif (!document || !isLoaded.value) return;\n\t\tstop();\n\t\tconst el = document.getElementById(id);\n\t\tif (el) {\n\t\t\tvar _refCount$get2;\n\t\t\tconst count = ((_refCount$get2 = _refCount.get(el)) !== null && _refCount$get2 !== void 0 ? _refCount$get2 : 1) - 1;\n\t\t\tif (count <= 0) {\n\t\t\t\t_refCount.delete(el);\n\t\t\t\tdocument.head.removeChild(el);\n\t\t\t} else _refCount.set(el, count);\n\t\t}\n\t\tisLoaded.value = false;\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnScopeDispose(unload);\n\treturn {\n\t\tid,\n\t\tcss: cssRef,\n\t\tunload,\n\t\tload,\n\t\tisLoaded: shallowReadonly(isLoaded)\n\t};\n}\n//#endregion\n//#region useSwipe/index.ts\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTemplateRefsList/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useTemplateRefsList() {\n\tconst refs = ref([]);\n\trefs.value.set = (el) => {\n\t\tif (el) refs.value.push(el);\n\t};\n\tonBeforeUpdate(() => {\n\t\trefs.value.length = 0;\n\t});\n\treturn refs;\n}\n//#endregion\n//#region useTextDirection/index.ts\n/**\n* Reactive dir of the element's text.\n*\n* @see https://vueuse.org/useTextDirection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextDirection(options = {}) {\n\tconst { document = defaultDocument, selector = \"html\", observe = false, initialValue = \"ltr\" } = options;\n\tfunction getValue() {\n\t\tvar _ref, _document$querySelect;\n\t\treturn (_ref = document === null || document === void 0 || (_document$querySelect = document.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute(\"dir\")) !== null && _ref !== void 0 ? _ref : initialValue;\n\t}\n\tconst dir = shallowRef(getValue());\n\ttryOnMounted(() => dir.value = getValue());\n\tif (observe && document) useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n\treturn computed({\n\t\tget() {\n\t\t\treturn dir.value;\n\t\t},\n\t\tset(v) {\n\t\t\tvar _document$querySelect2, _document$querySelect3;\n\t\t\tdir.value = v;\n\t\t\tif (!document) return;\n\t\t\tif (dir.value) (_document$querySelect2 = document.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute(\"dir\", dir.value);\n\t\t\telse (_document$querySelect3 = document.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute(\"dir\");\n\t\t}\n\t});\n}\n//#endregion\n//#region useTextSelection/index.ts\nfunction getRangesFromSelection(selection) {\n\tvar _selection$rangeCount;\n\tconst rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0;\n\treturn Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\n/**\n* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).\n*\n* @see https://vueuse.org/useTextSelection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextSelection(options = {}) {\n\tvar _window$getSelection;\n\tconst { window = defaultWindow } = options;\n\tconst selection = shallowRef((_window$getSelection = window === null || window === void 0 ? void 0 : window.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null);\n\tconst text = computed(() => {\n\t\tvar _selection$value$toSt, _selection$value;\n\t\treturn (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : \"\";\n\t});\n\tconst ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n\tconst rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n\tfunction onSelectionChange() {\n\t\tselection.value = null;\n\t\tif (window) selection.value = window.getSelection();\n\t}\n\tif (window) useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n\treturn {\n\t\ttext,\n\t\trects,\n\t\tranges,\n\t\tselection\n\t};\n}\n//#endregion\n//#region useTextareaAutosize/index.ts\n/**\n* Call window.requestAnimationFrame(), if not available, just call the function\n*\n* @param window\n* @param fn\n*/\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n\tif (window && typeof window.requestAnimationFrame === \"function\") window.requestAnimationFrame(fn);\n\telse fn();\n}\nfunction useTextareaAutosize(options = {}) {\n\tvar _options$input, _options$styleProp;\n\tconst { window = defaultWindow } = options;\n\tconst textarea = toRef(options === null || options === void 0 ? void 0 : options.element);\n\tconst input = toRef((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : \"\");\n\tconst styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : \"height\";\n\tconst textareaScrollHeight = shallowRef(1);\n\tconst textareaOldWidth = shallowRef(0);\n\tfunction triggerResize() {\n\t\tvar _textarea$value;\n\t\tif (!textarea.value) return;\n\t\tlet height = \"\";\n\t\tconst maxHeight = options === null || options === void 0 ? void 0 : options.maxHeight;\n\t\ttextarea.value.style[styleProp] = \"1px\";\n\t\ttextareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight;\n\t\tconst _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget);\n\t\tconst styleHeight = maxHeight != null ? `${Math.min(textareaScrollHeight.value, maxHeight)}px` : `${textareaScrollHeight.value}px`;\n\t\tif (_styleTarget) _styleTarget.style[styleProp] = styleHeight;\n\t\telse height = styleHeight;\n\t\ttextarea.value.style[styleProp] = height;\n\t}\n\twatch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n\twatch(textareaScrollHeight, () => {\n\t\tvar _options$onResize;\n\t\treturn options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options);\n\t});\n\tuseResizeObserver(textarea, ([{ contentRect }]) => {\n\t\tif (textareaOldWidth.value === contentRect.width) return;\n\t\ttryRequestAnimationFrame(window, () => {\n\t\t\ttextareaOldWidth.value = contentRect.width;\n\t\t\ttriggerResize();\n\t\t});\n\t});\n\tif (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\treturn {\n\t\ttextarea,\n\t\tinput,\n\t\ttriggerResize\n\t};\n}\n//#endregion\n//#region useThrottledRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.\n*\n* @see https://vueuse.org/useThrottledRefHistory\n* @param source\n* @param options\n*/\nfunction useThrottledRefHistory(source, options = {}) {\n\tconst { throttle = 200, trailing = true } = options;\n\tconst filter = throttleFilter(throttle, trailing);\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useTimeAgo/index.ts\nconst DEFAULT_UNITS = [\n\t{\n\t\tmax: 6e4,\n\t\tvalue: 1e3,\n\t\tname: \"second\"\n\t},\n\t{\n\t\tmax: 276e4,\n\t\tvalue: 6e4,\n\t\tname: \"minute\"\n\t},\n\t{\n\t\tmax: 72e6,\n\t\tvalue: 36e5,\n\t\tname: \"hour\"\n\t},\n\t{\n\t\tmax: 5184e5,\n\t\tvalue: 864e5,\n\t\tname: \"day\"\n\t},\n\t{\n\t\tmax: 24192e5,\n\t\tvalue: 6048e5,\n\t\tname: \"week\"\n\t},\n\t{\n\t\tmax: 28512e6,\n\t\tvalue: 2592e6,\n\t\tname: \"month\"\n\t},\n\t{\n\t\tmax: Number.POSITIVE_INFINITY,\n\t\tvalue: 31536e6,\n\t\tname: \"year\"\n\t}\n];\nconst DEFAULT_MESSAGES = {\n\tjustNow: \"just now\",\n\tpast: (n) => /\\d/.test(n) ? `${n} ago` : n,\n\tfuture: (n) => /\\d/.test(n) ? `in ${n}` : n,\n\tmonth: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n\tyear: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n\tday: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n\tweek: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n\thour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n\tminute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n\tsecond: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n\tinvalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n\treturn date.toISOString().slice(0, 10);\n}\nfunction getDefaultScheduler$4(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\n/**\n* Reactive time ago formatter.\n*\n* @see https://vueuse.org/useTimeAgo\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTimeAgo(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$4(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n\tif (exposeControls) return {\n\t\ttimeAgo,\n\t\t...controls\n\t};\n\telse return timeAgo;\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n\tconst { max, messages = DEFAULT_MESSAGES, fullDateFormatter = DEFAULT_FORMATTER, units = DEFAULT_UNITS, showSecond = false, rounding = \"round\" } = options;\n\tconst roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n\tconst diff = +now - +from;\n\tconst absDiff = Math.abs(diff);\n\tfunction getValue(diff, unit) {\n\t\treturn roundFn(Math.abs(diff) / unit.value);\n\t}\n\tfunction format(diff, unit) {\n\t\tconst val = getValue(diff, unit);\n\t\tconst past = diff > 0;\n\t\tconst str = applyFormat(unit.name, val, past);\n\t\treturn applyFormat(past ? \"past\" : \"future\", str, past);\n\t}\n\tfunction applyFormat(name, val, isPast) {\n\t\tconst formatter = messages[name];\n\t\tif (typeof formatter === \"function\") return formatter(val, isPast);\n\t\treturn formatter.replace(\"{0}\", val.toString());\n\t}\n\tif (absDiff < 6e4 && !showSecond) return messages.justNow;\n\tif (typeof max === \"number\" && absDiff > max) return fullDateFormatter(new Date(from));\n\tif (typeof max === \"string\") {\n\t\tvar _units$find;\n\t\tconst unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max;\n\t\tif (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from));\n\t}\n\tfor (const [idx, unit] of units.entries()) {\n\t\tif (getValue(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]);\n\t\tif (absDiff < unit.max) return format(diff, unit);\n\t}\n\treturn messages.invalid;\n}\n//#endregion\n//#region useTimeAgoIntl/index.ts\nconst UNITS = [\n\t{\n\t\tname: \"year\",\n\t\tms: 31536e6\n\t},\n\t{\n\t\tname: \"month\",\n\t\tms: 2592e6\n\t},\n\t{\n\t\tname: \"week\",\n\t\tms: 6048e5\n\t},\n\t{\n\t\tname: \"day\",\n\t\tms: 864e5\n\t},\n\t{\n\t\tname: \"hour\",\n\t\tms: 36e5\n\t},\n\t{\n\t\tname: \"minute\",\n\t\tms: 6e4\n\t},\n\t{\n\t\tname: \"second\",\n\t\tms: 1e3\n\t}\n];\nfunction getDefaultScheduler$3(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\nfunction useTimeAgoIntl(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$3(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now)));\n\tconst parts = computed(() => result.value.parts);\n\tconst timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, {\n\t\t...options,\n\t\tlocale: result.value.resolvedLocale\n\t}));\n\treturn exposeControls ? {\n\t\ttimeAgoIntl,\n\t\tparts,\n\t\t...controls\n\t} : timeAgoIntl;\n}\n/**\n* Non-reactive version of useTimeAgoIntl\n*/\nfunction formatTimeAgoIntl(from, options = {}, now = Date.now()) {\n\tconst { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now);\n\treturn formatTimeAgoIntlParts(parts, {\n\t\t...options,\n\t\tlocale: resolvedLocale\n\t});\n}\n/**\n* Get parts from `Intl.RelativeTimeFormat.formatToParts`.\n*/\nfunction getTimeAgoIntlResult(from, options = {}, now = Date.now()) {\n\tvar _options$units;\n\tconst { locale, relativeTimeFormatOptions = { numeric: \"auto\" } } = options;\n\tconst rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions);\n\tconst { locale: resolvedLocale } = rtf.resolvedOptions();\n\tconst diff = +from - +now;\n\tconst absDiff = Math.abs(diff);\n\tconst units = (_options$units = options.units) !== null && _options$units !== void 0 ? _options$units : UNITS;\n\tfor (const { name, ms } of units) if (absDiff >= ms) return {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(Math.round(diff / ms), name)\n\t};\n\treturn {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(0, units[units.length - 1].name)\n\t};\n}\n/**\n* Format parts into a string\n*/\nfunction formatTimeAgoIntlParts(parts, options = {}) {\n\tconst { insertSpace = true, joinParts, locale } = options;\n\tif (typeof joinParts === \"function\") return joinParts(parts, locale);\n\tif (!insertSpace) return parts.map((part) => part.value).join(\"\");\n\treturn parts.map((part) => part.value.trim()).join(\" \");\n}\n//#endregion\n//#region useTimeoutPoll/index.ts\nfunction useTimeoutPoll(fn, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst { start } = useTimeoutFn(loop, interval, { immediate });\n\tconst isActive = shallowRef(false);\n\tasync function loop() {\n\t\tif (!isActive.value) return;\n\t\tawait fn();\n\t\tstart();\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value) {\n\t\t\tisActive.value = true;\n\t\t\tif (immediateCallback) fn();\n\t\t\tstart();\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tif (immediate && isClient) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive,\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useTimestamp/index.ts\nfunction getDefaultScheduler$2(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, scheduler = getDefaultScheduler$2(options), callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst controls = scheduler(callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update);\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n//#endregion\n//#region useTitle/index.ts\nfunction useTitle(newTitle = null, options = {}) {\n\tvar _document$title, _ref;\n\tconst { document = defaultDocument, restoreOnUnmount = (t) => t } = options;\n\tconst originalTitle = (_document$title = document === null || document === void 0 ? void 0 : document.title) !== null && _document$title !== void 0 ? _document$title : \"\";\n\tconst title = toRef((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document === null || document === void 0 ? void 0 : document.title) !== null && _ref !== void 0 ? _ref : null);\n\tconst isReadonly = !!(newTitle && typeof newTitle === \"function\");\n\tfunction format(t) {\n\t\tif (!(\"titleTemplate\" in options)) return t;\n\t\tconst template = options.titleTemplate || \"%s\";\n\t\treturn typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n\t}\n\twatch(title, (newValue, oldValue) => {\n\t\tif (newValue !== oldValue && document) document.title = format(newValue !== null && newValue !== void 0 ? newValue : \"\");\n\t}, { immediate: true });\n\tif (options.observe && !options.titleTemplate && document && !isReadonly) {\n\t\tvar _document$head;\n\t\tuseMutationObserver((_document$head = document.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector(\"title\"), () => {\n\t\t\tif (document && document.title !== title.value) title.value = format(document.title);\n\t\t}, { childList: true });\n\t}\n\ttryOnScopeDispose(() => {\n\t\tif (restoreOnUnmount) {\n\t\t\tconst restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n\t\t\tif (restoredTitle != null && document) document.title = restoredTitle;\n\t\t}\n\t});\n\treturn title;\n}\n/**\n* Common transitions\n*\n* @see https://easings.net\n*/\nconst TransitionPresets = /* #__PURE__ */ Object.assign({}, { linear: identity }, {\n\teaseInSine: [\n\t\t.12,\n\t\t0,\n\t\t.39,\n\t\t0\n\t],\n\teaseOutSine: [\n\t\t.61,\n\t\t1,\n\t\t.88,\n\t\t1\n\t],\n\teaseInOutSine: [\n\t\t.37,\n\t\t0,\n\t\t.63,\n\t\t1\n\t],\n\teaseInQuad: [\n\t\t.11,\n\t\t0,\n\t\t.5,\n\t\t0\n\t],\n\teaseOutQuad: [\n\t\t.5,\n\t\t1,\n\t\t.89,\n\t\t1\n\t],\n\teaseInOutQuad: [\n\t\t.45,\n\t\t0,\n\t\t.55,\n\t\t1\n\t],\n\teaseInCubic: [\n\t\t.32,\n\t\t0,\n\t\t.67,\n\t\t0\n\t],\n\teaseOutCubic: [\n\t\t.33,\n\t\t1,\n\t\t.68,\n\t\t1\n\t],\n\teaseInOutCubic: [\n\t\t.65,\n\t\t0,\n\t\t.35,\n\t\t1\n\t],\n\teaseInQuart: [\n\t\t.5,\n\t\t0,\n\t\t.75,\n\t\t0\n\t],\n\teaseOutQuart: [\n\t\t.25,\n\t\t1,\n\t\t.5,\n\t\t1\n\t],\n\teaseInOutQuart: [\n\t\t.76,\n\t\t0,\n\t\t.24,\n\t\t1\n\t],\n\teaseInQuint: [\n\t\t.64,\n\t\t0,\n\t\t.78,\n\t\t0\n\t],\n\teaseOutQuint: [\n\t\t.22,\n\t\t1,\n\t\t.36,\n\t\t1\n\t],\n\teaseInOutQuint: [\n\t\t.83,\n\t\t0,\n\t\t.17,\n\t\t1\n\t],\n\teaseInExpo: [\n\t\t.7,\n\t\t0,\n\t\t.84,\n\t\t0\n\t],\n\teaseOutExpo: [\n\t\t.16,\n\t\t1,\n\t\t.3,\n\t\t1\n\t],\n\teaseInOutExpo: [\n\t\t.87,\n\t\t0,\n\t\t.13,\n\t\t1\n\t],\n\teaseInCirc: [\n\t\t.55,\n\t\t0,\n\t\t1,\n\t\t.45\n\t],\n\teaseOutCirc: [\n\t\t0,\n\t\t.55,\n\t\t.45,\n\t\t1\n\t],\n\teaseInOutCirc: [\n\t\t.85,\n\t\t0,\n\t\t.15,\n\t\t1\n\t],\n\teaseInBack: [\n\t\t.36,\n\t\t0,\n\t\t.66,\n\t\t-.56\n\t],\n\teaseOutBack: [\n\t\t.34,\n\t\t1.56,\n\t\t.64,\n\t\t1\n\t],\n\teaseInOutBack: [\n\t\t.68,\n\t\t-.6,\n\t\t.32,\n\t\t1.6\n\t]\n});\n/**\n* Create an easing function from cubic bezier points.\n*/\nfunction createEasingFunction([p0, p1, p2, p3]) {\n\tconst a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n\tconst b = (a1, a2) => 3 * a2 - 6 * a1;\n\tconst c = (a1) => 3 * a1;\n\tconst calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n\tconst getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n\tconst getTforX = (x) => {\n\t\tlet aGuessT = x;\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, p0, p2);\n\t\t\tif (currentSlope === 0) return aGuessT;\n\t\t\tconst currentX = calcBezier(aGuessT, p0, p2) - x;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\t\treturn aGuessT;\n\t};\n\treturn (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n\treturn a + alpha * (b - a);\n}\nfunction defaultInterpolation(a, b, t) {\n\tconst aVal = toValue(a);\n\tconst bVal = toValue(b);\n\tif (typeof aVal === \"number\" && typeof bVal === \"number\") return lerp(aVal, bVal, t);\n\tif (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t));\n\tthrow new TypeError(\"Unknown transition type, specify an interpolation function.\");\n}\nfunction normalizeEasing(easing) {\n\tvar _toValue;\n\treturn typeof easing === \"function\" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity;\n}\n/**\n* Transition from one value to another.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction transition(source, from, to, options = {}) {\n\tvar _toValue2;\n\tconst { window = defaultWindow } = options;\n\tconst fromVal = toValue(from);\n\tconst toVal = toValue(to);\n\tconst duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3;\n\tconst startedAt = Date.now();\n\tconst endAt = Date.now() + duration;\n\tconst interpolation = typeof options.interpolation === \"function\" ? options.interpolation : defaultInterpolation;\n\tconst trans = typeof options.easing !== \"undefined\" ? normalizeEasing(options.easing) : normalizeEasing(options.transition);\n\tconst ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n\treturn new Promise((resolve) => {\n\t\tsource.value = fromVal;\n\t\tconst tick = () => {\n\t\t\tvar _options$abort;\n\t\t\tif ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tconst alpha = ease((now - startedAt) / duration);\n\t\t\tsource.value = interpolation(fromVal, toVal, alpha);\n\t\t\tif (now < endAt) window === null || window === void 0 || window.requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tsource.value = toVal;\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\ttick();\n\t});\n}\n/**\n* Transition from one value to another.\n* @deprecated The `executeTransition` function is deprecated, use `transition` instead.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction executeTransition(source, from, to, options = {}) {\n\treturn transition(source, from, to, options);\n}\n/**\n* Follow value with a transition.\n*\n* @see https://vueuse.org/useTransition\n* @param source\n* @param options\n*/\nfunction useTransition(source, options = {}) {\n\tlet currentId = 0;\n\tconst sourceVal = () => {\n\t\tconst v = toValue(source);\n\t\treturn typeof options.interpolation === \"undefined\" && Array.isArray(v) ? v.map(toValue) : v;\n\t};\n\tconst outputRef = shallowRef(sourceVal());\n\twatch(sourceVal, async (to) => {\n\t\tvar _options$onStarted, _options$onFinished;\n\t\tif (toValue(options.disabled)) return;\n\t\tconst id = ++currentId;\n\t\tif (options.delay) await promiseTimeout(toValue(options.delay));\n\t\tif (id !== currentId) return;\n\t\t(_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options);\n\t\tawait transition(outputRef, outputRef.value, to, {\n\t\t\t...options,\n\t\t\tabort: () => {\n\t\t\t\tvar _options$abort2;\n\t\t\t\treturn id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options));\n\t\t\t}\n\t\t});\n\t\t(_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options);\n\t}, { deep: true });\n\twatch(() => toValue(options.disabled), (disabled) => {\n\t\tif (disabled) {\n\t\t\tcurrentId++;\n\t\t\toutputRef.value = sourceVal();\n\t\t}\n\t});\n\ttryOnScopeDispose(() => {\n\t\tcurrentId++;\n\t});\n\treturn computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n//#endregion\n//#region useUrlSearchParams/index.ts\n/**\n* Reactive URLSearchParams\n*\n* @see https://vueuse.org/useUrlSearchParams\n* @param mode\n* @param options\n*/\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n\tconst { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = \"replace\", window = defaultWindow, stringify = (params) => params.toString() } = options;\n\tif (!window) return reactive(initialValue);\n\tconst state = reactive({});\n\tfunction getRawParams() {\n\t\tif (mode === \"history\") return window.location.search || \"\";\n\t\telse if (mode === \"hash\") {\n\t\t\tconst hash = window.location.hash || \"\";\n\t\t\tconst index = hash.indexOf(\"?\");\n\t\t\treturn index > 0 ? hash.slice(index) : \"\";\n\t\t} else return (window.location.hash || \"\").replace(/^#/, \"\");\n\t}\n\tfunction constructQuery(params) {\n\t\tconst stringified = stringify(params);\n\t\tif (mode === \"history\") return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n\t\tif (mode === \"hash-params\") return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n\t\tconst hash = window.location.hash || \"#\";\n\t\tconst index = hash.indexOf(\"?\");\n\t\tif (index > 0) return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n\t\treturn `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n\t}\n\tfunction read() {\n\t\treturn new URLSearchParams(getRawParams());\n\t}\n\tfunction updateState(params) {\n\t\tconst unusedKeys = new Set(Object.keys(state));\n\t\tfor (const key of params.keys()) {\n\t\t\tconst paramsForKey = params.getAll(key);\n\t\t\tstate[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n\t\t\tunusedKeys.delete(key);\n\t\t}\n\t\tArray.from(unusedKeys).forEach((key) => delete state[key]);\n\t}\n\tconst { pause, resume } = watchPausable(state, () => {\n\t\tconst params = new URLSearchParams(\"\");\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst mapEntry = state[key];\n\t\t\tif (Array.isArray(mapEntry)) mapEntry.forEach((value) => params.append(key, value));\n\t\t\telse if (removeNullishValues && mapEntry == null) params.delete(key);\n\t\t\telse if (removeFalsyValues && !mapEntry) params.delete(key);\n\t\t\telse params.set(key, mapEntry);\n\t\t});\n\t\twrite(params, false);\n\t}, { deep: true });\n\tfunction write(params, shouldUpdate, shouldWriteHistory = true) {\n\t\tpause();\n\t\tif (shouldUpdate) updateState(params);\n\t\tif (writeMode === \"replace\") window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\telse if (shouldWriteHistory) window.history.pushState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\tnextTick(() => resume());\n\t}\n\tfunction onChanged() {\n\t\tif (!enableWrite) return;\n\t\twrite(read(), true, false);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"popstate\", onChanged, listenerOptions);\n\tif (mode !== \"history\") useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n\tconst initial = read();\n\tif (initial.keys().next().value) updateState(initial);\n\telse Object.assign(state, initialValue);\n\treturn state;\n}\n//#endregion\n//#region useUserMedia/index.ts\n/**\n* Reactive `mediaDevices.getUserMedia` streaming\n*\n* @see https://vueuse.org/useUserMedia\n* @param options\n*/\nfunction useUserMedia(options = {}) {\n\tvar _options$enabled, _options$autoSwitch;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true);\n\tconst constraints = ref(options.constraints);\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia;\n\t});\n\tconst stream = shallowRef();\n\tfunction getDeviceOptions(type) {\n\t\tswitch (type) {\n\t\t\tcase \"video\":\n\t\t\t\tif (constraints.value) return constraints.value.video || false;\n\t\t\t\tbreak;\n\t\t\tcase \"audio\":\n\t\t\t\tif (constraints.value) return constraints.value.audio || false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tasync function _start() {\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getUserMedia({\n\t\t\tvideo: getDeviceOptions(\"video\"),\n\t\t\taudio: getDeviceOptions(\"audio\")\n\t\t});\n\t\treturn stream.value;\n\t}\n\tfunction _stop() {\n\t\tvar _stream$value;\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\tasync function restart() {\n\t\t_stop();\n\t\treturn await start();\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\twatch(constraints, () => {\n\t\tif (autoSwitch.value && stream.value) restart();\n\t}, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\trestart,\n\t\tconstraints,\n\t\tenabled,\n\t\tautoSwitch\n\t};\n}\n//#endregion\n//#region useVModel/index.ts\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n//#endregion\n//#region useVModels/index.ts\n/**\n* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.\n*\n* @see https://vueuse.org/useVModels\n* @param props\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModels(props, emit, options = {}) {\n\tconst ret = {};\n\tfor (const key in props) ret[key] = useVModel(props, key, emit, options);\n\treturn ret;\n}\n//#endregion\n//#region useVibrate/index.ts\nfunction getDefaultScheduler$1(options = {}) {\n\tconst { interval = 0 } = options;\n\tif (interval === 0) return;\n\treturn (fn) => useIntervalFn(fn, interval, {\n\t\timmediate: false,\n\t\timmediateCallback: false\n\t});\n}\n/**\n* Reactive vibrate\n*\n* @see https://vueuse.org/useVibrate\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVibrate(options) {\n\tconst { pattern = [], scheduler = getDefaultScheduler$1(options), navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n\tconst patternRef = toRef(pattern);\n\tconst vibrate = (pattern = patternRef.value) => {\n\t\tif (isSupported.value) navigator.vibrate(pattern);\n\t};\n\tconst intervalControls = scheduler === null || scheduler === void 0 ? void 0 : scheduler(vibrate);\n\tconst stop = () => {\n\t\tif (isSupported.value) navigator.vibrate(0);\n\t\tintervalControls === null || intervalControls === void 0 || intervalControls.pause();\n\t};\n\treturn {\n\t\tisSupported,\n\t\tpattern,\n\t\tintervalControls,\n\t\tvibrate,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useVirtualList/index.ts\n/**\n* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.\n*/\nfunction useVirtualList(list, options) {\n\tconst { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n\treturn {\n\t\tlist: currentList,\n\t\tscrollTo,\n\t\tcontainerProps: {\n\t\t\tref: containerRef,\n\t\t\tonScroll: () => {\n\t\t\t\tcalculateRange();\n\t\t\t},\n\t\t\tstyle: containerStyle\n\t\t},\n\t\twrapperProps\n\t};\n}\nfunction useVirtualListResources(list) {\n\tconst containerRef = shallowRef(null);\n\tconst size = useElementSize(containerRef);\n\tconst currentList = ref([]);\n\tconst source = shallowRef(list);\n\treturn {\n\t\tstate: ref({\n\t\t\tstart: 0,\n\t\t\tend: 10\n\t\t}),\n\t\tsource,\n\t\tcurrentList,\n\t\tsize,\n\t\tcontainerRef\n\t};\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n\treturn (containerSize) => {\n\t\tif (typeof itemSize === \"number\") return Math.ceil(containerSize / itemSize);\n\t\tconst { start = 0 } = state.value;\n\t\tlet sum = 0;\n\t\tlet capacity = 0;\n\t\tfor (let i = start; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tcapacity = i;\n\t\t\tif (sum > containerSize) break;\n\t\t}\n\t\treturn capacity - start;\n\t};\n}\nfunction createGetOffset(source, itemSize) {\n\treturn (scrollDirection) => {\n\t\tif (typeof itemSize === \"number\") return Math.floor(scrollDirection / itemSize) + 1;\n\t\tlet sum = 0;\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tif (sum >= scrollDirection) {\n\t\t\t\toffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn offset + 1;\n\t};\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n\treturn () => {\n\t\tconst element = containerRef.value;\n\t\tif (element) {\n\t\t\tconst offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n\t\t\tconst viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n\t\t\tconst from = offset - overscan;\n\t\t\tconst to = offset + viewCapacity + overscan;\n\t\t\tstate.value = {\n\t\t\t\tstart: from < 0 ? 0 : from,\n\t\t\t\tend: to > source.value.length ? source.value.length : to\n\t\t\t};\n\t\t\tcurrentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n\t\t\t\tdata: ele,\n\t\t\t\tindex: index + state.value.start\n\t\t\t}));\n\t\t}\n\t};\n}\nfunction createGetDistance(itemSize, source) {\n\treturn (index) => {\n\t\tif (typeof itemSize === \"number\") return index * itemSize;\n\t\treturn source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n\t};\n}\nfunction useWatchForSizes(size, listRef, totalSize, containerRef, calculateRange) {\n\twatch([\n\t\tsize.width,\n\t\tsize.height,\n\t\tlistRef,\n\t\ttotalSize,\n\t\tcontainerRef\n\t], () => {\n\t\tcalculateRange();\n\t});\n}\nfunction createComputedTotalSize(itemSize, source) {\n\treturn computed(() => {\n\t\tif (typeof itemSize === \"number\") return source.value.length * itemSize;\n\t\treturn source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n\t});\n}\nconst scrollToDictionaryForElementScrollKey = {\n\thorizontal: \"scrollLeft\",\n\tvertical: \"scrollTop\"\n};\nconst scrollToDictionaryForElementScrollToKey = {\n\thorizontal: \"left\",\n\tvertical: \"top\"\n};\nconst defaultScrollToOptions = {\n\tbehavior: \"auto\",\n\tblock: \"start\",\n\tinline: \"nearest\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef, itemSize) {\n\treturn (index, options = defaultScrollToOptions) => {\n\t\tif (!containerRef.value) return;\n\t\toptions = {\n\t\t\t...defaultScrollToOptions,\n\t\t\t...options\n\t\t};\n\t\tlet offset = 0;\n\t\tconst axisToCheck = options[type === \"horizontal\" ? \"inline\" : \"block\"];\n\t\tif (axisToCheck) {\n\t\t\tconst containerSize = type === \"horizontal\" ? containerRef.value.clientWidth : containerRef.value.clientHeight;\n\t\t\tconst fullItemSize = typeof itemSize === \"number\" ? itemSize : itemSize(index);\n\t\t\tif (axisToCheck === \"center\") offset = containerSize / 2 - fullItemSize / 2;\n\t\t\telse if (axisToCheck === \"end\") offset = containerSize - fullItemSize;\n\t\t\telse if (axisToCheck === \"nearest\") {\n\t\t\t\tconst containerScrollPosition = containerRef.value[scrollToDictionaryForElementScrollKey[type]];\n\t\t\t\tif (getDistance(index) > containerScrollPosition + containerSize / 2) offset = containerSize - fullItemSize;\n\t\t\t}\n\t\t}\n\t\tcontainerRef.value.scrollTo({\n\t\t\t[scrollToDictionaryForElementScrollToKey[type]]: getDistance(index) - offset,\n\t\t\tbehavior: options.behavior\n\t\t});\n\t\tcalculateRange();\n\t};\n}\nfunction useHorizontalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowX: \"auto\" };\n\tconst { itemWidth, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n\tconst calculateRange = createCalculateRange(\"horizontal\", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources);\n\tconst getDistanceLeft = createGetDistance(itemWidth, source);\n\tconst offsetLeft = computed(() => getDistanceLeft(state.value.start));\n\tconst totalWidth = createComputedTotalSize(itemWidth, source);\n\tuseWatchForSizes(size, source, totalWidth, containerRef, calculateRange);\n\treturn {\n\t\tscrollTo: createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef, itemWidth),\n\t\tcalculateRange,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: `${totalWidth.value - offsetLeft.value}px`,\n\t\t\t\tmarginLeft: `${offsetLeft.value}px`,\n\t\t\t\tdisplay: \"flex\"\n\t\t\t} };\n\t\t}),\n\t\tcontainerStyle,\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\nfunction useVerticalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowY: \"auto\" };\n\tconst { itemHeight, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n\tconst calculateRange = createCalculateRange(\"vertical\", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources);\n\tconst getDistanceTop = createGetDistance(itemHeight, source);\n\tconst offsetTop = computed(() => getDistanceTop(state.value.start));\n\tconst totalHeight = createComputedTotalSize(itemHeight, source);\n\tuseWatchForSizes(size, source, totalHeight, containerRef, calculateRange);\n\treturn {\n\t\tcalculateRange,\n\t\tscrollTo: createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef, itemHeight),\n\t\tcontainerStyle,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: `${totalHeight.value - offsetTop.value}px`,\n\t\t\t\tmarginTop: `${offsetTop.value}px`\n\t\t\t} };\n\t\t}),\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\n//#endregion\n//#region useWakeLock/index.ts\n/**\n* Reactive Screen Wake Lock API.\n*\n* @see https://vueuse.org/useWakeLock\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWakeLock(options = {}) {\n\tconst { navigator = defaultNavigator, document = defaultDocument } = options;\n\tconst requestedType = shallowRef(false);\n\tconst sentinel = shallowRef(null);\n\tconst documentVisibility = useDocumentVisibility({ document });\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"wakeLock\" in navigator);\n\tconst isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n\tif (isSupported.value) {\n\t\tuseEventListener(sentinel, \"release\", () => {\n\t\t\tvar _sentinel$value$type, _sentinel$value;\n\t\t\trequestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false;\n\t\t}, { passive: true });\n\t\twhenever(() => documentVisibility.value === \"visible\" && (document === null || document === void 0 ? void 0 : document.visibilityState) === \"visible\" && requestedType.value, (type) => {\n\t\t\trequestedType.value = false;\n\t\t\tforceRequest(type);\n\t\t});\n\t}\n\tasync function forceRequest(type) {\n\t\tvar _sentinel$value2;\n\t\tawait ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release());\n\t\tsentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n\t}\n\tasync function request(type) {\n\t\tif (documentVisibility.value === \"visible\") await forceRequest(type);\n\t\telse requestedType.value = type;\n\t}\n\tasync function release() {\n\t\trequestedType.value = false;\n\t\tconst s = sentinel.value;\n\t\tsentinel.value = null;\n\t\tawait (s === null || s === void 0 ? void 0 : s.release());\n\t}\n\ttryOnScopeDispose(() => {\n\t\trelease();\n\t});\n\treturn {\n\t\tsentinel,\n\t\tisSupported,\n\t\tisActive,\n\t\trequest,\n\t\tforceRequest,\n\t\trelease\n\t};\n}\n//#endregion\n//#region useWebNotification/index.ts\n/**\n* Reactive useWebNotification\n*\n* @see https://vueuse.org/useWebNotification\n* @see https://developer.mozilla.org/en-US/docs/Web/API/notification\n*/\nfunction useWebNotification(options = {}) {\n\tconst { window = defaultWindow, requestPermissions: _requestForPermissions = true } = options;\n\tconst defaultWebNotificationOptions = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (!window || !(\"Notification\" in window)) return false;\n\t\tif (Notification.permission === \"granted\") return true;\n\t\ttry {\n\t\t\tconst notification = new Notification(\"\");\n\t\t\tnotification.onshow = () => {\n\t\t\t\tnotification.close();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.name === \"TypeError\") return false;\n\t\t}\n\t\treturn true;\n\t});\n\tconst permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n\tconst notification = shallowRef(null);\n\tconst ensurePermissions = async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionGranted.value && Notification.permission !== \"denied\") {\n\t\t\tif (await Notification.requestPermission() === \"granted\") permissionGranted.value = true;\n\t\t}\n\t\treturn permissionGranted.value;\n\t};\n\tconst { on: onClick, trigger: clickTrigger } = createEventHook();\n\tconst { on: onShow, trigger: showTrigger } = createEventHook();\n\tconst { on: onError, trigger: errorTrigger } = createEventHook();\n\tconst { on: onClose, trigger: closeTrigger } = createEventHook();\n\tconst show = async (overrides) => {\n\t\tif (!isSupported.value || !permissionGranted.value) return;\n\t\tconst options = Object.assign({}, defaultWebNotificationOptions, overrides);\n\t\tnotification.value = new Notification(options.title || \"\", options);\n\t\tnotification.value.onclick = clickTrigger;\n\t\tnotification.value.onshow = showTrigger;\n\t\tnotification.value.onerror = errorTrigger;\n\t\tnotification.value.onclose = closeTrigger;\n\t\treturn notification.value;\n\t};\n\tconst close = () => {\n\t\tif (notification.value) notification.value.close();\n\t\tnotification.value = null;\n\t};\n\tif (_requestForPermissions) tryOnMounted(ensurePermissions);\n\ttryOnScopeDispose(close);\n\tif (isSupported.value && window) {\n\t\tconst document = window.document;\n\t\tuseEventListener(document, \"visibilitychange\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (document.visibilityState === \"visible\") close();\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tnotification,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tshow,\n\t\tclose,\n\t\tonClick,\n\t\tonShow,\n\t\tonError,\n\t\tonClose\n\t};\n}\n//#endregion\n//#region useWebSocket/index.ts\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n\tif (options === true) return {};\n\treturn options;\n}\nfunction getDefaultScheduler(options) {\n\tif (\"interval\" in options) {\n\t\tconst { interval = 1e3 } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate: false });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive WebSocket client.\n*\n* @see https://vueuse.org/useWebSocket\n* @param url\n*/\nfunction useWebSocket(url, options = {}) {\n\tconst { onConnected, onDisconnected, onError, onMessage, immediate = true, autoConnect = true, autoClose = true, protocols = [] } = options;\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CLOSED\");\n\tconst wsRef = shallowRef();\n\tconst urlRef = toRef(url);\n\tlet heartbeatPause;\n\tlet heartbeatResume;\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tlet bufferedData = [];\n\tlet retryTimeout;\n\tlet pongTimeoutWait;\n\tconst _sendBuffer = () => {\n\t\tif (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n\t\t\tfor (const buffer of bufferedData) wsRef.value.send(buffer);\n\t\t\tbufferedData = [];\n\t\t}\n\t};\n\tconst resetRetry = () => {\n\t\tif (retryTimeout != null) {\n\t\t\tclearTimeout(retryTimeout);\n\t\t\tretryTimeout = void 0;\n\t\t}\n\t};\n\tconst resetHeartbeat = () => {\n\t\tclearTimeout(pongTimeoutWait);\n\t\tpongTimeoutWait = void 0;\n\t};\n\tconst close = (code = 1e3, reason) => {\n\t\tresetRetry();\n\t\tif (!isClient && !isWorker || !wsRef.value) return;\n\t\texplicitlyClosed = true;\n\t\tresetHeartbeat();\n\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\twsRef.value.close(code, reason);\n\t\twsRef.value = void 0;\n\t\tstatus.value = \"CLOSED\";\n\t};\n\tconst send = (data, useBuffer = true) => {\n\t\tif (!wsRef.value || status.value !== \"OPEN\") {\n\t\t\tif (useBuffer) bufferedData.push(data);\n\t\t\treturn false;\n\t\t}\n\t\t_sendBuffer();\n\t\twsRef.value.send(data);\n\t\treturn true;\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst ws = new WebSocket(urlRef.value, protocols);\n\t\twsRef.value = ws;\n\t\tstatus.value = \"CONNECTING\";\n\t\tws.onopen = () => {\n\t\t\tif (wsRef.value !== ws) return;\n\t\t\tstatus.value = \"OPEN\";\n\t\t\tretried = 0;\n\t\t\tonConnected === null || onConnected === void 0 || onConnected(ws);\n\t\t\theartbeatResume === null || heartbeatResume === void 0 || heartbeatResume();\n\t\t\t_sendBuffer();\n\t\t};\n\t\tws.onclose = (ev) => {\n\t\t\tif (wsRef.value === ws) status.value = \"CLOSED\";\n\t\t\tresetHeartbeat();\n\t\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\t\tonDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev);\n\t\t\tif (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect);\n\t\t\t\tif ((typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries))(retried)) {\n\t\t\t\t\tretried += 1;\n\t\t\t\t\tconst delayTime = typeof delay === \"function\" ? delay(retried) : delay;\n\t\t\t\t\tretryTimeout = setTimeout(_init, delayTime);\n\t\t\t\t} else onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tws.onerror = (e) => {\n\t\t\tonError === null || onError === void 0 || onError(ws, e);\n\t\t};\n\t\tws.onmessage = (e) => {\n\t\t\tif (options.heartbeat) {\n\t\t\t\tresetHeartbeat();\n\t\t\t\tconst { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat);\n\t\t\t\tif (e.data === toValue(responseMessage)) return;\n\t\t\t}\n\t\t\tdata.value = e.data;\n\t\t\tonMessage === null || onMessage === void 0 || onMessage(ws, e);\n\t\t};\n\t};\n\tif (options.heartbeat) {\n\t\tconst { message = DEFAULT_PING_MESSAGE, scheduler = getDefaultScheduler(resolveNestedOptions(options.heartbeat)), pongTimeout = 1e3 } = resolveNestedOptions(options.heartbeat);\n\t\tconst { pause, resume } = scheduler(() => {\n\t\t\tsend(toValue(message), false);\n\t\t\tif (pongTimeoutWait != null) return;\n\t\t\tpongTimeoutWait = setTimeout(() => {\n\t\t\t\tclose();\n\t\t\t\texplicitlyClosed = false;\n\t\t\t}, pongTimeout);\n\t\t});\n\t\theartbeatPause = pause;\n\t\theartbeatResume = resume;\n\t}\n\tif (autoClose) {\n\t\tif (isClient) useEventListener(\"beforeunload\", () => close(), { passive: true });\n\t\ttryOnScopeDispose(close);\n\t}\n\tconst open = () => {\n\t\tif (!isClient && !isWorker) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\treturn {\n\t\tdata,\n\t\tstatus,\n\t\tclose,\n\t\tsend,\n\t\topen,\n\t\tws: wsRef\n\t};\n}\n//#endregion\n//#region useWebWorker/index.ts\nfunction useWebWorker(arg0, workerOptions, options) {\n\tconst { window = defaultWindow } = options !== null && options !== void 0 ? options : {};\n\tconst data = shallowRef(null);\n\tconst worker = shallowRef();\n\tconst post = (...args) => {\n\t\tif (!worker.value) return;\n\t\tworker.value.postMessage(...args);\n\t};\n\tconst terminate = function terminate() {\n\t\tif (!worker.value) return;\n\t\tworker.value.terminate();\n\t};\n\tif (window) {\n\t\tif (typeof arg0 === \"string\") worker.value = new Worker(arg0, workerOptions);\n\t\telse if (typeof arg0 === \"function\") worker.value = arg0();\n\t\telse worker.value = arg0;\n\t\tworker.value.onmessage = (e) => {\n\t\t\tdata.value = e.data;\n\t\t};\n\t\ttryOnScopeDispose(() => {\n\t\t\tif (worker.value) worker.value.terminate();\n\t\t});\n\t}\n\treturn {\n\t\tdata,\n\t\tpost,\n\t\tterminate,\n\t\tworker\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/depsParser.ts\n/**\n*\n* Concatenates the dependencies into a comma separated string.\n* this string will then be passed as an argument to the \"importScripts\" function\n*\n* @param deps array of string\n* @param localDeps array of function\n* @returns a string composed by the concatenation of the array\n* elements \"deps\" and \"importScripts\".\n*\n* @example\n* depsParser(['demo1', 'demo2']) // return importScripts('demo1', 'demo2')\n*/\nfunction depsParser(deps, localDeps) {\n\tif (deps.length === 0 && localDeps.length === 0) return \"\";\n\tconst depsString = deps.map((dep) => `'${dep}'`).toString();\n\tconst depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n\t\tconst str = fn.toString();\n\t\tif (str.trim().startsWith(\"function\")) return str;\n\t\telse return `const ${fn.name} = ${str}`;\n\t}).join(\";\");\n\tconst importString = `importScripts(${depsString});`;\n\treturn `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n//#endregion\n//#region useWebWorkerFn/lib/jobRunner.ts\n/**\n* This function accepts as a parameter a function \"userFunc\"\n* And as a result returns an anonymous function.\n* This anonymous function, accepts as arguments,\n* the parameters to pass to the function \"useArgs\" and returns a Promise\n* This function can be used as a wrapper, only inside a Worker\n* because it depends by \"postMessage\".\n*\n* @param userFunc {Function} fn the function to run with web worker\n*\n* @returns returns a function that accepts the parameters\n* to be passed to the \"userFunc\" function\n*/\nfunction jobRunner(userFunc) {\n\treturn (e) => {\n\t\tconst userFuncArgs = e.data[0];\n\t\treturn Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n\t\t\tpostMessage([\"SUCCESS\", result]);\n\t\t}).catch((error) => {\n\t\t\tpostMessage([\"ERROR\", error]);\n\t\t});\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/createWorkerBlobUrl.ts\n/**\n* Converts the \"fn\" function into the syntax needed to be executed within a web worker\n*\n* @param fn the function to run with web worker\n* @param deps array of strings, imported into the worker through \"importScripts\"\n* @param localDeps array of function, local dependencies\n*\n* @returns a blob url, containing the code of \"fn\" as a string\n*\n* @example\n* createWorkerBlobUrl((a,b) => a+b, [])\n* // return \"onmessage=return Promise.resolve((a,b) => a + b)\n* .then(postMessage(['SUCCESS', result]))\n* .catch(postMessage(['ERROR', error])\"\n*/\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n\tconst blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n\tconst blob = new Blob([blobCode], { type: \"text/javascript\" });\n\treturn URL.createObjectURL(blob);\n}\n//#endregion\n//#region useWebWorkerFn/index.ts\n/**\n* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.\n*\n* @see https://vueuse.org/useWebWorkerFn\n* @param fn\n* @param options\n*/\nfunction useWebWorkerFn(fn, options = {}) {\n\tconst { dependencies = [], localDependencies = [], timeout, window = defaultWindow } = options;\n\tlet worker;\n\tconst workerStatus = shallowRef(\"PENDING\");\n\tconst promise = shallowRef({});\n\tconst timeoutId = shallowRef();\n\tconst workerTerminate = (status = \"PENDING\") => {\n\t\tif (worker && worker._url && window) {\n\t\t\tworker.terminate();\n\t\t\tURL.revokeObjectURL(worker._url);\n\t\t\tpromise.value = {};\n\t\t\tworker = void 0;\n\t\t\twindow.clearTimeout(timeoutId.value);\n\t\t\tworkerStatus.value = status;\n\t\t}\n\t};\n\tworkerTerminate();\n\ttryOnScopeDispose(workerTerminate);\n\tconst generateWorker = () => {\n\t\tconst blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n\t\tconst newWorker = new Worker(blobUrl);\n\t\tnewWorker._url = blobUrl;\n\t\tnewWorker.onmessage = (e) => {\n\t\t\tconst { resolve = () => {}, reject = () => {} } = promise.value;\n\t\t\tconst [status, result] = e.data;\n\t\t\tswitch (status) {\n\t\t\t\tcase \"SUCCESS\":\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tworkerTerminate(status);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treject(result);\n\t\t\t\t\tworkerTerminate(\"ERROR\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tnewWorker.onerror = (e) => {\n\t\t\tconst { reject = () => {} } = promise.value;\n\t\t\te.preventDefault();\n\t\t\treject(e);\n\t\t\tworkerTerminate(\"ERROR\");\n\t\t};\n\t\tif (timeout) timeoutId.value = setTimeout(workerTerminate, timeout, \"TIMEOUT_EXPIRED\");\n\t\treturn newWorker;\n\t};\n\tconst callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n\t\tpromise.value = {\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t\tworker === null || worker === void 0 || worker.postMessage([[...fnArgs]]);\n\t\tworkerStatus.value = \"RUNNING\";\n\t});\n\tconst workerFn = (...fnArgs) => {\n\t\tif (workerStatus.value === \"RUNNING\") {\n\t\t\tconsole.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tworker = generateWorker();\n\t\treturn callWorker(...fnArgs);\n\t};\n\treturn {\n\t\tworkerFn,\n\t\tworkerStatus,\n\t\tworkerTerminate\n\t};\n}\n//#endregion\n//#region useWindowFocus/index.ts\n/**\n* Reactively track window focus with `window.onfocus` and `window.onblur`.\n*\n* @see https://vueuse.org/useWindowFocus\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowFocus(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef(false);\n\tconst focused = shallowRef(window.document.hasFocus());\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"blur\", () => {\n\t\tfocused.value = false;\n\t}, listenerOptions);\n\tuseEventListener(window, \"focus\", () => {\n\t\tfocused.value = true;\n\t}, listenerOptions);\n\treturn focused;\n}\n//#endregion\n//#region useWindowScroll/index.ts\n/**\n* Reactive window scroll.\n*\n* @see https://vueuse.org/useWindowScroll\n* @param options\n*/\nfunction useWindowScroll(options = {}) {\n\tconst { window = defaultWindow, ...rest } = options;\n\treturn useScroll(window, rest);\n}\n//#endregion\n//#region useWindowSize/index.ts\n/**\n* Reactive window size.\n*\n* @see https://vueuse.org/useWindowSize\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowSize(options = {}) {\n\tconst { window = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = \"inner\" } = options;\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst update = () => {\n\t\tif (window) if (type === \"outer\") {\n\t\t\twidth.value = window.outerWidth;\n\t\t\theight.value = window.outerHeight;\n\t\t} else if (type === \"visual\" && window.visualViewport) {\n\t\t\tconst { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n\t\t\twidth.value = Math.round(visualViewportWidth * scale);\n\t\t\theight.value = Math.round(visualViewportHeight * scale);\n\t\t} else if (includeScrollbar) {\n\t\t\twidth.value = window.innerWidth;\n\t\t\theight.value = window.innerHeight;\n\t\t} else {\n\t\t\twidth.value = window.document.documentElement.clientWidth;\n\t\t\theight.value = window.document.documentElement.clientHeight;\n\t\t}\n\t};\n\tupdate();\n\ttryOnMounted(update);\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"resize\", update, listenerOptions);\n\tif (window && type === \"visual\" && window.visualViewport) useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n\tif (listenOrientation) watch(useMediaQuery(\"(orientation: portrait)\"), () => update());\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n//#endregion\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, formatTimeAgoIntl, formatTimeAgoIntlParts, getSSRHandler, isFocusedElementEditable, isTypedCharValid, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, transition, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssSupports, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementOverflow, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeAgoIntl, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","/** 上传与文件选择使用的常用 MIME 类型集合。 */\nexport const FaMimeType = {\n\t/**\n\t * PDF\n\t */\n\tPDF: \"application/pdf\",\n\t/**\n\t * 文本文件\n\t */\n\tText: \"text/plain\",\n\t/**\n\t * Word 和 DOCX(Word 2007 及以后版本)\n\t */\n\tWord: \"application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n\t/**\n\t * Excel 和 CSV\n\t */\n\tExcel: \"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,text/csv\",\n\t/**\n\t * PowerPoint 和 PPTX(PowerPoint 2007 及以后版本)\n\t */\n\tPowerpoint: \"application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n\t/**\n\t * 压缩文件\n\t */\n\tZIP: \"application/zip,application/x-zip-compressed\",\n\t/**\n\t * 图片\n\t */\n\tImage: \"image/jpeg,image/png,image/gif\",\n\t/**\n\t * 视频\n\t */\n\tVideo: \"video/mp4,video/mpeg,video/quicktime\",\n\t/**\n\t * 音频\n\t */\n\tAudio: \"audio/mpeg,audio/wav\",\n\t/**\n\t * HTML\n\t */\n\tHtml: \"text/html\",\n\t/**\n\t * CSS\n\t */\n\tCss: \"text/css\",\n\t/**\n\t * JavaScript\n\t */\n\tJavaScript: \"application/javascript,text/javascript\",\n\t/**\n\t * JSON\n\t */\n\tJson: \"application/json\",\n\t/**\n\t * XML\n\t */\n\tXML: \"application/xml,text/xml\",\n};\n","/** Fast 业务表单和输入组件共享的正则表达式集合。 */\nexport const RegExps = {\n\t/**\n\t * UUID\n\t */\n\tUUID: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n\t/**\n\t * 手机号\n\t */\n\tMobile: /^(?:(?:\\+|00)86)?1\\d{10}$/,\n\t/**\n\t * 电话\n\t */\n\tPhone: /^(?:(?:\\d{3}-)?\\d{8}|(?:\\d{4}-)?\\d{7,8})(?:-\\d+)?$/,\n\t/**\n\t * 邮箱\n\t */\n\tEmail: /^[\\w-]+@([a-zA-Z0-9]+\\.)+(com|cn|net|org)$/,\n\t/**\n\t * 身份证\n\t */\n\tIdCard: /(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9X]$)|(^[1-9]\\d{7}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}[0-9X]$)/i,\n\t/**\n\t * 外部链接\n\t * 匹配http、https、mailto、tel和ftp开头的链接\n\t */\n\tExternal: /^(https?:|mailto:|tel:|ftp:)/,\n\t/**\n\t * Url\n\t */\n\tUrl: /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d?)(\\.(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:\\d+)*(\\/($|[\\w.,?'\\\\+&%$#=~-]+))*$/,\n\t/**\n\t * 车牌号\n\t */\n\tCarNumber: /^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新军使领][A-HJ-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$/,\n\t/**\n\t * 新能源车牌号\n\t */\n\tNewEnergyCarNumber:\n\t\t/^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新军使领][A-HJ-Z]((\\d{5}[DF]$)|([A-E][A-HJ-NP-Z0-9]\\d{3}[0-9挂学警港澳]$)|([FGHJK][A-HJ-NP-Z0-9]\\d{3}[0-9挂学警港澳]$))/,\n\t/**\n\t * 邮政编码\n\t */\n\tPostCode: /^[1-9]\\d{5}$/,\n\t/**\n\t * ipv4\n\t */\n\tIpv4: /^([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.([01]?\\d{1,2}|2[0-4]\\d|25[0-5])$/,\n\t/**\n\t * 护照\n\t */\n\tPassport: /^[EG]\\d{8}$/i,\n\t/**\n\t * 港澳通行证\n\t */\n\tHKMacauPass: /^[HM]\\d{8}$/i,\n\t/**\n\t * 账号(6-20位字母或数字,必须以字母开头,不能全为数字)\n\t */\n\tAccount: /^[a-z][a-z\\d]{5,19}$/i,\n\t/**\n\t * 弱密码(只包含字母和数字,长度为6到18位)\n\t */\n\tPassword: /^[A-Z0-9]{6,18}$/i,\n\t/**\n\t * 强密码(8到20位,包含大小写字母、数字及特殊字符)\n\t */\n\tStrongPassword: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[\\W_])[\\s\\S]{8,20}$/,\n\t/**\n\t * 中文字符\n\t */\n\tChinese: /^[\\u4E00-\\u9FA5]+$/,\n\t/**\n\t * 英文字符\n\t */\n\tEnglish: /^[a-z]+$/i,\n};\n","/**\n * 车牌号地区\n */\nexport const CarNumberArea: readonly string[] = [\n\t\"京\",\n\t\"津\",\n\t\"冀\",\n\t\"晋\",\n\t\"蒙\",\n\t\"辽\",\n\t\"吉\",\n\t\"黑\",\n\t\"沪\",\n\t\"苏\",\n\t\"浙\",\n\t\"皖\",\n\t\"闽\",\n\t\"赣\",\n\t\"鲁\",\n\t\"豫\",\n\t\"鄂\",\n\t\"湘\",\n\t\"粤\",\n\t\"桂\",\n\t\"琼\",\n\t\"渝\",\n\t\"川\",\n\t\"贵\",\n\t\"云\",\n\t\"藏\",\n\t\"陕\",\n\t\"甘\",\n\t\"青\",\n\t\"宁\",\n\t\"新\",\n\t\"军\",\n\t\"使\",\n\t\"领\",\n];\n\n/**\n * 车牌号字母\n */\nexport const CarNumberLetter: readonly string[] = [\n\t\"Q\",\n\t\"W\",\n\t\"E\",\n\t\"R\",\n\t\"T\",\n\t\"Y\",\n\t\"U\",\n\t\"O\",\n\t\"P\",\n\t\"挂\",\n\t\"A\",\n\t\"S\",\n\t\"D\",\n\t\"F\",\n\t\"G\",\n\t\"H\",\n\t\"J\",\n\t\"K\",\n\t\"L\",\n\t\"学\",\n\t\"Z\",\n\t\"X\",\n\t\"C\",\n\t\"V\",\n\t\"B\",\n\t\"N\",\n\t\"M\",\n\t\"警\",\n\t\"港\",\n\t\"澳\",\n];\n\n/**\n * 车牌号数字\n */\nexport const CarNumberDigit: readonly string[] = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"0\"];\n\n/**\n * 特殊车牌号\n */\n// export const CarNumberSpecial: Readonly<string[]> = [\"挂\", \"学\", \"警\", \"港\", \"澳\"];\n","import { useVModel } from \"@vueuse/core\";\nimport { Fragment, computed, defineComponent, inject, reactive, ref } from \"vue\";\nimport { Back } from \"@element-plus/icons-vue\";\nimport { ElButton, ElInput, ElMessage, ElPopover, formContextKey, formItemContextKey, inputProps } from \"element-plus\";\nimport { isNull, isString } from \"lodash-unified\";\nimport { RegExps } from \"../../../constants\";\nimport { definePropType, useProps, useRender } from \"../../../utils\";\nimport { CarNumberArea, CarNumberDigit, CarNumberLetter } from \"./common\";\nimport type { PopoverInstance } from \"element-plus\";\n\nexport default defineComponent({\n\tname: \"FaCarNumber\",\n\tprops: {\n\t\t...inputProps,\n\t\t/** @description value conversion function */\n\t\tparser: {\n\t\t\t...inputProps.parser,\n\t\t\ttype: definePropType<(value: string) => string>(Function),\n\t\t},\n\t\t/** @description v-model绑定值 */\n\t\tmodelValue: {\n\t\t\ttype: definePropType<string | null>(String),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description placeholder */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: \"请选择\",\n\t\t},\n\t},\n\temits: {\n\t\t/** @description v-model 回调 */\n\t\t\"update:modelValue\": (value: string | null) => isString(value) || isNull(value),\n\t\t/** @description 改变 */\n\t\tchange: (value: string | null) => isString(value) || isNull(value),\n\t},\n\tsetup(props, { emit }) {\n\t\tconst modelValue = useVModel(props, \"modelValue\", emit, { passive: true });\n\n\t\tconst state = reactive({\n\t\t\tswitchLetter: computed(() => {\n\t\t\t\tif ((modelValue.value?.length ?? 0) >= 1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}),\n\t\t\tdisabledButton: computed(() => {\n\t\t\t\tif ((modelValue.value?.length ?? 0) >= 8) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}),\n\t\t});\n\n\t\tconst popoverRef = ref<PopoverInstance>();\n\t\t// 获取 el-form 组件上下文\n\t\tconst formContext = inject(formContextKey, undefined);\n\t\t// 获取 el-form-item 组件上下文\n\t\tconst formItemContext = inject(formItemContextKey, undefined);\n\n\t\tconst handleInputFormatter = (value: string): string => {\n\t\t\tif (value.length === 2) {\n\t\t\t\treturn `${value} ● `;\n\t\t\t} else if (value.length > 2) {\n\t\t\t\treturn `${value.slice(0, 2)} ● ${value.slice(2)}`;\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\n\t\tconst handleSelectCarNumber = (value: string): void => {\n\t\t\tmodelValue.value ??= \"\";\n\t\t\tmodelValue.value += value;\n\t\t};\n\n\t\tconst handleBackClick = (): void => {\n\t\t\tconst value = modelValue.value ?? \"\";\n\t\t\tif (value.length === 0) return;\n\t\t\tmodelValue.value = value.substring(0, value.length - 1);\n\t\t};\n\n\t\tconst handleConfirmClick = (): void => {\n\t\t\tlet success = false;\n\t\t\tconst value = modelValue.value ?? \"\";\n\t\t\tif (value.length === 7) {\n\t\t\t\tsuccess = RegExps.CarNumber.test(value);\n\t\t\t} else if (value.length === 8) {\n\t\t\t\tsuccess = RegExps.NewEnergyCarNumber.test(value);\n\t\t\t}\n\t\t\tif (success) {\n\t\t\t\temit(\"change\", value);\n\t\t\t\t// 调用 el-form 内部的校验方法(可自动校验)\n\t\t\t\tif (formItemContext?.prop) void formContext?.validateField([formItemContext.prop]);\n\t\t\t} else {\n\t\t\t\tif (formItemContext?.prop && formContext) {\n\t\t\t\t\temit(\"change\", value);\n\t\t\t\t\t// 调用 el-form 内部的校验方法(可自动校验)\n\t\t\t\t\tvoid formContext.validateField([formItemContext.prop]);\n\t\t\t\t} else {\n\t\t\t\t\tElMessage.error(\"车牌号格式不正确\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpopoverRef.value?.hide();\n\t\t};\n\n\t\tconst handleClearClick = (): void => {\n\t\t\tmodelValue.value = null;\n\t\t\temit(\"change\", null);\n\t\t\t// 调用 el-form 内部的校验方法(可自动校验)\n\t\t\tif (formItemContext?.prop) void formContext?.validateField([formItemContext.prop]);\n\t\t};\n\n\t\tconst elInputProps = useProps(props, inputProps, [\"modelValue\", \"readonly\", \"formatter\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElPopover\n\t\t\t\tref={popoverRef}\n\t\t\t\twidth=\"auto\"\n\t\t\t\tpopperClass=\"fa-car-number__popover\"\n\t\t\t\ttrigger=\"click\"\n\t\t\t\tshowArrow={false}\n\t\t\t\tshowAfter={0}\n\t\t\t\thideAfter={0}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\treference: () => (\n\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t{...elInputProps.value}\n\t\t\t\t\t\t\tclass=\"fa-car-number__input\"\n\t\t\t\t\t\t\tvModel={modelValue.value}\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\tformatter={handleInputFormatter}\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<div class={[\"fa-car-number__popover__area\", state.switchLetter ? \"fa-car-number__popover__hide\" : \"\"]}>\n\t\t\t\t\t\t\t\t{CarNumberArea.map((area) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(area)}>\n\t\t\t\t\t\t\t\t\t\t{area}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class={[\"fa-car-number__popover__digit-letter\", state.switchLetter ? \"\" : \"fa-car-number__popover__hide\"]}>\n\t\t\t\t\t\t\t\t{CarNumberDigit.map((digit) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(digit)}>\n\t\t\t\t\t\t\t\t\t\t{digit}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{CarNumberLetter.map((letter) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(letter)}>\n\t\t\t\t\t\t\t\t\t\t{letter}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"fa-car-number__popover__btn\">\n\t\t\t\t\t\t\t\t<ElButton class=\"fa-car-number__popover__btn__clear\" disabled={!modelValue.value} onClick={handleClearClick}>\n\t\t\t\t\t\t\t\t\t清除\n\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\tclass=\"fa-car-number__popover__btn__back\"\n\t\t\t\t\t\t\t\t\ttype=\"danger\"\n\t\t\t\t\t\t\t\t\ticon={Back}\n\t\t\t\t\t\t\t\t\tdisabled={!modelValue.value}\n\t\t\t\t\t\t\t\t\tonClick={handleBackClick}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\tclass=\"fa-car-number__popover__btn__confirm\"\n\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\tdisabled={!modelValue.value || modelValue.value.length < 7}\n\t\t\t\t\t\t\t\t\tonClick={handleConfirmClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t确认\n\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t</ElPopover>\n\t\t));\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport CarNumber from \"./src/carNumber\";\nimport type { TSXWithInstall } from \"../../utils\";\n\n/** 中国大陆机动车号牌输入组件。 */\nexport const FaCarNumber: TSXWithInstall<typeof CarNumber> = withInstall(CarNumber);\nexport default FaCarNumber;\n\nexport * from \"./src/common\";\n\n/** FaCarNumber 暴露的组件实例类型。 */\nexport type FaCarNumberInstance = InstanceType<typeof CarNumber>;\n","import { computed, defineComponent, h, reactive, resolveComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\nimport { RegExps } from \"../../../constants\";\nimport { addCssUnit, useRender } from \"../../../utils\";\nimport type { CSSProperties } from \"vue\";\n\n/** FaIcon 的运行时 Props 定义。 */\nexport const faIconProps = {\n\t/** @description el-icon- 使用 El-icon 的图标;fa-icon 使用 Fast 图标组件库; */\n\tname: {\n\t\ttype: String,\n\t\trequired: true as const,\n\t},\n\t/** @description 大小 */\n\tsize: {\n\t\ttype: [String, Number],\n\t},\n\t/** @description 颜色*/\n\tcolor: String,\n};\n\nexport default defineComponent({\n\tname: \"FaIcon\",\n\tprops: faIconProps,\n\tsetup(props, { attrs }) {\n\t\tconst state = reactive({\n\t\t\tisUrl: computed(() => RegExps.External.test(props.name)),\n\t\t\tstyle: computed((): CSSProperties => {\n\t\t\t\tconst result: CSSProperties & { \"-webkit-mask\"?: string } = {};\n\t\t\t\tif (props.size) {\n\t\t\t\t\tresult.fontSize = addCssUnit(props.size);\n\t\t\t\t}\n\t\t\t\tif (props.color) {\n\t\t\t\t\tresult.color = props.color;\n\t\t\t\t}\n\t\t\t\tif (state.isUrl) {\n\t\t\t\t\tresult.mask = `url(${props.name}) no-repeat 50% 50%`;\n\t\t\t\t\tresult[\"-webkit-mask\"] = `url(${props.name}) no-repeat 50% 50%`;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t});\n\n\t\tuseRender(() =>\n\t\t\tprops.name.startsWith(\"el-icon-\") ? (\n\t\t\t\t<ElIcon {...attrs} {...props} class={[\"fa-icon\", props.name]}>\n\t\t\t\t\t{h(resolveComponent(props.name))}\n\t\t\t\t</ElIcon>\n\t\t\t) : props.name.startsWith(\"fa-icon\") ? (\n\t\t\t\t<ElIcon {...attrs} {...props} class={[\"fa-icon\", props.name]}>\n\t\t\t\t\t{h(resolveComponent(props.name))}\n\t\t\t\t</ElIcon>\n\t\t\t) : state.isUrl ? (\n\t\t\t\t<div {...attrs} class=\"el-icon fa-icon url-icon\" style={state.style} />\n\t\t\t) : (\n\t\t\t\t<i {...attrs} class={[\"el-icon fa-icon\", props.name]} style={state.style} />\n\t\t\t)\n\t\t);\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Icon from \"./src/icon\";\nimport type { faIconProps } from \"./src/icon\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 按名称或组件渲染图标的统一图标组件。 */\nexport const FaIcon: TSXWithInstall<typeof Icon> = withInstall(Icon);\nexport default FaIcon;\n\nexport { faIconProps } from \"./src/icon\";\n\n/** FaIcon 暴露的组件实例类型。 */\nexport type FaIconInstance = InstanceType<typeof Icon>;\n\n/** FaIcon 的完整 Props 类型。 */\nexport type FaIconProps = ExtractPropTypes<typeof faIconProps>;\n","import { useEventListener } from \"@vueuse/core\";\nimport { Transition, computed, defineComponent, onMounted, reactive } from \"vue\";\nimport { useGlobalSize } from \"element-plus\";\nimport { isObject } from \"lodash-unified\";\nimport { definePropType, useExpose, useRender } from \"../../../utils\";\nimport { FaIcon } from \"../../icon\";\nimport type { FaContextMenuData } from \"./contextMenu.type\";\n\nexport default defineComponent({\n\tname: \"FaContextMenu\",\n\tprops: {\n\t\t/** @description 数据 */\n\t\tdata: {\n\t\t\ttype: definePropType<FaContextMenuData[]>(Array),\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\temits: {\n\t\t/** @description 点击事件 */\n\t\tclick: (event: MouseEvent, data: FaContextMenuData) => event instanceof MouseEvent && isObject(data),\n\t},\n\tsetup(props, { emit, expose }) {\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tvisible: false,\n\t\t\taxis: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t},\n\t\t});\n\n\t\tconst handleClick = (event: MouseEvent, data: FaContextMenuData): void => {\n\t\t\tif (data?.disabled) return;\n\t\t\tvoid data?.click?.(event, data);\n\t\t\temit(\"click\", event, data);\n\t\t};\n\n\t\tconst open = (axis: { x: number; y: number } = { x: 0, y: 0 }): void => {\n\t\t\tstate.axis = axis;\n\t\t\tstate.visible = true;\n\t\t};\n\n\t\tconst close = (): void => {\n\t\t\tstate.visible = false;\n\t\t};\n\n\t\tonMounted(() => {\n\t\t\tuseEventListener(document, \"click\", close);\n\t\t});\n\n\t\tuseRender(() => (\n\t\t\t<Transition name=\"el-zoom-in-top\">\n\t\t\t\t<div\n\t\t\t\t\tclass={[\"fa-context-menu\", `fa-context-menu-${_globalSize.value}`, \"el-popper el-dropdown__popper\"]}\n\t\t\t\t\tstyle={{ top: `${state.axis.y + 5}px`, left: `${state.axis.x + 14}px` }}\n\t\t\t\t\tvShow={state.visible}\n\t\t\t\t\tkey={Math.random()}\n\t\t\t\t>\n\t\t\t\t\t<ul class=\"el-dropdown-menu\">\n\t\t\t\t\t\t{props.data\n\t\t\t\t\t\t\t.filter((f) => !f.hide)\n\t\t\t\t\t\t\t.map((item) => (\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tclass={[\"el-dropdown-menu__item\", item?.disabled === true ? \"is-disabled\" : \"\"]}\n\t\t\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\t\t\t\t\t\thandleClick(event, item);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item?.icon ? <FaIcon name={item?.icon} /> : null}\n\t\t\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</Transition>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 是否显示 */\n\t\t\tvisible: computed(() => state.visible),\n\t\t\t/** @description 打开菜单 */\n\t\t\topen,\n\t\t\t/** @description 关闭菜单 */\n\t\t\tclose,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport ContextMenu from \"./src/contextMenu\";\nimport type { TSXWithInstall } from \"../../utils\";\n\n/** 支持定位和嵌套操作项的右键菜单组件。 */\nexport const FaContextMenu: TSXWithInstall<typeof ContextMenu> = withInstall(ContextMenu);\nexport default FaContextMenu;\n\nexport * from \"./src/contextMenu.type\";\n\n/** FaContextMenu 暴露的组件实例类型。 */\nexport type FaContextMenuInstance = InstanceType<typeof ContextMenu>;\n","import { Fragment, computed, defineComponent, nextTick, reactive, ref, watch } from \"vue\";\nimport { Close, Eleme, Refresh } from \"@element-plus/icons-vue\";\nimport { ElButton, ElDialog, ElIcon, ElMessage, ElMessageBox, ElScrollbar, dialogEmits, dialogProps, useGlobalSize } from \"element-plus\";\nimport { FullScreen, FullScreenExit } from \"@fast-element-plus/icons-vue\";\nimport { isBoolean } from \"lodash-unified\";\nimport { callOptionalFunction, definePropType, makeSlots, useEmits, useExpose, useProps, useRender } from \"../../../utils\";\nimport type { DialogInstance } from \"element-plus\";\nimport type { VNode } from \"vue\";\n\n/** FaDialog 的运行时 Props 定义。 */\nexport const faDialogProps = {\n\t...dialogProps,\n\t/** @description whether to align the dialog both horizontally and vertically*/\n\talignCenter: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether to append Dialog itself to body. A nested Dialog should have this attribute set to `true` */\n\tappendToBody: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description enable dragging feature for Dialog */\n\tdraggable: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description destroy elements in Dialog when closed */\n\tdestroyOnClose: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description draggable Dialog can overflow the viewport */\n\toverflow: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description value for `margin-top` of Dialog CSS, default is 15vh */\n\ttop: {\n\t\ttype: String,\n\t\tdefault: \"5vh\",\n\t},\n\t/** @description width of Dialog, default is 50% */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"90%\",\n\t},\n\t/** @description 显示刷新按钮 */\n\tshowRefresh: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示全屏图标 */\n\tshowFullscreen: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示关闭按钮 */\n\tshowCloseButton: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示确认按钮 */\n\tshowConfirmButton: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 禁用确认按钮 */\n\tdisabledConfirmButton: Boolean,\n\t/** @description 关闭按钮文字,默认取消 */\n\tcloseButtonText: {\n\t\ttype: String,\n\t\tdefault: \"取消\",\n\t},\n\t/** @description 确认按钮文字,默认确认 */\n\tconfirmButtonText: {\n\t\ttype: String,\n\t\tdefault: \"确认\",\n\t},\n\t/** @description 隐藏底部操作 */\n\thideFooter: Boolean,\n\t/** @description 撑满高度 */\n\tfullHeight: Boolean,\n\t/** @description 显示关闭回调 */\n\tshowBeforeClose: Boolean,\n\t/** @description 打开之后 */\n\tafterOpen: {\n\t\ttype: definePropType<() => void>(Function),\n\t},\n};\n\n/** FaDialog 的运行时 Emits 定义。 */\nexport const faDialogEmits = {\n\t...dialogEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: boolean): boolean => isBoolean(value),\n\t/** @description 确认按钮点击事件 */\n\tconfirmClick: (): boolean => true,\n};\n\n/** FaDialog 的插槽参数。 */\nexport interface FaDialogSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: { loading: boolean };\n\t/** @description 头部插槽 */\n\theader: { loading: boolean; close: () => void; titleId: string; titleClass: string };\n\t/** @description 标题插槽 */\n\ttitle: { loading: boolean; close: () => void; titleId: string; titleClass: string };\n\t/** @description 底部插槽 */\n\tfooter: { loading: boolean; close: () => void };\n}\n\nexport default defineComponent({\n\tname: \"FaDialog\",\n\tprops: faDialogProps,\n\temits: faDialogEmits,\n\tslots: makeSlots<FaDialogSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tloading: false,\n\t\t\tvisible: props.modelValue,\n\t\t\tfullscreen: false,\n\t\t\trefreshing: false,\n\t\t});\n\n\t\tconst dialogRef = ref<DialogInstance>();\n\n\t\tlet cacheOpenFunction: (() => void | Promise<void>) | undefined;\n\n\t\tconst handleOpen = (openFunction?: () => void | Promise<void>): void => {\n\t\t\tstate.visible = true;\n\t\t\tcacheOpenFunction = openFunction;\n\t\t\tvoid nextTick(() => {\n\t\t\t\tstate.loading = true;\n\t\t\t\tvoid callOptionalFunction(props.afterOpen ?? openFunction)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\temit(\"open\");\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t// 打开回调失败时保持原有的自动关闭行为,并将异常继续交给运行时。\n\t\t\t\t\t\tstate.visible = false;\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tstate.loading = false;\n\t\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst handleClose = (closeFunction?: () => void | Promise<void>): void => {\n\t\t\tstate.loading = true;\n\t\t\tvoid callOptionalFunction(closeFunction)\n\t\t\t\t.then(() => {\n\t\t\t\t\temit(\"close\");\n\t\t\t\t\tstate.visible = false;\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tstate.loading = false;\n\t\t\t\t});\n\t\t};\n\n\t\tconst handleLoading = (loadingFunction: () => void | Promise<void>): void => {\n\t\t\tstate.loading = true;\n\t\t\tvoid callOptionalFunction(loadingFunction).finally(() => {\n\t\t\t\tstate.loading = false;\n\t\t\t});\n\t\t};\n\n\t\tconst handleRefresh = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\tstate.refreshing = true;\n\t\t\tstate.loading = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tstate.refreshing = false;\n\t\t\t\thandleOpen(cacheOpenFunction);\n\t\t\t\tElMessage.success(\"刷新成功\");\n\t\t\t}, 500);\n\t\t};\n\n\t\tconst handleBeforeClose = (done: () => void): void => {\n\t\t\tif (state.loading) return;\n\t\t\t// 解决 image 预览摁下 ese 会关闭弹窗的问题\n\t\t\tif (document.querySelector(\".el-image-viewer__wrapper\")) return;\n\n\t\t\tconst newDone = (): Promise<void> => {\n\t\t\t\t// 组件对外约定为无参数完成钩子,不采用 Element Plus 的 done 回调签名。\n\t\t\t\treturn callOptionalFunction(props.beforeClose as unknown as (() => void | PromiseLike<void>) | undefined).then(() => {\n\t\t\t\t\temit(\"close\");\n\t\t\t\t\tdone();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (props.showBeforeClose) {\n\t\t\t\t// 用户取消关闭属于正常分支,无需继续执行 beforeClose。\n\t\t\t\tvoid ElMessageBox.confirm(\"确定关闭?\", { type: \"warning\" }).then(() => newDone());\n\t\t\t} else {\n\t\t\t\tvoid newDone();\n\t\t\t}\n\t\t};\n\n\t\tconst handleFullscreen = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\tstate.fullscreen = !state.fullscreen;\n\t\t};\n\n\t\tconst handleConfirmClick = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\temit(\"confirmClick\");\n\t\t};\n\n\t\tconst handleCloseClick = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\thandleClose();\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.visible !== newValue) state.visible = newValue;\n\t\t\t}\n\t\t);\n\n\t\twatch(\n\t\t\t() => state.visible,\n\t\t\t(newValue) => {\n\t\t\t\tif (props.modelValue !== newValue) emit(\"update:modelValue\", newValue);\n\t\t\t}\n\t\t);\n\n\t\tconst elDialogProps = useProps(props, dialogProps, [\"modelValue\", \"fullscreen\", \"showClose\", \"beforeClose\"]);\n\t\t// open、close 是 Fast 异步业务流程完成事件,不直接透传 Element Plus 的同名生命周期事件。\n\t\tconst elDialogEmits = useEmits(dialogEmits, emit, [\"open\", \"close\", \"update:modelValue\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElDialog\n\t\t\t\t{...elDialogProps.value}\n\t\t\t\t{...elDialogEmits.value}\n\t\t\t\tref={dialogRef}\n\t\t\t\tclass={[\n\t\t\t\t\t\"fa-dialog\",\n\t\t\t\t\t`fa-dialog-${_globalSize.value}`,\n\t\t\t\t\t{ \"fa-dialog__full-height\": props.fullHeight, \"fa-dialog__fullscreen\": state.fullscreen },\n\t\t\t\t]}\n\t\t\t\tvModel={state.visible}\n\t\t\t\tfullscreen={state.fullscreen}\n\t\t\t\tshowClose={false}\n\t\t\t\tbeforeClose={handleBeforeClose}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\theader: ({ titleId, titleClass }: { close: () => void; titleId: string; titleClass: string }) => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<div id={titleId} class={[\"fa-dialog__header-title\", titleClass]}>\n\t\t\t\t\t\t\t\t{slots.title?.({ loading: state.loading, close: handleCloseClick, titleId, titleClass }) ?? props.title}\n\t\t\t\t\t\t\t\t{slots.header?.({ loading: state.loading, close: handleCloseClick, titleId, titleClass })}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{props.showRefresh && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle=\"刷新\"\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-dialog__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleRefresh}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t<Refresh />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{props.showFullscreen && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle={state.fullscreen ? \"关闭全屏显示\" : \"全屏显示\"}\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-dialog__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleFullscreen}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon>{state.fullscreen ? <FullScreenExit /> : <FullScreen />}</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{props.showClose && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle=\"关闭\"\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-dialog__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleCloseClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t<Close />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<ElScrollbar vLoading={state.loading} element-loading-text=\"加载中...\">\n\t\t\t\t\t\t\t{!state.refreshing && slots.default?.(state)}\n\t\t\t\t\t\t</ElScrollbar>\n\t\t\t\t\t),\n\t\t\t\t\t...(!props.hideFooter && {\n\t\t\t\t\t\tfooter: (): VNode[] => [\n\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t{slots.footer?.({ loading: state.loading, close: handleCloseClick })}\n\t\t\t\t\t\t\t\t{props.showCloseButton && (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.loading} onClick={handleCloseClick}>\n\t\t\t\t\t\t\t\t\t\t{props.closeButtonText}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{props.showConfirmButton && (\n\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\tloading={state.loading}\n\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabledConfirmButton}\n\t\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirmClick}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{state.loading ? \"加载中...\" : props.confirmButtonText}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Fragment>,\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElDialog>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 调用原生关闭流程,并执行 beforeClose。 */\n\t\t\thandleClose: computed(() => dialogRef.value?.handleClose),\n\t\t\t/** @description 弹窗内容引用 */\n\t\t\tdialogContentRef: computed<unknown>(() => dialogRef.value?.dialogContentRef as unknown),\n\t\t\t/** @description 重置位置 */\n\t\t\tresetPosition: computed(() => dialogRef.value?.resetPosition),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 是否显示 */\n\t\t\tvisible: computed(() => state.visible),\n\t\t\t/** @description 打开弹窗 */\n\t\t\topen: handleOpen,\n\t\t\t/** @description 关闭弹窗 */\n\t\t\tclose: handleClose,\n\t\t\t/** @description 刷新弹窗 */\n\t\t\trefresh: handleRefresh,\n\t\t\t/** @description 弹窗加载 */\n\t\t\tdoLoading: handleLoading,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Dialog, { faDialogEmits, faDialogProps } from \"./src/dialog\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 封装加载、确认与关闭控制的业务对话框组件。 */\nexport const FaDialog: TSXWithInstall<typeof Dialog> = withInstall(Dialog);\nexport default FaDialog;\n\nexport { faDialogProps, faDialogEmits };\nexport type { FaDialogSlots } from \"./src/dialog\";\n\n/** FaDialog 暴露的组件实例类型。 */\nexport type FaDialogInstance = InstanceType<typeof Dialog>;\n\n/** FaDialog 的完整 Props 类型。 */\nexport type FaDialogProps = ExtractPropTypes<typeof faDialogProps>;\n\n/** FaDialog 的 Emits 类型。 */\nexport type FaDialogEmits = typeof faDialogEmits;\n","import { Fragment, computed, defineComponent, nextTick, onBeforeUnmount, reactive, ref, watch } from \"vue\";\nimport { Close, Eleme, Refresh } from \"@element-plus/icons-vue\";\nimport { ElButton, ElDrawer, ElIcon, ElMessage, ElMessageBox, ElScrollbar, drawerEmits, drawerProps, useGlobalSize } from \"element-plus\";\nimport { FullScreen, FullScreenExit } from \"@fast-element-plus/icons-vue\";\nimport { isBoolean } from \"lodash-unified\";\nimport { callOptionalFunction, definePropType, makeSlots, useEmits, useExpose, useProps, useRender } from \"../../../utils\";\nimport type { VNode } from \"vue\";\n\n/** FaDrawer 的运行时 Props 定义。 */\nexport const faDrawerProps = {\n\t...drawerProps,\n\t/** @description whether to append Dialog itself to body. A nested Dialog should have this attribute set to `true` */\n\tappendToBody: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description enable dragging feature for Dialog */\n\tdraggable: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description destroy elements in Dialog when closed */\n\tdestroyOnClose: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示刷新按钮 */\n\tshowRefresh: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示全屏图标 */\n\tshowFullscreen: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示关闭按钮 */\n\tshowCloseButton: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 显示确认按钮 */\n\tshowConfirmButton: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 禁用确认按钮 */\n\tdisabledConfirmButton: Boolean,\n\t/** @description 关闭按钮文字,默认取消 */\n\tcloseButtonText: {\n\t\ttype: String,\n\t\tdefault: \"取消\",\n\t},\n\t/** @description 确认按钮文字,默认确认 */\n\tconfirmButtonText: {\n\t\ttype: String,\n\t\tdefault: \"确认\",\n\t},\n\t/** @description 隐藏底部操作 */\n\thideFooter: Boolean,\n\t/** @description 显示关闭回调 */\n\tshowBeforeClose: Boolean,\n\t/** @description 打开之后 */\n\tafterOpen: {\n\t\ttype: definePropType<() => void>(Function),\n\t},\n};\n\n/** FaDrawer 的运行时 Emits 定义。 */\nexport const faDrawerEmits = {\n\t...drawerEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: boolean): boolean => isBoolean(value),\n\t/** @description 确认按钮点击事件 */\n\tconfirmClick: (): boolean => true,\n};\n\n/** FaDrawer 的插槽参数。 */\nexport interface FaDrawerSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: { loading: boolean };\n\t/** @description 头部插槽 */\n\theader: { loading: boolean; close: () => void; titleId: string; titleClass: string };\n\t/** @description 标题插槽 */\n\ttitle: { loading: boolean; close: () => void; titleId: string; titleClass: string };\n\t/** @description 底部插槽 */\n\tfooter: { loading: boolean; close: () => void };\n}\n\nexport default defineComponent({\n\tname: \"FaDrawer\",\n\tprops: faDrawerProps,\n\temits: faDrawerEmits,\n\tslots: makeSlots<FaDrawerSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tloading: false,\n\t\t\tvisible: props.modelValue,\n\t\t\tfullscreen: false,\n\t\t\tsize: props.size ?? \"30%\",\n\t\t\tdragging: false,\n\t\t\trefreshing: false,\n\t\t});\n\n\t\tconst drawerRef = ref<InstanceType<typeof ElDrawer>>();\n\n\t\tlet cacheOpenFunction: (() => void | Promise<void>) | undefined;\n\n\t\tconst handleOpen = (openFunction?: () => void | Promise<void>): void => {\n\t\t\tstate.visible = true;\n\t\t\tcacheOpenFunction = openFunction;\n\t\t\tvoid nextTick(() => {\n\t\t\t\tstate.loading = true;\n\t\t\t\tvoid callOptionalFunction(props.afterOpen ?? openFunction)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\temit(\"open\");\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t// 打开回调失败时保持原有的自动关闭行为,并将异常继续交给运行时。\n\t\t\t\t\t\tstate.visible = false;\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tstate.loading = false;\n\t\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst handleClose = (closeFunction?: () => void | Promise<void>): void => {\n\t\t\tstate.loading = true;\n\t\t\tvoid callOptionalFunction(closeFunction)\n\t\t\t\t.then(() => {\n\t\t\t\t\temit(\"close\");\n\t\t\t\t\tstate.visible = false;\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tstate.loading = false;\n\t\t\t\t});\n\t\t};\n\n\t\tconst handleLoading = (loadingFunction: () => void | Promise<void>): void => {\n\t\t\tstate.loading = true;\n\t\t\tvoid callOptionalFunction(loadingFunction).finally(() => {\n\t\t\t\tstate.loading = false;\n\t\t\t});\n\t\t};\n\n\t\tconst handleRefresh = (): void => {\n\t\t\tstate.refreshing = true;\n\t\t\tstate.loading = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tstate.refreshing = false;\n\t\t\t\thandleOpen(cacheOpenFunction);\n\t\t\t\tElMessage.success(\"刷新成功\");\n\t\t\t}, 500);\n\t\t};\n\n\t\tconst handleBeforeClose = (done: () => void): void => {\n\t\t\tif (state.loading) return;\n\t\t\t// 解决 image 预览摁下 ese 会关闭弹窗的问题\n\t\t\tif (document.querySelector(\".el-image-viewer__wrapper\")) return;\n\n\t\t\tconst newDone = (): Promise<void> => {\n\t\t\t\t// 组件对外约定为无参数完成钩子,不采用 Element Plus 的 done 回调签名。\n\t\t\t\treturn callOptionalFunction(props.beforeClose as unknown as (() => void | PromiseLike<void>) | undefined).then(() => {\n\t\t\t\t\temit(\"close\");\n\t\t\t\t\tdone();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (props.showBeforeClose) {\n\t\t\t\t// 用户取消关闭属于正常分支,无需继续执行 beforeClose。\n\t\t\t\tvoid ElMessageBox.confirm(\"确定关闭?\", { type: \"warning\" }).then(() => newDone());\n\t\t\t} else {\n\t\t\t\tvoid newDone();\n\t\t\t}\n\t\t};\n\n\t\tconst handleFullscreen = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\tstate.fullscreen = !state.fullscreen;\n\t\t};\n\n\t\tconst handleConfirmClick = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\temit(\"confirmClick\");\n\t\t};\n\n\t\tconst handleCloseClick = (): void => {\n\t\t\tif (state.loading) return;\n\t\t\thandleClose();\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.visible !== newValue) state.visible = newValue;\n\t\t\t}\n\t\t);\n\n\t\twatch(\n\t\t\t() => state.visible,\n\t\t\t(newValue) => {\n\t\t\t\tif (props.modelValue !== newValue) emit(\"update:modelValue\", newValue);\n\t\t\t}\n\t\t);\n\n\t\twatch(\n\t\t\t() => props.size,\n\t\t\t(newValue) => {\n\t\t\t\tif (newValue !== undefined) state.size = newValue;\n\t\t\t}\n\t\t);\n\n\t\tconst handleDraggablePointermove = (event: PointerEvent): void => {\n\t\t\tconst horizontal = props.direction === \"rtl\" || props.direction === \"ltr\";\n\t\t\tconst viewportSize = horizontal ? document.documentElement.clientWidth : document.documentElement.clientHeight;\n\t\t\tlet nextSize: number;\n\t\t\tswitch (props.direction) {\n\t\t\t\tcase \"ltr\":\n\t\t\t\t\tnextSize = event.clientX;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ttb\":\n\t\t\t\t\tnextSize = event.clientY;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"btt\":\n\t\t\t\t\tnextSize = viewportSize - event.clientY;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tnextSize = viewportSize - event.clientX;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.size = `${Math.min(Math.max(nextSize, viewportSize * 0.2), viewportSize * 0.95).toString()}px`;\n\t\t};\n\n\t\tconst stopDraggable = (): void => {\n\t\t\tstate.dragging = false;\n\t\t\tdocument.removeEventListener(\"pointermove\", handleDraggablePointermove);\n\t\t\tdocument.removeEventListener(\"pointerup\", stopDraggable);\n\t\t};\n\n\t\tconst handleDraggablePointerdown = (event: PointerEvent): void => {\n\t\t\tevent.preventDefault();\n\t\t\tstate.dragging = true;\n\t\t\tdocument.addEventListener(\"pointermove\", handleDraggablePointermove);\n\t\t\tdocument.addEventListener(\"pointerup\", stopDraggable, { once: true });\n\t\t};\n\n\t\tonBeforeUnmount(stopDraggable);\n\n\t\tconst elDrawerProps = useProps(props, drawerProps, [\"modelValue\", \"size\", \"showClose\", \"beforeClose\"]);\n\t\t// open、close 是 Fast 异步业务流程完成事件,不直接透传 Element Plus 的同名生命周期事件。\n\t\tconst elDrawerEmits = useEmits(drawerEmits, emit, [\"open\", \"close\", \"update:modelValue\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElDrawer\n\t\t\t\t{...elDrawerProps.value}\n\t\t\t\t{...elDrawerEmits.value}\n\t\t\t\tref={drawerRef}\n\t\t\t\tclass={[\n\t\t\t\t\t\"fa-drawer\",\n\t\t\t\t\t`fa-drawer-${_globalSize.value}`,\n\t\t\t\t\t{ \"fa-drawer__fullscreen\": state.fullscreen, \"fa-drawer__dragging\": state.dragging },\n\t\t\t\t]}\n\t\t\t\tvModel={state.visible}\n\t\t\t\tsize={state.size}\n\t\t\t\tshowClose={false}\n\t\t\t\tbeforeClose={handleBeforeClose}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\theader: ({ titleId, titleClass }: { close: () => void; titleId: string; titleClass: string }) => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<div id={titleId} class={[\"fa-drawer__header-title\", titleClass]}>\n\t\t\t\t\t\t\t\t{slots.title?.({ loading: state.loading, close: handleCloseClick, titleId, titleClass }) ?? props.title}\n\t\t\t\t\t\t\t\t{slots.header?.({ loading: state.loading, close: handleCloseClick, titleId, titleClass })}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{props.showRefresh && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle=\"刷新\"\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-drawer__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleRefresh}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon class=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<Refresh />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{props.showFullscreen && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle={state.fullscreen ? \"关闭全屏显示\" : \"全屏显示\"}\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-drawer__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleFullscreen}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon>{state.fullscreen ? <FullScreenExit /> : <FullScreen />}</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{props.showClose && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\ttitle=\"关闭\"\n\t\t\t\t\t\t\t\t\tclass={[\n\t\t\t\t\t\t\t\t\t\t\"fa-drawer__header-icon\",\n\t\t\t\t\t\t\t\t\t\tstate.loading ? \"fa__click__disabled fa__click__disabled__cursor \" : \"fa__hover__twinkle\",\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\tonClick={handleCloseClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ElIcon class=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<Close />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t{props.draggable && <div class=\"fa-drawer__draggable\" onPointerdown={handleDraggablePointerdown} />}\n\t\t\t\t\t\t\t<ElScrollbar vLoading={state.loading} element-loading-text=\"加载中...\">\n\t\t\t\t\t\t\t\t{!state.refreshing && slots.default?.(state)}\n\t\t\t\t\t\t\t</ElScrollbar>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t\t...(!props.hideFooter && {\n\t\t\t\t\t\tfooter: (): VNode[] => [\n\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t{slots.footer?.({ loading: state.loading, close: handleCloseClick })}\n\t\t\t\t\t\t\t\t{props.showCloseButton && (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.loading} onClick={handleCloseClick}>\n\t\t\t\t\t\t\t\t\t\t{props.closeButtonText}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{props.showConfirmButton && (\n\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\tloading={state.loading}\n\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabledConfirmButton}\n\t\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleConfirmClick}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{state.loading ? \"加载中...\" : props.confirmButtonText}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Fragment>,\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElDrawer>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 用于关闭 Drawer, 该方法会调用传入的 before-close 方法 */\n\t\t\thandleClose: computed(() => drawerRef.value?.handleClose),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 是否显示 */\n\t\t\tvisible: computed(() => state.visible),\n\t\t\t/** @description 打开弹窗 */\n\t\t\topen: handleOpen,\n\t\t\t/** @description 关闭弹窗 */\n\t\t\tclose: handleClose,\n\t\t\t/** @description 刷新弹窗 */\n\t\t\trefresh: handleRefresh,\n\t\t\t/** @description 弹窗加载 */\n\t\t\tdoLoading: handleLoading,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Drawer from \"./src/drawer\";\nimport type { faDrawerEmits, faDrawerProps } from \"./src/drawer\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 封装加载、确认与关闭控制的业务抽屉组件。 */\nexport const FaDrawer: TSXWithInstall<typeof Drawer> = withInstall(Drawer);\nexport default FaDrawer;\n\nexport { faDrawerEmits, faDrawerProps } from \"./src/drawer\";\nexport type { FaDrawerSlots } from \"./src/drawer\";\n\n/** FaDrawer 暴露的组件实例类型。 */\nexport type FaDrawerInstance = InstanceType<typeof Drawer>;\n\n/** FaDrawer 的完整 Props 类型。 */\nexport type FaDrawerProps = ExtractPropTypes<typeof faDrawerProps>;\n\n/** FaDrawer 的 Emits 类型。 */\nexport type FaDrawerEmits = typeof faDrawerEmits;\n","import { computed, defineComponent, nextTick, onActivated, onDeactivated, onMounted, onUnmounted, provide, ref, watch } from \"vue\";\nimport { isArray, isNumber, isObject } from \"lodash-unified\";\nimport { definePropType, makeSlots, useExpose, useRender } from \"../../../utils\";\nimport type { FaLayoutGridBreakPoint, FaLayoutGridItemResponsive } from \"./layoutGrid.type\";\nimport type { VNode, VNodeArrayChildren } from \"vue\";\n\n/** FaLayoutGrid 的插槽参数。 */\nexport interface FaLayoutGridSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n}\n\nexport default defineComponent({\n\tname: \"FaLayoutGrid\",\n\tprops: {\n\t\t/** @description Grid布局列配置 */\n\t\tcols: {\n\t\t\ttype: definePropType<string | number | Record<FaLayoutGridBreakPoint, number>>([String, Number, Object]),\n\t\t\tdefault: (): Record<FaLayoutGridBreakPoint, number> => ({ xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }),\n\t\t},\n\t\t/** @description 折叠 */\n\t\tcollapsed: Boolean,\n\t\t/** @description 折叠行数 */\n\t\tcollapsedRows: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 1,\n\t\t},\n\t\t/** @description 间距,偏移 */\n\t\tgap: {\n\t\t\ttype: definePropType<number | [number, number]>([Number, Array]),\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\temits: {\n\t\t/** @description 断点变化事件 */\n\t\tbreakPointChange: ({ breakPoint: _breakPoint }: { breakPoint: FaLayoutGridBreakPoint }) => true,\n\t},\n\tslots: makeSlots<FaLayoutGridSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst divElRef = ref<HTMLElement>();\n\n\t\t// 注入 gap 间距\n\t\tprovide(\"gap\", isArray(props.gap) ? props.gap[0] : props.gap);\n\n\t\t// 注入响应式断点\n\t\tconst breakPoint = ref<FaLayoutGridBreakPoint>(\"xl\");\n\t\tprovide(\"breakPoint\", breakPoint);\n\n\t\t// 注入要开始折叠的 index\n\t\tconst hiddenIndex = ref(-1);\n\t\tprovide(\"shouldHiddenIndex\", hiddenIndex);\n\n\t\t// 注入 cols\n\t\tconst cols = computed<string | number>(() => {\n\t\t\tif (isObject(props.cols)) return props.cols[breakPoint.value] ?? 1;\n\t\t\treturn props.cols;\n\t\t});\n\t\tprovide(\"cols\", cols);\n\n\t\tconst collapsedRows = isNumber(props.collapsedRows) ? props.collapsedRows : Number(props.collapsedRows);\n\n\t\t// 断点映射\n\t\tconst breakpoints = {\n\t\t\t// 小于480屏幕(如手机)\n\t\t\txs: { min: 0, max: 479 },\n\t\t\t// 平板竖屏\n\t\t\tsm: { min: 480, max: 768 },\n\t\t\t// 平板横屏\n\t\t\tmd: { min: 768, max: 1024 },\n\t\t\t// 小型桌面\n\t\t\tlg: { min: 1024, max: 1440 },\n\t\t\t// 大型桌面\n\t\t\txl: { min: 1440, max: Infinity },\n\t\t};\n\n\t\t// 监听屏幕变化\n\t\tconst resize = (e: ResizeObserverEntry[]): void => {\n\t\t\t// 当前只监听布局容器,ResizeObserver 每次回调应当只有一个目标。\n\t\t\tif (e.length !== 1 || e[0] === undefined) throw new Error(\"FaLayoutGrid 监听到了非预期数量的布局容器。\");\n\t\t\tconst curEl = e[0];\n\t\t\tconst width = curEl.target.scrollWidth;\n\n\t\t\tfor (const [key, { min, max }] of Object.entries(breakpoints)) {\n\t\t\t\tif (width >= min && width <= max) {\n\t\t\t\t\tbreakPoint.value = key as FaLayoutGridBreakPoint;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet resizeObserver: ResizeObserver | undefined;\n\t\tconst observeResize = (): void => {\n\t\t\tconst element = divElRef.value;\n\t\t\tif (!element) return;\n\t\t\tresizeObserver?.disconnect();\n\t\t\tresizeObserver = new ResizeObserver(resize);\n\t\t\tresizeObserver.observe(element);\n\t\t};\n\n\t\tonMounted(() => {\n\t\t\tvoid nextTick(observeResize);\n\n\t\t\t// 断点变化时 执行 findIndex\n\t\t\twatch(\n\t\t\t\t() => breakPoint.value,\n\t\t\t\t(newValue) => {\n\t\t\t\t\temit(\"breakPointChange\", { breakPoint: newValue });\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\timmediate: true,\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\n\t\tonActivated(() => {\n\t\t\tvoid nextTick(observeResize);\n\t\t});\n\n\t\tonUnmounted(() => {\n\t\t\tresizeObserver?.disconnect();\n\t\t});\n\n\t\tonDeactivated(() => {\n\t\t\tresizeObserver?.disconnect();\n\t\t});\n\n\t\t// 设置间距\n\t\tconst gap = computed(() => {\n\t\t\tif (isNumber(props.gap)) return `${props.gap}px`;\n\t\t\tif (isArray(props.gap)) return `${props.gap[1]}px ${props.gap[0]}px`;\n\t\t\treturn \"unset\";\n\t\t});\n\n\t\t// 设置 style\n\t\tconst style = computed(() => {\n\t\t\treturn {\n\t\t\t\tdisplay: \"grid\",\n\t\t\t\tgridGap: gap.value,\n\t\t\t\tgridTemplateColumns: `repeat(${cols.value}, minmax(0, 1fr))`,\n\t\t\t};\n\t\t});\n\n\t\tuseRender(() => {\n\t\t\tconst defaultSlot = slots.default?.() ?? [];\n\n\t\t\tif (props.collapsed) {\n\t\t\t\tconst fields: VNodeArrayChildren = [];\n\t\t\t\tlet suffix: VNode | undefined;\n\n\t\t\t\tdefaultSlot.forEach((slot) => {\n\t\t\t\t\t// suffix\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof slot.type === \"object\" &&\n\t\t\t\t\t\tslot.type !== null &&\n\t\t\t\t\t\t\"name\" in slot.type &&\n\t\t\t\t\t\tslot.type.name === \"FaLayoutGridItem\" &&\n\t\t\t\t\t\tslot.props?.[\"suffix\"] !== undefined\n\t\t\t\t\t)\n\t\t\t\t\t\tsuffix = slot;\n\t\t\t\t\t// slot children\n\t\t\t\t\tif (typeof slot.type === \"symbol\" && Array.isArray(slot?.children)) fields.push(...slot.children);\n\t\t\t\t});\n\n\t\t\t\t// 计算 suffix 所占用的列\n\t\t\t\tlet suffixCols = 0;\n\t\t\t\tif (suffix?.props) {\n\t\t\t\t\tconst breakPointProps = suffix.props[breakPoint.value] as FaLayoutGridItemResponsive | undefined;\n\t\t\t\t\tsuffixCols =\n\t\t\t\t\t\t(breakPointProps?.span ?? Number(suffix.props[\"span\"] ?? 1)) +\n\t\t\t\t\t\t(breakPointProps?.offset ?? Number(suffix.props[\"offset\"] ?? 0));\n\t\t\t\t}\n\n\t\t\t\tlet occupiedCols = 0;\n\t\t\t\thiddenIndex.value = -1;\n\t\t\t\tfor (const [index, current] of fields.entries()) {\n\t\t\t\t\tconst currentVNode = current as VNode;\n\t\t\t\t\tconst currentProps = currentVNode.props;\n\t\t\t\t\tif (currentProps === null) continue;\n\t\t\t\t\tconst breakPointProps = currentProps[breakPoint.value] as FaLayoutGridItemResponsive | undefined;\n\t\t\t\t\toccupiedCols +=\n\t\t\t\t\t\t(breakPointProps?.span ?? Number(currentProps[\"span\"] ?? 1)) +\n\t\t\t\t\t\t(breakPointProps?.offset ?? Number(currentProps[\"offset\"] ?? 0));\n\t\t\t\t\tif (occupiedCols > collapsedRows * Number(cols.value) - suffixCols) {\n\t\t\t\t\t\thiddenIndex.value = index;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thiddenIndex.value = -1;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div ref={divElRef} style={style.value}>\n\t\t\t\t\t{defaultSlot}\n\t\t\t\t</div>\n\t\t\t);\n\t\t});\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 响应式断点 */\n\t\t\tbreakPoint,\n\t\t});\n\t},\n});\n","import { computed, defineComponent, inject, reactive, ref, watch } from \"vue\";\nimport { isNumber } from \"lodash-unified\";\nimport { definePropType, makeSlots, useExpose, useRender } from \"../../../utils\";\nimport type { FaLayoutGridBreakPoint, FaLayoutGridItemResponsive } from \"./layoutGrid.type\";\nimport type { Ref } from \"vue\";\n\n/** FaLayoutGridItem 的插槽参数。 */\nexport interface FaLayoutGridItemSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n}\n\nexport default defineComponent({\n\tname: \"FaLayoutGridItem\",\n\tprops: {\n\t\t/** @description 偏移 */\n\t\toffset: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 0,\n\t\t},\n\t\t/** @description 占位 */\n\t\tspan: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: 1,\n\t\t},\n\t\t/** @description 后缀 */\n\t\tsuffix: { type: Boolean, default: false },\n\t\t/** @description 响应式,小于480px屏幕配置 */\n\t\txs: {\n\t\t\ttype: definePropType<FaLayoutGridItemResponsive>(Object),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 响应式,平板竖屏配置 */\n\t\tsm: {\n\t\t\ttype: definePropType<FaLayoutGridItemResponsive>(Object),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 响应式,平板横屏配置 */\n\t\tmd: {\n\t\t\ttype: definePropType<FaLayoutGridItemResponsive>(Object),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 响应式,小型桌面配置 */\n\t\tlg: {\n\t\t\ttype: definePropType<FaLayoutGridItemResponsive>(Object),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 响应式,大型桌面配置 */\n\t\txl: {\n\t\t\ttype: definePropType<FaLayoutGridItemResponsive>(Object),\n\t\t\tdefault: undefined,\n\t\t},\n\t},\n\tslots: makeSlots<FaLayoutGridItemSlots>(),\n\tsetup(props, { attrs, slots, expose }) {\n\t\tconst state = reactive({\n\t\t\tshow: true,\n\t\t});\n\n\t\tconst attrsObj = attrs as Record<string, unknown>;\n\n\t\t// 注入断点\n\t\tconst breakPoint = inject<Ref<FaLayoutGridBreakPoint>>(\"breakPoint\", ref(\"xl\"));\n\t\tconst shouldHiddenIndex = inject<Ref<number>>(\"shouldHiddenIndex\", ref(-1));\n\n\t\twatch(\n\t\t\t() => [shouldHiddenIndex.value, breakPoint.value],\n\t\t\t(n) => {\n\t\t\t\tconst index = Number(attrsObj[\"data-index\"] ?? attrsObj[\"index\"]);\n\t\t\t\tif (Number.isInteger(index)) {\n\t\t\t\t\tstate.show = !(n[0] !== -1 && index >= Number(n[0]));\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ immediate: true }\n\t\t);\n\n\t\tconst gap = inject(\"gap\", 0);\n\t\tconst cols = inject<Ref<number>>(\"cols\", ref(5));\n\n\t\tconst style = computed(() => {\n\t\t\tconst breakPointObk = props[breakPoint.value];\n\t\t\tconst span = breakPointObk?.span ?? (isNumber(props.span) ? props.span : Number(props.span));\n\t\t\tconst offset = breakPointObk?.offset ?? (isNumber(props.offset) ? props.offset : Number(props.offset));\n\t\t\tif (props.suffix) {\n\t\t\t\treturn {\n\t\t\t\t\tgridColumnStart: cols.value - span - offset + 1,\n\t\t\t\t\tgridColumnEnd: `span ${span + offset}`,\n\t\t\t\t\tmarginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tgridColumn: `span ${span + offset > cols.value ? cols.value : span + offset}/span ${\n\t\t\t\t\t\tspan + offset > cols.value ? cols.value : span + offset\n\t\t\t\t\t}`,\n\t\t\t\t\tmarginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tuseRender(() => (\n\t\t\t<div style={style.value} vShow={state.show}>\n\t\t\t\t{slots.default?.()}\n\t\t\t</div>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\tshow: state.show,\n\t\t});\n\t},\n});\n","import { withInstall, withNoopInstall } from \"../../utils\";\nimport LayoutGrid from \"./src/layoutGrid\";\nimport LayoutGridItem from \"./src/layoutGridItem\";\nimport type { TSXWithInstall } from \"../../utils\";\n\n/** 根据断点和容器宽度排列内容的响应式布局组件。 */\nexport const FaLayoutGrid: TSXWithInstall<typeof LayoutGrid> & { LayoutGridItem: typeof LayoutGridItem } = withInstall(LayoutGrid, {\n\tLayoutGridItem,\n});\nexport default FaLayoutGrid;\n\n/** 可独立注册的响应式布局项组件。 */\nexport const FaLayoutGridItem: TSXWithInstall<typeof LayoutGridItem> = withNoopInstall(LayoutGridItem);\n\nexport * from \"./src/layoutGrid.type\";\nexport type { FaLayoutGridSlots } from \"./src/layoutGrid\";\nexport type { FaLayoutGridItemSlots } from \"./src/layoutGridItem\";\n\n/** FaLayoutGrid 暴露的组件实例类型。 */\nexport type FaLayoutGridInstance = InstanceType<typeof LayoutGrid>;\n\n/** FaLayoutGridItem 暴露的组件实例类型。 */\nexport type FaLayoutGridItemInstance = InstanceType<typeof LayoutGridItem>;\n","import { RegExps } from \"../../../constants\";\nimport type { FormInstance, FormItemRule, FormValidationResult } from \"element-plus\";\nimport type { Ref } from \"vue\";\n\ntype ValidationCallback = (error?: Error) => void;\n\n/**\n * 表单工具类\n */\nexport const formUtil = {\n\t/**\n\t * ElForm 表单验证\n\t * @param elFormRef ElForm 组件ref\n\t */\n\tvalidate(elFormRef: Ref<FormInstance | undefined>): FormValidationResult {\n\t\treturn new Promise<boolean>((resolve, reject) => {\n\t\t\tconst form = elFormRef.value;\n\t\t\tif (form === undefined) {\n\t\t\t\treject(new Error(\"ElForm 实例尚未挂载。\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid form.validate((isValid: boolean, invalidFields?) => {\n\t\t\t\tif (isValid) {\n\t\t\t\t\tresolve(isValid);\n\t\t\t\t} else {\n\t\t\t\t\tif (invalidFields) {\n\t\t\t\t\t\tconsole.warn(\"[Fast:formUtil]\", \"表单验证失败。\", invalidFields);\n\t\t\t\t\t}\n\t\t\t\t\treject(new Error(\"表单验证失败。\"));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t/**\n\t * ElForm 表单验证,带滚动\n\t * @param elFormRef ElForm 组件ref\n\t */\n\tvalidateScrollToField(elFormRef: Ref<FormInstance | undefined>): FormValidationResult {\n\t\treturn new Promise<boolean>((resolve, reject) => {\n\t\t\tconst form = elFormRef.value;\n\t\t\tif (form === undefined) {\n\t\t\t\treject(new Error(\"ElForm 实例尚未挂载。\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid form.validate((isValid: boolean, invalidFields?) => {\n\t\t\t\tif (isValid) {\n\t\t\t\t\tresolve(isValid);\n\t\t\t\t} else {\n\t\t\t\t\tform.scrollToField(Object.keys(invalidFields ?? {}));\n\t\t\t\t\tif (invalidFields) {\n\t\t\t\t\t\tconsole.warn(\"[Fast:formUtil]\", \"表单验证失败。\", invalidFields);\n\t\t\t\t\t}\n\t\t\t\t\treject(new Error(\"表单验证失败。\"));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t/**\n\t * 手机号\n\t */\n\tmobile(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (!value) {\n\t\t\tcallback(new Error(\"请输入手机号码\"));\n\t\t} else if (RegExps.Mobile.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的手机号码\"));\n\t\t}\n\t},\n\t/**\n\t * 电话号码\n\t */\n\tphone(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (!value) {\n\t\t\tcallback();\n\t\t} else if (RegExps.Phone.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的电话号码\"));\n\t\t}\n\t},\n\t/**\n\t * 邮箱\n\t */\n\temail(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (!value) {\n\t\t\tcallback();\n\t\t} else if (RegExps.Email.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的邮箱地址\"));\n\t\t}\n\t},\n\t/**\n\t * 身份证\n\t */\n\tidCard(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.IdCard.test(value) || !value) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的身份证号码\"));\n\t\t}\n\t},\n\t/**\n\t * 车牌号\n\t */\n\tcarNumber(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tlet success = false;\n\t\tif (value?.length === 7) {\n\t\t\tsuccess = RegExps.CarNumber.test(value);\n\t\t} else if (value?.length === 8) {\n\t\t\tsuccess = RegExps.NewEnergyCarNumber.test(value);\n\t\t}\n\t\tif (success) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的车牌号码\"));\n\t\t}\n\t},\n\t/**\n\t * editor 必填\n\t */\n\teditorRequired(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (value === \"<p><br></p>\") {\n\t\t\treturn callback(new Error(\"内容不能为空\"));\n\t\t}\n\t\treturn callback();\n\t},\n\t/**\n\t * 外部链接\n\t */\n\texternal(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.External.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入正确的外部链接\"));\n\t\t}\n\t},\n\t/**\n\t * 有效的URL\n\t */\n\turl(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.Url.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的 URL。\"));\n\t\t}\n\t},\n\t/**\n\t * 邮政编码\n\t */\n\tpostCode(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.PostCode.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的邮政编码\"));\n\t\t}\n\t},\n\t/**\n\t * 账号(6-20位字母或数字,必须以字母开头,不能全为数字)\n\t */\n\taccount(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.Account.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的账号(6-20位字母或数字,必须以字母开头,不能全为数字)\"));\n\t\t}\n\t},\n\t/**\n\t * 弱密码(只包含字母和数字,长度为6到18位)\n\t */\n\tpassword(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.Password.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的密码(只包含字母和数字,长度为6到18位)\"));\n\t\t}\n\t},\n\t/**\n\t * 强密码(8到20位,包含大小写字母、数字及特殊字符)\n\t */\n\tstrongPassword(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.StrongPassword.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的密码(8到20位,包含大小写字母、数字及特殊字符)\"));\n\t\t}\n\t},\n\t/**\n\t * 中文字符\n\t */\n\tchinese(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.Chinese.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的中文字符\"));\n\t\t}\n\t},\n\t/**\n\t * 英文字符\n\t */\n\tenglish(_rule: FormItemRule, value: string, callback: ValidationCallback): void {\n\t\tif (RegExps.English.test(value)) {\n\t\t\tcallback();\n\t\t} else {\n\t\t\tcallback(new Error(\"请输入有效的英文字符\"));\n\t\t}\n\t},\n\t/**\n\t * 文本框必填\n\t */\n\tinputRequired(message: string, trigger = \"blur\"): FormItemRule {\n\t\treturn {\n\t\t\trequired: true,\n\t\t\tmessage,\n\t\t\ttrigger,\n\t\t};\n\t},\n\t/**\n\t * 选择器必选\n\t */\n\tselectRequired(message: string, trigger = \"change\"): FormItemRule {\n\t\treturn {\n\t\t\trequired: true,\n\t\t\tmessage,\n\t\t\ttrigger,\n\t\t};\n\t},\n};\n","import { computed, defineComponent, provide, reactive, ref } from \"vue\";\nimport { ElForm, formEmits, formProps, useGlobalSize } from \"element-plus\";\nimport { isNumber, isObject } from \"lodash-unified\";\nimport { definePropType, makeSlots, useEmits, useExpose, useProps, useRender } from \"../../../utils\";\nimport { FaLayoutGrid } from \"../../layoutGrid\";\nimport { formUtil } from \"../utils/form\";\nimport type { FaLayoutGridBreakPoint } from \"../../layoutGrid\";\nimport type { FormInstance, FormItemContext, FormValidateCallback, FormValidationResult } from \"element-plus\";\n\n/** FaForm 的运行时 Props 定义。 */\nexport const faFormProps = {\n\t...formProps,\n\t/** @description Width of label, e.g. `'50px'`. All its direct child form items will inherit this value. `auto` is supported. */\n\tlabelWidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"auto\",\n\t},\n\t/** @description Suffix of the label. */\n\tlabelSuffix: {\n\t\ttype: String,\n\t\tdefault: \":\",\n\t},\n\t/** @description When validation fails, scroll to the first error form entry. */\n\tscrollToError: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 详情From,会删除 FormItem 的 paddinfa-bottom */\n\tdetailForm: Boolean,\n\t/** @description Grid布局*/\n\tgrid: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description Grid布局列配置 */\n\tcols: {\n\t\ttype: definePropType<string | number | Record<FaLayoutGridBreakPoint, number>>([String, Number, Object]),\n\t\tdefault: (): Record<FaLayoutGridBreakPoint, number> => ({ xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }),\n\t},\n};\n\n/** FaForm 的运行时事件定义。 */\nexport const faFormEmits = {\n\t...formEmits,\n};\n\n/** FaForm 的插槽参数。 */\nexport interface FaFormSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: unknown;\n}\n\nexport default defineComponent({\n\tname: \"FaForm\",\n\tprops: faFormProps,\n\temits: faFormEmits,\n\tslots: makeSlots<FaFormSlots>(),\n\tsetup(props, { slots, expose, emit }) {\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tcols: computed(() => {\n\t\t\t\tif (isObject(props.cols)) {\n\t\t\t\t\treturn props.cols;\n\t\t\t\t} else {\n\t\t\t\t\tconst colsNumber = isNumber(props.cols) ? props.cols : Number(props.cols);\n\t\t\t\t\treturn { xs: 1, sm: colsNumber, md: colsNumber, lg: colsNumber, xl: colsNumber };\n\t\t\t\t}\n\t\t\t}),\n\t\t\tgap: computed<[number, number]>(() => (_globalSize.value === \"small\" ? [15, 0] : [20, 0])),\n\t\t});\n\n\t\tconst formRef = ref<FormInstance>();\n\n\t\t// 注入 cols\n\t\tprovide(\"faFormCols\", state.cols);\n\n\t\tconst elFormProps = useProps(props, formProps);\n\t\tconst elFormEmits = useEmits(formEmits, emit);\n\n\t\tuseRender(() => (\n\t\t\t<ElForm\n\t\t\t\t{...elFormProps.value}\n\t\t\t\t{...elFormEmits.value}\n\t\t\t\tref={formRef}\n\t\t\t\tclass={[\"fa-form\", `fa-form-${_globalSize.value}`, { [`fa-form-detail fa-form-detail_${_globalSize.value}`]: props.detailForm }]}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\tprops.grid ? (\n\t\t\t\t\t\t\t<FaLayoutGrid collapsed gap={state.gap} cols={state.cols}>\n\t\t\t\t\t\t\t\t{slots.default?.(state)}\n\t\t\t\t\t\t\t</FaLayoutGrid>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tslots.default?.(state)\n\t\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t</ElForm>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 对整个表单的内容进行验证。 接收一个回调函数,或返回 Promise。 */\n\t\t\tvalidate: (callback?: FormValidateCallback): FormValidationResult =>\n\t\t\t\tcallback ? (formRef.value?.validate(callback) ?? Promise.reject(new Error(\"ElForm 实例尚未挂载。\"))) : formUtil.validate(formRef),\n\t\t\t/** @description 验证具体的某个字段。 */\n\t\t\tvalidateField: computed(() => formRef.value?.validateField),\n\t\t\t/** @description 重置该表单项,将其值重置为初始值,并移除校验结果 */\n\t\t\tresetFields: computed(() => formRef.value?.resetFields),\n\t\t\t/** @description 清理某个字段的表单验证信息。 */\n\t\t\tclearValidate: computed(() => formRef.value?.clearValidate),\n\t\t\t/** @description 滚动到指定的字段 */\n\t\t\tscrollToField: computed(() => formRef.value?.scrollToField),\n\t\t\t/** @description 获取所有字段的 context */\n\t\t\tfields: computed(() => formRef.value?.fields as FormItemContext[]),\n\t\t\t/** @description 获取指定字段的 context。 */\n\t\t\tgetField: computed(() => formRef.value?.getField),\n\t\t\t/** @description 设置表单字段的初始值。 */\n\t\t\tsetInitialValues: computed(() => formRef.value?.setInitialValues),\n\t\t\t/** @description 对整个表单的内容进行验证,带滚动。 接收一个回调函数,或返回 Promise。 */\n\t\t\tvalidateScrollToField: (): FormValidationResult => formUtil.validateScrollToField(formRef),\n\t\t});\n\t},\n});\n","import { defineComponent } from \"vue\";\nimport { QuestionFilled } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElTooltip } from \"element-plus\";\nimport { makeSlots, useRender } from \"../../../utils\";\n\n/** FaFormItemTip 的运行时 Props 定义。 */\nexport const faFormItemTipProps = {\n\t/** @description 提示 */\n\ttips: String,\n\t/** @description 显示 */\n\tlabel: String,\n};\n\n/** FaFormItemTip 的插槽参数。 */\nexport interface FaFormItemTipSlots extends Record<string, unknown> {\n\t/** @description 显示插槽 */\n\tlabel: never;\n}\n\nexport default defineComponent({\n\tname: \"FaFormItemTip\",\n\tprops: faFormItemTipProps,\n\tslots: makeSlots<FaFormItemTipSlots>(),\n\tsetup(props, { slots }) {\n\t\tuseRender(() => (\n\t\t\t<div class=\"fa-form-item-tip\">\n\t\t\t\t<ElTooltip effect=\"dark\" rawContent content={props.tips} placement=\"top\">\n\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t<QuestionFilled />\n\t\t\t\t\t</ElIcon>\n\t\t\t\t</ElTooltip>\n\t\t\t\t<span class=\"fa-form-item-tip__label\">{slots.label ? slots.label() : props.label}</span>\n\t\t\t</div>\n\t\t));\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport FormItemTip, { faFormItemTipProps } from \"./src/formItemTip\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 为表单项标签提供补充说明的提示组件。 */\nexport const FaFormItemTip: TSXWithInstall<typeof FormItemTip> = withInstall(FormItemTip);\nexport default FaFormItemTip;\n\nexport { faFormItemTipProps };\nexport type { FaFormItemTipSlots } from \"./src/formItemTip\";\n\n/** FaFormItemTip 暴露的组件实例类型。 */\nexport type FaFormItemTipInstance = InstanceType<typeof FormItemTip>;\n\n/** FaFormItemTip 的完整 Props 类型。 */\nexport type FaFormItemTipProps = ExtractPropTypes<typeof faFormItemTipProps>;\n","import { Fragment, computed, defineComponent, inject, ref } from \"vue\";\nimport { ElFormItem, formItemProps } from \"element-plus\";\nimport { isNumber } from \"lodash-unified\";\nimport { makeSlots, useExpose, useProps, useRender } from \"../../../utils\";\nimport { FaFormItemTip } from \"../../formItemTip\";\nimport { FaLayoutGridItem } from \"../../layoutGrid\";\nimport type { FormItemInstance } from \"element-plus\";\nimport type { Ref, VNode } from \"vue\";\n\n/** FaFormItem 的运行时 Props 定义。 */\nexport const faFormItemProps = {\n\t...formItemProps,\n\t/** @description Label tips 提示 */\n\ttips: String,\n\t/** @description Grid 布局 */\n\tgrid: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 偏移量 */\n\toffset: {\n\t\ttype: [String, Number],\n\t\tdefault: 0,\n\t},\n\t/** @description 栅格跨度 */\n\tspan: {\n\t\ttype: [String, Number],\n\t},\n\t/** @description 独占一行。如果设置 span 则无效 */\n\trow: Boolean,\n};\n\n/** FaFormItem 的插槽参数。 */\nexport interface FaFormItemSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n\t/** @description 标签位置显示的内容 */\n\tlabel: { label: string };\n\t/** @description 验证错误信息的显示内容 */\n\terror: { error: string };\n}\n\nexport default defineComponent({\n\tname: \"FaFormItem\",\n\tprops: faFormItemProps,\n\tslots: makeSlots<FaFormItemSlots>(),\n\tsetup(props, { slots, expose }) {\n\t\tconst formItemRef = ref<FormItemInstance>();\n\n\t\tconst cols = inject<Ref<number>>(\"cols\", ref(4));\n\n\t\t// 获取响应式设置\n\t\tconst getResponsive = (): {\n\t\t\tspan?: number;\n\t\t\toffset?: number;\n\t\t} => {\n\t\t\tif (!props.grid) return {};\n\t\t\tif (props.span) {\n\t\t\t\treturn {\n\t\t\t\t\tspan: isNumber(props.span) ? props.span : Number(props.span),\n\t\t\t\t\toffset: isNumber(props.offset) ? props.offset : Number(props.offset),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconst result = {\n\t\t\t\t\tspan: 1,\n\t\t\t\t\toffset: isNumber(props.offset) ? props.offset : Number(props.offset),\n\t\t\t\t};\n\t\t\t\tif (props.row) {\n\t\t\t\t\tresult.span = cols.value;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t};\n\n\t\tconst elFormItemProps = useProps(props, formItemProps);\n\n\t\tconst ParcelComponent = props.grid ? FaLayoutGridItem : Fragment;\n\n\t\tuseRender(() => (\n\t\t\t<ParcelComponent {...getResponsive()}>\n\t\t\t\t<ElFormItem ref={formItemRef} {...elFormItemProps.value}>\n\t\t\t\t\t{{\n\t\t\t\t\t\tdefault: () => slots.default?.() ?? [],\n\t\t\t\t\t\t...(slots.label && !props.tips && { label: ({ label }: { label: string }): VNode[] => slots.label?.({ label }) ?? [] }),\n\t\t\t\t\t\t...(slots.label &&\n\t\t\t\t\t\t\tprops.tips && {\n\t\t\t\t\t\t\t\tlabel: ({ label }: { label: string }): VNode[] => [\n\t\t\t\t\t\t\t\t\t<FaFormItemTip>\n\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\tlabel: () => slots.label?.({ label }) ?? [],\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t</FaFormItemTip>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t...(!slots.label &&\n\t\t\t\t\t\t\tprops.tips && {\n\t\t\t\t\t\t\t\tlabel: ({ label }: { label: string }): VNode[] => [<FaFormItemTip label={label ?? props.label} tips={props.tips} />],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t...(slots.error && { error: ({ error }: { error: string }): VNode[] => slots.error?.({ error }) ?? [] }),\n\t\t\t\t\t}}\n\t\t\t\t</ElFormItem>\n\t\t\t</ParcelComponent>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 表单项大小 */\n\t\t\tsize: computed(() => formItemRef.value?.size),\n\t\t\t/** @description 校验消息 */\n\t\t\tvalidateMessage: computed(() => formItemRef.value?.validateMessage),\n\t\t\t/** @description 校验状态 */\n\t\t\tvalidateState: computed(() => formItemRef.value?.validateState),\n\t\t\t/** @description 验证表单项 */\n\t\t\tvalidate: computed(() => formItemRef.value?.validate),\n\t\t\t/** @description 移除该表单项的校验结果 */\n\t\t\tclearValidate: computed(() => formItemRef.value?.clearValidate),\n\t\t\t/** @description 对该表单项进行重置,将其值重置为初始值并移除校验结果 */\n\t\t\tresetField: computed(() => formItemRef.value?.resetField),\n\t\t\t/** @description 设置该表单项的初始值。 */\n\t\t\tsetInitialValue: computed(() => formItemRef.value?.setInitialValue),\n\t\t});\n\t},\n});\n","import { withInstall, withNoopInstall } from \"../../utils\";\nimport Form, { faFormEmits, faFormProps } from \"./src/form\";\nimport FormItem, { faFormItemProps } from \"./src/formItem\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持响应式布局和表单项配置的业务表单组件。 */\nexport const FaForm: TSXWithInstall<typeof Form> & { FormItem: typeof FormItem } = withInstall(Form, {\n\tFormItem,\n});\nexport default FaForm;\n\n/** 可独立注册的 FaForm 表单项组件。 */\nexport const FaFormItem: TSXWithInstall<typeof FormItem> = withNoopInstall(FormItem);\n\nexport { faFormEmits, faFormProps, faFormItemProps };\nexport type { FaFormSlots } from \"./src/form\";\nexport type { FaFormItemSlots } from \"./src/formItem\";\n\n/** FaForm 暴露的组件实例类型。 */\nexport type FaFormInstance = InstanceType<typeof Form>;\n\n/** FaForm 的完整 Props 类型。 */\nexport type FaFormProps = ExtractPropTypes<typeof faFormProps>;\n\n/** FaFormItem 暴露的组件实例类型。 */\nexport type FaFormItemInstance = InstanceType<typeof FormItem>;\n\n/** FaFormItem 的完整 Props 类型。 */\nexport type FaFormItemProps = ExtractPropTypes<typeof faFormItemProps>;\n\nexport * from \"./utils/form\";\n","import { computed, defineComponent, reactive, watch } from \"vue\";\nimport * as ElementPlusIconsVue from \"@element-plus/icons-vue\";\nimport { ChromeFilled, RefreshRight } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElInput, ElPopover, ElScrollbar } from \"element-plus\";\nimport * as FastElementPlusIconsVue from \"@fast-element-plus/icons-vue\";\nimport { isNull, isString } from \"lodash-unified\";\nimport { definePropType, useExpose, useRender, withDefineType } from \"../../../utils\";\nimport { FaIcon } from \"../../icon\";\nimport type { PropType } from \"vue\";\n\ntype IconType = \"ele\" | \"fastEle\" | \"local\";\n\nexport default defineComponent({\n\tname: \"FaIconSelector\",\n\tprops: {\n\t\t/** @description v-model绑定值 */\n\t\tmodelValue: String as PropType<string | null>,\n\t\t/** @description 自定义图标 */\n\t\tcustomIcons: {\n\t\t\ttype: definePropType<string[]>(Array),\n\t\t\tdefault: (): string[] => [],\n\t\t},\n\t},\n\temits: {\n\t\t/** @description v-model 回调 */\n\t\t\"update:modelValue\": (value: string | null) => isString(value) || isNull(value),\n\t\t/** @description 改变 */\n\t\tchange: (value: string | null) => isString(value) || isNull(value),\n\t},\n\tsetup(props, { emit, expose }) {\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<string | null>(props.modelValue ?? null),\n\t\t\tsearchValue: withDefineType<string | null>(),\n\t\t\ticonType: withDefineType<IconType>(\"ele\"),\n\t\t\tpopoverVisible: false,\n\t\t\ticonNames: withDefineType<string[]>(Object.keys(ElementPlusIconsVue).map((name) => `el-icon-${name}`)),\n\t\t\trenderIconNames: computed((): string[] => {\n\t\t\t\tif (!state.searchValue) return state.iconNames;\n\t\t\t\treturn state.iconNames.filter((f) => f.toLowerCase().includes(state.searchValue?.toLowerCase() ?? \"\"));\n\t\t\t}),\n\t\t});\n\n\t\tconst handleTabClick = (iconType: IconType): void => {\n\t\t\tstate.iconType = iconType;\n\t\t\tstate.iconNames = [];\n\t\t\tswitch (iconType) {\n\t\t\t\tcase \"ele\":\n\t\t\t\t\tstate.iconNames = Object.keys(ElementPlusIconsVue).map((name) => `el-icon-${name}`);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"fastEle\":\n\t\t\t\t\tstate.iconNames = Object.keys(FastElementPlusIconsVue).map((name) => `fa-icon-${name}`);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"local\":\n\t\t\t\t\tstate.iconNames = props.customIcons;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\tconst handleIconClick = (value: string): void => {\n\t\t\tstate.popoverVisible = false;\n\t\t\tstate.value = value;\n\t\t\tstate.searchValue = \"\";\n\t\t\temit(\"update:modelValue\", value);\n\t\t\temit(\"change\", value);\n\t\t};\n\n\t\tconst handleRefresh = (): void => {\n\t\t\tstate.value = null;\n\t\t\tstate.searchValue = null;\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"change\", null);\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tstate.value = newValue ?? null;\n\t\t\t}\n\t\t);\n\n\t\twatch(\n\t\t\t() => props.customIcons,\n\t\t\t() => {\n\t\t\t\tif (state.iconType === \"local\") state.iconNames = [...props.customIcons];\n\t\t\t},\n\t\t\t{ deep: true }\n\t\t);\n\n\t\tuseRender(() => (\n\t\t\t<ElPopover\n\t\t\t\tpopperClass=\"fa-icon-selector-popover\"\n\t\t\t\tvisible={state.popoverVisible}\n\t\t\t\t{...{\n\t\t\t\t\t\"onUpdate:visible\": (visible: boolean): void => {\n\t\t\t\t\t\tstate.popoverVisible = visible;\n\t\t\t\t\t\tif (!visible) state.searchValue = null;\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\twidth=\"auto\"\n\t\t\t\ttrigger=\"click\"\n\t\t\t\tshowArrow={false}\n\t\t\t\tshowAfter={0}\n\t\t\t\thideAfter={0}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\treference: () => (\n\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\tclass=\"fa-icon-selector\"\n\t\t\t\t\t\t\tmodelValue={state.popoverVisible ? (state.searchValue ?? \"\") : (state.value ?? \"\")}\n\t\t\t\t\t\t\tplaceholder={state.popoverVisible ? \"搜索图标\" : \"请选择图标\"}\n\t\t\t\t\t\t\treadonly={!state.popoverVisible}\n\t\t\t\t\t\t\tonInput={(value: string) => {\n\t\t\t\t\t\t\t\tif (state.popoverVisible) state.searchValue = value;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\tprepend: () => <ElIcon>{state.value ? <FaIcon name={state.value} /> : <ChromeFilled />}</ElIcon>,\n\t\t\t\t\t\t\t\tappend: () => (\n\t\t\t\t\t\t\t\t\t<ElIcon\n\t\t\t\t\t\t\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\thandleRefresh();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RefreshRight />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</ElInput>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<div class=\"fa-icon-selector-popover__box\">\n\t\t\t\t\t\t\t<div class=\"fa-icon-selector-popover__box-header\">\n\t\t\t\t\t\t\t\t<div class=\"fa-icon-selector-popover__box-header__title\">请选择图标</div>\n\t\t\t\t\t\t\t\t<div class=\"fa-icon-selector-popover__box-header__tab\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass={{ \"is-active\": state.iconType === \"ele\" }}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Element Plus 图标\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleTabClick(\"ele\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tele\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass={{ \"is-active\": state.iconType === \"fastEle\" }}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Fast Element Plus 图标\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleTabClick(\"fastEle\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tfastEle\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass={{ \"is-active\": state.iconType === \"local\" }}\n\t\t\t\t\t\t\t\t\t\ttitle=\"本地图标\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleTabClick(\"local\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tlocal\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"fa-icon-selector-popover__box-body\">\n\t\t\t\t\t\t\t\t<ElScrollbar>\n\t\t\t\t\t\t\t\t\t{state.renderIconNames.map((m) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tkey={m}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"fa-icon-selector-popover__box-body__item\"\n\t\t\t\t\t\t\t\t\t\t\ttitle={m}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleIconClick(m)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<FaIcon name={m} />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</ElScrollbar>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t</ElPopover>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** 当前图标来源。 */\n\t\t\ticonType: computed(() => state.iconType),\n\t\t\t/** 当前选中的图标名称。 */\n\t\t\tvalue: computed(() => state.value),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport IconSelector from \"./src/iconSelector\";\nimport type { TSXWithInstall } from \"../../utils\";\n\n/** 提供图标检索与选择能力的选择器组件。 */\nexport const FaIconSelector: TSXWithInstall<typeof IconSelector> = withInstall(IconSelector);\nexport default FaIconSelector;\n\n/** FaIconSelector 暴露的组件实例类型。 */\nexport type FaIconSelectorInstance = InstanceType<typeof IconSelector>;\n","import { computed, defineComponent, reactive, ref, watch } from \"vue\";\nimport { Picture as ElIconPicture } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElImage, imageEmits, imageProps } from \"element-plus\";\nimport { makeSlots, useEmits, useExpose, useProps, useRender } from \"../../../utils\";\nimport type { ImageInstance, ImageViewerAction } from \"element-plus\";\nimport type { VNode } from \"vue\";\n\n/** FaImage 的运行时 Props 定义。 */\nexport const faImageProps = {\n\t...imageProps,\n\t/** @description when enabling preview, use this flag to control whether clicking on backdrop can exit preview mode. */\n\thideOnClickModal: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether to append image-viewer to body. A nested parent element attribute transform should have this attribute set to `true`. */\n\tpreviewTeleported: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether to use lazy load. */\n\tlazy: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description Base64图片 */\n\tbase64: Boolean,\n\t/** @description 原图 */\n\toriginal: Boolean,\n\t/** @description 标准 */\n\tnormal: Boolean,\n\t/** @description 小图 */\n\tsmall: Boolean,\n\t/** @description 缩略图 */\n\tthumb: Boolean,\n\t/** @description 是否可以预览图片 */\n\tpreview: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n};\n\n/** FaImage 的运行时事件定义。 */\nexport const faImageEmits = {\n\t...imageEmits,\n};\n\n/** FaImage 的插槽参数。 */\nexport interface FaImageSlots extends Record<string, unknown> {\n\t/** @description 当图像尚未加载时,自定义的占位符内容 */\n\tplaceholder: never;\n\t/** @description 自定义图像加载失败的内容 */\n\terror: never;\n\t/** @description 当图像预览时自定义内容 */\n\tviewer: { src?: string };\n\t/** @description 图片预览进度内容 */\n\tprogress: { activeIndex: number; total: number };\n\t/** @description 图片预览工具栏内容 */\n\ttoolbar: {\n\t\tactions: (action: ImageViewerAction, options?: Record<string, never>) => void;\n\t\tprev: () => void;\n\t\tnext: () => void;\n\t\treset: () => void;\n\t\tactiveIndex: number;\n\t\tsetActiveItem: (index: number) => void;\n\t};\n\t/** @description 图片预览加载失败内容 */\n\t\"viewer-error\": { activeIndex: number; src: string };\n}\n\nexport default defineComponent({\n\tname: \"FaImage\",\n\tprops: faImageProps,\n\temits: faImageEmits,\n\tslots: makeSlots<FaImageSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst state = reactive({\n\t\t\t/** 图片加载错误 */\n\t\t\tloadError: false,\n\t\t\tsrc: computed(() => {\n\t\t\t\tif (!props.src) return undefined;\n\t\t\t\tif (props.base64) {\n\t\t\t\t\treturn `data:image/png;base64,${props.src}`;\n\t\t\t\t} else if (props.original || state.loadError) {\n\t\t\t\t\treturn props.src;\n\t\t\t\t} else if (props.normal) {\n\t\t\t\t\treturn `${props.src}@!normal`;\n\t\t\t\t} else if (props.small) {\n\t\t\t\t\treturn `${props.src}@!small`;\n\t\t\t\t} else if (props.thumb) {\n\t\t\t\t\treturn `${props.src}@!thumb`;\n\t\t\t\t} else {\n\t\t\t\t\t// 默认使用缩略图\n\t\t\t\t\treturn `${props.src}@!thumb`;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tpreviewList: computed(() => (props.preview && props.src ? [props.base64 ? `data:image/png;base64,${props.src}` : props.src] : [])),\n\t\t});\n\t\tconst imageRef = ref<ImageInstance>();\n\n\t\twatch(\n\t\t\t() => props.src,\n\t\t\t() => {\n\t\t\t\tstate.loadError = false;\n\t\t\t}\n\t\t);\n\n\t\tconst bindProps = useProps(props, imageProps, [\"src\", \"previewSrcList\"]);\n\t\tconst bindEmits = useEmits(imageEmits, emit, [\"error\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElImage\n\t\t\t\t{...bindProps.value}\n\t\t\t\t{...bindEmits.value}\n\t\t\t\tclass=\"fa-image\"\n\t\t\t\tref={imageRef}\n\t\t\t\tsrc={state.src}\n\t\t\t\tpreviewSrcList={state.previewList}\n\t\t\t\tonError={(event) => {\n\t\t\t\t\tstate.loadError ||= true;\n\t\t\t\t\temit(\"error\", event);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\terror: () =>\n\t\t\t\t\t\tslots.error ? (\n\t\t\t\t\t\t\t(slots.error?.() ?? [])\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div class=\"fa-image__error-image\">\n\t\t\t\t\t\t\t\t<ElIcon class=\"icon\">\n\t\t\t\t\t\t\t\t\t<ElIconPicture />\n\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t...(slots.placeholder && { placeholder: (): VNode[] => slots.placeholder?.() ?? [] }),\n\t\t\t\t\t...(slots.viewer && { viewer: (): VNode[] => slots.viewer?.({ src: state.src }) ?? [] }),\n\t\t\t\t\t...(slots.progress && {\n\t\t\t\t\t\tprogress: (scope: { activeIndex: number; total: number }): VNode[] => slots.progress?.(scope) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t\t...(slots.toolbar && {\n\t\t\t\t\t\ttoolbar: (scope: FaImageSlots[\"toolbar\"]): VNode[] => slots.toolbar?.(scope) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t\t...(slots[\"viewer-error\"] && {\n\t\t\t\t\t\t\"viewer-error\": (scope: { activeIndex: number; src: string }): VNode[] => slots[\"viewer-error\"]?.(scope) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElImage>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 手动打开图片预览。 */\n\t\t\tshowPreview: computed(() => imageRef.value?.showPreview),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Image, { faImageEmits, faImageProps } from \"./src/image\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持占位、失败回退和地址处理的图片组件。 */\nexport const FaImage: TSXWithInstall<typeof Image> = withInstall(Image);\nexport default FaImage;\n\nexport { faImageEmits, faImageProps };\nexport type { FaImageSlots } from \"./src/image\";\n\n/** FaImage 暴露的组件实例类型。 */\nexport type FaImageInstance = InstanceType<typeof Image>;\n\n/** FaImage 的完整 Props 类型。 */\nexport type FaImageProps = ExtractPropTypes<typeof faImageProps>;\n","import { isArray, isFunction, isString } from \"lodash-unified\";\nimport type { PagedSortInput } from \"../src/page.type\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx, FaTableEnumColumnType } from \"../src/table.type\";\n\n/**\n * 表格工具类\n */\nexport const tableUtil = {\n\t/**\n\t * @description 处理无数据情况\n\t * @param {String} callValue 需要处理的值\n\t */\n\tformatValue(callValue: unknown): unknown {\n\t\t// 如果当前值为数组,使用 / 拼接(根据需求自定义)\n\t\tif (isArray(callValue)) return callValue.length ? callValue.join(` , `) : null;\n\t\treturn callValue;\n\t},\n\t/**\n\t * @description 处理 prop 为多级嵌套的情况(列如: prop:user.name)\n\t * @param {Object} row 当前行数据\n\t * @param {String} prop 当前 prop\n\t */\n\thandleRowAccordingToProp(row: Record<string, unknown>, prop: string): unknown {\n\t\tlet value: unknown = row;\n\t\tfor (const item of prop.split(\".\")) {\n\t\t\tif (typeof value !== \"object\" || value === null) return undefined;\n\t\t\tvalue = (value as Record<string, unknown>)[item];\n\t\t}\n\t\treturn value;\n\t},\n\t/**\n\t * @description 处理 prop,当 prop 为多级嵌套时 ==> 返回最后一级 prop\n\t * @param {String} prop 当前 prop\n\t */\n\thandleProp(prop: string): string {\n\t\tconst propArr = prop.split(\".\");\n\t\tif (propArr.length === 1) return prop;\n\t\treturn propArr.at(-1) ?? prop;\n\t},\n\t/**\n\t * @description 根据枚举列表查询当需要的数据(如果指定了 label 和 value 的 key值,会自动识别格式化)\n\t * @param {String} callValue 当前单元格值\n\t * @param {Array} enumData 字典列表\n\t * @param {Array} fieldNames 指定 label && value 的 key 值\n\t * @param {String} type 过滤类型(目前只有 tag)\n\t */\n\tfilterEnum(callValue: unknown, enumData: FaTableEnumColumnCtx[], fieldNames?: { label: string; value: string }, type?: \"tag\"): unknown {\n\t\tconst value = fieldNames?.value ?? \"value\";\n\t\tconst label = fieldNames?.label ?? \"label\";\n\t\tlet filterData: FaTableEnumColumnCtx | undefined;\n\t\tif (isArray(enumData)) {\n\t\t\tfilterData = enumData.find((item) => (item as unknown as Record<string, unknown>)[value] === callValue);\n\t\t}\n\t\tif (type === \"tag\") {\n\t\t\treturn filterData?.type ?? \"info\";\n\t\t}\n\t\treturn filterData ? (filterData as unknown as Record<string, unknown>)[label] : null;\n\t},\n\t/**\n\t * 数组动态排序\n\t */\n\tarrayDynamicSort(sortList: PagedSortInput[]): (a: Record<string, unknown>, b: Record<string, unknown>) => number {\n\t\treturn (a, b) => {\n\t\t\tif (sortList && sortList.length > 0) {\n\t\t\t\tfor (const condition of sortList) {\n\t\t\t\t\tconst property = condition.enField;\n\t\t\t\t\tconst order = condition.mode;\n\t\t\t\t\tif (!property) continue;\n\n\t\t\t\t\tconst aValue = a[property];\n\t\t\t\t\tconst bValue = b[property];\n\n\t\t\t\t\tif (typeof aValue === \"string\" && typeof bValue === \"string\") {\n\t\t\t\t\t\tif (order === \"ascending\") {\n\t\t\t\t\t\t\tconst comparison = aValue.localeCompare(bValue, \"zh-CN\");\n\t\t\t\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\t\t\t\treturn comparison;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (order === \"descending\") {\n\t\t\t\t\t\t\tconst comparison = bValue.localeCompare(aValue, \"zh-CN\");\n\t\t\t\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\t\t\t\treturn comparison;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n\t\t\t\t\t\tif (order === \"ascending\") {\n\t\t\t\t\t\t\tif (aValue < bValue) return -1;\n\t\t\t\t\t\t\tif (aValue > bValue) return 1;\n\t\t\t\t\t\t} else if (order === \"descending\") {\n\t\t\t\t\t\t\tif (aValue > bValue) return -1;\n\t\t\t\t\t\t\tif (aValue < bValue) return 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t};\n\t},\n\t/**\n\t * 设置枚举\n\t */\n\tsetEnumMap(columnEnum: FaTableEnumColumnType, prop: string, enumMap: Map<string, FaTableEnumColumnCtx[]>): void {\n\t\tif (!columnEnum) return;\n\t\tif (isFunction(columnEnum)) {\n\t\t\tenumMap.set(prop, columnEnum());\n\t\t} else if (isArray(columnEnum)) {\n\t\t\tenumMap.set(prop, columnEnum);\n\t\t}\n\t},\n\t/**\n\t * 扁平化 columns\n\t */\n\tflatColumns(columns: FaTableColumnCtx[], enumMap?: Map<string, FaTableEnumColumnCtx[]>): FaTableColumnCtx[] {\n\t\tconst flatArr: FaTableColumnCtx[] = [];\n\t\tcolumns.forEach((col) => {\n\t\t\tif (col._children?.length) {\n\t\t\t\tflatArr.push(...this.flatColumns(col._children));\n\t\t\t}\n\n\t\t\tflatArr.push(col);\n\n\t\t\t// 给每一项 column 添加 show && filterEnum 默认属性\n\t\t\tcol.show ??= true;\n\t\t\t// col.filterEnum = col.filterEnum ?? col.tag ?? false;\n\n\t\t\tlet enumKey = col.prop ?? col.search?.key;\n\n\t\t\tif (col.enum && isString(col.enum)) {\n\t\t\t\tenumKey = col.enum;\n\t\t\t}\n\n\t\t\t// 设置 enumMap\n\t\t\tif (col.enum && enumKey && enumMap) this.setEnumMap(col.enum, enumKey, enumMap);\n\t\t});\n\t\treturn flatArr.filter((item) => !item._children?.length);\n\t},\n};\n","import type { FaTableRow, FaTableState } from \"./table.state\";\nimport type { FaLayoutGridBreakPoint, FaLayoutGridItemResponsive } from \"../../layoutGrid\";\nimport type { TableColumnCtx } from \"element-plus\";\nimport type { VNode } from \"vue\";\n\n/** FaTable 默认插槽共享的状态与操作。 */\nexport interface FaTableDefaultSlotsResult {\n\tloading: boolean;\n\tsearchParam: Record<string, unknown>;\n\tselected: boolean;\n\tselectedList: FaTableRow[];\n\tselectedListIds: (string | number)[];\n\tindeterminateSelectedListIds: (string | number)[];\n\t/** @description 可能为空 */\n\tsearch?: () => Promise<void>;\n}\n\n/**\n * 获取 FaTable 默认插槽共享数据。\n * @param state - FaTable 内部状态。\n * @returns 可传给业务插槽的选择、搜索和加载状态。\n */\nexport const getTableDefaultSlots = (state: FaTableState): FaTableDefaultSlotsResult => {\n\treturn {\n\t\tloading: state.loading,\n\t\tsearchParam: state.searchParam,\n\t\tselected: state.selected,\n\t\tselectedList: state.selectedList,\n\t\tselectedListIds: state.selectedListIds,\n\t\tindeterminateSelectedListIds: state.indeterminateSelectedListIds,\n\t};\n};\n\n/** FaTable 默认时间搜索支持的快捷日期范围。 */\nexport type FaTableDataRange = \"Past1D\" | \"Past3D\" | \"Past1W\" | \"Past1M\" | \"Past3M\" | \"Past6M\" | \"Past1Y\" | \"Past3Y\";\n\n/** FaTable 枚举列的选项配置。 */\nexport interface FaTableEnumColumnCtx {\n\t[key: string]: unknown;\n\t/**\n\t * 选项框显示的文字\n\t */\n\tlabel: string;\n\t/**\n\t * 选项框值\n\t */\n\tvalue: string | number | boolean;\n\t/**\n\t * 显示\n\t */\n\tshow?: boolean;\n\t/**\n\t * 是否禁用此选项\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * 为树形选择是,可以通过 children 属性指定子选项\n\t */\n\tchildren?: FaTableEnumColumnCtx[];\n\t/**\n\t * 提示\n\t */\n\ttips?: string;\n\t/**\n\t * Tag的类型,默认 \"primary\"\n\t */\n\ttype?: \"primary\" | \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\n/** FaTable 枚举列接受的字典名称、选项集合或选项工厂。 */\nexport type FaTableEnumColumnType = string | FaTableEnumColumnCtx[] | ((...arguments_: unknown[]) => FaTableEnumColumnCtx[]);\n\n/** FaTable 搜索项支持的内置组件名或自定义组件名。 */\nexport type FaTableSearchColumnEl =\n\t| \"\"\n\t| \"el-input\"\n\t| \"el-input-number\"\n\t| \"el-select\"\n\t| \"el-select-v2\"\n\t| \"el-tree-select\"\n\t| \"el-cascader\"\n\t| \"el-date-picker\"\n\t| \"el-time-picker\"\n\t| \"el-time-select\"\n\t| \"el-switch\"\n\t| \"el-slider\"\n\t| \"slot\"\n\t| (string & Record<never, never>);\n\n/** FaTable 单列搜索项的组件、布局和默认值配置。 */\nexport type FaTableSearchColumnCtx = Partial<Record<FaLayoutGridBreakPoint, FaLayoutGridItemResponsive>> & {\n\t/**\n\t * 当前项搜索框的类型\n\t */\n\tel: FaTableSearchColumnEl;\n\t/**\n\t * 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件\n\t */\n\tprops?: Record<string, unknown>;\n\t/**\n\t * 当搜索项 label 不为列 label 属性时,可通过 label 指定\n\t */\n\tlabel?: string;\n\t/**\n\t * 当搜索项 key 不为 prop 属性时,可通过 key 指定\n\t */\n\tkey?: string;\n\t/**\n\t * 搜索项排序(从大到小)\n\t */\n\torder?: number;\n\t/**\n\t * 搜索项所占用的列数,默认为1列\n\t */\n\tspan?: number;\n\t/**\n\t * 搜索字段左侧偏移列数\n\t */\n\toffset?: number;\n\t/**\n\t * 插槽名称\n\t */\n\tslot?: string;\n\t/**\n\t * 搜索项默认值\n\t */\n\tdefaultValue?: unknown;\n};\n\n/**\n * FaTable 内置业务列类型。\n * @property default 默认\n * @property selection\t 选择列\n * @property expand 可展开按钮列\n * @property expand 可展开按钮列\n * @property image 图片列\n * @property date 日期显示(格式 \"YYYY-MM-DD\")\n * @property time 时间显示(格式 \"HH:mm:ss\")\n * @property dateTime 日期时间显示(格式 \"YYYY-MM-DD HH:mm:ss\")\n * @property d2 数值列,保留 2 位小数,不带千分位\n * @property d4 数值列,保留 4 位小数,不带千分位\n * @property d6 数值列,保留 6 位小数,不带千分位\n * @property gd2 数值列,保留 2 位小数,带千分位\n * @property gd4 数值列,保留 4 位小数,带千分位\n * @property gd6 数值列,保留 6 位小数,带千分位\n * @property timeInfo 时间信息列\n */\nexport type FaTableColumnType =\n\t\"default\" | \"selection\" | \"index\" | \"expand\" | \"image\" | \"date\" | \"time\" | \"dateTime\" | \"d2\" | \"d4\" | \"d6\" | \"gd2\" | \"gd4\" | \"gd6\" | \"timeInfo\";\n\n/** FaTable 日期、时间列支持的格式化模板。 */\nexport type FaTableColumnDateFormat =\n\t| \"YYYY-MM-DD HH:mm:ss\"\n\t| \"YYYY-MM-DD HH:mm\"\n\t| \"YYYY-MM-DD\"\n\t| \"YYYY-MM\"\n\t| \"YYYY\"\n\t| \"MM\"\n\t| \"DD\"\n\t| \"MM-DD\"\n\t| \"HH:mm:ss\"\n\t| \"HH:mm\"\n\t| \"HH\"\n\t| \"mm:ss\"\n\t| \"mm\"\n\t| \"ss\";\n\n/** FaTable 列配置,扩展 Element Plus 列能力和 Fast 业务渲染选项。 */\nexport type FaTableColumnCtx<T extends Record<PropertyKey, unknown> = FaTableRow> = Partial<\n\tOmit<TableColumnCtx<T>, \"order\" | \"type\" | \"prop\" | \"sortable\" | \"_children\">\n> & {\n\t/**\n\t * 内部的计算属性,一般不做使用\n\t * @description FaTable\n\t */\n\tmultiOrder?: \"\" | \"ascending\" | \"descending\";\n\t/**\n\t * 列Id\n\t * @description FaTable\n\t */\n\tcolumnId?: number;\n\t/**\n\t * 排序\n\t * @description FaTable\n\t */\n\torder?: number;\n\t/**\n\t * 排序字段\n\t * @description FaTable\n\t */\n\tsortableField?: string;\n\t/**\n\t * 禁用排序配置\n\t * @description FaTable\n\t */\n\tdisabledSortable?: boolean;\n\t/**\n\t * 合并行字段\n\t * @description FaTable\n\t */\n\tspanProp?: string;\n\t/**\n\t * 纯搜索\n\t * @description FaTable\n\t */\n\tpureSearch?: boolean;\n\t/**\n\t * 搜索项配置\n\t * @description FaTable\n\t */\n\tsearch?: FaTableSearchColumnCtx;\n\t/** 上面所有属性,全部非 FaTableColumn props,均为计算属性 */\n\t/**\n\t * 对应列的类型\n\t */\n\ttype?: FaTableColumnType;\n\t/**\n\t * 字段名称\n\t */\n\tprop?: string;\n\t/**\n\t * 是否显示在表格当中,默认 true\n\t */\n\tshow?: boolean;\n\t/**\n\t * 对应列是否可以排序,\n\t * 默认为 'custom' 模式,即远程排序,\n\t * 需要监听 Table 的 sort-change 事件\n\t */\n\tsortable?: boolean;\n\t/**\n\t * 小页面的宽度,如果为空,则继承默认宽度\n\t */\n\tsmallWidth?: string | number;\n\t/**\n\t * 自适应宽度\n\t */\n\tautoWidth?: boolean;\n\t/**\n\t * 插槽名称\n\t */\n\tslot?: string;\n\t/**\n\t * 表格头部插槽名称\n\t */\n\theaderSlot?: string;\n\t/**\n\t * 自定义表头内容渲染(tsx语法)\n\t */\n\theaderRender?: ({ column, $index }: { column: TableColumnCtx<FaTableRow>; $index: number } & FaTableDefaultSlotsResult) => VNode[];\n\t/**\n\t * 自定义单元格内容渲染(tsx语法)\n\t */\n\trender?: ({ row, column, $index }: { row: FaTableRow; column: FaTableColumnCtx; $index: number } & FaTableDefaultSlotsResult) => VNode[];\n\t/**\n\t * 多级表头\n\t */\n\t_children?: FaTableColumnCtx<T>[];\n\t/**\n\t * 复制\n\t */\n\tcopy?: boolean;\n\t/**\n\t * 是否为 Link Button\n\t */\n\tlink?: boolean;\n\t/**\n\t * 点击事件,优先级最高\n\t */\n\tclick?: ({ row, $index }: { row: T; $index?: number } & FaTableDefaultSlotsResult) => void;\n\t/**\n\t * 点击Emits事件回调\n\t */\n\tclickEmit?: string;\n\t/**\n\t * 图片列是否显示为原图,默认 false 显示缩略图\n\t */\n\toriginalImage?: boolean;\n\t/**\n\t * 显示时间格式化字符串,默认 false\n\t */\n\tdateFix?: boolean;\n\t/**\n\t * 显示在页面中的日期格式\n\t */\n\tdateFormat?: FaTableColumnDateFormat;\n\t/**\n\t * 是否是标签展示,默认 false\n\t */\n\ttag?: boolean;\n\t/**\n\t * 枚举类型(渲染值的字典)\n\t */\n\tenum?: FaTableEnumColumnType;\n\t/**\n\t * 数据删除字段,如果为 true 会显示遮罩层\n\t */\n\tdataDeleteField?: string;\n\t/**\n\t * 时间信息字段\n\t */\n\ttimeInfoField?: { userName?: string; time?: string };\n};\n","export default \"data:image/png;base64,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\";","export default \"data:image/png;base64,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\";","import { computed, nextTick, provide, reactive, ref, watch } from \"vue\";\nimport { dayjs, useGlobalSize } from \"element-plus\";\nimport { isArray, isFunction } from \"lodash-unified\";\nimport { callOptionalFunction, debounce, type makeSlots } from \"../../../utils\";\nimport { tableUtil } from \"../utils/table\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport type { PagedInput, PagedResult } from \"./page.type\";\nimport type { FaTableSlots, faTableEmits, faTableProps } from \"./table\";\nimport type { FaTableRow, FaTableState } from \"./table.state\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx } from \"./table.type\";\nimport type { TableInstance } from \"element-plus\";\nimport type { ExtractPropTypes, InjectionKey, Ref, SetupContext } from \"vue\";\n\n/** FaTable 状态的依赖注入键。 */\nexport const tableStateKey: InjectionKey<FaTableState> = Symbol(\"tableState\");\n/** FaTable 枚举映射的依赖注入键。 */\nexport const enumMapKey: InjectionKey<Map<string, FaTableEnumColumnCtx[]>> = Symbol(\"enumMap\");\n\ntype TableSetupContext = SetupContext<typeof faTableEmits, ReturnType<typeof makeSlots<FaTableSlots>>>;\n\ninterface TableComposable {\n\t_globalSize: ReturnType<typeof useGlobalSize>;\n\tstate: FaTableState;\n\telementRef: Ref<HTMLElement | undefined>;\n\ttableRef: Ref<TableInstance | undefined>;\n\thandleTableColumnAutoWidth: () => void;\n\tgetRequestParam: () => PagedInput;\n\tloadTableColumns: () => void;\n\thandleSizeChange: (pageSize: number) => void;\n\thandlePaginationChange: (value: number) => void;\n\tdefaultSearchTime: () => void;\n\ttableSearch: () => Promise<void>;\n\ttableReset: () => Promise<void>;\n\tdoRender: () => Promise<void>;\n\tdoLoading: (loadingFunction: () => void | Promise<void>, loadingText?: string) => void;\n\thandleCustomCellClick: (emitName: string, context: { row: FaTableRow; column: FaTableColumnCtx; $index: number }) => void;\n}\n\n/**\n * 创建 FaTable 的状态和操作方法。\n *\n * @param props - FaTable 的 Props。\n * @param slots - FaTable 的插槽。\n * @param emit - FaTable 的事件触发器。\n * @returns FaTable 的状态、引用和操作方法。\n */\nexport const useTable = (\n\tprops: ExtractPropTypes<typeof faTableProps>,\n\tslots: TableSetupContext[\"slots\"],\n\temit: TableSetupContext[\"emit\"]\n): TableComposable => {\n\tconst _globalSize = useGlobalSize();\n\n\tconst elementRef = ref<HTMLElement>();\n\tconst tableRef = ref<TableInstance>();\n\n\t/**\n\t * 定义 enumMap 存储 enum 值(避免异步请求无法格式化单元格内容 || 无法填充搜索下拉选择)\n\t */\n\tconst enumMap = reactive(new Map<string, FaTableEnumColumnCtx[]>());\n\tprovide(enumMapKey, enumMap);\n\n\tconst state: FaTableState = reactive({\n\t\tloading: false,\n\t\tloadingText: \"加载中...\",\n\t\torgColumns: [],\n\t\ttableColumns: computed(() => state.orgColumns.filter((f) => f.prop && !f.pureSearch)),\n\t\tsearchColumns: computed(() =>\n\t\t\tstate.orgColumns\n\t\t\t\t.filter((item) => item.pureSearch === true || item.search !== undefined)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn (a.search?.order ?? 0) - (b.search?.order ?? 0);\n\t\t\t\t})\n\t\t),\n\t\tspanColumns: computed(() => [\n\t\t\t...state.orgColumns.flatMap((column) => (column.spanProp ? [{ prop: column.prop ?? \"\", spanProp: column.spanProp }] : [])),\n\t\t\t...(props.props.span\n\t\t\t\t? [\n\t\t\t\t\t\t{ prop: \"__table-index\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-selection\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-operation\", spanProp: props.props.span },\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t]),\n\t\ttableData: [],\n\t\ttableSpanData: computed(() => {\n\t\t\tif (state.spanColumns?.length > 0 && state.tableData?.length > 0) {\n\t\t\t\tconst result: Record<string, number[]> = {};\n\t\t\t\tconst spanIndexes: Record<string, number> = {};\n\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\tresult[item.prop] = new Array<number>(state.tableData.length).fill(1, 0, 1).fill(0, 1);\n\t\t\t\t\tspanIndexes[item.prop] = 0;\n\t\t\t\t});\n\t\t\t\tfor (let i = 1; i < state.tableData.length; i++) {\n\t\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\t\tconst currentRow = state.tableData[i];\n\t\t\t\t\t\tconst previousRow = state.tableData[i - 1];\n\t\t\t\t\t\tconst spanValues = result[item.prop];\n\t\t\t\t\t\tconst spanIndex = spanIndexes[item.prop];\n\t\t\t\t\t\tif (currentRow === undefined || previousRow === undefined || spanValues === undefined || spanIndex === undefined) return;\n\t\t\t\t\t\tif (currentRow[item.spanProp] === previousRow[item.spanProp]) {\n\t\t\t\t\t\t\tspanValues[spanIndex] = (spanValues[spanIndex] ?? 0) + 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspanIndexes[item.prop] = i;\n\t\t\t\t\t\t\tspanValues[i] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn {};\n\t\t}),\n\t\ttablePagination: {\n\t\t\tpageIndex: 1,\n\t\t\tpageSize: 20,\n\t\t\ttotalRows: 0,\n\t\t},\n\t\tinitParam: {},\n\t\tsearchParam: {},\n\t\tsearchValueUpdate: \"\",\n\t\tsearchForm: props.searchForm,\n\t\tselected: false,\n\t\tselectedList: [],\n\t\tselectedListIds: computed(() =>\n\t\t\tstate.selectedList.flatMap((item) => {\n\t\t\t\tconst rowKey = isFunction(props.rowKey) ? props.rowKey(item) : tableUtil.handleRowAccordingToProp(item, props.rowKey);\n\t\t\t\treturn typeof rowKey === \"string\" || typeof rowKey === \"number\" ? [rowKey] : [];\n\t\t\t})\n\t\t),\n\t\tindeterminateSelectedListIds: [],\n\t\toperationColumnWidth: computed(() => {\n\t\t\tconst findAutoCol = state.autoColumnWidth.find((f) => f.prop === \"__table-operation\");\n\t\t\tif (findAutoCol) {\n\t\t\t\treturn `${findAutoCol.width}px`;\n\t\t\t}\n\t\t\tswitch (_globalSize.value) {\n\t\t\t\tcase \"large\":\n\t\t\t\tcase \"default\":\n\t\t\t\t\treturn \"54px\";\n\t\t\t\tcase \"small\":\n\t\t\t\t\treturn \"42px\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"auto\";\n\t\t\t}\n\t\t}),\n\t\timagePreview: false,\n\t\tpreviewList: [],\n\t\ttableWidth: 0,\n\t\ttableHeight: 0,\n\t\tautoColumnWidth: [],\n\t});\n\tlet requestVersion = 0;\n\n\tprovide(tableStateKey, state);\n\n\tconst handleTableColumnAutoWidth = (): void => {\n\t\tstate.loading = true;\n\t\tstate.loadingText = \"加载中...\";\n\t\tstate.autoColumnWidth = [];\n\t\tconst autoWidthColumns = state.tableColumns.filter((f) => f.autoWidth);\n\t\tif (slots?.operation) {\n\t\t\t// 操作列自动宽度\n\t\t\tautoWidthColumns.push({\n\t\t\t\tprop: \"__table-operation\",\n\t\t\t});\n\t\t}\n\t\tif (autoWidthColumns.length > 0) {\n\t\t\t// padding24/16 + border1\n\t\t\tconst otherWidth = _globalSize.value === \"default\" ? 25 : 17;\n\t\t\tvoid nextTick(() => {\n\t\t\t\tconst tableDom = document.querySelector(`.fa-table__${props.tableKey}`);\n\t\t\t\tif (tableDom) {\n\t\t\t\t\tautoWidthColumns.forEach((item) => {\n\t\t\t\t\t\tconst headerColumnDom = tableDom.querySelector(`.__fa-table__auto-width-column__cell-header__${item?.prop}`);\n\t\t\t\t\t\tconst cellColumnDoms = tableDom.querySelectorAll(`.__fa-table__auto-width-column__cell__${item?.prop}`);\n\t\t\t\t\t\tlet maxWidth = 0;\n\t\t\t\t\t\tif (headerColumnDom) {\n\t\t\t\t\t\t\tmaxWidth = Math.ceil(headerColumnDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (item?.sortable) {\n\t\t\t\t\t\t\t\tmaxWidth += 24;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcellColumnDoms.forEach((cellDom) => {\n\t\t\t\t\t\t\tconst curWidth = Math.ceil(cellDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (curWidth > maxWidth) {\n\t\t\t\t\t\t\t\tmaxWidth = curWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst findInfo = state.autoColumnWidth.find((f) => f.prop === item?.prop);\n\t\t\t\t\t\tif (findInfo) {\n\t\t\t\t\t\t\tfindInfo.width = Math.max(findInfo.width, maxWidth);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (item.prop) {\n\t\t\t\t\t\t\t\tstate.autoColumnWidth.push({\n\t\t\t\t\t\t\t\t\tprop: item.prop,\n\t\t\t\t\t\t\t\t\twidth: maxWidth,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).finally(() => {\n\t\t\t\tstate.loading = false;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tstate.loading = false;\n\t};\n\n\tconst handleTableData = (data: FaTableRow[]): FaTableRow[] => {\n\t\tif (props.treeData) {\n\t\t\tconst result: FaTableRow[] = [];\n\t\t\tdata.forEach((row) => {\n\t\t\t\tconst rowList = row[props.props.children ?? \"children\"];\n\t\t\t\tif (isArray(rowList)) {\n\t\t\t\t\t// 如果 rowList 是数组,遍历并合并每个子项\n\t\t\t\t\tconst childRows: unknown[] = rowList;\n\t\t\t\t\tchildRows.forEach((childRow) => {\n\t\t\t\t\t\tresult.push(typeof childRow === \"object\" && childRow !== null ? { ...row, ...childRow } : row);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult.push(typeof rowList === \"object\" && rowList !== null ? { ...row, ...rowList } : row);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn data;\n\t\t}\n\t};\n\n\tconst getRequestParam = (): PagedInput => {\n\t\tconst params = { ...state.searchParam, ...(props.pagination ? state.tablePagination : {}) };\n\t\t// 删除总条数\n\t\tdelete params.totalRows;\n\t\treturn params;\n\t};\n\n\tconst loadData = async (): Promise<void> => {\n\t\tconst currentRequestVersion = ++requestVersion;\n\t\tstate.loading = true;\n\t\tstate.loadingText = \"加载中...\";\n\t\tif (props.requestApi) {\n\t\t\tconst params = getRequestParam();\n\t\t\temit(\"refresh\", params);\n\t\t\tlet pageData: FaTableRow[];\n\t\t\ttry {\n\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 数据回调\n\t\t\t\tprops.dataCallback?.(resData);\n\t\t\t\t// 解析 API 接口返回的分页数据(如果有分页更新分页信息)\n\t\t\t\tif (props.pagination) {\n\t\t\t\t\tif (isArray(resData)) {\n\t\t\t\t\t\tpageData = resData;\n\t\t\t\t\t\tstate.tablePagination.totalRows = resData.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pageRes = resData as PagedResult;\n\t\t\t\t\t\tpageData = pageRes.rows ?? [];\n\t\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\t\tpageIndex: pageRes.pageIndex ?? state.tablePagination.pageIndex,\n\t\t\t\t\t\t\tpageSize: pageRes.pageSize ?? state.tablePagination.pageSize,\n\t\t\t\t\t\t\ttotalRows: pageRes.totalRows ?? pageData.length,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpageData = resData as FaTableRow[];\n\t\t\t\t\t// 更新分页信息\n\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\t\tpageSize: 0,\n\t\t\t\t\t\ttotalRows: pageData.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tstate.tableData = handleTableData(pageData);\n\t\t\t} catch (error) {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\tstate.tableData = [];\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t}\n\t\t} else {\n\t\t\temit(\"refresh\", { searchValue: state.searchParam.searchValue });\n\t\t\tlet _value = handleTableData([...props.data]);\n\t\t\t_value = _value.filter((f) => {\n\t\t\t\tconst searchValue = state.searchParam.searchValue;\n\t\t\t\tif (typeof searchValue !== \"string\" || searchValue.length === 0) return true;\n\t\t\t\treturn state.tableColumns.some((col) => {\n\t\t\t\t\tconst value = tableUtil.handleRowAccordingToProp(f, col.prop ?? \"\");\n\t\t\t\t\tconst text =\n\t\t\t\t\t\ttypeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\"\n\t\t\t\t\t\t\t? String(value)\n\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\treturn text.toLowerCase().includes(searchValue.toLowerCase());\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (isArray(state.searchParam.sortList) && state.searchParam.sortList.length > 0) {\n\t\t\t\t_value = _value.sort(tableUtil.arrayDynamicSort(state.searchParam.sortList));\n\t\t\t}\n\t\t\tif (props.pagination) {\n\t\t\t\t// 更新分页信息\n\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t});\n\t\t\t\tconst pageStart = (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;\n\t\t\t\tconst pageEnd = pageStart + state.tablePagination.pageSize;\n\t\t\t\tstate.tableData = _value.slice(pageStart, pageEnd);\n\t\t\t} else {\n\t\t\t\tstate.tableData = _value;\n\t\t\t\t// 更新分页信息\n\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\tpageSize: 0,\n\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t});\n\t\t\t}\n\t\t\tstate.loading = false;\n\t\t}\n\t\thandleTableColumnAutoWidth();\n\t};\n\n\tconst cloneColumns = (columns: FaTableColumnCtx[]): FaTableColumnCtx[] =>\n\t\tcolumns.map((column) => ({\n\t\t\t...column,\n\t\t\t...(column.search && { search: { ...column.search, ...(column.search.props && { props: { ...column.search.props } }) } }),\n\t\t\t...(column._children && { _children: cloneColumns(column._children) }),\n\t\t}));\n\n\tconst loadTableColumns = (): void => {\n\t\tlet columns: FaTableColumnCtx[] = props.columns ? cloneColumns(props.columns) : [];\n\t\t// 默认值处理\n\t\tcolumns.forEach((col) => {\n\t\t\t// 处理搜索项的 key 和 label\n\t\t\tif (col.pureSearch || col.search) {\n\t\t\t\tcol.search ??= { el: \"\" };\n\t\t\t\tcol.search.key ??= col.prop;\n\t\t\t\tcol.search.label ??= col.label;\n\t\t\t\t// 处理默认值\n\t\t\t\tif (col.search.key && col.search.defaultValue !== undefined) {\n\t\t\t\t\tstate.searchParam[col.search.key] = col.search.defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// 排序\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\treturn (a.order ?? 0) - (b.order ?? 0);\n\t\t});\n\n\t\t// TODO:这里的扁平化暂时没用到\n\t\tstate.orgColumns = tableUtil.flatColumns(columns, enumMap);\n\t};\n\n\tconst handleSizeChange = (pageSize: number): void => {\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tstate.tablePagination.pageSize = pageSize;\n\t\temit(\"sizeChange\", pageSize);\n\t\temit(\"paginationChange\", 1, pageSize);\n\t\tvoid loadData();\n\t};\n\tconst handlePaginationChange = (val: number): void => {\n\t\tstate.tablePagination.pageIndex = val;\n\t\temit(\"paginationChange\", val, state.tablePagination.pageSize);\n\t\tvoid loadData();\n\t};\n\n\tconst updatedTotalParam = (): void => {\n\t\t// 处理查询参数,可以给查询参数加自定义前缀操作\n\t\tconst newSearchParam: Record<string, unknown> = {};\n\t\t// 防止手动清空输入框携带参数(这里可以自定义查询参数前缀)\n\t\tfor (const key in state.searchParam) {\n\t\t\t// * 某些情况下参数为 false/0 也应该携带参数\n\t\t\tif (state.searchParam[key] || state.searchParam[key] === false || state.searchParam[key] === 0) {\n\t\t\t\tnewSearchParam[key] = state.searchParam[key];\n\t\t\t}\n\t\t\t// 处理某些情况下如果为空字符串,其实是不需要传到后端的\n\t\t\telse if (!state.searchParam[key]) {\n\t\t\t\tdelete state.searchParam[key];\n\t\t\t}\n\t\t}\n\t\tObject.assign(state.searchParam, newSearchParam);\n\t};\n\n\tconst defaultSearchTime = (): void => {\n\t\tif (props.hideSearchTime) {\n\t\t\tstate.searchParam.searchTimeList = undefined;\n\t\t} else {\n\t\t\tconst end = new Date();\n\t\t\tconst start = new Date();\n\t\t\tif (props.futureSearchTime) {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.searchParam.searchTimeList = [dayjs(start).format(\"YYYY-MM-DD 00:00:00\"), dayjs(end).format(\"YYYY-MM-DD 23:59:59\")];\n\t\t}\n\t};\n\n\tconst tableSearch = async (): Promise<void> => {\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tupdatedTotalParam();\n\t\tawait loadData();\n\t};\n\tconst renderTable = debounce((): Promise<void> => {\n\t\tloadTableColumns();\n\t\treturn tableSearch();\n\t}, 300);\n\n\tconst tableReset = async (): Promise<void> => {\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\t// 清除搜索条件\n\t\tstate.searchParam = {};\n\t\tdefaultSearchTime();\n\t\t// 重置搜索表单的时候,如果有默认搜索参数,则重置默认的搜索参数\n\t\tif (typeof state.initParam === \"object\" && state.initParam !== null) {\n\t\t\tObject.assign(state.searchParam, state.initParam);\n\t\t}\n\t\temit(\"reset\", state.searchParam);\n\t\tawait loadData();\n\t};\n\n\tconst doRender = async (): Promise<void> => {\n\t\tstate.orgColumns = [];\n\t\tstate.autoColumnWidth = [];\n\t\tstate.tableData = [];\n\t\tawait renderTable();\n\t};\n\n\tconst doLoading = (loadingFunction: () => void | Promise<void>, loadingText = \"加载中...\"): void => {\n\t\tstate.loading = true;\n\t\tstate.loadingText = loadingText;\n\t\tvoid callOptionalFunction(loadingFunction).finally(() => {\n\t\t\tstate.loading = false;\n\t\t});\n\t};\n\n\tconst handleCustomCellClick = (\n\t\temitName: string,\n\t\t{ row, column, $index }: { row: FaTableRow; column: FaTableColumnCtx; $index: number }\n\t): void => {\n\t\temit(\"customCellClick\", emitName, { row, column, $index, ...getTableDefaultSlots(state) });\n\t};\n\n\twatch(\n\t\t() => props.tableKey,\n\t\t() => doRender()\n\t);\n\n\twatch(\n\t\t() => props.searchForm,\n\t\t(newValue) => {\n\t\t\tstate.searchForm = newValue;\n\t\t}\n\t);\n\n\treturn {\n\t\t_globalSize,\n\t\tstate,\n\t\telementRef,\n\t\ttableRef,\n\t\thandleTableColumnAutoWidth,\n\t\tgetRequestParam,\n\t\tloadTableColumns,\n\t\thandleSizeChange,\n\t\thandlePaginationChange,\n\t\tdefaultSearchTime,\n\t\ttableSearch,\n\t\ttableReset,\n\t\tdoRender,\n\t\tdoLoading,\n\t\thandleCustomCellClick,\n\t};\n};\n","import { Fragment, computed, defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { CopyDocument } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElImage, ElMessage, ElTableColumn, ElTag, ElText, dayjs, useGlobalSize } from \"element-plus\";\nimport { isArray, isFunction, isNil, isNumber, isObject, isString } from \"lodash-unified\";\nimport { copy as copyToClipboard, definePropType, formatChineseRelativeTime, makeSlots, useProps, useRender } from \"../../../utils\";\nimport FaImage from \"../../image\";\nimport artwork from \"../images/artwork.png\";\nimport notImage from \"../images/notImage.png\";\nimport { tableUtil } from \"../utils/table\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport { enumMapKey, tableStateKey } from \"./useTable\";\nimport type { FaTableRow } from \"./table.state\";\nimport type {\n\tFaTableColumnCtx,\n\tFaTableColumnDateFormat,\n\tFaTableColumnType,\n\tFaTableDefaultSlotsResult,\n\tFaTableEnumColumnCtx,\n\tFaTableEnumColumnType,\n} from \"./table.type\";\nimport type { TableColumnCtx } from \"element-plus\";\nimport type { ComputedRef, PropType, VNode } from \"vue\";\n\ntype DefaultRow = FaTableRow;\n\n/** FaTableColumn 的运行时 Props 定义。 */\nexport const tableColumnProps = {\n\t/**\n\t * @description type of the column. If set to `selection`, the column will display checkbox. If set to `index`, the column will display index of the row (staring from 1). If set to `expand`, the column will display expand icon\n\t */\n\ttype: {\n\t\ttype: String,\n\t\tdefault: \"default\",\n\t},\n\t/**\n\t * @description column label\n\t */\n\tlabel: String,\n\t/**\n\t * @description class name of cells in the column\n\t */\n\tclassName: String,\n\t/**\n\t * @description class name of the label of this column\n\t */\n\tlabelClassName: String,\n\t/**\n\t * @description\n\t */\n\tproperty: String,\n\t/**\n\t * @description field name. You can also use its alias: `property`\n\t */\n\tprop: String,\n\t/**\n\t * @description column width\n\t */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"\",\n\t},\n\t/**\n\t * @description column minimum width. Columns with `width` has a fixed width, while columns with `min-width` has a width that is distributed in proportion\n\t */\n\tminWidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"\",\n\t},\n\t/**\n\t * @description render function for table header of this column\n\t */\n\trenderHeader: Function as PropType<TableColumnCtx<DefaultRow>[\"renderHeader\"]>,\n\t/**\n\t * @description whether column can be sorted. Remote sorting can be done by setting this attribute to 'custom' and listening to the `sort-change` event of Table\n\t */\n\tsortable: {\n\t\ttype: [Boolean, String],\n\t\tdefault: false,\n\t},\n\t/**\n\t * @description sorting method, works when `sortable` is `true`. Should return a number, just like Array.sort\n\t */\n\tsortMethod: Function as PropType<TableColumnCtx<DefaultRow>[\"sortMethod\"]>,\n\t/**\n\t * @description specify which property to sort by, works when `sortable` is `true` and `sort-method` is `undefined`. If set to an Array, the column will sequentially sort by the next property if the previous one is equal\n\t */\n\tsortBy: [String, Function, Array] as PropType<TableColumnCtx<DefaultRow>[\"sortBy\"]>,\n\t/**\n\t * @description whether column width can be resized, works when `border` of `el-table` is `true`\n\t */\n\tresizable: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description column's key. If you need to use the filter-change event, you need this attribute to identify which column is being filtered\n\t */\n\tcolumnKey: String,\n\t/**\n\t * @description alignment, the value should be 'left' \\/ 'center' \\/ 'right'\n\t */\n\talign: String,\n\t/**\n\t * @description alignment of the table header. If omitted, the value of the above `align` attribute will be applied, the value should be 'left' \\/ 'center' \\/ 'right'\n\t */\n\theaderAlign: String,\n\t/**\n\t * @description whether to hide extra content and show them in a tooltip when hovering on the cell\n\t */\n\tshowOverflowTooltip: {\n\t\ttype: [Boolean, Object] as PropType<TableColumnCtx<DefaultRow>[\"showOverflowTooltip\"]>,\n\t\tdefault: undefined,\n\t},\n\t/** @description function that formats cell tooltip content, works when show-overflow-tooltip is enabled */\n\ttooltipFormatter: Function as PropType<TableColumnCtx<DefaultRow>[\"tooltipFormatter\"]>,\n\t/**\n\t * @description whether column is fixed at left / right. Will be fixed at left if `true`\n\t */\n\tfixed: [Boolean, String],\n\t/**\n\t * @description function that formats cell content\n\t */\n\tformatter: Function as PropType<TableColumnCtx<DefaultRow>[\"formatter\"]>,\n\t/**\n\t * @description function that determines if a certain row can be selected, works when `type` is 'selection'\n\t */\n\tselectable: Function as PropType<TableColumnCtx<DefaultRow>[\"selectable\"]>,\n\t/**\n\t * @description whether to reserve selection after data refreshing, works when `type` is 'selection'. Note that `row-key` is required for this to work\n\t */\n\treserveSelection: Boolean,\n\t/**\n\t * @description data filtering method. If `filter-multiple` is on, this method will be called multiple times for each row, and a row will display if one of the calls returns `true`\n\t */\n\tfilterMethod: Function as PropType<TableColumnCtx<DefaultRow>[\"filterMethod\"]>,\n\t/**\n\t * @description filter value for selected data, might be useful when table header is rendered with `render-header`\n\t */\n\tfilteredValue: Array as PropType<TableColumnCtx<DefaultRow>[\"filteredValue\"]>,\n\t/**\n\t * @description an array of data filtering options. For each element in this array, `text` and `value` are required\n\t */\n\tfilters: Array as PropType<TableColumnCtx<DefaultRow>[\"filters\"]>,\n\t/**\n\t * @description placement for the filter dropdown\n\t */\n\tfilterPlacement: String,\n\t/**\n\t * @description whether data filtering supports multiple options\n\t */\n\tfilterMultiple: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description className for the filter dropdown\n\t */\n\tfilterClassName: String,\n\t/**\n\t * @description customize indices for each row, works on columns with `type=index`\n\t */\n\tindex: [Number, Function] as PropType<TableColumnCtx<DefaultRow>[\"index\"]>,\n\t/**\n\t * @description the order of the sorting strategies used when sorting the data, works when `sortable` is `true`. Accepts an array, as the user clicks on the header, the column is sorted in order of the elements in the array\n\t */\n\tsortOrders: {\n\t\ttype: Array as PropType<TableColumnCtx<DefaultRow>[\"sortOrders\"]>,\n\t\tdefault: (): TableColumnCtx<DefaultRow>[\"sortOrders\"] => {\n\t\t\treturn [\"ascending\", \"descending\", null];\n\t\t},\n\t\tvalidator: (val: TableColumnCtx<DefaultRow>[\"sortOrders\"]): boolean => {\n\t\t\treturn (val ?? []).every((order) => order === \"ascending\" || order === \"descending\" || order === null);\n\t\t},\n\t},\n};\n\n/** FaTableColumn 插槽返回的行列上下文。 */\nexport interface FaTableColumnSlotsResult {\n\t/** @description slots为表格内容的时候才会返回 */\n\trow?: DefaultRow;\n\t/** @description slot为表头内容的时候返回 'TableColumnCtx<any>' 否则返回 'FaTableColumnCtx' */\n\tcolumn?: TableColumnCtx<DefaultRow> | FaTableColumnCtx;\n\t$index?: number;\n}\n\ntype FaTableColumnDefaultSlots = Record<string, FaTableDefaultSlotsResult & FaTableColumnSlotsResult>;\n\n/** FaTableColumn 的固定插槽和动态命名插槽。 */\nexport type FaTableColumnSlots = Record<string, unknown> & {\n\t/** @description 默认内容插槽 */\n\tdefault: FaTableDefaultSlotsResult & { row: DefaultRow; column: FaTableColumnCtx; $index: number };\n\t/** @description 自定义表头的内容 */\n\theader: FaTableDefaultSlotsResult & { column: FaTableColumnCtx; $index: number };\n\t/** @description 自定义 filter 图标 */\n\tfilterIcon: FaTableDefaultSlotsResult & { filterOpened: boolean };\n\t/** @description 展开列的自定义内容 */\n\texpand: FaTableDefaultSlotsResult & { expanded: boolean };\n} & FaTableColumnDefaultSlots;\n\nexport default defineComponent({\n\tname: \"FaTableColumn\",\n\tprops: {\n\t\t...tableColumnProps,\n\t\t/**\n\t\t * @description type of the column. If set to `selection`, the column will display checkbox. If set to `index`, the column will display index of the row (staring from 1). If set to `expand`, the column will display expand icon\n\t\t */\n\t\ttype: {\n\t\t\ttype: definePropType<FaTableColumnType>(String),\n\t\t\tdefault: \"default\",\n\t\t},\n\t\t/**\n\t\t * @description column width\n\t\t */\n\t\twidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: \"auto\",\n\t\t},\n\t\t/** @description alignment, the value should be 'left' \\/ 'center' \\/ 'right' */\n\t\talign: {\n\t\t\ttype: String,\n\t\t\tdefault: \"left\",\n\t\t},\n\t\t/** @description alignment of the table header. If omitted, the value of the above `align` attribute will be applied, the value should be 'left' \\/ 'center' \\/ 'right' */\n\t\theaderAlign: {\n\t\t\ttype: String,\n\t\t\tdefault: \"left\",\n\t\t},\n\t\t/** @description 是否显示在表格当中 */\n\t\tshow: Boolean,\n\t\t/** @description 小页面的宽度,如果为空,则继承默认宽度 */\n\t\tsmallWidth: {\n\t\t\ttype: [String, Number],\n\t\t},\n\t\t/** @description 自适应宽度 */\n\t\tautoWidth: Boolean,\n\t\t/** @description 插槽名称 */\n\t\tslot: String,\n\t\t/** @description 表格头部插槽名称 */\n\t\theaderSlot: String,\n\t\t/** @description 自定义表头内容渲染(tsx语法) */\n\t\theaderRender: {\n\t\t\ttype: definePropType<({ column, $index }: { column: TableColumnCtx<DefaultRow>; $index: number } & FaTableDefaultSlotsResult) => VNode[]>(\n\t\t\t\tFunction\n\t\t\t),\n\t\t},\n\t\t/** @description 自定义单元格内容渲染(tsx语法) */\n\t\trender: {\n\t\t\ttype: definePropType<\n\t\t\t\t({ row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number } & FaTableDefaultSlotsResult) => VNode[]\n\t\t\t>(Function),\n\t\t},\n\t\t/** @description 多级表头 */\n\t\t_children: {\n\t\t\ttype: definePropType<FaTableColumnCtx[]>(Array),\n\t\t},\n\t\t/** @description 隐藏图片 */\n\t\thideImage: Boolean,\n\t\t/** @description 复制 */\n\t\tcopy: Boolean,\n\t\t/** @description 是否为 Link Button */\n\t\tlink: Boolean,\n\t\t/** @description 合并行字段 */\n\t\tspanProp: String,\n\t\t/** @description Link 按钮的点击事件,优先级最高 */\n\t\tclick: {\n\t\t\ttype: definePropType<({ row, $index }: { row: DefaultRow; $index?: number } & FaTableDefaultSlotsResult) => void>(Function),\n\t\t},\n\t\t/** @description 点击Emits事件回调 */\n\t\tclickEmit: String,\n\t\t/** @description 图片列是否显示为原图,默认 false 显示缩略图 */\n\t\toriginalImage: Boolean,\n\t\t/** @description 显示时间格式化字符串 */\n\t\tdateFix: Boolean,\n\t\t/** @description 显示在页面中的日期格式 */\n\t\tdateFormat: {\n\t\t\ttype: definePropType<FaTableColumnDateFormat>(String),\n\t\t},\n\t\t/** @description 是否是标签展示 */\n\t\ttag: Boolean,\n\t\t/** @description 枚举类型(渲染值的字典) */\n\t\tenum: {\n\t\t\ttype: definePropType<FaTableEnumColumnType>([String, Array, Function]),\n\t\t},\n\t\t/** @description 数据删除字段,如果为 true 会显示遮罩层 */\n\t\tdataDeleteField: String,\n\t\t/** @description 时间信息字段 */\n\t\ttimeInfoField: {\n\t\t\ttype: definePropType<{ userName?: string; time?: string }>(Object),\n\t\t\tdefault: () => ({\n\t\t\t\tuserName: \"createdUserName\",\n\t\t\t\ttime: \"createdTime\",\n\t\t\t}),\n\t\t},\n\t},\n\temits: {\n\t\t/** @description 图片预览 */\n\t\timagePreview: (url: string): boolean => isString(url),\n\t\t/** @description 自定义单元格点击事件 */\n\t\tcustomCellClick: (emitName: string, { row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number }): boolean =>\n\t\t\t(isNil(emitName) || isString(emitName)) && isObject(row) && isObject(column) && isNumber($index),\n\t},\n\tslots: makeSlots<FaTableColumnSlots>(),\n\tsetup(props, { slots, emit }) {\n\t\tconst _globalSize = useGlobalSize();\n\t\tconst tableState = inject(tableStateKey);\n\t\tconst enumMap = inject(enumMapKey);\n\t\tif (tableState === undefined || enumMap === undefined) {\n\t\t\tthrow new Error(\"FaTableColumn 必须在 FaTable 内部渲染。\");\n\t\t}\n\n\t\tconst columnCtx = computed(() => props as unknown as FaTableColumnCtx);\n\n\t\t/** 获取ClassName */\n\t\tconst getClassName = (): string => {\n\t\t\tlet className = \"\";\n\t\t\tif (props.type === \"timeInfo\") {\n\t\t\t\tclassName += \"fa-table__line-height-normal-column\";\n\t\t\t}\n\t\t\tif (props.type === \"date\" || props.type === \"time\" || props.type === \"dateTime\") {\n\t\t\t\tif (props.dateFix) {\n\t\t\t\t\tclassName += \"fa-table__line-height-normal-column\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (props.className) {\n\t\t\t\treturn `${className} ${props.className}`;\n\t\t\t}\n\t\t\treturn className;\n\t\t};\n\n\t\t/** 获取宽度 */\n\t\tconst getWidth = (defAttr: string): string | number => {\n\t\t\tif (props.autoWidth) {\n\t\t\t\treturn computed(() => {\n\t\t\t\t\tconst findInfo = tableState.autoColumnWidth.find((f) => f.prop === props.prop);\n\t\t\t\t\tif (findInfo) {\n\t\t\t\t\t\treturn `${findInfo.width}px`;\n\t\t\t\t\t}\n\t\t\t\t\treturn \"auto\";\n\t\t\t\t}).value;\n\t\t\t}\n\t\t\tif (_globalSize.value === \"small\") {\n\t\t\t\treturn props.smallWidth ?? props.width ?? props.minWidth ?? defAttr ?? \"auto\";\n\t\t\t}\n\t\t\treturn props.width ?? props.minWidth ?? defAttr ?? \"auto\";\n\t\t};\n\n\t\t/** 表头自动宽度渲染 */\n\t\tconst autoWidthHeaderRender = (el: VNode[]): VNode[] => {\n\t\t\tif (props.autoWidth) {\n\t\t\t\treturn [\n\t\t\t\t\t<div class={[\"fa-table__auto-width-column__cell-header\", `__fa-table__auto-width-column__cell-header__${props.prop}`]}>{el}</div>,\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t};\n\n\t\t/** 自动宽度渲染 */\n\t\tconst autoWidthRender = (el: VNode[]): VNode[] => {\n\t\t\tif (props.autoWidth) {\n\t\t\t\treturn [<div class={[\"fa-table__auto-width-column__cell\", `__fa-table__auto-width-column__cell__${props.prop}`]}>{el}</div>];\n\t\t\t} else {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t};\n\n\t\t/** 表头渲染 */\n\t\tconst headerRender = ({ column, $index }: { column: TableColumnCtx<DefaultRow>; $index: number }): VNode[] => {\n\t\t\tif (props.headerRender) {\n\t\t\t\treturn autoWidthHeaderRender(props.headerRender({ column, $index, ...getTableDefaultSlots(tableState) }));\n\t\t\t} else if (props.headerSlot) {\n\t\t\t\treturn autoWidthHeaderRender(slots[props.headerSlot]?.({ column, $index, ...getTableDefaultSlots(tableState) }) ?? []);\n\t\t\t} else {\n\t\t\t\treturn autoWidthHeaderRender([<span>{props.label}</span>]);\n\t\t\t}\n\t\t};\n\n\t\t/** 复制渲染 */\n\t\tconst displayText = (value: unknown): string => {\n\t\t\tif (typeof value === \"string\") return value;\n\t\t\tif (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") return String(value);\n\t\t\treturn \"\";\n\t\t};\n\n\t\tconst copyRender = (value: unknown, copy?: boolean): VNode[] => {\n\t\t\tif (!(props.copy || copy) || !value) return [];\n\n\t\t\treturn [\n\t\t\t\t<ElIcon\n\t\t\t\t\tclass=\"fa__copy-icon\"\n\t\t\t\t\ttitle=\"复制\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid copyToClipboard(displayText(value)).then(\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tElMessage({\n\t\t\t\t\t\t\t\t\ttype: \"success\",\n\t\t\t\t\t\t\t\t\tmessage: \"复制成功\",\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tElMessage({\n\t\t\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\t\t\tmessage: \"复制失败\",\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<CopyDocument />\n\t\t\t\t</ElIcon>,\n\t\t\t];\n\t\t};\n\n\t\t/** 渲染单元格数据 */\n\t\tconst renderCellData = ({ row }: { row: DefaultRow }): unknown => {\n\t\t\tconst cellValue = tableUtil.handleRowAccordingToProp(row, props.prop ?? \"\");\n\n\t\t\tlet enumData: FaTableEnumColumnCtx[] | undefined;\n\n\t\t\tif (isString(props.enum)) {\n\t\t\t\tenumData = enumMap.get(props.enum);\n\t\t\t} else if (isArray(props.enum)) {\n\t\t\t\tenumData = props.enum;\n\t\t\t} else if (isFunction(props.enum)) {\n\t\t\t\tenumData = props.enum({ row });\n\t\t\t}\n\n\t\t\tif (enumData) {\n\t\t\t\treturn tableUtil.filterEnum(cellValue, enumData);\n\t\t\t} else {\n\t\t\t\treturn tableUtil.formatValue(cellValue);\n\t\t\t}\n\t\t};\n\n\t\t/** 格式化渲染 */\n\t\tconst formatterRender = (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cellValue: unknown, index: number): VNode | string => {\n\t\t\tif (column.formatter) {\n\t\t\t\treturn column.formatter(row, column, cellValue, index);\n\t\t\t} else {\n\t\t\t\treturn displayText(cellValue);\n\t\t\t}\n\t\t};\n\n\t\t/** 时间信息列渲染 */\n\t\tconst timeInfoRender = (row: DefaultRow, _column: TableColumnCtx<DefaultRow>, _$index: number): VNode[] => {\n\t\t\tconst userName = displayText(row[props.timeInfoField?.userName ?? \"createdUserName\"]);\n\t\t\tconst time = displayText(row[props.timeInfoField?.time ?? \"createdTime\"]);\n\t\t\treturn [\n\t\t\t\t<Fragment>\n\t\t\t\t\t<div style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\" title={time}>\n\t\t\t\t\t\t{userName && <span style=\"margin-right: 5px;\">{userName}</span>}\n\t\t\t\t\t\t<span>{time}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t{time && (\n\t\t\t\t\t\t<ElTag type=\"info\" round effect=\"light\" size=\"small\">\n\t\t\t\t\t\t\t{formatChineseRelativeTime(time)}\n\t\t\t\t\t\t</ElTag>\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>,\n\t\t\t];\n\t\t};\n\n\t\t/** 标签列渲染 */\n\t\tconst tagRender = (row: DefaultRow, column: TableColumnCtx<DefaultRow>, $index: number): VNode[] => {\n\t\t\tconst renderValue = formatterRender(row, column, renderCellData({ row }), $index);\n\n\t\t\tlet enumData: FaTableEnumColumnCtx[] | undefined;\n\n\t\t\tif (isString(props.enum)) {\n\t\t\t\tenumData = enumMap.get(props.enum);\n\t\t\t} else if (isArray(props.enum)) {\n\t\t\t\tenumData = props.enum;\n\t\t\t} else if (isFunction(props.enum)) {\n\t\t\t\tenumData = props.enum({ row });\n\t\t\t}\n\n\t\t\tconst enumValue = tableUtil.handleRowAccordingToProp(row, props.prop ?? \"\");\n\t\t\tconst type = enumData?.find((item) => item.value === enumValue)?.type ?? \"info\";\n\t\t\treturn [\n\t\t\t\t<Fragment>\n\t\t\t\t\t{copyRender(renderValue)}\n\t\t\t\t\t{renderValue ? <ElTag type={type}>{renderValue}</ElTag> : null}\n\t\t\t\t</Fragment>,\n\t\t\t];\n\t\t};\n\n\t\t/** 时间列渲染 */\n\t\tconst dateRender = (row: DefaultRow, column: TableColumnCtx<DefaultRow>, $index: number): VNode[] => {\n\t\t\tlet dateFormat;\n\t\t\tswitch (props.type) {\n\t\t\t\tcase \"date\":\n\t\t\t\t\tdateFormat = \"YYYY-MM-DD\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"time\":\n\t\t\t\t\tdateFormat = \"HH:mm:ss\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dateTime\":\n\t\t\t\t\tdateFormat = \"YYYY-MM-DD HH:mm:ss\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst rawValue = row[props.prop ?? \"\"];\n\t\t\tconst renderValue = rawValue\n\t\t\t\t? formatterRender(row, column, dayjs(displayText(rawValue)).format(props.dateFormat ?? dateFormat), $index)\n\t\t\t\t: null;\n\t\t\treturn [\n\t\t\t\t<Fragment>\n\t\t\t\t\t{copyRender(renderValue)}\n\t\t\t\t\t{renderValue}\n\t\t\t\t\t{props.dateFix && renderValue && (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<ElTag type=\"info\" round effect=\"light\" size=\"small\">\n\t\t\t\t\t\t\t\t{formatChineseRelativeTime(displayText(renderValue))}\n\t\t\t\t\t\t\t</ElTag>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>,\n\t\t\t];\n\t\t};\n\n\t\t/** 数值列渲染 */\n\t\tconst numberRender = (row: DefaultRow, column: TableColumnCtx<DefaultRow>, $index: number): VNode[] => {\n\t\t\tconst renderValue = row[props.prop ?? \"\"];\n\t\t\tif (!renderValue || !isNumber(renderValue)) {\n\t\t\t\treturn [<Fragment>{formatterRender(row, column, renderValue, $index)}</Fragment>];\n\t\t\t}\n\t\t\tlet useGrouping = false;\n\t\t\tlet maximumFractionDigits = 2;\n\t\t\tswitch (props.type) {\n\t\t\t\tcase \"d2\":\n\t\t\t\t\tmaximumFractionDigits = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"d4\":\n\t\t\t\t\tmaximumFractionDigits = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"d6\":\n\t\t\t\t\tmaximumFractionDigits = 6;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gd2\":\n\t\t\t\t\tmaximumFractionDigits = 2;\n\t\t\t\t\tuseGrouping = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gd4\":\n\t\t\t\t\tmaximumFractionDigits = 4;\n\t\t\t\t\tuseGrouping = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gd6\":\n\t\t\t\t\tmaximumFractionDigits = 6;\n\t\t\t\t\tuseGrouping = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t<Fragment>\n\t\t\t\t\t{formatterRender(\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\trenderValue.toLocaleString(\"zh-CN\", {\n\t\t\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\t\t\tmaximumFractionDigits,\n\t\t\t\t\t\t\tuseGrouping,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t$index\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>,\n\t\t\t];\n\t\t};\n\n\t\t/** 链接列渲染 */\n\t\tconst linkRender = (row: DefaultRow, column: TableColumnCtx<DefaultRow>, $index: number): VNode[] => {\n\t\t\tconst renderValue = formatterRender(row, column, row[props.prop ?? \"\"], $index);\n\t\t\treturn autoWidthRender([\n\t\t\t\t<Fragment>\n\t\t\t\t\t{copyRender(renderValue)}\n\t\t\t\t\t{renderValue && (\n\t\t\t\t\t\t<ElText\n\t\t\t\t\t\t\tclass={\"el-link is-hover-underline fa-table__link-column__text\"}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t// 数据删除拦截点击\n\t\t\t\t\t\t\t\tif (props.dataDeleteField && row[props.dataDeleteField] === true) return;\n\t\t\t\t\t\t\t\tif (props.click) {\n\t\t\t\t\t\t\t\t\tprops.click({ row, $index, ...getTableDefaultSlots(tableState) });\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\temit(\"customCellClick\", props.clickEmit ?? \"\", {\n\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\tcolumn: columnCtx.value,\n\t\t\t\t\t\t\t\t\t\t$index,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderValue}\n\t\t\t\t\t\t</ElText>\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>,\n\t\t\t]);\n\t\t};\n\n\t\tconst defaultRender = ({ row, column, $index }: { row: DefaultRow; column: TableColumnCtx<DefaultRow>; $index: number }): VNode[] => {\n\t\t\tif (props.type === \"timeInfo\") {\n\t\t\t\treturn timeInfoRender(row, column, $index);\n\t\t\t}\n\t\t\tif (props.tag) {\n\t\t\t\treturn tagRender(row, column, $index);\n\t\t\t}\n\t\t\tif (props.type === \"date\" || props.type === \"time\" || props.type === \"dateTime\") {\n\t\t\t\treturn dateRender(row, column, $index);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tprops.type === \"d2\" ||\n\t\t\t\tprops.type === \"d4\" ||\n\t\t\t\tprops.type === \"d6\" ||\n\t\t\t\tprops.type === \"gd2\" ||\n\t\t\t\tprops.type === \"gd4\" ||\n\t\t\t\tprops.type === \"gd6\"\n\t\t\t) {\n\t\t\t\treturn numberRender(row, column, $index);\n\t\t\t}\n\t\t\tif (props.link) {\n\t\t\t\treturn linkRender(row, column, $index);\n\t\t\t}\n\t\t\tif (props.render) {\n\t\t\t\treturn autoWidthRender(props.render({ row, column: columnCtx.value, $index, ...getTableDefaultSlots(tableState) }));\n\t\t\t}\n\t\t\tif (props.slot) {\n\t\t\t\treturn autoWidthRender(slots[props.slot]?.({ row, column: columnCtx.value, $index, ...getTableDefaultSlots(tableState) }) ?? []);\n\t\t\t}\n\t\t\tconst renderValue = formatterRender(row, column, row[props.prop ?? \"\"], $index);\n\t\t\treturn autoWidthRender([\n\t\t\t\t<Fragment>\n\t\t\t\t\t{copyRender(renderValue)}\n\t\t\t\t\t{renderValue}\n\t\t\t\t</Fragment>,\n\t\t\t]);\n\t\t};\n\n\t\tlet elTableColumnProps: ComputedRef<TableColumnCtx<DefaultRow>> = useProps(props, tableColumnProps, [\n\t\t\t\"type\",\n\t\t\t\"width\",\n\t\t\t\"minWidth\",\n\t\t\t\"sortable\",\n\t\t\t\"sortOrders\",\n\t\t\t\"resizable\",\n\t\t\t\"showOverflowTooltip\",\n\t\t]) as unknown as ComputedRef<TableColumnCtx<DefaultRow>>;\n\n\t\twatch(\n\t\t\t() => props,\n\t\t\t() => {\n\t\t\t\telTableColumnProps = useProps(props, tableColumnProps, [\n\t\t\t\t\t\"type\",\n\t\t\t\t\t\"className\",\n\t\t\t\t\t\"minWidth\",\n\t\t\t\t\t\"sortable\",\n\t\t\t\t\t\"sortOrders\",\n\t\t\t\t\t\"resizable\",\n\t\t\t\t\t\"showOverflowTooltip\",\n\t\t\t\t]) as unknown as ComputedRef<TableColumnCtx<DefaultRow>>;\n\t\t\t}\n\t\t);\n\n\t\tuseRender(() => (\n\t\t\t<Fragment>\n\t\t\t\t{\n\t\t\t\t\t// 如果有配置多级表头的数据,则递归该组件\n\t\t\t\t\tprops._children?.length ? (\n\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t{...elTableColumnProps.value}\n\t\t\t\t\t\t\tclassName={getClassName()}\n\t\t\t\t\t\t\tminWidth={getWidth(\"auto\")}\n\t\t\t\t\t\t\tsortable={props.sortable ? \"custom\" : false}\n\t\t\t\t\t\t\tsortOrders={props.sortOrders ?? [\"descending\", \"ascending\", null]}\n\t\t\t\t\t\t\tresizable={props.resizable && !props.autoWidth}\n\t\t\t\t\t\t\tshowOverflowTooltip={(props.showOverflowTooltip ?? true) && !props.autoWidth && props.type === \"default\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\theader: ({ column, $index }: { column: TableColumnCtx<DefaultRow>; $index: number }) =>\n\t\t\t\t\t\t\t\t\theaderRender({ column, $index }),\n\t\t\t\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\t\t\t\t(props._children ?? []).map((col: FaTableColumnCtx) =>\n\t\t\t\t\t\t\t\t\t\th(\n\t\t\t\t\t\t\t\t\t\t\tresolveComponent(\"FaTableColumn\"),\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t...col,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tslots\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t) : props.type === \"image\" ? (\n\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t{...elTableColumnProps.value}\n\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\tclassName=\"fa-table__image-column\"\n\t\t\t\t\t\t\tminWidth=\"50px\"\n\t\t\t\t\t\t\tsortable={false}\n\t\t\t\t\t\t\tresizable={false}\n\t\t\t\t\t\t\tshowOverflowTooltip={false}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\theader: ({ column, $index }: { column: TableColumnCtx<DefaultRow>; $index: number }) =>\n\t\t\t\t\t\t\t\t\theaderRender({ column, $index }),\n\t\t\t\t\t\t\t\tdefault: ({ row }: { row: DefaultRow; column: TableColumnCtx<DefaultRow>; $index: number }) =>\n\t\t\t\t\t\t\t\t\trow[props.prop ?? \"\"] ? (\n\t\t\t\t\t\t\t\t\t\tprops.hideImage ? (\n\t\t\t\t\t\t\t\t\t\t\t<ElImage\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"fa-image\"\n\t\t\t\t\t\t\t\t\t\t\t\tlazy\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={artwork}\n\t\t\t\t\t\t\t\t\t\t\t\tfit=\"cover\"\n\t\t\t\t\t\t\t\t\t\t\t\tpreviewSrcList={[displayText(row[props.prop ?? \"\"])]}\n\t\t\t\t\t\t\t\t\t\t\t\tcloseOnPressEscape\n\t\t\t\t\t\t\t\t\t\t\t\thideOnClickModal\n\t\t\t\t\t\t\t\t\t\t\t\tpreviewTeleported\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<FaImage lazy src={displayText(row[props.prop ?? \"\"])} fit=\"cover\" original={props.originalImage} thumb />\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ElImage class=\"fa-image\" lazy src={notImage} fit=\"cover\" />\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// 其他正常的列\n\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t{...elTableColumnProps.value}\n\t\t\t\t\t\t\ttype={props.type === \"selection\" || props.type === \"index\" || props.type === \"expand\" ? props.type : \"default\"}\n\t\t\t\t\t\t\tclassName={getClassName()}\n\t\t\t\t\t\t\tminWidth={getWidth(\"auto\")}\n\t\t\t\t\t\t\tsortable={props.sortable ? \"custom\" : false}\n\t\t\t\t\t\t\tsortOrders={props.sortOrders ?? [\"descending\", \"ascending\", null]}\n\t\t\t\t\t\t\tresizable={props.resizable && !props.autoWidth}\n\t\t\t\t\t\t\tshowOverflowTooltip={(props.showOverflowTooltip ?? true) && !props.autoWidth && props.type === \"default\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\theader: ({ column, $index }: { column: TableColumnCtx<DefaultRow>; $index: number }) =>\n\t\t\t\t\t\t\t\t\tslots.header\n\t\t\t\t\t\t\t\t\t\t? slots.header({ column: columnCtx.value, $index, ...getTableDefaultSlots(tableState) })\n\t\t\t\t\t\t\t\t\t\t: headerRender({ column, $index }),\n\t\t\t\t\t\t\t\tdefault: ({ row, column, $index }: { row: DefaultRow; column: TableColumnCtx<DefaultRow>; $index: number }) =>\n\t\t\t\t\t\t\t\t\tslots.default\n\t\t\t\t\t\t\t\t\t\t? slots.default({ row, column: columnCtx.value, $index, ...getTableDefaultSlots(tableState) })\n\t\t\t\t\t\t\t\t\t\t: defaultRender({ row, column, $index }),\n\t\t\t\t\t\t\t\tfilterIcon: ({ filterOpened }: { filterOpened: boolean }) =>\n\t\t\t\t\t\t\t\t\tslots.filterIcon?.({ filterOpened, ...getTableDefaultSlots(tableState) }),\n\t\t\t\t\t\t\t\texpand: ({ expanded }: { expanded: boolean }) => slots.expand?.({ expanded, ...getTableDefaultSlots(tableState) }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t</Fragment>\n\t\t));\n\t},\n});\n","/**!\n * Sortable 1.15.7\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = _objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nfunction _toConsumableArray(r) {\n return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\nvar version = \"1.15.7\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType && el.host !== el ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n var el = this.el;\n savedInputChecked.forEach(function (checkEl) {\n if (el.contains(checkEl)) {\n checkEl.checked = true;\n }\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { Fragment, defineComponent, inject, onBeforeUnmount, reactive, ref } from \"vue\";\nimport { ElInput, ElInputNumber, ElMessage, ElNotification, ElRadio, ElRadioGroup, ElSwitch, ElTable, ElTableColumn, ElText } from \"element-plus\";\nimport Sortable from \"sortablejs\";\nimport { definePropType, randomString, useExpose, useRender, withDefineType } from \"../../../utils\";\nimport { FaDialog } from \"../../dialog\";\nimport { tableStateKey } from \"./useTable\";\nimport type { FaTableColumnCtx } from \"./table.type\";\nimport type { FaDialogInstance } from \"../../dialog\";\nimport type { TableColumnCtx } from \"element-plus\";\nimport type { SortableEvent } from \"sortablejs\";\n\nexport default defineComponent({\n\tname: \"FaTableColumnsSettingDialog\",\n\tprops: {\n\t\t/** @description 改变 */\n\t\tchange: {\n\t\t\ttype: definePropType<(columns: FaTableColumnCtx[]) => Promise<void>>(Function),\n\t\t},\n\t},\n\tsetup(props, { expose }) {\n\t\tconst tableState = inject(tableStateKey);\n\t\tif (tableState === undefined) throw new Error(\"FaTableColumnsSettingDialog 必须在 FaTable 内部渲染。\");\n\n\t\tconst state = reactive({\n\t\t\ttableKey: randomString(8),\n\t\t\tsortableInstance: withDefineType<Sortable | undefined>(),\n\t\t\tchange: false,\n\t\t});\n\n\t\tconst faDialogRef = ref<FaDialogInstance>();\n\n\t\tconst indexMethod = (index: number): number => {\n\t\t\treturn index + 1;\n\t\t};\n\n\t\t// /**\n\t\t// * 处理固定行ClassName\n\t\t// */\n\t\t// const handleFixedRowClassName = (row: FaTableColumnCtx) => {\n\t\t// \tif (row.fixed) {\n\t\t// \t\treturn \"fa-table__setting-fixed-column\";\n\t\t// \t}\n\t\t// };\n\n\t\tconst tableRowDrop = (): void => {\n\t\t\tconst tBody = document.querySelector<HTMLElement>(`.fa-table__column-setting-${state.tableKey} .el-table__body-wrapper tbody`);\n\t\t\tif (!tBody) return;\n\n\t\t\t// 销毁现有Sortable实例(如果存在)\n\t\t\tif (state.sortableInstance) {\n\t\t\t\tstate.sortableInstance.destroy();\n\t\t\t}\n\n\t\t\tstate.sortableInstance = new Sortable(tBody, {\n\t\t\t\t// ms, number 单位:ms,定义排序动画的时间\n\t\t\t\tanimation: 150,\n\t\t\t\tdelay: 0,\n\t\t\t\t// filter: \".fa-table__setting-fixed-column\",\n\t\t\t\t// onMove(evt: any) {\n\t\t\t\t// \tconst { related } = evt;\n\t\t\t\t// \treturn !related.classList.contains(\"fa-table__setting-fixed-column\");\n\t\t\t\t// },\n\t\t\t\tonEnd(evt: SortableEvent): void {\n\t\t\t\t\tconst { newIndex, oldIndex } = evt;\n\t\t\t\t\tif (newIndex !== undefined && oldIndex !== undefined && newIndex !== oldIndex) {\n\t\t\t\t\t\tstate.change = true;\n\t\t\t\t\t\tconst curRow = tableState.orgColumns.splice(oldIndex, 1)[0];\n\t\t\t\t\t\tif (curRow) tableState.orgColumns.splice(newIndex, 0, curRow);\n\t\t\t\t\t\ttableState.orgColumns = tableState.orgColumns.map((item, index) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\torder: index + 1,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\n\t\tconst open = (): void => {\n\t\t\tstate.change = false;\n\t\t\tfaDialogRef.value?.open(() => {\n\t\t\t\ttableRowDrop();\n\t\t\t\tElNotification({\n\t\t\t\t\tmessage: \"点击保存才会进行数据缓存,点击取消为本此生效\",\n\t\t\t\t\ttype: \"info\",\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst destroySortable = (): void => {\n\t\t\tstate.sortableInstance?.destroy();\n\t\t\tstate.sortableInstance = undefined;\n\t\t};\n\n\t\tonBeforeUnmount(destroySortable);\n\n\t\tconst handleChange = async (): Promise<void> => {\n\t\t\tif (state.change) {\n\t\t\t\tawait props.change?.(tableState.orgColumns);\n\t\t\t} else {\n\t\t\t\tElMessage.info(\"列配置未发生变化\");\n\t\t\t}\n\t\t};\n\n\t\tconst handleConfirmClick = (): void => {\n\t\t\tfaDialogRef.value?.close(handleChange);\n\t\t};\n\n\t\tconst handleOrderChange = (): void => {\n\t\t\tstate.change = true;\n\t\t\tlet orderColumns = tableState.orgColumns.filter((f) => !f?.pureSearch);\n\t\t\torderColumns = orderColumns.sort((a, b) => {\n\t\t\t\tif (a.order !== b.order) {\n\t\t\t\t\treturn (a.order ?? 0) - (b.order ?? 0);\n\t\t\t\t} else {\n\t\t\t\t\treturn orderColumns.indexOf(b) - orderColumns.indexOf(a);\n\t\t\t\t}\n\t\t\t});\n\t\t\ttableState.orgColumns = [...orderColumns, ...tableState.orgColumns.filter((f) => f?.pureSearch)];\n\t\t\ttableState.orgColumns.forEach((item, index) => {\n\t\t\t\titem.order = index + 1;\n\t\t\t});\n\t\t};\n\n\t\tconst handleColumnChange = (): void => {\n\t\t\tstate.change = true;\n\t\t};\n\n\t\tconst autoWidthDisabled = (row: FaTableColumnCtx, switchEl = false): { disabled?: boolean; placeholder?: string } => {\n\t\t\tconst result: { disabled?: boolean; placeholder?: string } = {};\n\t\t\tif (row?.type) {\n\t\t\t\tswitch (row?.type) {\n\t\t\t\t\tcase \"expand\":\n\t\t\t\t\t\tresult.disabled = true;\n\t\t\t\t\t\tresult.placeholder = \"暂不支持宽度配置\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image\":\n\t\t\t\t\t\tresult.disabled = true;\n\t\t\t\t\t\tresult.placeholder = \"图片列无需配置\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"date\":\n\t\t\t\t\tcase \"time\":\n\t\t\t\t\tcase \"dateTime\":\n\t\t\t\t\t\tresult.disabled = true;\n\t\t\t\t\t\tresult.placeholder = \"时间/日期列无需配置\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"timeInfo\":\n\t\t\t\t\t\tresult.disabled = true;\n\t\t\t\t\t\tresult.placeholder = \"当前列无需配置\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (row?.tag) {\n\t\t\t\tresult.disabled = true;\n\t\t\t\tresult.placeholder = \"标签列无需配置\";\n\t\t\t} else if (row?.autoWidth) {\n\t\t\t\tresult.disabled = true;\n\t\t\t\tresult.placeholder = \"自动列宽无需配置\";\n\t\t\t}\n\t\t\tif (!result.disabled) return {};\n\t\t\tif (switchEl) {\n\t\t\t\tdelete result.placeholder;\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tconst pureSearchDisabled = (\n\t\t\trow: FaTableColumnCtx,\n\t\t\tswitchEl = false,\n\t\t\torderEl = false,\n\t\t\t_radioEl = false\n\t\t): { disabled?: boolean; placeholder?: string } => {\n\t\t\tconst result: { disabled?: boolean; placeholder?: string } = {};\n\t\t\tif (row?.pureSearch) {\n\t\t\t\tresult.disabled = true;\n\t\t\t\tresult.placeholder = \"搜索列无需配置\";\n\t\t\t}\n\t\t\tif (!result.disabled) return {};\n\t\t\tif (switchEl) {\n\t\t\t\tdelete result.placeholder;\n\t\t\t}\n\t\t\tif (orderEl) {\n\t\t\t\tresult.placeholder = \"999\";\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tuseRender(() => (\n\t\t\t<FaDialog\n\t\t\t\tref={faDialogRef}\n\t\t\t\tclass=\"fa-table__column-setting-dialog\"\n\t\t\t\tonConfirmClick={handleConfirmClick}\n\t\t\t\tshowFullscreen={false}\n\t\t\t\tconfirmButtonText={state.change ? \"保存更改\" : \"确认\"}\n\t\t\t\tfullHeight\n\t\t\t\tonClosed={destroySortable}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\theader: () => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t列表配置(留空则恢复默认配置)\n\t\t\t\t\t\t\t<ElText type=\"info\">点击保存才会进行数据缓存,点击取消为本次生效</ElText>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<ElTable\n\t\t\t\t\t\t\tclass={[\"fa-table__column-setting\", `fa-table__column-setting-${state.tableKey}`]}\n\t\t\t\t\t\t\tdata={tableState.orgColumns}\n\t\t\t\t\t\t\trowKey=\"prop\"\n\t\t\t\t\t\t\tborder\n\t\t\t\t\t\t\t// rowClassName={handleFixedRowClassName}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn type=\"index\" fixed=\"left\" align=\"center\" width={45} index={indexMethod} />\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"列显示名称\" minWidth={200}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.type === \"image\" ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入列显示名称\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入列显示名称\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"固定\" width={230}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElRadioGroup\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.fixed}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row, false, false, true)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElRadio value={false}>无</ElRadio>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElRadio value=\"left\">左侧</ElRadio>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElRadio value=\"right\">右侧</ElRadio>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElRadioGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"宽度\" width={200}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInputNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.width}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmax={999}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepStrictly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入宽度\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...autoWidthDisabled(row)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuffix: () => <span>px</span>,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElInputNumber>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"小的宽度\" width={200}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInputNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.smallWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmax={999}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepStrictly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入小的宽度\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...autoWidthDisabled(row)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuffix: () => <span>px</span>,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElInputNumber>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"顺序\" width={100}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInputNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"width: auto;\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.order}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmax={999}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepStrictly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入顺序\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row, false, true)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleOrderChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"排序\" width={65}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElSwitch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.sortable}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinlinePrompt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveText=\"是\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveText=\"否\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={(row.disabledSortable ?? false) || row.type === \"image\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row, true)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"复制\" width={65}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElSwitch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.copy}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinlinePrompt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveText=\"是\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveText=\"否\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!row?.type || !!row?.slot}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row, true)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"自动宽度\" width={85}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElSwitch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.autoWidth}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinlinePrompt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveText=\"是\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveText=\"否\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!row?.type}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...pureSearchDisabled(row, true)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"显示\" width={75}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElSwitch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.show}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinlinePrompt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveText=\"显示\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinactiveText=\"隐藏\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"搜索框名称\" minWidth={200}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.search ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.search.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入搜索框名称\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInput disabled placeholder=\"当前列暂无搜索项配置\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn label=\"搜索框顺序\" width={200}>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\trow: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: TableColumnCtx<Record<string, unknown>>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t}) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.search ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInputNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvModel={row.search.order}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmax={999}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepStrictly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请输入搜索框顺序\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleColumnChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElInputNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmax={999}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepStrictly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols={false}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"当前列暂无搜索项配置\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</ElTable>\n\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t</FaDialog>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 打开 */\n\t\t\topen,\n\t\t\t/** @description 列改变 */\n\t\t\tchange: handleChange,\n\t\t});\n\t},\n});\n","import { defineComponent, inject } from \"vue\";\nimport { ElNotification, ElPagination } from \"element-plus\";\nimport { isNull, isNumber } from \"lodash-unified\";\nimport { definePropType, useRender } from \"../../../utils\";\nimport { tableStateKey } from \"./useTable\";\n\nexport default defineComponent({\n\tname: \"FaTablePagination\",\n\tprops: {\n\t\t/** @description 页码 */\n\t\tpageSizes: {\n\t\t\ttype: definePropType<number[]>(Array),\n\t\t\tdefault: [20, 30, 50, 100],\n\t\t},\n\t},\n\temits: {\n\t\t/** @description 页码改变 */\n\t\tsizeChange: (pageSize: number) => isNumber(pageSize) || isNull(pageSize),\n\t\t/** @description 当前页数改变 */\n\t\tcurrentChange: (currentPage: number) => isNumber(currentPage) || isNull(currentPage),\n\t},\n\tsetup(props, { emit }) {\n\t\tconst tableState = inject(tableStateKey);\n\t\tif (tableState === undefined) {\n\t\t\tthrow new Error(\"FaTablePagination 必须在 FaTable 内部渲染。\");\n\t\t}\n\n\t\tconst handleSizeChange = (pageSize: number): void => {\n\t\t\tif (pageSize > 100) {\n\t\t\t\tElNotification({\n\t\t\t\t\ttitle: \"欢迎\",\n\t\t\t\t\tmessage: \"当前页码已经超过100条/页,可能会造成页面卡顿。\",\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tduration: 2000,\n\t\t\t\t});\n\t\t\t}\n\t\t\temit(\"sizeChange\", pageSize);\n\t\t};\n\n\t\tuseRender(() => (\n\t\t\t<ElPagination\n\t\t\t\t{...{\n\t\t\t\t\t\"onUpdate:currentPage\": (currentPage: number) => emit(\"currentChange\", currentPage),\n\t\t\t\t\t\"onUpdate:pageSize\": handleSizeChange,\n\t\t\t\t}}\n\t\t\t\tclass=\"fa-table-pagination\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tcurrentPage={tableState.tablePagination.pageIndex}\n\t\t\t\tpageSize={tableState.tablePagination.pageSize}\n\t\t\t\tpageSizes={props.pageSizes}\n\t\t\t\tbackground\n\t\t\t\tlayout=\"jumper, prev, pager, next, sizes, total\"\n\t\t\t\ttotal={tableState.tablePagination.totalRows}\n\t\t\t/>\n\t\t));\n\t},\n});\n","import { Fragment, defineComponent, h, inject, reactive, resolveComponent } from \"vue\";\nimport { ElOption } from \"element-plus\";\nimport { isString } from \"lodash-unified\";\nimport {\n\tcreateDateRangeShortcuts,\n\tcreateDateShortcuts,\n\tcreateOneMonthRangeFromToday,\n\tdefinePropType,\n\tgetStartOfToday,\n\tmakeSlots,\n\tuseRender,\n\twithDefineType,\n} from \"../../../utils\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport { enumMapKey, tableStateKey } from \"./useTable\";\nimport type { FaTableColumnCtx, FaTableDefaultSlotsResult, FaTableEnumColumnCtx } from \"./table.type\";\n\n/**\n * 已知默认支持的el组件:\n * \tel-input\n * \tel-input-number\n * \tel-select\n * \tel-select-v2\n * \tel-tree-select\n * \tel-cascader\n * \tel-date-picker\n * \tel-time-picker\n * \tel-time-select,\n * \tel-switch\n * 已知组件的默认props\n * clearable:el-input,el-input-number,el-select,el-select-v2,el-tree-select,el-cascader,el-date-picker,el-time-picker,el-time-select\n * filterable:el-select,el-select-v2,el-tree-select\n * placeholder-请输入:el-input,el-input-number\n * placeholder-请选择:el-select,el-select-v2,el-tree-select,el-cascader\n * defaultTime:el-date-picker\n * shortcuts:el-date-picker\n * options:el-select-v2,el-cascader\n * data:el-tree-select\n * startPlaceholder:\n * \t\tel-date-picker type in [\"datetimerange\", \"daterange\", \"monthrange\", \"yearrange\"]\n * \t\tel-time-picker isRange is true\n * endPlaceholder:\n * \t\tel-date-picker type in [\"datetimerange\", \"daterange\", \"monthrange\", \"yearrange\"]\n * \t\tel-time-picker isRange is true\n * rangeSeparator:\n * \t\tel-date-picker type in [\"datetimerange\", \"daterange\", \"monthrange\", \"yearrange\"]\n * \t\tel-time-picker isRange is true\n * unlinkPanels:el-date-picker type in [\"datetimerange\", \"daterange\", \"monthrange\", \"yearrange\"]\n * 后缀 -select Select -page Page -cascader Cascader 结尾的\n * \tplaceholder:请选择\n * 后缀 -input Input 结尾的\n * \tplaceholder:请输入\n */\n\nconst clearableEls = [\n\t\"el-input\",\n\t\"ELInput\",\n\t\"el-input-number\",\n\t\"ELInputNumber\",\n\t\"el-select\",\n\t\"ElSelect\",\n\t\"el-select-v2\",\n\t\"ElSelectV2\",\n\t\"el-tree-select\",\n\t\"ElTreeSelect\",\n\t\"el-cascader\",\n\t\"ElCascader\",\n\t\"el-date-picker\",\n\t\"ElDatePicker\",\n\t\"el-time-picker\",\n\t\"ElTimePicker\",\n\t\"el-time-select\",\n\t\"ElTimeSelect\",\n];\n\nconst elInputEls = [\"el-input\", \"ElInput\", \"ELInput\"];\n\ntype FaTableSearchFormItemSlots = Record<\n\tstring,\n\tFaTableDefaultSlotsResult & {\n\t\tcolumn?: FaTableColumnCtx;\n\t\tsearch?: () => Promise<void>;\n\t}\n>;\n\nconst filterableEls = [\"el-select\", \"ElSelect\", \"el-select-v2\", \"ElSelectV2\", \"el-tree-select\", \"ElTreeSelect\"];\n\nconst inputPlaceholderEls = [\"el-input\", \"ELInput\", \"el-input-number\", \"ELInputNumber\"];\n\nconst selectPlaceholderEls = [\"el-select\", \"ElSelect\", \"el-select-v2\", \"ElSelectV2\", \"el-tree-select\", \"ElTreeSelect\", \"el-cascader\", \"ElCascader\"];\n\nexport default defineComponent({\n\tname: \"FaTableSearchFormItem\",\n\tprops: {\n\t\t/** @description 列配置 */\n\t\tcolumn: {\n\t\t\ttype: definePropType<FaTableColumnCtx>(Object),\n\t\t\trequired: true,\n\t\t\t/** 这里的 default 不知道为什么,不写识别不出来类型 */\n\t\t\tdefault: {},\n\t\t},\n\t\t/** @description 搜索 */\n\t\tsearch: {\n\t\t\ttype: definePropType<() => Promise<void>>(Function),\n\t\t\trequired: true,\n\t\t},\n\t},\n\tslots: makeSlots<FaTableSearchFormItemSlots>(),\n\tsetup(props, { slots }) {\n\t\tconst tableState = inject(tableStateKey);\n\t\tconst enumMap = inject(enumMapKey);\n\t\tif (tableState === undefined || enumMap === undefined) {\n\t\t\tthrow new Error(\"FaTableSearchFormItem 必须在 FaTable 内部渲染。\");\n\t\t}\n\n\t\tconst state = reactive({\n\t\t\tenumDict: withDefineType<FaTableEnumColumnCtx[]>([]),\n\t\t});\n\n\t\tconst handleUpdateModelValue = (value: unknown): void => {\n\t\t\tif (isString(value)) {\n\t\t\t\t// 如果是字符串,则去除前后空格\n\t\t\t\tvalue = value.trim();\n\t\t\t}\n\t\t\tconst searchKey = props.column.search?.key ?? props.column.prop;\n\t\t\tif (searchKey) tableState.searchParam[searchKey] = value;\n\t\t};\n\n\t\tconst handleChange = (_value: unknown): void => {\n\t\t\tvoid props.search();\n\t\t};\n\n\t\tconst handleDefaultProps = (): Record<string, unknown> => {\n\t\t\tconst search = props.column.search;\n\t\t\tconst defaultProps: Record<string, unknown> = {};\n\t\t\tif (!search) return defaultProps;\n\t\t\tif (clearableEls.includes(search.el)) {\n\t\t\t\tdefaultProps[\"clearable\"] = true;\n\t\t\t}\n\t\t\tif (filterableEls.includes(search.el)) {\n\t\t\t\tdefaultProps[\"filterable\"] = true;\n\t\t\t}\n\t\t\tif (inputPlaceholderEls.includes(search.el)) {\n\t\t\t\tdefaultProps[\"placeholder\"] = \"请输入\";\n\t\t\t}\n\t\t\tif (selectPlaceholderEls.includes(search.el)) {\n\t\t\t\tdefaultProps[\"placeholder\"] = \"请选择\";\n\t\t\t}\n\t\t\tif ([\"el-date-picker\", \"ElDatePicker\"].includes(search.el)) {\n\t\t\t\tdefaultProps[\"unlinkPanels\"] = true;\n\t\t\t\tif (\n\t\t\t\t\ttypeof search.props?.[\"type\"] === \"string\" &&\n\t\t\t\t\t[\"datetimerange\", \"daterange\", \"monthrange\", \"yearrange\"].includes(search.props[\"type\"])\n\t\t\t\t) {\n\t\t\t\t\tdefaultProps[\"defaultTime\"] = createOneMonthRangeFromToday();\n\t\t\t\t\tdefaultProps[\"shortcuts\"] = createDateRangeShortcuts();\n\t\t\t\t\tdefaultProps[\"rangeSeparator\"] = \"至\";\n\t\t\t\t\tdefaultProps[\"startPlaceholder\"] = \"开始时间\";\n\t\t\t\t\tdefaultProps[\"endPlaceholder\"] = \"结束时间\";\n\t\t\t\t} else {\n\t\t\t\t\tdefaultProps[\"defaultTime\"] = getStartOfToday();\n\t\t\t\t\tdefaultProps[\"shortcuts\"] = createDateShortcuts();\n\t\t\t\t\tdefaultProps[\"placeholder\"] = \"请选择\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ([\"el-time-picker\", \"ElTimePicker\"].includes(search.el) && search.props?.[\"isRange\"]) {\n\t\t\t\tdefaultProps[\"rangeSeparator\"] = \"至\";\n\t\t\t\tdefaultProps[\"startPlaceholder\"] = \"开始时间\";\n\t\t\t\tdefaultProps[\"endPlaceholder\"] = \"结束时间\";\n\t\t\t}\n\t\t\tif (\n\t\t\t\t[\"el-select\", \"ElSelect\", \"el-select-v2\", \"ElSelectV2\", \"el-cascader\", \"ElCascader\", \"el-tree-select\", \"ElTreeSelect\"].includes(\n\t\t\t\t\tsearch.el\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tlet enumData: FaTableEnumColumnCtx[] | undefined;\n\t\t\t\tif (props.column.enum && isString(props.column.enum)) {\n\t\t\t\t\tenumData = enumMap.get(props.column.enum);\n\t\t\t\t} else {\n\t\t\t\t\tconst enumKey = props.column.prop ?? search.key;\n\t\t\t\t\tenumData = enumKey ? enumMap.get(enumKey) : undefined;\n\t\t\t\t}\n\t\t\t\tenumData = enumData?.filter((item) => item.show !== false);\n\t\t\t\tstate.enumDict = enumData ?? [];\n\t\t\t}\n\t\t\tif ([\"el-select-v2\", \"ElSelectV2\", \"el-cascader\", \"ElCascader\"].includes(search.el)) {\n\t\t\t\tdefaultProps[\"options\"] = state.enumDict;\n\t\t\t}\n\t\t\tif ([\"el-tree-select\", \"ElTreeSelect\"].includes(search.el)) {\n\t\t\t\tdefaultProps[\"data\"] = state.enumDict;\n\t\t\t}\n\n\t\t\treturn defaultProps;\n\t\t};\n\n\t\tuseRender(() => {\n\t\t\tconst search = props.column.search;\n\t\t\tconst searchKey = search?.key ?? props.column.prop;\n\t\t\tif (!search?.el || !searchKey) return <Fragment />;\n\t\t\tconst value = tableState.searchParam[searchKey];\n\t\t\tconst inputClearable = search.props?.[\"clearable\"] !== false && value !== undefined && value !== null && value !== \"\";\n\t\t\treturn (\n\t\t\t\t<Fragment>\n\t\t\t\t\t{h(\n\t\t\t\t\t\tresolveComponent(search.el),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...handleDefaultProps(),\n\t\t\t\t\t\t\t...search.props,\n\t\t\t\t\t\t\t...(elInputEls.includes(search.el) ? { clearable: inputClearable } : {}),\n\t\t\t\t\t\t\tmodelValue: value,\n\t\t\t\t\t\t\t\"onUpdate:modelValue\": handleUpdateModelValue,\n\t\t\t\t\t\t\tonChange: handleChange,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\t\t\t[\"el-select\", \"ElSelect\"].includes(search.el)\n\t\t\t\t\t\t\t\t\t? state.enumDict.map((selData, index) =>\n\t\t\t\t\t\t\t\t\t\t\th(ElOption, {\n\t\t\t\t\t\t\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: selData[typeof search.props?.[\"label\"] === \"string\" ? search.props[\"label\"] : \"label\"] as\n\t\t\t\t\t\t\t\t\t\t\t\t\tstring | number,\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: selData[typeof search.props?.[\"value\"] === \"string\" ? search.props[\"value\"] : \"value\"] as\n\t\t\t\t\t\t\t\t\t\t\t\t\tstring | number | boolean | object,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled: Boolean(\n\t\t\t\t\t\t\t\t\t\t\t\t\tselData[typeof search.props?.[\"disabled\"] === \"string\" ? search.props[\"disabled\"] : \"disabled\"]\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: slots[\"default\"]?.({\n\t\t\t\t\t\t\t\t\t\t\tcolumn: props.column,\n\t\t\t\t\t\t\t\t\t\t\tsearch: props.search,\n\t\t\t\t\t\t\t\t\t\t\t...getTableDefaultSlots(tableState),\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>\n\t\t\t);\n\t\t});\n\t},\n});\n","import { computed, defineComponent, inject, reactive, ref, watch } from \"vue\";\nimport { ArrowDown, ArrowUp, Eleme, Refresh, Search } from \"@element-plus/icons-vue\";\nimport { ElButton, ElIcon, useGlobalSize } from \"element-plus\";\nimport { Brush } from \"@fast-element-plus/icons-vue\";\nimport { definePropType, makeSlots, useRender, withDefineType } from \"../../../utils\";\nimport { FaDrawer } from \"../../drawer\";\nimport { FaLayoutGrid, FaLayoutGridItem } from \"../../layoutGrid\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport FaTableSearchFormItem from \"./tableSearchFormItem\";\nimport { tableStateKey } from \"./useTable\";\nimport type { FaTableColumnCtx, FaTableDefaultSlotsResult, FaTableSearchColumnCtx } from \"./table.type\";\nimport type { FaDrawerInstance } from \"../../drawer\";\nimport type { FaLayoutGridBreakPoint, FaLayoutGridInstance, FaLayoutGridItemResponsive } from \"../../layoutGrid\";\n\ntype FaTableSearchFormSlots = Record<\n\tstring,\n\tFaTableDefaultSlotsResult & {\n\t\tcolumn?: FaTableColumnCtx;\n\t\tsearch?: () => Promise<void>;\n\t}\n>;\n\nexport default defineComponent({\n\tname: \"FaTableSearchForm\",\n\tprops: {\n\t\t/** @description 显示 */\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true as const,\n\t\t},\n\t\t/** @description 折叠搜素 */\n\t\tcollapsedSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/** @description 高级搜素抽屉 */\n\t\tadvancedSearchDrawer: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/** @description Grid布局列配置 */\n\t\tcols: {\n\t\t\ttype: definePropType<string | number | Record<FaLayoutGridBreakPoint, number>>([String, Number, Object]),\n\t\t\tdefault: () => ({ xs: 1, sm: 2, md: 4, lg: 5, xl: 6 }),\n\t\t},\n\t\t/** @description 搜索 */\n\t\tsearch: {\n\t\t\ttype: definePropType<() => Promise<void>>(Function),\n\t\t\trequired: true as const,\n\t\t},\n\t\t/** @description 重置 */\n\t\treset: {\n\t\t\ttype: definePropType<() => Promise<void>>(Function),\n\t\t\trequired: true as const,\n\t\t},\n\t},\n\tslots: makeSlots<FaTableSearchFormSlots>(),\n\tsetup(props, { slots }) {\n\t\tconst _globalSize = useGlobalSize();\n\n\t\t// 获取响应式断点\n\t\tconst gridRef = ref<FaLayoutGridInstance>();\n\n\t\tconst tableState = inject(tableStateKey);\n\t\tif (tableState === undefined) throw new Error(\"FaTableSearchForm 必须在 FaTable 内部渲染。\");\n\n\t\tconst breakPoint = computed<FaLayoutGridBreakPoint>(() => gridRef.value?.breakPoint ?? \"xl\");\n\t\tconst getColumnCount = (value: FaLayoutGridBreakPoint): number => {\n\t\t\tif (typeof props.cols === \"number\") return props.cols;\n\t\t\tif (typeof props.cols === \"object\") return props.cols[value] ?? 1;\n\t\t\treturn Number(props.cols) || 1;\n\t\t};\n\n\t\tconst state = reactive({\n\t\t\trefreshing: false,\n\t\t\theight: \"auto\",\n\t\t\t/** 折叠 */\n\t\t\tcollapsed: true,\n\t\t\t/** 显示折叠 */\n\t\t\tshowCollapsed: computed(() => {\n\t\t\t\tlet show = false;\n\t\t\t\ttableState.searchColumns.reduce((prev, current) => {\n\t\t\t\t\tconst search = current.search;\n\t\t\t\t\tif (search === undefined) return prev;\n\t\t\t\t\tprev += (search[breakPoint.value]?.span ?? search.span ?? 1) + (search[breakPoint.value]?.offset ?? search.offset ?? 0);\n\t\t\t\t\tif (prev >= getColumnCount(breakPoint.value)) show = true;\n\t\t\t\t\treturn prev;\n\t\t\t\t}, 0);\n\t\t\t\treturn show;\n\t\t\t}),\n\t\t\tsearchColumns: withDefineType<FaTableColumnCtx[]>([]),\n\t\t\tadvancedSearchColumns: withDefineType<FaTableColumnCtx[]>([]),\n\t\t\tbreakPoint: 0,\n\t\t});\n\n\t\tconst faTableSearchFormRef = ref<HTMLElement>();\n\t\tconst advancedSearchRef = ref<FaDrawerInstance>();\n\n\t\t// 获取响应式设置\n\t\tconst getResponsive = (\n\t\t\titem: FaTableSearchColumnCtx\n\t\t): { span: number; offset: number } & Partial<Record<FaLayoutGridBreakPoint, FaLayoutGridItemResponsive>> => {\n\t\t\treturn {\n\t\t\t\tspan: item.span ?? 1,\n\t\t\t\toffset: item?.offset ?? 0,\n\t\t\t\txs: item?.xs,\n\t\t\t\tsm: item?.sm,\n\t\t\t\tmd: item?.md,\n\t\t\t\tlg: item?.lg,\n\t\t\t\txl: item?.xl,\n\t\t\t};\n\t\t};\n\n\t\tconst handleBreakPointChange = ({ breakPoint }: { breakPoint: FaLayoutGridBreakPoint }): void => {\n\t\t\t// 这里 -1 是排除固定的\n\t\t\tstate.breakPoint = getColumnCount(breakPoint) - 1;\n\t\t\tstate.searchColumns = tableState.searchColumns.filter((f) => f?.show).slice(0, state.breakPoint);\n\t\t\tstate.advancedSearchColumns = tableState.searchColumns.filter((f) => f?.show).slice(state.breakPoint);\n\t\t};\n\n\t\twatch(\n\t\t\t() => tableState.searchColumns,\n\t\t\t() => {\n\t\t\t\tif (state.breakPoint) {\n\t\t\t\t\tstate.searchColumns = tableState.searchColumns.filter((f) => f?.show).slice(0, state.breakPoint);\n\t\t\t\t\tstate.advancedSearchColumns = tableState.searchColumns.filter((f) => f?.show).slice(state.breakPoint);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// @ts-expect-error Element Plus 的递归 Props 在此处触发类型实例化深度限制。\n\t\tconst searchColumns = computed(() => (props.advancedSearchDrawer ? state.searchColumns : tableState.searchColumns));\n\n\t\twatch(\n\t\t\t() => props.advancedSearchDrawer,\n\t\t\t(newValue) => {\n\t\t\t\tif (newValue) {\n\t\t\t\t\t// 抽屉默认折叠\n\t\t\t\t\tstate.collapsed = true;\n\t\t\t\t} else {\n\t\t\t\t\tstate.collapsed = props.collapsedSearch;\n\t\t\t\t}\n\t\t\t\tstate.refreshing = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tstate.refreshing = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t);\n\n\t\twatch(\n\t\t\t() => props.collapsedSearch,\n\t\t\t(newValue) => {\n\t\t\t\tif (!props.collapsedSearch) {\n\t\t\t\t\tstate.collapsed = newValue;\n\t\t\t\t} else {\n\t\t\t\t\t// 抽屉默认折叠\n\t\t\t\t\tstate.collapsed = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tuseRender(() =>\n\t\t\ttableState.searchColumns.length > 0 ? (\n\t\t\t\t<div\n\t\t\t\t\tref={faTableSearchFormRef}\n\t\t\t\t\tclass={[\n\t\t\t\t\t\t\"el-card fa-table__search\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"fa-table__search-hidden\": !props.show,\n\t\t\t\t\t\t\t\"fa-table__search__disable\": tableState.loading,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<form class=\"el-form el-form--default el-form--label-right\">\n\t\t\t\t\t\t{!state.refreshing && (\n\t\t\t\t\t\t\t<FaLayoutGrid\n\t\t\t\t\t\t\t\tref={gridRef}\n\t\t\t\t\t\t\t\tcollapsed={state.collapsed}\n\t\t\t\t\t\t\t\tgap={_globalSize.value === \"small\" ? [20, 0] : [20, 10]}\n\t\t\t\t\t\t\t\tcols={props.cols}\n\t\t\t\t\t\t\t\tonBreakPointChange={handleBreakPointChange}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{searchColumns.value.map((item, index) =>\n\t\t\t\t\t\t\t\t\titem.search ? (\n\t\t\t\t\t\t\t\t\t\t<FaLayoutGridItem key={item.search.key ?? item.prop} data-index={index} {...getResponsive(item.search)}>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"el-form-item el-form-item--default el-form-item--label-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"el-form-item__label\">{item.search.label}</label>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"el-form-item__content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.search?.slot ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tslots[item.search.slot]?.({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: item,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsearch: props.search,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...getTableDefaultSlots(tableState),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FaTableSearchFormItem column={item} search={props.search} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</FaLayoutGridItem>\n\t\t\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<FaLayoutGridItem suffix>\n\t\t\t\t\t\t\t\t\t<div class=\"fa-table__search-operation\">\n\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\tloading={tableState.loading}\n\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"搜索\"\n\t\t\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\tplain\n\t\t\t\t\t\t\t\t\t\t\ticon={Refresh}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tvoid props.search();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t搜索\n\t\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\tloading={tableState.loading}\n\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"重置\"\n\t\t\t\t\t\t\t\t\t\t\ticon={Brush}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tvoid props.reset();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t重置\n\t\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t\t\t{props.advancedSearchDrawer\n\t\t\t\t\t\t\t\t\t\t\t? state.advancedSearchColumns.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading={tableState.loading}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"高级搜索\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"info\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplain\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ticon={Search}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => advancedSearchRef.value?.open()}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t高级搜索\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t: state.showCollapsed && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading={tableState.loading}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={state.collapsed ? \"展开\" : \"折叠\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.collapsed = !state.collapsed;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{state.collapsed ? \"展开\" : \"折叠\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElIcon>{state.collapsed ? <ArrowDown /> : <ArrowUp />}</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</FaLayoutGridItem>\n\t\t\t\t\t\t\t</FaLayoutGrid>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</form>\n\t\t\t\t\t{props.advancedSearchDrawer && state.advancedSearchColumns.length > 0 && (\n\t\t\t\t\t\t<FaDrawer\n\t\t\t\t\t\t\tref={advancedSearchRef}\n\t\t\t\t\t\t\tclass=\"fa-table__search-advanced\"\n\t\t\t\t\t\t\tsize=\"20%\"\n\t\t\t\t\t\t\ttitle=\"高级搜索\"\n\t\t\t\t\t\t\tappendToBody={false}\n\t\t\t\t\t\t\tshowCloseButton={false}\n\t\t\t\t\t\t\tshowConfirmButton={false}\n\t\t\t\t\t\t\tshowFullscreen={false}\n\t\t\t\t\t\t\tshowRefresh={false}\n\t\t\t\t\t\t\tonConfirmClick={() => props.search()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<form class=\"el-form el-form--default el-form--label-top\">\n\t\t\t\t\t\t\t\t<FaLayoutGrid gap={[20, 0]} cols={{ xs: 1, sm: 2, md: 4, lg: 5, xl: 6 }}>\n\t\t\t\t\t\t\t\t\t{state.advancedSearchColumns.map((item) =>\n\t\t\t\t\t\t\t\t\t\titem.search ? (\n\t\t\t\t\t\t\t\t\t\t\t<FaLayoutGridItem key={item.prop ?? item.search.key} {...getResponsive(item.search)}>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"el-form-item el-form-item--default el-form-item--label-top\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"el-form-item__label\">{item.search.label}</label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"el-form-item__content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.search.slot ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslots[item.search.slot]?.({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: item,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsearch: props.search,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...getTableDefaultSlots(tableState),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FaTableSearchFormItem column={item} search={props.search} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</FaLayoutGridItem>\n\t\t\t\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</FaLayoutGrid>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</FaDrawer>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div />\n\t\t\t)\n\t\t);\n\t},\n});\n","import { Fragment, computed, defineComponent, onActivated, onMounted, ref, watch, watchEffect } from \"vue\";\nimport { Eleme, More, Refresh, Search, Setting } from \"@element-plus/icons-vue\";\nimport {\n\tElButton,\n\tElDatePicker,\n\tElDropdown,\n\tElDropdownItem,\n\tElDropdownMenu,\n\tElIcon,\n\tElImageViewer,\n\tElInput,\n\tElPagination,\n\tElTable,\n\tElTableColumn,\n\tuseSizeProp,\n} from \"element-plus\";\nimport { NotData } from \"@fast-element-plus/icons-vue\";\nimport { isArray, isBoolean, isFunction, isNil, isNull, isNumber, isObject, isString, omit } from \"lodash-unified\";\nimport {\n\tcreateDateRangeShortcuts,\n\tcreateOneMonthRangeFromToday,\n\tdebounce,\n\tdefinePropType,\n\tmakeSlots,\n\trandomString,\n\tuseExpose,\n\tuseProps,\n\tuseRender,\n} from \"../../../utils\";\nimport { tableUtil } from \"../utils/table\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport FaTableColumn from \"./tableColumn\";\nimport FaTableColumnsSettingDialog from \"./tableColumnSettingDialog\";\nimport FaTablePagination from \"./tablePagination\";\nimport FaTableSearchForm from \"./tableSearchForm\";\nimport { useTable } from \"./useTable\";\nimport type { FaTableRow } from \"./table.state\";\nimport type { FaTableColumnCtx, FaTableDataRange, FaTableDefaultSlotsResult } from \"./table.type\";\nimport type { FaLayoutGridBreakPoint } from \"../../layoutGrid\";\nimport type { PagedInput, PagedResult, PagedSortInput } from \"../src/page.type\";\nimport type { TableColumnCtx, TableProps } from \"element-plus\";\nimport type { CSSProperties, PropType } from \"vue\";\n\ntype DefaultRow = FaTableRow;\n\ntype Layout = \"fixed\" | \"auto\";\n\n// type TreeProps = TableProps<DefaultRow>[\"treeProps\"];\n/** FaTable 树形数据的字段配置。 */\nexport interface TreeProps {\n\thasChildren?: string;\n\tchildren?: string;\n\tcheckStrictly?: boolean;\n}\n\n/** Element Plus Table 的透传 Props 定义。 */\nexport const tableProps = {\n\t/**\n\t * @description table data\n\t */\n\tdata: {\n\t\ttype: Array as PropType<DefaultRow[]>,\n\t\tdefault: (): DefaultRow[] => [],\n\t},\n\t/**\n\t * @description size of Table\n\t */\n\tsize: useSizeProp,\n\twidth: [String, Number],\n\t/**\n\t * @description table's height. By default it has an `auto` height. If its value is a number, the height is measured in pixels; if its value is a string, the value will be assigned to element's style.height, the height is affected by external styles\n\t */\n\theight: [String, Number],\n\t/**\n\t * @description table's max-height. The legal value is a number or the height in px\n\t */\n\tmaxHeight: [String, Number],\n\t/**\n\t * @description whether width of column automatically fits its container\n\t */\n\tfit: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description whether Table is striped\n\t */\n\tstripe: Boolean,\n\t/**\n\t * @description whether Table has vertical border\n\t */\n\tborder: Boolean,\n\t/**\n\t * @description key of row data, used for optimizing rendering. Required if `reserve-selection` is on or display tree data. When its type is String, multi-level access is supported, e.g. `user.info.id`, but `user.info[0].id` is not supported, in which case `Function` should be used\n\t */\n\trowKey: [String, Function] as PropType<TableProps<DefaultRow>[\"rowKey\"]>,\n\t/**\n\t * @description whether Table header is visible\n\t */\n\tshowHeader: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description whether to display a summary row\n\t */\n\tshowSummary: Boolean,\n\t/**\n\t * @description displayed text for the first column of summary row\n\t */\n\tsumText: String,\n\t/**\n\t * @description custom summary method\n\t */\n\tsummaryMethod: Function as PropType<TableProps<DefaultRow>[\"summaryMethod\"]>,\n\t/**\n\t * @description function that returns custom class names for a row, or a string assigning class names for every row\n\t */\n\trowClassName: [String, Function] as PropType<TableProps<DefaultRow>[\"rowClassName\"]>,\n\t/**\n\t * @description function that returns custom style for a row, or an object assigning custom style for every row\n\t */\n\trowStyle: [Object, Function] as PropType<TableProps<DefaultRow>[\"rowStyle\"]>,\n\t/**\n\t * @description function that returns custom class names for a cell, or a string assigning class names for every cell\n\t */\n\tcellClassName: [String, Function] as PropType<TableProps<DefaultRow>[\"cellClassName\"]>,\n\t/**\n\t * @description function that returns custom style for a cell, or an object assigning custom style for every cell\n\t */\n\tcellStyle: [Object, Function] as PropType<TableProps<DefaultRow>[\"cellStyle\"]>,\n\t/**\n\t * @description function that returns custom class names for a row in table header, or a string assigning class names for every row in table header\n\t */\n\theaderRowClassName: [String, Function] as PropType<TableProps<DefaultRow>[\"headerRowClassName\"]>,\n\t/**\n\t * @description function that returns custom style for a row in table header, or an object assigning custom style for every row in table header\n\t */\n\theaderRowStyle: [Object, Function] as PropType<TableProps<DefaultRow>[\"headerRowStyle\"]>,\n\t/**\n\t * @description function that returns custom class names for a cell in table header, or a string assigning class names for every cell in table header\n\t */\n\theaderCellClassName: [String, Function] as PropType<TableProps<DefaultRow>[\"headerCellClassName\"]>,\n\t/**\n\t * @description function that returns custom style for a cell in table header, or an object assigning custom style for every cell in table header\n\t */\n\theaderCellStyle: [Object, Function] as PropType<TableProps<DefaultRow>[\"headerCellStyle\"]>,\n\t/**\n\t * @description whether current row is highlighted\n\t */\n\thighlightCurrentRow: Boolean,\n\t/**\n\t * @description key of current row, a set only prop\n\t */\n\tcurrentRowKey: [String, Number],\n\t/**\n\t * @description displayed text when data is empty. You can customize this area with `#empty`\n\t */\n\temptyText: String,\n\t/**\n\t * @description set expanded rows by this prop, prop's value is the keys of expand rows, you should set row-key before using this prop\n\t */\n\texpandRowKeys: Array as PropType<TableProps<DefaultRow>[\"expandRowKeys\"]>,\n\t/** @description controls whether a row can be expanded */\n\trowExpandable: Function as PropType<TableProps<DefaultRow>[\"rowExpandable\"]>,\n\t/**\n\t * @description whether expand all rows by default, works when the table has a column type=\"expand\" or contains tree structure data\n\t */\n\tdefaultExpandAll: Boolean,\n\t/**\n\t * @description set the default sort column and order. property `prop` is used to set default sort column, property `order` is used to set default sort order\n\t */\n\tdefaultSort: Object as PropType<TableProps<DefaultRow>[\"defaultSort\"]>,\n\t/**\n\t * @description the `effect` of the overflow tooltip\n\t */\n\ttooltipEffect: String,\n\t/**\n\t * @description the options for the overflow tooltip, [see the following tooltip component](tooltip.html#attributes)\n\t */\n\ttooltipOptions: Object as PropType<TableProps<DefaultRow>[\"tooltipOptions\"]>,\n\t/**\n\t * @description method that returns rowspan and colspan\n\t */\n\tspanMethod: Function as PropType<TableProps<DefaultRow>[\"spanMethod\"]>,\n\t/**\n\t * @description controls the behavior of master checkbox in multi-select tables when only some rows are selected (but not all). If true, all rows will be selected, else deselected\n\t */\n\tselectOnIndeterminate: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description horizontal indentation of tree data\n\t */\n\tindent: {\n\t\ttype: Number,\n\t\tdefault: 16,\n\t},\n\t/**\n\t * @description configuration for rendering nested data\n\t */\n\ttreeProps: {\n\t\ttype: Object as PropType<TreeProps>,\n\t\tdefault: (): TreeProps => ({\n\t\t\thasChildren: \"hasChildren\",\n\t\t\tchildren: \"children\",\n\t\t\tcheckStrictly: false,\n\t\t}),\n\t},\n\t/**\n\t * @description whether to lazy loading data\n\t */\n\tlazy: Boolean,\n\t/**\n\t * @description method for loading child row data, only works when `lazy` is true\n\t */\n\tload: Function as PropType<TableProps<DefaultRow>[\"load\"]>,\n\tstyle: {\n\t\ttype: Object as PropType<CSSProperties>,\n\t\tdefault: (): CSSProperties => ({}),\n\t},\n\tclassName: {\n\t\ttype: String,\n\t\tdefault: \"\",\n\t},\n\t/**\n\t * @description sets the algorithm used to lay out table cells, rows, and columns\n\t */\n\ttableLayout: {\n\t\ttype: String as PropType<Layout>,\n\t\tdefault: \"fixed\",\n\t},\n\t/**\n\t * @description always show scrollbar\n\t */\n\tscrollbarAlwaysOn: Boolean,\n\t/**\n\t * @description ensure main axis minimum-size doesn't follow the content\n\t */\n\tflexible: Boolean,\n\t/**\n\t * @description whether to hide extra content and show them in a tooltip when hovering on the cell.It will affect all the table columns\n\t */\n\tshowOverflowTooltip: [Boolean, Object] as PropType<TableProps<DefaultRow>[\"showOverflowTooltip\"]>,\n\t/** @description formats overflow tooltip content */\n\ttooltipFormatter: Function as PropType<TableProps<DefaultRow>[\"tooltipFormatter\"]>,\n\t/** @description element to which the filter panel is appended */\n\tappendFilterPanelTo: String,\n\tscrollbarTabindex: {\n\t\ttype: [Number, String],\n\t\tdefault: undefined,\n\t},\n\t/** @description whether the last column can be resized */\n\tallowDragLastColumn: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether collapsed expanded-row content remains mounted */\n\tpreserveExpandedContent: Boolean,\n\t/** @description whether to use native scrollbars */\n\tnativeScrollbar: Boolean,\n};\n\n/** FaTable 的运行时 Props 定义。 */\nexport const faTableProps = {\n\t...tableProps,\n\t/** @description whether Table has vertical border */\n\tborder: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether current row is highlighted */\n\thighlightCurrentRow: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description key of row data, used for optimizing rendering. Required if `reserve-selection` is on or display tree data. When its type is String, multi-level access is supported, e.g. `user.info.id`, but `user.info[0].id` is not supported, in which case `Function` should be used */\n\trowKey: {\n\t\ttype: [String, Function] as PropType<TableProps<DefaultRow>[\"rowKey\"]>,\n\t\tdefault: \"id\",\n\t},\n\t/** @description 组件封装,原生的已经失效 method that returns rowspan and colspan */\n\tspanMethod: {\n\t\ttype: Function as PropType<TableProps<DefaultRow>[\"spanMethod\"]>,\n\t\tvalidator: (): boolean => {\n\t\t\tconsole.warn(\"[Fast:FaTable]\", \"'spanMethod' 属性,组件已经封装,外部使用会失效。\");\n\t\t\treturn false;\n\t\t},\n\t},\n\t/** @description 表格Key */\n\ttableKey: {\n\t\ttype: String,\n\t\tdefault: (): string => randomString(8),\n\t},\n\t/** @description 表格数据 */\n\tdata: {\n\t\ttype: definePropType<DefaultRow[]>(Array),\n\t\tdefault: (): DefaultRow[] => [],\n\t},\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: PagedInput) => Promise<PagedResult<DefaultRow> | DefaultRow[]>>(Function),\n\t},\n\t/** @description 接口请求数据回调 */\n\tdataCallback: {\n\t\ttype: definePropType<(data: unknown) => void>(Function),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n\t/** @description 列配置 */\n\tcolumns: {\n\t\ttype: definePropType<FaTableColumnCtx[] | false>([Array, Boolean]),\n\t\tdefault: (): FaTableColumnCtx[] | false => false,\n\t},\n\t/** @description 表格列改变 */\n\tcolumnsChange: {\n\t\ttype: definePropType<(columns: FaTableColumnCtx[]) => Promise<void>>(Function),\n\t},\n\t/** @description 搜索表单 Grid布局列配置 */\n\tsearchFormCols: {\n\t\ttype: definePropType<string | number | Record<FaLayoutGridBreakPoint, number>>([String, Number, Object]),\n\t\tdefault: (): string | number | Record<FaLayoutGridBreakPoint, number> => ({ xs: 1, sm: 2, md: 4, lg: 5, xl: 6 }),\n\t},\n\t/** @description 折叠搜素 */\n\tcollapsedSearch: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 高级搜素抽屉 */\n\tadvancedSearchDrawer: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\t/** @description 搜索表单 */\n\tsearchForm: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 头部卡片 */\n\theaderCard: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 刷新按钮 */\n\trefreshBtn: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 搜索按钮 */\n\tsearchBtn: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 列配置按钮 */\n\tcolumnSettingBtn: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\t/** @description 头部卡片右侧功能按钮 */\n\ttoolBtn: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 隐藏搜索时间 */\n\thideSearchTime: Boolean,\n\t/** @description 未来搜索时间 */\n\tfutureSearchTime: Boolean,\n\t/** @description 搜索时间范围 */\n\tdataSearchRange: {\n\t\ttype: definePropType<FaTableDataRange>(String),\n\t\tdefault: \"Past3D\",\n\t},\n\t/** @description 分页 */\n\tpagination: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 页码 */\n\tpageSizes: {\n\t\ttype: definePropType<number[]>(Array),\n\t\tdefault: [20, 30, 50, 100],\n\t},\n\t/** @description 隐藏图片 */\n\thideImage: Boolean,\n\t/** @description 单选 */\n\tsingle: Boolean,\n\t/** @description 行点击选择 */\n\trowClickSelection: Boolean,\n\t/** @description 将父级数据的 children 展开为表格行,并把父级字段合并到子项;Element Plus 树表无需启用 */\n\ttreeData: Boolean,\n\t/** @description 配置选项 */\n\tprops: {\n\t\ttype: definePropType<{ span?: string; children?: string }>(Object),\n\t\tdefault: (): { span?: string; children?: string } => ({\n\t\t\tspan: undefined,\n\t\t\tchildren: \"children\",\n\t\t}),\n\t},\n\t/** @description 自动刷新,当传入 data 时候,如果存在更改则自动刷新 */\n\tautoRefresh: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * 等价于 Table-Column 的 selectable\n\t * @description function that determines if a certain row can be selected, works when `type` is 'selection'\n\t */\n\trowSelectable: Function as PropType<TableColumnCtx<DefaultRow>[\"selectable\"]>,\n};\n\n/** FaTable 的运行时 Emits 定义。 */\nexport const faTableEmits = {\n\t/** @description 当用户手动勾选数据行的 Checkbox 时触发的事件 */\n\tselect: (selection: DefaultRow[], row: DefaultRow): boolean => isArray(selection) && isObject(row),\n\t/** @description 当用户手动勾选全选 Checkbox 时触发的事件 */\n\tselectAll: (selection: DefaultRow[]): boolean => isArray(selection),\n\t/** @description 当选择项发生变化时会触发该事件 */\n\tselectionChange: (newSelection: DefaultRow[]): boolean => isArray(newSelection),\n\t/** @description 当单元格 hover 进入时会触发该事件 */\n\tcellMouseEnter: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && cell instanceof HTMLTableCellElement && event instanceof Event,\n\t/** @description 当单元格 hover 退出时会触发该事件 */\n\tcellMouseLeave: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && cell instanceof HTMLTableCellElement && event instanceof Event,\n\t/** @description 当某个单元格被点击时会触发该事件 */\n\tcellClick: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && cell instanceof HTMLTableCellElement && event instanceof Event,\n\t/** @description 当某个单元格被双击击时会触发该事件 */\n\tcellDblclick: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && cell instanceof HTMLTableCellElement && event instanceof Event,\n\t/** @description 当某个单元格被鼠标右键点击时会触发该事件 */\n\tcellContextmenu: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && cell instanceof HTMLTableCellElement && event instanceof Event,\n\t/** @description 当某一行被点击时会触发该事件 */\n\trowClick: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && event instanceof Event,\n\t/** @description 当某一行被鼠标右键点击时会触发该事件 */\n\trowContextmenu: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && event instanceof Event,\n\t/** @description 当某一行被双击时会触发该事件 */\n\trowDblclick: (row: DefaultRow, column: TableColumnCtx<DefaultRow>, event: Event): boolean =>\n\t\tisObject(row) && isObject(column) && event instanceof Event,\n\t/** @description 当某一列的表头被点击时会触发该事件 */\n\theaderClick: (column: TableColumnCtx<DefaultRow>, event: Event): boolean => isObject(column) && event instanceof Event,\n\t/** @description 当某一列的表头被鼠标右键点击时触发该事件 */\n\theaderContextmenu: (column: TableColumnCtx<DefaultRow>, event: Event): boolean => isObject(column) && event instanceof Event,\n\t/** @description 当表格的排序条件发生变化的时候会触发该事件 */\n\tsortChange: (data: { column: TableColumnCtx<DefaultRow>; prop: string; order: \"\" | \"ascending\" | \"descending\" }): boolean => isObject(data),\n\t/** @description column 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件 */\n\tfilterChange: (newFilters: unknown): boolean => isString(newFilters) || isNumber(newFilters) || isBoolean(newFilters) || isObject(newFilters),\n\t/** @description 当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight-current-row 属性 */\n\tcurrentChange: (currentRow: DefaultRow, oldCurrentRow: DefaultRow | null): boolean =>\n\t\tisObject(currentRow) && (isNull(oldCurrentRow) || isObject(oldCurrentRow)),\n\t/** @description 当拖动表头改变了列的宽度的时候会触发该事件 */\n\theaderDragend: (newWidth: number, oldWidth: number, column: TableColumnCtx<DefaultRow>, event: MouseEvent): boolean =>\n\t\tisNumber(newWidth) && isNumber(oldWidth) && isObject(column) && event instanceof MouseEvent,\n\t/** @description 当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded) */\n\texpandChange: (row: DefaultRow, expanded: boolean | DefaultRow[]): boolean => isObject(row) && (isBoolean(expanded) || isArray(expanded)),\n\t/** @description 表格滚动时触发 */\n\tscroll: (data: { scrollLeft: number; scrollTop: number }): boolean => isObject(data),\n\n\t/** @description 表格刷新事件 */\n\trefresh: (params: PagedInput): boolean => isObject(params),\n\t/** @description 表格重置事件 */\n\treset: (params: PagedInput): boolean => isObject(params),\n\t/** @description 分页页码改变事件 */\n\tsizeChange: (pageSize: number): boolean => isNumber(pageSize),\n\t/** @description 分页改变事件 */\n\tpaginationChange: (pageIndex: number, pageSize: number): boolean => isNumber(pageIndex) && isNumber(pageSize),\n\t/** @description 自定义单元格点击事件 */\n\tcustomCellClick: (\n\t\temitName: string,\n\t\t{ row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number } & FaTableDefaultSlotsResult\n\t): boolean => (isNil(emitName) || isString(emitName)) && isObject(row) && isObject(column) && isNumber($index),\n};\n\n/** FaTable 的插槽参数。 */\nexport type FaTableSlots = Record<string, unknown> & {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n\t/** @description 插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。 */\n\tappend: never;\n\t/** @description 当数据为空时自定义的内容 */\n\tempty: never;\n\t/** @description 表格顶部插槽 */\n\ttopHeader: FaTableDefaultSlotsResult;\n\t/** @description 表格头部左侧插槽 */\n\theader: FaTableDefaultSlotsResult;\n\t/** @description 表格头部右侧功能按钮插槽 */\n\ttoolButton: FaTableDefaultSlotsResult;\n\t/** @description 表格头部右侧高级操作按钮插槽,ElDropdownMenuItem 标签 */\n\ttoolButtonAdv: FaTableDefaultSlotsResult;\n\t/** @description 表格操作列插槽 */\n\toperation: FaTableDefaultSlotsResult & {\n\t\trow: DefaultRow;\n\t\tcolumn: FaTableColumnCtx;\n\t\t$index: number;\n\t};\n\t/** @description 表格分页插槽 */\n\tpagination: {\n\t\tpageIndex: number;\n\t\tpageSize: number;\n\t\ttotalRows: number;\n\t\thandleSizeChange: (val: number) => void;\n\t\thandlePaginationChange: (val: number) => void;\n\t};\n\t/** @description 表格页脚插槽 */\n\tfooter: FaTableDefaultSlotsResult;\n\t/** @description 列配置 */\n\tcolumnSetting: never;\n} & Record<\n\t\tstring,\n\t\tFaTableDefaultSlotsResult & {\n\t\t\t/** @description slots为表格内容的时候才会返回 */\n\t\t\trow?: DefaultRow;\n\t\t\t/** @description slot为表头内容的时候返回 'TableColumnCtx<any>' 否则返回 'FaTableColumnCtx' */\n\t\t\tcolumn?: TableColumnCtx<DefaultRow> | FaTableColumnCtx;\n\t\t\t/** @description slot为非搜索项的时候才会返回 */\n\t\t\t$index?: number;\n\t\t\t/** @description slot为搜索项的时候才会返回 */\n\t\t\tsearch?: () => Promise<void>;\n\t\t}\n\t>;\n\nexport default defineComponent({\n\tname: \"FaTable\",\n\tprops: faTableProps,\n\temits: faTableEmits,\n\tslots: makeSlots<FaTableSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst {\n\t\t\t_globalSize,\n\t\t\tstate,\n\t\t\telementRef,\n\t\t\ttableRef,\n\t\t\thandleTableColumnAutoWidth,\n\t\t\tloadTableColumns,\n\t\t\thandleSizeChange,\n\t\t\thandlePaginationChange,\n\t\t\tdefaultSearchTime,\n\t\t\ttableSearch,\n\t\t\ttableReset,\n\t\t\tdoRender,\n\t\t\tdoLoading,\n\t\t\thandleCustomCellClick,\n\t\t} = useTable(props, slots, emit);\n\t\tconst notifyColumnsChange = debounce(() => props.columnsChange?.(state.orgColumns), 500);\n\t\tconst resizeTableColumns = debounce(handleTableColumnAutoWidth, 100);\n\n\t\tconst columnSettingRef = ref<InstanceType<typeof FaTableColumnsSettingDialog>>();\n\t\tlet lastRowIndex = 0;\n\t\tconst getInitParam = (): Record<string, unknown> =>\n\t\t\ttypeof props.initParam === \"object\" && props.initParam !== null ? (props.initParam as Record<string, unknown>) : {};\n\t\tconst getRowKey = (row: DefaultRow): string | number | undefined => {\n\t\t\tconst value = isFunction(props.rowKey) ? props.rowKey(row) : tableUtil.handleRowAccordingToProp(row, props.rowKey);\n\t\t\treturn typeof value === \"string\" || typeof value === \"number\" ? value : undefined;\n\t\t};\n\n\t\tconst indexMethod = (index: number): number => {\n\t\t\tif (index === 0) {\n\t\t\t\tlastRowIndex = 0;\n\t\t\t}\n\t\t\tif (state.spanColumns?.length > 0) {\n\t\t\t\tconst rowspan = Number(state.tableSpanData[\"__table-index\"]?.[index] ?? 0);\n\t\t\t\tif (rowspan === 0) {\n\t\t\t\t\treturn lastRowIndex + (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize + 1;\n\t\t\t\t} else {\n\t\t\t\t\tlastRowIndex++;\n\t\t\t\t\treturn lastRowIndex + (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn index + (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize + 1;\n\t\t};\n\n\t\tconst handleSelect = (selection: DefaultRow[], row: DefaultRow): void => {\n\t\t\t// 判断是否开启了单选\n\t\t\tif (props.single) {\n\t\t\t\ttableRef.value?.clearSelection();\n\t\t\t\tif (selection.length > 0 && row) {\n\t\t\t\t\ttableRef.value?.toggleRowSelection(row);\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"select\", selection, row);\n\t\t};\n\n\t\tconst handleSelectAll = (selection: DefaultRow[]): void => {\n\t\t\tif (props.single) {\n\t\t\t\t// 判断是否已经选中数据\n\t\t\t\tif (state.selected) {\n\t\t\t\t\t// 默认选中的第一行\n\t\t\t\t\tif (state.tableData.length > 0) {\n\t\t\t\t\t\ttableRef.value?.clearSelection();\n\t\t\t\t\t\tconst firstRow = state.tableData[0];\n\t\t\t\t\t\tif (firstRow) tableRef.value?.toggleRowSelection(firstRow);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttableRef.value?.clearSelection();\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"selectAll\", selection);\n\t\t};\n\n\t\tconst handleSelectionChange = (newSelection: DefaultRow[]): void => {\n\t\t\tnewSelection.length === 0 ? (state.selected = false) : (state.selected = true);\n\t\t\t// 判断是否为单选\n\t\t\tif (props.single && newSelection.length > 0) {\n\t\t\t\t// 这里获取最后一个是因为选中改变的事件会触发多次,会带入旧的数据\n\t\t\t\tconst lastSelection = newSelection.at(-1);\n\t\t\t\tstate.selectedList = lastSelection === undefined ? [] : [lastSelection];\n\t\t\t} else {\n\t\t\t\tstate.selectedList = newSelection;\n\t\t\t}\n\t\t\t// 如果已经取消选择了,那么部分选择也应该要取消\n\t\t\tstate.indeterminateSelectedListIds = state.indeterminateSelectedListIds.filter((f) => state.selectedListIds.some((s) => s === f));\n\t\t\temit(\"selectionChange\", state.selectedList);\n\t\t};\n\n\t\tconst toggleRowIndeterminateSelection = (row: DefaultRow, selected?: boolean): void => {\n\t\t\tconst rowKey = getRowKey(row);\n\t\t\tif (rowKey === undefined) return;\n\t\t\tconst curRow = state.tableData.find((item) => getRowKey(item) === rowKey);\n\t\t\tif (selected === true) {\n\t\t\t\tif (!state.indeterminateSelectedListIds.some((s) => s === rowKey)) {\n\t\t\t\t\tstate.indeterminateSelectedListIds.push(rowKey);\n\t\t\t\t}\n\t\t\t\tif (curRow) tableRef.value?.toggleRowSelection(curRow, true);\n\t\t\t} else if (selected === false) {\n\t\t\t\tconst fIndex = state.indeterminateSelectedListIds.findIndex((f) => f === rowKey);\n\t\t\t\tif (fIndex >= 0) {\n\t\t\t\t\tstate.indeterminateSelectedListIds.splice(fIndex, 1);\n\t\t\t\t}\n\t\t\t\tif (curRow) tableRef.value?.toggleRowSelection(curRow, false);\n\t\t\t} else {\n\t\t\t\tconst fIndex = state.indeterminateSelectedListIds.findIndex((f) => f === rowKey);\n\t\t\t\tif (fIndex >= 0) {\n\t\t\t\t\tstate.indeterminateSelectedListIds.splice(fIndex, 1);\n\t\t\t\t} else {\n\t\t\t\t\tstate.indeterminateSelectedListIds.push(rowKey);\n\t\t\t\t}\n\t\t\t\tif (curRow) tableRef.value?.toggleRowSelection(curRow);\n\t\t\t}\n\t\t};\n\n\t\tconst handleSortChange = ({\n\t\t\tcolumn,\n\t\t\tprop,\n\t\t}: {\n\t\t\tcolumn: TableColumnCtx<DefaultRow> & { multiOrder?: \"\" | \"ascending\" | \"descending\" };\n\t\t\tprop: string | null;\n\t\t\torder: \"\" | \"ascending\" | \"descending\" | null;\n\t\t}): void => {\n\t\t\tconst normalizedProp = prop ?? column.property;\n\t\t\tif (!column.multiOrder) {\n\t\t\t\tcolumn.multiOrder = \"descending\";\n\t\t\t} else if (column.multiOrder === \"descending\") {\n\t\t\t\tcolumn.multiOrder = \"ascending\";\n\t\t\t} else {\n\t\t\t\tcolumn.multiOrder = undefined;\n\t\t\t}\n\t\t\t// 排序集合非空判断\n\t\t\tconst initSortList = getInitParam()[\"sortList\"];\n\t\t\tstate.searchParam.sortList = [\n\t\t\t\t...(isArray(initSortList) ? (initSortList as PagedSortInput[]) : []),\n\t\t\t\t...(state.searchParam.sortList ?? []),\n\t\t\t].filter((item, index, list) => list.findIndex((candidate) => candidate.enField === item.enField) === index);\n\n\t\t\t// 去原来的列中查找表格的列数据\n\t\t\tconst orgColumn = state.orgColumns.find((f) => f.prop === normalizedProp);\n\t\t\tconst enField = orgColumn?.sortableField ?? orgColumn?.prop ?? column.property;\n\t\t\tconst fieldIndex = state.searchParam.sortList.findIndex((f: PagedSortInput) => f.enField === enField);\n\t\t\tif (!column.multiOrder && fieldIndex >= 0) {\n\t\t\t\t// 如果是空的,删除排序\n\t\t\t\tstate.searchParam.sortList.splice(fieldIndex, 1);\n\t\t\t} else if (fieldIndex === -1) {\n\t\t\t\tstate.searchParam.sortList.push({\n\t\t\t\t\tenField,\n\t\t\t\t\tcnField: column.label,\n\t\t\t\t\tmode: column.multiOrder,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst sortItem = state.searchParam.sortList[fieldIndex];\n\t\t\t\tif (sortItem) sortItem.mode = column.multiOrder;\n\t\t\t}\n\t\t\t// 判断最后的排序集合中是否还存在数据,如果不存在,则删除排序集合\n\t\t\tif (state.searchParam.sortList.length === 0) {\n\t\t\t\tdelete state.searchParam.sortList;\n\t\t\t}\n\t\t\temit(\"sortChange\", { column, prop: normalizedProp, order: column.multiOrder ?? \"\" });\n\t\t\tvoid tableSearch();\n\t\t};\n\n\t\tconst handleCurrentChange = (currentRow: DefaultRow | null, oldCurrentRow: DefaultRow | null): void => {\n\t\t\tif (!currentRow) {\n\t\t\t\t// 这里为空的时候,会导致 Header 中的不确定状态还是true的状态\n\t\t\t\t// tableRef.value.clearSelection();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (props.rowClickSelection) {\n\t\t\t\t// 判断是否为单选\n\t\t\t\tif (props.single && oldCurrentRow) {\n\t\t\t\t\ttableRef.value?.toggleRowSelection(oldCurrentRow);\n\t\t\t\t}\n\t\t\t\ttableRef.value?.toggleRowSelection(currentRow);\n\t\t\t}\n\t\t\temit(\"currentChange\", currentRow, oldCurrentRow);\n\t\t};\n\n\t\tconst handleCellClassName = ({\n\t\t\trow,\n\t\t\tcolumn,\n\t\t\trowIndex,\n\t\t\tcolumnIndex,\n\t\t}: {\n\t\t\trow: DefaultRow;\n\t\t\tcolumn: TableColumnCtx<DefaultRow>;\n\t\t\trowIndex: number;\n\t\t\tcolumnIndex: number;\n\t\t}): string => {\n\t\t\tlet localCellClassName = \"\";\n\t\t\t// 判断是否为选择列\n\t\t\tif (column.type === \"selection\") {\n\t\t\t\t// 判断是否在部分选中的集合中\n\t\t\t\tconst rowKey = getRowKey(row);\n\t\t\t\tif (state.indeterminateSelectedListIds.some((s) => s === rowKey)) {\n\t\t\t\t\tlocalCellClassName = \"fa-table__selection-column__indeterminate\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst columnInfo = state.tableColumns.find((f) => f.prop === column.property);\n\t\t\tif (columnInfo?.dataDeleteField) {\n\t\t\t\tif (row?.[columnInfo.dataDeleteField] === true) {\n\t\t\t\t\tif (localCellClassName) {\n\t\t\t\t\t\tlocalCellClassName += \" fa-table__data-delete-column\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocalCellClassName = \"fa-table__data-delete-column\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (props.cellClassName) {\n\t\t\t\tconst cellClassName = isString(props.cellClassName)\n\t\t\t\t\t? props.cellClassName\n\t\t\t\t\t: props.cellClassName({ row, column, rowIndex, columnIndex });\n\t\t\t\tif (!cellClassName) {\n\t\t\t\t\treturn localCellClassName;\n\t\t\t\t}\n\t\t\t\tif (localCellClassName) {\n\t\t\t\t\treturn `${localCellClassName} ${cellClassName}`;\n\t\t\t\t} else {\n\t\t\t\t\treturn cellClassName;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn localCellClassName;\n\t\t\t}\n\t\t};\n\n\t\tconst handleHeaderCellClassName = ({\n\t\t\trow,\n\t\t\tcolumn,\n\t\t\trowIndex,\n\t\t\tcolumnIndex,\n\t\t}: {\n\t\t\trow: DefaultRow;\n\t\t\tcolumn: TableColumnCtx<DefaultRow> & { multiOrder?: \"\" | \"ascending\" | \"descending\" };\n\t\t\trowIndex: number;\n\t\t\tcolumnIndex: number;\n\t\t}): string => {\n\t\t\t// TODO:不晓得这里有无问题,EL 更新了还未测试\n\t\t\tcolumn.order = column.multiOrder === \"ascending\" || column.multiOrder === \"descending\" ? column.multiOrder : null;\n\t\t\tif (props.headerCellClassName) {\n\t\t\t\tif (isFunction(props.headerCellClassName)) {\n\t\t\t\t\treturn props.headerCellClassName({ row, column, rowIndex, columnIndex });\n\t\t\t\t} else {\n\t\t\t\t\treturn props.headerCellClassName;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t};\n\n\t\tconst handleSpanMethod = ({\n\t\t\tcolumn,\n\t\t\trowIndex,\n\t\t}: {\n\t\t\trow: DefaultRow;\n\t\t\tcolumn: TableColumnCtx<DefaultRow>;\n\t\t\trowIndex: number;\n\t\t\tcolumnIndex: number;\n\t\t}): number[] | { rowspan: number; colspan: number } => {\n\t\t\t/** @description 原生的 span-method 会失效 */\n\t\t\tconst pKey = column.property ?? column.columnKey;\n\t\t\tif (state.spanColumns.findIndex((f) => f.prop === pKey) !== -1) {\n\t\t\t\tconst rowspan = Number(state.tableSpanData[pKey]?.[rowIndex] ?? 0);\n\t\t\t\tif (rowspan > 0) {\n\t\t\t\t\treturn { rowspan, colspan: 1 };\n\t\t\t\t}\n\t\t\t\treturn { rowspan: 0, colspan: 0 };\n\t\t\t}\n\t\t\treturn { rowspan: 1, colspan: 1 };\n\t\t};\n\n\t\tconst handleHeaderDragend = (newWidth: number, oldWidth: number, column: TableColumnCtx<DefaultRow>, event: MouseEvent): void => {\n\t\t\tstate.orgColumns.forEach((f) => {\n\t\t\t\tif (column.property === f.prop) {\n\t\t\t\t\tf.width = newWidth;\n\t\t\t\t\tf.smallWidth = newWidth;\n\t\t\t\t}\n\t\t\t});\n\t\t\temit(\"headerDragend\", newWidth, oldWidth, column, event);\n\t\t\tif (props.columnsChange) void notifyColumnsChange();\n\t\t};\n\n\t\tconst handleImagePreview = (url: string): void => {\n\t\t\tstate.previewList = [url];\n\t\t\tstate.imagePreview = true;\n\t\t};\n\n\t\tonMounted(async () => {\n\t\t\tstate.initParam = getInitParam();\n\t\t\tdefaultSearchTime();\n\t\t\t// 初始化搜索表单的时候,如果有默认搜索参数,则重置默认的搜索参数\n\t\t\tObject.entries(getInitParam()).forEach(([key, value]) => {\n\t\t\t\tstate.searchParam[key] = value;\n\t\t\t});\n\t\t\tawait tableSearch();\n\n\t\t\twatch(\n\t\t\t\t() => props.columns,\n\t\t\t\t() => {\n\t\t\t\t\tloadTableColumns();\n\t\t\t\t},\n\t\t\t\t{ deep: true, immediate: true }\n\t\t\t);\n\n\t\t\twatch(\n\t\t\t\t() => props.initParam,\n\t\t\t\t() => {\n\t\t\t\t\t// 如果初始化参数改变了,则需要改变对应的搜索参数\n\t\t\t\t\tObject.entries(getInitParam()).forEach(([key, value]) => {\n\t\t\t\t\t\tstate.searchParam[key] = value;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ deep: true }\n\t\t\t);\n\n\t\t\twatch(\n\t\t\t\t() => props.data,\n\t\t\t\t() => {\n\t\t\t\t\tif (!props.requestApi && props.autoRefresh) {\n\t\t\t\t\t\treturn tableSearch();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ deep: true, immediate: true }\n\t\t\t);\n\n\t\t\twatchEffect(() => {\n\t\t\t\tconst element = elementRef.value;\n\t\t\t\tif (element) {\n\t\t\t\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\tconst { width, height } = entry.contentRect;\n\t\t\t\t\t\t\tstate.tableWidth = width;\n\t\t\t\t\t\t\tstate.tableHeight = height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvoid resizeTableColumns();\n\t\t\t\t\t});\n\t\t\t\t\tobserver.observe(element);\n\n\t\t\t\t\treturn (): void => {\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tonActivated(() => {\n\t\t\t// 解决 keep-alive 后自动列宽失效的问题\n\t\t\tvoid handleTableColumnAutoWidth();\n\t\t});\n\n\t\tconst tableColumnOmitNames = [\"multiOrder\", \"columnId\", \"order\", \"sortableField\", \"disabledSortable\", \"spanProp\", \"pureSearch\", \"search\"];\n\t\tconst searchInputClearable = computed(() => {\n\t\t\tconst value = state.searchParam.searchValue;\n\t\t\treturn (value !== undefined && value !== null && value !== \"\") || state.searchValueUpdate.length > 0;\n\t\t});\n\n\t\tconst elTableProps = useProps(props, tableProps, [\"data\", \"spanMethod\", \"headerCellClassName\", \"cellClassName\"]);\n\n\t\tuseRender(() => (\n\t\t\t<div\n\t\t\t\tref={elementRef}\n\t\t\t\tclass={[\n\t\t\t\t\t\"fa-table\",\n\t\t\t\t\t`fa-table-${_globalSize.value}`,\n\t\t\t\t\t`fa-table__${props.tableKey ?? \"notFound\"}`,\n\t\t\t\t\t{ fa__click__disabled: state.loading },\n\t\t\t\t]}\n\t\t\t\tstyle={{\n\t\t\t\t\t\"--fa-table-width\": `${state.tableWidth ? `${state.tableWidth}px` : \"\"}`,\n\t\t\t\t\t\"--fa-table-height\": `${state.tableHeight ? `${state.tableHeight}px` : \"\"}`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<FaTableSearchForm\n\t\t\t\t\tvSlots={slots}\n\t\t\t\t\tshow={props.searchForm && state.searchForm}\n\t\t\t\t\tcollapsedSearch={props.collapsedSearch}\n\t\t\t\t\tadvancedSearchDrawer={props.advancedSearchDrawer}\n\t\t\t\t\tcols={props.searchFormCols}\n\t\t\t\t\tsearch={tableSearch}\n\t\t\t\t\treset={tableReset}\n\t\t\t\t/>\n\t\t\t\t{slots.topHeader && (\n\t\t\t\t\t<div class=\"el-card fa-table__header\">{slots.topHeader({ ...{ search: tableSearch }, ...getTableDefaultSlots(state) })}</div>\n\t\t\t\t)}\n\t\t\t\t<div class=\"el-card fa-table__main\">\n\t\t\t\t\t{props.headerCard && (\n\t\t\t\t\t\t<div class=\"fa-table__main-header\">\n\t\t\t\t\t\t\t<div class=\"fa-table__main-header-left\">\n\t\t\t\t\t\t\t\t{slots.header?.({ ...{ search: tableSearch }, ...getTableDefaultSlots(state) })}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"fa-table__main-header-right\">\n\t\t\t\t\t\t\t\t{props.toolBtn && (\n\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t<div class=\"fa-table__main-header-right__div-search\">\n\t\t\t\t\t\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"fa-table__main-header-right__input-search\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={state.loading}\n\t\t\t\t\t\t\t\t\t\t\t\tprefixIcon={Search}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"关键字搜索\"\n\t\t\t\t\t\t\t\t\t\t\t\tvModel_trim={state.searchParam.searchValue}\n\t\t\t\t\t\t\t\t\t\t\t\tclearable={searchInputClearable.value}\n\t\t\t\t\t\t\t\t\t\t\t\tonCompositionupdate={(e: CompositionEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.searchValueUpdate = e.data;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tonCompositionend={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.searchValueUpdate = \"\";\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoid tableSearch();\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"fa-table__main-header-right__div-search__hidden\">\n\t\t\t\t\t\t\t\t\t\t\t\t{state.searchParam.searchValue}\n\t\t\t\t\t\t\t\t\t\t\t\t{state.searchValueUpdate}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{props.requestApi && !props.hideSearchTime && (\n\t\t\t\t\t\t\t\t\t\t\t<ElDatePicker\n\t\t\t\t\t\t\t\t\t\t\t\t{...{\n\t\t\t\t\t\t\t\t\t\t\t\t\t// ElDatePicker 的 JSX 类型未声明 change 事件,运行时由内部 Picker 触发。\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvoid tableSearch();\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"fa-table__main-header-right__data-search\"\n\t\t\t\t\t\t\t\t\t\t\t\tpopperClass=\"fa-table__main-header-right__data-search__popper\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={state.loading}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"daterange\"\n\t\t\t\t\t\t\t\t\t\t\t\tvModel={state.searchParam.searchTimeList}\n\t\t\t\t\t\t\t\t\t\t\t\tdefaultTime={createOneMonthRangeFromToday(props.futureSearchTime)}\n\t\t\t\t\t\t\t\t\t\t\t\tshortcuts={createDateRangeShortcuts(props.futureSearchTime)}\n\t\t\t\t\t\t\t\t\t\t\t\tvalueFormat=\"YYYY-MM-DD HH:mm:ss\"\n\t\t\t\t\t\t\t\t\t\t\t\tclearable={false}\n\t\t\t\t\t\t\t\t\t\t\t\tunlinkPanels\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{props.refreshBtn && (\n\t\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\t\tloading={state.loading}\n\t\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"刷新\"\n\t\t\t\t\t\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t\t\t\t\t\t\ticon={Refresh}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoid tableSearch();\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{props.searchBtn && state.searchColumns.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\t\tloading={state.loading}\n\t\t\t\t\t\t\t\t\t\t\t\tloadingIcon={Eleme}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={state.searchForm ? \"隐藏搜索栏\" : \"显示搜索栏\"}\n\t\t\t\t\t\t\t\t\t\t\t\tcircle\n\t\t\t\t\t\t\t\t\t\t\t\ticon={Search}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => (state.searchForm = !state.searchForm)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{props.columnSettingBtn && props.columns && (\n\t\t\t\t\t\t\t\t\t\t\t<ElDropdown title=\"表格列配置\" trigger=\"click\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\tdefault: () => <ElButton loading={state.loading} loadingIcon={Eleme} circle icon={Setting} />,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdropdown: () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElDropdownMenu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{slots.columnSetting?.()}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElDropdownItem title=\"表格列配置\" divided onClick={() => columnSettingRef.value?.open()}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t表格列配置\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ElDropdownItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ElDropdownMenu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t</ElDropdown>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{slots.toolButton?.({ ...{ search: tableSearch }, ...getTableDefaultSlots(state) })}\n\t\t\t\t\t\t\t\t\t\t{slots.toolButtonAdv && (\n\t\t\t\t\t\t\t\t\t\t\t<ElDropdown title=\"高级操作\" trigger=\"click\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElButton loading={state.loading} loadingIcon={Eleme} circle icon={More}></ElButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\tdropdown: () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElDropdownMenu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{slots.toolButtonAdv?.({ ...{ search: tableSearch }, ...getTableDefaultSlots(state) })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ElDropdownMenu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t</ElDropdown>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<ElTable\n\t\t\t\t\t\t{...elTableProps.value}\n\t\t\t\t\t\tref={tableRef}\n\t\t\t\t\t\tvLoading={state.loading}\n\t\t\t\t\t\telement-loading-text={state.loadingText}\n\t\t\t\t\t\tdata={state.tableData}\n\t\t\t\t\t\tspanMethod={handleSpanMethod}\n\t\t\t\t\t\theaderCellClassName={handleHeaderCellClassName}\n\t\t\t\t\t\tcellClassName={handleCellClassName}\n\t\t\t\t\t\tonSelection-change={handleSelectionChange}\n\t\t\t\t\t\tonSort-change={handleSortChange}\n\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\tonSelect-all={handleSelectAll}\n\t\t\t\t\t\tonCurrent-change={handleCurrentChange}\n\t\t\t\t\t\tonHeader-dragend={handleHeaderDragend}\n\t\t\t\t\t\tonCell-mouse-enter={(row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event) =>\n\t\t\t\t\t\t\temit(\"cellMouseEnter\", row, column, cell, event)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCell-mouse-leave={(row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event) =>\n\t\t\t\t\t\t\temit(\"cellMouseLeave\", row, column, cell, event)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCell-click={(row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event) =>\n\t\t\t\t\t\t\temit(\"cellClick\", row, column, cell, event)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCell-dblclick={(row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event) =>\n\t\t\t\t\t\t\temit(\"cellDblclick\", row, column, cell, event)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCell-contextmenu={(row: DefaultRow, column: TableColumnCtx<DefaultRow>, cell: HTMLTableCellElement, event: Event) =>\n\t\t\t\t\t\t\temit(\"cellContextmenu\", row, column, cell, event)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonRow-click={(row: DefaultRow, column: TableColumnCtx<DefaultRow> | null, event: Event) => {\n\t\t\t\t\t\t\tif (column) emit(\"rowClick\", row, column, event);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRow-contextmenu={(row: DefaultRow, column: TableColumnCtx<DefaultRow> | null, event: Event) => {\n\t\t\t\t\t\t\tif (column) emit(\"rowContextmenu\", row, column, event);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRow-dblclick={(row: DefaultRow, column: TableColumnCtx<DefaultRow> | null, event: Event) => {\n\t\t\t\t\t\t\tif (column) emit(\"rowDblclick\", row, column, event);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonHeader-click={(column: TableColumnCtx<DefaultRow>, event: Event) => emit(\"headerClick\", column, event)}\n\t\t\t\t\t\tonHeader-contextmenu={(column: TableColumnCtx<DefaultRow>, event: Event) => emit(\"headerContextmenu\", column, event)}\n\t\t\t\t\t\tonFilter-change={(newFilters: unknown) => emit(\"filterChange\", newFilters)}\n\t\t\t\t\t\tonExpand-change={(row: DefaultRow, expanded: boolean | DefaultRow[]) => emit(\"expandChange\", row, expanded)}\n\t\t\t\t\t\tonScroll={(data: { scrollLeft: number; scrollTop: number }) => emit(\"scroll\", data)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tappend: () => slots.append?.(),\n\t\t\t\t\t\t\tempty: () => (\n\t\t\t\t\t\t\t\t<div class=\"fa-table__empty\">\n\t\t\t\t\t\t\t\t\t{slots.empty ? (\n\t\t\t\t\t\t\t\t\t\tslots.empty()\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t<NotData />\n\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t<div>暂无数据</div>\n\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t\t\t\tclassName=\"fa-table__index-column\"\n\t\t\t\t\t\t\t\t\t\ttype=\"index\"\n\t\t\t\t\t\t\t\t\t\tfixed=\"left\"\n\t\t\t\t\t\t\t\t\t\twidth={\n\t\t\t\t\t\t\t\t\t\t\tstate.tablePagination.pageIndex * state.tablePagination.pageSize >= 100\n\t\t\t\t\t\t\t\t\t\t\t\t? state.tablePagination.pageIndex * state.tablePagination.pageSize >= 1000\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 50\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 40\n\t\t\t\t\t\t\t\t\t\t\t\t: 30\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\tindex={indexMethod}\n\t\t\t\t\t\t\t\t\t\tshowOverflowTooltip={false}\n\t\t\t\t\t\t\t\t\t\tresizable={false}\n\t\t\t\t\t\t\t\t\t\tcolumnKey=\"__table-index\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t\t\t\tclassName=\"fa-table__selection-column\"\n\t\t\t\t\t\t\t\t\t\ttype=\"selection\"\n\t\t\t\t\t\t\t\t\t\tfixed=\"left\"\n\t\t\t\t\t\t\t\t\t\twidth={35}\n\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\treserveSelection\n\t\t\t\t\t\t\t\t\t\tshowOverflowTooltip={false}\n\t\t\t\t\t\t\t\t\t\tresizable={false}\n\t\t\t\t\t\t\t\t\t\tcolumnKey=\"__table-selection\"\n\t\t\t\t\t\t\t\t\t\tselectable={props.rowSelectable}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{slots.operation && (\n\t\t\t\t\t\t\t\t\t\t<ElTableColumn\n\t\t\t\t\t\t\t\t\t\t\tfixed=\"right\"\n\t\t\t\t\t\t\t\t\t\t\twidth={state.operationColumnWidth}\n\t\t\t\t\t\t\t\t\t\t\theaderAlign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\talign=\"left\"\n\t\t\t\t\t\t\t\t\t\t\tshowOverflowTooltip={false}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"fa-table__operation-column\"\n\t\t\t\t\t\t\t\t\t\t\tresizable={false}\n\t\t\t\t\t\t\t\t\t\t\tcolumnKey=\"__table-operation\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\theader: () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"fa-table__auto-width-column__cell-header __fa-table__auto-width-column__cell-header____table-operation\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>操作</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({ row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number }) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"fa-table__auto-width-column__cell __fa-table__auto-width-column__cell____table-operation\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{slots.operation?.({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$index,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...{ search: tableSearch },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...getTableDefaultSlots(state),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{state.tableColumns?.length === 0\n\t\t\t\t\t\t\t\t\t\t? slots.default?.()\n\t\t\t\t\t\t\t\t\t\t: state.tableColumns.map(\n\t\t\t\t\t\t\t\t\t\t\t\t(col) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tcol.show &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t(col.type === \"expand\" ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ElTableColumn {...col} width={35} fixed={col.fixed ?? \"left\"} resizable={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault: ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$index,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trow: DefaultRow;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn: FaTableColumnCtx;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$index: number;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{col.render?.({ row, column, $index, ...getTableDefaultSlots(state) })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{col.slot &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslots[col.slot]?.({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$index,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...getTableDefaultSlots(state),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ElTableColumn>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcol.prop && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<FaTableColumn\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvSlots={slots}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...omit(col, tableColumnOmitNames)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thideImage={props.hideImage}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tresizable={true}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonImagePreview={handleImagePreview}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonCustomCellClick={handleCustomCellClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}}\n\t\t\t\t\t</ElTable>\n\t\t\t\t\t<div class=\"fa-table__main-footer\">\n\t\t\t\t\t\t<div class=\"fa-table__main-footer__left\">\n\t\t\t\t\t\t\t{slots.footer?.({ ...{ search: tableSearch }, ...getTableDefaultSlots(state) })}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{slots.pagination ? (\n\t\t\t\t\t\t\tslots.pagination({\n\t\t\t\t\t\t\t\tpageIndex: state.tablePagination.pageIndex,\n\t\t\t\t\t\t\t\tpageSize: state.tablePagination.pageSize,\n\t\t\t\t\t\t\t\ttotalRows: state.tablePagination.totalRows,\n\t\t\t\t\t\t\t\thandleSizeChange,\n\t\t\t\t\t\t\t\thandlePaginationChange,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t{props.pagination ? (\n\t\t\t\t\t\t\t\t\t<FaTablePagination\n\t\t\t\t\t\t\t\t\t\tpageSizes={props.pageSizes}\n\t\t\t\t\t\t\t\t\t\tonSizeChange={handleSizeChange}\n\t\t\t\t\t\t\t\t\t\tonCurrentChange={handlePaginationChange}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ElPagination class=\"fa-table-pagination\" size=\"small\" layout=\"total\" total={state.tableData.length} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{state.imagePreview && (\n\t\t\t\t\t<ElImageViewer\n\t\t\t\t\t\tcloseOnPressEscape\n\t\t\t\t\t\thideOnClickModal\n\t\t\t\t\t\tteleported\n\t\t\t\t\t\tshowProgress\n\t\t\t\t\t\tonClose={() => (state.imagePreview = false)}\n\t\t\t\t\t\turlList={state.previewList}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{props.columnSettingBtn && <FaTableColumnsSettingDialog ref={columnSettingRef} change={props.columnsChange} />}\n\t\t\t</div>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 用于多选表格,清空用户的选择 */\n\t\t\tclearSelection: computed(() => tableRef.value?.clearSelection),\n\t\t\t/** @description 返回当前选中的行 */\n\t\t\tgetSelectionRows: computed(() => tableRef.value?.getSelectionRows),\n\t\t\t/** @description 返回当前半选中的行。 */\n\t\t\tgetHalfSelectionRows: computed(() => tableRef.value?.getHalfSelectionRows),\n\t\t\t/** @description 用于多选表格,切换某一行的选中状态, 如果使用了第二个参数,则可直接设置这一行选中与否 */\n\t\t\ttoggleRowSelection: computed(() => tableRef.value?.toggleRowSelection),\n\t\t\t/** @description 用于多选表格,切换全选和全不选 */\n\t\t\ttoggleAllSelection: computed(() => tableRef.value?.toggleAllSelection),\n\t\t\t/** @description 用于可扩展的表格或树表格,如果某行被扩展,则切换。 使用第二个参数,您可以直接设置该行应该被扩展或折叠。 */\n\t\t\ttoggleRowExpansion: computed(() => tableRef.value?.toggleRowExpansion),\n\t\t\t/** @description 用于单选表格,设定某一行为选中行, 如果调用时不加参数,则会取消目前高亮行的选中状态。 */\n\t\t\tsetCurrentRow: computed(() => tableRef.value?.setCurrentRow),\n\t\t\t/** @description 用于清空排序条件,数据会恢复成未排序的状态 */\n\t\t\tclearSort: computed(() => tableRef.value?.clearSort),\n\t\t\t/** @description 传入由columnKey 组成的数组以清除指定列的过滤条件。 如果没有参数,清除所有过滤器 */\n\t\t\tclearFilter: computed(() => tableRef.value?.clearFilter),\n\t\t\t/** @description 对 Table 进行重新布局。 当表格可见性变化时,您可能需要调用此方法以获得正确的布局 */\n\t\t\tdoLayout: computed(() => tableRef.value?.doLayout),\n\t\t\t/** @description 手动排序表格。 参数 prop 属性指定排序列,order 指定排序顺序。 */\n\t\t\tsort: computed(() => tableRef.value?.sort),\n\t\t\t/** @description 滚动到一组特定坐标 */\n\t\t\tscrollTo: computed(() => tableRef.value?.scrollTo),\n\t\t\t/** @description 设置垂直滚动位置 */\n\t\t\tsetScrollTop: computed(() => tableRef.value?.setScrollTop),\n\t\t\t/** @description 设置水平滚动位置 */\n\t\t\tsetScrollLeft: computed(() => tableRef.value?.setScrollLeft),\n\t\t\t/** @description 获取表列的 context */\n\t\t\tcolumns: computed(() => tableRef.value?.columns),\n\t\t\t/** @description 适用于 lazy Table, 需要设置 rowKey, 更新 key children */\n\t\t\tupdateKeyChildren: computed(() => tableRef.value?.updateKeyChildren),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 表格数据 */\n\t\t\ttableData: computed(() => state.tableData),\n\t\t\t/** @description 分页数据 */\n\t\t\ttablePagination: computed(() => state.tablePagination),\n\t\t\t/** @description 搜索参数 */\n\t\t\tsearchParam: computed(() => state.searchParam),\n\t\t\t/** @description 选中状态 */\n\t\t\tselected: computed(() => state.selected),\n\t\t\t/** @description 选中数据列表 */\n\t\t\tselectedList: computed(() => state.selectedList),\n\t\t\t/** @description 选中数据 rowKey 列表 */\n\t\t\tselectedListIds: computed(() => state.selectedListIds),\n\t\t\t/** @description 部分选中数据 rowKey 列表 */\n\t\t\tindeterminateSelectedListIds: computed(() => state.indeterminateSelectedListIds),\n\t\t\t/** @description 表格宽度 */\n\t\t\ttableWidth: computed(() => state.tableWidth),\n\t\t\t/** @description 表格高度 */\n\t\t\ttableHeight: computed(() => state.tableHeight),\n\t\t\t/** @description 部分选中(样式不一样而已),用于多选表格,切换某一行的选中状态, 如果使用了第二个参数,则可直接设置这一行选中与否 */\n\t\t\ttoggleRowIndeterminateSelection,\n\t\t\t/** @description 异步方法,刷新表格 */\n\t\t\trefresh: tableSearch,\n\t\t\t/** @description 异步方法,重置表格 */\n\t\t\treset: tableReset,\n\t\t\t/** @description 对 Table 进行重新渲染。当 TableKey 发生变化的时候可以通过此方法重新渲染表格 */\n\t\t\tdoRender,\n\t\t\t/** @description Table 加载 */\n\t\t\tdoLoading,\n\t\t});\n\t},\n});\n","/** FaTable 统一分页返回结果。 */\nexport interface PagedResult<Output = Record<string, unknown>> {\n\t/**\n\t * 当前页\n\t */\n\tpageIndex?: number;\n\t/**\n\t * 当前页码\n\t */\n\tpageSize?: number;\n\t/**\n\t * 总页数\n\t */\n\ttotalPage?: number;\n\t/**\n\t * 总条数\n\t */\n\ttotalRows?: number;\n\t/**\n\t * Data\n\t */\n\trows?: Output[];\n\t/**\n\t * 是否有上一页\n\t */\n\thasPrevPages?: boolean;\n\t/**\n\t * 是否有下一页\n\t */\n\thasNextPages?: boolean;\n\t/**\n\t * 程序集名称\n\t */\n\tassemblyName?: string;\n\t/**\n\t * 完全限定名称\n\t */\n\tfullName?: string;\n}\n\n/** FaTable 分页搜索运算符。 */\nexport enum PagedSearchTypeEnum {\n\t/**\n\t * 模糊匹配\n\t */\n\tLike = 1,\n\t/**\n\t * 等于\n\t */\n\tEqual = 2,\n\t/**\n\t * 不等于\n\t */\n\tNotEqual = 3,\n\t/**\n\t * 大于\n\t */\n\tGreaterThan = 4,\n\t/**\n\t * 大于等于\n\t */\n\tGreaterThanOrEqual = 5,\n\t/**\n\t * 小于\n\t */\n\tLessThan = 6,\n\t/**\n\t * 小于等于\n\t */\n\tLessThanOrEqual = 7,\n\t/**\n\t * 包含\n\t */\n\tInclude = 8,\n\t/**\n\t * 排除\n\t */\n\tNotInclude = 9,\n}\n\n/** FaTable 单个分页搜索条件。 */\nexport interface PagedSearchInput {\n\t/**\n\t * 搜索字段英文\n\t */\n\tenField?: string;\n\t/**\n\t * 搜索字段中文\n\t */\n\tcnField?: string;\n\t/**\n\t * 搜索值\n\t */\n\tvalue?: string;\n\t/**\n\t * 搜索类型\n\t */\n\ttype?: PagedSearchTypeEnum;\n}\n\n/** FaTable 单个分页排序条件。 */\nexport interface PagedSortInput {\n\t/**\n\t * 排序字段英文\n\t */\n\tenField?: string;\n\t/**\n\t * 排序字段中文\n\t */\n\tcnField?: string;\n\t/**\n\t * 排序方法\n\t * 'ascending' | 'descending'\n\t */\n\tmode?: string;\n}\n\n/** FaTable 分页、搜索和排序请求参数。 */\nexport interface PagedInput {\n\t/**\n\t * 当前页面索引值,默认为1\n\t */\n\tpageIndex?: number;\n\t/**\n\t * 页码容量\n\t */\n\tpageSize?: number;\n\t/**\n\t * 搜索值\n\t */\n\tsearchValue?: string;\n\t/**\n\t * 搜索时间\n\t */\n\tsearchTimeList?: (Date | string)[];\n\t/**\n\t * 搜索集合\n\t */\n\tsearchList?: PagedSearchInput[];\n\t/**\n\t * 排序集合\n\t */\n\tsortList?: PagedSortInput[];\n\t/**\n\t * 启用分页\n\t * @default true\n\t */\n\tenablePaged?: boolean;\n}\n","import { withInstall, withNoopInstall } from \"../../utils\";\nimport Table, { type FaTableSlots, faTableEmits, faTableProps, tableProps } from \"./src/table\";\nimport TableColumn, { tableColumnProps } from \"./src/tableColumn\";\nimport TableColumnsSettingDialog from \"./src/tableColumnSettingDialog\";\nimport TablePagination from \"./src/tablePagination\";\nimport TableSearchForm from \"./src/tableSearchForm\";\nimport TableSearchFormItem from \"./src/tableSearchFormItem\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 集成查询、分页、列配置和枚举映射的业务表格组件。 */\nexport const FaTable: TSXWithInstall<typeof Table> & {\n\tTableColumn: typeof TableColumn;\n\tTableColumnsSettingDialog: typeof TableColumnsSettingDialog;\n\tTablePagination: typeof TablePagination;\n\tTableSearchForm: typeof TableSearchForm;\n\tTableSearchFormItem: typeof TableSearchFormItem;\n} = withInstall(Table, {\n\tTableColumn,\n\tTableColumnsSettingDialog,\n\tTablePagination,\n\tTableSearchForm,\n\tTableSearchFormItem,\n});\nexport default FaTable;\n\n/** 可独立注册的 FaTable 列组件。 */\nexport const FaTableColumn: TSXWithInstall<typeof TableColumn> = withNoopInstall(TableColumn);\n\nexport * from \"./src/page.type\";\nexport * from \"./src/table.state\";\nexport * from \"./src/table.type\";\n\nexport { faTableEmits, faTableProps, tableColumnProps, tableProps };\nexport type { FaTableSlots };\nexport type { FaTableColumnSlots, FaTableColumnSlotsResult } from \"./src/tableColumn\";\n\n/** FaTable 暴露的组件实例类型。 */\nexport type FaTableInstance = InstanceType<typeof Table>;\n\n/** FaTable 的完整 Props 类型。 */\nexport type FaTableProps = ExtractPropTypes<typeof faTableProps>;\n\n/** FaTable 的 Emits 类型。 */\nexport type FaTableEmits = typeof faTableEmits;\n\n/** FaTableColumn 暴露的组件实例类型。 */\nexport type FaTableColumnInstance = InstanceType<typeof TableColumn>;\n\nexport * from \"./utils/table\";\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, defineComponent, reactive, ref } from \"vue\";\nimport { Delete, Search } from \"@element-plus/icons-vue\";\nimport { ElButton, ElButtonGroup, ElInput } from \"element-plus\";\nimport { isFunction, isNull, isNumber, isString } from \"lodash-unified\";\nimport { definePropType, makeSlots, useExpose, useRender, withDefineType } from \"../../../utils\";\nimport FaDialog from \"../../dialog\";\nimport { FaTable, type FaTableInstance, type PagedInput, type PagedResult } from \"../../table\";\nimport type { FaDialogInstance } from \"../../dialog\";\nimport type { TableProps } from \"element-plus\";\nimport type { PropType } from \"vue\";\n\n/** FaInputDialogPage 的运行时 Props 定义。 */\nexport const faInputDialogPageProps = {\n\t/** @description key of row data, used for optimizing rendering. Required if `reserve-selection` is on or display tree data. When its type is String, multi-level access is supported, e.g. `user.info.id`, but `user.info[0].id` is not supported, in which case `Function` should be used */\n\trowKey: {\n\t\ttype: [String, Function] as PropType<TableProps<Record<string, unknown>>[\"rowKey\"]>,\n\t\tdefault: \"id\",\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: [String, Number] as PropType<string | number | null>,\n\t/** @description v-model:label绑定值 */\n\tlabel: String as PropType<string | null>,\n\t/** @description 输入框占位文本 */\n\tplaceholder: {\n\t\ttype: String,\n\t\tdefault: \"请选择\",\n\t},\n\t/** @description 禁用 */\n\tdisabled: Boolean,\n\t/** @description 标题 */\n\ttitle: String,\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: PagedInput) => Promise<PagedResult | Record<string, unknown>[]>>(Function),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n\t/** @description 显示文本 Key */\n\tlabelKey: {\n\t\ttype: String,\n\t\tdefault: \"name\",\n\t},\n};\n\n/** FaInputDialogPage 的运行时 Emits 定义。 */\nexport const faInputDialogPageEmits = {\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: string | number | null): boolean => isString(value) || isNumber(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string | null): boolean => isString(value) || isNull(value),\n\t/** @description 改变 */\n\tchange: (_data: unknown, _value?: string | number | null): boolean => true,\n};\n\n/** FaInputDialogPage 的插槽参数。 */\nexport interface FaInputDialogPageSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n}\n\nexport default defineComponent({\n\tname: \"FaInputDialogPage\",\n\tprops: faInputDialogPageProps,\n\temits: faInputDialogPageEmits,\n\tslots: makeSlots<FaInputDialogPageSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst modelValue = useVModel(props, \"modelValue\", emit, { passive: true });\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\n\t\tconst state = reactive({\n\t\t\tselectionRow: withDefineType<Record<string, unknown>>(),\n\t\t});\n\n\t\tconst faDialogRef = ref<FaDialogInstance>();\n\t\tconst faTableRef = ref<FaTableInstance>();\n\n\t\tconst handleDeleteClick = (): void => {\n\t\t\tmodelValue.value = null;\n\t\t\tselectedLabel.value = null;\n\t\t\temit(\"change\", null);\n\t\t};\n\n\t\tconst handleSearchClick = (): void => {\n\t\t\tfaDialogRef.value?.open(() => {\n\t\t\t\tconst table = faTableRef.value;\n\t\t\t\tif (table === undefined) return;\n\t\t\t\tif (state.selectionRow) {\n\t\t\t\t\t// 判断当前行是否选中\n\t\t\t\t\tconst rawRowKey = isFunction(props.rowKey) ? props.rowKey(state.selectionRow) : state.selectionRow[props.rowKey];\n\t\t\t\t\tconst rowSelected = (typeof rawRowKey === \"string\" || typeof rawRowKey === \"number\") && table.selectedListIds.includes(rawRowKey);\n\t\t\t\t\tif (!rowSelected) {\n\t\t\t\t\t\ttable.toggleRowSelection?.(state.selectionRow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst handleConfirmClick = (): void => {\n\t\t\tfaDialogRef.value?.close(() => {\n\t\t\t\tconst table = faTableRef.value;\n\t\t\t\tconst selectedData = table?.selectedList[0];\n\t\t\t\tif (table?.selected && selectedData) {\n\t\t\t\t\tconst selectedValue = isFunction(props.rowKey) ? props.rowKey(selectedData) : selectedData[props.rowKey];\n\t\t\t\t\tmodelValue.value = typeof selectedValue === \"string\" || typeof selectedValue === \"number\" ? selectedValue : null;\n\t\t\t\t\tconst label = selectedData[props.labelKey];\n\t\t\t\t\tselectedLabel.value = typeof label === \"string\" ? label : null;\n\t\t\t\t\temit(\"change\", selectedData, modelValue.value);\n\t\t\t\t} else {\n\t\t\t\t\tmodelValue.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst handleTableRowDblclick = (row: Record<string, unknown>): void => {\n\t\t\tfaTableRef.value?.clearSelection?.();\n\t\t\tfaTableRef.value?.toggleRowSelection?.(row);\n\t\t\tstate.selectionRow = row;\n\t\t\thandleConfirmClick();\n\t\t};\n\n\t\tuseRender(() => (\n\t\t\t<div class=\"fa-input-dialog-page\">\n\t\t\t\t<ElInput vModel={selectedLabel.value} placeholder={props.placeholder} disabled={props.disabled} readonly>\n\t\t\t\t\t{{\n\t\t\t\t\t\tappend: () => (\n\t\t\t\t\t\t\t<ElButtonGroup>\n\t\t\t\t\t\t\t\t<ElButton disabled={props.disabled} icon={Delete} onClick={handleDeleteClick} />\n\t\t\t\t\t\t\t\t<ElButton disabled={props.disabled} icon={Search} onClick={handleSearchClick} />\n\t\t\t\t\t\t\t</ElButtonGroup>\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t</ElInput>\n\t\t\t\t<FaDialog\n\t\t\t\t\tref={faDialogRef}\n\t\t\t\t\tstyle=\"--height: 70%;\"\n\t\t\t\t\twidth=\"50%\"\n\t\t\t\t\ttitle={props.title}\n\t\t\t\t\tfullHeight\n\t\t\t\t\tdisabledConfirmButton={!faTableRef.value?.selected}\n\t\t\t\t\tonConfirmClick={handleConfirmClick}\n\t\t\t\t>\n\t\t\t\t\t<FaTable\n\t\t\t\t\t\tref={faTableRef}\n\t\t\t\t\t\trowKey={props.rowKey}\n\t\t\t\t\t\trequestApi={props.requestApi}\n\t\t\t\t\t\tinitParam={props.initParam}\n\t\t\t\t\t\tsingle\n\t\t\t\t\t\trowClickSelection\n\t\t\t\t\t\thideSearchTime\n\t\t\t\t\t\tonRowDblclick={handleTableRowDblclick}\n\t\t\t\t\t>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tdefault: () => slots.default?.(),\n\t\t\t\t\t\t}}\n\t\t\t\t\t</FaTable>\n\t\t\t\t</FaDialog>\n\t\t\t</div>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 选择行数据 */\n\t\t\tselectionRow: computed(() => state.selectionRow),\n\t\t\t/** @description 打开选择器弹窗 */\n\t\t\topen: handleSearchClick,\n\t\t\t/** @description 清除选择 */\n\t\t\tclear: handleDeleteClick,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport InputDialogPage, { faInputDialogPageEmits, faInputDialogPageProps } from \"./src/inputDialogPage\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 在对话框中提供分页选择与输入交互的组件。 */\nexport const FaInputDialogPage: TSXWithInstall<typeof InputDialogPage> = withInstall(InputDialogPage);\nexport default FaInputDialogPage;\n\nexport { faInputDialogPageProps, faInputDialogPageEmits };\nexport type { FaInputDialogPageSlots } from \"./src/inputDialogPage\";\n\n/** FaInputDialogPage 暴露的组件实例类型。 */\nexport type FaInputDialogPageInstance = InstanceType<typeof InputDialogPage>;\n\n/** FaInputDialogPage 的完整 Props 类型。 */\nexport type FaInputDialogPageProps = ExtractPropTypes<typeof faInputDialogPageProps>;\n\n/** FaInputDialogPage 的 Emits 类型。 */\nexport type FaInputDialogPageEmits = typeof faInputDialogPageEmits;\n","import { Fragment, computed, defineComponent, h, reactive, resolveComponent } from \"vue\";\nimport { ElOption, ElOptionGroup } from \"element-plus\";\nimport { isUndefined } from \"lodash-unified\";\nimport { definePropType, makeSlots, useRender } from \"../../../utils\";\nimport type { ElSelectorOutput, ElSelectorValue } from \"./select.type\";\n\nexport default defineComponent({\n\tname: \"FaSelectOption\",\n\tprops: {\n\t\t/** @description 绑定值,优先级比 data 高 */\n\t\tvalue: {\n\t\t\ttype: definePropType<string | number | boolean | object>([String, Number, Boolean, Object]),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 显示值,优先级比 data 高 */\n\t\tlabel: String,\n\t\t/** @description 禁用值,优先级比 data 高 */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** @description 子节点,优先级比 data 高 */\n\t\tchildren: {\n\t\t\ttype: definePropType<ElSelectorOutput[]>(Array),\n\t\t},\n\t\t/** @description 下拉框数据 */\n\t\tdata: {\n\t\t\ttype: definePropType<ElSelectorOutput>(Object),\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\t/** @description 更多细节,只有使用slot的时候有用 */\n\t\tmoreDetail: Boolean,\n\t},\n\tslots: makeSlots<{\n\t\t/** @description 默认内容插槽 */\n\t\tdefault: ElSelectorOutput;\n\t}>(),\n\tsetup(props, { slots }) {\n\t\tconst state = reactive({\n\t\t\tvalue: computed<ElSelectorValue>(() => (isUndefined(props.value) ? props.data.value : props.value) ?? \"\"),\n\t\t\tlabel: computed(() => (isUndefined(props.label) ? props.data.label : props.label)),\n\t\t\tdisabled: computed(() => (isUndefined(props.disabled) ? props.data.disabled : props.disabled) ?? false),\n\t\t\tchildren: computed(() => (isUndefined(props.children) ? props.data.children : props.children) ?? []),\n\t\t});\n\n\t\tuseRender(() => (\n\t\t\t<Fragment>\n\t\t\t\t{state.children.length > 0 ? (\n\t\t\t\t\t<ElOptionGroup label={state.label} disabled={state.disabled}>\n\t\t\t\t\t\t{state.children.map((item) =>\n\t\t\t\t\t\t\th(\n\t\t\t\t\t\t\t\tresolveComponent(\"FaSelectOption\"),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmoreDetail: props.moreDetail,\n\t\t\t\t\t\t\t\t\tdata: item,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tslots\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ElOptionGroup>\n\t\t\t\t) : (\n\t\t\t\t\t<ElOption\n\t\t\t\t\t\tclass={{ \"fa-select-dropdown__selector__more-detail\": props.moreDetail && slots.default }}\n\t\t\t\t\t\tvalue={state.value}\n\t\t\t\t\t\tlabel={state.label}\n\t\t\t\t\t\tdisabled={state.disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{slots.default?.(props.data)}\n\t\t\t\t\t</ElOption>\n\t\t\t\t)}\n\t\t\t</Fragment>\n\t\t));\n\t},\n});\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from \"vue\";\nimport { ElSelect, selectEmits, selectProps, useGlobalSize } from \"element-plus\";\nimport { isArray, isBoolean, isEqual, isNil, isNull, isNumber, isObject, isString } from \"lodash-unified\";\nimport { addCssUnit, definePropType, makeSlots, useEmits, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport FaSelectOption from \"./selectOption\";\nimport type { ElSelectorModelValue, ElSelectorOutput, ElSelectorValue } from \"./select.type\";\nimport type { VNode } from \"vue\";\n\n/** 传递给底层 Element Plus 选择器的扩展 Props。 */\nexport interface SelectComponentProps {\n\t/** @description 指定标签为节点的某个属性值 */\n\tlabel?: string | ((data: ElSelectorOutput) => string);\n\t/** @description 指定是否隐藏为节点的某个属性值 */\n\thide?: string | ((data: ElSelectorOutput) => boolean);\n\t/** @description 指定是否禁用为节点的某个属性值 */\n\tdisabled?: string | ((data: ElSelectorOutput) => boolean);\n\t/** @description 指定子节点对象为节点的某个属性值 */\n\tchildren?: string;\n}\n\n/** FaSelect 的运行时 Props 定义。 */\nexport const faSelectProps = {\n\t...selectProps,\n\t/** @description whether Select is disabled 重载使其支持 ElForm*/\n\tdisabled: {\n\t\ttype: Boolean,\n\t\tdefault: undefined,\n\t},\n\t/** @description displayed text while loading data from server, default is 'Loading' */\n\tloadingText: {\n\t\ttype: String,\n\t\tdefault: \"加载中...\",\n\t},\n\t/** @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data' */\n\tnoMatchText: {\n\t\ttype: String,\n\t\tdefault: \"暂无匹配的数据\",\n\t},\n\t/** @description displayed text when there is no options, you can also use slot `empty`, default is 'No data' */\n\tnoDataText: {\n\t\ttype: String,\n\t\tdefault: \"暂无数据\",\n\t},\n\t/** @description whether to collapse tags to a text when multiple selecting */\n\tcollapseTags: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true */\n\tcollapseTagsTooltip: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: {\n\t\ttype: definePropType<ElSelectorModelValue>([String, Number, Boolean, Object, Array]),\n\t\tdefault: undefined,\n\t},\n\t/** @description v-model:label绑定值 */\n\tlabel: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"100%\",\n\t},\n\t/** @description 更多细节,只有使用slot的时候有用 */\n\tmoreDetail: Boolean,\n\t/** @description 懒加载远程数据,默认 true。当下拉框第一次显示的时候才会加载远程数据*/\n\tlazy: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 默认选中。不能和懒加载一起使用 */\n\tdefaultSelected: Boolean,\n\t/** @description 配置选项 */\n\tprops: {\n\t\ttype: definePropType<SelectComponentProps>(Object),\n\t\tdefault: (): Partial<SelectComponentProps> => ({\n\t\t\tlabel: \"label\",\n\t\t\thide: \"hide\",\n\t\t\tdisabled: \"disabled\",\n\t\t\tchildren: \"children\",\n\t\t}),\n\t},\n\t/** @description 下拉框数据 */\n\tdata: {\n\t\ttype: definePropType<ElSelectorOutput[]>(Array),\n\t\tdefault: (): ElSelectorOutput[] => [],\n\t},\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: unknown) => Promise<ElSelectorOutput[]>>(Function),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n};\n\n/** FaSelect 的运行时 Emits 定义。 */\nexport const faSelectEmits = {\n\t...selectEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: ElSelectorModelValue): boolean =>\n\t\tisString(value) || isNumber(value) || isBoolean(value) || isObject(value) || isArray(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\t/** @description 数据改变 */\n\tdataChangeCallBack: (data: ElSelectorOutput[]): boolean => isArray(data),\n\t/** @description 改变 */\n\tchange: (_data: unknown, _value?: ElSelectorModelValue): boolean => true,\n};\n\n/** FaSelect 的插槽参数。 */\nexport interface FaSelectSlots extends Record<string, unknown> {\n\t/** @description FaSelectOption 默认内容插槽 */\n\tdefault: ElSelectorOutput;\n\t/** @description 下拉列表顶部的内容 */\n\theader: never;\n\t/** @description 下拉列表底部的内容 */\n\tfooter: never;\n\t/** @description Select 组件头部内容 */\n\tprefix: never;\n\t/** @description 无选项时的列表 */\n\tempty: never;\n\t/** @description select 组件自定义标签内容 */\n\ttag: never;\n\t/** @description select 组件自定义 loading内容 */\n\tloading: never;\n\t/** @description select 组件自定义标签内容 */\n\tlabel: { label: string; value: string | number | boolean | object };\n}\n\nexport default defineComponent({\n\tname: \"FaSelect\",\n\tprops: faSelectProps,\n\temits: faSelectEmits,\n\tslots: makeSlots<FaSelectSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<ElSelectorModelValue>(),\n\t\t\tloading: false,\n\t\t\tselectorData: withDefineType<ElSelectorOutput[]>([]),\n\t\t\t/** 首次出现 */\n\t\t\tdebut: true,\n\t\t\t/** 回显 */\n\t\t\techo: props.data?.length > 0 ? false : true,\n\t\t\t/** 下次刷新 */\n\t\t\tnextRefresh: false,\n\t\t});\n\n\t\tconst selectRef = ref<InstanceType<typeof ElSelect>>();\n\t\tlet requestVersion = 0;\n\n\t\tconst handleData = (data: ElSelectorOutput[]): ElSelectorOutput[] => {\n\t\t\treturn data\n\t\t\t\t.map((item): ElSelectorOutput => {\n\t\t\t\t\tconst value = item[props.valueKey];\n\t\t\t\t\tconst label = typeof props.props.label === \"function\" ? props.props.label(item) : item[props.props.label ?? \"label\"];\n\t\t\t\t\tconst hide = typeof props.props.hide === \"function\" ? props.props.hide(item) : item[props.props.hide ?? \"hide\"];\n\t\t\t\t\tconst disabled =\n\t\t\t\t\t\ttypeof props.props.disabled === \"function\" ? props.props.disabled(item) : item[props.props.disabled ?? \"disabled\"];\n\t\t\t\t\tconst children = item[props.props.children ?? \"children\"];\n\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t(typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"object\")\n\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tchildren: Array.isArray(children) ? handleData(children as ElSelectorOutput[]) : [],\n\t\t\t\t\t\tdisabled: typeof disabled === \"boolean\" ? disabled : undefined,\n\t\t\t\t\t\thide: typeof hide === \"boolean\" ? hide : undefined,\n\t\t\t\t\t\tlabel: typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((item) => item.hide !== true);\n\t\t};\n\n\t\tconst loadData = async (): Promise<void> => {\n\t\t\tconst currentRequestVersion = ++requestVersion;\n\t\t\t// 判断是否需要自动请求\n\t\t\tif (props.requestApi) {\n\t\t\t\tstate.loading = true;\n\t\t\t\tconst params = props.initParam ?? {};\n\t\t\t\ttry {\n\t\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\t// 这里不允许回显了\n\t\t\t\t\tstate.echo = false;\n\t\t\t\t\tstate.selectorData = handleData(resData);\n\t\t\t\t\temit(\"dataChangeCallBack\", state.selectorData);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\tstate.selectorData = [];\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 这里不允许回显了\n\t\t\t\tstate.echo = false;\n\t\t\t\tstate.selectorData = handleData(props.data);\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = (value?: ElSelectorModelValue): void => {\n\t\t\t// 判断是否为多选\n\t\t\tif (props.multiple) {\n\t\t\t\t// value 必然是数组\n\t\t\t\tconst valueArr = Array.isArray(value) ? value : [];\n\t\t\t\tif (valueArr?.length === 0) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst dataList = state.selectorData.filter((item) => item.value !== undefined && valueArr.includes(item.value));\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = dataList.map((item) => item.label ?? \"\");\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", dataList, value);\n\t\t\t} else {\n\t\t\t\t// value 必然不是数组\n\t\t\t\tif (isNil(value)) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst data = state.selectorData.find((f) => f.value === value);\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = data?.label ?? null;\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", data ?? null, value);\n\t\t\t}\n\t\t};\n\n\t\tconst handleClear = (): void => {\n\t\t\tstate.value = null;\n\t\t\tselectedLabel.value = null;\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"clear\");\n\t\t};\n\n\t\tconst handleVisibleChange = async (visible: boolean): Promise<void> => {\n\t\t\tif (visible) {\n\t\t\t\tif (state.debut) {\n\t\t\t\t\t// 首次出现\n\t\t\t\t\tstate.debut = false;\n\t\t\t\t\t// 懒加载\n\t\t\t\t\t!props.defaultSelected && props.lazy && (await loadData());\n\t\t\t\t} else {\n\t\t\t\t\t// 判断再次出现是否需要刷新数据\n\t\t\t\t\tif (state.nextRefresh) {\n\t\t\t\t\t\tstate.nextRefresh = false;\n\t\t\t\t\t\tawait loadData();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"visible-change\", visible);\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.echo && !isNil(newValue)) {\n\t\t\t\t\tconst hasLabel = !isNil(props.label);\n\t\t\t\t\t// 判断是否为多选\n\t\t\t\t\tif (props.multiple) {\n\t\t\t\t\t\t// 判断是否为数组\n\t\t\t\t\t\tif (!Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelect]\", \"当启用 multiple 时,传入的 modelValue 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && !isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelect]\", \"当启用 multiple 时,传入的 modelValue:label 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = newValue\n\t\t\t\t\t\t\t// 最大选项截取\n\t\t\t\t\t\t\t.slice(0, props.multipleLimit > 0 ? props.multipleLimit : newValue.length)\n\t\t\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\t\t\tconst value: unknown = item;\n\t\t\t\t\t\t\t\tconst label: unknown = Array.isArray(props.label) ? props.label[index] : undefined;\n\t\t\t\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\t\t(typeof value === \"string\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"number\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"boolean\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"object\")\n\t\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t\t\t\t\tlabel: hasLabel && typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelect]\", \"当禁用 multiple 时,传入的 modelValue 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelect]\", \"当禁用 multiple 时,传入的 modelValue:label 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\t\tlabel: typeof props.label === \"string\" ? props.label : undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.value = newValue;\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tif (props.defaultSelected) {\n\t\t\t\tawait loadData();\n\t\t\t\tconst firstItem = state.selectorData[0];\n\t\t\t\tif (firstItem?.value !== undefined) {\n\t\t\t\t\thandleChange(props.multiple ? [firstItem.value] : firstItem.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 判断是否为本地数据\n\t\t\telse if (!props.requestApi && props.data?.length > 0) {\n\t\t\t\tstate.debut = false;\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\t// 判断是否非默认选中,且未启用懒加载\n\t\t\telse if (!props.lazy) {\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\twatch(\n\t\t\t\t() => props.initParam,\n\t\t\t\t(newValue, oldValue) => {\n\t\t\t\t\tif (!isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tstate.nextRefresh = true;\n\t\t\t\t\t\tif (!isNil(state.value)) {\n\t\t\t\t\t\t\thandleChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\twatch(\n\t\t\t\t() => props.data,\n\t\t\t\t() => {\n\t\t\t\t\tif (!props.requestApi) {\n\t\t\t\t\t\treturn loadData();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ deep: true }\n\t\t\t);\n\t\t});\n\n\t\tconst elSelectProps = useProps(props, selectProps, [\"modelValue\", \"popperClass\", \"loading\", \"props\"]);\n\t\tconst elSelectEmits = useEmits(selectEmits, emit, [\"update:modelValue\", \"change\", \"clear\", \"visible-change\"]);\n\t\tconst elPopperClass = computed(() => [\n\t\t\t\"fa-select-dropdown\",\n\t\t\tprops.popperClass,\n\t\t\tprops.moreDetail && `fa-select-dropdown__more-detail fa-select-dropdown__more-detail-${_globalSize.value}`,\n\t\t]);\n\n\t\tuseRender(() => (\n\t\t\t<ElSelect\n\t\t\t\t{...elSelectProps.value}\n\t\t\t\t{...elSelectEmits.value}\n\t\t\t\tref={selectRef}\n\t\t\t\tclass=\"fa-select\"\n\t\t\t\tpopperClass={elPopperClass.value}\n\t\t\t\tstyle={{ width: addCssUnit(props.width) }}\n\t\t\t\tvModel={state.value}\n\t\t\t\tloading={state.loading}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonClear={handleClear}\n\t\t\t\tonVisible-change={handleVisibleChange}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\tdefault: (): VNode[] =>\n\t\t\t\t\t\tstate.selectorData.map((item) => (\n\t\t\t\t\t\t\t<FaSelectOption vSlots={{ default: slots.default }} data={item} moreDetail={props.moreDetail} />\n\t\t\t\t\t\t)),\n\t\t\t\t\t...(slots.header && { header: (): VNode[] => slots.header?.() ?? [] }),\n\t\t\t\t\t...(slots.footer && { footer: (): VNode[] => slots.footer?.() ?? [] }),\n\t\t\t\t\t...(slots.prefix && { prefix: (): VNode[] => slots.prefix?.() ?? [] }),\n\t\t\t\t\t...(slots.empty && { empty: (): VNode[] => slots.empty?.() ?? [] }),\n\t\t\t\t\t...(slots.tag && { tag: (): VNode[] => slots.tag?.() ?? [] }),\n\t\t\t\t\t...(slots.loading && { loading: (): VNode[] => slots.loading?.() ?? [] }),\n\t\t\t\t\t...(slots.label && {\n\t\t\t\t\t\tlabel: ({ label, value }: { label: string; value: string | number | boolean | object }): VNode[] =>\n\t\t\t\t\t\t\tslots.label?.({ label, value }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElSelect>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 使选择器的输入框获取焦点 */\n\t\t\tfocus: computed(() => selectRef.value?.focus),\n\t\t\t/** @description 使选择器的输入框失去焦点,并隐藏下拉框 */\n\t\t\tblur: computed(() => selectRef.value?.blur),\n\t\t\t/** @description 获取当前选中的标签 */\n\t\t\tselectedLabel: computed(() => selectRef.value?.selectedLabel),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 刷新 */\n\t\t\trefresh: loadData,\n\t\t\t/** @description 设置选择 */\n\t\t\tsetSelection: (value: Exclude<ElSelectorModelValue, null | undefined>) => handleChange(value),\n\t\t\t/** @description 清除选择 */\n\t\t\tclearSelection: () => handleChange(null),\n\t\t});\n\t},\n});\n","import { withInstall, withNoopInstall } from \"../../utils\";\nimport Select, { faSelectProps } from \"./src/select\";\nimport SelectOption from \"./src/selectOption\";\nimport type { faSelectEmits } from \"./src/select\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持远程数据、分页和自定义选项的选择器组件。 */\nexport const FaSelect: TSXWithInstall<typeof Select> & { SelectOption: typeof SelectOption } = withInstall(Select, {\n\tSelectOption,\n});\nexport default FaSelect;\n\n/** 可独立注册的 FaSelect 选项组件。 */\nexport const FaSelectOption: TSXWithInstall<typeof SelectOption> = withNoopInstall(SelectOption);\n\nexport { faSelectProps };\nexport type { FaSelectSlots } from \"./src/select\";\nexport * from \"./src/select.type\";\n\n/** FaSelect 暴露的组件实例类型。 */\nexport type FaSelectInstance = InstanceType<typeof Select>;\n\n/** FaSelect 的完整 Props 类型。 */\nexport type FaSelectProps = ExtractPropTypes<typeof faSelectProps>;\n\n/** FaSelect 的 Emits 类型。 */\nexport type FaSelectEmits = typeof faSelectEmits;\n\n/** FaSelectOption 暴露的组件实例类型。 */\nexport type FaSelectOptionInstance = InstanceType<typeof SelectOption>;\n","import { useVModel } from \"@vueuse/core\";\nimport { Fragment, computed, defineComponent, onMounted, reactive, ref, watch } from \"vue\";\nimport { Search } from \"@element-plus/icons-vue\";\nimport { ElButton, ElInput, ElOption, ElPagination, ElSelect, selectEmits, selectProps, useGlobalSize } from \"element-plus\";\nimport { isArray, isBoolean, isEqual, isNil, isNull, isNumber, isObject, isString } from \"lodash-unified\";\nimport { addCssUnit, definePropType, makeSlots, useEmits, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport { FaSelectOption } from \"../../select\";\nimport { type SelectComponentProps } from \"../../select/src/select\";\nimport type { ElSelectorModelValue, ElSelectorOutput, ElSelectorValue } from \"../../select\";\nimport type { PagedInput, PagedResult } from \"../../table\";\nimport type { VNode } from \"vue\";\n\n/** FaSelectPage 的运行时 Props 定义。 */\nexport const faSelectPageProps = {\n\t...selectProps,\n\t/** @description whether Select is disabled 重载使其支持 ElForm*/\n\tdisabled: {\n\t\ttype: Boolean,\n\t\tdefault: undefined,\n\t},\n\t/** @description displayed text while loading data from server, default is 'Loading' */\n\tloadingText: {\n\t\ttype: String,\n\t\tdefault: \"加载中...\",\n\t},\n\t/** @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data' */\n\tnoMatchText: {\n\t\ttype: String,\n\t\tdefault: \"暂无匹配的数据\",\n\t},\n\t/** @description displayed text when there is no options, you can also use slot `empty`, default is 'No data' */\n\tnoDataText: {\n\t\ttype: String,\n\t\tdefault: \"暂无数据\",\n\t},\n\t/** @description whether to collapse tags to a text when multiple selecting */\n\tcollapseTags: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true */\n\tcollapseTagsTooltip: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: {\n\t\ttype: definePropType<ElSelectorModelValue>([String, Number, Boolean, Object, Array]),\n\t\tdefault: undefined,\n\t},\n\t/** @description v-model:label绑定值 */\n\tlabel: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"100%\",\n\t},\n\t/** @description 更多细节,只有使用slot的时候有用 */\n\tmoreDetail: Boolean,\n\t/** @description 配置选项 */\n\tprops: {\n\t\ttype: definePropType<SelectComponentProps>(Object),\n\t\tdefault: (): Partial<SelectComponentProps> => ({\n\t\t\tlabel: \"label\",\n\t\t\thide: \"hide\",\n\t\t\tdisabled: \"disabled\",\n\t\t\tchildren: \"children\",\n\t\t}),\n\t},\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: PagedInput) => Promise<PagedResult<ElSelectorOutput>>>(Function),\n\t\trequired: true as const,\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n};\n\n/** FaSelectPage 的运行时 Emits 定义。 */\nexport const faSelectPageEmits = {\n\t...selectEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: ElSelectorModelValue): boolean =>\n\t\tisString(value) || isNumber(value) || isBoolean(value) || isObject(value) || isArray(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\t/** @description 数据改变 */\n\tdataChangeCallBack: (data: ElSelectorOutput[]): boolean => isArray(data),\n\t/** @description 改变 */\n\tchange: (_data: unknown, _value?: ElSelectorModelValue): boolean => true,\n};\n\n/** FaSelectPage 的插槽参数。 */\nexport interface FaSelectPageSlots extends Record<string, unknown> {\n\t/** @description FaSelectOption 默认内容插槽 */\n\tdefault: ElSelectorOutput;\n\t/** @description 下拉列表顶部的内容 */\n\theader: never;\n\t/** @description 下拉列表底部的内容 */\n\tfooter: never;\n\t/** @description Select 组件头部内容 */\n\tprefix: never;\n\t/** @description 无选项时的列表 */\n\tempty: never;\n\t/** @description select 组件自定义标签内容 */\n\ttag: never;\n\t/** @description select 组件自定义 loading内容 */\n\tloading: never;\n\t/** @description select 组件自定义标签内容 */\n\tlabel: { label: string; value: string | number | boolean | object };\n}\n\nexport default defineComponent({\n\tname: \"FaSelectPage\",\n\tprops: faSelectPageProps,\n\temits: faSelectPageEmits,\n\tslots: makeSlots<FaSelectPageSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<ElSelectorModelValue>(),\n\t\t\tloading: false,\n\t\t\tselectorData: withDefineType<ElSelectorOutput[]>([]),\n\t\t\t/** 选中的数据 */\n\t\t\tselectedList: withDefineType<ElSelectorOutput[]>([]),\n\t\t\t/** 首次出现 */\n\t\t\tdebut: true,\n\t\t\t/** 回显 */\n\t\t\techo: true,\n\t\t\t/** 下次刷新 */\n\t\t\tnextRefresh: false,\n\t\t\tpageIndex: 1,\n\t\t\tpageSize: 15,\n\t\t\ttotalRows: 0,\n\t\t\tsearchValue: undefined,\n\t\t\tdefaultSelectorData: withDefineType<ElSelectorOutput>(),\n\t\t});\n\n\t\tconst selectRef = ref<InstanceType<typeof ElSelect>>();\n\t\tlet requestVersion = 0;\n\n\t\tconst handleData = (data: ElSelectorOutput[]): ElSelectorOutput[] => {\n\t\t\treturn data\n\t\t\t\t.map((item): ElSelectorOutput => {\n\t\t\t\t\tconst value = item[props.valueKey];\n\t\t\t\t\tconst label = typeof props.props.label === \"function\" ? props.props.label(item) : item[props.props.label ?? \"label\"];\n\t\t\t\t\tconst hide = typeof props.props.hide === \"function\" ? props.props.hide(item) : item[props.props.hide ?? \"hide\"];\n\t\t\t\t\tconst disabled =\n\t\t\t\t\t\ttypeof props.props.disabled === \"function\" ? props.props.disabled(item) : item[props.props.disabled ?? \"disabled\"];\n\t\t\t\t\tconst children = item[props.props.children ?? \"children\"];\n\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t(typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"object\")\n\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tchildren: Array.isArray(children) ? handleData(children as ElSelectorOutput[]) : [],\n\t\t\t\t\t\tdisabled: typeof disabled === \"boolean\" ? disabled : undefined,\n\t\t\t\t\t\thide: typeof hide === \"boolean\" ? hide : undefined,\n\t\t\t\t\t\tlabel: typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((item) => item.hide !== true);\n\t\t};\n\n\t\tconst loadData = async (pageIndex?: number): Promise<void> => {\n\t\t\tconst currentRequestVersion = ++requestVersion;\n\t\t\tstate.loading = true;\n\t\t\tstate.pageIndex = pageIndex ?? state.pageIndex;\n\t\t\tconst params: PagedInput = {\n\t\t\t\t...(typeof props.initParam === \"object\" && props.initParam !== null ? props.initParam : {}),\n\t\t\t\tpageIndex: state.pageIndex,\n\t\t\t\tpageSize: state.pageSize,\n\t\t\t\tsearchValue: state.searchValue,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 这里不允许回显了\n\t\t\t\tstate.echo = false;\n\t\t\t\tstate.totalRows = resData.totalRows ?? 0;\n\t\t\t\tstate.selectorData = handleData(resData.rows ?? []);\n\t\t\t\temit(\"dataChangeCallBack\", state.selectorData);\n\t\t\t} catch (error) {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\tstate.pageIndex = 1;\n\t\t\t\tstate.totalRows = 0;\n\t\t\t\tstate.selectorData = [];\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = (value?: ElSelectorModelValue): void => {\n\t\t\t// 判断是否为多选\n\t\t\tif (props.multiple) {\n\t\t\t\t// value 必然是数组\n\t\t\t\tconst valueArr = Array.isArray(value) ? value : [];\n\t\t\t\tif (valueArr?.length === 0) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\tstate.selectedList = [];\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst dataList = state.selectorData.filter((item) => item.value !== undefined && valueArr.includes(item.value));\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = dataList.map((item) => item.label ?? \"\");\n\t\t\t\tstate.selectedList = [...state.selectedList.filter((f) => !dataList.some((s) => s.value === f.value)), ...dataList]\n\t\t\t\t\t// 过滤不存在的\n\t\t\t\t\t.filter((item) => item.value !== undefined && valueArr.includes(item.value));\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", dataList, value);\n\t\t\t} else {\n\t\t\t\t// value 必然不是数组\n\t\t\t\tif (isNil(value)) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\tstate.selectedList = [];\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst data = state.selectorData.find((f) => f.value === value);\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = data?.label ?? null;\n\t\t\t\tif (data && !state.selectedList.some((s) => s.value === value)) {\n\t\t\t\t\tstate.selectedList = [data];\n\t\t\t\t}\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", data ?? null, value);\n\t\t\t}\n\t\t};\n\n\t\tconst handleClear = (): void => {\n\t\t\tstate.value = null;\n\t\t\tselectedLabel.value = null;\n\t\t\tstate.selectedList = [];\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"clear\");\n\t\t};\n\n\t\tconst handleVisibleChange = async (visible: boolean): Promise<void> => {\n\t\t\tif (visible) {\n\t\t\t\tif (state.debut) {\n\t\t\t\t\t// 首次出现\n\t\t\t\t\tstate.debut = false;\n\t\t\t\t\tawait loadData();\n\t\t\t\t} else {\n\t\t\t\t\t// 判断再次出现是否需要刷新数据\n\t\t\t\t\tif (state.nextRefresh) {\n\t\t\t\t\t\tstate.nextRefresh = false;\n\t\t\t\t\t\tawait loadData();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"visible-change\", visible);\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.echo && !isNil(newValue)) {\n\t\t\t\t\tconst hasLabel = !isNil(props.label);\n\t\t\t\t\t// 判断是否为多选\n\t\t\t\t\tif (props.multiple) {\n\t\t\t\t\t\tif (!Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectPage]\", \"当启用 multiple 时,传入的 modelValue 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && !isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectPage]\", \"当启用 multiple 时,传入的 modelValue:label 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectedList = newValue\n\t\t\t\t\t\t\t// 最大选项截取\n\t\t\t\t\t\t\t.slice(0, props.multipleLimit > 0 ? props.multipleLimit : newValue.length)\n\t\t\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\t\t\tconst value: unknown = item;\n\t\t\t\t\t\t\t\tconst label: unknown = Array.isArray(props.label) ? props.label[index] : undefined;\n\t\t\t\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\t\t(typeof value === \"string\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"number\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"boolean\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"object\")\n\t\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t\t\t\t\tlabel: hasLabel && typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectPage]\", \"当禁用 multiple 时,传入的 modelValue 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectPage]\", \"当禁用 multiple 时,传入的 modelValue:label 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.defaultSelectorData = {\n\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\tlabel: typeof props.label === \"string\" ? props.label : undefined,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.value = newValue;\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tonMounted(() => {\n\t\t\twatch(\n\t\t\t\t() => props.initParam,\n\t\t\t\t(newValue, oldValue) => {\n\t\t\t\t\tif (!isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tstate.nextRefresh = true;\n\t\t\t\t\t\tif (!isNil(state.value)) {\n\t\t\t\t\t\t\thandleChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\n\t\tconst elSelectProps = useProps(props, selectProps, [\"modelValue\", \"popperClass\", \"loading\", \"props\"]);\n\t\tconst elSelectEmits = useEmits(selectEmits, emit, [\"update:modelValue\", \"change\", \"clear\", \"visible-change\"]);\n\t\tconst elPopperClass = computed(() => [\n\t\t\t`fa-select-page-dropdown fa-select-page-dropdown-${_globalSize.value}`,\n\t\t\tprops.popperClass,\n\t\t\tprops.moreDetail && `fa-select-dropdown__more-detail fa-select-dropdown__more-detail-${_globalSize.value}`,\n\t\t]);\n\n\t\tuseRender(() => (\n\t\t\t<ElSelect\n\t\t\t\t{...elSelectProps.value}\n\t\t\t\t{...elSelectEmits.value}\n\t\t\t\tref={selectRef}\n\t\t\t\tclass=\"fa-select-page\"\n\t\t\t\tpopperClass={elPopperClass.value}\n\t\t\t\tstyle={{ width: addCssUnit(props.width) }}\n\t\t\t\tvModel={state.value}\n\t\t\t\tloading={state.loading}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonClear={handleClear}\n\t\t\t\tonVisible-change={handleVisibleChange}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\tdefault: (): VNode[] =>\n\t\t\t\t\t\tstate.selectorData.map((item) => (\n\t\t\t\t\t\t\t<FaSelectOption vSlots={{ default: slots.default }} data={item} moreDetail={props.moreDetail} />\n\t\t\t\t\t\t)),\n\t\t\t\t\theader: (): VNode[] => [\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t{state.defaultSelectorData?.value !== undefined && (\n\t\t\t\t\t\t\t\t<ElOption\n\t\t\t\t\t\t\t\t\tclass=\"fa-select-page-dropdown__default-selector\"\n\t\t\t\t\t\t\t\t\tvalue={state.defaultSelectorData.value}\n\t\t\t\t\t\t\t\t\tlabel={state.defaultSelectorData.label ?? \"\"}\n\t\t\t\t\t\t\t\t\tdisabled={true}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{state.defaultSelectorData.label}</span>\n\t\t\t\t\t\t\t\t\t<span>Default</span>\n\t\t\t\t\t\t\t\t</ElOption>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t\t\tclass=\"fa-select-page-dropdown__search-input\"\n\t\t\t\t\t\t\t\t\tclearable={Boolean(state.searchValue)}\n\t\t\t\t\t\t\t\t\tplaceholder=\"请输入关键字搜索\"\n\t\t\t\t\t\t\t\t\tvModel_trim={state.searchValue}\n\t\t\t\t\t\t\t\t\tonKeyup={(event: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t\t\t\t\tvoid loadData(1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\tappend: () => (\n\t\t\t\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\t\t\t\tloading={state.loading}\n\t\t\t\t\t\t\t\t\t\t\t\ticon={Search}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvoid loadData(1);\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</ElInput>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t{slots.header?.()}\n\t\t\t\t\t\t</Fragment>,\n\t\t\t\t\t],\n\t\t\t\t\tfooter: () => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<ElPagination\n\t\t\t\t\t\t\t\tclass=\"fa-select-page-dropdown__pagination\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tcurrentPage={state.pageIndex}\n\t\t\t\t\t\t\t\tpageSize={state.pageSize}\n\t\t\t\t\t\t\t\ttotal={state.totalRows}\n\t\t\t\t\t\t\t\tlayout=\"prev, pager, next, total\"\n\t\t\t\t\t\t\t\tpagerCount={5}\n\t\t\t\t\t\t\t\tonCurrent-change={loadData}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{slots.footer?.()}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t\t...(slots.prefix && { prefix: (): VNode[] => slots.prefix?.() ?? [] }),\n\t\t\t\t\t...(slots.empty && { empty: (): VNode[] => slots.empty?.() ?? [] }),\n\t\t\t\t\t...(slots.tag && { tag: (): VNode[] => slots.tag?.() ?? [] }),\n\t\t\t\t\t...(slots.loading && { loading: (): VNode[] => slots.loading?.() ?? [] }),\n\t\t\t\t\t...(props.multiple\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tlabel: ({ label: _label, value }: { label: string; value: string | number | boolean | object }): VNode[] => {\n\t\t\t\t\t\t\t\t\tconst selectedData = state.selectedList.find((f) => f.value === value);\n\t\t\t\t\t\t\t\t\tif (slots.label) {\n\t\t\t\t\t\t\t\t\t\treturn slots.label({ label: selectedData?.label ?? _label, value: selectedData?.value ?? value });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn selectedData ? [<span class=\"el-select__tags-text\">{selectedData.label}</span>] : [];\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: slots.label && {\n\t\t\t\t\t\t\t\tlabel: ({ label, value }: { label: string; value: string | number | boolean | object }): VNode[] =>\n\t\t\t\t\t\t\t\t\tslots.label?.({ label, value }) ?? [],\n\t\t\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElSelect>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 使选择器的输入框获取焦点 */\n\t\t\tfocus: computed(() => selectRef.value?.focus),\n\t\t\t/** @description 使选择器的输入框失去焦点,并隐藏下拉框 */\n\t\t\tblur: computed(() => selectRef.value?.blur),\n\t\t\t/** @description 获取当前选中的标签 */\n\t\t\tselectedLabel: computed(() => selectRef.value?.selectedLabel),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 选中的数据 */\n\t\t\tselectedList: computed(() => state.selectedList),\n\t\t\t/** @description 刷新 */\n\t\t\trefresh: loadData,\n\t\t\t/** @description 设置选择 */\n\t\t\tsetSelection: (value: Exclude<ElSelectorModelValue, null | undefined>) => handleChange(value),\n\t\t\t/** @description 清除选择 */\n\t\t\tclearSelection: () => handleChange(null),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport SelectPage, { faSelectPageEmits, faSelectPageProps } from \"./src/selectPage\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持分页数据源和远程检索的选择器组件。 */\nexport const FaSelectPage: TSXWithInstall<typeof SelectPage> = withInstall(SelectPage);\nexport default FaSelectPage;\n\nexport { faSelectPageProps, faSelectPageEmits };\nexport type { FaSelectPageSlots } from \"./src/selectPage\";\n\n/** FaSelectPage 暴露的组件实例类型。 */\nexport type FaSelectPageInstance = InstanceType<typeof SelectPage>;\n\n/** FaSelectPage 的完整 Props 类型。 */\nexport type FaSelectPageProps = ExtractPropTypes<typeof faSelectPageProps>;\n\n/** FaSelectPage 的 Emits 类型。 */\nexport type FaSelectPageEmits = typeof faSelectPageEmits;\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from \"vue\";\nimport { ArrowDown, CircleClose } from \"@element-plus/icons-vue\";\nimport { ElSelectV2, tagProps, useAriaProps, useEmptyValuesProps, useGlobalSize, useSizeProp, useTooltipContentProps } from \"element-plus\";\nimport { isArray, isBoolean, isEqual, isNil, isNull, isNumber, isObject, isString } from \"lodash-unified\";\nimport { addCssUnit, definePropType, makeSlots, useEmits, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport type { ElSelectorModelValue, ElSelectorOutput, ElSelectorValue } from \"../../select/src/select.type\";\nimport type { PagedInput, PagedResult } from \"../../table\";\nimport type { SelectV2Props as ElementPlusSelectV2Props, Options, Placement } from \"element-plus\";\nimport type { Component, PropType, VNode } from \"vue\";\n\n/** 传递给底层 Element Plus 虚拟化选择器的扩展 Props。 */\nexport interface Props {\n\tlabel?: string;\n\tvalue?: string;\n\tdisabled?: string;\n\toptions?: string;\n}\n\n/** FaSelectV2 支持的业务选择器 Props 定义。 */\nexport const SelectV2Props = {\n\t/**\n\t * @description whether creating new items is allowed. To use this, `filterable` must be true\n\t */\n\tallowCreate: Boolean,\n\t/**\n\t * @description autocomplete of select input\n\t */\n\tautocomplete: {\n\t\ttype: definePropType<\"none\" | \"both\" | \"list\" | \"inline\">(String),\n\t\tdefault: \"none\",\n\t},\n\t/**\n\t * @description for non-filterable Select, this prop decides if the option menu pops up when the input is focused\n\t */\n\tautomaticDropdown: Boolean,\n\t/**\n\t * @description whether select can be cleared\n\t */\n\tclearable: Boolean,\n\t/**\n\t * @description custom clear icon\n\t */\n\tclearIcon: {\n\t\ttype: definePropType<string | Component>([String, Object, Function]),\n\t\tdefault: CircleClose,\n\t},\n\t/**\n\t * @description tooltip theme, built-in theme: `dark` / `light`\n\t */\n\teffect: {\n\t\ttype: definePropType<string>(String),\n\t\tdefault: \"light\",\n\t},\n\t/**\n\t * @description whether to collapse tags to a text when multiple selecting\n\t */\n\tcollapseTags: Boolean,\n\t/**\n\t * @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true\n\t */\n\tcollapseTagsTooltip: Boolean,\n\t/** @description collapse-tags tooltip configuration */\n\ttagTooltip: {\n\t\ttype: definePropType<ElementPlusSelectV2Props[\"tagTooltip\"]>(Object),\n\t\tdefault: (): NonNullable<ElementPlusSelectV2Props[\"tagTooltip\"]> => ({}),\n\t},\n\t/**\n\t * @description The max tags number to be shown. To use this, `collapse-tags` must be true\n\t */\n\tmaxCollapseTags: {\n\t\ttype: Number,\n\t\tdefault: 1,\n\t},\n\t/**\n\t * @description\n\t */\n\tdefaultFirstOption: Boolean,\n\t/**\n\t * @description is disabled\n\t */\n\tdisabled: Boolean,\n\t/**\n\t * @description\n\t */\n\testimatedOptionHeight: {\n\t\ttype: Number,\n\t\tdefault: undefined,\n\t},\n\t/**\n\t * @description is filterable\n\t */\n\tfilterable: Boolean,\n\t/**\n\t * @description\n\t */\n\tfilterMethod: Function as PropType<ElementPlusSelectV2Props[\"filterMethod\"]>,\n\t/**\n\t * @description The height of the dropdown panel, 34px for each item\n\t */\n\theight: {\n\t\ttype: Number,\n\t\tdefault: 274, // same as select dropdown menu\n\t},\n\t/**\n\t * @description The height of the dropdown item\n\t */\n\titemHeight: {\n\t\ttype: Number,\n\t\tdefault: 34,\n\t},\n\t/**\n\t * @description\n\t */\n\tid: String,\n\t/**\n\t * @description whether Select is loading data from server\n\t */\n\tloading: Boolean,\n\t/**\n\t * @description displayed text while loading data from server, default is 'Loading'\n\t */\n\tloadingText: String,\n\t/**\n\t * @description biding value\n\t */\n\tmodelValue: {\n\t\ttype: definePropType<ElSelectorModelValue>([Array, String, Number, Boolean, Object]),\n\t},\n\t/**\n\t * @description is multiple\n\t */\n\tmultiple: Boolean,\n\t/**\n\t * @description maximum number of options user can select when multiple is true. No limit when set to 0\n\t */\n\tmultipleLimit: {\n\t\ttype: Number,\n\t\tdefault: 0,\n\t},\n\t/**\n\t * @description the name attribute of select input\n\t */\n\tname: String,\n\t/**\n\t * @description displayed text when there is no options, you can also use slot empty, the default is 'No Data'\n\t */\n\tnoDataText: String,\n\t/**\n\t * @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data'\n\t */\n\tnoMatchText: String,\n\t/**\n\t * @description function that gets called when the input value changes. Its parameter is the current input value. To use this, `filterable` must be true\n\t */\n\tremoteMethod: Function as PropType<ElementPlusSelectV2Props[\"remoteMethod\"]>,\n\t/**\n\t * @description whether reserve the keyword after select filtered option.\n\t */\n\treserveKeyword: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description data of the options, the key of `value` and `label` can be customize by `props`\n\t */\n\toptions: {\n\t\ttype: definePropType<\n\t\t\t(\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| (Record<string, unknown> & {\n\t\t\t\t\t\tcreated?: boolean;\n\t\t\t\t })\n\t\t\t)[]\n\t\t>(Array),\n\t\t// required: true,\n\t},\n\t/**\n\t * @description placeholder, the default is 'Please select'\n\t */\n\tplaceholder: {\n\t\ttype: String,\n\t},\n\t/**\n\t * @description whether select dropdown is teleported to the body\n\t */\n\tteleported: useTooltipContentProps.teleported,\n\t/**\n\t * @description when select dropdown is inactive and `persistent` is `false`, select dropdown will be destroyed\n\t */\n\tpersistent: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description custom class name for Select's dropdown\n\t */\n\tpopperClass: {\n\t\ttype: String,\n\t\tdefault: \"\",\n\t},\n\t/** @description custom style for Select's dropdown */\n\tpopperStyle: useTooltipContentProps.popperStyle,\n\t/**\n\t * @description [popper.js](https://popper.js.org/docs/v2/) parameters\n\t */\n\tpopperOptions: {\n\t\ttype: definePropType<Partial<Options>>(Object),\n\t\tdefault: (): Partial<Options> => ({}),\n\t},\n\t/**\n\t * @description whether search data from server\n\t */\n\tremote: Boolean,\n\t/** @description debounce delay during remote search, in milliseconds */\n\tdebounce: {\n\t\ttype: Number,\n\t\tdefault: 300,\n\t},\n\t/**\n\t * @description size of component\n\t */\n\tsize: useSizeProp,\n\t/**\n\t * @description configuration options, see the following table\n\t */\n\tprops: {\n\t\ttype: definePropType<Props>(Object),\n\t\tdefault: (): Required<Props> => ({\n\t\t\tlabel: \"label\",\n\t\t\tvalue: \"value\",\n\t\t\tdisabled: \"disabled\",\n\t\t\toptions: \"options\",\n\t\t}),\n\t},\n\t/**\n\t * @description unique identity key name for value, required when value is an object\n\t */\n\tvalueKey: {\n\t\ttype: String,\n\t\tdefault: \"value\",\n\t},\n\t/**\n\t * @description Controls whether the scrollbar is always displayed\n\t */\n\tscrollbarAlwaysOn: Boolean,\n\t/**\n\t * @description whether to trigger form validation\n\t */\n\tvalidateEvent: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description offset of the dropdown\n\t */\n\toffset: {\n\t\ttype: Number,\n\t\tdefault: 12,\n\t},\n\t/** @description whether to show the suffix icon during remote search */\n\tremoteShowSuffix: Boolean,\n\t/**\n\t * @description Determines whether the arrow is displayed\n\t */\n\tshowArrow: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/**\n\t * @description position of dropdown\n\t */\n\tplacement: {\n\t\ttype: definePropType<Placement>(String),\n\t\tdefault: \"bottom-start\",\n\t},\n\t/**\n\t * @description list of possible positions for dropdown\n\t */\n\tfallbackPlacements: {\n\t\ttype: definePropType<Placement[]>(Array),\n\t\tdefault: [\"bottom-start\", \"top-start\", \"right\", \"left\"],\n\t},\n\t/**\n\t * @description tag type\n\t */\n\ttagType: { ...tagProps.type, default: \"info\" },\n\t/**\n\t * @description tag effect\n\t */\n\ttagEffect: { ...tagProps.effect, default: \"light\" },\n\t/**\n\t * @description tabindex for input\n\t */\n\ttabindex: {\n\t\ttype: [String, Number],\n\t\tdefault: 0,\n\t},\n\t/**\n\t * @description which element the select dropdown appends to\n\t */\n\tappendTo: String,\n\t/** @description whether the dropdown width follows the input width, or a fixed width */\n\tfitInputWidth: {\n\t\ttype: [Boolean, Number],\n\t\tdefault: true,\n\t\tvalidator: (value: boolean | number): boolean => isBoolean(value) || isNumber(value),\n\t},\n\t/** @description select suffix icon */\n\tsuffixIcon: {\n\t\ttype: definePropType<string | Component>([String, Object, Function]),\n\t\tdefault: ArrowDown,\n\t},\n\t...useEmptyValuesProps,\n\t...useAriaProps([\"ariaLabel\"]),\n};\n\n/** 底层虚拟化选择器的运行时 Emits 定义。 */\nexport const selectV2Emits = {\n\t\"update:modelValue\": (_value: ElSelectorModelValue): boolean => true,\n\tchange: (_value: ElSelectorModelValue): boolean => true,\n\t\"end-reached\": (_direction: unknown): boolean => true,\n\t\"remove-tag\": (_value: unknown): boolean => true,\n\t\"visible-change\": (_visible: boolean): boolean => true,\n\tfocus: (_event: FocusEvent): boolean => true,\n\tblur: (_event: FocusEvent): boolean => true,\n\tclear: (): boolean => true,\n} as const;\n\n/** FaSelectV2 的运行时 Props 定义。 */\nexport const faSelectV2Props = {\n\t...SelectV2Props,\n\t/** @description whether Select is disabled 重载使其支持 ElForm*/\n\tdisabled: {\n\t\ttype: Boolean,\n\t\tdefault: undefined,\n\t},\n\t/** @description displayed text while loading data from server, default is 'Loading' */\n\tloadingText: {\n\t\ttype: String,\n\t\tdefault: \"加载中...\",\n\t},\n\t/** @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data' */\n\tnoMatchText: {\n\t\ttype: String,\n\t\tdefault: \"暂无匹配的数据\",\n\t},\n\t/** @description displayed text when there is no options, you can also use slot `empty`, default is 'No data' */\n\tnoDataText: {\n\t\ttype: String,\n\t\tdefault: \"暂无数据\",\n\t},\n\t/** @description whether to collapse tags to a text when multiple selecting */\n\tcollapseTags: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true */\n\tcollapseTagsTooltip: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: {\n\t\ttype: definePropType<ElSelectorModelValue>([String, Number, Boolean, Object, Array]),\n\t\tdefault: undefined,\n\t},\n\t/** @description v-model:label绑定值 */\n\tlabel: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"100%\",\n\t},\n\t/** @description 更多细节,只有使用slot的时候有用 */\n\tmoreDetail: Boolean,\n\t/** @description 懒加载远程数据,默认 true。当下拉框第一次显示的时候才会加载远程数据*/\n\tlazy: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 默认选中。不能和懒加载一起使用 */\n\tdefaultSelected: Boolean,\n\t/** @description 下拉框数据 */\n\tdata: {\n\t\ttype: definePropType<ElSelectorOutput[]>(Array),\n\t\tdefault: (): ElSelectorOutput[] => [],\n\t},\n\t/** 分页返回 */\n\tpageResult: Boolean,\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<((params?: unknown) => Promise<ElSelectorOutput[]>) | ((params?: PagedInput) => Promise<PagedResult<ElSelectorOutput>>)>(\n\t\t\tFunction\n\t\t),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n};\n\n/** FaSelectV2 的运行时 Emits 定义。 */\nexport const faSelectV2Emits = {\n\t...selectV2Emits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: ElSelectorModelValue): boolean =>\n\t\tisString(value) || isNumber(value) || isBoolean(value) || isObject(value) || isArray(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\t/** @description 数据改变 */\n\tdataChangeCallBack: (data: ElSelectorOutput[]): boolean => isArray(data),\n\t/** @description 改变 */\n\tchange: (_data: unknown, _value?: ElSelectorModelValue): boolean => true,\n};\n\n/** FaSelectV2 的插槽参数。 */\nexport interface FaSelectV2Slots extends Record<string, unknown> {\n\t/** @description FaSelectOption 默认内容插槽 */\n\tdefault: { item: ElSelectorOutput; index: number; disabled: boolean };\n\t/** @description 下拉列表顶部的内容 */\n\theader: never;\n\t/** @description 下拉列表底部的内容 */\n\tfooter: never;\n\t/** @description Select 组件头部内容 */\n\tprefix: never;\n\t/** @description 无选项时的列表 */\n\tempty: never;\n\t/** @description select 组件自定义标签内容 */\n\ttag: never;\n\t/** @description select 组件自定义 loading内容 */\n\tloading: never;\n\t/** @description select 组件自定义标签内容 */\n\tlabel: { label: string; value: string | number | boolean | object };\n}\n\nexport default defineComponent({\n\tname: \"FaSelectV2\",\n\tprops: faSelectV2Props,\n\temits: faSelectV2Emits,\n\tslots: makeSlots<FaSelectV2Slots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<ElSelectorModelValue>(),\n\t\t\tloading: false,\n\t\t\tselectorData: withDefineType<ElSelectorOutput[]>([]),\n\t\t\t/** 首次出现 */\n\t\t\tdebut: true,\n\t\t\t/** 回显 */\n\t\t\techo: props.data?.length > 0 ? false : true,\n\t\t\t/** 下次刷新 */\n\t\t\tnextRefresh: false,\n\t\t});\n\n\t\tconst selectV2Ref = ref<InstanceType<typeof ElSelectV2>>();\n\t\tlet requestVersion = 0;\n\n\t\tconst loadData = async (): Promise<void> => {\n\t\t\tconst currentRequestVersion = ++requestVersion;\n\t\t\t// 判断是否需要自动请求\n\t\t\tif (props.requestApi) {\n\t\t\t\tstate.loading = true;\n\t\t\t\tconst params = props.initParam ?? {};\n\t\t\t\ttry {\n\t\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\t// 这里不允许回显了\n\t\t\t\t\tstate.echo = false;\n\t\t\t\t\t// 判断是否为分页返回\n\t\t\t\t\tif (props.pageResult) {\n\t\t\t\t\t\tstate.selectorData = (resData as PagedResult<ElSelectorOutput>).rows ?? [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.selectorData = resData as ElSelectorOutput[];\n\t\t\t\t\t}\n\t\t\t\t\temit(\"dataChangeCallBack\", state.selectorData);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\tstate.selectorData = [];\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 这里不允许回显了\n\t\t\t\tstate.echo = false;\n\t\t\t\tstate.selectorData = props.data ?? [];\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = (value?: ElSelectorModelValue): void => {\n\t\t\t// 判断是否为多选\n\t\t\tif (props.multiple) {\n\t\t\t\t// value 必然是数组\n\t\t\t\tconst valueArr = Array.isArray(value) ? value : [];\n\t\t\t\tif (valueArr?.length === 0) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst dataList = state.selectorData.filter((item) => item.value !== undefined && valueArr.includes(item.value));\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = dataList.map((item) => item.label ?? \"\");\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", dataList, value);\n\t\t\t} else {\n\t\t\t\t// value 必然不是数组\n\t\t\t\tif (isNil(value)) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst data = state.selectorData.find((f) => f.value === value);\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = data?.label ?? null;\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", data ?? null, value);\n\t\t\t}\n\t\t};\n\n\t\tconst handleClear = (): void => {\n\t\t\tstate.value = null;\n\t\t\tselectedLabel.value = null;\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"clear\");\n\t\t};\n\n\t\tconst handleVisibleChange = async (visible: boolean): Promise<void> => {\n\t\t\tif (visible) {\n\t\t\t\tif (state.debut) {\n\t\t\t\t\t// 首次出现\n\t\t\t\t\tstate.debut = false;\n\t\t\t\t\t// 懒加载\n\t\t\t\t\t!props.defaultSelected && props.lazy && (await loadData());\n\t\t\t\t} else {\n\t\t\t\t\t// 判断再次出现是否需要刷新数据\n\t\t\t\t\tif (state.nextRefresh) {\n\t\t\t\t\t\tstate.nextRefresh = false;\n\t\t\t\t\t\tawait loadData();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"visible-change\", visible);\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.echo && !isNil(newValue)) {\n\t\t\t\t\tconst hasLabel = !isNil(props.label);\n\t\t\t\t\t// 判断是否为多选\n\t\t\t\t\tif (props.multiple) {\n\t\t\t\t\t\t// 判断是否为数组\n\t\t\t\t\t\tif (!Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectV2]\", \"当启用 multiple 时,传入的 modelValue 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && !isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectV2]\", \"当启用 multiple 时,传入的 modelValue:label 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = newValue\n\t\t\t\t\t\t\t// 最大选项截取\n\t\t\t\t\t\t\t.slice(0, props.multipleLimit > 0 ? props.multipleLimit : newValue.length)\n\t\t\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\t\t\tconst value: unknown = item;\n\t\t\t\t\t\t\t\tconst label: unknown = Array.isArray(props.label) ? props.label[index] : undefined;\n\t\t\t\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\t\t(typeof value === \"string\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"number\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"boolean\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"object\")\n\t\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t\t\t\t\tlabel: hasLabel && typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectV2]\", \"当禁用 multiple 时,传入的 modelValue 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaSelectV2]\", \"当禁用 multiple 时,传入的 modelValue:label 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\t\tlabel: typeof props.label === \"string\" ? props.label : undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.value = newValue;\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tif (props.defaultSelected) {\n\t\t\t\tawait loadData();\n\t\t\t\tconst firstItem = state.selectorData[0];\n\t\t\t\tif (firstItem?.value !== undefined) {\n\t\t\t\t\thandleChange(props.multiple ? [firstItem.value] : firstItem.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 判断是否为本地数据\n\t\t\telse if (!props.requestApi && props.data?.length > 0) {\n\t\t\t\tstate.debut = false;\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\t// 判断是否非默认选中,且未启用懒加载\n\t\t\telse if (!props.lazy) {\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\twatch(\n\t\t\t\t() => props.initParam,\n\t\t\t\t(newValue, oldValue) => {\n\t\t\t\t\tif (!isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tstate.nextRefresh = true;\n\t\t\t\t\t\tif (!isNil(state.value)) {\n\t\t\t\t\t\t\thandleChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\twatch(\n\t\t\t\t() => props.data,\n\t\t\t\t() => {\n\t\t\t\t\tif (!props.requestApi) {\n\t\t\t\t\t\treturn loadData();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ deep: true }\n\t\t\t);\n\t\t});\n\n\t\tconst elSelectV2Props = useProps(props, SelectV2Props, [\"modelValue\", \"popperClass\", \"loading\", \"options\", \"itemHeight\"]);\n\t\tconst elSelectV2Emits = useEmits(faSelectV2Emits, emit, [\"update:modelValue\", \"change\", \"clear\", \"visible-change\"]);\n\t\tconst elPopperClass = computed(() => {\n\t\t\tlet localClass = `fa-select-v2-dropdown ${props.popperClass}`;\n\t\t\tif (props.moreDetail) {\n\t\t\t\tlocalClass += ` fa-select-v2-dropdown__more-detail fa-select-v2-dropdown__more-detail-${_globalSize.value}`;\n\t\t\t}\n\t\t\treturn localClass;\n\t\t});\n\n\t\tuseRender(() => (\n\t\t\t<ElSelectV2\n\t\t\t\t{...elSelectV2Props.value}\n\t\t\t\t{...elSelectV2Emits.value}\n\t\t\t\tref={selectV2Ref}\n\t\t\t\tclass=\"fa-select-v2\"\n\t\t\t\tpopperClass={elPopperClass.value}\n\t\t\t\tstyle={{ width: addCssUnit(props.width) }}\n\t\t\t\tvModel={state.value}\n\t\t\t\tloading={state.loading}\n\t\t\t\toptions={state.selectorData}\n\t\t\t\titemHeight={props.itemHeight + (_globalSize.value === \"small\" ? 0 : 8)}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonClear={handleClear}\n\t\t\t\tonVisible-change={handleVisibleChange}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\t...(slots.default && {\n\t\t\t\t\t\tdefault: ({ item, index, disabled }: { item: ElSelectorOutput; index: number; disabled: boolean }): VNode[] =>\n\t\t\t\t\t\t\tslots.default?.({ item, index, disabled }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t\t...(slots.header && { header: (): VNode[] => slots.header?.() ?? [] }),\n\t\t\t\t\t...(slots.footer && { footer: (): VNode[] => slots.footer?.() ?? [] }),\n\t\t\t\t\t...(slots.prefix && { prefix: (): VNode[] => slots.prefix?.() ?? [] }),\n\t\t\t\t\t...(slots.empty && { empty: (): VNode[] => slots.empty?.() ?? [] }),\n\t\t\t\t\t...(slots.tag && { tag: (): VNode[] => slots.tag?.() ?? [] }),\n\t\t\t\t\t...(slots.loading && { loading: (): VNode[] => slots.loading?.() ?? [] }),\n\t\t\t\t\t...(slots.label && {\n\t\t\t\t\t\tlabel: ({ label, value }: { label: string; value: string | number | boolean | object }): VNode[] =>\n\t\t\t\t\t\t\tslots.label?.({ label, value }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElSelectV2>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 使选择器的输入框获取焦点 */\n\t\t\tfocus: computed(() => selectV2Ref.value?.focus),\n\t\t\t/** @description 使选择器的输入框失去焦点,并隐藏下拉框 */\n\t\t\tblur: computed(() => selectV2Ref.value?.blur),\n\t\t\t/** @description 获取当前选中的标签 */\n\t\t\tselectedLabel: computed(() => selectV2Ref.value?.selectedLabel),\n\t\t\t/** @description 滚动到指定选项索引。 */\n\t\t\tscrollTo: computed(() => selectV2Ref.value?.scrollTo),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 刷新 */\n\t\t\trefresh: loadData,\n\t\t\t/** @description 设置选择 */\n\t\t\tsetSelection: (value: Exclude<ElSelectorModelValue, null | undefined>) => handleChange(value),\n\t\t\t/** @description 清除选择 */\n\t\t\tclearSelection: () => handleChange(null),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport SelectV2, { SelectV2Props, faSelectV2Props } from \"./src/selectV2\";\nimport type { faSelectV2Emits } from \"./src/selectV2\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 面向大数据量选项并支持远程分页的虚拟化选择器组件。 */\nexport const FaSelectV2: TSXWithInstall<typeof SelectV2> = withInstall(SelectV2);\nexport default FaSelectV2;\n\nexport { SelectV2Props, faSelectV2Props };\nexport type { FaSelectV2Slots } from \"./src/selectV2\";\n\n/** FaSelectV2 暴露的组件实例类型。 */\nexport type FaSelectV2Instance = InstanceType<typeof SelectV2>;\n\n/** FaSelectV2 的完整 Props 类型。 */\nexport type FaSelectV2Props = ExtractPropTypes<typeof faSelectV2Props>;\n\n/** FaSelectV2 的 Emits 类型。 */\nexport type FaSelectV2Emits = typeof faSelectV2Emits;\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, defineComponent, nextTick, onMounted, reactive, ref, watch } from \"vue\";\nimport { Expand, Fold } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElInput, ElScrollbar, ElTree, treeEmits, treeProps, useGlobalSize } from \"element-plus\";\nimport { isArray, isBoolean, isNull, isNumber, isObject, isString } from \"lodash-unified\";\nimport { addCssUnit, definePropType, makeSlots, useEmits, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport type { FilterNodeMethodFunction, FilterValue, TreeNode, TreeNodeData } from \"./tree.props\";\nimport type { ElTreeOutput } from \"./tree.type\";\nimport type { ComponentInternalInstance, VNode } from \"vue\";\n\n/** FaTree 的运行时 Props 定义。 */\nexport const faTreeProps = {\n\t...treeProps,\n\t/** 树节点筛选方法。 */\n\tfilterNodeMethod: {\n\t\ttype: definePropType<FilterNodeMethodFunction>(Function),\n\t},\n\t/** @description whether Select is disabled 重载使其支持 ElForm*/\n\tdisabled: {\n\t\ttype: Boolean,\n\t\tdefault: undefined,\n\t},\n\t/** 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的 */\n\tnodeKey: {\n\t\ttype: String,\n\t\tdefault: \"value\",\n\t},\n\t/** @description 是否默认展开所有节点 */\n\tdefaultExpandAll: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 是否在点击节点的时候选中节点 */\n\tcheckOnClickNode: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 是否高亮当前选中节点 */\n\thighlightCurrent: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 点击折叠节点,需要开启 'expandOnClickNode' */\n\tcollapseOnClickNode: Boolean,\n\t/** @description v-model绑定值 */\n\tmodelValue: {\n\t\ttype: definePropType<string | number | boolean | object | null>([String, Number, Boolean, Object]),\n\t\tdefault: undefined,\n\t},\n\t/** @description v-model:label绑定值 */\n\tlabel: String,\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: 180,\n\t},\n\t/** @description 默认选择 */\n\tdefaultSelection: [String, Number],\n\t/** @description 标题 */\n\ttitle: String,\n\t/** @description 折叠 */\n\thamburger: Boolean,\n\t/** @description 隐藏全部 */\n\thideAll: Boolean,\n\t/** @description 隐藏过滤 */\n\thideFilter: Boolean,\n\t/** @description 全部值 */\n\tallValue: {\n\t\ttype: definePropType<string | number | boolean | object | null>([String, Number, Boolean, Object]),\n\t\tdefault: \"\",\n\t},\n\t/** @description 树形数据 */\n\tdata: {\n\t\ttype: definePropType<ElTreeOutput[]>(Array),\n\t\tdefault: (): ElTreeOutput[] => [],\n\t},\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: unknown) => Promise<ElTreeOutput[]>>(Function),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n};\n\n/** FaTree 的运行时 Emits 定义。 */\nexport const faTreeEmits = {\n\t...treeEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: string | number | boolean | object | null): boolean =>\n\t\tisString(value) || isNumber(value) || isBoolean(value) || isObject(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string): boolean => isString(value) || isNull(value),\n\t/** @description 数据改变 */\n\tdataChangeCallBack: (data: ElTreeOutput[]): boolean => isArray(data),\n\t/** @description 改变 */\n\tchange: (_data: ElTreeOutput, _node: TreeNode, _instance: ComponentInternalInstance, _event: MouseEvent): boolean => true,\n\t/** @description 节点点击 */\n\t\"node-click\": (_data: ElTreeOutput, _node: TreeNode, _instance: ComponentInternalInstance, _event: MouseEvent): boolean => true,\n};\n\n/** FaTree 的插槽参数。 */\nexport interface FaTreeSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: { node: TreeNode; data: ElTreeOutput };\n\t/** @description 当数据为空时自定义的内容 */\n\tempty: never;\n\t/** @description 显示内容插槽 */\n\tlabel: { node: TreeNode; data: ElTreeOutput };\n}\n\nexport default defineComponent({\n\tname: \"FaTree\",\n\tprops: faTreeProps,\n\temits: faTreeEmits,\n\tslots: makeSlots<FaTreeSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\t\tconst _globalSize = useGlobalSize();\n\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<string | number | boolean | object | null>(props.modelValue),\n\t\t\tloading: false,\n\t\t\tsearchValue: withDefineType<string>(),\n\t\t\torgTreeData: withDefineType<ElTreeOutput[]>([]),\n\t\t\ttreeData: withDefineType<ElTreeOutput[]>([]),\n\t\t\thamburger: props.hamburger || false,\n\t\t\twidth: computed(() => {\n\t\t\t\tif (state.hamburger) {\n\t\t\t\t\treturn \"130px\";\n\t\t\t\t} else {\n\t\t\t\t\tconst width = addCssUnit(props.width);\n\t\t\t\t\tif (_globalSize.value === \"small\") {\n\t\t\t\t\t\treturn `calc(${width} * 0.9)`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn width;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t});\n\n\t\t/** @description 只有一层节点 */\n\t\tconst fold = computed<boolean>(() => {\n\t\t\tconst childrenKey = props.props.children ?? \"children\";\n\t\t\treturn state.orgTreeData.every((item) => !Array.isArray(item[childrenKey]) || item[childrenKey].length === 0);\n\t\t});\n\n\t\tconst treeRef = ref<InstanceType<typeof ElTree>>();\n\t\tlet requestVersion = 0;\n\n\t\tconst loadData = async (): Promise<void> => {\n\t\t\tconst currentRequestVersion = ++requestVersion;\n\t\t\tlet curSelectedData: string | number | undefined;\n\t\t\tif (props.nodeKey) {\n\t\t\t\t// 记录原本选中的值\n\t\t\t\tconst currentKey: unknown = treeRef.value?.getCurrentKey();\n\t\t\t\tif (typeof currentKey === \"string\" || typeof currentKey === \"number\") curSelectedData = currentKey;\n\t\t\t}\n\t\t\tlet treeData: ElTreeOutput[];\n\t\t\t// 判断是否需要自动请求\n\t\t\tif (props.requestApi) {\n\t\t\t\tstate.loading = true;\n\t\t\t\tconst params = {\n\t\t\t\t\t...(typeof props.initParam === \"object\" && props.initParam !== null ? props.initParam : {}),\n\t\t\t\t\tsearchValue: state.searchValue,\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tconst responseData = await props.requestApi(params);\n\t\t\t\t\ttreeData = responseData.map((item) => ({ ...item }));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttreeData = props.data.map((item) => ({ ...item }));\n\t\t\t}\n\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\tif (!props.hideAll) {\n\t\t\t\ttreeData.unshift({ [props.nodeKey]: props.allValue, label: \"全部\", value: null, all: true });\n\t\t\t}\n\t\t\tstate.orgTreeData = treeData;\n\t\t\tstate.treeData = treeData;\n\t\t\temit(\"dataChangeCallBack\", state.treeData);\n\t\t\tconst selectedKey = curSelectedData ?? props.modelValue ?? props.defaultSelection;\n\t\t\tif (props.nodeKey && (typeof selectedKey === \"string\" || typeof selectedKey === \"number\")) {\n\t\t\t\tvoid nextTick(() => {\n\t\t\t\t\t// 设置原本选中的值\n\t\t\t\t\ttreeRef.value?.setCurrentKey(selectedKey);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleHamburgerClick = (): void => {\n\t\t\tif (state.hamburger) {\n\t\t\t\tstate.treeData = state.orgTreeData;\n\t\t\t} else {\n\t\t\t\t// 折叠只显示一级数据\n\t\t\t\tstate.treeData = state.orgTreeData.map((item) => ({ ...item, [props.props.children ?? \"children\"]: [] }));\n\t\t\t}\n\t\t\tstate.hamburger = !state.hamburger;\n\t\t};\n\n\t\tconst handleFilterNode = (value: FilterValue, data: TreeNodeData, child: TreeNode): boolean => {\n\t\t\tif (!value) return true;\n\t\t\tlet parentNode = child.parent,\n\t\t\t\tlabels = data[\"all\"] ? [data[\"label\"]] : [child.label],\n\t\t\t\tlevel = 1;\n\t\t\twhile (level < child.level && parentNode) {\n\t\t\t\tlabels = [...labels, parentNode.label];\n\t\t\t\tparentNode = parentNode.parent;\n\t\t\t\tlevel++;\n\t\t\t}\n\t\t\tconst filterText = typeof value === \"string\" || typeof value === \"number\" ? String(value) : \"\";\n\t\t\tconst result = labels.some((label) =>\n\t\t\t\ttypeof label === \"string\" || typeof label === \"number\" ? String(label).includes(filterText) : false\n\t\t\t);\n\t\t\tif (props.filterNodeMethod) {\n\t\t\t\treturn result && props.filterNodeMethod(value, data, child);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tconst handleNodeClick = (data: ElTreeOutput, node: TreeNode, instance: ComponentInternalInstance | null, event: MouseEvent): void => {\n\t\t\tif (!instance) return;\n\t\t\t// 判断是否开启点击展开节点,并且节点是折叠状态,则自动展开,否则需要点击箭头图标才能折叠或开启 'collapseOnClickNode'\n\t\t\tif (props.expandOnClickNode) {\n\t\t\t\tif (!node.expanded) {\n\t\t\t\t\tnode.expand();\n\t\t\t\t} else if (node.expanded && props.collapseOnClickNode) {\n\t\t\t\t\tnode.collapse();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!data[\"all\"] && (node.key === undefined || node.key === null)) return;\n\t\t\tstate.value = data[\"all\"] ? (props.allValue ?? null) : (node.key ?? null);\n\t\t\tselectedLabel.value = node.label;\n\t\t\temit(\"update:modelValue\", state.value);\n\t\t\temit(\"change\", data, node, instance, event);\n\t\t\temit(\"node-click\", data, node, instance, event);\n\t\t};\n\n\t\tonMounted(async () => {\n\t\t\tawait loadData();\n\t\t\twatch(\n\t\t\t\t() => props.data,\n\t\t\t\t() => {\n\t\t\t\t\tif (!props.requestApi) {\n\t\t\t\t\t\treturn loadData();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ deep: true }\n\t\t\t);\n\t\t});\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tstate.value = newValue ?? null;\n\t\t\t\tif (typeof newValue === \"string\" || typeof newValue === \"number\") treeRef.value?.setCurrentKey(newValue);\n\t\t\t}\n\t\t);\n\n\t\tconst elTreeProps = useProps(props, treeProps, [\"data\", \"expandOnClickNode\", \"filterNodeMethod\"]);\n\t\tconst elTreeEmits = useEmits(treeEmits, emit, [\"node-click\"]);\n\n\t\tuseRender(() => (\n\t\t\t<div\n\t\t\t\tclass={[\"el-card fa-tree\", `fa-tree-${_globalSize.value}`, { \"fa-tree__fold\": state.hamburger || fold.value }]}\n\t\t\t\tstyle={{ width: state.width }}\n\t\t\t\tvLoading={state.loading}\n\t\t\t>\n\t\t\t\t{(props.title !== undefined || props.hamburger) && (\n\t\t\t\t\t<div class=\"fa-tree__title\">\n\t\t\t\t\t\t{props.title && <h4>{props.title}</h4>}\n\t\t\t\t\t\t{props.hamburger &&\n\t\t\t\t\t\t\t(state.hamburger ? (\n\t\t\t\t\t\t\t\t<ElIcon onClick={handleHamburgerClick} title=\"展开\">\n\t\t\t\t\t\t\t\t\t<Expand />\n\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ElIcon onClick={handleHamburgerClick} title=\"折叠\">\n\t\t\t\t\t\t\t\t\t<Fold />\n\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{!props.hideFilter && (\n\t\t\t\t\t<ElInput\n\t\t\t\t\t\tclass=\"fa-tree__search-input\"\n\t\t\t\t\t\tvModel_trim={state.searchValue}\n\t\t\t\t\t\tplaceholder={state.hamburger ? \"关键字过滤\" : \"输入关键字进行过滤\"}\n\t\t\t\t\t\tclearable={Boolean(state.searchValue)}\n\t\t\t\t\t\tonInput={(value) => treeRef.value?.filter(value)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<ElScrollbar class=\"fa-tree__scrollbar\">\n\t\t\t\t\t<ElTree\n\t\t\t\t\t\t{...elTreeProps.value}\n\t\t\t\t\t\t{...elTreeEmits.value}\n\t\t\t\t\t\tref={treeRef}\n\t\t\t\t\t\tdata={state.treeData}\n\t\t\t\t\t\texpandOnClickNode={props.checkOnClickNode ? false : props.expandOnClickNode}\n\t\t\t\t\t\tfilterNodeMethod={handleFilterNode}\n\t\t\t\t\t\tonNode-click={handleNodeClick}\n\t\t\t\t\t>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\tdefault: ({ node, data }: { node: TreeNode; data: ElTreeOutput }) => (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"el-tree-node__label\"\n\t\t\t\t\t\t\t\t\ttitle={data[\"all\"] ? data.label : node.label}\n\t\t\t\t\t\t\t\t\tstyle={{ paddingLeft: fold.value ? \"3px\" : \"\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div>{data[\"all\"] ? data.label : slots.label ? slots.label({ node, data }) : node.label}</div>\n\t\t\t\t\t\t\t\t\t{node.key && data.showQuantity ? <span>[{data.quantity}]</span> : null}\n\t\t\t\t\t\t\t\t\t{!data[\"all\"] && slots.default && <span>{slots.default({ node, data })}</span>}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t...(slots.empty && { empty: (): VNode[] => slots.empty?.() ?? [] }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t</ElTree>\n\t\t\t\t</ElScrollbar>\n\t\t\t</div>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 过滤所有树节点,过滤后的节点将被隐藏 */\n\t\t\tfilter: computed(() => treeRef.value?.filter),\n\t\t\t/** @description 获取节点的唯一标识。 */\n\t\t\tgetNodeKey: computed(() => treeRef.value?.getNodeKey),\n\t\t\t/** @description 获取指定节点的路径数据。 */\n\t\t\tgetNodePath: computed(() => treeRef.value?.getNodePath),\n\t\t\t/** @description 为节点设置新数据,只有当设置 node-key 属性的时候才可用 */\n\t\t\tupdateKeyChildren: computed(() => treeRef.value?.updateKeyChildren),\n\t\t\t/** @description 如果节点可以被选中,(show-checkbox 为 true), 本方法将返回当前选中节点的数组 */\n\t\t\tgetCheckedNodes: computed(() => treeRef.value?.getCheckedNodes),\n\t\t\t/** @description 设置目前勾选的节点,使用此方法必须提前设置 node-key 属性 */\n\t\t\tsetCheckedNodes: computed(() => treeRef.value?.setCheckedNodes),\n\t\t\t/** @description \t若节点可用被选中 (show-checkbox 为 true), 它将返回当前选中节点 key 的数组 */\n\t\t\tgetCheckedKeys: computed(() => treeRef.value?.getCheckedKeys),\n\t\t\t/** @description 设置目前选中的节点,使用此方法必须设置 node-key 属性 */\n\t\t\tsetCheckedKeys: computed(() => treeRef.value?.setCheckedKeys),\n\t\t\t/** @description 设置节点是否被选中, 使用此方法必须设置 node-key 属性 */\n\t\t\tsetChecked: computed(() => treeRef.value?.setChecked),\n\t\t\t/** @description 如果节点可用被选中 (show-checkbox 为 true), 它将返回当前半选中的节点组成的数组 */\n\t\t\tgetHalfCheckedNodes: computed(() => treeRef.value?.getHalfCheckedNodes),\n\t\t\t/** @description 若节点可被选中(show-checkbox 为 true),则返回目前半选中的节点的 key 所组成的数组 */\n\t\t\tgetHalfCheckedKeys: computed(() => treeRef.value?.getHalfCheckedKeys),\n\t\t\t/** @description 返回当前被选中节点的数据 (如果没有则返回 null) */\n\t\t\tgetCurrentKey: computed(() => treeRef.value?.getCurrentKey),\n\t\t\t/** @description 返回当前被选中节点的数据 (如果没有则返回 null) */\n\t\t\tgetCurrentNode: computed(() => treeRef.value?.getCurrentNode),\n\t\t\t/** @description 通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性 */\n\t\t\tsetCurrentKey: computed(() => treeRef.value?.setCurrentKey),\n\t\t\t/** @description 设置节点为选中状态,使用此方法必须设置 node-key 属性 */\n\t\t\tsetCurrentNode: computed(() => treeRef.value?.setCurrentNode),\n\t\t\t/** @description 根据 data 或者 key 拿到 Tree 组件中的 node */\n\t\t\tgetNode: computed(() => treeRef.value?.getNode),\n\t\t\t/** @description 删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性 */\n\t\t\tremove: computed(() => treeRef.value?.remove),\n\t\t\t/** @description 为 Tree 中的一个节点追加一个子节点 */\n\t\t\tappend: computed(() => treeRef.value?.append),\n\t\t\t/** @description 在 Tree 中给定节点前插入一个节点 */\n\t\t\tinsertBefore: computed(() => treeRef.value?.insertBefore),\n\t\t\t/** @description 在 Tree 中给定节点后插入一个节点 */\n\t\t\tinsertAfter: computed(() => treeRef.value?.insertAfter),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 刷新 */\n\t\t\trefresh: loadData,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Tree, { faTreeEmits, faTreeProps } from \"./src/tree\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持远程加载、筛选和节点操作的树组件。 */\nexport const FaTree: TSXWithInstall<typeof Tree> = withInstall(Tree);\nexport default FaTree;\n\nexport { faTreeProps, faTreeEmits };\nexport type { FaTreeSlots } from \"./src/tree\";\nexport * from \"./src/tree.type\";\n\n/** FaTree 暴露的组件实例类型。 */\nexport type FaTreeInstance = InstanceType<typeof Tree>;\n\n/** FaTree 的完整 Props 类型。 */\nexport type FaTreeProps = ExtractPropTypes<typeof faTreeProps>;\n\n/** FaTree 的 Emits 类型。 */\nexport type FaTreeEmits = typeof faTreeEmits;\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from \"vue\";\nimport { ElTreeSelect, selectEmits, selectProps, treeEmits, treeProps } from \"element-plus\";\nimport { isArray, isBoolean, isEqual, isNil, isNull, isNumber, isObject, isString } from \"lodash-unified\";\nimport { addCssUnit, definePropType, makeSlots, useEmits, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport { type SelectComponentProps } from \"../../select/src/select\";\nimport type { ElSelectorModelValue, ElSelectorOutput, ElSelectorValue } from \"../../select\";\nimport type { FilterNodeMethodFunction, FilterValue, TreeNode, TreeNodeData } from \"../../tree/src/tree.props\";\nimport type { SelectInstance, TreeInstance } from \"element-plus\";\nimport type { ComponentInternalInstance, VNode } from \"vue\";\n\n/** 补充 Element Plus TreeSelect 运行时支持但类型声明缺失的 clear 事件。 */\ntype ElTreeSelectWithClearType = typeof ElTreeSelect &\n\t(new () => {\n\t\t$props: InstanceType<typeof ElTreeSelect>[\"$props\"] & {\n\t\t\tonClear?: () => void;\n\t\t};\n\t});\n\nconst ElTreeSelectWithClear = ElTreeSelect as ElTreeSelectWithClearType;\n\n/** Element Plus TreeSelect 运行时实际暴露的方法集合。 */\ntype ElTreeSelectExposes = Pick<SelectInstance, \"focus\" | \"blur\" | \"selectedLabel\"> &\n\tPick<\n\t\tTreeInstance,\n\t\t| \"filter\"\n\t\t| \"updateKeyChildren\"\n\t\t| \"getCheckedNodes\"\n\t\t| \"setCheckedNodes\"\n\t\t| \"getCheckedKeys\"\n\t\t| \"setCheckedKeys\"\n\t\t| \"setChecked\"\n\t\t| \"getHalfCheckedNodes\"\n\t\t| \"getHalfCheckedKeys\"\n\t\t| \"getCurrentKey\"\n\t\t| \"getCurrentNode\"\n\t\t| \"setCurrentKey\"\n\t\t| \"setCurrentNode\"\n\t\t| \"getNode\"\n\t\t| \"remove\"\n\t\t| \"append\"\n\t\t| \"insertBefore\"\n\t\t| \"insertAfter\"\n\t> & {\n\t\ttreeRef: TreeInstance;\n\t\tselectRef: SelectInstance;\n\t};\n\n/** FaTreeSelect 的运行时 Props 定义。 */\nexport const faTreeSelectProps = {\n\t...selectProps,\n\t...treeProps,\n\t/** 树节点筛选方法。 */\n\tfilterNodeMethod: {\n\t\ttype: definePropType<FilterNodeMethodFunction>(Function),\n\t},\n\t/**\n\t * 懒加载节点的缓存数据,结构与数据相同,用于获取未加载数据的标签\n\t * @description The cached data of the lazy node, the structure is the same as the data, used to get the label of the unloaded data\n\t */\n\tcacheData: {\n\t\ttype: definePropType<\n\t\t\t{\n\t\t\t\tvalue: string | number | boolean | object;\n\t\t\t\tcurrentLabel: string | number;\n\t\t\t\tisDisabled: boolean;\n\t\t\t}[]\n\t\t>(Array),\n\t\tdefault: [] as {\n\t\t\tvalue: string | number | boolean | object;\n\t\t\tcurrentLabel: string | number;\n\t\t\tisDisabled: boolean;\n\t\t}[],\n\t},\n\t/** @description whether Select is disabled 重载使其支持 ElForm*/\n\tdisabled: {\n\t\ttype: Boolean,\n\t\tdefault: undefined,\n\t},\n\t/** @description displayed text while loading data from server, default is 'Loading' */\n\tloadingText: {\n\t\ttype: String,\n\t\tdefault: \"加载中...\",\n\t},\n\t/** @description displayed text when no data matches the filtering query, you can also use slot `empty`, default is 'No matching data' */\n\tnoMatchText: {\n\t\ttype: String,\n\t\tdefault: \"暂无匹配的数据\",\n\t},\n\t/** @description displayed text when there is no options, you can also use slot `empty`, default is 'No data' */\n\tnoDataText: {\n\t\ttype: String,\n\t\tdefault: \"暂无数据\",\n\t},\n\t/** @description whether to collapse tags to a text when multiple selecting */\n\tcollapseTags: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description whether show all selected tags when mouse hover text of collapse-tags. To use this, `collapse-tags` must be true */\n\tcollapseTagsTooltip: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的 */\n\tnodeKey: {\n\t\ttype: String,\n\t\tdefault: \"value\",\n\t},\n\t/** @description 是否默认展开所有节点 */\n\tdefaultExpandAll: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 是否在点击节点的时候选中节点 */\n\tcheckOnClickNode: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 是否高亮当前选中节点 */\n\thighlightCurrent: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。 */\n\texpandOnClickNode: Boolean,\n\t/** @description 点击折叠节点,需要开启 'expandOnClickNode' */\n\tcollapseOnClickNode: Boolean,\n\t/** @description v-model绑定值 */\n\tmodelValue: {\n\t\ttype: definePropType<ElSelectorModelValue>([String, Number, Boolean, Object, Array]),\n\t\tdefault: undefined,\n\t},\n\t/** @description v-model:label绑定值 */\n\tlabel: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: \"100%\",\n\t},\n\t/** @description 更多细节,只有使用slot的时候有用 */\n\tmoreDetail: Boolean,\n\t/** @description 懒加载远程数据,默认 true。当下拉框第一次显示的时候才会加载远程数据*/\n\tlazy: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description 默认选中。不能和懒加载一起使用 */\n\tdefaultSelected: Boolean,\n\t/** @description 配置选项 */\n\tprops: {\n\t\ttype: definePropType<SelectComponentProps>(Object),\n\t\tdefault: (): Partial<SelectComponentProps> => ({\n\t\t\tlabel: \"label\",\n\t\t\thide: \"hide\",\n\t\t\tdisabled: \"disabled\",\n\t\t\tchildren: \"children\",\n\t\t}),\n\t},\n\t/** @description 下拉框数据 */\n\tdata: {\n\t\ttype: definePropType<ElSelectorOutput[]>(Array),\n\t\tdefault: (): ElSelectorOutput[] => [],\n\t},\n\t/** @description 请求api */\n\trequestApi: {\n\t\ttype: definePropType<(params?: unknown) => Promise<ElSelectorOutput[]>>(Function),\n\t},\n\t/** 初始化参数 */\n\tinitParam: definePropType<unknown>([String, Number, Object]),\n};\n\n/** FaTreeSelect 的运行时 Emits 定义。 */\nexport const faTreeSelectEmits = {\n\t...selectEmits,\n\t...treeEmits,\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: ElSelectorModelValue): boolean =>\n\t\tisString(value) || isNumber(value) || isBoolean(value) || isObject(value) || isArray(value) || isNull(value),\n\t/** @description v-model:label 回调 */\n\t\"update:label\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\n\t/** @description 数据改变 */\n\tdataChangeCallBack: (data: ElSelectorOutput[]): boolean => isArray(data),\n\t/** @description 改变 */\n\tchange: (_data: unknown, _value?: ElSelectorModelValue): boolean => true,\n\t/** @description 节点点击 */\n\t\"node-click\": (_data: ElSelectorOutput, _node: TreeNode, _instance: ComponentInternalInstance, _event: MouseEvent): boolean => true,\n};\n\n/** FaTreeSelect 的插槽参数。 */\nexport interface FaTreeSelectSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: { node: TreeNode; data: ElSelectorOutput };\n\n\t/** @description 下拉列表顶部的内容 */\n\theader: never;\n\t/** @description 下拉列表底部的内容 */\n\tfooter: never;\n\t/** @description Select 组件头部内容 */\n\tprefix: never;\n\t/** @description 无选项时的列表 */\n\tempty: never;\n\t/** @description select 组件自定义标签内容 */\n\ttag: never;\n\t/** @description select 组件自定义 loading内容 */\n\tloading: never;\n\t/** @description select 组件自定义标签内容 */\n\tlabel: { label: string; value: string | number | boolean | object };\n}\n\nexport default defineComponent({\n\tname: \"FaTreeSelect\",\n\tprops: faTreeSelectProps,\n\temits: faTreeSelectEmits,\n\tslots: makeSlots<FaTreeSelectSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst selectedLabel = useVModel(props, \"label\", emit, { passive: true });\n\n\t\tconst state = reactive({\n\t\t\tvalue: withDefineType<ElSelectorModelValue>(),\n\t\t\tloading: false,\n\t\t\tselectorData: withDefineType<ElSelectorOutput[]>([]),\n\t\t\t/** 首次出现 */\n\t\t\tdebut: true,\n\t\t\t/** 回显 */\n\t\t\techo: props.data?.length > 0 ? false : true,\n\t\t\t/** 下次刷新 */\n\t\t\tnextRefresh: false,\n\t\t});\n\n\t\tconst treeSelectRef = ref<ElTreeSelectExposes>();\n\t\tlet requestVersion = 0;\n\n\t\tconst handleData = (data: ElSelectorOutput[]): ElSelectorOutput[] => {\n\t\t\treturn data\n\t\t\t\t.map((item): ElSelectorOutput => {\n\t\t\t\t\tconst value = item[props.nodeKey];\n\t\t\t\t\tconst label = typeof props.props.label === \"function\" ? props.props.label(item) : item[props.props.label ?? \"label\"];\n\t\t\t\t\tconst hide = typeof props.props.hide === \"function\" ? props.props.hide(item) : item[props.props.hide ?? \"hide\"];\n\t\t\t\t\tconst disabled =\n\t\t\t\t\t\ttypeof props.props.disabled === \"function\" ? props.props.disabled(item) : item[props.props.disabled ?? \"disabled\"];\n\t\t\t\t\tconst children = item[props.props.children ?? \"children\"];\n\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t(typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"object\")\n\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tchildren: Array.isArray(children) ? handleData(children as ElSelectorOutput[]) : [],\n\t\t\t\t\t\tdisabled: typeof disabled === \"boolean\" ? disabled : undefined,\n\t\t\t\t\t\thide: typeof hide === \"boolean\" ? hide : undefined,\n\t\t\t\t\t\tlabel: typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((item) => item.hide !== true);\n\t\t};\n\n\t\tconst loadData = async (): Promise<void> => {\n\t\t\tconst currentRequestVersion = ++requestVersion;\n\t\t\t// 判断是否需要自动请求\n\t\t\tif (props.requestApi) {\n\t\t\t\tstate.loading = true;\n\t\t\t\tconst params = props.initParam ?? {};\n\t\t\t\ttry {\n\t\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\t// 这里不允许回显了\n\t\t\t\t\tstate.echo = false;\n\t\t\t\t\tstate.selectorData = handleData(resData);\n\t\t\t\t\temit(\"dataChangeCallBack\", state.selectorData);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t\tstate.selectorData = [];\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 这里不允许回显了\n\t\t\t\tstate.echo = false;\n\t\t\t\tstate.selectorData = handleData(props.data);\n\t\t\t}\n\t\t};\n\n\t\tconst handleFilterNode = (value: FilterValue, data: TreeNodeData, child: TreeNode): boolean => {\n\t\t\tif (!value) return true;\n\t\t\tlet parentNode = child.parent,\n\t\t\t\tlabels = [child.label],\n\t\t\t\tlevel = 1;\n\t\t\twhile (level < child.level && parentNode) {\n\t\t\t\tlabels = [...labels, parentNode.label];\n\t\t\t\tparentNode = parentNode.parent;\n\t\t\t\tlevel++;\n\t\t\t}\n\t\t\tconst filterText = typeof value === \"string\" || typeof value === \"number\" ? String(value) : \"\";\n\t\t\tconst result = labels.some((label) => label.includes(filterText));\n\t\t\tif (props.filterNodeMethod) {\n\t\t\t\treturn result && props.filterNodeMethod(value, data, child);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\tconst handleChange = (value?: ElSelectorModelValue, data?: ElSelectorOutput): void => {\n\t\t\t// 判断是否为多选\n\t\t\tif (props.multiple) {\n\t\t\t\t// value 必然是数组\n\t\t\t\tconst valueArr = Array.isArray(value) ? value : [];\n\t\t\t\tif (valueArr?.length === 0) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst dataList = state.selectorData.filter((item) => item.value !== undefined && valueArr.includes(item.value));\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = dataList.map((item) => item.label ?? \"\");\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", dataList, value);\n\t\t\t} else {\n\t\t\t\t// value 必然不是数组\n\t\t\t\tif (isNil(value)) {\n\t\t\t\t\tstate.value = null;\n\t\t\t\t\tselectedLabel.value = null;\n\t\t\t\t\temit(\"update:modelValue\", null);\n\t\t\t\t\temit(\"change\", null, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdata ??= state.selectorData.find((f) => f.value === value);\n\t\t\t\tstate.value = value;\n\t\t\t\tselectedLabel.value = data?.label ?? null;\n\t\t\t\temit(\"update:modelValue\", value);\n\t\t\t\temit(\"change\", data ?? null, value);\n\t\t\t}\n\t\t};\n\n\t\tconst handleClear = (): void => {\n\t\t\tstate.value = null;\n\t\t\tselectedLabel.value = null;\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"clear\");\n\t\t};\n\n\t\tconst handleNodeClick = (data: ElSelectorOutput, node: TreeNode, instance: ComponentInternalInstance | null, event: MouseEvent): void => {\n\t\t\tif (!instance) return;\n\t\t\t// 判断是否开启点击展开节点,并且节点是折叠状态,则自动展开,否则需要点击箭头图标才能折叠或开启 'collapseOnClickNode'\n\t\t\tif (props.expandOnClickNode) {\n\t\t\t\tif (!node.expanded) {\n\t\t\t\t\tnode.expand();\n\t\t\t\t} else if (node.expanded && props.collapseOnClickNode) {\n\t\t\t\t\tnode.collapse();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 判断是否开启了 checkStrictly\n\t\t\tif (props.checkStrictly) {\n\t\t\t\thandleChange(data.value, data);\n\t\t\t} else {\n\t\t\t\tif (node.isLeaf) {\n\t\t\t\t\thandleChange(data.value, data);\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"node-click\", data, node, instance, event);\n\t\t};\n\n\t\t/**\n\t\t * 下拉框出现/隐藏时触发\n\t\t */\n\t\tconst handleVisibleChange = async (visible: boolean): Promise<void> => {\n\t\t\tif (visible) {\n\t\t\t\tif (state.debut) {\n\t\t\t\t\t// 首次出现\n\t\t\t\t\tstate.debut = false;\n\t\t\t\t\t// 懒加载\n\t\t\t\t\tprops.lazy && (await loadData());\n\t\t\t\t} else {\n\t\t\t\t\t// 判断再次出现是否需要刷新数据\n\t\t\t\t\tif (state.nextRefresh) {\n\t\t\t\t\t\tstate.nextRefresh = false;\n\t\t\t\t\t\tawait loadData();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\temit(\"visible-change\", visible);\n\t\t};\n\n\t\twatch(\n\t\t\t() => props.modelValue,\n\t\t\t(newValue) => {\n\t\t\t\tif (state.echo && !isNil(newValue)) {\n\t\t\t\t\tconst hasLabel = !isNil(props.label);\n\t\t\t\t\t// 判断是否为多选\n\t\t\t\t\tif (props.multiple) {\n\t\t\t\t\t\t// 判断是否为数组\n\t\t\t\t\t\tif (!Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaTreeSelect]\", \"当启用 multiple 时,传入的 modelValue 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && !isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaTreeSelect]\", \"当启用 multiple 时,传入的 modelValue:label 必须是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = newValue\n\t\t\t\t\t\t\t// 最大选项截取\n\t\t\t\t\t\t\t.slice(0, props.multipleLimit > 0 ? props.multipleLimit : newValue.length)\n\t\t\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\t\t\tconst value: unknown = item;\n\t\t\t\t\t\t\t\tconst label: unknown = Array.isArray(props.label) ? props.label[index] : undefined;\n\t\t\t\t\t\t\t\tconst selectorValue: ElSelectorValue | undefined =\n\t\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\t\t(typeof value === \"string\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"number\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"boolean\" ||\n\t\t\t\t\t\t\t\t\t\ttypeof value === \"object\")\n\t\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tvalue: selectorValue,\n\t\t\t\t\t\t\t\t\tlabel: hasLabel && typeof label === \"string\" ? label : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaTreeSelect]\", \"当禁用 multiple 时,传入的 modelValue 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hasLabel && isArray(props.label)) {\n\t\t\t\t\t\t\tconsole.error(\"[Fast:FaTreeSelect]\", \"当禁用 multiple 时,传入的 modelValue:label 不能是 Array。\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.selectorData = [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\t\tlabel: typeof props.label === \"string\" ? props.label : undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.value = newValue;\n\t\t\t},\n\t\t\t{\n\t\t\t\timmediate: true,\n\t\t\t}\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tif (props.defaultSelected) {\n\t\t\t\tawait loadData();\n\t\t\t\tconst firstItem = state.selectorData[0];\n\t\t\t\tif (firstItem?.value !== undefined) {\n\t\t\t\t\tif (props.multiple) {\n\t\t\t\t\t\thandleChange([firstItem.value]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandleChange(firstItem.value, firstItem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 判断是否为本地数据\n\t\t\telse if (!props.requestApi && props.data?.length > 0) {\n\t\t\t\tstate.debut = false;\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\t// 判断是否非默认选中,且未启用懒加载\n\t\t\telse if (!props.lazy) {\n\t\t\t\tawait loadData();\n\t\t\t}\n\t\t\twatch(\n\t\t\t\t() => props.initParam,\n\t\t\t\t(newValue, oldValue) => {\n\t\t\t\t\tif (!isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tstate.nextRefresh = true;\n\t\t\t\t\t\tif (!isNil(state.value)) {\n\t\t\t\t\t\t\thandleChange();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\twatch(\n\t\t\t\t() => props.data,\n\t\t\t\t() => {\n\t\t\t\t\tif (!props.requestApi) {\n\t\t\t\t\t\treturn loadData();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ deep: true }\n\t\t\t);\n\t\t});\n\n\t\tconst elTreeSelectProps = useProps(props, { ...selectProps, ...treeProps }, [\n\t\t\t\"modelValue\",\n\t\t\t\"popperClass\",\n\t\t\t\"lazy\",\n\t\t\t\"loading\",\n\t\t\t\"expandOnClickNode\",\n\t\t\t\"filterNodeMethod\",\n\t\t\t\"props\",\n\t\t]);\n\t\tconst elTreeSelectEmits = useEmits({ ...selectEmits, ...treeEmits }, emit, [\"update:modelValue\", \"clear\", \"visible-change\", \"node-click\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElTreeSelectWithClear\n\t\t\t\t{...elTreeSelectProps.value}\n\t\t\t\t{...elTreeSelectEmits.value}\n\t\t\t\tref={treeSelectRef}\n\t\t\t\tclass=\"fa-tree-select\"\n\t\t\t\tpopperClass={[\"fa-tree-select-dropdown\", props.popperClass]}\n\t\t\t\tstyle={{ width: addCssUnit(props.width) }}\n\t\t\t\tvModel={state.value}\n\t\t\t\tlazy={false}\n\t\t\t\tloading={state.loading}\n\t\t\t\tdata={state.selectorData}\n\t\t\t\texpandOnClickNode={props.checkOnClickNode ? false : props.expandOnClickNode}\n\t\t\t\tfilterNodeMethod={handleFilterNode as typeof props.filterNodeMethod}\n\t\t\t\tonNode-click={handleNodeClick}\n\t\t\t\tonClear={handleClear}\n\t\t\t\tonVisible-change={handleVisibleChange}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\t...(slots.default && {\n\t\t\t\t\t\tdefault: ({ node, data }: { node: TreeNode; data: ElSelectorOutput }): VNode[] => slots.default?.({ node, data }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t\t...(slots.header && { header: (): VNode[] => slots.header?.() ?? [] }),\n\t\t\t\t\t...(slots.footer && { footer: (): VNode[] => slots.footer?.() ?? [] }),\n\t\t\t\t\t...(slots.prefix && { prefix: (): VNode[] => slots.prefix?.() ?? [] }),\n\t\t\t\t\t...(slots.empty && { empty: (): VNode[] => slots.empty?.() ?? [] }),\n\t\t\t\t\t...(slots.tag && { tag: (): VNode[] => slots.tag?.() ?? [] }),\n\t\t\t\t\t...(slots.loading && { loading: (): VNode[] => slots.loading?.() ?? [] }),\n\t\t\t\t\t...(slots.label && {\n\t\t\t\t\t\tlabel: ({ label, value }: { label: string; value: string | number | boolean | object }): VNode[] =>\n\t\t\t\t\t\t\tslots.label?.({ label, value }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElTreeSelectWithClear>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 使选择器的输入框获取焦点。 */\n\t\t\tfocus: computed(() => treeSelectRef.value?.focus),\n\t\t\t/** @description 使选择器的输入框失去焦点,并隐藏下拉框。 */\n\t\t\tblur: computed(() => treeSelectRef.value?.blur),\n\t\t\t/** @description 获取当前选中的标签。 */\n\t\t\tselectedLabel: computed(() => treeSelectRef.value?.selectedLabel),\n\t\t\t/** @description 过滤所有树节点,过滤后的节点将被隐藏。 */\n\t\t\tfilter: computed(() => treeSelectRef.value?.filter),\n\t\t\t/** @description 为节点设置新数据,只有设置 node-key 时可用。 */\n\t\t\tupdateKeyChildren: computed(() => treeSelectRef.value?.updateKeyChildren),\n\t\t\t/** @description 获取当前选中的节点。 */\n\t\t\tgetCheckedNodes: computed(() => treeSelectRef.value?.getCheckedNodes),\n\t\t\t/** @description 设置当前选中的节点。 */\n\t\t\tsetCheckedNodes: computed(() => treeSelectRef.value?.setCheckedNodes),\n\t\t\t/** @description 获取当前选中的节点 Key。 */\n\t\t\tgetCheckedKeys: computed(() => treeSelectRef.value?.getCheckedKeys),\n\t\t\t/** @description 设置当前选中的节点 Key。 */\n\t\t\tsetCheckedKeys: computed(() => treeSelectRef.value?.setCheckedKeys),\n\t\t\t/** @description 设置节点选中状态。 */\n\t\t\tsetChecked: computed(() => treeSelectRef.value?.setChecked),\n\t\t\t/** @description 获取当前半选中的节点。 */\n\t\t\tgetHalfCheckedNodes: computed(() => treeSelectRef.value?.getHalfCheckedNodes),\n\t\t\t/** @description 获取当前半选中的节点 Key。 */\n\t\t\tgetHalfCheckedKeys: computed(() => treeSelectRef.value?.getHalfCheckedKeys),\n\t\t\t/** @description 获取当前节点 Key。 */\n\t\t\tgetCurrentKey: computed(() => treeSelectRef.value?.getCurrentKey),\n\t\t\t/** @description 获取当前节点。 */\n\t\t\tgetCurrentNode: computed(() => treeSelectRef.value?.getCurrentNode),\n\t\t\t/** @description 设置当前节点 Key。 */\n\t\t\tsetCurrentKey: computed(() => treeSelectRef.value?.setCurrentKey),\n\t\t\t/** @description 设置当前节点。 */\n\t\t\tsetCurrentNode: computed(() => treeSelectRef.value?.setCurrentNode),\n\t\t\t/** @description 根据数据或 Key 获取节点。 */\n\t\t\tgetNode: computed(() => treeSelectRef.value?.getNode),\n\t\t\t/** @description 删除节点。 */\n\t\t\tremove: computed(() => treeSelectRef.value?.remove),\n\t\t\t/** @description 追加子节点。 */\n\t\t\tappend: computed(() => treeSelectRef.value?.append),\n\t\t\t/** @description 在指定节点前插入节点。 */\n\t\t\tinsertBefore: computed(() => treeSelectRef.value?.insertBefore),\n\t\t\t/** @description 在指定节点后插入节点。 */\n\t\t\tinsertAfter: computed(() => treeSelectRef.value?.insertAfter),\n\t\t\t/** @description Element Plus Tree 实例。 */\n\t\t\ttreeRef: computed(() => treeSelectRef.value?.treeRef),\n\t\t\t/** @description Element Plus Select 实例。 */\n\t\t\tselectRef: computed(() => treeSelectRef.value?.selectRef),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading: computed(() => state.loading),\n\t\t\t/** @description 刷新 */\n\t\t\trefresh: loadData,\n\t\t\t/** @description 设置选择 */\n\t\t\tsetSelection: (value: Exclude<ElSelectorModelValue, null | undefined>) => handleChange(value),\n\t\t\t/** @description 清除选择 */\n\t\t\tclearSelection: () => handleChange(null),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport TreeSelect, { faTreeSelectEmits, faTreeSelectProps } from \"./src/treeSelect\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 组合树结构浏览与选择交互的树选择器组件。 */\nexport const FaTreeSelect: TSXWithInstall<typeof TreeSelect> = withInstall(TreeSelect);\nexport default FaTreeSelect;\n\nexport { faTreeSelectProps, faTreeSelectEmits };\nexport type { FaTreeSelectSlots } from \"./src/treeSelect\";\n\n/** FaTreeSelect 暴露的组件实例类型。 */\nexport type FaTreeSelectInstance = InstanceType<typeof TreeSelect>;\n\n/** FaTreeSelect 的完整 Props 类型。 */\nexport type FaTreeSelectProps = ExtractPropTypes<typeof faTreeSelectProps>;\n\n/** FaTreeSelect 的 Emits 类型。 */\nexport type FaTreeSelectEmits = typeof faTreeSelectEmits;\n","/*!\r\n * decimal.js v10.6.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n inexact, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or ±Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\r\n\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n // See https://github.com/MikeMcl/decimal.js/pull/217\r\n x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is ±Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with different signs.\r\n // Return NaN if both are ±Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is ±Infinity or x is ±0.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with the same sign.\r\n // Return NaN if both are ±Infinity with different signs.\r\n // Return y if x is finite and y is ±Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, ±Infinity or ±0...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n ? NaN\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n // Return ±0 if either is ±0.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either ±Infinity, NaN or ±0?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[0] += k;\r\n for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\nfunction maxOrMin(Ctor, args, n) {\r\n var k, y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n\r\n // NaN?\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n }\r\n\r\n k = x.cmp(y);\r\n\r\n if (k === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n}\r\n\r\n\r\n// ±Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both ±Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is ±Infinity or y is ±0\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is ±Infinity or x is ±0\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|bigint|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Infinity or NaN?\r\n if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n if (t === 'string') {\r\n if ((i = v.charCodeAt(0)) === 45) { // minus sign\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n if (i === 43) v = v.slice(1); // plus sign\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n if (t === 'bigint') {\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n return maxOrMin(this, arguments, -1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n return maxOrMin(this, arguments, 1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n","import { ElMessage } from \"element-plus\";\nimport { FaMimeType } from \"../../../constants\";\ntype UploadData = Record<string, string | Blob | [string | Blob, string] | string[]>;\n\ninterface UploadRequestConfig {\n\tmethod?: string;\n\theaders?: HeadersInit;\n\twithCredentials?: boolean;\n}\n\n/** 将 Element Plus 上传附加数据写入 FormData。 */\nconst appendUploadData = (formData: FormData, params: UploadData): void => {\n\tfor (const [key, value] of Object.entries(params)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 2 && value[0] instanceof Blob && typeof value[1] === \"string\") {\n\t\t\t\tformData.append(key, value[0], value[1]);\n\t\t\t} else {\n\t\t\t\tvalue.forEach((item) => formData.append(key, item));\n\t\t\t}\n\t\t} else {\n\t\t\tformData.append(key, value);\n\t\t}\n\t}\n};\n\nconst FaMimeTypeNames: Record<string, keyof typeof FaMimeType> = {};\n\nfor (const [kName, vAccept] of Object.entries(FaMimeType)) {\n\tvAccept.split(\",\").forEach((tItem) => {\n\t\tFaMimeTypeNames[tItem.trim()] = kName as keyof typeof FaMimeType;\n\t});\n}\n\n/**\n * 上传工具类\n */\nexport const uploadUtil = {\n\t/**\n\t * 识别文件类型\n\t */\n\tdetectFileType(accept: string): string {\n\t\tconst detectTypes = new Set<string>();\n\t\taccept.split(\",\").forEach((mimeType) => {\n\t\t\tconst normalizedMimeType = mimeType.trim();\n\t\t\tif (normalizedMimeType) detectTypes.add(FaMimeTypeNames[normalizedMimeType] ?? normalizedMimeType);\n\t\t});\n\t\treturn Array.from(detectTypes).join(\",\");\n\t},\n\t/** 判断文件是否符合 HTML accept 规则。 */\n\tmatchesAccept(file: File, accept?: string): boolean {\n\t\tif (!accept?.trim()) return true;\n\t\tconst fileName = file.name.toLowerCase();\n\t\tconst fileType = file.type.toLowerCase();\n\t\treturn accept.split(\",\").some((item) => {\n\t\t\tconst rule = item.trim().toLowerCase();\n\t\t\tif (!rule) return false;\n\t\t\tif (rule.startsWith(\".\")) return fileName.endsWith(rule);\n\t\t\tif (rule.endsWith(\"/*\")) return fileType.startsWith(rule.slice(0, -1));\n\t\t\treturn fileType === rule;\n\t\t});\n\t},\n\t/**\n\t * 文件上传\n\t * @param url 地址\n\t * @param file 文件\n\t * @param fileName 文件名称\n\t * @param params 参数\n\t */\n\tasync uploadFile(url: string, file: File, fileName: string, params?: UploadData, request?: UploadRequestConfig): Promise<string> {\n\t\tif (!url) {\n\t\t\tconsole.error(\"[Fast:uploadUtil]\", \"文件上传地址为空。\");\n\t\t\tElMessage.error(\"文件上传地址为空!\");\n\t\t\treturn Promise.reject(new Error(\"文件上传地址为空!\"));\n\t\t}\n\t\tconst formData = new FormData();\n\t\tformData.append(\"file\", file);\n\t\tformData.append(\"fileName\", fileName);\n\t\tif (params) appendUploadData(formData, params);\n\t\ttry {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders: request?.headers,\n\t\t\t\tmethod: request?.method ?? \"POST\",\n\t\t\t\tcredentials: request?.withCredentials ? \"include\" : \"same-origin\",\n\t\t\t\tbody: formData,\n\t\t\t});\n\t\t\tif (!response.ok) {\n\t\t\t\tconsole.error(\"[Fast:uploadUtil]\", `文件上传失败,HTTP 状态码:${response.status.toString()}。`);\n\t\t\t\tElMessage.error(\"文件上传失败!\");\n\t\t\t\tthrow new Error(\"文件上传失败!\");\n\t\t\t}\n\t\t\treturn await response.text();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[Fast:uploadUtil]\", \"文件上传失败。\", error);\n\t\t\tElMessage.error(\"文件上传失败!\");\n\t\t\tthrow error instanceof Error ? error : new Error(\"文件上传失败!\");\n\t\t}\n\t},\n\t/**\n\t * 文件上传\n\t * @param url 地址\n\t * @param file 文件\n\t * @param fileName 文件名称\n\t * @param params 参数\n\t */\n\tasync uploadFileByApi(api: (formData: FormData) => Promise<string>, file: File, fileName: string, params?: UploadData): Promise<string> {\n\t\tif (!api) {\n\t\t\tconsole.error(\"[Fast:uploadUtil]\", \"文件上传接口为空。\");\n\t\t\tElMessage.error(\"文件上传接口为空!\");\n\t\t\tthrow new Error(\"文件上传接口为空!\");\n\t\t}\n\t\tconst formData = new FormData();\n\t\tformData.append(\"file\", file);\n\t\tformData.append(\"fileName\", fileName);\n\t\tif (params) appendUploadData(formData, params);\n\t\ttry {\n\t\t\treturn await api(formData);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[Fast:uploadUtil]\", \"文件上传失败。\", error);\n\t\t\tElMessage.error(\"文件上传失败!\");\n\t\t\tthrow error instanceof Error ? error : new Error(\"文件上传失败!\");\n\t\t}\n\t},\n};\n","import { useVModel } from \"@vueuse/core\";\nimport { computed, inject, onMounted, ref, watch } from \"vue\";\nimport { ElMessage, ElNotification, formContextKey, formItemContextKey, genFileId, uploadProps } from \"element-plus\";\nimport { isArray, isNumber, isString } from \"lodash-unified\";\nimport { Decimal } from \"decimal.js\";\nimport { uploadUtil } from \"../utils/upload\";\nimport type {\n\tFormContext,\n\tFormItemContext,\n\tUploadFile,\n\tUploadFiles,\n\tUploadProps,\n\tUploadRawFile,\n\tUploadRequestOptions,\n\tUploadUserFile,\n} from \"element-plus\";\nimport type { ComputedRef, Ref, WritableComputedRef } from \"vue\";\n\ninterface UploadComposable {\n\tfileList: WritableComputedRef<UploadUserFile[]>;\n\tloading: Ref<boolean>;\n\tformContext: FormContext | undefined;\n\tformItemContext: FormItemContext | undefined;\n\tmaxSizeMB: ComputedRef<Decimal>;\n\thandleValue: () => void;\n\thandleHttpRequest: (options: UploadRequestOptions) => Promise<void>;\n\thandleOnSuccess: (fileUrl: string, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;\n\thandleOnError: (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => void;\n\thandleOnRemove: (uploadFile: UploadFile, uploadFiles: UploadFiles) => void;\n\thandleOnExceed: (files: File[], uploadFiles: UploadUserFile[]) => void;\n\thandleOnUpload: (file: UploadFile | UploadRawFile) => boolean;\n}\n\n/**\n * 创建上传组件共享的文件状态和操作方法。\n *\n * @param componentName - 组件名称。\n * @param fileTypeName - 文件类型名称。\n * @param props - 上传组件的 Props。\n * @param emit - 上传组件的事件触发器。\n * @param options - 文件大小和类型校验配置。\n * @returns 文件列表、加载状态和上传操作方法。\n */\nexport const useUpload = <T extends string | string[]>(\n\tcomponentName: string,\n\tfileTypeName: string,\n\tprops: Partial<UploadProps> & {\n\t\tmodelValue?: T | null;\n\t},\n\temit: ((event: \"update:fileList\", value: UploadUserFile[]) => void) &\n\t\t((event: \"update:modelValue\", value: T | null) => void) &\n\t\t((event: \"change\", value: T | null) => void),\n\tdata?: {\n\t\tmaxSize?: string | number;\n\t\tuploadApi?: (formData: FormData) => Promise<string>;\n\t\tuploadUrl?: string;\n\t}\n): UploadComposable => {\n\tconst fileListModel = useVModel(props, \"fileList\", emit, { passive: true });\n\tconst fileList = computed<UploadUserFile[]>({\n\t\tget: () => fileListModel.value ?? [],\n\t\tset: (value) => {\n\t\t\tfileListModel.value = value;\n\t\t},\n\t});\n\n\tconst loading = ref(false);\n\tlet activeUploadCount = 0;\n\n\t// 获取 el-form 组件上下文\n\tconst formContext = inject(formContextKey, undefined);\n\t// 获取 el-form-item 组件上下文\n\tconst formItemContext = inject(formItemContextKey, undefined);\n\n\tconst mbNum = new Decimal(1024);\n\tconst maxSizeKB = computed(() => new Decimal(isNumber(data?.maxSize) ? data.maxSize : Number(data?.maxSize)));\n\tconst maxSizeMB = computed(() => maxSizeKB.value.div(mbNum));\n\n\tonMounted(() => {\n\t\tif (!props.disabled && props.autoUpload && !data?.uploadApi && !data?.uploadUrl && props.httpRequest === uploadProps.httpRequest.default) {\n\t\t\tconsole.warn(`[Fast:${componentName}]`, \"uploadApi 和 uploadUrl 至少需要提供一个。\");\n\t\t}\n\t});\n\n\tconst handleValue = (files: UploadUserFile[] = fileList.value): void => {\n\t\tif (files.length > 0) {\n\t\t\tif (isString(props.modelValue)) {\n\t\t\t\tconst fileUrl = files[0]?.url;\n\t\t\t\tif (!fileUrl) return;\n\t\t\t\temit(\"update:modelValue\", fileUrl as T);\n\t\t\t\temit(\"change\", fileUrl as T);\n\t\t\t} else {\n\t\t\t\tif (props.multiple) {\n\t\t\t\t\tconst value = files.flatMap((item) => (item.url ? [item.url] : []));\n\t\t\t\t\temit(\"update:modelValue\", value as T);\n\t\t\t\t\temit(\"change\", value as T);\n\t\t\t\t} else {\n\t\t\t\t\tconst fileUrl = files[0]?.url;\n\t\t\t\t\tif (!fileUrl) return;\n\t\t\t\t\temit(\"update:modelValue\", fileUrl as T);\n\t\t\t\t\temit(\"change\", fileUrl as T);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\temit(\"update:modelValue\", null);\n\t\t\temit(\"change\", null);\n\t\t}\n\t};\n\n\tconst handleHttpRequest = async (options: UploadRequestOptions): Promise<void> => {\n\t\tconst propsData = options.data;\n\t\tif (!data?.uploadApi && !data?.uploadUrl) {\n\t\t\tconst error = new Error(`上传${fileTypeName}接口 uploadApi 或地址 uploadUrl 不能为空。`);\n\t\t\tElMessage.error(`上传${fileTypeName}Api或地址不能为空`);\n\t\t\tconsole.error(`[Fast:${componentName}]`, error.message);\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t\tactiveUploadCount++;\n\t\tloading.value = true;\n\t\ttry {\n\t\t\tlet fileUrl: string;\n\t\t\tif (data?.uploadApi) {\n\t\t\t\tfileUrl = await uploadUtil.uploadFileByApi(data.uploadApi, options.file, options.filename, propsData);\n\t\t\t} else {\n\t\t\t\tconst headers =\n\t\t\t\t\toptions.headers instanceof Headers\n\t\t\t\t\t\t? options.headers\n\t\t\t\t\t\t: new Headers(\n\t\t\t\t\t\t\t\tObject.entries(options.headers).flatMap(([key, value]) =>\n\t\t\t\t\t\t\t\t\tvalue === null || value === undefined ? [] : [[key, String(value)] as [string, string]]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\tfileUrl = await uploadUtil.uploadFile(data?.uploadUrl ?? options.action, options.file, options.filename, propsData, {\n\t\t\t\t\theaders,\n\t\t\t\t\tmethod: options.method,\n\t\t\t\t\twithCredentials: options.withCredentials,\n\t\t\t\t});\n\t\t\t}\n\t\t\toptions.onSuccess(fileUrl);\n\t\t} finally {\n\t\t\tactiveUploadCount = Math.max(activeUploadCount - 1, 0);\n\t\t\tloading.value = activeUploadCount > 0;\n\t\t}\n\t};\n\n\tconst handleOnSuccess = (fileUrl: string, uploadFile: UploadFile, uploadFiles: UploadFiles): void => {\n\t\tif (!fileUrl) return;\n\t\tif (!props.multiple && uploadFiles.length > 1) {\n\t\t\tuploadFiles.shift();\n\t\t}\n\t\tuploadFile.url = fileUrl;\n\t\thandleValue();\n\t\t// 调用 el-form 内部的校验方法(可自动校验)\n\t\tif (formItemContext?.prop) void formContext?.validateField([formItemContext.prop]);\n\t\tElMessage.success(\"上传成功\");\n\t\tprops.onSuccess?.(fileUrl, uploadFile, uploadFiles);\n\t};\n\n\tconst handleOnError = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles): void => {\n\t\tElNotification({\n\t\t\tmessage: `【${uploadFile.name}】${fileTypeName}上传失败,请您重新上传`,\n\t\t\ttype: \"error\",\n\t\t});\n\t\tprops.onError?.(error, uploadFile, uploadFiles);\n\t};\n\n\tconst handleOnRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles): void => {\n\t\tfileList.value = uploadFiles;\n\t\thandleValue(uploadFiles);\n\t\tprops.onRemove?.(uploadFile, uploadFiles);\n\t};\n\n\tconst handleOnExceed = (files: File[], uploadFiles: UploadUserFile[]): void => {\n\t\tElMessage.warning(`最多只能上传 ${props.limit} 个${fileTypeName},请移除后再进行上传`);\n\t\tprops.onExceed?.(files, uploadFiles);\n\t};\n\n\tconst handleOnUpload = (file: UploadFile | UploadRawFile): boolean => {\n\t\tconst fileSizeKB = new Decimal(file.size ?? 0).div(mbNum);\n\n\t\tif (fileSizeKB.greaterThan(maxSizeKB.value)) {\n\t\t\tconsole.warn(`[Fast:${componentName}]`, `【${file.name}】${fileTypeName}上传大小不能超过 ${maxSizeMB.value.toString()}MB。`);\n\t\t\tElMessage.warning(`【${file.name}】${fileTypeName}上传大小不能超过 ${maxSizeMB.value.toString()}MB`);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rawFile = \"type\" in file ? file : file.raw;\n\t\tif (!rawFile) return false;\n\t\tif (!uploadUtil.matchesAccept(rawFile, props.accept)) {\n\t\t\tconst uploadFileNames = uploadUtil.detectFileType(props.accept ?? \"\");\n\t\t\tconsole.warn(`[Fast:${componentName}]`, `只允许上传【${uploadFileNames}】格式的${fileTypeName}。`);\n\t\t\tElMessage.warning(`只允许上传【${uploadFileNames}】格式的${fileTypeName}`);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * 监听 v-model 绑定数据\n\t */\n\twatch(\n\t\t() => props.modelValue,\n\t\t(newValue) => {\n\t\t\tif (newValue) {\n\t\t\t\tif (isArray(newValue)) {\n\t\t\t\t\tfileList.value = newValue.map((m) => {\n\t\t\t\t\t\tconst find = fileList.value.find((f) => f.url === m);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: \"\",\n\t\t\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\t\t\tuid: find?.uid ?? genFileId(),\n\t\t\t\t\t\t\turl: m,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst find = fileList.value.find((f) => f.url === newValue);\n\t\t\t\t\tfileList.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"\",\n\t\t\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\t\t\tuid: find?.uid ?? genFileId(),\n\t\t\t\t\t\t\turl: newValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfileList.value = [];\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\timmediate: true,\n\t\t}\n\t);\n\n\treturn {\n\t\tfileList,\n\t\tloading,\n\t\tformContext,\n\t\tformItemContext,\n\t\tmaxSizeMB,\n\t\thandleValue,\n\t\thandleHttpRequest,\n\t\thandleOnSuccess,\n\t\thandleOnError,\n\t\thandleOnRemove,\n\t\thandleOnExceed,\n\t\thandleOnUpload,\n\t};\n};\n","import { Fragment, computed, defineComponent, ref } from \"vue\";\nimport { UploadFilled } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElUpload, uploadProps } from \"element-plus\";\nimport { isArray, isNull, isString } from \"lodash-unified\";\nimport { definePropType, makeSlots, useExpose, useProps, useRender } from \"../../../utils\";\nimport { useUpload } from \"./useUpload\";\nimport type { UploadFile, UploadInstance, UploadProps, UploadUserFile } from \"element-plus\";\nimport type { VNode } from \"vue\";\n\n/** FaUpload 的运行时 Props 定义。 */\nexport const faUploadProps = {\n\t...uploadProps,\n\t/** @description whether to activate drag and drop mode */\n\tdrag: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description maximum number of uploads allowed */\n\tlimit: {\n\t\ttype: Number,\n\t\tdefault: 1,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 大小限制,单位kb */\n\tmaxSize: {\n\t\ttype: definePropType<string | number>([String, Number]),\n\t\tdefault: 5120,\n\t},\n\t/** @description 图片上传接口,优先级最高 */\n\tuploadApi: {\n\t\ttype: definePropType<(formData: FormData) => Promise<string>>(Function),\n\t},\n\t/** @description 图片上传地址 */\n\tuploadUrl: String,\n};\n\n/** FaUpload 的运行时 Emits 定义。 */\nexport const faUploadEmits = {\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\t/** @description v-model:fileList 回调 */\n\t\"update:fileList\": (value: UploadUserFile[]): boolean => isArray(value),\n\t/** @description 改变 */\n\tchange: (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n};\n\n/** FaUpload 的插槽参数。 */\nexport interface FaUploadSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n\t/** @description 触发文件选择框的内容 */\n\ttrigger: never;\n\t/** @description 提示说明文字 */\n\ttip: never;\n\t/** @description 缩略图模板的内容 */\n\tfile: { file: UploadFile; index: number };\n}\n\nexport default defineComponent({\n\tname: \"FaUpload\",\n\tprops: faUploadProps,\n\temits: faUploadEmits,\n\tslots: makeSlots<FaUploadSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst {\n\t\t\tfileList,\n\t\t\tloading,\n\t\t\tformContext,\n\t\t\tmaxSizeMB,\n\t\t\thandleHttpRequest,\n\t\t\thandleOnSuccess,\n\t\t\thandleOnError,\n\t\t\thandleOnRemove,\n\t\t\thandleOnExceed,\n\t\t\thandleOnUpload,\n\t\t} = useUpload(\"FaUpload\", \"文件\", props, emit, {\n\t\t\tget maxSize() {\n\t\t\t\treturn props.maxSize;\n\t\t\t},\n\t\t\tget uploadApi() {\n\t\t\t\treturn props.uploadApi;\n\t\t\t},\n\t\t\tget uploadUrl() {\n\t\t\t\treturn props.uploadUrl || (props.action === uploadProps.action.default ? undefined : props.action);\n\t\t\t},\n\t\t});\n\n\t\tconst disabled = computed(() => {\n\t\t\treturn props.disabled === true || formContext?.disabled === true;\n\t\t});\n\n\t\tconst uploadRef = ref<UploadInstance>();\n\t\tconst httpRequest = computed(() => (props.httpRequest === uploadProps.httpRequest.default ? handleHttpRequest : props.httpRequest));\n\n\t\tconst handleOnChange: UploadProps[\"onChange\"] = (uploadFile, uploadFiles) => {\n\t\t\tif (uploadFile.status !== \"ready\") return;\n\n\t\t\tif (!handleOnUpload(uploadFile)) {\n\t\t\t\tfileList.value = fileList.value.filter((item) => item.uid !== uploadFile.uid);\n\t\t\t} else {\n\t\t\t\tprops.onChange?.(uploadFile, uploadFiles);\n\t\t\t}\n\t\t};\n\n\t\tconst handleBeforeUpload: UploadProps[\"beforeUpload\"] = (rawFile) => {\n\t\t\t// onChange 已完成首次校验;被移除的非法文件不能在自动上传流程中继续提交。\n\t\t\tif (!fileList.value.some((item) => item.uid === rawFile.uid) || !handleOnUpload(rawFile)) return false;\n\t\t\treturn props.beforeUpload?.(rawFile) ?? true;\n\t\t};\n\n\t\tconst elUploadProps = useProps(props, uploadProps, [\n\t\t\t\"fileList\",\n\t\t\t\"disabled\",\n\t\t\t\"httpRequest\",\n\t\t\t\"beforeUpload\",\n\t\t\t\"onExceed\",\n\t\t\t\"onSuccess\",\n\t\t\t\"onError\",\n\t\t\t\"onRemove\",\n\t\t\t\"onChange\",\n\t\t]);\n\n\t\tuseRender(() => (\n\t\t\t<ElUpload\n\t\t\t\t{...elUploadProps.value}\n\t\t\t\tref={uploadRef}\n\t\t\t\tclass={[\"fa-upload\", { \"fa-upload__default\": !slots.default }]}\n\t\t\t\tvLoading={loading.value}\n\t\t\t\tvModel:fileList={fileList.value}\n\t\t\t\tdisabled={disabled.value}\n\t\t\t\thttpRequest={httpRequest.value}\n\t\t\t\tbeforeUpload={handleBeforeUpload}\n\t\t\t\tonExceed={handleOnExceed}\n\t\t\t\tonSuccess={handleOnSuccess}\n\t\t\t\tonError={handleOnError}\n\t\t\t\tonRemove={handleOnRemove}\n\t\t\t\tonChange={handleOnChange}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\tslots.default ? (\n\t\t\t\t\t\t\tslots.default()\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t<ElIcon class=\"el-icon--upload\">\n\t\t\t\t\t\t\t\t\t<UploadFilled />\n\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t<div class=\"el-upload__text\">\n\t\t\t\t\t\t\t\t\tDrop file here or <em>click to upload</em>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t),\n\t\t\t\t\t...(slots.trigger && { trigger: (): VNode | VNode[] => slots.trigger?.() ?? [] }),\n\t\t\t\t\ttip: () =>\n\t\t\t\t\t\tslots.tip ? (\n\t\t\t\t\t\t\tslots.tip()\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t<div class=\"el-upload__tip\">files with a size less than {maxSizeMB.value.toString()}MB</div>\n\t\t\t\t\t\t\t\t{!props.showFileList && fileList.value.length > 0 && (\n\t\t\t\t\t\t\t\t\t<div class=\"el-upload__tip\">\n\t\t\t\t\t\t\t\t\t\t{fileList.value.map((item, index) => (\n\t\t\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t\t\t\t\t\t\t{fileList.value.length <= index && <br />}\n\t\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t),\n\t\t\t\t\t...(slots.file && {\n\t\t\t\t\t\tfile: ({ file, index }: { file: UploadFile; index: number }): VNode | VNode[] => slots.file?.({ file, index }) ?? [],\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t</ElUpload>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 取消上传请求 */\n\t\t\tabort: computed(() => uploadRef.value?.abort),\n\t\t\t/** @description 手动上传文件列表 */\n\t\t\tsubmit: computed(() => uploadRef.value?.submit),\n\t\t\t/** @description 清空已上传的文件列表(该方法不支持在 before-upload 中调用) */\n\t\t\tclearFiles: computed(() => uploadRef.value?.clearFiles),\n\t\t\t/** @description 手动选择文件 */\n\t\t\thandleStart: computed(() => uploadRef.value?.handleStart),\n\t\t\t/** @description 手动移除文件。file 和 rawFile 已被合并。 */\n\t\t\thandleRemove: computed(() => uploadRef.value?.handleRemove),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading,\n\t\t\t/** @description 文件集合 */\n\t\t\tfileList,\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport Upload, { faUploadEmits, faUploadProps } from \"./src/upload\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 统一上传校验、进度和文件列表处理的上传组件。 */\nexport const FaUpload: TSXWithInstall<typeof Upload> = withInstall(Upload);\nexport default FaUpload;\n\nexport { faUploadProps, faUploadEmits };\nexport type { FaUploadSlots } from \"./src/upload\";\n\n/** FaUpload 暴露的组件实例类型。 */\nexport type FaUploadInstance = InstanceType<typeof Upload>;\n\n/** FaUpload 的完整 Props 类型。 */\nexport type FaUploadProps = ExtractPropTypes<typeof faUploadProps>;\n\n/** FaUpload 的 Emits 类型。 */\nexport type FaUploadEmits = typeof faUploadEmits;\n","import { Fragment, computed, defineComponent, reactive, ref, withModifiers } from \"vue\";\nimport { Delete, Edit, UploadFilled, ZoomIn } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElImageViewer, ElUpload, uploadProps } from \"element-plus\";\nimport { isArray, isNull, isString } from \"lodash-unified\";\nimport { FaMimeType } from \"../../../constants\";\nimport { addCssUnit, definePropType, makeSlots, randomString, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport { useUpload } from \"../../upload/src/useUpload\";\nimport type { UploadFile, UploadInstance, UploadProps, UploadUserFile, uploadListTypes } from \"element-plus\";\n\n/** FaUploadImage 的运行时 Props 定义。 */\nexport const faUploadImageProps = {\n\t...uploadProps,\n\t/** @description whether to activate drag and drop mode */\n\tdrag: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description accepted [file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept), will not work when `thumbnail-mode === true` */\n\taccept: {\n\t\ttype: String,\n\t\tdefault: (): string => FaMimeType.Image,\n\t},\n\t/** @description type of file list */\n\tlistType: {\n\t\ttype: definePropType<(typeof uploadListTypes)[number]>(String),\n\t\tdefault: \"picture\",\n\t},\n\t/** @description whether to show the uploaded file list */\n\tshowFileList: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: definePropType<string | string[] | null>([String, Array]),\n\t/** @description 大小限制,单位kb */\n\tmaxSize: {\n\t\ttype: [String, Number],\n\t\tdefault: 2048,\n\t},\n\t/** @description 图片上传接口,优先级最高 */\n\tuploadApi: {\n\t\ttype: definePropType<(formData: FormData) => Promise<string>>(Function),\n\t},\n\t/** @description 图片上传地址 */\n\tuploadUrl: String,\n\t/** @description 宽度 */\n\twidth: {\n\t\ttype: [String, Number],\n\t\tdefault: 150,\n\t},\n\t/** @description 高度 */\n\theight: {\n\t\ttype: [String, Number],\n\t\tdefault: 150,\n\t},\n};\n\n/** FaUploadImage 的运行时 Emits 定义。 */\nexport const faUploadImageEmits = {\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n\t/** @description v-model:fileList 回调 */\n\t\"update:fileList\": (value: UploadUserFile[]): boolean => isArray(value),\n\t/** @description 改变 */\n\tchange: (value: string | string[] | null): boolean => isString(value) || isArray(value) || isNull(value),\n};\n\n/** FaUploadImage 的插槽参数。 */\nexport interface FaUploadImageSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n}\n\nexport default defineComponent({\n\tname: \"FaUploadImage\",\n\tprops: faUploadImageProps,\n\temits: faUploadImageEmits,\n\tslots: makeSlots<FaUploadImageSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst {\n\t\t\tfileList,\n\t\t\tloading,\n\t\t\tformContext,\n\t\t\tmaxSizeMB,\n\t\t\thandleHttpRequest,\n\t\t\thandleOnSuccess,\n\t\t\thandleOnError,\n\t\t\thandleOnRemove,\n\t\t\thandleOnExceed,\n\t\t\thandleOnUpload,\n\t\t} = useUpload<string | string[]>(\"FaUploadImage\", \"图片\", props, emit, {\n\t\t\tget maxSize() {\n\t\t\t\treturn props.maxSize;\n\t\t\t},\n\t\t\tget uploadApi() {\n\t\t\t\treturn props.uploadApi;\n\t\t\t},\n\t\t\tget uploadUrl() {\n\t\t\t\treturn props.uploadUrl || (props.action === uploadProps.action.default ? undefined : props.action);\n\t\t\t},\n\t\t});\n\n\t\tconst disabled = computed(() => {\n\t\t\treturn props.disabled === true || formContext?.disabled === true;\n\t\t});\n\n\t\tconst state = reactive({\n\t\t\tuploadKey: `fa-upload-image__${randomString(8)}`,\n\t\t\tpreview: false,\n\t\t\tpreviewList: withDefineType<string[]>([]),\n\t\t});\n\n\t\tconst uploadRef = ref<UploadInstance>();\n\t\tconst httpRequest = computed(() => (props.httpRequest === uploadProps.httpRequest.default ? handleHttpRequest : props.httpRequest));\n\n\t\tconst handleEdit = (): void => {\n\t\t\tconst uploadInputEl = document.querySelector(`.${state.uploadKey} .el-upload__input`);\n\t\t\tuploadInputEl?.dispatchEvent(new MouseEvent(\"click\"));\n\t\t};\n\n\t\tconst handlePreview = (): void => {\n\t\t\tconst fileUrl = fileList.value[0]?.url;\n\t\t\tif (!fileUrl) return;\n\t\t\tstate.previewList = [fileUrl];\n\t\t\tstate.preview = true;\n\t\t};\n\n\t\tconst handleRemove = (): void => {\n\t\t\tconst file = fileList.value[0];\n\t\t\tif (file) uploadRef.value?.handleRemove(file as UploadFile);\n\t\t};\n\n\t\tconst handleBeforeUpload: UploadProps[\"beforeUpload\"] = (rawFile) => {\n\t\t\tif (!handleOnUpload(rawFile)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (props.beforeUpload) {\n\t\t\t\treturn props.beforeUpload(rawFile);\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tconst elUploadProps = useProps(props, uploadProps, [\n\t\t\t\"fileList\",\n\t\t\t\"disabled\",\n\t\t\t\"httpRequest\",\n\t\t\t\"beforeUpload\",\n\t\t\t\"onExceed\",\n\t\t\t\"onSuccess\",\n\t\t\t\"onError\",\n\t\t\t\"onRemove\",\n\t\t]);\n\n\t\tuseRender(() => (\n\t\t\t<Fragment>\n\t\t\t\t<ElUpload\n\t\t\t\t\t{...elUploadProps.value}\n\t\t\t\t\tref={uploadRef}\n\t\t\t\t\tclass={[\"fa-upload-image\", state.uploadKey]}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\"--width\": addCssUnit(props.width),\n\t\t\t\t\t\t\"--height\": addCssUnit(props.height),\n\t\t\t\t\t}}\n\t\t\t\t\tvLoading={loading.value}\n\t\t\t\t\tvModel:fileList={fileList.value}\n\t\t\t\t\tdisabled={disabled.value}\n\t\t\t\t\thttpRequest={httpRequest.value}\n\t\t\t\t\tbeforeUpload={handleBeforeUpload}\n\t\t\t\t\tonExceed={handleOnExceed}\n\t\t\t\t\tonSuccess={handleOnSuccess}\n\t\t\t\t\tonError={handleOnError}\n\t\t\t\t\tonRemove={handleOnRemove}\n\t\t\t\t>\n\t\t\t\t\t{{\n\t\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\t\tfileList.value.length > 0 ? (\n\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t<img class=\"el-upload-list__item-thumbnail\" src={fileList.value[0]?.url} />\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"el-upload-list__item-actions\"\n\t\t\t\t\t\t\t\t\t\tonClick={withModifiers(() => {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}, [\"stop\"])}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-icon\" onClick={() => handlePreview()} title=\"查看\">\n\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t<ZoomIn />\n\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t{!disabled.value && (\n\t\t\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-icon\" onClick={handleEdit} title=\"编辑\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Edit />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-icon\" onClick={() => handleRemove()} title=\"删除\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Delete />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t) : slots.default ? (\n\t\t\t\t\t\t\t\tslots.default()\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t<ElIcon class=\"el-icon--upload\">\n\t\t\t\t\t\t\t\t\t\t<UploadFilled />\n\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t<div class=\"el-upload__text\">\n\t\t\t\t\t\t\t\t\t\tDrop file here <br />\n\t\t\t\t\t\t\t\t\t\t<em>click to upload</em>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\ttip: () => <div class=\"el-upload__tip\">file with a size less than {maxSizeMB.value.toString()}MB</div>,\n\t\t\t\t\t}}\n\t\t\t\t</ElUpload>\n\t\t\t\t{state.preview && (\n\t\t\t\t\t<ElImageViewer\n\t\t\t\t\t\tcloseOnPressEscape\n\t\t\t\t\t\thideOnClickModal\n\t\t\t\t\t\tteleported\n\t\t\t\t\t\tonClose={() => (state.preview = false)}\n\t\t\t\t\t\turlList={state.previewList}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Fragment>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 取消上传请求 */\n\t\t\tabort: computed(() => uploadRef.value?.abort),\n\t\t\t/** @description 手动上传文件列表 */\n\t\t\tsubmit: computed(() => uploadRef.value?.submit),\n\t\t\t/** @description 清空已上传的文件列表(该方法不支持在 before-upload 中调用) */\n\t\t\tclearFiles: computed(() => uploadRef.value?.clearFiles),\n\t\t\t/** @description 手动选择文件 */\n\t\t\thandleStart: computed(() => uploadRef.value?.handleStart),\n\t\t\t/** @description 手动移除文件。file 和 rawFile 已被合并。 */\n\t\t\thandleRemove: computed(() => uploadRef.value?.handleRemove),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading,\n\t\t\t/** @description 文件集合 */\n\t\t\tfileList,\n\t\t\t/** @description 预览 */\n\t\t\tpreview: computed(() => state.preview),\n\t\t\t/** @description 预览集合 */\n\t\t\tpreviewList: computed(() => state.previewList),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport UploadImage, { faUploadImageEmits, faUploadImageProps } from \"./src/uploadImage\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持预览、校验和状态同步的单图片上传组件。 */\nexport const FaUploadImage: TSXWithInstall<typeof UploadImage> = withInstall(UploadImage);\nexport default FaUploadImage;\n\nexport { faUploadImageProps, faUploadImageEmits };\nexport type { FaUploadImageSlots } from \"./src/uploadImage\";\n\n/** FaUploadImage 暴露的组件实例类型。 */\nexport type FaUploadImageInstance = InstanceType<typeof UploadImage>;\n\n/** FaUploadImage 的完整 Props 类型。 */\nexport type FaUploadImageProps = ExtractPropTypes<typeof faUploadImageProps>;\n\n/** FaUploadImage 的 Emits 类型。 */\nexport type FaUploadImageEmits = typeof faUploadImageEmits;\n","import { Fragment, computed, defineComponent, reactive, ref } from \"vue\";\nimport { Delete, Edit, Plus, ZoomIn } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElImageViewer, ElUpload, uploadProps } from \"element-plus\";\nimport { isArray, isNull } from \"lodash-unified\";\nimport { FaMimeType } from \"../../../constants\";\nimport { definePropType, makeSlots, randomString, useExpose, useProps, useRender, withDefineType } from \"../../../utils\";\nimport { useUpload } from \"../../upload/src/useUpload\";\nimport type { UploadFile, UploadInstance, UploadProps, UploadUserFile, uploadListTypes } from \"element-plus\";\n\n/** FaUploadImages 的运行时 Props 定义。 */\nexport const faUploadImagesProps = {\n\t...uploadProps,\n\t/** @description accepted [file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept), will not work when `thumbnail-mode === true` */\n\taccept: {\n\t\ttype: String,\n\t\tdefault: (): string => FaMimeType.Image,\n\t},\n\t/** @description type of file list */\n\tlistType: {\n\t\ttype: definePropType<(typeof uploadListTypes)[number]>(String),\n\t\tdefault: \"picture-card\",\n\t},\n\t/** @description whether uploading multiple files is permitted */\n\tmultiple: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\t/** @description maximum number of uploads allowed */\n\tlimit: {\n\t\ttype: Number,\n\t\tdefault: 9,\n\t},\n\t/** @description v-model绑定值 */\n\tmodelValue: definePropType<string[] | null>([Array]),\n\t/** @description 大小限制,单位kb */\n\tmaxSize: {\n\t\ttype: [String, Number],\n\t\tdefault: 2048,\n\t},\n\t/** @description 图片上传接口,优先级最高 */\n\tuploadApi: {\n\t\ttype: definePropType<(formData: FormData) => Promise<string>>(Function),\n\t},\n\t/** @description 图片上传地址 */\n\tuploadUrl: String,\n};\n\n/** FaUploadImages 的运行时 Emits 定义。 */\nexport const faUploadImagesEmits = {\n\t/** @description v-model 回调 */\n\t\"update:modelValue\": (value: string[] | null): boolean => isArray(value) || isNull(value),\n\t/** @description v-model:fileList 回调 */\n\t\"update:fileList\": (value: UploadUserFile[]): boolean => isArray(value),\n\t/** @description 改变 */\n\tchange: (value: string[] | null): boolean => isArray(value) || isNull(value),\n};\n\n/** FaUploadImages 的插槽参数。 */\nexport interface FaUploadImagesSlots extends Record<string, unknown> {\n\t/** @description 默认内容插槽 */\n\tdefault: never;\n}\n\nexport default defineComponent({\n\tname: \"FaUploadImages\",\n\tprops: faUploadImagesProps,\n\temits: faUploadImagesEmits,\n\tslots: makeSlots<FaUploadImagesSlots>(),\n\tsetup(props, { slots, emit, expose }) {\n\t\tconst {\n\t\t\tfileList,\n\t\t\tloading,\n\t\t\tformContext,\n\t\t\tmaxSizeMB,\n\t\t\thandleHttpRequest,\n\t\t\thandleOnSuccess,\n\t\t\thandleOnError,\n\t\t\thandleOnRemove,\n\t\t\thandleOnExceed,\n\t\t\thandleOnUpload,\n\t\t} = useUpload<string[]>(\"FaUploadImages\", \"图片\", props, emit, {\n\t\t\tget maxSize() {\n\t\t\t\treturn props.maxSize;\n\t\t\t},\n\t\t\tget uploadApi() {\n\t\t\t\treturn props.uploadApi;\n\t\t\t},\n\t\t\tget uploadUrl() {\n\t\t\t\treturn props.uploadUrl || (props.action === uploadProps.action.default ? undefined : props.action);\n\t\t\t},\n\t\t});\n\n\t\tconst disabled = computed(() => {\n\t\t\treturn props.disabled === true || formContext?.disabled === true;\n\t\t});\n\n\t\tconst state = reactive({\n\t\t\tuploadKey: `fa-upload-images__${randomString(8)}`,\n\t\t\tpreview: false,\n\t\t\tpreviewIndex: -1,\n\t\t\tpreviewList: withDefineType<string[]>([]),\n\t\t});\n\n\t\tconst uploadRef = ref<UploadInstance>();\n\t\tconst httpRequest = computed(() => (props.httpRequest === uploadProps.httpRequest.default ? handleHttpRequest : props.httpRequest));\n\n\t\tconst handleEdit = (): void => {\n\t\t\tconst uploadInputEl = document.querySelector(`.${state.uploadKey} .el-upload__input`);\n\t\t\tuploadInputEl?.dispatchEvent(new MouseEvent(\"click\"));\n\t\t};\n\n\t\tconst handlePreview = (uploadFile: UploadFile): void => {\n\t\t\tstate.previewIndex = fileList.value.findIndex((f) => f.url === uploadFile.url);\n\t\t\tstate.previewList = fileList.value.flatMap((item) => (item.url ? [item.url] : []));\n\t\t\tstate.preview = true;\n\t\t};\n\n\t\tconst handleRemove = (index: number): void => {\n\t\t\tconst file = fileList.value[index];\n\t\t\tif (file) uploadRef.value?.handleRemove(file as UploadFile);\n\t\t};\n\n\t\tconst handleBeforeUpload: UploadProps[\"beforeUpload\"] = (rawFile) => {\n\t\t\tif (!handleOnUpload(rawFile)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (props.beforeUpload) {\n\t\t\t\treturn props.beforeUpload(rawFile);\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tconst elUploadProps = useProps(props, uploadProps, [\n\t\t\t\"fileList\",\n\t\t\t\"disabled\",\n\t\t\t\"httpRequest\",\n\t\t\t\"beforeUpload\",\n\t\t\t\"onExceed\",\n\t\t\t\"onSuccess\",\n\t\t\t\"onError\",\n\t\t\t\"onRemove\",\n\t\t]);\n\n\t\tuseRender(() => (\n\t\t\t<Fragment>\n\t\t\t\t<ElUpload\n\t\t\t\t\t{...elUploadProps.value}\n\t\t\t\t\tref={uploadRef}\n\t\t\t\t\tclass={[\"fa-upload-images\", state.uploadKey, { \"fa-upload-images__hidden-upload\": fileList.value.length >= props.limit }]}\n\t\t\t\t\tvLoading={loading.value}\n\t\t\t\t\tvModel:fileList={fileList.value}\n\t\t\t\t\tdisabled={disabled.value}\n\t\t\t\t\thttpRequest={httpRequest.value}\n\t\t\t\t\tbeforeUpload={handleBeforeUpload}\n\t\t\t\t\tonExceed={handleOnExceed}\n\t\t\t\t\tonSuccess={handleOnSuccess}\n\t\t\t\t\tonError={handleOnError}\n\t\t\t\t\tonRemove={handleOnRemove}\n\t\t\t\t>\n\t\t\t\t\t{{\n\t\t\t\t\t\tdefault: () =>\n\t\t\t\t\t\t\tfileList.value.length < props.limit && slots.default ? (\n\t\t\t\t\t\t\t\tslots.default()\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t<Plus />\n\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\ttip: () => <div class=\"el-upload__tip\">files with a size less than {maxSizeMB.value.toString()}MB</div>,\n\t\t\t\t\t\tfile: ({ file, index }: { file: UploadFile; index: number }) => (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<img class=\"el-upload-list__item-thumbnail\" src={file.url} />\n\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-actions\">\n\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-preview\" onClick={() => handlePreview(file)} title=\"查看\">\n\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t<ZoomIn />\n\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{!disabled.value && (\n\t\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-icon\" onClick={handleEdit} title=\"编辑\">\n\t\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Edit />\n\t\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"el-upload-list__item-icon\" onClick={() => handleRemove(index)} title=\"删除\">\n\t\t\t\t\t\t\t\t\t\t\t\t<ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Delete />\n\t\t\t\t\t\t\t\t\t\t\t\t</ElIcon>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t}}\n\t\t\t\t</ElUpload>\n\t\t\t\t{state.preview && (\n\t\t\t\t\t<ElImageViewer\n\t\t\t\t\t\tcloseOnPressEscape\n\t\t\t\t\t\thideOnClickModal\n\t\t\t\t\t\tteleported\n\t\t\t\t\t\tinitialIndex={Math.max(state.previewIndex, 0)}\n\t\t\t\t\t\tonClose={() => (state.preview = false)}\n\t\t\t\t\t\turlList={state.previewList}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Fragment>\n\t\t));\n\n\t\treturn useExpose(expose, {\n\t\t\t/** @description 取消上传请求 */\n\t\t\tabort: computed(() => uploadRef.value?.abort),\n\t\t\t/** @description 手动上传文件列表 */\n\t\t\tsubmit: computed(() => uploadRef.value?.submit),\n\t\t\t/** @description 清空已上传的文件列表(该方法不支持在 before-upload 中调用) */\n\t\t\tclearFiles: computed(() => uploadRef.value?.clearFiles),\n\t\t\t/** @description 手动选择文件 */\n\t\t\thandleStart: computed(() => uploadRef.value?.handleStart),\n\t\t\t/** @description 手动移除文件。file 和 rawFile 已被合并。 */\n\t\t\thandleRemove: computed(() => uploadRef.value?.handleRemove),\n\t\t\t/** @description 加载状态 */\n\t\t\tloading,\n\t\t\t/** @description 文件集合 */\n\t\t\tfileList,\n\t\t\t/** @description 预览 */\n\t\t\tpreview: computed(() => state.preview),\n\t\t\t/** @description 预览集合 */\n\t\t\tpreviewList: computed(() => state.previewList),\n\t\t});\n\t},\n});\n","import { withInstall } from \"../../utils\";\nimport UploadImages from \"./src/uploadImages\";\nimport type { faUploadImagesEmits, faUploadImagesProps } from \"./src/uploadImages\";\nimport type { TSXWithInstall } from \"../../utils\";\nimport type { ExtractPropTypes } from \"vue\";\n\n/** 支持排序、预览、校验和状态同步的多图片上传组件。 */\nexport const FaUploadImages: TSXWithInstall<typeof UploadImages> = withInstall(UploadImages);\nexport default FaUploadImages;\n\nexport { faUploadImagesEmits, faUploadImagesProps } from \"./src/uploadImages\";\nexport type { FaUploadImagesSlots } from \"./src/uploadImages\";\n\n/** FaUploadImages 暴露的组件实例类型。 */\nexport type FaUploadImagesInstance = InstanceType<typeof UploadImages>;\n\n/** FaUploadImages 的完整 Props 类型。 */\nexport type FaUploadImagesProps = ExtractPropTypes<typeof faUploadImagesProps>;\n\n/** FaUploadImages 的 Emits 类型。 */\nexport type FaUploadImagesEmits = typeof faUploadImagesEmits;\n","import { FaAvatar } from \"./components/avatar\";\nimport { FaButton } from \"./components/button\";\nimport { FaCarNumber } from \"./components/carNumber\";\nimport { FaContextMenu } from \"./components/contextMenu\";\nimport { FaDialog } from \"./components/dialog\";\nimport { FaDrawer } from \"./components/drawer\";\nimport { FaForm, FaFormItem } from \"./components/form\";\nimport { FaFormItemTip } from \"./components/formItemTip\";\nimport { FaIcon } from \"./components/icon\";\nimport { FaIconSelector } from \"./components/iconSelector\";\nimport { FaImage } from \"./components/image\";\nimport { FaInputDialogPage } from \"./components/inputDialogPage\";\nimport { FaLayoutGrid, FaLayoutGridItem } from \"./components/layoutGrid\";\nimport { FaSelect, FaSelectOption } from \"./components/select\";\nimport { FaSelectPage } from \"./components/selectPage\";\nimport { FaSelectV2 } from \"./components/selectV2\";\nimport { FaTable, FaTableColumn } from \"./components/table\";\nimport { FaTree } from \"./components/tree\";\nimport { FaTreeSelect } from \"./components/treeSelect\";\nimport { FaUpload } from \"./components/upload\";\nimport { FaUploadImage } from \"./components/uploadImage\";\nimport { FaUploadImages } from \"./components/uploadImages\";\nimport type { Plugin } from \"vue\";\n\n/** 默认安装器注册的全部 Fast.Element.Plus 组件。 */\nexport default [\n\tFaAvatar,\n\tFaButton,\n\tFaCarNumber,\n\tFaContextMenu,\n\tFaDialog,\n\tFaDrawer,\n\tFaForm,\n\tFaFormItem,\n\tFaFormItemTip,\n\tFaIcon,\n\tFaIconSelector,\n\tFaImage,\n\tFaInputDialogPage,\n\tFaLayoutGrid,\n\tFaLayoutGridItem,\n\tFaSelect,\n\tFaSelectOption,\n\tFaSelectPage,\n\tFaSelectV2,\n\tFaTable,\n\tFaTableColumn,\n\tFaTree,\n\tFaTreeSelect,\n\tFaUpload,\n\tFaUploadImage,\n\tFaUploadImages,\n] as Plugin[];\n","/**\n * v-copy\n * 复制某个值至剪贴板\n * 接收参数:string类型/Ref<string>类型/Reactive<string>类型\n */\nimport { ElMessage } from \"element-plus\";\nimport { copy as copyToClipboard, withInstallDirective } from \"../../utils\";\nimport type { Directive, DirectiveBinding } from \"vue\";\n\ninterface CopyElement extends HTMLElement {\n\tcopyData: string | number;\n\t__handleClick__: () => void;\n}\n\nconst CopyDirective: Directive = {\n\tmounted(el: CopyElement, binding: DirectiveBinding<string | number>) {\n\t\tel.copyData = binding.value;\n\n\t\tconst copy = async (): Promise<void> => {\n\t\t\tif (!el.copyData) return;\n\t\t\ttry {\n\t\t\t\tawait copyToClipboard(String(el.copyData));\n\t\t\t\tElMessage({\n\t\t\t\t\ttype: \"success\",\n\t\t\t\t\tmessage: \"复制成功\",\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tElMessage({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"复制失败\",\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t};\n\t\tel.__handleClick__ = (): void => {\n\t\t\tvoid copy();\n\t\t};\n\t\tel.addEventListener(\"click\", el.__handleClick__);\n\t},\n\tupdated(el: CopyElement, binding: DirectiveBinding<string | number>) {\n\t\tel.copyData = binding.value;\n\t},\n\tbeforeUnmount(el: CopyElement) {\n\t\tel.removeEventListener(\"click\", el.__handleClick__);\n\t},\n};\n\n/** 将绑定值复制到剪贴板的 Vue 指令。 */\nexport const vCopy = withInstallDirective(CopyDirective, \"copy\");\nexport default vCopy;\n","/**\n * v-debounce\n * 按钮防抖指令\n */\nimport { withInstallDirective } from \"../../utils\";\nimport type { Directive } from \"vue\";\n\ninterface DebounceElement extends HTMLElement {\n\t__debounce_timer__?: ReturnType<typeof setTimeout>;\n\t__debounce_originClick__?: (...arguments_: unknown[]) => unknown;\n}\n\nconst DebounceDirective: Directive<DebounceElement> = {\n\tcreated(el, _binding, vNode) {\n\t\tconst props = vNode.props as { onClick?: (...arguments_: unknown[]) => unknown } | null;\n\t\tif (props?.onClick === undefined) return;\n\n\t\t// 记录原来的点击事件方法\n\t\tel.__debounce_originClick__ = props.onClick;\n\n\t\t// 替换原来的点击事件\n\t\tprops.onClick = (...arguments_: unknown[]): void => {\n\t\t\tif (el.__debounce_timer__) {\n\t\t\t\tclearTimeout(el.__debounce_timer__);\n\t\t\t}\n\t\t\t// 防抖处理\n\t\t\tel.__debounce_timer__ = setTimeout(() => {\n\t\t\t\tel.__debounce_originClick__?.(...arguments_);\n\t\t\t}, 500);\n\t\t};\n\t},\n};\n\n/** 对点击回调进行防抖处理的 Vue 指令。 */\nexport const vDebounce = withInstallDirective(DebounceDirective, \"debounce\");\nexport default vDebounce;\n","/*\n\t需求:实现一个拖拽指令,可在父元素区域任意拖拽元素。\n\n\t思路:\n\t\t1、设置需要拖拽的元素为absolute,其父元素为relative。\n\t\t2、鼠标按下(onmousedown)时记录目标元素当前的 left 和 top 值。\n\t\t3、鼠标移动(onmousemove)时计算每次移动的横向距离和纵向距离的变化值,并改变元素的 left 和 top 值\n\t\t4、鼠标松开(onmouseup)时完成一次拖拽\n\n\t使用:在 Dom 上加上 v-draggable 即可\n\t<div class=\"dialog-model\" v-draggable></div>\n*/\nimport { withInstallDirective } from \"../../utils\";\nimport type { Directive } from \"vue\";\n\nconst DraggableDirective: Directive<HTMLElement> = {\n\tmounted(el) {\n\t\tel.style.cursor = \"move\";\n\t\tel.style.position = \"absolute\";\n\t\tel.onmousedown = (e): void => {\n\t\t\tconst parent = el.parentElement;\n\t\t\tif (parent === null) return;\n\t\t\tconst disX = e.pageX - el.offsetLeft;\n\t\t\tconst disY = e.pageY - el.offsetTop;\n\t\t\tdocument.onmousemove = (e): void => {\n\t\t\t\tlet x = e.pageX - disX;\n\t\t\t\tlet y = e.pageY - disY;\n\t\t\t\tconst maxX = parent.offsetWidth - el.offsetWidth;\n\t\t\t\tconst maxY = parent.offsetHeight - el.offsetHeight;\n\t\t\t\tif (x < 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t} else if (x > maxX) {\n\t\t\t\t\tx = maxX;\n\t\t\t\t}\n\n\t\t\t\tif (y < 0) {\n\t\t\t\t\ty = 0;\n\t\t\t\t} else if (y > maxY) {\n\t\t\t\t\ty = maxY;\n\t\t\t\t}\n\t\t\t\tel.style.left = `${x}px`;\n\t\t\t\tel.style.top = `${y}px`;\n\t\t\t};\n\t\t\tdocument.onmouseup = (): void => {\n\t\t\t\tdocument.onmousemove = document.onmouseup = null;\n\t\t\t};\n\t\t};\n\t},\n};\n\n/** 使元素可在父元素范围内拖拽的 Vue 指令。 */\nexport const vDraggable = withInstallDirective(DraggableDirective, \"draggable\");\nexport default vDraggable;\n","/**\n * v-iconCopy\n * 左侧插入复制图标,复制某个值至剪贴板\n * 接收参数:string类型/Ref<string>类型/Reactive<string>类型\n */\nimport { type Directive, type DirectiveBinding, h, render } from \"vue\";\nimport { CopyDocument } from \"@element-plus/icons-vue\";\nimport { ElIcon, ElMessage } from \"element-plus\";\nimport { copy as copyToClipboard, withInstallDirective } from \"../../utils\";\n\ninterface IconCopyElement extends HTMLElement {\n\tcopyData: string | number;\n\t__iconElement__: Node;\n}\n\nconst IconCopyDirective: Directive = {\n\tmounted(el: IconCopyElement, binding: DirectiveBinding<string | number>) {\n\t\tel.copyData = binding.value;\n\n\t\tif (!el.copyData) return;\n\n\t\tconst handleCopyClick = (): void => {\n\t\t\tvoid copyToClipboard(String(el.copyData)).then(\n\t\t\t\t() => {\n\t\t\t\t\tElMessage({\n\t\t\t\t\t\ttype: \"success\",\n\t\t\t\t\t\tmessage: \"复制成功\",\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tElMessage({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: \"复制失败\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t// 创建 ELIcon 组件\n\t\tconst iconEl = h(\n\t\t\tElIcon,\n\t\t\t{\n\t\t\t\tclass: \"fa__copy-icon\",\n\t\t\t\ttitle: \"复制\",\n\t\t\t\tonClick: handleCopyClick,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdefault: () => h(CopyDocument),\n\t\t\t}\n\t\t);\n\n\t\tconst tempDiv = document.createElement(\"div\");\n\t\trender(iconEl, tempDiv);\n\n\t\tconst iconElement = tempDiv.firstChild;\n\t\tconst parentElement = el.parentElement;\n\t\tif (iconElement === null || parentElement === null) return;\n\t\tel.__iconElement__ = iconElement;\n\t\tparentElement.insertBefore(iconElement, el);\n\t},\n\tupdated(el: IconCopyElement, binding: DirectiveBinding<string | number>) {\n\t\tel.copyData = binding.value;\n\t},\n\tbeforeUnmount(el: IconCopyElement) {\n\t\tif (el.__iconElement__ && el.parentElement) {\n\t\t\tel.parentElement.removeChild(el.__iconElement__);\n\t\t}\n\t},\n};\n\n/** 在目标元素前渲染复制图标的 Vue 指令。 */\nexport const vIconCopy = withInstallDirective(IconCopyDirective, \"iconCopy\");\nexport default vIconCopy;\n","/**\n * v-longpress\n * 长按指令,长按时触发事件\n */\nimport { withInstallDirective } from \"../../utils\";\nimport type { Directive, DirectiveBinding } from \"vue\";\n\nconst LongpressDirective: Directive = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding<(event: MouseEvent | TouchEvent) => void>) {\n\t\tif (typeof binding.value !== \"function\") {\n\t\t\tthrow new TypeError(\"callback 必须是函数。\");\n\t\t}\n\n\t\t// 运行函数\n\t\tconst handler = (e: MouseEvent | TouchEvent): void => {\n\t\t\tbinding.value(e);\n\t\t};\n\n\t\t// 定义变量\n\t\tlet pressTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t// 创建计时器( 2秒后执行函数 )\n\t\tconst start = (event: MouseEvent | TouchEvent): void => {\n\t\t\tif (event instanceof MouseEvent && event.button !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpressTimer ??= setTimeout(() => {\n\t\t\t\thandler(event);\n\t\t\t}, 1000);\n\t\t};\n\t\t// 取消计时器\n\t\tconst cancel = (): void => {\n\t\t\tif (pressTimer !== undefined) {\n\t\t\t\tclearTimeout(pressTimer);\n\t\t\t\tpressTimer = undefined;\n\t\t\t}\n\t\t};\n\t\t// 添加事件监听器\n\t\tel.addEventListener(\"mousedown\", start);\n\t\tel.addEventListener(\"touchstart\", start);\n\t\t// 取消计时器\n\t\tel.addEventListener(\"click\", cancel);\n\t\tel.addEventListener(\"mouseout\", cancel);\n\t\tel.addEventListener(\"touchend\", cancel);\n\t\tel.addEventListener(\"touchcancel\", cancel);\n\t},\n};\n\n/** 长按时触发绑定回调的 Vue 指令。 */\nexport const vLongpress = withInstallDirective(LongpressDirective, \"longpress\");\nexport default vLongpress;\n","/*\n 需求:防止按钮在短时间内被多次点击,使用节流函数限制规定时间内只能点击一次。\n\n 思路:\n 1、第一次点击,立即调用方法并禁用按钮,等延迟结束再次激活按钮\n 2、将需要触发的方法绑定在指令上\n\n 使用:给 Dom 加上 v-throttle 及回调函数即可\n <button v-throttle=\"debounceClick\">节流提交</button>\n*/\nimport { withInstallDirective } from \"../../utils\";\nimport type { Directive } from \"vue\";\n\ninterface ThrottleElement extends HTMLElement {\n\t__handleClick__: () => void;\n\tdisabled: boolean;\n}\n\nconst ThrottleDirective: Directive<ThrottleElement, (...arguments_: unknown[]) => void> = {\n\tmounted(el, binding) {\n\t\tif (typeof binding.value !== \"function\") {\n\t\t\tthrow new TypeError(\"callback 必须是函数。\");\n\t\t}\n\t\tlet timer: NodeJS.Timeout | null = null;\n\t\tel.__handleClick__ = (): void => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\tif (!el.disabled) {\n\t\t\t\tel.disabled = true;\n\t\t\t\tbinding.value();\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tel.disabled = false;\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t};\n\t\tel.addEventListener(\"click\", el.__handleClick__);\n\t},\n\tbeforeUnmount(el) {\n\t\tel.removeEventListener(\"click\", el.__handleClick__);\n\t},\n};\n\n/** 对点击回调进行节流处理的 Vue 指令。 */\nexport const vThrottle = withInstallDirective(ThrottleDirective, \"throttle\");\nexport default vThrottle;\n","import { vCopy } from \"./directives/click-copy\";\nimport { vDebounce } from \"./directives/click-debounce\";\nimport { vDraggable } from \"./directives/click-draggable\";\nimport { vIconCopy } from \"./directives/click-icon-copy\";\nimport { vLongpress } from \"./directives/click-longpress\";\nimport { vThrottle } from \"./directives/click-throttle\";\nimport type { Plugin } from \"vue\";\n\n/** 默认安装器注册的全部 Fast.Element.Plus 指令。 */\nexport default [vCopy, vDebounce, vDraggable, vIconCopy, vLongpress, vThrottle] as Plugin[];\n","/** Element Plus 组件全局配置 */\n\nimport * as ElementPlusIconsVue from \"@element-plus/icons-vue\";\nimport ElementPlus, { ElDialog, ElForm, ElInput, ElInputNumber, ElMessageBox, ElSelect, ElTable, ElTree, ElTreeSelect } from \"element-plus\";\nimport { isNil, isString } from \"lodash-unified\";\nimport { useOverlay } from \"./hooks\";\nimport { callOptionalFunction } from \"./utils\";\nimport type { Action, ElMessageBoxOptions, ElMessageBoxShortcutMethod, MessageBoxData, MessageBoxState } from \"element-plus\";\nimport type { App, AppContext } from \"vue\";\n\n/* Element Plus 默认值设置。 */\nElDialog.setPropsDefaults({\n\t/** 默认拖拽。 */\n\tdraggable: true,\n});\n\nElForm.setPropsDefaults({\n\t/** 默认标签宽度。 */\n\tlabelWidth: \"auto\",\n\t/** 默认标签后缀。 */\n\tlabelSuffix: \":\",\n\t/** 校验失败时默认滚动到第一个错误表单项。 */\n\tscrollToError: true,\n});\n\nElInput.setPropsDefaults({\n\t/** 默认显示字数统计。 */\n\tshowWordLimit: true,\n});\n\nElInputNumber.setPropsDefaults({\n\t/** 默认不显示控制按钮。 */\n\tcontrols: false,\n});\n\nElSelect.setPropsDefaults({\n\t/** 默认加载提示。 */\n\tloadingText: \"加载中...\",\n\t/** 默认无匹配数据提示。 */\n\tnoMatchText: \"暂无匹配的数据\",\n\t/** 默认无数据提示。 */\n\tnoDataText: \"暂无数据\",\n\t/** 多选时默认折叠标签。 */\n\tcollapseTags: true,\n\t/** 默认在悬停折叠标签时显示完整内容。 */\n\tcollapseTagsTooltip: true,\n});\n\nElTable.setPropsDefaults({\n\t/** 默认显示边框。 */\n\tborder: true,\n\t/** 默认高亮当前行。 */\n\thighlightCurrentRow: true,\n\t/** 默认行 Key。 */\n\trowKey: \"id\",\n});\n\nElTree.setPropsDefaults({\n\t/** 默认展开所有节点。 */\n\tdefaultExpandAll: true,\n\t/** 默认点击时选中节点。 */\n\tcheckOnClickNode: true,\n\t/** 默认高亮当前节点。 */\n\thighlightCurrent: true,\n});\n\nElTreeSelect.setPropsDefaults({\n\t/** 默认加载提示。 */\n\tloadingText: \"加载中...\",\n\t/** 默认无匹配数据提示。 */\n\tnoMatchText: \"暂无匹配的数据\",\n\t/** 默认无数据提示。 */\n\tnoDataText: \"暂无数据\",\n\t/** 多选时默认折叠标签。 */\n\tcollapseTags: true,\n\t/** 默认在悬停折叠标签时显示完整内容。 */\n\tcollapseTagsTooltip: true,\n\t/** 默认展开所有节点。 */\n\tdefaultExpandAll: true,\n\t/** 默认点击时选中节点。 */\n\tcheckOnClickNode: true,\n\t/** 默认高亮当前节点。 */\n\thighlightCurrent: true,\n\t/** 默认仅通过箭头展开或收起节点。 */\n\texpandOnClickNode: false,\n});\n\n// ElMessageBox 默认配置\nconst elMessageBox = (\n\ttype: \"alert\" | \"confirm\" | \"prompt\",\n\tmessage: ElMessageBoxOptions[\"message\"],\n\toptions?: ElMessageBoxOptions,\n\tappContext?: AppContext | null\n): Promise<MessageBoxData> => {\n\t// 不直接修改调用方传入的配置,避免复用同一个 Options 对象时残留本次默认值和 beforeClose 包装。\n\tconst resolvedOptions: ElMessageBoxOptions = { ...(options ?? {}) };\n\t// 默认提示\n\tresolvedOptions.title ??= \"温馨提示\";\n\tif (isNil(resolvedOptions.draggable)) {\n\t\t// 默认拖拽\n\t\tresolvedOptions.draggable = true;\n\t}\n\t// 默认 取消按钮的文本内容\n\tresolvedOptions.cancelButtonText ??= \"取消\";\n\t// 默认 确定按钮的文本内容\n\tresolvedOptions.confirmButtonText ??= \"确定\";\n\tif (isNil(resolvedOptions.closeOnClickModal)) {\n\t\t// 默认 是否可通过点击遮罩层关闭 MessageBox\n\t\tresolvedOptions.closeOnClickModal = false;\n\t}\n\tif (isNil(resolvedOptions.closeOnPressEscape)) {\n\t\t// 默认 是否可通过按下 ESC 键关闭 MessageBox\n\t\tresolvedOptions.closeOnPressEscape = false;\n\t}\n\n\t// 关闭之前的判断逻辑\n\tif (!isNil(resolvedOptions.beforeClose)) {\n\t\tconst localBeforeClose = resolvedOptions.beforeClose;\n\t\tconst localConfirmButtonText = resolvedOptions.confirmButtonText;\n\t\tconst localShowCancelButton = resolvedOptions.showCancelButton;\n\t\tresolvedOptions.beforeClose = (action: Action, instance: MessageBoxState, done: () => void): void => {\n\t\t\tif (action === \"confirm\") {\n\t\t\t\tuseOverlay.show(0);\n\t\t\t\tinstance.confirmButtonLoading = true;\n\t\t\t\tinstance.showCancelButton = false;\n\t\t\t\tinstance.confirmButtonText = \"加载中...\";\n\t\t\t\tlet completed = false;\n\n\t\t\t\tconst cancelLoading = (): void => {\n\t\t\t\t\tinstance.confirmButtonLoading = false;\n\t\t\t\t\tinstance.showCancelButton = localShowCancelButton ?? false;\n\t\t\t\t\tinstance.confirmButtonText = localConfirmButtonText;\n\t\t\t\t\tuseOverlay.hide();\n\t\t\t\t};\n\n\t\t\t\tconst newDone = (): void => {\n\t\t\t\t\tif (completed) return;\n\t\t\t\t\tcompleted = true;\n\t\t\t\t\tcancelLoading();\n\t\t\t\t\tdone();\n\t\t\t\t};\n\n\t\t\t\tcallOptionalFunction(localBeforeClose, action, instance, newDone)\n\t\t\t\t\t.then(() => newDone())\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tif (!completed) cancelLoading();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdone();\n\t\t\t}\n\t\t};\n\t}\n\n\t// 根据类型有一些判断\n\tswitch (type) {\n\t\tcase \"alert\":\n\t\t\tbreak;\n\t\tcase \"confirm\":\n\t\t\tresolvedOptions.showCancelButton ??= true;\n\t\t\tbreak;\n\t\tcase \"prompt\":\n\t\t\tresolvedOptions.showCancelButton ??= true;\n\t\t\tbreak;\n\t}\n\n\treturn ElMessageBox({ message, ...resolvedOptions, boxType: type }, appContext);\n};\n\ntype MESSAGE_BOX_TYPE = \"alert\" | \"confirm\" | \"prompt\";\nconst MESSAGE_BOX_DEFAULT_OPTS: Record<MESSAGE_BOX_TYPE, Partial<ElMessageBoxOptions>> = {\n\talert: { closeOnPressEscape: false, closeOnClickModal: false },\n\tconfirm: { showCancelButton: true },\n\tprompt: { showCancelButton: true, showInput: true },\n};\n\nconst isAppContext = (value: ElMessageBoxOptions | AppContext | null | undefined): value is AppContext =>\n\ttypeof value === \"object\" && value !== null && \"app\" in value && \"config\" in value;\n\nconst createMessageBoxShortcut = (type: MESSAGE_BOX_TYPE): ElMessageBoxShortcutMethod => {\n\tfunction shortcut(\n\t\tmessage: ElMessageBoxOptions[\"message\"],\n\t\toptions?: ElMessageBoxOptions,\n\t\tappContext?: AppContext | null\n\t): Promise<MessageBoxData>;\n\tfunction shortcut(\n\t\tmessage: ElMessageBoxOptions[\"message\"],\n\t\ttitle: ElMessageBoxOptions[\"title\"],\n\t\toptions?: ElMessageBoxOptions,\n\t\tappContext?: AppContext | null\n\t): Promise<MessageBoxData>;\n\tfunction shortcut(\n\t\tmessage: ElMessageBoxOptions[\"message\"],\n\t\ttitleOrOptions?: string | ElMessageBoxOptions,\n\t\toptionsOrContext?: ElMessageBoxOptions | AppContext | null,\n\t\tappContext?: AppContext | null\n\t): Promise<MessageBoxData> {\n\t\tif (isString(titleOrOptions)) {\n\t\t\tconst options = isAppContext(optionsOrContext) ? undefined : optionsOrContext;\n\t\t\treturn elMessageBox(type, message, { ...MESSAGE_BOX_DEFAULT_OPTS[type], title: titleOrOptions, ...(options ?? {}) }, appContext);\n\t\t}\n\n\t\tconst context = optionsOrContext === null || isAppContext(optionsOrContext) ? optionsOrContext : undefined;\n\t\treturn elMessageBox(type, message, { ...MESSAGE_BOX_DEFAULT_OPTS[type], ...(titleOrOptions ?? {}) }, context);\n\t}\n\n\treturn shortcut;\n};\n\nElMessageBox.alert = createMessageBoxShortcut(\"alert\");\nElMessageBox.prompt = createMessageBoxShortcut(\"prompt\");\nElMessageBox.confirm = createMessageBoxShortcut(\"confirm\");\n\n/**\n * 注册 Element Plus 及其全部图标。\n *\n * @param app - Vue 应用实例。\n */\nexport const installElementPlus = (app: App): void => {\n\t/** 注册 Element Plus 全部图标,供 FaIcon 按名称解析。 */\n\tfor (const [key, component] of Object.entries(ElementPlusIconsVue)) app.component(`el-icon-${key}`, component);\n\n\t/** Element Plus 组件完整引入 */\n\tapp.use(ElementPlus);\n};\n","/** 当前 Fast.Element.Plus 包版本,发布时必须与 package.json 保持一致。 */\nexport const version = \"2.0.0\";\n","import * as FastElementPlusIconsVue from \"@fast-element-plus/icons-vue\";\nimport FastElementPlusComponents from \"./component\";\nimport FastElementPlusDirectives from \"./directive\";\nimport { installElementPlus } from \"./element-plus\";\nimport { version } from \"./version\";\nimport type { App } from \"vue\";\n\n/** Vue 应用上的安装状态键,避免同一应用重复注册组件和指令。 */\nexport const INSTALLED_KEY = Symbol(\"FAST_ELEMENT_PLUS_INSTALLED_KEY\");\n\ninterface InstallableApp extends App {\n\t[INSTALLED_KEY]?: boolean;\n}\n\n/** 创建包含版本信息和幂等安装逻辑的 Fast.Element.Plus 插件。 */\nexport const makeInstaller = (): {\n\tversion: string;\n\tinstall: (app: App) => void;\n} => {\n\tconst install = (app: App): void => {\n\t\tif ((app as InstallableApp)[INSTALLED_KEY]) return;\n\n\t\t(app as InstallableApp)[INSTALLED_KEY] = true;\n\n\t\tinstallElementPlus(app);\n\n\t\t/** 注册 Fast.Element.Plus 全部图标,供 FaIcon 按名称解析。 */\n\t\tfor (const [key, component] of Object.entries(FastElementPlusIconsVue)) app.component(`fa-icon-${key}`, component);\n\n\t\tFastElementPlusComponents.forEach((c) => app.use(c));\n\n\t\tFastElementPlusDirectives.forEach((d) => app.use(d));\n\t};\n\n\treturn {\n\t\tversion,\n\t\tinstall,\n\t};\n};\n","export * from \"./avatar\";\nexport * from \"./button\";\nexport * from \"./carNumber\";\nexport * from \"./contextMenu\";\nexport * from \"./dialog\";\nexport * from \"./drawer\";\nexport * from \"./form\";\nexport * from \"./formItemTip\";\nexport * from \"./icon\";\nexport * from \"./iconSelector\";\nexport * from \"./image\";\nexport * from \"./inputDialogPage\";\nexport * from \"./layoutGrid\";\nexport * from \"./select\";\nexport * from \"./selectPage\";\nexport * from \"./selectV2\";\nexport * from \"./table\";\nexport * from \"./tree\";\nexport * from \"./treeSelect\";\nexport * from \"./upload\";\nexport * from \"./uploadImage\";\nexport * from \"./uploadImages\";\n","import { makeInstaller } from \"./make-installer\";\n\n/** 用于标记已经安装 Fast.Element.Plus 的 Vue 应用。 */\nexport { INSTALLED_KEY } from \"./make-installer\";\n/** Fast.Element.Plus 的全部公开组件。 */\nexport * as FastElementPlus from \"./components\";\n\nexport * from \"./components\";\nexport * from \"./constants\";\nexport * from \"./directives\";\nexport * from \"./hooks\";\n\n/** Decimal.js 的任意精度十进制实现。 */\nexport { Decimal } from \"decimal.js\";\n\nconst installer = makeInstaller();\n\n/** 将全部组件、指令、Element Plus 及两套图标安装到 Vue 应用。 */\nexport const install = installer.install;\n/** 当前 Fast.Element.Plus 包版本。 */\nexport const version = installer.version;\n/** 支持 `app.use(FastElementPlus)` 的默认插件。 */\nexport default installer;\n"],"x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,171,175,176,209,230],"mappings":"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"}