@veltra/desktop 1.2.24 → 1.2.25
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/dist/components/action/action-group.vue.d.ts +2 -2
- package/dist/components/action/action.vue.d.ts +1 -1
- package/dist/components/auto-complete/auto-complete.vue.d.ts +2 -2
- package/dist/components/cascade/cascade.js +5 -3
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +3 -3
- package/dist/components/cascade/use-data-map.js +2 -1
- package/dist/components/cascade/use-data-map.js.map +1 -1
- package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
- package/dist/components/checkbox-group/checkbox-group.js +10 -10
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
- package/dist/components/code-editor/basic-setup.js +2 -1
- package/dist/components/code-editor/basic-setup.js.map +1 -1
- package/dist/components/code-editor/code-editor.js +136 -79
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/code-editor.vue.d.ts +10 -2
- package/dist/components/code-editor/shell-extension.js +139 -0
- package/dist/components/code-editor/shell-extension.js.map +1 -0
- package/dist/components/code-editor/style.js +1 -0
- package/dist/components/code-editor/style2.css +15 -11
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +2 -2
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +2 -2
- package/dist/components/empty/empty.vue.d.ts +1 -1
- package/dist/components/input/input.vue.d.ts +2 -2
- package/dist/components/multi-select/multi-select.js +31 -36
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-select/multi-select.vue.d.ts +2 -2
- package/dist/components/multi-tree-select/multi-tree-select.js +8 -6
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +2 -2
- package/dist/components/number-input/number-input.vue.d.ts +2 -2
- package/dist/components/number-range-input/number-range-input.vue.d.ts +1 -1
- package/dist/components/password-input/password-input.vue.d.ts +1 -1
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
- package/dist/components/progress-nodes/progress-nodes.js +6 -4
- package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
- package/dist/components/radio-group/radio-group.js +8 -6
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +1 -1
- package/dist/components/select/select.js +13 -13
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/select.vue.d.ts +2 -2
- package/dist/components/select/use-options.js +7 -4
- package/dist/components/select/use-options.js.map +1 -1
- package/dist/components/steps/steps.js +3 -2
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/steps/steps.vue.d.ts +2 -2
- package/dist/components/textarea/textarea.vue.d.ts +2 -2
- package/dist/components/tip/tip.vue.d.ts +1 -1
- package/dist/components/tree/use-check.js +2 -1
- package/dist/components/tree/use-check.js.map +1 -1
- package/dist/components/tree/use-select.js +3 -1
- package/dist/components/tree/use-select.js.map +1 -1
- package/dist/components/tree/use-tree-nodes.js +4 -1
- package/dist/components/tree/use-tree-nodes.js.map +1 -1
- package/dist/components/tree-select/tree-select.js +6 -4
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +2 -2
- package/dist/components/watermark/watermark.vue.d.ts +1 -1
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +12 -1
- package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
- package/dist/style.js +1 -1
- package/dist/types/code-editor.d.ts +13 -2
- package/package.json +6 -6
- package/src/components/cascade/cascade.vue +6 -3
- package/src/components/cascade/use-data-map.ts +3 -2
- package/src/components/checkbox-group/checkbox-group.vue +10 -8
- package/src/components/code-editor/basic-setup.ts +3 -1
- package/src/components/code-editor/code-editor.vue +154 -96
- package/src/components/code-editor/shell-extension.ts +199 -0
- package/src/components/code-editor/style.scss +20 -13
- package/src/components/code-editor/style.ts +1 -0
- package/src/components/multi-select/multi-select.vue +31 -30
- package/src/components/multi-tree-select/multi-tree-select.vue +5 -2
- package/src/components/progress-nodes/progress-nodes.vue +7 -4
- package/src/components/radio-group/radio-group.vue +5 -1
- package/src/components/select/select.vue +13 -11
- package/src/components/select/use-options.ts +7 -4
- package/src/components/steps/steps.vue +3 -1
- package/src/components/tree/use-check.ts +2 -1
- package/src/components/tree/use-select.ts +3 -1
- package/src/components/tree/use-tree-nodes.ts +5 -9
- package/src/components/tree-select/tree-select.vue +7 -4
- package/src/types/code-editor.ts +13 -2
|
@@ -6,11 +6,11 @@ type __VLS_Slots = {
|
|
|
6
6
|
default?: () => VNode[];
|
|
7
7
|
};
|
|
8
8
|
declare const __VLS_base: import("vue").DefineComponent<ActionGroupProps, _ActionGroupExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ActionGroupProps> & Readonly<{}>, {
|
|
9
|
-
size: "small" | "default" | "large";
|
|
10
9
|
type: import("@veltra/utils").ColorType;
|
|
11
10
|
text: boolean;
|
|
12
|
-
|
|
11
|
+
size: "small" | "default" | "large";
|
|
13
12
|
circle: boolean;
|
|
13
|
+
max: number;
|
|
14
14
|
loading: boolean;
|
|
15
15
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
16
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -12,9 +12,9 @@ declare const __VLS_base: import("vue").DefineComponent<ActionProps, {}, {}, {},
|
|
|
12
12
|
}, string, import("vue").PublicProps, Readonly<ActionProps> & Readonly<{
|
|
13
13
|
onRun?: (() => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
|
-
size: import("@veltra/utils").ComponentSize;
|
|
16
15
|
type: ButtonType;
|
|
17
16
|
text: boolean;
|
|
17
|
+
size: import("@veltra/utils").ComponentSize;
|
|
18
18
|
circle: boolean;
|
|
19
19
|
loading: boolean;
|
|
20
20
|
inDropdown: boolean;
|
|
@@ -22,10 +22,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, _Auto
|
|
|
22
22
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
23
23
|
onSelect?: ((value: string) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
|
-
disabled: boolean;
|
|
26
|
-
readonly: boolean;
|
|
27
25
|
placeholder: string;
|
|
28
26
|
clearable: boolean;
|
|
27
|
+
disabled: boolean;
|
|
28
|
+
readonly: boolean;
|
|
29
29
|
allowCustom: boolean;
|
|
30
30
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
31
31
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -11,7 +11,7 @@ import { useDataMap } from "./use-data-map.js";
|
|
|
11
11
|
import { useSelect } from "./use-select.js";
|
|
12
12
|
import { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, provide, renderList, shallowRef, toDisplayString, triggerRef, unref, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
13
13
|
import { useFormFallbackProps, useUserAction } from "@veltra/compositions";
|
|
14
|
-
import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
|
|
14
|
+
import { FORM_EMPTY_CONTENT, bem, fieldKey, injectFormContext } from "@veltra/utils";
|
|
15
15
|
import { ArrowDown, Close, Search } from "@veltra/icons/normal";
|
|
16
16
|
import { Forest, o } from "@cat-kit/core";
|
|
17
17
|
//#region src/components/cascade/cascade.vue
|
|
@@ -67,6 +67,8 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
67
67
|
const props = __props;
|
|
68
68
|
const emit = __emit;
|
|
69
69
|
const cls = bem("cascade");
|
|
70
|
+
const labelKey = computed(() => fieldKey(props.labelKey, "label"));
|
|
71
|
+
const valueKey = computed(() => fieldKey(props.valueKey, "value"));
|
|
70
72
|
const { formProps } = injectFormContext();
|
|
71
73
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
72
74
|
size: "default",
|
|
@@ -91,8 +93,8 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
91
93
|
data,
|
|
92
94
|
index,
|
|
93
95
|
depth,
|
|
94
|
-
value: o(data).get(
|
|
95
|
-
label: o(data).get(
|
|
96
|
+
value: o(data).get(valueKey.value) ?? "",
|
|
97
|
+
label: o(data).get(labelKey.value) ?? "",
|
|
96
98
|
parent
|
|
97
99
|
});
|
|
98
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.js","names":["$attrs"],"sources":["../../../src/components/cascade/cascade.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[cls.b, bem.is('disabled', disabled), bem.is('multiple', multiple), cls.m(size)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n width=\"auto\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n @update:visible=\"!$event && (qs = '')\"\n >\n <template #trigger>\n <!-- 单选展示 -->\n <u-input\n v-if=\"!multiple\"\n :size=\"size\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :clearable=\"clearable\"\n native-readonly\n :model-value=\"displayedValue\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('arrow')\"><ArrowDown /></u-icon>\n </template>\n </u-input>\n\n <!-- 多选展示 -->\n <template v-if=\"multiple\">\n <span :class=\"cls.e('placeholder')\" v-show=\"!modelValue?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"modelValue?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"tag of tags\"\n :key=\"tag.value\"\n :closable=\"!disabled\"\n @close=\"handleCloseTag(tag)\"\n >\n {{ tag.label }}\n </u-tag>\n <u-tag v-if=\"restTag\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && modelValue?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n </template>\n\n <template #content>\n <!-- 过滤 -->\n <div v-if=\"filterable\" :class=\"cls.e('panel-filter')\">\n <u-input placeholder=\"输入关键字进行过滤\" v-model=\"qs\" :size=\"size\" clearable>\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <div :class=\"cls.e('content')\" v-if=\"panelItemList.length\">\n <UCascadePanelItem\n v-for=\"({ nodes, key }, index) of panelItemList\"\n :data=\"nodes\"\n :key=\"key\"\n :panel-index=\"index\"\n :value=\"selectedNodeKeys[index]\"\n @click=\"handleClick\"\n @check=\"handleCheck\"\n />\n </div>\n\n <div :class=\"cls.e('empty')\" v-else>\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <!-- 只读 -->\n <template v-else>\n <div :class=\"[cls.m(size)]\" v-if=\"multiple\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of tags\" :key=\"tag.value\">\n {{ tag.label }}\n </u-tag>\n </div>\n </div>\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Forest, o } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, triggerRef, watch } from 'vue'\n\nimport type { CascadeProps, CascadeEmits, DropdownExposed } from '../../types'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UTag } from '../tag'\nimport UCascadePanelItem from './cascade-panel-item.vue'\nimport { CascadeDIKey } from './di'\nimport { CascadeNode } from './node'\nimport { useCheck } from './use-check'\nimport { useDataMap } from './use-data-map'\nimport { useSelect } from './use-select'\n\ndefineOptions({ name: 'UCascade', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CascadeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n separator: '/',\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n childrenKey: 'children',\n filterable: false,\n data: () => [],\n visibilityLimit: 3,\n showFullPath: true\n})\n\nconst emit = defineEmits<CascadeEmits>()\n\nconst cls = bem('cascade')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst forest = computed(() => {\n return new Forest<Record<string, unknown>, any>({\n data: (props.data ?? []) as Record<string, unknown>[],\n childrenKey: props.childrenKey,\n createNode: (data, index, depth, _forest, parent) => {\n if (!data) {\n return new CascadeNode({ data, index, depth, value: '', label: '', parent })\n }\n\n return new CascadeNode({\n data,\n index,\n depth,\n value: o(data).get(props.valueKey) ?? '',\n label: o(data).get(props.labelKey) ?? '',\n parent\n })\n }\n })\n})\n\nconst { dataMap } = useDataMap({ props, forest })\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst {\n displayedValue,\n selectItem,\n updateSingleValue,\n panelItemList,\n getPanelItemList,\n createPanelItem,\n selectedNodeKeys\n} = useSelect({ props, emit, dataMap, forest, isUserActive, dropdownRef })\n\nconst { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem, checkedSet } =\n useCheck({ props, forest, getPanelItemList, emit, dataMap, isUserActive, disabled, readonly })\n\nconst commitSingleSelect = userAction((item: CascadeNode) => {\n if (!props.strict) {\n updateSingleValue()\n } else if (!item.children?.length) {\n updateSingleValue()\n }\n})\n\nfunction handleClick(panelIndex: number, item: CascadeNode) {\n selectItem(panelIndex, item)\n\n if (!props.multiple) {\n commitSingleSelect(item)\n }\n}\n\nconst handleCheck = userAction((item: CascadeNode, checked: boolean) => {\n checkItem(item, checked)\n})\n\nfunction handleClear() {\n if (props.multiple) {\n checkedSet.value.clear()\n triggerRef(checkedSet)\n updateMultipleValue()\n } else {\n selectedNodeKeys.value = []\n updateSingleValue()\n }\n\n emit('clear')\n}\n\n// 过滤\nconst qs = shallowRef<string>('')\n\nwatch([qs, forest], ([qs, forest]) => {\n const { filterable } = props\n if (!filterable || !qs) {\n forest.dfs((node) => {\n node.visible = true\n })\n getPanelItemList(forest.roots)\n return\n }\n\n const cache = new Set<CascadeNode>()\n\n forest.dfs((node) => {\n if (node.label?.toLowerCase().includes(qs.toLowerCase())) {\n node.visible = true\n let parent = node.parent\n while (parent && !cache.has(parent)) {\n parent.visible = true\n cache.add(parent)\n parent = parent.parent\n }\n } else {\n node.visible = false\n }\n })\n\n panelItemList.value = [createPanelItem(forest.roots)]\n})\n\nprovide(CascadeDIKey, { cls, size, disabled, readonly, cascadeProps: props, checkedSet })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascade.js","names":["$attrs"],"sources":["../../../src/components/cascade/cascade.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[cls.b, bem.is('disabled', disabled), bem.is('multiple', multiple), cls.m(size)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n width=\"auto\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n @update:visible=\"!$event && (qs = '')\"\n >\n <template #trigger>\n <!-- 单选展示 -->\n <u-input\n v-if=\"!multiple\"\n :size=\"size\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :clearable=\"clearable\"\n native-readonly\n :model-value=\"displayedValue\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('arrow')\"><ArrowDown /></u-icon>\n </template>\n </u-input>\n\n <!-- 多选展示 -->\n <template v-if=\"multiple\">\n <span :class=\"cls.e('placeholder')\" v-show=\"!modelValue?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"modelValue?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"tag of tags\"\n :key=\"tag.value\"\n :closable=\"!disabled\"\n @close=\"handleCloseTag(tag)\"\n >\n {{ tag.label }}\n </u-tag>\n <u-tag v-if=\"restTag\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && modelValue?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n </template>\n\n <template #content>\n <!-- 过滤 -->\n <div v-if=\"filterable\" :class=\"cls.e('panel-filter')\">\n <u-input placeholder=\"输入关键字进行过滤\" v-model=\"qs\" :size=\"size\" clearable>\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <div :class=\"cls.e('content')\" v-if=\"panelItemList.length\">\n <UCascadePanelItem\n v-for=\"({ nodes, key }, index) of panelItemList\"\n :data=\"nodes\"\n :key=\"key\"\n :panel-index=\"index\"\n :value=\"selectedNodeKeys[index]\"\n @click=\"handleClick\"\n @check=\"handleCheck\"\n />\n </div>\n\n <div :class=\"cls.e('empty')\" v-else>\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <!-- 只读 -->\n <template v-else>\n <div :class=\"[cls.m(size)]\" v-if=\"multiple\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of tags\" :key=\"tag.value\">\n {{ tag.label }}\n </u-tag>\n </div>\n </div>\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Forest, o } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, triggerRef, watch } from 'vue'\n\nimport type { CascadeProps, CascadeEmits, DropdownExposed } from '../../types'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UTag } from '../tag'\nimport UCascadePanelItem from './cascade-panel-item.vue'\nimport { CascadeDIKey } from './di'\nimport { CascadeNode } from './node'\nimport { useCheck } from './use-check'\nimport { useDataMap } from './use-data-map'\nimport { useSelect } from './use-select'\n\ndefineOptions({ name: 'UCascade', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CascadeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n separator: '/',\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n childrenKey: 'children',\n filterable: false,\n data: () => [],\n visibilityLimit: 3,\n showFullPath: true\n})\n\nconst emit = defineEmits<CascadeEmits>()\n\nconst cls = bem('cascade')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst forest = computed(() => {\n return new Forest<Record<string, unknown>, any>({\n data: (props.data ?? []) as Record<string, unknown>[],\n childrenKey: props.childrenKey,\n createNode: (data, index, depth, _forest, parent) => {\n if (!data) {\n return new CascadeNode({ data, index, depth, value: '', label: '', parent })\n }\n\n return new CascadeNode({\n data,\n index,\n depth,\n value: o(data).get(valueKey.value) ?? '',\n label: o(data).get(labelKey.value) ?? '',\n parent\n })\n }\n })\n})\n\nconst { dataMap } = useDataMap({ props, forest })\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst {\n displayedValue,\n selectItem,\n updateSingleValue,\n panelItemList,\n getPanelItemList,\n createPanelItem,\n selectedNodeKeys\n} = useSelect({ props, emit, dataMap, forest, isUserActive, dropdownRef })\n\nconst { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem, checkedSet } =\n useCheck({ props, forest, getPanelItemList, emit, dataMap, isUserActive, disabled, readonly })\n\nconst commitSingleSelect = userAction((item: CascadeNode) => {\n if (!props.strict) {\n updateSingleValue()\n } else if (!item.children?.length) {\n updateSingleValue()\n }\n})\n\nfunction handleClick(panelIndex: number, item: CascadeNode) {\n selectItem(panelIndex, item)\n\n if (!props.multiple) {\n commitSingleSelect(item)\n }\n}\n\nconst handleCheck = userAction((item: CascadeNode, checked: boolean) => {\n checkItem(item, checked)\n})\n\nfunction handleClear() {\n if (props.multiple) {\n checkedSet.value.clear()\n triggerRef(checkedSet)\n updateMultipleValue()\n } else {\n selectedNodeKeys.value = []\n updateSingleValue()\n }\n\n emit('clear')\n}\n\n// 过滤\nconst qs = shallowRef<string>('')\n\nwatch([qs, forest], ([qs, forest]) => {\n const { filterable } = props\n if (!filterable || !qs) {\n forest.dfs((node) => {\n node.visible = true\n })\n getPanelItemList(forest.roots)\n return\n }\n\n const cache = new Set<CascadeNode>()\n\n forest.dfs((node) => {\n if (node.label?.toLowerCase().includes(qs.toLowerCase())) {\n node.visible = true\n let parent = node.parent\n while (parent && !cache.has(parent)) {\n parent.visible = true\n cache.add(parent)\n parent = parent.parent\n }\n } else {\n node.visible = false\n }\n })\n\n panelItemList.value = [createPanelItem(forest.roots)]\n})\n\nprovide(CascadeDIKey, { cls, size, disabled, readonly, cascadeProps: props, checkedSet })\n</script>\n"],"mappings":"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"}
|
|
@@ -11,8 +11,6 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
|
|
|
11
11
|
onChange?: ((...args: [item?: Record<string, any> | undefined] | [items: Record<string, any>[]]) => any) | undefined;
|
|
12
12
|
"onUpdate:label"?: ((label?: string | string[] | undefined) => any) | undefined;
|
|
13
13
|
}>, {
|
|
14
|
-
disabled: boolean;
|
|
15
|
-
readonly: boolean;
|
|
16
14
|
labelKey: string;
|
|
17
15
|
valueKey: string;
|
|
18
16
|
childrenKey: string;
|
|
@@ -20,8 +18,10 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
|
|
|
20
18
|
placeholder: string;
|
|
21
19
|
clearable: boolean;
|
|
22
20
|
filterable: boolean;
|
|
23
|
-
|
|
21
|
+
disabled: boolean;
|
|
22
|
+
readonly: boolean;
|
|
24
23
|
visibilityLimit: number;
|
|
24
|
+
separator: string;
|
|
25
25
|
showFullPath: boolean;
|
|
26
26
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
27
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { shallowRef, triggerRef, watchEffect } from "vue";
|
|
2
|
+
import { fieldKey } from "@veltra/utils";
|
|
2
3
|
import { o } from "@cat-kit/core";
|
|
3
4
|
//#region src/components/cascade/use-data-map.ts
|
|
4
5
|
function useDataMap(options) {
|
|
5
6
|
const { props, forest } = options;
|
|
6
7
|
const dataMap = shallowRef(/* @__PURE__ */ new Map());
|
|
7
8
|
watchEffect(() => {
|
|
8
|
-
const
|
|
9
|
+
const valueKey = fieldKey(props.valueKey, "value");
|
|
9
10
|
dataMap.value.clear();
|
|
10
11
|
forest.value.dfs((node) => {
|
|
11
12
|
const value = o(node.data).get(valueKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-data-map.js","names":[],"sources":["../../../src/components/cascade/use-data-map.ts"],"sourcesContent":["import { Forest, o } from '@cat-kit/core'\nimport { shallowRef, triggerRef, watchEffect, type ComputedRef, type ShallowRef } from 'vue'\n\nimport type { CascadeNode, CascadeProps } from '../../types'\n\ninterface DataMapOptions {\n props: CascadeProps\n forest: ComputedRef<Forest<Record<string, unknown>, any>>\n}\n\n/** 数据映射相关逻辑 */\ninterface UseDataMapReturned {\n dataMap: ShallowRef<Map<string, CascadeNode>>\n}\n\nexport function useDataMap(options: DataMapOptions): UseDataMapReturned {\n const { props, forest } = options\n const dataMap = shallowRef(new Map<string, CascadeNode>())\n\n watchEffect(() => {\n const
|
|
1
|
+
{"version":3,"file":"use-data-map.js","names":[],"sources":["../../../src/components/cascade/use-data-map.ts"],"sourcesContent":["import { Forest, o } from '@cat-kit/core'\nimport { fieldKey } from '@veltra/utils'\nimport { shallowRef, triggerRef, watchEffect, type ComputedRef, type ShallowRef } from 'vue'\n\nimport type { CascadeNode, CascadeProps } from '../../types'\n\ninterface DataMapOptions {\n props: CascadeProps\n forest: ComputedRef<Forest<Record<string, unknown>, any>>\n}\n\n/** 数据映射相关逻辑 */\ninterface UseDataMapReturned {\n dataMap: ShallowRef<Map<string, CascadeNode>>\n}\n\nexport function useDataMap(options: DataMapOptions): UseDataMapReturned {\n const { props, forest } = options\n const dataMap = shallowRef(new Map<string, CascadeNode>())\n\n watchEffect(() => {\n const valueKey = fieldKey(props.valueKey, 'value')\n\n dataMap.value.clear()\n\n forest.value.dfs((node) => {\n const value = o(node.data).get(valueKey)\n if (value !== null && value !== undefined) {\n dataMap.value.set(value, node)\n }\n })\n\n triggerRef(dataMap)\n })\n\n return { dataMap }\n}\n"],"mappings":";;;;AAgBA,SAAgB,WAAW,SAA6C;CACtE,MAAM,EAAE,OAAO,WAAW;CAC1B,MAAM,UAAU,2BAAW,IAAI,IAAyB,CAAC;CAEzD,kBAAkB;EAChB,MAAM,WAAW,SAAS,MAAM,UAAU,OAAO;EAEjD,QAAQ,MAAM,MAAM;EAEpB,OAAO,MAAM,KAAK,SAAS;GACzB,MAAM,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,QAAQ;GACvC,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,QAAQ,MAAM,IAAI,OAAO,IAAI;EAEjC,CAAC;EAED,WAAW,OAAO;CACpB,CAAC;CAED,OAAO,EAAE,QAAQ;AACnB"}
|
|
@@ -17,9 +17,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
17
17
|
"onUpdate:modelValue"?: ((checked: boolean) => any) | undefined;
|
|
18
18
|
onChange?: ((checked: boolean) => any) | undefined;
|
|
19
19
|
}>, {
|
|
20
|
+
type: import("@veltra/utils").ColorType;
|
|
20
21
|
disabled: boolean;
|
|
21
22
|
readonly: boolean;
|
|
22
|
-
type: import("@veltra/utils").ColorType;
|
|
23
23
|
round: boolean;
|
|
24
24
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
25
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _sfc_main$1 from "../checkbox/checkbox.js";
|
|
2
2
|
import _sfc_main$2 from "../tag/tag.js";
|
|
3
|
-
import { Fragment, createBlock, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, normalizeClass, openBlock, renderList, toDisplayString, unref, useModel, withCtx } from "vue";
|
|
3
|
+
import { Fragment, computed, createBlock, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, normalizeClass, openBlock, renderList, toDisplayString, unref, useModel, withCtx } from "vue";
|
|
4
4
|
import { useFormFallbackProps } from "@veltra/compositions";
|
|
5
|
-
import { FORM_EMPTY_CONTENT, bem, injectFormContext } from "@veltra/utils";
|
|
5
|
+
import { FORM_EMPTY_CONTENT, bem, fieldKey, injectFormContext } from "@veltra/utils";
|
|
6
6
|
//#region src/components/checkbox-group/checkbox-group.vue
|
|
7
7
|
const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
8
8
|
name: "UCheckboxGroup",
|
|
@@ -37,6 +37,8 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
37
37
|
const props = __props;
|
|
38
38
|
const model = useModel(__props, "modelValue");
|
|
39
39
|
const cls = bem("checkbox-group");
|
|
40
|
+
const labelKey = computed(() => fieldKey(props.labelKey, "label"));
|
|
41
|
+
const valueKey = computed(() => fieldKey(props.valueKey, "value"));
|
|
40
42
|
const { formProps } = injectFormContext();
|
|
41
43
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
42
44
|
size: "default",
|
|
@@ -49,8 +51,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
49
51
|
* @returns 模型值是否存在于model.value中
|
|
50
52
|
*/
|
|
51
53
|
const getCheckStatus = (item) => {
|
|
52
|
-
const
|
|
53
|
-
const value = item[valueKey];
|
|
54
|
+
const value = item[valueKey.value];
|
|
54
55
|
if (!value || !model.value) return false;
|
|
55
56
|
return model.value.includes(value);
|
|
56
57
|
};
|
|
@@ -60,15 +61,14 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
60
61
|
* @param item - 更新的项
|
|
61
62
|
*/
|
|
62
63
|
const handleUpdate = (checked, item) => {
|
|
63
|
-
const
|
|
64
|
-
const value = item[valueKey];
|
|
64
|
+
const value = item[valueKey.value];
|
|
65
65
|
if (!value) return;
|
|
66
66
|
if (checked) model.value = [...model.value ?? [], value];
|
|
67
67
|
else model.value = model.value?.filter((v) => v !== value);
|
|
68
68
|
};
|
|
69
69
|
const getLabel = (value) => {
|
|
70
|
-
const { items
|
|
71
|
-
return items.find((item) => item[valueKey] === value)?.[labelKey];
|
|
70
|
+
const { items } = props;
|
|
71
|
+
return items.find((item) => item[valueKey.value] === value)?.[labelKey.value];
|
|
72
72
|
};
|
|
73
73
|
return (_ctx, _cache) => {
|
|
74
74
|
return !unref(readonly) ? (openBlock(), createElementBlock("div", mergeProps({ key: 0 }, _ctx.$attrs, { class: [
|
|
@@ -77,13 +77,13 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
77
77
|
unref(bem).is("block", __props.block)
|
|
78
78
|
] }), [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
|
|
79
79
|
return openBlock(), createBlock(unref(_sfc_main$1), {
|
|
80
|
-
key: item[
|
|
80
|
+
key: item[valueKey.value],
|
|
81
81
|
"model-value": getCheckStatus(item),
|
|
82
82
|
"onUpdate:modelValue": ($event) => handleUpdate($event, item),
|
|
83
83
|
disabled: unref(disabled),
|
|
84
84
|
size: unref(size)
|
|
85
85
|
}, {
|
|
86
|
-
default: withCtx(() => [createTextVNode(toDisplayString(item[
|
|
86
|
+
default: withCtx(() => [createTextVNode(toDisplayString(item[labelKey.value]), 1)]),
|
|
87
87
|
_: 2
|
|
88
88
|
}, 1032, [
|
|
89
89
|
"model-value",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-group.js","names":["$attrs"],"sources":["../../../src/components/checkbox-group/checkbox-group.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"[cls.b, cls.m(size), bem.is('block', block)]\">\n <u-checkbox\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :model-value=\"getCheckStatus(item)\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-checkbox>\n </div>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of model\" :key=\"tag\">\n {{ getLabel(tag) }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\n\nimport type { CheckboxGroupProps, CheckboxGroupEmits } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxGroup', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\ndefineEmits<CheckboxGroupEmits>()\n\nconst model = defineModel<any[]>()\n\nconst cls = bem('checkbox-group')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\n/**\n * 获取checkbox的选中状态\n * @param item - 模型对象\n * @returns 模型值是否存在于model.value中\n */\nconst getCheckStatus = (item: Record<string, string | number>): boolean => {\n const
|
|
1
|
+
{"version":3,"file":"checkbox-group.js","names":["$attrs"],"sources":["../../../src/components/checkbox-group/checkbox-group.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"[cls.b, cls.m(size), bem.is('block', block)]\">\n <u-checkbox\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :model-value=\"getCheckStatus(item)\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-checkbox>\n </div>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of model\" :key=\"tag\">\n {{ getLabel(tag) }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxGroupProps, CheckboxGroupEmits } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxGroup', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\ndefineEmits<CheckboxGroupEmits>()\n\nconst model = defineModel<any[]>()\n\nconst cls = bem('checkbox-group')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\n/**\n * 获取checkbox的选中状态\n * @param item - 模型对象\n * @returns 模型值是否存在于model.value中\n */\nconst getCheckStatus = (item: Record<string, string | number>): boolean => {\n const value = item[valueKey.value]\n if (!value || !model.value) return false\n return model.value.includes(value)\n}\n\n/**\n * 处理更新操作\n * @param checked - 指示是否选中\n * @param item - 更新的项\n */\nconst handleUpdate = (checked: boolean, item: Record<string, string | number>) => {\n const value = item[valueKey.value]\n if (!value) return\n if (checked) {\n model.value = [...(model.value ?? []), value]\n } else {\n model.value = model.value?.filter((v) => v !== value)\n }\n}\n\nconst getLabel = (value: string | number) => {\n const { items } = props\n const item = items.find((item) => item[valueKey.value] === value)\n return item?.[labelKey.value]\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EASd,MAAM,QAAQ,SAAkB,SAAA,YAAC;EAEjC,MAAM,MAAM,IAAI,gBAAgB;EAEhC,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EACjE,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EAEjE,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;;;;;;EAOD,MAAM,kBAAkB,SAAmD;GACzE,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,OAAO;GACnC,OAAO,MAAM,MAAM,SAAS,KAAK;EACnC;;;;;;EAOA,MAAM,gBAAgB,SAAkB,SAA0C;GAChF,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,OAAO;GACZ,IAAI,SACF,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,KAAK;QAE5C,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,MAAM,KAAK;EAExD;EAEA,MAAM,YAAY,UAA2B;GAC3C,MAAM,EAAE,UAAU;GAElB,OADa,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW,KACpD,CAAA,GAAO,SAAS;EACzB;;WA5Fc,MAAA,QAAA,KAAA,UAAA,GAAZ,mBAWM,OAXN,WAWM,EAAA,KAAA,EAAA,GAXwBA,KAAAA,QAAM,EAAG,OAAK;IAAG,MAAA,GAAA,CAAG,CAAC;IAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAG,MAAA,GAAA,CAAG,CAAC,GAAE,SAAU,QAAA,KAAK;GAAA,EAAA,CAAA,GAAA,EAAA,UAAA,IAAA,GACtF,mBASa,UAAA,MAAA,WARI,QAAA,QAAR,SAAI;wBADb,YASa,MAAA,WAAA,GAAA;KAPV,KAAK,KAAK,SAAA;KACV,eAAa,eAAe,IAAI;KAChC,wBAAkB,WAAE,aAAa,QAAQ,IAAI;KAC7C,UAAU,MAAA,QAAA;KACV,MAAM,MAAA,IAAA;;4BAEa,CAAA,gBAAA,gBAAjB,KAAK,SAAA,MAAQ,GAAA,CAAA,CAAA,CAAA;;;;;;;;sBAIJ,MAAA,OAAO,UAAA,UAAA,GAAvB,mBAMM,OAAA;;IAN0B,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA,CAAA;OACxD,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GAChB,mBAEQ,UAAA,MAAA,WAFa,MAAA,QAAP,QAAG;wBAAjB,YAEQ,MAAA,WAAA,GAAA,EAFqB,KAAK,IAAG,GAAA;4BAChB,CAAA,gBAAA,gBAAhB,SAAS,GAAG,CAAA,GAAA,CAAA,CAAA,CAAA;;;wCAKrB,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
|
|
@@ -12,10 +12,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
12
12
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
13
13
|
"onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
|
-
disabled: boolean;
|
|
16
|
-
readonly: boolean;
|
|
17
15
|
labelKey: string;
|
|
18
16
|
valueKey: string;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
readonly: boolean;
|
|
19
19
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
20
|
declare const _default: typeof __VLS_export;
|
|
21
21
|
//#endregion
|
|
@@ -2,7 +2,7 @@ import { EditorState } from "../../node_modules/.bun/@codemirror_state@6.7.0/nod
|
|
|
2
2
|
import { crosshairCursor, drawSelection, dropCursor, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers, rectangularSelection } from "../../node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js";
|
|
3
3
|
import { bracketMatching, defaultHighlightStyle, foldGutter, foldKeymap, indentOnInput, syntaxHighlighting } from "../../node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js";
|
|
4
4
|
import { autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap } from "../../node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js";
|
|
5
|
-
import { defaultKeymap, history, historyKeymap } from "../../node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js";
|
|
5
|
+
import { defaultKeymap, history, historyKeymap, indentWithTab } from "../../node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js";
|
|
6
6
|
import { lintKeymap } from "../../node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js";
|
|
7
7
|
import { highlightSelectionMatches, searchKeymap } from "../../node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js";
|
|
8
8
|
//#region src/components/code-editor/basic-setup.ts
|
|
@@ -29,6 +29,7 @@ const basicSetup = (() => [
|
|
|
29
29
|
highlightActiveLine(),
|
|
30
30
|
highlightSelectionMatches(),
|
|
31
31
|
keymap.of([
|
|
32
|
+
indentWithTab,
|
|
32
33
|
...closeBracketsKeymap,
|
|
33
34
|
...defaultKeymap,
|
|
34
35
|
...searchKeymap,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-setup.js","names":[],"sources":["../../../src/components/code-editor/basic-setup.ts"],"sourcesContent":["import {\n closeBrackets,\n autocompletion,\n closeBracketsKeymap,\n completionKeymap\n} from '@codemirror/autocomplete'\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands'\nimport {\n foldGutter,\n indentOnInput,\n syntaxHighlighting,\n defaultHighlightStyle,\n bracketMatching,\n foldKeymap\n} from '@codemirror/language'\nimport { lintKeymap } from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport { EditorState, type Extension } from '@codemirror/state'\nimport {\n lineNumbers,\n highlightActiveLineGutter,\n highlightSpecialChars,\n drawSelection,\n dropCursor,\n rectangularSelection,\n crosshairCursor,\n highlightActiveLine,\n keymap,\n type KeyBinding\n} from '@codemirror/view'\n\n/**\n * 等价于 codemirror 包的 basicSetup,按官方建议内联以便统一依赖来源。\n * @see https://codemirror.net/docs/ref/#codemirror.basicSetup\n */\nexport const basicSetup: Extension = (() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ] as readonly KeyBinding[])\n])()\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,oBAA+B;CAC1C,YAAY;CACZ,0BAA0B;CAC1B,sBAAsB;CACtB,QAAQ;CACR,WAAW;CACX,cAAc;CACd,WAAW;CACX,YAAY,wBAAwB,GAAG,IAAI;CAC3C,cAAc;CACd,mBAAmB,uBAAuB,EAAE,UAAU,KAAK,CAAC;CAC5D,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,qBAAqB;CACrB,gBAAgB;CAChB,oBAAoB;CACpB,0BAA0B;CAC1B,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"basic-setup.js","names":[],"sources":["../../../src/components/code-editor/basic-setup.ts"],"sourcesContent":["import {\n closeBrackets,\n autocompletion,\n closeBracketsKeymap,\n completionKeymap\n} from '@codemirror/autocomplete'\nimport { history, defaultKeymap, historyKeymap, indentWithTab } from '@codemirror/commands'\nimport {\n foldGutter,\n indentOnInput,\n syntaxHighlighting,\n defaultHighlightStyle,\n bracketMatching,\n foldKeymap\n} from '@codemirror/language'\nimport { lintKeymap } from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport { EditorState, type Extension } from '@codemirror/state'\nimport {\n lineNumbers,\n highlightActiveLineGutter,\n highlightSpecialChars,\n drawSelection,\n dropCursor,\n rectangularSelection,\n crosshairCursor,\n highlightActiveLine,\n keymap,\n type KeyBinding\n} from '@codemirror/view'\n\n/**\n * 等价于 codemirror 包的 basicSetup,按官方建议内联以便统一依赖来源。\n * @see https://codemirror.net/docs/ref/#codemirror.basicSetup\n */\nexport const basicSetup: Extension = (() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n // Tab 默认留给浏览器焦点导航;代码编辑器需显式绑定缩进,否则焦点会跳到语言选择等控件\n indentWithTab,\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ] as readonly KeyBinding[])\n])()\n"],"mappings":";;;;;;;;;;;;AAmCA,MAAa,oBAA+B;CAC1C,YAAY;CACZ,0BAA0B;CAC1B,sBAAsB;CACtB,QAAQ;CACR,WAAW;CACX,cAAc;CACd,WAAW;CACX,YAAY,wBAAwB,GAAG,IAAI;CAC3C,cAAc;CACd,mBAAmB,uBAAuB,EAAE,UAAU,KAAK,CAAC;CAC5D,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,qBAAqB;CACrB,gBAAgB;CAChB,oBAAoB;CACpB,0BAA0B;CAC1B,OAAO,GAAG;EAER;EACA,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL,CAA0B;AAC5B,EAAA,CAAG"}
|