@falcon-ui/falcon-ui 1.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 (289) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/cjs/JsBarcode-BlUjuVmB.cjs +3519 -0
  4. package/cjs/JsBarcode-BlUjuVmB.cjs.map +1 -0
  5. package/cjs/chunk-D4y6LrGi.cjs +40 -0
  6. package/cjs/components/JsBarcode-BOXEZn4Q.cjs +3519 -0
  7. package/cjs/components/JsBarcode-BOXEZn4Q.cjs.map +1 -0
  8. package/cjs/components/barcode/JsBarcode-BOXEZn4Q.cjs +3519 -0
  9. package/cjs/components/barcode/JsBarcode-BOXEZn4Q.cjs.map +1 -0
  10. package/cjs/components/barcode/chunk-D4y6LrGi.cjs +40 -0
  11. package/cjs/components/barcode/index.cjs +211 -0
  12. package/cjs/components/barcode/index.cjs.map +1 -0
  13. package/cjs/components/barcode/src/JsBarcode-BOXEZn4Q.cjs +3519 -0
  14. package/cjs/components/barcode/src/JsBarcode-BOXEZn4Q.cjs.map +1 -0
  15. package/cjs/components/barcode/src/barcode.cjs +102 -0
  16. package/cjs/components/barcode/src/barcode.cjs.map +1 -0
  17. package/cjs/components/barcode/src/barcode.vue.cjs +200 -0
  18. package/cjs/components/barcode/src/barcode.vue.cjs.map +1 -0
  19. package/cjs/components/barcode/src/chunk-D4y6LrGi.cjs +40 -0
  20. package/cjs/components/button/index.cjs +135 -0
  21. package/cjs/components/button/index.cjs.map +1 -0
  22. package/cjs/components/button/src/button.cjs +16 -0
  23. package/cjs/components/button/src/button.cjs.map +1 -0
  24. package/cjs/components/button/src/button.vue.cjs +124 -0
  25. package/cjs/components/button/src/button.vue.cjs.map +1 -0
  26. package/cjs/components/chunk-D4y6LrGi.cjs +40 -0
  27. package/cjs/components/date-picker/index.cjs +164 -0
  28. package/cjs/components/date-picker/index.cjs.map +1 -0
  29. package/cjs/components/date-picker/src/date-picker.cjs +25 -0
  30. package/cjs/components/date-picker/src/date-picker.cjs.map +1 -0
  31. package/cjs/components/date-picker/src/date-picker.vue.cjs +153 -0
  32. package/cjs/components/date-picker/src/date-picker.vue.cjs.map +1 -0
  33. package/cjs/components/dialog/index.cjs +346 -0
  34. package/cjs/components/dialog/index.cjs.map +1 -0
  35. package/cjs/components/dialog/src/dialog.cjs +40 -0
  36. package/cjs/components/dialog/src/dialog.cjs.map +1 -0
  37. package/cjs/components/dialog/src/dialog.vue.cjs +343 -0
  38. package/cjs/components/dialog/src/dialog.vue.cjs.map +1 -0
  39. package/cjs/components/index.cjs +9450 -0
  40. package/cjs/components/index.cjs.map +1 -0
  41. package/cjs/components/input/index.cjs +175 -0
  42. package/cjs/components/input/index.cjs.map +1 -0
  43. package/cjs/components/input/src/input.cjs +27 -0
  44. package/cjs/components/input/src/input.cjs.map +1 -0
  45. package/cjs/components/input/src/input.vue.cjs +164 -0
  46. package/cjs/components/input/src/input.vue.cjs.map +1 -0
  47. package/cjs/components/input-number/index.cjs +374 -0
  48. package/cjs/components/input-number/index.cjs.map +1 -0
  49. package/cjs/components/input-number/src/input-number.cjs +48 -0
  50. package/cjs/components/input-number/src/input-number.cjs.map +1 -0
  51. package/cjs/components/input-number/src/input-number.vue.cjs +363 -0
  52. package/cjs/components/input-number/src/input-number.vue.cjs.map +1 -0
  53. package/cjs/components/input-search/index.cjs +286 -0
  54. package/cjs/components/input-search/index.cjs.map +1 -0
  55. package/cjs/components/input-search/src/input-search.cjs +55 -0
  56. package/cjs/components/input-search/src/input-search.cjs.map +1 -0
  57. package/cjs/components/input-search/src/input-search.vue.cjs +275 -0
  58. package/cjs/components/input-search/src/input-search.vue.cjs.map +1 -0
  59. package/cjs/components/qr-code/index.cjs +1975 -0
  60. package/cjs/components/qr-code/index.cjs.map +1 -0
  61. package/cjs/components/qr-code/src/qr-code.cjs +63 -0
  62. package/cjs/components/qr-code/src/qr-code.cjs.map +1 -0
  63. package/cjs/components/qr-code/src/qr-code.vue.cjs +1964 -0
  64. package/cjs/components/qr-code/src/qr-code.vue.cjs.map +1 -0
  65. package/cjs/components/radial-menu/index.cjs +983 -0
  66. package/cjs/components/radial-menu/index.cjs.map +1 -0
  67. package/cjs/components/radial-menu/src/radial-menu.cjs +96 -0
  68. package/cjs/components/radial-menu/src/radial-menu.cjs.map +1 -0
  69. package/cjs/components/radial-menu/src/radial-menu.vue.cjs +921 -0
  70. package/cjs/components/radial-menu/src/radial-menu.vue.cjs.map +1 -0
  71. package/cjs/components/select/index.cjs +163 -0
  72. package/cjs/components/select/index.cjs.map +1 -0
  73. package/cjs/components/select/src/select.cjs +16 -0
  74. package/cjs/components/select/src/select.cjs.map +1 -0
  75. package/cjs/components/select/src/select.vue.cjs +152 -0
  76. package/cjs/components/select/src/select.vue.cjs.map +1 -0
  77. package/cjs/components/table/index.cjs +3351 -0
  78. package/cjs/components/table/index.cjs.map +1 -0
  79. package/cjs/components/table/src/table.cjs +62 -0
  80. package/cjs/components/table/src/table.cjs.map +1 -0
  81. package/cjs/components/table/src/table.vue.cjs +3085 -0
  82. package/cjs/components/table/src/table.vue.cjs.map +1 -0
  83. package/cjs/dialog-CJU00aEV.cjs +614 -0
  84. package/cjs/dialog-CJU00aEV.cjs.map +1 -0
  85. package/cjs/dialog-DcH26KbE.cjs +2 -0
  86. package/cjs/hooks/dialog-DpYPBcKV.cjs +266 -0
  87. package/cjs/hooks/dialog-DpYPBcKV.cjs.map +1 -0
  88. package/cjs/hooks/hooks-D2Jaq5kO.cjs +328 -0
  89. package/cjs/hooks/hooks-D2Jaq5kO.cjs.map +1 -0
  90. package/cjs/hooks/index.cjs +8 -0
  91. package/cjs/icons/index.cjs +86 -0
  92. package/cjs/icons/index.cjs.map +1 -0
  93. package/cjs/index.cjs +9141 -0
  94. package/cjs/index.cjs.map +1 -0
  95. package/cjs/utils/index.cjs +69 -0
  96. package/cjs/utils/index.cjs.map +1 -0
  97. package/esm/JsBarcode-kVJER62m.js +3514 -0
  98. package/esm/JsBarcode-kVJER62m.js.map +1 -0
  99. package/esm/chunk-BuRq7rDw.js +23 -0
  100. package/esm/components/JsBarcode-CzzxrEd_.js +3514 -0
  101. package/esm/components/JsBarcode-CzzxrEd_.js.map +1 -0
  102. package/esm/components/barcode/JsBarcode-C5ux6wsb.js +3514 -0
  103. package/esm/components/barcode/JsBarcode-C5ux6wsb.js.map +1 -0
  104. package/esm/components/barcode/chunk--em_ddB3.js +23 -0
  105. package/esm/components/barcode/index.mjs +204 -0
  106. package/esm/components/barcode/index.mjs.map +1 -0
  107. package/esm/components/barcode/src/JsBarcode-C5ux6wsb.js +3514 -0
  108. package/esm/components/barcode/src/JsBarcode-C5ux6wsb.js.map +1 -0
  109. package/esm/components/barcode/src/barcode.mjs +98 -0
  110. package/esm/components/barcode/src/barcode.mjs.map +1 -0
  111. package/esm/components/barcode/src/barcode.vue.mjs +194 -0
  112. package/esm/components/barcode/src/barcode.vue.mjs.map +1 -0
  113. package/esm/components/barcode/src/chunk--em_ddB3.js +23 -0
  114. package/esm/components/button/index.mjs +126 -0
  115. package/esm/components/button/index.mjs.map +1 -0
  116. package/esm/components/button/src/button.mjs +14 -0
  117. package/esm/components/button/src/button.mjs.map +1 -0
  118. package/esm/components/button/src/button.vue.mjs +117 -0
  119. package/esm/components/button/src/button.vue.mjs.map +1 -0
  120. package/esm/components/chunk-BuRq7rDw.js +23 -0
  121. package/esm/components/date-picker/index.mjs +155 -0
  122. package/esm/components/date-picker/index.mjs.map +1 -0
  123. package/esm/components/date-picker/src/date-picker.mjs +23 -0
  124. package/esm/components/date-picker/src/date-picker.mjs.map +1 -0
  125. package/esm/components/date-picker/src/date-picker.vue.mjs +146 -0
  126. package/esm/components/date-picker/src/date-picker.vue.mjs.map +1 -0
  127. package/esm/components/dialog/index.mjs +335 -0
  128. package/esm/components/dialog/index.mjs.map +1 -0
  129. package/esm/components/dialog/src/dialog.mjs +38 -0
  130. package/esm/components/dialog/src/dialog.mjs.map +1 -0
  131. package/esm/components/dialog/src/dialog.vue.mjs +334 -0
  132. package/esm/components/dialog/src/dialog.vue.mjs.map +1 -0
  133. package/esm/components/index.mjs +9386 -0
  134. package/esm/components/index.mjs.map +1 -0
  135. package/esm/components/input/index.mjs +166 -0
  136. package/esm/components/input/index.mjs.map +1 -0
  137. package/esm/components/input/src/input.mjs +25 -0
  138. package/esm/components/input/src/input.mjs.map +1 -0
  139. package/esm/components/input/src/input.vue.mjs +157 -0
  140. package/esm/components/input/src/input.vue.mjs.map +1 -0
  141. package/esm/components/input-number/index.mjs +365 -0
  142. package/esm/components/input-number/index.mjs.map +1 -0
  143. package/esm/components/input-number/src/input-number.mjs +45 -0
  144. package/esm/components/input-number/src/input-number.mjs.map +1 -0
  145. package/esm/components/input-number/src/input-number.vue.mjs +356 -0
  146. package/esm/components/input-number/src/input-number.vue.mjs.map +1 -0
  147. package/esm/components/input-search/index.mjs +277 -0
  148. package/esm/components/input-search/index.mjs.map +1 -0
  149. package/esm/components/input-search/src/input-search.mjs +53 -0
  150. package/esm/components/input-search/src/input-search.mjs.map +1 -0
  151. package/esm/components/input-search/src/input-search.vue.mjs +268 -0
  152. package/esm/components/input-search/src/input-search.vue.mjs.map +1 -0
  153. package/esm/components/qr-code/index.mjs +1967 -0
  154. package/esm/components/qr-code/index.mjs.map +1 -0
  155. package/esm/components/qr-code/src/qr-code.mjs +59 -0
  156. package/esm/components/qr-code/src/qr-code.mjs.map +1 -0
  157. package/esm/components/qr-code/src/qr-code.vue.mjs +1958 -0
  158. package/esm/components/qr-code/src/qr-code.vue.mjs.map +1 -0
  159. package/esm/components/radial-menu/index.mjs +974 -0
  160. package/esm/components/radial-menu/index.mjs.map +1 -0
  161. package/esm/components/radial-menu/src/radial-menu.mjs +94 -0
  162. package/esm/components/radial-menu/src/radial-menu.mjs.map +1 -0
  163. package/esm/components/radial-menu/src/radial-menu.vue.mjs +916 -0
  164. package/esm/components/radial-menu/src/radial-menu.vue.mjs.map +1 -0
  165. package/esm/components/select/index.mjs +154 -0
  166. package/esm/components/select/index.mjs.map +1 -0
  167. package/esm/components/select/src/select.mjs +14 -0
  168. package/esm/components/select/src/select.mjs.map +1 -0
  169. package/esm/components/select/src/select.vue.mjs +145 -0
  170. package/esm/components/select/src/select.vue.mjs.map +1 -0
  171. package/esm/components/table/index.mjs +3342 -0
  172. package/esm/components/table/index.mjs.map +1 -0
  173. package/esm/components/table/src/table.mjs +60 -0
  174. package/esm/components/table/src/table.mjs.map +1 -0
  175. package/esm/components/table/src/table.vue.mjs +3080 -0
  176. package/esm/components/table/src/table.vue.mjs.map +1 -0
  177. package/esm/dialog-Cm3Px-Bu.js +537 -0
  178. package/esm/dialog-Cm3Px-Bu.js.map +1 -0
  179. package/esm/dialog-CzZm50XM.js +2 -0
  180. package/esm/hooks/dialog-d4SMZWbw.js +261 -0
  181. package/esm/hooks/dialog-d4SMZWbw.js.map +1 -0
  182. package/esm/hooks/hooks-DdjieG2I.js +281 -0
  183. package/esm/hooks/hooks-DdjieG2I.js.map +1 -0
  184. package/esm/hooks/index.mjs +2 -0
  185. package/esm/icons/index.mjs +79 -0
  186. package/esm/icons/index.mjs.map +1 -0
  187. package/esm/index.mjs +9065 -0
  188. package/esm/index.mjs.map +1 -0
  189. package/esm/utils/index.mjs +65 -0
  190. package/esm/utils/index.mjs.map +1 -0
  191. package/global.d.ts +39 -0
  192. package/package.json +131 -0
  193. package/theme/index.css +1 -0
  194. package/theme/index.scss +16 -0
  195. package/theme/src/barcode.scss +14 -0
  196. package/theme/src/button.scss +65 -0
  197. package/theme/src/date-picker.scss +87 -0
  198. package/theme/src/dialog.scss +146 -0
  199. package/theme/src/ep-vars.scss +11 -0
  200. package/theme/src/input-number.scss +66 -0
  201. package/theme/src/input-search.scss +78 -0
  202. package/theme/src/input.scss +66 -0
  203. package/theme/src/mixins/bem.scss +35 -0
  204. package/theme/src/mixins/color.scss +8 -0
  205. package/theme/src/qr-code.scss +23 -0
  206. package/theme/src/radial-menu.scss +346 -0
  207. package/theme/src/select.scss +44 -0
  208. package/theme/src/table.scss +143 -0
  209. package/theme/src/tokens.scss +26 -0
  210. package/theme/src/tree-select.scss +45 -0
  211. package/theme/src/tree.scss +369 -0
  212. package/types/components/barcode/index.d.ts +183 -0
  213. package/types/components/barcode/src/barcode.d.ts +147 -0
  214. package/types/components/barcode/src/barcode.vue.d.ts +184 -0
  215. package/types/components/button/index.d.ts +135 -0
  216. package/types/components/button/src/button.d.ts +33 -0
  217. package/types/components/button/src/button.vue.d.ts +138 -0
  218. package/types/components/date-picker/index.d.ts +508 -0
  219. package/types/components/date-picker/src/date-picker.d.ts +35 -0
  220. package/types/components/date-picker/src/date-picker.vue.d.ts +509 -0
  221. package/types/components/dialog/index.d.ts +630 -0
  222. package/types/components/dialog/src/dialog.d.ts +70 -0
  223. package/types/components/dialog/src/dialog.vue.d.ts +257 -0
  224. package/types/components/index.d.ts +27 -0
  225. package/types/components/input/index.d.ts +233 -0
  226. package/types/components/input/src/input.d.ts +65 -0
  227. package/types/components/input/src/input.vue.d.ts +239 -0
  228. package/types/components/input-number/index.d.ts +713 -0
  229. package/types/components/input-number/src/input-number.d.ts +101 -0
  230. package/types/components/input-number/src/input-number.vue.d.ts +283 -0
  231. package/types/components/input-search/index.d.ts +113 -0
  232. package/types/components/input-search/src/input-search.d.ts +128 -0
  233. package/types/components/input-search/src/input-search.vue.d.ts +114 -0
  234. package/types/components/qr-code/index.d.ts +109 -0
  235. package/types/components/qr-code/src/qr-code.d.ts +93 -0
  236. package/types/components/qr-code/src/qr-code.vue.d.ts +109 -0
  237. package/types/components/radial-menu/index.d.ts +499 -0
  238. package/types/components/radial-menu/src/radial-menu-item.d.ts +40 -0
  239. package/types/components/radial-menu/src/radial-menu-item.vue.d.ts +95 -0
  240. package/types/components/radial-menu/src/radial-menu.d.ts +92 -0
  241. package/types/components/radial-menu/src/radial-menu.vue.d.ts +200 -0
  242. package/types/components/radial-menu/src/types.d.ts +48 -0
  243. package/types/components/radial-menu/src/use-radial-menu-items.d.ts +19 -0
  244. package/types/components/radial-menu/src/use-radial-menu-keyboard.d.ts +17 -0
  245. package/types/components/radial-menu/src/use-radial-menu-position.d.ts +45 -0
  246. package/types/components/radial-menu/src/use-radial-menu-shortcut.d.ts +8 -0
  247. package/types/components/radial-menu/src/use-radial-menu-state.d.ts +15 -0
  248. package/types/components/select/index.d.ts +5 -0
  249. package/types/components/select/src/select.d.ts +30 -0
  250. package/types/components/select/src/select.vue.d.ts +25 -0
  251. package/types/components/table/index.d.ts +8 -0
  252. package/types/components/table/src/editor-registry.d.ts +24 -0
  253. package/types/components/table/src/proxy-data.d.ts +10 -0
  254. package/types/components/table/src/table-editor.d.ts +18 -0
  255. package/types/components/table/src/table-editor.vue.d.ts +43 -0
  256. package/types/components/table/src/table.d.ts +179 -0
  257. package/types/components/table/src/table.vue.d.ts +121 -0
  258. package/types/components/tree/index.d.ts +5 -0
  259. package/types/components/tree/src/tree-node.vue.d.ts +88 -0
  260. package/types/components/tree/src/tree-types.d.ts +90 -0
  261. package/types/components/tree/src/tree.d.ts +448 -0
  262. package/types/components/tree/src/tree.vue.d.ts +301 -0
  263. package/types/components/tree/src/use-tree-check-conduct.d.ts +43 -0
  264. package/types/components/tree/src/use-tree-checked-state.d.ts +34 -0
  265. package/types/components/tree/src/use-tree-drag.d.ts +45 -0
  266. package/types/components/tree/src/use-tree-expanded-state.d.ts +41 -0
  267. package/types/components/tree/src/use-tree-keyboard.d.ts +21 -0
  268. package/types/components/tree/src/use-tree-load.d.ts +25 -0
  269. package/types/components/tree/src/use-tree-scroll.d.ts +17 -0
  270. package/types/components/tree/src/use-tree-selected-state.d.ts +29 -0
  271. package/types/components/tree-select/index.d.ts +5 -0
  272. package/types/components/tree-select/src/tree-select.d.ts +26 -0
  273. package/types/components/tree-select/src/tree-select.vue.d.ts +25 -0
  274. package/types/falcon-ui/index.d.ts +8 -0
  275. package/types/hooks/index.d.ts +3 -0
  276. package/types/hooks/src/use-clearable-state.d.ts +10 -0
  277. package/types/hooks/src/use-component.d.ts +15 -0
  278. package/types/hooks/src/use-dialog.d.ts +49 -0
  279. package/types/icons/index.d.ts +1 -0
  280. package/types/icons/src/components/holder-outlined.vue.d.ts +3 -0
  281. package/types/icons/src/components/index.d.ts +3 -0
  282. package/types/icons/src/components/minus-square-outlined.vue.d.ts +3 -0
  283. package/types/icons/src/components/plus-square-outlined.vue.d.ts +3 -0
  284. package/types/utils/index.d.ts +3 -0
  285. package/types/utils/src/bem.d.ts +11 -0
  286. package/types/utils/src/component.d.ts +6 -0
  287. package/types/utils/src/install.d.ts +5 -0
  288. package/umd/falcon-ui.umd.js +13297 -0
  289. package/umd/falcon-ui.umd.js.map +1 -0
@@ -0,0 +1,275 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ let vue = require("vue");
6
+ let __element_plus_icons_vue = require("@element-plus/icons-vue");
7
+ let element_plus = require("element-plus");
8
+ var defaultNamespace = "fl";
9
+ var statePrefix = "is-";
10
+ var buildBemName = (namespace, block, blockSuffix = "", element = "", modifier = "") => {
11
+ let className = `${namespace}-${block}`;
12
+ if (blockSuffix) className += `-${blockSuffix}`;
13
+ if (element) className += `__${element}`;
14
+ if (modifier) className += `--${modifier}`;
15
+ return className;
16
+ };
17
+ const useNamespace = (block, namespace = defaultNamespace) => {
18
+ const b = (blockSuffix = "") => buildBemName(namespace, block, blockSuffix);
19
+ const e = (element) => element ? buildBemName(namespace, block, "", element) : "";
20
+ const m = (modifier) => modifier ? buildBemName(namespace, block, "", "", modifier) : "";
21
+ const be = (blockSuffix, element) => {
22
+ if (!blockSuffix || !element) return "";
23
+ return buildBemName(namespace, block, blockSuffix, element);
24
+ };
25
+ const em = (element, modifier) => {
26
+ if (!element || !modifier) return "";
27
+ return buildBemName(namespace, block, "", element, modifier);
28
+ };
29
+ const bm = (blockSuffix, modifier) => {
30
+ if (!blockSuffix || !modifier) return "";
31
+ return buildBemName(namespace, block, blockSuffix, "", modifier);
32
+ };
33
+ const bem = (blockSuffix, element, modifier) => {
34
+ if (!blockSuffix && !element && !modifier) return b();
35
+ return buildBemName(namespace, block, blockSuffix, element, modifier);
36
+ };
37
+ const is = (name, state = true) => state ? `${statePrefix}${name}` : "";
38
+ return {
39
+ namespace,
40
+ b,
41
+ e,
42
+ m,
43
+ be,
44
+ em,
45
+ bm,
46
+ bem,
47
+ is
48
+ };
49
+ };
50
+ const flInputSearchProps = {
51
+ modelValue: {
52
+ type: [String, Number],
53
+ default: null
54
+ },
55
+ label: {
56
+ type: String,
57
+ default: ""
58
+ },
59
+ fetchApi: {
60
+ type: Function,
61
+ default: void 0
62
+ },
63
+ mapResult: {
64
+ type: Function,
65
+ required: true
66
+ },
67
+ placeholder: {
68
+ type: String,
69
+ default: ""
70
+ },
71
+ disabled: {
72
+ type: Boolean,
73
+ default: false
74
+ },
75
+ clearable: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ isError: {
80
+ type: Boolean,
81
+ default: false
82
+ },
83
+ isTable: {
84
+ type: Boolean,
85
+ default: false
86
+ },
87
+ clearOnBlurUnconfirmed: {
88
+ type: Boolean,
89
+ default: true
90
+ }
91
+ };
92
+ const flInputSearchEmits = {
93
+ "update:modelValue": (value) => value === null || typeof value === "string" || typeof value === "number",
94
+ "update:label": (value) => typeof value === "string",
95
+ openDialog: (payload) => typeof payload.keyword === "string" && (payload.reason === "manual" || payload.reason === "multi-match") && (payload.results === void 0 || Array.isArray(payload.results)),
96
+ "selection-commit": (payload) => typeof payload.label === "string" && payload.source === "enter" && (payload.value === null || typeof payload.value === "string" || typeof payload.value === "number"),
97
+ "search-error": (payload) => typeof payload.keyword === "string",
98
+ clear: (payload) => payload.reason === "manual-empty" || payload.reason === "blur-unconfirmed" || payload.reason === "error"
99
+ };
100
+ var input_search_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
101
+ name: "FlInputSearch",
102
+ inheritAttrs: false,
103
+ __name: "input-search",
104
+ props: flInputSearchProps,
105
+ emits: flInputSearchEmits,
106
+ setup(__props, { expose: __expose, emit: __emit }) {
107
+ const props = __props;
108
+ const emit = __emit;
109
+ const ns = useNamespace("input-search");
110
+ const inputRef = (0, vue.ref)(null);
111
+ const innerLabel = (0, vue.ref)(props.label);
112
+ const isLoading = (0, vue.ref)(false);
113
+ const latestSearchToken = (0, vue.ref)(0);
114
+ const lastValidLabel = (0, vue.ref)(props.label);
115
+ const lastValidValue = (0, vue.ref)(props.modelValue);
116
+ const inputClass = (0, vue.computed)(() => [ns.b(), {
117
+ "is-error": props.isError,
118
+ "is-table": props.isTable
119
+ }]);
120
+ const searchTriggerClass = ns.e("trigger");
121
+ const normalizeLabel = (value) => typeof value === "string" ? value : "";
122
+ const normalizeValue = (value) => {
123
+ if (value === null || typeof value === "string" || typeof value === "number") return value;
124
+ return null;
125
+ };
126
+ const syncSnapshot = (value, label) => {
127
+ lastValidValue.value = value;
128
+ lastValidLabel.value = label;
129
+ };
130
+ const clearSelection = (reason) => {
131
+ innerLabel.value = "";
132
+ syncSnapshot(null, "");
133
+ emit("update:modelValue", null);
134
+ emit("update:label", "");
135
+ emit("clear", { reason });
136
+ };
137
+ const commitSelection = (result) => {
138
+ const nextValue = normalizeValue(result.value);
139
+ const nextLabel = normalizeLabel(result.label);
140
+ innerLabel.value = nextLabel;
141
+ syncSnapshot(nextValue, nextLabel);
142
+ emit("update:modelValue", nextValue);
143
+ emit("update:label", nextLabel);
144
+ emit("selection-commit", {
145
+ value: nextValue,
146
+ label: nextLabel,
147
+ source: "enter"
148
+ });
149
+ };
150
+ const handleInput = (value) => {
151
+ const nextLabel = normalizeLabel(value);
152
+ innerLabel.value = nextLabel;
153
+ emit("update:label", nextLabel);
154
+ };
155
+ const handleManualSearch = () => {
156
+ emit("openDialog", {
157
+ keyword: innerLabel.value.trim(),
158
+ reason: "manual"
159
+ });
160
+ };
161
+ const handleEnter = async () => {
162
+ if (isLoading.value) return;
163
+ const keyword = innerLabel.value.trim();
164
+ if (!keyword) return;
165
+ if (!props.fetchApi) {
166
+ emit("openDialog", {
167
+ keyword,
168
+ reason: "manual"
169
+ });
170
+ return;
171
+ }
172
+ const currentToken = latestSearchToken.value + 1;
173
+ latestSearchToken.value = currentToken;
174
+ isLoading.value = true;
175
+ try {
176
+ const response = await props.fetchApi(keyword);
177
+ if (currentToken !== latestSearchToken.value) return;
178
+ const results = Array.isArray(response) ? response : [];
179
+ if (results.length === 1) {
180
+ commitSelection(props.mapResult(results[0]));
181
+ return;
182
+ }
183
+ if (results.length > 1) emit("openDialog", {
184
+ keyword,
185
+ reason: "multi-match",
186
+ results
187
+ });
188
+ } catch (error) {
189
+ if (currentToken !== latestSearchToken.value) return;
190
+ emit("search-error", {
191
+ keyword,
192
+ error
193
+ });
194
+ } finally {
195
+ if (currentToken === latestSearchToken.value) isLoading.value = false;
196
+ }
197
+ };
198
+ const handleNativeClear = () => {
199
+ clearSelection("manual-empty");
200
+ };
201
+ const handleBlur = () => {
202
+ if (isLoading.value) return;
203
+ const currentLabel = innerLabel.value;
204
+ if (currentLabel === lastValidLabel.value) return;
205
+ if (!currentLabel) {
206
+ clearSelection("manual-empty");
207
+ return;
208
+ }
209
+ if (props.clearOnBlurUnconfirmed) clearSelection("blur-unconfirmed");
210
+ };
211
+ const focus = () => {
212
+ inputRef.value?.focus();
213
+ };
214
+ const blur = () => {
215
+ inputRef.value?.blur();
216
+ };
217
+ const clear = () => {
218
+ inputRef.value?.clear();
219
+ };
220
+ (0, vue.watch)(() => props.label, (value) => {
221
+ innerLabel.value = value;
222
+ });
223
+ (0, vue.watch)(() => props.modelValue, (value) => {
224
+ if (value === lastValidValue.value) return;
225
+ syncSnapshot(normalizeValue(value), props.label);
226
+ });
227
+ (0, vue.watch)(() => props.isError, (isError, previousIsError) => {
228
+ if (isError && previousIsError !== true) clearSelection("error");
229
+ }, { immediate: true });
230
+ __expose({
231
+ focus,
232
+ blur,
233
+ clear
234
+ });
235
+ return (_ctx, _cache) => {
236
+ return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(element_plus.ElInput), {
237
+ ref_key: "inputRef",
238
+ ref: inputRef,
239
+ class: (0, vue.normalizeClass)(inputClass.value),
240
+ clearable: props.clearable,
241
+ disabled: props.disabled || isLoading.value,
242
+ "model-value": innerLabel.value,
243
+ placeholder: props.placeholder,
244
+ onBlur: handleBlur,
245
+ onClear: handleNativeClear,
246
+ onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(handleEnter, ["prevent"]), ["enter"]),
247
+ "onUpdate:modelValue": handleInput
248
+ }, {
249
+ suffix: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", {
250
+ class: (0, vue.normalizeClass)((0, vue.unref)(searchTriggerClass)),
251
+ "aria-label": "Search",
252
+ role: "button",
253
+ tabindex: "-1",
254
+ onClick: handleManualSearch,
255
+ onMousedown: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["prevent"]))
256
+ }, [(0, vue.createVNode)((0, vue.unref)(element_plus.ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading", isLoading.value)) }, {
257
+ default: (0, vue.withCtx)(() => [isLoading.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(__element_plus_icons_vue.Loading), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(__element_plus_icons_vue.Search), { key: 1 }))]),
258
+ _: 1
259
+ }, 8, ["class"])], 34)]),
260
+ _: 1
261
+ }, 8, [
262
+ "class",
263
+ "clearable",
264
+ "disabled",
265
+ "model-value",
266
+ "placeholder",
267
+ "onKeydown"
268
+ ]);
269
+ };
270
+ }
271
+ });
272
+ var input_search_default = input_search_vue_vue_type_script_setup_true_lang_default;
273
+ exports.default = input_search_default;
274
+
275
+ //# sourceMappingURL=input-search.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-search.vue.cjs","names":[],"sources":["../../../../../../packages/utils/src/bem.ts","../../../../../../packages/components/input-search/src/input-search.ts","../../../../../../packages/components/input-search/src/input-search.vue","../../../../../../packages/components/input-search/src/input-search.vue"],"sourcesContent":["const defaultNamespace = 'fl'\r\nconst statePrefix = 'is-'\r\n\r\nconst buildBemName = (\r\n namespace: string,\r\n block: string,\r\n blockSuffix = '',\r\n element = '',\r\n modifier = ''\r\n) => {\r\n let className = `${namespace}-${block}`\r\n\r\n if (blockSuffix) {\r\n className += `-${blockSuffix}`\r\n }\r\n\r\n if (element) {\r\n className += `__${element}`\r\n }\r\n\r\n if (modifier) {\r\n className += `--${modifier}`\r\n }\r\n\r\n return className\r\n}\r\n\r\nexport const useNamespace = (block: string, namespace = defaultNamespace) => {\r\n const b = (blockSuffix = '') => buildBemName(namespace, block, blockSuffix)\r\n\r\n const e = (element?: string) => (element ? buildBemName(namespace, block, '', element) : '')\r\n\r\n const m = (modifier?: string) =>\r\n modifier ? buildBemName(namespace, block, '', '', modifier) : ''\r\n\r\n const be = (blockSuffix?: string, element?: string) => {\r\n if (!blockSuffix || !element) {\r\n return ''\r\n }\r\n\r\n return buildBemName(namespace, block, blockSuffix, element)\r\n }\r\n\r\n const em = (element?: string, modifier?: string) => {\r\n if (!element || !modifier) {\r\n return ''\r\n }\r\n\r\n return buildBemName(namespace, block, '', element, modifier)\r\n }\r\n\r\n const bm = (blockSuffix?: string, modifier?: string) => {\r\n if (!blockSuffix || !modifier) {\r\n return ''\r\n }\r\n\r\n return buildBemName(namespace, block, blockSuffix, '', modifier)\r\n }\r\n\r\n const bem = (blockSuffix?: string, element?: string, modifier?: string) => {\r\n if (!blockSuffix && !element && !modifier) {\r\n return b()\r\n }\r\n\r\n return buildBemName(namespace, block, blockSuffix, element, modifier)\r\n }\r\n\r\n const is = (name: string, state = true) => (state ? `${statePrefix}${name}` : '')\r\n\r\n return {\r\n namespace,\r\n b,\r\n e,\r\n m,\r\n be,\r\n em,\r\n bm,\r\n bem,\r\n is\r\n }\r\n}\r\n","import type { ExtractPublicPropTypes, PropType } from 'vue'\r\n\r\nexport type FlInputSearchValue = string | number | null\r\n\r\nexport interface FlInputSearchMappedResult {\r\n label: string\r\n value: FlInputSearchValue\r\n}\r\n\r\nexport type FlInputSearchFetchApi = (keyword: string) => Promise<unknown[]>\r\nexport type FlInputSearchMapResult = (item: unknown) => FlInputSearchMappedResult\r\n\r\nexport const flInputSearchProps = {\r\n /**\r\n * 绑定值,通常为业务实体 ID。\r\n */\r\n modelValue: {\r\n type: [String, Number] as PropType<string | number | null>,\r\n default: null\r\n },\r\n /**\r\n * 输入框显示值(业务标签)。\r\n */\r\n label: {\r\n type: String,\r\n default: ''\r\n },\r\n /**\r\n * 回车检索方法。\r\n */\r\n fetchApi: {\r\n type: Function as PropType<FlInputSearchFetchApi>,\r\n default: undefined\r\n },\r\n /**\r\n * 外部结果映射方法,统一映射到 value/label。\r\n */\r\n mapResult: {\r\n type: Function as PropType<FlInputSearchMapResult>,\r\n required: true\r\n },\r\n /**\r\n * 占位提示文案。\r\n */\r\n placeholder: {\r\n type: String,\r\n default: ''\r\n },\r\n /**\r\n * 是否禁用输入。\r\n */\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 是否显示清空按钮。\r\n */\r\n clearable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 是否进入错误态。\r\n */\r\n isError: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 是否用于表格单元格输入。\r\n */\r\n isTable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * Blur 时未确认输入是否强制清空。\r\n */\r\n clearOnBlurUnconfirmed: {\r\n type: Boolean,\r\n default: true\r\n }\r\n} as const\r\n\r\nexport type FlInputSearchOpenDialogReason = 'manual' | 'multi-match'\r\n\r\nexport interface FlInputSearchOpenDialogPayload {\r\n keyword: string\r\n reason: FlInputSearchOpenDialogReason\r\n results?: unknown[]\r\n}\r\n\r\nexport interface FlInputSearchSelectionCommitPayload {\r\n label: string\r\n source: 'enter'\r\n value: FlInputSearchValue\r\n}\r\n\r\nexport interface FlInputSearchSearchErrorPayload {\r\n error: unknown\r\n keyword: string\r\n}\r\n\r\nexport interface FlInputSearchClearPayload {\r\n reason: 'manual-empty' | 'blur-unconfirmed' | 'error'\r\n}\r\n\r\nexport const flInputSearchEmits = {\r\n /**\r\n * 绑定值更新事件。\r\n */\r\n 'update:modelValue': (value: FlInputSearchValue) =>\r\n value === null || typeof value === 'string' || typeof value === 'number',\r\n /**\r\n * 显示值更新事件。\r\n */\r\n 'update:label': (value: string) => typeof value === 'string',\r\n /**\r\n * 触发外部弹窗占位事件。\r\n */\r\n openDialog: (payload: FlInputSearchOpenDialogPayload) =>\r\n typeof payload.keyword === 'string' &&\r\n (payload.reason === 'manual' || payload.reason === 'multi-match') &&\r\n (payload.results === undefined || Array.isArray(payload.results)),\r\n /**\r\n * 唯一结果选中提交事件。\r\n */\r\n 'selection-commit': (payload: FlInputSearchSelectionCommitPayload) =>\r\n typeof payload.label === 'string' &&\r\n payload.source === 'enter' &&\r\n (payload.value === null ||\r\n typeof payload.value === 'string' ||\r\n typeof payload.value === 'number'),\r\n /**\r\n * 回车检索失败事件。\r\n */\r\n 'search-error': (payload: FlInputSearchSearchErrorPayload) => typeof payload.keyword === 'string',\r\n /**\r\n * 清空行为事件。\r\n */\r\n clear: (payload: FlInputSearchClearPayload) =>\r\n payload.reason === 'manual-empty' ||\r\n payload.reason === 'blur-unconfirmed' ||\r\n payload.reason === 'error'\r\n} as const\r\n\r\nexport type FlInputSearchProps = ExtractPublicPropTypes<typeof flInputSearchProps>\r\nexport type FlInputSearchEmits = typeof flInputSearchEmits\r\n\r\nexport type InputSearchProps = FlInputSearchProps\r\nexport type InputSearchEmits = FlInputSearchEmits\r\n","<template>\r\n <el-input\r\n ref=\"inputRef\"\r\n :class=\"inputClass\"\r\n :clearable=\"props.clearable\"\r\n :disabled=\"props.disabled || isLoading\"\r\n :model-value=\"innerLabel\"\r\n :placeholder=\"props.placeholder\"\r\n @blur=\"handleBlur\"\r\n @clear=\"handleNativeClear\"\r\n @keydown.enter.prevent=\"handleEnter\"\r\n @update:model-value=\"handleInput\">\r\n <template #suffix>\r\n <span\r\n :class=\"searchTriggerClass\"\r\n aria-label=\"Search\"\r\n role=\"button\"\r\n tabindex=\"-1\"\r\n @click=\"handleManualSearch\"\r\n @mousedown.prevent>\r\n <el-icon :class=\"ns.is('loading', isLoading)\">\r\n <Loading v-if=\"isLoading\" />\r\n <Search v-else />\r\n </el-icon>\r\n </span>\r\n </template>\r\n </el-input>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { Loading, Search } from '@element-plus/icons-vue'\r\nimport { ElIcon, ElInput } from 'element-plus'\r\nimport { computed, ref, watch } from 'vue'\r\nimport { useNamespace } from '@falcon-ui/utils'\r\nimport type { FlInputSearchMappedResult, FlInputSearchValue } from './input-search'\r\nimport { flInputSearchEmits, flInputSearchProps } from './input-search'\r\n\r\ndefineOptions({\r\n name: 'FlInputSearch',\r\n inheritAttrs: false\r\n})\r\n\r\ntype ElInputExpose = {\r\n blur: () => void\r\n clear: () => void\r\n focus: () => void\r\n}\r\n\r\nconst props = defineProps(flInputSearchProps)\r\nconst emit = defineEmits(flInputSearchEmits)\r\nconst ns = useNamespace('input-search')\r\n\r\nconst inputRef = ref<ElInputExpose | null>(null)\r\nconst innerLabel = ref(props.label)\r\nconst isLoading = ref(false)\r\nconst latestSearchToken = ref(0)\r\nconst lastValidLabel = ref(props.label)\r\nconst lastValidValue = ref<FlInputSearchValue>(props.modelValue)\r\n\r\nconst inputClass = computed(() => [\r\n ns.b(),\r\n {\r\n 'is-error': props.isError,\r\n 'is-table': props.isTable\r\n }\r\n])\r\n\r\nconst searchTriggerClass = ns.e('trigger')\r\n\r\nconst normalizeLabel = (value: unknown): string => (typeof value === 'string' ? value : '')\r\n\r\nconst normalizeValue = (value: unknown): FlInputSearchValue => {\r\n if (value === null || typeof value === 'string' || typeof value === 'number') {\r\n return value\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst syncSnapshot = (value: FlInputSearchValue, label: string) => {\r\n lastValidValue.value = value\r\n lastValidLabel.value = label\r\n}\r\n\r\nconst clearSelection = (reason: 'manual-empty' | 'blur-unconfirmed' | 'error') => {\r\n innerLabel.value = ''\r\n syncSnapshot(null, '')\r\n\r\n emit('update:modelValue', null)\r\n emit('update:label', '')\r\n emit('clear', { reason })\r\n}\r\n\r\nconst commitSelection = (result: FlInputSearchMappedResult) => {\r\n const nextValue = normalizeValue(result.value)\r\n const nextLabel = normalizeLabel(result.label)\r\n\r\n innerLabel.value = nextLabel\r\n syncSnapshot(nextValue, nextLabel)\r\n\r\n emit('update:modelValue', nextValue)\r\n emit('update:label', nextLabel)\r\n emit('selection-commit', {\r\n value: nextValue,\r\n label: nextLabel,\r\n source: 'enter'\r\n })\r\n}\r\n\r\nconst handleInput = (value: string) => {\r\n const nextLabel = normalizeLabel(value)\r\n innerLabel.value = nextLabel\r\n emit('update:label', nextLabel)\r\n}\r\n\r\nconst handleManualSearch = () => {\r\n emit('openDialog', {\r\n keyword: innerLabel.value.trim(),\r\n reason: 'manual'\r\n })\r\n}\r\n\r\nconst handleEnter = async () => {\r\n if (isLoading.value) {\r\n return\r\n }\r\n\r\n const keyword = innerLabel.value.trim()\r\n if (!keyword) {\r\n return\r\n }\r\n\r\n if (!props.fetchApi) {\r\n emit('openDialog', {\r\n keyword,\r\n reason: 'manual'\r\n })\r\n return\r\n }\r\n\r\n const currentToken = latestSearchToken.value + 1\r\n latestSearchToken.value = currentToken\r\n isLoading.value = true\r\n\r\n try {\r\n const response = await props.fetchApi(keyword)\r\n if (currentToken !== latestSearchToken.value) {\r\n return\r\n }\r\n\r\n const results = Array.isArray(response) ? response : []\r\n\r\n if (results.length === 1) {\r\n commitSelection(props.mapResult(results[0]))\r\n return\r\n }\r\n\r\n if (results.length > 1) {\r\n emit('openDialog', {\r\n keyword,\r\n reason: 'multi-match',\r\n results\r\n })\r\n }\r\n } catch (error) {\r\n if (currentToken !== latestSearchToken.value) {\r\n return\r\n }\r\n\r\n emit('search-error', {\r\n keyword,\r\n error\r\n })\r\n } finally {\r\n if (currentToken === latestSearchToken.value) {\r\n isLoading.value = false\r\n }\r\n }\r\n}\r\n\r\nconst handleNativeClear = () => {\r\n clearSelection('manual-empty')\r\n}\r\n\r\nconst handleBlur = () => {\r\n if (isLoading.value) {\r\n return\r\n }\r\n\r\n const currentLabel = innerLabel.value\r\n if (currentLabel === lastValidLabel.value) {\r\n return\r\n }\r\n\r\n if (!currentLabel) {\r\n clearSelection('manual-empty')\r\n return\r\n }\r\n\r\n if (props.clearOnBlurUnconfirmed) {\r\n clearSelection('blur-unconfirmed')\r\n }\r\n}\r\n\r\nconst focus = () => {\r\n inputRef.value?.focus()\r\n}\r\n\r\nconst blur = () => {\r\n inputRef.value?.blur()\r\n}\r\n\r\nconst clear = () => {\r\n inputRef.value?.clear()\r\n}\r\n\r\nwatch(\r\n () => props.label,\r\n (value) => {\r\n innerLabel.value = value\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n if (value === lastValidValue.value) {\r\n return\r\n }\r\n\r\n syncSnapshot(normalizeValue(value), props.label)\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearSelection('error')\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({\r\n focus,\r\n blur,\r\n clear\r\n})\r\n</script>\r\n","<template>\r\n <el-input\r\n ref=\"inputRef\"\r\n :class=\"inputClass\"\r\n :clearable=\"props.clearable\"\r\n :disabled=\"props.disabled || isLoading\"\r\n :model-value=\"innerLabel\"\r\n :placeholder=\"props.placeholder\"\r\n @blur=\"handleBlur\"\r\n @clear=\"handleNativeClear\"\r\n @keydown.enter.prevent=\"handleEnter\"\r\n @update:model-value=\"handleInput\">\r\n <template #suffix>\r\n <span\r\n :class=\"searchTriggerClass\"\r\n aria-label=\"Search\"\r\n role=\"button\"\r\n tabindex=\"-1\"\r\n @click=\"handleManualSearch\"\r\n @mousedown.prevent>\r\n <el-icon :class=\"ns.is('loading', isLoading)\">\r\n <Loading v-if=\"isLoading\" />\r\n <Search v-else />\r\n </el-icon>\r\n </span>\r\n </template>\r\n </el-input>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { Loading, Search } from '@element-plus/icons-vue'\r\nimport { ElIcon, ElInput } from 'element-plus'\r\nimport { computed, ref, watch } from 'vue'\r\nimport { useNamespace } from '@falcon-ui/utils'\r\nimport type { FlInputSearchMappedResult, FlInputSearchValue } from './input-search'\r\nimport { flInputSearchEmits, flInputSearchProps } from './input-search'\r\n\r\ndefineOptions({\r\n name: 'FlInputSearch',\r\n inheritAttrs: false\r\n})\r\n\r\ntype ElInputExpose = {\r\n blur: () => void\r\n clear: () => void\r\n focus: () => void\r\n}\r\n\r\nconst props = defineProps(flInputSearchProps)\r\nconst emit = defineEmits(flInputSearchEmits)\r\nconst ns = useNamespace('input-search')\r\n\r\nconst inputRef = ref<ElInputExpose | null>(null)\r\nconst innerLabel = ref(props.label)\r\nconst isLoading = ref(false)\r\nconst latestSearchToken = ref(0)\r\nconst lastValidLabel = ref(props.label)\r\nconst lastValidValue = ref<FlInputSearchValue>(props.modelValue)\r\n\r\nconst inputClass = computed(() => [\r\n ns.b(),\r\n {\r\n 'is-error': props.isError,\r\n 'is-table': props.isTable\r\n }\r\n])\r\n\r\nconst searchTriggerClass = ns.e('trigger')\r\n\r\nconst normalizeLabel = (value: unknown): string => (typeof value === 'string' ? value : '')\r\n\r\nconst normalizeValue = (value: unknown): FlInputSearchValue => {\r\n if (value === null || typeof value === 'string' || typeof value === 'number') {\r\n return value\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst syncSnapshot = (value: FlInputSearchValue, label: string) => {\r\n lastValidValue.value = value\r\n lastValidLabel.value = label\r\n}\r\n\r\nconst clearSelection = (reason: 'manual-empty' | 'blur-unconfirmed' | 'error') => {\r\n innerLabel.value = ''\r\n syncSnapshot(null, '')\r\n\r\n emit('update:modelValue', null)\r\n emit('update:label', '')\r\n emit('clear', { reason })\r\n}\r\n\r\nconst commitSelection = (result: FlInputSearchMappedResult) => {\r\n const nextValue = normalizeValue(result.value)\r\n const nextLabel = normalizeLabel(result.label)\r\n\r\n innerLabel.value = nextLabel\r\n syncSnapshot(nextValue, nextLabel)\r\n\r\n emit('update:modelValue', nextValue)\r\n emit('update:label', nextLabel)\r\n emit('selection-commit', {\r\n value: nextValue,\r\n label: nextLabel,\r\n source: 'enter'\r\n })\r\n}\r\n\r\nconst handleInput = (value: string) => {\r\n const nextLabel = normalizeLabel(value)\r\n innerLabel.value = nextLabel\r\n emit('update:label', nextLabel)\r\n}\r\n\r\nconst handleManualSearch = () => {\r\n emit('openDialog', {\r\n keyword: innerLabel.value.trim(),\r\n reason: 'manual'\r\n })\r\n}\r\n\r\nconst handleEnter = async () => {\r\n if (isLoading.value) {\r\n return\r\n }\r\n\r\n const keyword = innerLabel.value.trim()\r\n if (!keyword) {\r\n return\r\n }\r\n\r\n if (!props.fetchApi) {\r\n emit('openDialog', {\r\n keyword,\r\n reason: 'manual'\r\n })\r\n return\r\n }\r\n\r\n const currentToken = latestSearchToken.value + 1\r\n latestSearchToken.value = currentToken\r\n isLoading.value = true\r\n\r\n try {\r\n const response = await props.fetchApi(keyword)\r\n if (currentToken !== latestSearchToken.value) {\r\n return\r\n }\r\n\r\n const results = Array.isArray(response) ? response : []\r\n\r\n if (results.length === 1) {\r\n commitSelection(props.mapResult(results[0]))\r\n return\r\n }\r\n\r\n if (results.length > 1) {\r\n emit('openDialog', {\r\n keyword,\r\n reason: 'multi-match',\r\n results\r\n })\r\n }\r\n } catch (error) {\r\n if (currentToken !== latestSearchToken.value) {\r\n return\r\n }\r\n\r\n emit('search-error', {\r\n keyword,\r\n error\r\n })\r\n } finally {\r\n if (currentToken === latestSearchToken.value) {\r\n isLoading.value = false\r\n }\r\n }\r\n}\r\n\r\nconst handleNativeClear = () => {\r\n clearSelection('manual-empty')\r\n}\r\n\r\nconst handleBlur = () => {\r\n if (isLoading.value) {\r\n return\r\n }\r\n\r\n const currentLabel = innerLabel.value\r\n if (currentLabel === lastValidLabel.value) {\r\n return\r\n }\r\n\r\n if (!currentLabel) {\r\n clearSelection('manual-empty')\r\n return\r\n }\r\n\r\n if (props.clearOnBlurUnconfirmed) {\r\n clearSelection('blur-unconfirmed')\r\n }\r\n}\r\n\r\nconst focus = () => {\r\n inputRef.value?.focus()\r\n}\r\n\r\nconst blur = () => {\r\n inputRef.value?.blur()\r\n}\r\n\r\nconst clear = () => {\r\n inputRef.value?.clear()\r\n}\r\n\r\nwatch(\r\n () => props.label,\r\n (value) => {\r\n innerLabel.value = value\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (value) => {\r\n if (value === lastValidValue.value) {\r\n return\r\n }\r\n\r\n syncSnapshot(normalizeValue(value), props.label)\r\n }\r\n)\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearSelection('error')\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({\r\n focus,\r\n blur,\r\n clear\r\n})\r\n</script>\r\n"],"mappings":"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"}