@veltra/desktop 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/components/action/action-group.js +110 -3
  2. package/dist/components/action/action-group.js.map +1 -1
  3. package/dist/components/action/action-group.vue.d.ts +16 -3
  4. package/dist/components/action/action.js +26 -13
  5. package/dist/components/action/action.js.map +1 -1
  6. package/dist/components/action/style.js +2 -1
  7. package/dist/components/action/style2.css +35 -7
  8. package/dist/components/batch-edit/batch-edit-form.js +106 -42
  9. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  10. package/dist/components/batch-edit/batch-edit-list.js +84 -47
  11. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  12. package/dist/components/batch-edit/batch-edit.js +42 -10
  13. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  14. package/dist/components/batch-edit/style.js +2 -4
  15. package/dist/components/batch-edit/style2.css +202 -30
  16. package/dist/components/batch-edit/use-edit.js +45 -9
  17. package/dist/components/batch-edit/use-edit.js.map +1 -1
  18. package/dist/components/cascade/cascade.js +3 -1
  19. package/dist/components/cascade/cascade.js.map +1 -1
  20. package/dist/components/code-editor/code-editor.js +145 -49
  21. package/dist/components/code-editor/code-editor.js.map +1 -1
  22. package/dist/components/code-editor/code-editor.vue.d.ts +2 -0
  23. package/dist/components/code-editor/style2.css +87 -19
  24. package/dist/components/dialog/dialog.js +6 -2
  25. package/dist/components/dialog/dialog.js.map +1 -1
  26. package/dist/components/dialog/style2.css +2 -3
  27. package/dist/components/expression-editor/components/path-preview.js +27 -0
  28. package/dist/components/expression-editor/components/path-preview.js.map +1 -0
  29. package/dist/components/expression-editor/components/variable-picker.js +200 -153
  30. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  31. package/dist/components/expression-editor/core/chip.js +54 -0
  32. package/dist/components/expression-editor/core/chip.js.map +1 -0
  33. package/dist/components/expression-editor/core/editor.js +425 -0
  34. package/dist/components/expression-editor/core/editor.js.map +1 -0
  35. package/dist/components/expression-editor/core/mention.js +91 -0
  36. package/dist/components/expression-editor/core/mention.js.map +1 -0
  37. package/dist/components/expression-editor/core/model.js +64 -0
  38. package/dist/components/expression-editor/core/model.js.map +1 -0
  39. package/dist/components/expression-editor/di.js +4 -10
  40. package/dist/components/expression-editor/di.js.map +1 -1
  41. package/dist/components/expression-editor/expression-editor.js +168 -114
  42. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  43. package/dist/components/expression-editor/expression-editor.vue.d.ts +2 -1
  44. package/dist/components/expression-editor/style.js +0 -2
  45. package/dist/components/expression-editor/style2.css +145 -218
  46. package/dist/components/index.js +54 -54
  47. package/dist/components/layout/layout.js +12 -11
  48. package/dist/components/layout/layout.js.map +1 -1
  49. package/dist/components/multi-select/multi-select.vue.d.ts +1 -1
  50. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +1 -1
  51. package/dist/components/number-input/number-input.js +4 -4
  52. package/dist/components/number-input/number-input.js.map +1 -1
  53. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  54. package/dist/components/rich-text-editor/rich-text-editor.js +1 -1
  55. package/dist/components/rich-text-editor/toolbar.js +2 -2
  56. package/dist/components/steps/steps.vue.d.ts +1 -1
  57. package/dist/components/table/use-table.js +16 -0
  58. package/dist/components/table/use-table.js.map +1 -1
  59. package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
  60. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  61. package/dist/components/tabs/tabs.vue.d.ts +3 -3
  62. package/dist/components/tip/tip.js +4 -5
  63. package/dist/components/tip/tip.js.map +1 -1
  64. package/dist/components/tip/tip.vue.d.ts +1 -1
  65. package/dist/components/tree/style2.css +18 -12
  66. package/dist/components/tree/tree-node.js +7 -4
  67. package/dist/components/tree/tree-node.js.map +1 -1
  68. package/dist/components/tree-select/tree-select.vue.d.ts +1 -1
  69. package/dist/index.d.ts +3 -3
  70. package/dist/index.js +83 -83
  71. package/dist/style.js +3 -3
  72. package/dist/types/action.d.ts +38 -4
  73. package/dist/types/cascade.d.ts +2 -3
  74. package/dist/types/code-editor.d.ts +9 -2
  75. package/dist/types/expression-editor.d.ts +9 -1
  76. package/dist/types/index.d.ts +2 -2
  77. package/package.json +11 -12
  78. package/src/components/action/action-group.vue +126 -56
  79. package/src/components/action/action.vue +35 -12
  80. package/src/components/action/style.scss +46 -10
  81. package/src/components/action/style.ts +2 -1
  82. package/src/components/batch-edit/batch-edit-form.vue +121 -45
  83. package/src/components/batch-edit/batch-edit-list.vue +56 -39
  84. package/src/components/batch-edit/batch-edit.vue +57 -6
  85. package/src/components/batch-edit/style.scss +251 -37
  86. package/src/components/batch-edit/style.ts +5 -8
  87. package/src/components/batch-edit/use-edit.ts +58 -11
  88. package/src/components/cascade/cascade.vue +3 -1
  89. package/src/components/code-editor/code-editor.vue +198 -63
  90. package/src/components/code-editor/style.scss +110 -12
  91. package/src/components/dialog/dialog.vue +6 -2
  92. package/src/components/dialog/style.scss +4 -4
  93. package/src/components/expression-editor/__test__/chip.test.ts +86 -0
  94. package/src/components/expression-editor/__test__/editor.test.ts +47 -0
  95. package/src/components/expression-editor/__test__/mention.test.ts +122 -0
  96. package/src/components/expression-editor/__test__/model.test.ts +127 -0
  97. package/src/components/expression-editor/components/path-preview.vue +32 -0
  98. package/src/components/expression-editor/components/variable-picker.vue +225 -219
  99. package/src/components/expression-editor/core/chip.ts +101 -0
  100. package/src/components/expression-editor/core/editor.ts +514 -0
  101. package/src/components/expression-editor/core/mention.ts +121 -0
  102. package/src/components/expression-editor/core/model.ts +109 -0
  103. package/src/components/expression-editor/di.ts +4 -32
  104. package/src/components/expression-editor/expression-editor.vue +184 -151
  105. package/src/components/expression-editor/style.scss +148 -219
  106. package/src/components/expression-editor/style.ts +0 -2
  107. package/src/components/layout/layout.vue +17 -19
  108. package/src/components/number-input/number-input.vue +4 -4
  109. package/src/components/table/use-table.ts +16 -0
  110. package/src/components/tip/tip.vue +4 -3
  111. package/src/components/tree/style.scss +30 -33
  112. package/src/components/tree/tree-node.vue +4 -2
  113. package/src/types/action.ts +42 -4
  114. package/src/types/cascade.ts +4 -3
  115. package/src/types/code-editor.ts +9 -2
  116. package/src/types/expression-editor.ts +9 -0
  117. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js +0 -65
  118. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +0 -1
  119. package/dist/components/expression-editor/constants.js +0 -9
  120. package/dist/components/expression-editor/constants.js.map +0 -1
  121. package/dist/components/expression-editor/internal/editor-runtime/create-runtime.js +0 -47
  122. package/dist/components/expression-editor/internal/editor-runtime/create-runtime.js.map +0 -1
  123. package/dist/components/expression-editor/internal/editor-runtime/model-sync.js +0 -49
  124. package/dist/components/expression-editor/internal/editor-runtime/model-sync.js.map +0 -1
  125. package/dist/components/expression-editor/internal/features/commands/register-command-packs.js +0 -215
  126. package/dist/components/expression-editor/internal/features/commands/register-command-packs.js.map +0 -1
  127. package/dist/components/expression-editor/internal/features/drag-drop/drag-drop-service.js +0 -33
  128. package/dist/components/expression-editor/internal/features/drag-drop/drag-drop-service.js.map +0 -1
  129. package/dist/components/expression-editor/internal/features/insertion/insertion-service.js +0 -33
  130. package/dist/components/expression-editor/internal/features/insertion/insertion-service.js.map +0 -1
  131. package/dist/components/expression-editor/nodes/variable-node.js +0 -94
  132. package/dist/components/expression-editor/nodes/variable-node.js.map +0 -1
  133. package/dist/components/expression-editor/parser.js +0 -32
  134. package/dist/components/expression-editor/parser.js.map +0 -1
  135. package/dist/components/expression-editor/plain-text.js +0 -19
  136. package/dist/components/expression-editor/plain-text.js.map +0 -1
  137. package/dist/components/expression-editor/use-context.js +0 -69
  138. package/dist/components/expression-editor/use-context.js.map +0 -1
  139. package/dist/components/expression-editor/use-decorators.js +0 -27
  140. package/dist/components/expression-editor/use-decorators.js.map +0 -1
  141. package/dist/components/expression-editor/use-expression-drag-drop.js +0 -275
  142. package/dist/components/expression-editor/use-expression-drag-drop.js.map +0 -1
  143. package/src/components/batch-edit/batch-edit-new.vue +0 -168
  144. package/src/components/batch-edit/style-new.scss +0 -35
  145. package/src/components/batch-edit/use-edit-new.ts +0 -68
  146. package/src/components/batch-edit/use-tip.ts +0 -47
  147. package/src/components/expression-editor/__test__/architecture-boundaries.test.ts +0 -103
  148. package/src/components/expression-editor/__test__/architecture-compatibility.test.ts +0 -52
  149. package/src/components/expression-editor/__test__/drag-drop.test.ts +0 -171
  150. package/src/components/expression-editor/__test__/parser.test.ts +0 -62
  151. package/src/components/expression-editor/constants.ts +0 -6
  152. package/src/components/expression-editor/internal/contracts/editor-runtime.ts +0 -11
  153. package/src/components/expression-editor/internal/editor-runtime/create-runtime.ts +0 -64
  154. package/src/components/expression-editor/internal/editor-runtime/index.ts +0 -1
  155. package/src/components/expression-editor/internal/editor-runtime/model-sync.ts +0 -68
  156. package/src/components/expression-editor/internal/features/commands/register-command-packs.ts +0 -517
  157. package/src/components/expression-editor/internal/features/drag-drop/drag-drop-service.ts +0 -51
  158. package/src/components/expression-editor/internal/features/insertion/insertion-service.ts +0 -56
  159. package/src/components/expression-editor/nodes/variable-node.tsx +0 -118
  160. package/src/components/expression-editor/parser.ts +0 -46
  161. package/src/components/expression-editor/plain-text.ts +0 -25
  162. package/src/components/expression-editor/plan.md +0 -22
  163. package/src/components/expression-editor/use-context.ts +0 -134
  164. package/src/components/expression-editor/use-decorators.tsx +0 -29
  165. package/src/components/expression-editor/use-editor.ts +0 -12
  166. package/src/components/expression-editor/use-expression-drag-drop.ts +0 -396
@@ -1,23 +1,11 @@
1
1
  @use 'pkg:@veltra/styles/mixins' as m;
2
2
  @use 'pkg:@veltra/styles/functions' as fn;
3
- @use 'sass:map';
4
3
 
5
4
  $root-name: tree;
6
5
 
7
- // 每一级缩进与展开图标 / 叶子占位保持一致的宽度,
6
+ // 每一级缩进与展开图标 / 叶子图标保持一致的宽度,
8
7
  // 保证节点内容在各层之间横向对齐。
9
8
  $indent-width: 20px;
10
- $indent-leaf-width: 20px;
11
- $expand-icon-size: 20px;
12
- // 节点稳态高度,与 `tree.vue` 中 `estimateSize` 协同,用于虚拟滚动初始估算。
13
- $node-min-height-small: 28px;
14
- $node-min-height-default: 32px;
15
- $node-min-height-large: 40px;
16
- $node-min-heights: (
17
- small: $node-min-height-small,
18
- default: $node-min-height-default,
19
- large: $node-min-height-large
20
- );
21
9
 
22
10
  @include m.b($root-name) {
23
11
  @include m.size using ($size) {
@@ -33,7 +21,7 @@ $node-min-heights: (
33
21
  }
34
22
 
35
23
  @include m.bem($root-name, node) {
36
- min-height: map.get($node-min-heights, $size);
24
+ min-height: fn.use-var(form-component-height, $size);
37
25
  }
38
26
  }
39
27
 
@@ -85,22 +73,23 @@ $node-min-heights: (
85
73
  @include m.flex($align: center);
86
74
 
87
75
  @include m.is(selected) {
88
- // 左侧 3px 色带,配合淡色背景共同构成选中态。
89
- &::before {
90
- content: '';
91
- position: absolute;
92
- left: 0;
93
- top: 4px;
94
- bottom: 4px;
95
- width: 3px;
96
- border-radius: 3px;
97
- background-color: fn.use-var(color, primary);
98
- }
99
-
100
76
  @include m.bem($root-name, node-content) {
101
77
  background-color: fn.use-var(color, primary, light-9);
102
78
  color: fn.use-var(color, primary);
103
79
  font-weight: 500;
80
+
81
+ // 左侧 3px 色带,配合淡色背景共同构成选中态;
82
+ // 贴在节点内容(而非整行)左侧,避免与缩进 / 图标错位。
83
+ &::before {
84
+ content: '';
85
+ position: absolute;
86
+ left: 0;
87
+ top: 4px;
88
+ bottom: 4px;
89
+ width: 3px;
90
+ border-radius: 3px;
91
+ background-color: fn.use-var(color, primary);
92
+ }
104
93
  }
105
94
  }
106
95
 
@@ -128,18 +117,14 @@ $node-min-heights: (
128
117
  @include m.e(indent) {
129
118
  flex-shrink: 0;
130
119
  width: $indent-width;
131
-
132
- @include m.em(indent, leaf) {
133
- width: $indent-leaf-width;
134
- }
135
120
  }
136
121
 
137
122
  @include m.e(expand-icon) {
138
123
  cursor: pointer;
139
124
  flex-shrink: 0;
140
- width: $expand-icon-size;
141
- height: $expand-icon-size;
142
- font-size: $expand-icon-size;
125
+ width: $indent-width;
126
+ height: $indent-width;
127
+ font-size: $indent-width;
143
128
  border-radius: 50%;
144
129
  transition:
145
130
  transform 0.15s cubic-bezier(0.4, 0, 0.2, 1),
@@ -150,7 +135,19 @@ $node-min-heights: (
150
135
  }
151
136
  }
152
137
 
138
+ // 叶子节点的占位标识:与展开图标占据相同尺寸以保持同列对齐,
139
+ // 通过淡色 + 缩小的圆点显式表达"叶子"语义,避免空白看起来像缺失。
140
+ @include m.e(leaf-icon) {
141
+ flex-shrink: 0;
142
+ width: $indent-width;
143
+ height: $indent-width;
144
+ font-size: $indent-width;
145
+ color: fn.use-var(text-color, placeholder);
146
+ pointer-events: none;
147
+ }
148
+
153
149
  @include m.e(node-content) {
150
+ position: relative;
154
151
  flex-grow: 1;
155
152
  overflow: hidden;
156
153
  user-select: none;
@@ -8,7 +8,9 @@
8
8
  <u-icon v-if="!node.isLeaf" :class="cls.e('expand-icon')" @click.stop="toggleExpand">
9
9
  <ArrowRight />
10
10
  </u-icon>
11
- <i v-else :class="[cls.e('indent'), cls.em('indent', 'leaf')]" aria-hidden="true"></i>
11
+ <u-icon v-else :class="cls.e('leaf-icon')" aria-hidden="true">
12
+ <Dot />
13
+ </u-icon>
12
14
 
13
15
  <div
14
16
  :class="cls.e('node-content')"
@@ -35,7 +37,7 @@
35
37
 
36
38
  <script lang="ts" setup>
37
39
  import { vRipple } from '@veltra/directives'
38
- import { ArrowRight } from '@veltra/icons/normal'
40
+ import { ArrowRight, Dot } from '@veltra/icons/normal'
39
41
  import { bem } from '@veltra/utils'
40
42
  import { inject } from 'vue'
41
43
 
@@ -1,4 +1,4 @@
1
- import type { DeconstructValue } from '@veltra/utils'
1
+ import type { ColorType, DeconstructValue } from '@veltra/utils'
2
2
 
3
3
  import type { ButtonProps } from './button'
4
4
 
@@ -7,7 +7,10 @@ export interface ActionProps extends ButtonProps {
7
7
  /** 是否需要确认 */
8
8
  needConfirm?: boolean
9
9
 
10
- /** 是否为下拉菜单中的操作项 */
10
+ /**
11
+ * 是否始终位于下拉菜单中,无视 `max` 限制
12
+ * @default false
13
+ */
11
14
  inDropdown?: boolean
12
15
  }
13
16
 
@@ -15,11 +18,46 @@ export interface ActionProps extends ButtonProps {
15
18
  export interface ActionGroupProps {
16
19
  /** 是否加载中 */
17
20
  loading?: boolean
18
- /** 是否为圆形按钮, 适用于图标类 */
21
+ /**
22
+ * 是否为圆形按钮,适用于图标类。`hover` 模式下默认对所有子项生效
23
+ * @default false
24
+ */
19
25
  circle?: boolean
20
26
 
21
- /** 最大可显示数量 */
27
+ /**
28
+ * 最大可显示按钮数量,超出部分自动收纳到下拉菜单
29
+ * @default 3
30
+ */
22
31
  max?: number
32
+
33
+ /**
34
+ * 紧凑悬浮模式
35
+ *
36
+ * @description
37
+ * - 默认半透明,悬浮在父容器上方时完全显现
38
+ * - 提供圆角胶囊容器与磨砂背景,更适合表格行内操作栏
39
+ * - "更多"按钮也会切换为图标态以与其他操作按钮保持一致
40
+ * @default false
41
+ */
42
+ hover?: boolean
43
+
44
+ /**
45
+ * 子项默认尺寸
46
+ * @default 'small'
47
+ */
48
+ size?: 'small' | 'default' | 'large'
49
+
50
+ /**
51
+ * 子项默认是否使用文本样式
52
+ * @default true
53
+ */
54
+ text?: boolean
55
+
56
+ /**
57
+ * 子项默认按钮类型
58
+ * @default 'primary'
59
+ */
60
+ type?: ColorType
23
61
  }
24
62
 
25
63
  /** 操作组件定义的事件 */
@@ -1,8 +1,9 @@
1
- import type { ITreeNode } from '@cat-kit/core'
1
+ import type { TreeNode } from '@cat-kit/core'
2
2
  import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
3
3
 
4
- export interface CascadeNode extends ITreeNode<Record<string, any>, CascadeNode> {
5
- children?: CascadeNode[]
4
+ export interface CascadeNode<
5
+ Data extends Record<string, any> = Record<string, any>
6
+ > extends TreeNode<Data, CascadeNode<Data>> {
6
7
  visible: boolean
7
8
  value: string
8
9
  label: string
@@ -2,11 +2,18 @@ import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
2
2
 
3
3
  export type CodeEditorLang = 'js' | 'sql' | 'java' | 'json'
4
4
 
5
- /** 代码编辑器组件属性 */
6
- export interface CodeEditorProps extends FormComponentProps {
5
+ /** 代码编辑器组件属性(不支持 `size`) */
6
+ export interface CodeEditorProps extends Omit<FormComponentProps, 'size'> {
7
7
  modelValue?: string
8
8
  /** 定义语言 */
9
9
  language?: CodeEditorLang
10
+ /** 是否使用暗色主题 */
11
+ dark?: boolean
12
+ /**
13
+ * 默认显示的行数,用于撑起编辑器最小高度,超出后滚动
14
+ * @default 8
15
+ */
16
+ defaultLines?: number
10
17
  }
11
18
 
12
19
  /** 代码编辑器组件定义的事件 */
@@ -9,12 +9,21 @@ export interface VariableItem {
9
9
  children?: VariableItem[]
10
10
  }
11
11
 
12
+ /** 选中范围:仅叶子节点,或允许任意层级(含分支) */
13
+ export type ExpressionSelectableLevels = 'leaf' | 'any'
14
+
12
15
  /** 表达式编辑器组件属性 */
13
16
  export interface ExpressionEditorProps extends FormComponentProps {
14
17
  modelValue?: string
15
18
  placeholder?: string
16
19
  /** 变量列表 */
17
20
  variables?: VariableItem[]
21
+ /**
22
+ * 是否允许选中任意层级的变量(含中间分支)。
23
+ * - `'leaf'`(默认):仅叶子节点可选;分支节点上 Enter / → 进入下一级
24
+ * - `'any'`:分支节点上 Enter 选中分支本身、→ 进入下一级
25
+ */
26
+ selectableLevels?: ExpressionSelectableLevels
18
27
  }
19
28
 
20
29
  /** 表达式编辑器组件定义的事件 */
@@ -1,65 +0,0 @@
1
- import _sfc_main from "../icon/icon.js";
2
- import _sfc_main$1 from "../tip/tip.js";
3
- import _sfc_main$2 from "../button/button.js";
4
- import { ActionDIKey } from "./di.js";
5
- import { Fragment, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, openBlock, provide, renderList, resolveDynamicComponent, useSlots } from "vue";
6
- import { bem, extractNormalVNodes } from "@veltra/utils";
7
- import { ArrowDown } from "@veltra/icons/normal";
8
- //#region src/components/action/action-group.vue?vue&type=script&setup=true&lang.tsx
9
- var action_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
- name: "ActionGroup",
11
- inheritAttrs: false,
12
- __name: "action-group",
13
- props: {
14
- loading: {
15
- type: Boolean,
16
- default: false
17
- },
18
- circle: {
19
- type: Boolean,
20
- default: false
21
- },
22
- max: { default: 3 }
23
- },
24
- setup(__props) {
25
- const props = __props;
26
- const cls = bem("action-group");
27
- const actionCls = bem("action");
28
- const slots = useSlots();
29
- function getSlotsNodes() {
30
- const nodes = slots.default?.();
31
- if (!nodes) return [];
32
- const extractedNodes = extractNormalVNodes(nodes).filter((node) => node.type?.name === "Action");
33
- let normalNodes = [];
34
- let hiddenNodes = [];
35
- if (extractedNodes.length === props.max) normalNodes = extractedNodes;
36
- else {
37
- normalNodes = extractedNodes.slice(0, props.max - 1);
38
- hiddenNodes = extractedNodes.slice(props.max - 1);
39
- }
40
- const dropdown = hiddenNodes.length ? createVNode(_sfc_main$1, {
41
- "direction": "bottom",
42
- "class": cls.e("dropdown")
43
- }, {
44
- content: () => hiddenNodes,
45
- default: () => createVNode(_sfc_main$2, {
46
- "text": true,
47
- "size": "small",
48
- "type": "primary",
49
- "class": actionCls.b
50
- }, { default: () => [createTextVNode("更多"), createVNode(_sfc_main, null, { default: () => [createVNode(ArrowDown, null, null)] })] })
51
- }) : null;
52
- return dropdown ? [...normalNodes, dropdown] : normalNodes;
53
- }
54
- provide(ActionDIKey, { groupProps: props });
55
- return (_ctx, _cache) => {
56
- return openBlock(true), createElementBlock(Fragment, null, renderList(getSlotsNodes(), (node) => {
57
- return openBlock(), createBlock(resolveDynamicComponent(node), { key: node.key });
58
- }), 128);
59
- };
60
- }
61
- });
62
- //#endregion
63
- export { action_group_vue_vue_type_script_setup_true_lang_default as default };
64
-
65
- //# sourceMappingURL=action-group.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-group.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/action/action-group.vue"],"sourcesContent":["<template>\n <component v-for=\"node of getSlotsNodes()\" :key=\"node.key\" :is=\"node\" />\n</template>\n\n<script lang=\"tsx\" setup>\nimport type { ActionGroupProps } from \"../../types\";\nimport { ArrowDown } from '@veltra/icons/normal'\nimport { UIcon } from \"../icon\";\nimport { UButton } from \"../button\";\nimport { provide, type VNode } from \"vue\";\nimport { bem, extractNormalVNodes } from \"@veltra/utils\";\nimport { UTip } from \"../tip\";\nimport { ActionDIKey } from \"./di\";\n\ndefineOptions({\n name: \"ActionGroup\",\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<ActionGroupProps>(), {\n max: 3,\n loading: false,\n circle: false,\n});\n\nconst cls = bem(\"action-group\");\nconst actionCls = bem(\"action\");\n\nconst slots = defineSlots<{\n default?: () => VNode[];\n}>();\n\nfunction getSlotsNodes() {\n const nodes = slots.default?.();\n\n if (!nodes) return [];\n const extractedNodes = extractNormalVNodes(nodes).filter(\n // @ts-ignore\n (node) => node.type?.name === \"Action\",\n );\n\n let normalNodes: VNode[] = [];\n let hiddenNodes: VNode[] = [];\n if (extractedNodes.length === props.max) {\n normalNodes = extractedNodes;\n } else {\n normalNodes = extractedNodes.slice(0, props.max - 1);\n hiddenNodes = extractedNodes.slice(props.max - 1);\n }\n\n const dropdown = hiddenNodes.length ? (\n <UTip direction=\"bottom\" class={cls.e(\"dropdown\")}>\n {{\n content: () => hiddenNodes,\n default: () => (\n <UButton text size=\"small\" type=\"primary\" class={actionCls.b}>\n 更多\n <UIcon>\n <ArrowDown />\n </UIcon>\n </UButton>\n ),\n }}\n </UTip>\n ) : null;\n\n return dropdown ? [...normalNodes, dropdown] : normalNodes;\n}\n\nprovide(ActionDIKey, {\n groupProps: props,\n});\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAmBA,MAAM,QAAQ;EAMd,MAAM,MAAM,IAAI,eAAe;EAC/B,MAAM,YAAY,IAAI,SAAS;EAE/B,MAAM,QAAQ,UAEV;EAEJ,SAAS,gBAAgB;GACvB,MAAM,QAAQ,MAAM,WAAW;AAE/B,OAAI,CAAC,MAAO,QAAO,EAAE;GACrB,MAAM,iBAAiB,oBAAoB,MAAM,CAAC,QAE/C,SAAS,KAAK,MAAM,SAAS,SAC/B;GAED,IAAI,cAAuB,EAAE;GAC7B,IAAI,cAAuB,EAAE;AAC7B,OAAI,eAAe,WAAW,MAAM,IAClC,eAAc;QACT;AACL,kBAAc,eAAe,MAAM,GAAG,MAAM,MAAM,EAAE;AACpD,kBAAc,eAAe,MAAM,MAAM,MAAM,EAAE;;GAGnD,MAAM,WAAW,YAAY,SAAM,YAAA,aAAA;IAAA,aAAA;IAAA,SACD,IAAI,EAAE,WAAU;IAAC,EAAA;IAE7C,eAAe;IACf,eAAS,YAAA,aAAA;KAAA,QAAA;KAAA,QAAA;KAAA,QAAA;KAAA,SAC0C,UAAU;KAAC,EAAA,EAAA,eAAA,CAAA,gBAAA,KAAA,EAAA,YAAA,WAAA,MAAA,EAAA,eAAA,CAAA,YAAA,WAAA,MAAA,KAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAM7D,CAAA,GAGH;AAEJ,UAAO,WAAW,CAAC,GAAG,aAAa,SAAS,GAAG;;AAGjD,UAAQ,aAAa,EACnB,YAAY,OACb,CAAC;;2BAtEA,mBAAwE,UAAA,MAAA,WAA9C,eAAa,GAArB,SAAI;wBAAtB,YAAwE,wBAAR,KAAI,EAAA,EAAxB,KAAK,KAAK,KAAA,CAAA"}
@@ -1,9 +0,0 @@
1
- //#region src/components/expression-editor/constants.ts
2
- const EXPRESSION_VARIABLE_DRAG_TYPE = "application/x-ultra-expression-variable";
3
- const EXPRESSION_VARIABLE_DRAG_MARKER_ATTR = "data-ultra-expression-variable-node";
4
- const EXPRESSION_VARIABLE_DRAG_KEY_ATTR = "data-ultra-expression-variable-key";
5
- const EXPRESSION_DROP_SCOPE_ATTR = "data-ultra-expression-drop-scope";
6
- //#endregion
7
- export { EXPRESSION_DROP_SCOPE_ATTR, EXPRESSION_VARIABLE_DRAG_KEY_ATTR, EXPRESSION_VARIABLE_DRAG_MARKER_ATTR, EXPRESSION_VARIABLE_DRAG_TYPE };
8
-
9
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/expression-editor/constants.ts"],"sourcesContent":["export const CONTEXT_TRIGGER_CHAR = '@'\n\nexport const EXPRESSION_VARIABLE_DRAG_TYPE = 'application/x-ultra-expression-variable'\nexport const EXPRESSION_VARIABLE_DRAG_MARKER_ATTR = 'data-ultra-expression-variable-node'\nexport const EXPRESSION_VARIABLE_DRAG_KEY_ATTR = 'data-ultra-expression-variable-key'\nexport const EXPRESSION_DROP_SCOPE_ATTR = 'data-ultra-expression-drop-scope'\n"],"mappings":";AAEA,MAAa,gCAAgC;AAC7C,MAAa,uCAAuC;AACpD,MAAa,oCAAoC;AACjD,MAAa,6BAA6B"}
@@ -1,47 +0,0 @@
1
- import { createVariableMap } from "../../di.js";
2
- import { VariableNode } from "../../nodes/variable-node.js";
3
- import { createModelSync } from "./model-sync.js";
4
- import { computed, watchEffect } from "vue";
5
- import { createEditor } from "lexical";
6
- //#region src/components/expression-editor/internal/editor-runtime/create-runtime.ts
7
- function createDefaultMutationGateway(editor) {
8
- return { runUpdate(updater) {
9
- editor.update(() => {
10
- updater();
11
- });
12
- } };
13
- }
14
- function resolveEditable(disabled, readonly) {
15
- return !disabled.value && !readonly.value;
16
- }
17
- function createExpressionEditorRuntime(options) {
18
- const { disabled, readonly, container, props, emit, cls } = options;
19
- const editor = createEditor({
20
- namespace: "ExpressionEditor",
21
- nodes: [VariableNode],
22
- onError: console.error,
23
- editable: resolveEditable(disabled, readonly),
24
- theme: { paragraph: cls.e("paragraph") }
25
- });
26
- watchEffect(() => {
27
- editor.setEditable(resolveEditable(disabled, readonly));
28
- });
29
- watchEffect(() => {
30
- container.value && editor.setRootElement(container.value);
31
- });
32
- const sync = createModelSync({
33
- editor,
34
- props,
35
- emit,
36
- variableMap: computed(() => createVariableMap(props.variables))
37
- });
38
- return {
39
- editor,
40
- mutations: createDefaultMutationGateway(editor),
41
- syncFromModelValue: sync.syncFromModelValue
42
- };
43
- }
44
- //#endregion
45
- export { createExpressionEditorRuntime };
46
-
47
- //# sourceMappingURL=create-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-runtime.js","names":[],"sources":["../../../../../src/components/expression-editor/internal/editor-runtime/create-runtime.ts"],"sourcesContent":["import type { BEM } from '@veltra/utils'\nimport { createEditor } from 'lexical'\nimport { watchEffect, computed, type Ref, type ShallowRef } from 'vue'\n\nimport type { ExpressionEditorEmits, ExpressionEditorProps } from '../../../../types'\nimport { createVariableMap } from '../../di'\nimport { VariableNode } from '../../nodes/variable-node'\nimport type { EditorMutationGateway, ExpressionEditorRuntime } from '../contracts/editor-runtime'\nimport { createModelSync } from './model-sync'\n\nexport interface CreateExpressionEditorRuntimeOptions {\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n props: ExpressionEditorProps\n cls: BEM<'expression-editor'>\n emit: ExpressionEditorEmits\n container: ShallowRef<HTMLElement | null>\n}\n\nfunction createDefaultMutationGateway(\n editor: ExpressionEditorRuntime['editor']\n): EditorMutationGateway {\n return {\n runUpdate(updater) {\n editor.update(() => {\n updater()\n })\n }\n }\n}\n\nfunction resolveEditable(disabled: Ref<boolean>, readonly: Ref<boolean>) {\n return !disabled.value && !readonly.value\n}\n\nexport function createExpressionEditorRuntime(\n options: CreateExpressionEditorRuntimeOptions\n): ExpressionEditorRuntime {\n const { disabled, readonly, container, props, emit, cls } = options\n const editor = createEditor({\n namespace: 'ExpressionEditor',\n nodes: [VariableNode],\n onError: console.error,\n editable: resolveEditable(disabled, readonly),\n theme: { paragraph: cls.e('paragraph') }\n })\n\n watchEffect(() => {\n editor.setEditable(resolveEditable(disabled, readonly))\n })\n\n watchEffect(() => {\n container.value && editor.setRootElement(container.value)\n })\n\n const variableMap = computed(() => createVariableMap(props.variables))\n const sync = createModelSync({ editor, props, emit, variableMap })\n\n return {\n editor,\n mutations: createDefaultMutationGateway(editor),\n syncFromModelValue: sync.syncFromModelValue\n }\n}\n"],"mappings":";;;;;;AAmBA,SAAS,6BACP,QACuB;AACvB,QAAO,EACL,UAAU,SAAS;AACjB,SAAO,aAAa;AAClB,YAAS;IACT;IAEL;;AAGH,SAAS,gBAAgB,UAAwB,UAAwB;AACvE,QAAO,CAAC,SAAS,SAAS,CAAC,SAAS;;AAGtC,SAAgB,8BACd,SACyB;CACzB,MAAM,EAAE,UAAU,UAAU,WAAW,OAAO,MAAM,QAAQ;CAC5D,MAAM,SAAS,aAAa;EAC1B,WAAW;EACX,OAAO,CAAC,aAAa;EACrB,SAAS,QAAQ;EACjB,UAAU,gBAAgB,UAAU,SAAS;EAC7C,OAAO,EAAE,WAAW,IAAI,EAAE,YAAY,EAAE;EACzC,CAAC;AAEF,mBAAkB;AAChB,SAAO,YAAY,gBAAgB,UAAU,SAAS,CAAC;GACvD;AAEF,mBAAkB;AAChB,YAAU,SAAS,OAAO,eAAe,UAAU,MAAM;GACzD;CAGF,MAAM,OAAO,gBAAgB;EAAE;EAAQ;EAAO;EAAM,aADhC,eAAe,kBAAkB,MAAM,UAAU,CACN;EAAE,CAAC;AAElE,QAAO;EACL;EACA,WAAW,6BAA6B,OAAO;EAC/C,oBAAoB,KAAK;EAC1B"}
@@ -1,49 +0,0 @@
1
- import { parseContent } from "../../parser.js";
2
- import { nextTick, watchEffect } from "vue";
3
- import { $createParagraphNode, $getRoot, SKIP_DOM_SELECTION_TAG } from "lexical";
4
- //#region src/components/expression-editor/internal/editor-runtime/model-sync.ts
5
- function createModelSync(options) {
6
- const { editor, props, emit, variableMap } = options;
7
- let changeByUser = false;
8
- let changeByModel = false;
9
- let lastEmittedValue = null;
10
- function syncFromModelValue() {
11
- changeByModel = true;
12
- const { modelValue } = props;
13
- if (!modelValue) return;
14
- editor.update(() => {
15
- const root = $getRoot();
16
- root.clear();
17
- const paragraph = $createParagraphNode();
18
- const nodes = parseContent(modelValue, variableMap.value);
19
- paragraph.append(...nodes);
20
- root.append(paragraph);
21
- }, { tag: SKIP_DOM_SELECTION_TAG });
22
- nextTick(() => {
23
- changeByModel = false;
24
- });
25
- }
26
- editor.registerTextContentListener((text) => {
27
- if (changeByModel) return;
28
- emit("update:modelValue", text);
29
- lastEmittedValue = text;
30
- changeByUser = true;
31
- nextTick(() => {
32
- if (lastEmittedValue === props.modelValue) changeByUser = false;
33
- else setTimeout(() => {
34
- changeByUser = false;
35
- }, 0);
36
- });
37
- });
38
- watchEffect(() => {
39
- if (changeByUser) return;
40
- const current = editor.getEditorState().read(() => $getRoot().getTextContent());
41
- if (props.modelValue === current) return;
42
- syncFromModelValue();
43
- });
44
- return { syncFromModelValue };
45
- }
46
- //#endregion
47
- export { createModelSync };
48
-
49
- //# sourceMappingURL=model-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-sync.js","names":[],"sources":["../../../../../src/components/expression-editor/internal/editor-runtime/model-sync.ts"],"sourcesContent":["import { $createParagraphNode, $getRoot, SKIP_DOM_SELECTION_TAG, type LexicalEditor } from 'lexical'\nimport { nextTick, watchEffect, type ComputedRef } from 'vue'\n\nimport type { ExpressionEditorEmits, ExpressionEditorProps, VariableItem } from '../../../../types'\nimport { parseContent } from '../../parser'\n\ninterface CreateModelSyncOptions {\n editor: LexicalEditor\n props: ExpressionEditorProps\n emit: ExpressionEditorEmits\n variableMap: ComputedRef<Map<string, VariableItem>>\n}\n\nexport function createModelSync(options: CreateModelSyncOptions) {\n const { editor, props, emit, variableMap } = options\n\n let changeByUser = false\n let changeByModel = false\n let lastEmittedValue: string | null = null\n\n function syncFromModelValue() {\n changeByModel = true\n const { modelValue } = props\n if (!modelValue) return\n\n editor.update(\n () => {\n const root = $getRoot()\n root.clear()\n const paragraph = $createParagraphNode()\n const nodes = parseContent(modelValue, variableMap.value)\n paragraph.append(...nodes)\n root.append(paragraph)\n },\n { tag: SKIP_DOM_SELECTION_TAG }\n )\n\n nextTick(() => {\n changeByModel = false\n })\n }\n\n editor.registerTextContentListener((text) => {\n if (changeByModel) return\n\n emit('update:modelValue', text)\n lastEmittedValue = text\n changeByUser = true\n nextTick(() => {\n if (lastEmittedValue === props.modelValue) {\n changeByUser = false\n } else {\n setTimeout(() => {\n changeByUser = false\n }, 0)\n }\n })\n })\n\n watchEffect(() => {\n if (changeByUser) return\n const current = editor.getEditorState().read(() => $getRoot().getTextContent())\n if (props.modelValue === current) return\n syncFromModelValue()\n })\n\n return { syncFromModelValue }\n}\n"],"mappings":";;;;AAaA,SAAgB,gBAAgB,SAAiC;CAC/D,MAAM,EAAE,QAAQ,OAAO,MAAM,gBAAgB;CAE7C,IAAI,eAAe;CACnB,IAAI,gBAAgB;CACpB,IAAI,mBAAkC;CAEtC,SAAS,qBAAqB;AAC5B,kBAAgB;EAChB,MAAM,EAAE,eAAe;AACvB,MAAI,CAAC,WAAY;AAEjB,SAAO,aACC;GACJ,MAAM,OAAO,UAAU;AACvB,QAAK,OAAO;GACZ,MAAM,YAAY,sBAAsB;GACxC,MAAM,QAAQ,aAAa,YAAY,YAAY,MAAM;AACzD,aAAU,OAAO,GAAG,MAAM;AAC1B,QAAK,OAAO,UAAU;KAExB,EAAE,KAAK,wBAAwB,CAChC;AAED,iBAAe;AACb,mBAAgB;IAChB;;AAGJ,QAAO,6BAA6B,SAAS;AAC3C,MAAI,cAAe;AAEnB,OAAK,qBAAqB,KAAK;AAC/B,qBAAmB;AACnB,iBAAe;AACf,iBAAe;AACb,OAAI,qBAAqB,MAAM,WAC7B,gBAAe;OAEf,kBAAiB;AACf,mBAAe;MACd,EAAE;IAEP;GACF;AAEF,mBAAkB;AAChB,MAAI,aAAc;EAClB,MAAM,UAAU,OAAO,gBAAgB,CAAC,WAAW,UAAU,CAAC,gBAAgB,CAAC;AAC/E,MAAI,MAAM,eAAe,QAAS;AAClC,sBAAoB;GACpB;AAEF,QAAO,EAAE,oBAAoB"}