@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.
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/cjs/JsBarcode-BlUjuVmB.cjs +3519 -0
- package/cjs/JsBarcode-BlUjuVmB.cjs.map +1 -0
- package/cjs/chunk-D4y6LrGi.cjs +40 -0
- package/cjs/components/JsBarcode-BOXEZn4Q.cjs +3519 -0
- package/cjs/components/JsBarcode-BOXEZn4Q.cjs.map +1 -0
- package/cjs/components/barcode/JsBarcode-BOXEZn4Q.cjs +3519 -0
- package/cjs/components/barcode/JsBarcode-BOXEZn4Q.cjs.map +1 -0
- package/cjs/components/barcode/chunk-D4y6LrGi.cjs +40 -0
- package/cjs/components/barcode/index.cjs +211 -0
- package/cjs/components/barcode/index.cjs.map +1 -0
- package/cjs/components/barcode/src/JsBarcode-BOXEZn4Q.cjs +3519 -0
- package/cjs/components/barcode/src/JsBarcode-BOXEZn4Q.cjs.map +1 -0
- package/cjs/components/barcode/src/barcode.cjs +102 -0
- package/cjs/components/barcode/src/barcode.cjs.map +1 -0
- package/cjs/components/barcode/src/barcode.vue.cjs +200 -0
- package/cjs/components/barcode/src/barcode.vue.cjs.map +1 -0
- package/cjs/components/barcode/src/chunk-D4y6LrGi.cjs +40 -0
- package/cjs/components/button/index.cjs +135 -0
- package/cjs/components/button/index.cjs.map +1 -0
- package/cjs/components/button/src/button.cjs +16 -0
- package/cjs/components/button/src/button.cjs.map +1 -0
- package/cjs/components/button/src/button.vue.cjs +124 -0
- package/cjs/components/button/src/button.vue.cjs.map +1 -0
- package/cjs/components/chunk-D4y6LrGi.cjs +40 -0
- package/cjs/components/date-picker/index.cjs +164 -0
- package/cjs/components/date-picker/index.cjs.map +1 -0
- package/cjs/components/date-picker/src/date-picker.cjs +25 -0
- package/cjs/components/date-picker/src/date-picker.cjs.map +1 -0
- package/cjs/components/date-picker/src/date-picker.vue.cjs +153 -0
- package/cjs/components/date-picker/src/date-picker.vue.cjs.map +1 -0
- package/cjs/components/dialog/index.cjs +346 -0
- package/cjs/components/dialog/index.cjs.map +1 -0
- package/cjs/components/dialog/src/dialog.cjs +40 -0
- package/cjs/components/dialog/src/dialog.cjs.map +1 -0
- package/cjs/components/dialog/src/dialog.vue.cjs +343 -0
- package/cjs/components/dialog/src/dialog.vue.cjs.map +1 -0
- package/cjs/components/index.cjs +9450 -0
- package/cjs/components/index.cjs.map +1 -0
- package/cjs/components/input/index.cjs +175 -0
- package/cjs/components/input/index.cjs.map +1 -0
- package/cjs/components/input/src/input.cjs +27 -0
- package/cjs/components/input/src/input.cjs.map +1 -0
- package/cjs/components/input/src/input.vue.cjs +164 -0
- package/cjs/components/input/src/input.vue.cjs.map +1 -0
- package/cjs/components/input-number/index.cjs +374 -0
- package/cjs/components/input-number/index.cjs.map +1 -0
- package/cjs/components/input-number/src/input-number.cjs +48 -0
- package/cjs/components/input-number/src/input-number.cjs.map +1 -0
- package/cjs/components/input-number/src/input-number.vue.cjs +363 -0
- package/cjs/components/input-number/src/input-number.vue.cjs.map +1 -0
- package/cjs/components/input-search/index.cjs +286 -0
- package/cjs/components/input-search/index.cjs.map +1 -0
- package/cjs/components/input-search/src/input-search.cjs +55 -0
- package/cjs/components/input-search/src/input-search.cjs.map +1 -0
- package/cjs/components/input-search/src/input-search.vue.cjs +275 -0
- package/cjs/components/input-search/src/input-search.vue.cjs.map +1 -0
- package/cjs/components/qr-code/index.cjs +1975 -0
- package/cjs/components/qr-code/index.cjs.map +1 -0
- package/cjs/components/qr-code/src/qr-code.cjs +63 -0
- package/cjs/components/qr-code/src/qr-code.cjs.map +1 -0
- package/cjs/components/qr-code/src/qr-code.vue.cjs +1964 -0
- package/cjs/components/qr-code/src/qr-code.vue.cjs.map +1 -0
- package/cjs/components/radial-menu/index.cjs +983 -0
- package/cjs/components/radial-menu/index.cjs.map +1 -0
- package/cjs/components/radial-menu/src/radial-menu.cjs +96 -0
- package/cjs/components/radial-menu/src/radial-menu.cjs.map +1 -0
- package/cjs/components/radial-menu/src/radial-menu.vue.cjs +921 -0
- package/cjs/components/radial-menu/src/radial-menu.vue.cjs.map +1 -0
- package/cjs/components/select/index.cjs +163 -0
- package/cjs/components/select/index.cjs.map +1 -0
- package/cjs/components/select/src/select.cjs +16 -0
- package/cjs/components/select/src/select.cjs.map +1 -0
- package/cjs/components/select/src/select.vue.cjs +152 -0
- package/cjs/components/select/src/select.vue.cjs.map +1 -0
- package/cjs/components/table/index.cjs +3351 -0
- package/cjs/components/table/index.cjs.map +1 -0
- package/cjs/components/table/src/table.cjs +62 -0
- package/cjs/components/table/src/table.cjs.map +1 -0
- package/cjs/components/table/src/table.vue.cjs +3085 -0
- package/cjs/components/table/src/table.vue.cjs.map +1 -0
- package/cjs/dialog-CJU00aEV.cjs +614 -0
- package/cjs/dialog-CJU00aEV.cjs.map +1 -0
- package/cjs/dialog-DcH26KbE.cjs +2 -0
- package/cjs/hooks/dialog-DpYPBcKV.cjs +266 -0
- package/cjs/hooks/dialog-DpYPBcKV.cjs.map +1 -0
- package/cjs/hooks/hooks-D2Jaq5kO.cjs +328 -0
- package/cjs/hooks/hooks-D2Jaq5kO.cjs.map +1 -0
- package/cjs/hooks/index.cjs +8 -0
- package/cjs/icons/index.cjs +86 -0
- package/cjs/icons/index.cjs.map +1 -0
- package/cjs/index.cjs +9141 -0
- package/cjs/index.cjs.map +1 -0
- package/cjs/utils/index.cjs +69 -0
- package/cjs/utils/index.cjs.map +1 -0
- package/esm/JsBarcode-kVJER62m.js +3514 -0
- package/esm/JsBarcode-kVJER62m.js.map +1 -0
- package/esm/chunk-BuRq7rDw.js +23 -0
- package/esm/components/JsBarcode-CzzxrEd_.js +3514 -0
- package/esm/components/JsBarcode-CzzxrEd_.js.map +1 -0
- package/esm/components/barcode/JsBarcode-C5ux6wsb.js +3514 -0
- package/esm/components/barcode/JsBarcode-C5ux6wsb.js.map +1 -0
- package/esm/components/barcode/chunk--em_ddB3.js +23 -0
- package/esm/components/barcode/index.mjs +204 -0
- package/esm/components/barcode/index.mjs.map +1 -0
- package/esm/components/barcode/src/JsBarcode-C5ux6wsb.js +3514 -0
- package/esm/components/barcode/src/JsBarcode-C5ux6wsb.js.map +1 -0
- package/esm/components/barcode/src/barcode.mjs +98 -0
- package/esm/components/barcode/src/barcode.mjs.map +1 -0
- package/esm/components/barcode/src/barcode.vue.mjs +194 -0
- package/esm/components/barcode/src/barcode.vue.mjs.map +1 -0
- package/esm/components/barcode/src/chunk--em_ddB3.js +23 -0
- package/esm/components/button/index.mjs +126 -0
- package/esm/components/button/index.mjs.map +1 -0
- package/esm/components/button/src/button.mjs +14 -0
- package/esm/components/button/src/button.mjs.map +1 -0
- package/esm/components/button/src/button.vue.mjs +117 -0
- package/esm/components/button/src/button.vue.mjs.map +1 -0
- package/esm/components/chunk-BuRq7rDw.js +23 -0
- package/esm/components/date-picker/index.mjs +155 -0
- package/esm/components/date-picker/index.mjs.map +1 -0
- package/esm/components/date-picker/src/date-picker.mjs +23 -0
- package/esm/components/date-picker/src/date-picker.mjs.map +1 -0
- package/esm/components/date-picker/src/date-picker.vue.mjs +146 -0
- package/esm/components/date-picker/src/date-picker.vue.mjs.map +1 -0
- package/esm/components/dialog/index.mjs +335 -0
- package/esm/components/dialog/index.mjs.map +1 -0
- package/esm/components/dialog/src/dialog.mjs +38 -0
- package/esm/components/dialog/src/dialog.mjs.map +1 -0
- package/esm/components/dialog/src/dialog.vue.mjs +334 -0
- package/esm/components/dialog/src/dialog.vue.mjs.map +1 -0
- package/esm/components/index.mjs +9386 -0
- package/esm/components/index.mjs.map +1 -0
- package/esm/components/input/index.mjs +166 -0
- package/esm/components/input/index.mjs.map +1 -0
- package/esm/components/input/src/input.mjs +25 -0
- package/esm/components/input/src/input.mjs.map +1 -0
- package/esm/components/input/src/input.vue.mjs +157 -0
- package/esm/components/input/src/input.vue.mjs.map +1 -0
- package/esm/components/input-number/index.mjs +365 -0
- package/esm/components/input-number/index.mjs.map +1 -0
- package/esm/components/input-number/src/input-number.mjs +45 -0
- package/esm/components/input-number/src/input-number.mjs.map +1 -0
- package/esm/components/input-number/src/input-number.vue.mjs +356 -0
- package/esm/components/input-number/src/input-number.vue.mjs.map +1 -0
- package/esm/components/input-search/index.mjs +277 -0
- package/esm/components/input-search/index.mjs.map +1 -0
- package/esm/components/input-search/src/input-search.mjs +53 -0
- package/esm/components/input-search/src/input-search.mjs.map +1 -0
- package/esm/components/input-search/src/input-search.vue.mjs +268 -0
- package/esm/components/input-search/src/input-search.vue.mjs.map +1 -0
- package/esm/components/qr-code/index.mjs +1967 -0
- package/esm/components/qr-code/index.mjs.map +1 -0
- package/esm/components/qr-code/src/qr-code.mjs +59 -0
- package/esm/components/qr-code/src/qr-code.mjs.map +1 -0
- package/esm/components/qr-code/src/qr-code.vue.mjs +1958 -0
- package/esm/components/qr-code/src/qr-code.vue.mjs.map +1 -0
- package/esm/components/radial-menu/index.mjs +974 -0
- package/esm/components/radial-menu/index.mjs.map +1 -0
- package/esm/components/radial-menu/src/radial-menu.mjs +94 -0
- package/esm/components/radial-menu/src/radial-menu.mjs.map +1 -0
- package/esm/components/radial-menu/src/radial-menu.vue.mjs +916 -0
- package/esm/components/radial-menu/src/radial-menu.vue.mjs.map +1 -0
- package/esm/components/select/index.mjs +154 -0
- package/esm/components/select/index.mjs.map +1 -0
- package/esm/components/select/src/select.mjs +14 -0
- package/esm/components/select/src/select.mjs.map +1 -0
- package/esm/components/select/src/select.vue.mjs +145 -0
- package/esm/components/select/src/select.vue.mjs.map +1 -0
- package/esm/components/table/index.mjs +3342 -0
- package/esm/components/table/index.mjs.map +1 -0
- package/esm/components/table/src/table.mjs +60 -0
- package/esm/components/table/src/table.mjs.map +1 -0
- package/esm/components/table/src/table.vue.mjs +3080 -0
- package/esm/components/table/src/table.vue.mjs.map +1 -0
- package/esm/dialog-Cm3Px-Bu.js +537 -0
- package/esm/dialog-Cm3Px-Bu.js.map +1 -0
- package/esm/dialog-CzZm50XM.js +2 -0
- package/esm/hooks/dialog-d4SMZWbw.js +261 -0
- package/esm/hooks/dialog-d4SMZWbw.js.map +1 -0
- package/esm/hooks/hooks-DdjieG2I.js +281 -0
- package/esm/hooks/hooks-DdjieG2I.js.map +1 -0
- package/esm/hooks/index.mjs +2 -0
- package/esm/icons/index.mjs +79 -0
- package/esm/icons/index.mjs.map +1 -0
- package/esm/index.mjs +9065 -0
- package/esm/index.mjs.map +1 -0
- package/esm/utils/index.mjs +65 -0
- package/esm/utils/index.mjs.map +1 -0
- package/global.d.ts +39 -0
- package/package.json +131 -0
- package/theme/index.css +1 -0
- package/theme/index.scss +16 -0
- package/theme/src/barcode.scss +14 -0
- package/theme/src/button.scss +65 -0
- package/theme/src/date-picker.scss +87 -0
- package/theme/src/dialog.scss +146 -0
- package/theme/src/ep-vars.scss +11 -0
- package/theme/src/input-number.scss +66 -0
- package/theme/src/input-search.scss +78 -0
- package/theme/src/input.scss +66 -0
- package/theme/src/mixins/bem.scss +35 -0
- package/theme/src/mixins/color.scss +8 -0
- package/theme/src/qr-code.scss +23 -0
- package/theme/src/radial-menu.scss +346 -0
- package/theme/src/select.scss +44 -0
- package/theme/src/table.scss +143 -0
- package/theme/src/tokens.scss +26 -0
- package/theme/src/tree-select.scss +45 -0
- package/theme/src/tree.scss +369 -0
- package/types/components/barcode/index.d.ts +183 -0
- package/types/components/barcode/src/barcode.d.ts +147 -0
- package/types/components/barcode/src/barcode.vue.d.ts +184 -0
- package/types/components/button/index.d.ts +135 -0
- package/types/components/button/src/button.d.ts +33 -0
- package/types/components/button/src/button.vue.d.ts +138 -0
- package/types/components/date-picker/index.d.ts +508 -0
- package/types/components/date-picker/src/date-picker.d.ts +35 -0
- package/types/components/date-picker/src/date-picker.vue.d.ts +509 -0
- package/types/components/dialog/index.d.ts +630 -0
- package/types/components/dialog/src/dialog.d.ts +70 -0
- package/types/components/dialog/src/dialog.vue.d.ts +257 -0
- package/types/components/index.d.ts +27 -0
- package/types/components/input/index.d.ts +233 -0
- package/types/components/input/src/input.d.ts +65 -0
- package/types/components/input/src/input.vue.d.ts +239 -0
- package/types/components/input-number/index.d.ts +713 -0
- package/types/components/input-number/src/input-number.d.ts +101 -0
- package/types/components/input-number/src/input-number.vue.d.ts +283 -0
- package/types/components/input-search/index.d.ts +113 -0
- package/types/components/input-search/src/input-search.d.ts +128 -0
- package/types/components/input-search/src/input-search.vue.d.ts +114 -0
- package/types/components/qr-code/index.d.ts +109 -0
- package/types/components/qr-code/src/qr-code.d.ts +93 -0
- package/types/components/qr-code/src/qr-code.vue.d.ts +109 -0
- package/types/components/radial-menu/index.d.ts +499 -0
- package/types/components/radial-menu/src/radial-menu-item.d.ts +40 -0
- package/types/components/radial-menu/src/radial-menu-item.vue.d.ts +95 -0
- package/types/components/radial-menu/src/radial-menu.d.ts +92 -0
- package/types/components/radial-menu/src/radial-menu.vue.d.ts +200 -0
- package/types/components/radial-menu/src/types.d.ts +48 -0
- package/types/components/radial-menu/src/use-radial-menu-items.d.ts +19 -0
- package/types/components/radial-menu/src/use-radial-menu-keyboard.d.ts +17 -0
- package/types/components/radial-menu/src/use-radial-menu-position.d.ts +45 -0
- package/types/components/radial-menu/src/use-radial-menu-shortcut.d.ts +8 -0
- package/types/components/radial-menu/src/use-radial-menu-state.d.ts +15 -0
- package/types/components/select/index.d.ts +5 -0
- package/types/components/select/src/select.d.ts +30 -0
- package/types/components/select/src/select.vue.d.ts +25 -0
- package/types/components/table/index.d.ts +8 -0
- package/types/components/table/src/editor-registry.d.ts +24 -0
- package/types/components/table/src/proxy-data.d.ts +10 -0
- package/types/components/table/src/table-editor.d.ts +18 -0
- package/types/components/table/src/table-editor.vue.d.ts +43 -0
- package/types/components/table/src/table.d.ts +179 -0
- package/types/components/table/src/table.vue.d.ts +121 -0
- package/types/components/tree/index.d.ts +5 -0
- package/types/components/tree/src/tree-node.vue.d.ts +88 -0
- package/types/components/tree/src/tree-types.d.ts +90 -0
- package/types/components/tree/src/tree.d.ts +448 -0
- package/types/components/tree/src/tree.vue.d.ts +301 -0
- package/types/components/tree/src/use-tree-check-conduct.d.ts +43 -0
- package/types/components/tree/src/use-tree-checked-state.d.ts +34 -0
- package/types/components/tree/src/use-tree-drag.d.ts +45 -0
- package/types/components/tree/src/use-tree-expanded-state.d.ts +41 -0
- package/types/components/tree/src/use-tree-keyboard.d.ts +21 -0
- package/types/components/tree/src/use-tree-load.d.ts +25 -0
- package/types/components/tree/src/use-tree-scroll.d.ts +17 -0
- package/types/components/tree/src/use-tree-selected-state.d.ts +29 -0
- package/types/components/tree-select/index.d.ts +5 -0
- package/types/components/tree-select/src/tree-select.d.ts +26 -0
- package/types/components/tree-select/src/tree-select.vue.d.ts +25 -0
- package/types/falcon-ui/index.d.ts +8 -0
- package/types/hooks/index.d.ts +3 -0
- package/types/hooks/src/use-clearable-state.d.ts +10 -0
- package/types/hooks/src/use-component.d.ts +15 -0
- package/types/hooks/src/use-dialog.d.ts +49 -0
- package/types/icons/index.d.ts +1 -0
- package/types/icons/src/components/holder-outlined.vue.d.ts +3 -0
- package/types/icons/src/components/index.d.ts +3 -0
- package/types/icons/src/components/minus-square-outlined.vue.d.ts +3 -0
- package/types/icons/src/components/plus-square-outlined.vue.d.ts +3 -0
- package/types/utils/index.d.ts +3 -0
- package/types/utils/src/bem.d.ts +11 -0
- package/types/utils/src/component.d.ts +6 -0
- package/types/utils/src/install.d.ts +5 -0
- package/umd/falcon-ui.umd.js +13297 -0
- package/umd/falcon-ui.umd.js.map +1 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { computed, createBlock, defineComponent, getCurrentInstance, h, openBlock, resolveDynamicComponent, unref, useAttrs, useSlots, watch } from "vue";
|
|
2
|
+
import { ElInput } from "element-plus";
|
|
3
|
+
var defaultNamespace = "fl";
|
|
4
|
+
var statePrefix = "is-";
|
|
5
|
+
var buildBemName = (namespace, block, blockSuffix = "", element = "", modifier = "") => {
|
|
6
|
+
let className = `${namespace}-${block}`;
|
|
7
|
+
if (blockSuffix) className += `-${blockSuffix}`;
|
|
8
|
+
if (element) className += `__${element}`;
|
|
9
|
+
if (modifier) className += `--${modifier}`;
|
|
10
|
+
return className;
|
|
11
|
+
};
|
|
12
|
+
const useNamespace = (block, namespace = defaultNamespace) => {
|
|
13
|
+
const b = (blockSuffix = "") => buildBemName(namespace, block, blockSuffix);
|
|
14
|
+
const e = (element) => element ? buildBemName(namespace, block, "", element) : "";
|
|
15
|
+
const m = (modifier) => modifier ? buildBemName(namespace, block, "", "", modifier) : "";
|
|
16
|
+
const be = (blockSuffix, element) => {
|
|
17
|
+
if (!blockSuffix || !element) return "";
|
|
18
|
+
return buildBemName(namespace, block, blockSuffix, element);
|
|
19
|
+
};
|
|
20
|
+
const em = (element, modifier) => {
|
|
21
|
+
if (!element || !modifier) return "";
|
|
22
|
+
return buildBemName(namespace, block, "", element, modifier);
|
|
23
|
+
};
|
|
24
|
+
const bm = (blockSuffix, modifier) => {
|
|
25
|
+
if (!blockSuffix || !modifier) return "";
|
|
26
|
+
return buildBemName(namespace, block, blockSuffix, "", modifier);
|
|
27
|
+
};
|
|
28
|
+
const bem = (blockSuffix, element, modifier) => {
|
|
29
|
+
if (!blockSuffix && !element && !modifier) return b();
|
|
30
|
+
return buildBemName(namespace, block, blockSuffix, element, modifier);
|
|
31
|
+
};
|
|
32
|
+
const is = (name, state = true) => state ? `${statePrefix}${name}` : "";
|
|
33
|
+
return {
|
|
34
|
+
namespace,
|
|
35
|
+
b,
|
|
36
|
+
e,
|
|
37
|
+
m,
|
|
38
|
+
be,
|
|
39
|
+
em,
|
|
40
|
+
bm,
|
|
41
|
+
bem,
|
|
42
|
+
is
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const mergeComponentExpose = (vm, exposed, extras = {}) => {
|
|
46
|
+
if (!vm?.exposed || !exposed || typeof exposed !== "object" && typeof exposed !== "function") return;
|
|
47
|
+
Object.assign(vm.exposed, extras, exposed);
|
|
48
|
+
};
|
|
49
|
+
const invokeListener = (listener, ...args) => {
|
|
50
|
+
if (typeof listener === "function") {
|
|
51
|
+
listener(...args);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!Array.isArray(listener)) return;
|
|
55
|
+
for (const item of listener) if (typeof item === "function") item(...args);
|
|
56
|
+
};
|
|
57
|
+
const withInstall = (component) => {
|
|
58
|
+
const installable = component;
|
|
59
|
+
installable.install = (app) => {
|
|
60
|
+
if (!component.name) return;
|
|
61
|
+
app.component(component.name, component);
|
|
62
|
+
};
|
|
63
|
+
return installable;
|
|
64
|
+
};
|
|
65
|
+
const useMergedAttrs = ({ attrs, block, listenerName, onListener }) => {
|
|
66
|
+
const className = useNamespace(block).b();
|
|
67
|
+
return { mergedAttrs: computed(() => {
|
|
68
|
+
const next = { ...attrs };
|
|
69
|
+
const originalListener = next[listenerName];
|
|
70
|
+
next.class = [className, next.class];
|
|
71
|
+
next[listenerName] = (...args) => {
|
|
72
|
+
onListener?.(...args);
|
|
73
|
+
invokeListener(originalListener, ...args);
|
|
74
|
+
};
|
|
75
|
+
return next;
|
|
76
|
+
}) };
|
|
77
|
+
};
|
|
78
|
+
const useMergedExpose = (extras) => {
|
|
79
|
+
const vm = getCurrentInstance();
|
|
80
|
+
const changeRef = (exposed) => {
|
|
81
|
+
mergeComponentExpose(vm, exposed, extras);
|
|
82
|
+
};
|
|
83
|
+
return { changeRef };
|
|
84
|
+
};
|
|
85
|
+
const FlInput = withInstall(/* @__PURE__ */ defineComponent({
|
|
86
|
+
name: "FlInput",
|
|
87
|
+
inheritAttrs: false,
|
|
88
|
+
__name: "input",
|
|
89
|
+
props: {
|
|
90
|
+
isTable: {
|
|
91
|
+
type: Boolean,
|
|
92
|
+
default: false
|
|
93
|
+
},
|
|
94
|
+
isError: {
|
|
95
|
+
type: Boolean,
|
|
96
|
+
default: false
|
|
97
|
+
},
|
|
98
|
+
debugLabel: {
|
|
99
|
+
type: String,
|
|
100
|
+
default: ""
|
|
101
|
+
},
|
|
102
|
+
debugMode: {
|
|
103
|
+
type: Boolean,
|
|
104
|
+
default: false
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
emits: {
|
|
108
|
+
"custom-input": (payload) => typeof payload.value === "string" && typeof payload.length === "number",
|
|
109
|
+
"debug-event": (payload) => typeof payload.label === "string" && typeof payload.value === "string"
|
|
110
|
+
},
|
|
111
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
112
|
+
const props = __props;
|
|
113
|
+
const emit = __emit;
|
|
114
|
+
const attrs = useAttrs();
|
|
115
|
+
const slots = useSlots();
|
|
116
|
+
const rawAttrs = attrs;
|
|
117
|
+
const { changeRef } = useMergedExpose({
|
|
118
|
+
myMethod() {
|
|
119
|
+
console.log("my method!");
|
|
120
|
+
},
|
|
121
|
+
myValue: 123
|
|
122
|
+
});
|
|
123
|
+
const { mergedAttrs } = useMergedAttrs({
|
|
124
|
+
attrs: rawAttrs,
|
|
125
|
+
block: "input",
|
|
126
|
+
listenerName: "onInput",
|
|
127
|
+
onListener: (...args) => {
|
|
128
|
+
const value = args[0];
|
|
129
|
+
if (typeof value === "string") {
|
|
130
|
+
emit("custom-input", {
|
|
131
|
+
value,
|
|
132
|
+
length: value.length
|
|
133
|
+
});
|
|
134
|
+
if (props.debugMode) emit("debug-event", {
|
|
135
|
+
label: props.debugLabel,
|
|
136
|
+
value
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const mergedInputAttrs = computed(() => ({
|
|
142
|
+
...mergedAttrs.value,
|
|
143
|
+
class: [mergedAttrs.value.class, {
|
|
144
|
+
"is-error": props.isError,
|
|
145
|
+
"is-table": props.isTable
|
|
146
|
+
}]
|
|
147
|
+
}));
|
|
148
|
+
const clearModelValue = () => {
|
|
149
|
+
invokeListener(rawAttrs["onUpdate:modelValue"], "");
|
|
150
|
+
};
|
|
151
|
+
watch(() => props.isError, (isError, previousIsError) => {
|
|
152
|
+
if (isError && previousIsError !== true) clearModelValue();
|
|
153
|
+
}, { immediate: true });
|
|
154
|
+
__expose({});
|
|
155
|
+
return (_ctx, _cache) => {
|
|
156
|
+
return openBlock(), createBlock(resolveDynamicComponent(h(unref(ElInput), {
|
|
157
|
+
...mergedInputAttrs.value,
|
|
158
|
+
ref: unref(changeRef)
|
|
159
|
+
}, unref(slots))));
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}));
|
|
163
|
+
var input_default = FlInput;
|
|
164
|
+
export { FlInput, input_default as default };
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../packages/utils/src/bem.ts","../../../../../packages/utils/src/component.ts","../../../../../packages/utils/src/install.ts","../../../../../packages/hooks/src/use-component.ts","../../../../../packages/components/input/src/input.ts","../../../../../packages/components/input/src/input.vue","../../../../../packages/components/input/src/input.vue","../../../../../packages/components/input/index.ts"],"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","type ExposedTarget = {\r\n exposed?: Record<string, unknown> | null\r\n} | null\r\n\r\nexport const mergeComponentExpose = (\r\n vm: ExposedTarget,\r\n exposed: unknown,\r\n extras: Record<string, unknown> = {}\r\n) => {\r\n if (!vm?.exposed || !exposed || (typeof exposed !== 'object' && typeof exposed !== 'function')) {\r\n return\r\n }\r\n\r\n Object.assign(vm.exposed, extras, exposed)\r\n}\r\n\r\nexport const invokeListener = (listener: unknown, ...args: unknown[]) => {\r\n if (typeof listener === 'function') {\r\n listener(...args)\r\n return\r\n }\r\n\r\n if (!Array.isArray(listener)) {\r\n return\r\n }\r\n\r\n for (const item of listener) {\r\n if (typeof item === 'function') {\r\n item(...args)\r\n }\r\n }\r\n}\r\n","import type { App, Plugin } from 'vue'\r\n\r\nexport type SFCWithInstall<T> = T & Plugin\r\n\r\nexport const withInstall = <T extends { name?: string }>(component: T): SFCWithInstall<T> => {\r\n const installable = component as SFCWithInstall<T>\r\n\r\n installable.install = (app: App) => {\r\n if (!component.name) {\r\n return\r\n }\r\n\r\n app.component(component.name, component as unknown as object)\r\n }\r\n\r\n return installable\r\n}\r\n","import { computed, getCurrentInstance } from 'vue'\r\nimport { invokeListener, mergeComponentExpose, useNamespace } from '@falcon-ui/utils'\r\n\r\ntype UseMergedAttrsOptions = {\r\n attrs: Record<string, unknown>\r\n block: string\r\n listenerName: string\r\n onListener?: (...args: unknown[]) => void\r\n}\r\n\r\nexport const useMergedAttrs = ({\r\n attrs,\r\n block,\r\n listenerName,\r\n onListener\r\n}: UseMergedAttrsOptions) => {\r\n const ns = useNamespace(block)\r\n const className = ns.b()\r\n\r\n const mergedAttrs = computed(() => {\r\n const next = { ...attrs }\r\n const originalListener = next[listenerName]\r\n next.class = [className, next.class]\r\n\r\n next[listenerName] = (...args: unknown[]) => {\r\n onListener?.(...args)\r\n invokeListener(originalListener, ...args)\r\n }\r\n\r\n return next\r\n })\r\n\r\n return {\r\n mergedAttrs\r\n }\r\n}\r\n\r\nexport const useMergedExpose = <TExpose extends Record<string, unknown>>(extras: TExpose) => {\r\n const vm = getCurrentInstance()\r\n\r\n const changeRef = (exposed: unknown) => {\r\n mergeComponentExpose(vm, exposed, extras)\r\n }\r\n\r\n return {\r\n changeRef\r\n }\r\n}\r\n","import type { ExtractPublicPropTypes } from 'vue'\r\n\r\nexport const flInputProps = {\r\n /**\r\n * 是否用于表格单元格内输入场景。开启后会使用表格样式。\r\n */\r\n isTable: {\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 * 调试事件标签,在开启调试模式后会随 `debug-event` 一起抛出。\r\n */\r\n debugLabel: {\r\n type: String,\r\n default: ''\r\n },\r\n /**\r\n * 是否开启调试事件派发,开启后每次输入都会触发调试事件。\r\n */\r\n debugMode: {\r\n type: Boolean,\r\n default: false\r\n }\r\n} as const\r\n\r\nexport interface FlInputCustomPayload {\r\n /**\r\n * 当前输入字符串长度。\r\n */\r\n length: number\r\n /**\r\n * 底层 ElInput 当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport interface FlInputDebugPayload {\r\n /**\r\n * 用于标识输入来源的业务标签。\r\n */\r\n label: string\r\n /**\r\n * 触发调试事件时的当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport const flInputEmits = {\r\n /**\r\n * 原生输入变化时触发,携带当前值与字符长度。\r\n */\r\n 'custom-input': (payload: FlInputCustomPayload) =>\r\n typeof payload.value === 'string' && typeof payload.length === 'number',\r\n /**\r\n * 开启 `debugMode` 后在 `custom-input` 之后触发,用于调试追踪。\r\n */\r\n 'debug-event': (payload: FlInputDebugPayload) =>\r\n typeof payload.label === 'string' && typeof payload.value === 'string'\r\n} as const\r\n\r\nexport type FlInputProps = ExtractPublicPropTypes<typeof flInputProps>\r\nexport type FlInputEmits = typeof flInputEmits\r\n\r\nexport type InputProps = FlInputProps\r\nexport type InputEmits = FlInputEmits\r\n","<template>\r\n <component :is=\"h(ElInput, { ...mergedInputAttrs, ref: changeRef }, slots)\" />\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ElInput } from 'element-plus'\r\nimport type { ComponentInstance } from 'vue'\r\nimport { computed, h, useAttrs, useSlots, watch } from 'vue'\r\nimport { useMergedAttrs, useMergedExpose } from '@falcon-ui/hooks'\r\nimport { invokeListener } from '@falcon-ui/utils'\r\nimport { flInputEmits, flInputProps } from './input'\r\n\r\ndefineOptions({\r\n name: 'FlInput',\r\n inheritAttrs: false\r\n})\r\n\r\nconst props = defineProps(flInputProps)\r\nconst emit = defineEmits(flInputEmits)\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst rawAttrs = attrs as Record<string, unknown>\r\n\r\n// Keep user-defined exposed capabilities and merge with ElInput expose.\r\nconst _myExpose = {\r\n /**\r\n * FlInput 额外暴露的示例方法,可用于联调验证。\r\n */\r\n myMethod() {\r\n console.log('my method!')\r\n },\r\n /**\r\n * FlInput 额外暴露的示例数值,用于文档演示与调试。\r\n */\r\n myValue: 123\r\n}\r\n\r\nconst { changeRef } = useMergedExpose(_myExpose)\r\nconst { mergedAttrs } = useMergedAttrs({\r\n attrs: rawAttrs,\r\n block: 'input',\r\n listenerName: 'onInput',\r\n onListener: (...args: unknown[]) => {\r\n const value = args[0]\r\n if (typeof value === 'string') {\r\n emit('custom-input', {\r\n value,\r\n length: value.length\r\n })\r\n\r\n if (props.debugMode) {\r\n emit('debug-event', {\r\n label: props.debugLabel,\r\n value\r\n })\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst mergedInputAttrs = computed(() => ({\r\n ...mergedAttrs.value,\r\n class: [mergedAttrs.value.class, { 'is-error': props.isError, 'is-table': props.isTable }]\r\n}))\r\n\r\nconst clearModelValue = () => {\r\n invokeListener(rawAttrs['onUpdate:modelValue'], '')\r\n}\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearModelValue()\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({} as ComponentInstance<typeof ElInput> & typeof _myExpose)\r\n</script>\r\n","<template>\r\n <component :is=\"h(ElInput, { ...mergedInputAttrs, ref: changeRef }, slots)\" />\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ElInput } from 'element-plus'\r\nimport type { ComponentInstance } from 'vue'\r\nimport { computed, h, useAttrs, useSlots, watch } from 'vue'\r\nimport { useMergedAttrs, useMergedExpose } from '@falcon-ui/hooks'\r\nimport { invokeListener } from '@falcon-ui/utils'\r\nimport { flInputEmits, flInputProps } from './input'\r\n\r\ndefineOptions({\r\n name: 'FlInput',\r\n inheritAttrs: false\r\n})\r\n\r\nconst props = defineProps(flInputProps)\r\nconst emit = defineEmits(flInputEmits)\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst rawAttrs = attrs as Record<string, unknown>\r\n\r\n// Keep user-defined exposed capabilities and merge with ElInput expose.\r\nconst _myExpose = {\r\n /**\r\n * FlInput 额外暴露的示例方法,可用于联调验证。\r\n */\r\n myMethod() {\r\n console.log('my method!')\r\n },\r\n /**\r\n * FlInput 额外暴露的示例数值,用于文档演示与调试。\r\n */\r\n myValue: 123\r\n}\r\n\r\nconst { changeRef } = useMergedExpose(_myExpose)\r\nconst { mergedAttrs } = useMergedAttrs({\r\n attrs: rawAttrs,\r\n block: 'input',\r\n listenerName: 'onInput',\r\n onListener: (...args: unknown[]) => {\r\n const value = args[0]\r\n if (typeof value === 'string') {\r\n emit('custom-input', {\r\n value,\r\n length: value.length\r\n })\r\n\r\n if (props.debugMode) {\r\n emit('debug-event', {\r\n label: props.debugLabel,\r\n value\r\n })\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst mergedInputAttrs = computed(() => ({\r\n ...mergedAttrs.value,\r\n class: [mergedAttrs.value.class, { 'is-error': props.isError, 'is-table': props.isTable }]\r\n}))\r\n\r\nconst clearModelValue = () => {\r\n invokeListener(rawAttrs['onUpdate:modelValue'], '')\r\n}\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearModelValue()\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({} as ComponentInstance<typeof ElInput> & typeof _myExpose)\r\n</script>\r\n","import Input from './src/input.vue'\r\nimport { withInstall } from '@falcon-ui/utils'\r\n\r\nexport const FlInput = withInstall(Input)\r\n\r\nexport default FlInput\r\n\r\nexport type { FlInputEmits, FlInputProps, InputEmits, InputProps } from './src/input'\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const flInputProps = {
|
|
2
|
+
isTable: {
|
|
3
|
+
type: Boolean,
|
|
4
|
+
default: false
|
|
5
|
+
},
|
|
6
|
+
isError: {
|
|
7
|
+
type: Boolean,
|
|
8
|
+
default: false
|
|
9
|
+
},
|
|
10
|
+
debugLabel: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: ""
|
|
13
|
+
},
|
|
14
|
+
debugMode: {
|
|
15
|
+
type: Boolean,
|
|
16
|
+
default: false
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const flInputEmits = {
|
|
20
|
+
"custom-input": (payload) => typeof payload.value === "string" && typeof payload.length === "number",
|
|
21
|
+
"debug-event": (payload) => typeof payload.label === "string" && typeof payload.value === "string"
|
|
22
|
+
};
|
|
23
|
+
export { flInputEmits, flInputProps };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.mjs","names":[],"sources":["../../../../../../packages/components/input/src/input.ts"],"sourcesContent":["import type { ExtractPublicPropTypes } from 'vue'\r\n\r\nexport const flInputProps = {\r\n /**\r\n * 是否用于表格单元格内输入场景。开启后会使用表格样式。\r\n */\r\n isTable: {\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 * 调试事件标签,在开启调试模式后会随 `debug-event` 一起抛出。\r\n */\r\n debugLabel: {\r\n type: String,\r\n default: ''\r\n },\r\n /**\r\n * 是否开启调试事件派发,开启后每次输入都会触发调试事件。\r\n */\r\n debugMode: {\r\n type: Boolean,\r\n default: false\r\n }\r\n} as const\r\n\r\nexport interface FlInputCustomPayload {\r\n /**\r\n * 当前输入字符串长度。\r\n */\r\n length: number\r\n /**\r\n * 底层 ElInput 当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport interface FlInputDebugPayload {\r\n /**\r\n * 用于标识输入来源的业务标签。\r\n */\r\n label: string\r\n /**\r\n * 触发调试事件时的当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport const flInputEmits = {\r\n /**\r\n * 原生输入变化时触发,携带当前值与字符长度。\r\n */\r\n 'custom-input': (payload: FlInputCustomPayload) =>\r\n typeof payload.value === 'string' && typeof payload.length === 'number',\r\n /**\r\n * 开启 `debugMode` 后在 `custom-input` 之后触发,用于调试追踪。\r\n */\r\n 'debug-event': (payload: FlInputDebugPayload) =>\r\n typeof payload.label === 'string' && typeof payload.value === 'string'\r\n} as const\r\n\r\nexport type FlInputProps = ExtractPublicPropTypes<typeof flInputProps>\r\nexport type FlInputEmits = typeof flInputEmits\r\n\r\nexport type InputProps = FlInputProps\r\nexport type InputEmits = FlInputEmits\r\n"],"mappings":"AAEA,MAAa,eAAe;CAI1B,SAAS;EACP,MAAM;EACN,SAAS;EACV;CAID,SAAS;EACP,MAAM;EACN,SAAS;EACV;CAID,YAAY;EACV,MAAM;EACN,SAAS;EACV;CAID,WAAW;EACT,MAAM;EACN,SAAS;EACV;CACF;AAwBD,MAAa,eAAe;CAI1B,iBAAiB,YACf,OAAO,QAAQ,UAAU,YAAY,OAAO,QAAQ,WAAW;CAIjE,gBAAgB,YACd,OAAO,QAAQ,UAAU,YAAY,OAAO,QAAQ,UAAU;CACjE"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { computed, createBlock, defineComponent, getCurrentInstance, h, openBlock, resolveDynamicComponent, unref, useAttrs, useSlots, watch } from "vue";
|
|
2
|
+
import { ElInput } from "element-plus";
|
|
3
|
+
var defaultNamespace = "fl";
|
|
4
|
+
var statePrefix = "is-";
|
|
5
|
+
var buildBemName = (namespace, block, blockSuffix = "", element = "", modifier = "") => {
|
|
6
|
+
let className = `${namespace}-${block}`;
|
|
7
|
+
if (blockSuffix) className += `-${blockSuffix}`;
|
|
8
|
+
if (element) className += `__${element}`;
|
|
9
|
+
if (modifier) className += `--${modifier}`;
|
|
10
|
+
return className;
|
|
11
|
+
};
|
|
12
|
+
const useNamespace = (block, namespace = defaultNamespace) => {
|
|
13
|
+
const b = (blockSuffix = "") => buildBemName(namespace, block, blockSuffix);
|
|
14
|
+
const e = (element) => element ? buildBemName(namespace, block, "", element) : "";
|
|
15
|
+
const m = (modifier) => modifier ? buildBemName(namespace, block, "", "", modifier) : "";
|
|
16
|
+
const be = (blockSuffix, element) => {
|
|
17
|
+
if (!blockSuffix || !element) return "";
|
|
18
|
+
return buildBemName(namespace, block, blockSuffix, element);
|
|
19
|
+
};
|
|
20
|
+
const em = (element, modifier) => {
|
|
21
|
+
if (!element || !modifier) return "";
|
|
22
|
+
return buildBemName(namespace, block, "", element, modifier);
|
|
23
|
+
};
|
|
24
|
+
const bm = (blockSuffix, modifier) => {
|
|
25
|
+
if (!blockSuffix || !modifier) return "";
|
|
26
|
+
return buildBemName(namespace, block, blockSuffix, "", modifier);
|
|
27
|
+
};
|
|
28
|
+
const bem = (blockSuffix, element, modifier) => {
|
|
29
|
+
if (!blockSuffix && !element && !modifier) return b();
|
|
30
|
+
return buildBemName(namespace, block, blockSuffix, element, modifier);
|
|
31
|
+
};
|
|
32
|
+
const is = (name, state = true) => state ? `${statePrefix}${name}` : "";
|
|
33
|
+
return {
|
|
34
|
+
namespace,
|
|
35
|
+
b,
|
|
36
|
+
e,
|
|
37
|
+
m,
|
|
38
|
+
be,
|
|
39
|
+
em,
|
|
40
|
+
bm,
|
|
41
|
+
bem,
|
|
42
|
+
is
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const mergeComponentExpose = (vm, exposed, extras = {}) => {
|
|
46
|
+
if (!vm?.exposed || !exposed || typeof exposed !== "object" && typeof exposed !== "function") return;
|
|
47
|
+
Object.assign(vm.exposed, extras, exposed);
|
|
48
|
+
};
|
|
49
|
+
const invokeListener = (listener, ...args) => {
|
|
50
|
+
if (typeof listener === "function") {
|
|
51
|
+
listener(...args);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!Array.isArray(listener)) return;
|
|
55
|
+
for (const item of listener) if (typeof item === "function") item(...args);
|
|
56
|
+
};
|
|
57
|
+
const useMergedAttrs = ({ attrs, block, listenerName, onListener }) => {
|
|
58
|
+
const className = useNamespace(block).b();
|
|
59
|
+
return { mergedAttrs: computed(() => {
|
|
60
|
+
const next = { ...attrs };
|
|
61
|
+
const originalListener = next[listenerName];
|
|
62
|
+
next.class = [className, next.class];
|
|
63
|
+
next[listenerName] = (...args) => {
|
|
64
|
+
onListener?.(...args);
|
|
65
|
+
invokeListener(originalListener, ...args);
|
|
66
|
+
};
|
|
67
|
+
return next;
|
|
68
|
+
}) };
|
|
69
|
+
};
|
|
70
|
+
const useMergedExpose = (extras) => {
|
|
71
|
+
const vm = getCurrentInstance();
|
|
72
|
+
const changeRef = (exposed) => {
|
|
73
|
+
mergeComponentExpose(vm, exposed, extras);
|
|
74
|
+
};
|
|
75
|
+
return { changeRef };
|
|
76
|
+
};
|
|
77
|
+
var input_default = /* @__PURE__ */ defineComponent({
|
|
78
|
+
name: "FlInput",
|
|
79
|
+
inheritAttrs: false,
|
|
80
|
+
__name: "input",
|
|
81
|
+
props: {
|
|
82
|
+
isTable: {
|
|
83
|
+
type: Boolean,
|
|
84
|
+
default: false
|
|
85
|
+
},
|
|
86
|
+
isError: {
|
|
87
|
+
type: Boolean,
|
|
88
|
+
default: false
|
|
89
|
+
},
|
|
90
|
+
debugLabel: {
|
|
91
|
+
type: String,
|
|
92
|
+
default: ""
|
|
93
|
+
},
|
|
94
|
+
debugMode: {
|
|
95
|
+
type: Boolean,
|
|
96
|
+
default: false
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
emits: {
|
|
100
|
+
"custom-input": (payload) => typeof payload.value === "string" && typeof payload.length === "number",
|
|
101
|
+
"debug-event": (payload) => typeof payload.label === "string" && typeof payload.value === "string"
|
|
102
|
+
},
|
|
103
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
104
|
+
const props = __props;
|
|
105
|
+
const emit = __emit;
|
|
106
|
+
const attrs = useAttrs();
|
|
107
|
+
const slots = useSlots();
|
|
108
|
+
const rawAttrs = attrs;
|
|
109
|
+
const { changeRef } = useMergedExpose({
|
|
110
|
+
myMethod() {
|
|
111
|
+
console.log("my method!");
|
|
112
|
+
},
|
|
113
|
+
myValue: 123
|
|
114
|
+
});
|
|
115
|
+
const { mergedAttrs } = useMergedAttrs({
|
|
116
|
+
attrs: rawAttrs,
|
|
117
|
+
block: "input",
|
|
118
|
+
listenerName: "onInput",
|
|
119
|
+
onListener: (...args) => {
|
|
120
|
+
const value = args[0];
|
|
121
|
+
if (typeof value === "string") {
|
|
122
|
+
emit("custom-input", {
|
|
123
|
+
value,
|
|
124
|
+
length: value.length
|
|
125
|
+
});
|
|
126
|
+
if (props.debugMode) emit("debug-event", {
|
|
127
|
+
label: props.debugLabel,
|
|
128
|
+
value
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
const mergedInputAttrs = computed(() => ({
|
|
134
|
+
...mergedAttrs.value,
|
|
135
|
+
class: [mergedAttrs.value.class, {
|
|
136
|
+
"is-error": props.isError,
|
|
137
|
+
"is-table": props.isTable
|
|
138
|
+
}]
|
|
139
|
+
}));
|
|
140
|
+
const clearModelValue = () => {
|
|
141
|
+
invokeListener(rawAttrs["onUpdate:modelValue"], "");
|
|
142
|
+
};
|
|
143
|
+
watch(() => props.isError, (isError, previousIsError) => {
|
|
144
|
+
if (isError && previousIsError !== true) clearModelValue();
|
|
145
|
+
}, { immediate: true });
|
|
146
|
+
__expose({});
|
|
147
|
+
return (_ctx, _cache) => {
|
|
148
|
+
return openBlock(), createBlock(resolveDynamicComponent(h(unref(ElInput), {
|
|
149
|
+
...mergedInputAttrs.value,
|
|
150
|
+
ref: unref(changeRef)
|
|
151
|
+
}, unref(slots))));
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
export { input_default as default };
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=input.vue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.vue.mjs","names":[],"sources":["../../../../../../packages/utils/src/bem.ts","../../../../../../packages/utils/src/component.ts","../../../../../../packages/hooks/src/use-component.ts","../../../../../../packages/components/input/src/input.ts","../../../../../../packages/components/input/src/input.vue","../../../../../../packages/components/input/src/input.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","type ExposedTarget = {\r\n exposed?: Record<string, unknown> | null\r\n} | null\r\n\r\nexport const mergeComponentExpose = (\r\n vm: ExposedTarget,\r\n exposed: unknown,\r\n extras: Record<string, unknown> = {}\r\n) => {\r\n if (!vm?.exposed || !exposed || (typeof exposed !== 'object' && typeof exposed !== 'function')) {\r\n return\r\n }\r\n\r\n Object.assign(vm.exposed, extras, exposed)\r\n}\r\n\r\nexport const invokeListener = (listener: unknown, ...args: unknown[]) => {\r\n if (typeof listener === 'function') {\r\n listener(...args)\r\n return\r\n }\r\n\r\n if (!Array.isArray(listener)) {\r\n return\r\n }\r\n\r\n for (const item of listener) {\r\n if (typeof item === 'function') {\r\n item(...args)\r\n }\r\n }\r\n}\r\n","import { computed, getCurrentInstance } from 'vue'\r\nimport { invokeListener, mergeComponentExpose, useNamespace } from '@falcon-ui/utils'\r\n\r\ntype UseMergedAttrsOptions = {\r\n attrs: Record<string, unknown>\r\n block: string\r\n listenerName: string\r\n onListener?: (...args: unknown[]) => void\r\n}\r\n\r\nexport const useMergedAttrs = ({\r\n attrs,\r\n block,\r\n listenerName,\r\n onListener\r\n}: UseMergedAttrsOptions) => {\r\n const ns = useNamespace(block)\r\n const className = ns.b()\r\n\r\n const mergedAttrs = computed(() => {\r\n const next = { ...attrs }\r\n const originalListener = next[listenerName]\r\n next.class = [className, next.class]\r\n\r\n next[listenerName] = (...args: unknown[]) => {\r\n onListener?.(...args)\r\n invokeListener(originalListener, ...args)\r\n }\r\n\r\n return next\r\n })\r\n\r\n return {\r\n mergedAttrs\r\n }\r\n}\r\n\r\nexport const useMergedExpose = <TExpose extends Record<string, unknown>>(extras: TExpose) => {\r\n const vm = getCurrentInstance()\r\n\r\n const changeRef = (exposed: unknown) => {\r\n mergeComponentExpose(vm, exposed, extras)\r\n }\r\n\r\n return {\r\n changeRef\r\n }\r\n}\r\n","import type { ExtractPublicPropTypes } from 'vue'\r\n\r\nexport const flInputProps = {\r\n /**\r\n * 是否用于表格单元格内输入场景。开启后会使用表格样式。\r\n */\r\n isTable: {\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 * 调试事件标签,在开启调试模式后会随 `debug-event` 一起抛出。\r\n */\r\n debugLabel: {\r\n type: String,\r\n default: ''\r\n },\r\n /**\r\n * 是否开启调试事件派发,开启后每次输入都会触发调试事件。\r\n */\r\n debugMode: {\r\n type: Boolean,\r\n default: false\r\n }\r\n} as const\r\n\r\nexport interface FlInputCustomPayload {\r\n /**\r\n * 当前输入字符串长度。\r\n */\r\n length: number\r\n /**\r\n * 底层 ElInput 当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport interface FlInputDebugPayload {\r\n /**\r\n * 用于标识输入来源的业务标签。\r\n */\r\n label: string\r\n /**\r\n * 触发调试事件时的当前输入值。\r\n */\r\n value: string\r\n}\r\n\r\nexport const flInputEmits = {\r\n /**\r\n * 原生输入变化时触发,携带当前值与字符长度。\r\n */\r\n 'custom-input': (payload: FlInputCustomPayload) =>\r\n typeof payload.value === 'string' && typeof payload.length === 'number',\r\n /**\r\n * 开启 `debugMode` 后在 `custom-input` 之后触发,用于调试追踪。\r\n */\r\n 'debug-event': (payload: FlInputDebugPayload) =>\r\n typeof payload.label === 'string' && typeof payload.value === 'string'\r\n} as const\r\n\r\nexport type FlInputProps = ExtractPublicPropTypes<typeof flInputProps>\r\nexport type FlInputEmits = typeof flInputEmits\r\n\r\nexport type InputProps = FlInputProps\r\nexport type InputEmits = FlInputEmits\r\n","<template>\r\n <component :is=\"h(ElInput, { ...mergedInputAttrs, ref: changeRef }, slots)\" />\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ElInput } from 'element-plus'\r\nimport type { ComponentInstance } from 'vue'\r\nimport { computed, h, useAttrs, useSlots, watch } from 'vue'\r\nimport { useMergedAttrs, useMergedExpose } from '@falcon-ui/hooks'\r\nimport { invokeListener } from '@falcon-ui/utils'\r\nimport { flInputEmits, flInputProps } from './input'\r\n\r\ndefineOptions({\r\n name: 'FlInput',\r\n inheritAttrs: false\r\n})\r\n\r\nconst props = defineProps(flInputProps)\r\nconst emit = defineEmits(flInputEmits)\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst rawAttrs = attrs as Record<string, unknown>\r\n\r\n// Keep user-defined exposed capabilities and merge with ElInput expose.\r\nconst _myExpose = {\r\n /**\r\n * FlInput 额外暴露的示例方法,可用于联调验证。\r\n */\r\n myMethod() {\r\n console.log('my method!')\r\n },\r\n /**\r\n * FlInput 额外暴露的示例数值,用于文档演示与调试。\r\n */\r\n myValue: 123\r\n}\r\n\r\nconst { changeRef } = useMergedExpose(_myExpose)\r\nconst { mergedAttrs } = useMergedAttrs({\r\n attrs: rawAttrs,\r\n block: 'input',\r\n listenerName: 'onInput',\r\n onListener: (...args: unknown[]) => {\r\n const value = args[0]\r\n if (typeof value === 'string') {\r\n emit('custom-input', {\r\n value,\r\n length: value.length\r\n })\r\n\r\n if (props.debugMode) {\r\n emit('debug-event', {\r\n label: props.debugLabel,\r\n value\r\n })\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst mergedInputAttrs = computed(() => ({\r\n ...mergedAttrs.value,\r\n class: [mergedAttrs.value.class, { 'is-error': props.isError, 'is-table': props.isTable }]\r\n}))\r\n\r\nconst clearModelValue = () => {\r\n invokeListener(rawAttrs['onUpdate:modelValue'], '')\r\n}\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearModelValue()\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({} as ComponentInstance<typeof ElInput> & typeof _myExpose)\r\n</script>\r\n","<template>\r\n <component :is=\"h(ElInput, { ...mergedInputAttrs, ref: changeRef }, slots)\" />\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ElInput } from 'element-plus'\r\nimport type { ComponentInstance } from 'vue'\r\nimport { computed, h, useAttrs, useSlots, watch } from 'vue'\r\nimport { useMergedAttrs, useMergedExpose } from '@falcon-ui/hooks'\r\nimport { invokeListener } from '@falcon-ui/utils'\r\nimport { flInputEmits, flInputProps } from './input'\r\n\r\ndefineOptions({\r\n name: 'FlInput',\r\n inheritAttrs: false\r\n})\r\n\r\nconst props = defineProps(flInputProps)\r\nconst emit = defineEmits(flInputEmits)\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\nconst rawAttrs = attrs as Record<string, unknown>\r\n\r\n// Keep user-defined exposed capabilities and merge with ElInput expose.\r\nconst _myExpose = {\r\n /**\r\n * FlInput 额外暴露的示例方法,可用于联调验证。\r\n */\r\n myMethod() {\r\n console.log('my method!')\r\n },\r\n /**\r\n * FlInput 额外暴露的示例数值,用于文档演示与调试。\r\n */\r\n myValue: 123\r\n}\r\n\r\nconst { changeRef } = useMergedExpose(_myExpose)\r\nconst { mergedAttrs } = useMergedAttrs({\r\n attrs: rawAttrs,\r\n block: 'input',\r\n listenerName: 'onInput',\r\n onListener: (...args: unknown[]) => {\r\n const value = args[0]\r\n if (typeof value === 'string') {\r\n emit('custom-input', {\r\n value,\r\n length: value.length\r\n })\r\n\r\n if (props.debugMode) {\r\n emit('debug-event', {\r\n label: props.debugLabel,\r\n value\r\n })\r\n }\r\n }\r\n }\r\n})\r\n\r\nconst mergedInputAttrs = computed(() => ({\r\n ...mergedAttrs.value,\r\n class: [mergedAttrs.value.class, { 'is-error': props.isError, 'is-table': props.isTable }]\r\n}))\r\n\r\nconst clearModelValue = () => {\r\n invokeListener(rawAttrs['onUpdate:modelValue'], '')\r\n}\r\n\r\nwatch(\r\n () => props.isError,\r\n (isError, previousIsError) => {\r\n if (isError && previousIsError !== true) {\r\n clearModelValue()\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\ndefineExpose({} as ComponentInstance<typeof ElInput> & typeof _myExpose)\r\n</script>\r\n"],"mappings":"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"}
|