@robot-admin/naive-ui-components 0.13.9 → 0.14.1

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 (160) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +42 -1
  3. package/README_EN.md +42 -1
  4. package/dist/C_ActionBar.css +11 -10
  5. package/dist/C_AntV.css +247 -246
  6. package/dist/C_AudioPlayer.css +11 -10
  7. package/dist/C_AvatarGroup.css +7 -5
  8. package/dist/C_Barcode.css +3 -1
  9. package/dist/C_Breadcrumb.css +17 -16
  10. package/dist/C_Captcha.css +14 -13
  11. package/dist/C_Cascade.css +7 -5
  12. package/dist/C_Chat.css +9 -8
  13. package/dist/C_City.css +2 -1
  14. package/dist/C_Code.css +15 -14
  15. package/dist/C_CollapsePanel.css +12 -11
  16. package/dist/C_ContextMenu.css +29 -29
  17. package/dist/C_Cron.cjs +1 -1
  18. package/dist/C_Cron.css +475 -253
  19. package/dist/C_Cron.d.cts +2 -2
  20. package/dist/C_Cron.d.ts +2 -2
  21. package/dist/C_Cron.js +1 -1
  22. package/dist/C_Cron2.cjs +1 -1
  23. package/dist/C_Cron2.js +1 -1
  24. package/dist/C_Date.css +2 -1
  25. package/dist/C_Draggable.css +12 -10
  26. package/dist/C_Editor.css +2 -1
  27. package/dist/C_FilePreview.css +216 -214
  28. package/dist/C_Form.base.css +207 -205
  29. package/dist/C_Form.css +206 -205
  30. package/dist/C_FormModal.css +13 -11
  31. package/dist/C_FormSearch.css +2 -1
  32. package/dist/C_FormulaEditor.cjs +1 -1
  33. package/dist/C_FormulaEditor.css +428 -271
  34. package/dist/C_FormulaEditor.d.cts +2 -2
  35. package/dist/C_FormulaEditor.d.ts +2 -2
  36. package/dist/C_FormulaEditor.js +1 -1
  37. package/dist/C_FullCalendar.css +12 -11
  38. package/dist/C_GlobalSearch.css +13 -11
  39. package/dist/C_Guide.css +8 -8
  40. package/dist/C_Icon.css +9 -7
  41. package/dist/C_ImageCropper.css +69 -67
  42. package/dist/C_Language.css +8 -8
  43. package/dist/C_Loading.css +10 -8
  44. package/dist/C_Login.css +20 -21
  45. package/dist/C_Map.css +24 -22
  46. package/dist/C_Markdown.css +8 -6
  47. package/dist/C_Menu.css +2 -1
  48. package/dist/C_NotificationCenter.css +272 -270
  49. package/dist/C_OrgChart.css +6 -5
  50. package/dist/C_PageLoading.css +8 -6
  51. package/dist/C_Progress.css +1 -1
  52. package/dist/C_QRCode.css +7 -5
  53. package/dist/C_Signature.css +7 -5
  54. package/dist/C_Skeleton.css +8 -6
  55. package/dist/C_SplitPane.css +2 -1
  56. package/dist/C_Steps.css +7 -5
  57. package/dist/C_Table.base.css +409 -410
  58. package/dist/C_Table.css +367 -369
  59. package/dist/C_Tabs.css +78 -1
  60. package/dist/C_TagsView.css +8 -8
  61. package/dist/C_Theme.css +9 -7
  62. package/dist/C_Time.css +3 -1
  63. package/dist/C_Timeline.css +9 -8
  64. package/dist/C_Transfer.css +10 -9
  65. package/dist/C_Tree.css +18 -16
  66. package/dist/C_Upload.css +152 -150
  67. package/dist/C_VideoPlayer.css +223 -221
  68. package/dist/C_VtableGantt.css +2 -1
  69. package/dist/C_WaterFall.css +19 -17
  70. package/dist/C_WorkFlow.css +1047 -1047
  71. package/dist/constants.d.cts +15 -20
  72. package/dist/constants.d.ts +15 -20
  73. package/dist/constants2.d.cts +44 -19
  74. package/dist/constants2.d.ts +44 -19
  75. package/dist/constants4.d.cts +5 -5
  76. package/dist/constants4.d.ts +5 -5
  77. package/dist/constants5.d.cts +2 -2
  78. package/dist/constants5.d.ts +2 -2
  79. package/dist/data.d.cts +6 -6
  80. package/dist/data.d.ts +6 -6
  81. package/dist/index.cjs +1 -1
  82. package/dist/index.d.cts +3 -3
  83. package/dist/index.d.ts +3 -3
  84. package/dist/index.js +1 -1
  85. package/dist/index.vue.d.cts +1 -1
  86. package/dist/index.vue.d.ts +1 -1
  87. package/dist/index10.vue.d.cts +6 -6
  88. package/dist/index10.vue.d.ts +3 -3
  89. package/dist/index11.vue.d.cts +3 -3
  90. package/dist/index11.vue.d.ts +5 -5
  91. package/dist/index12.vue.d.cts +5 -5
  92. package/dist/index12.vue.d.ts +2 -2
  93. package/dist/index13.vue.d.cts +2 -2
  94. package/dist/index13.vue.d.ts +5 -5
  95. package/dist/index14.vue.d.cts +5 -5
  96. package/dist/index14.vue.d.ts +5 -5
  97. package/dist/index15.vue.d.cts +5 -5
  98. package/dist/index15.vue.d.ts +1 -1
  99. package/dist/index16.vue.d.cts +1 -1
  100. package/dist/index17.vue.d.ts +1 -1
  101. package/dist/index18.vue.d.cts +1 -1
  102. package/dist/index18.vue.d.ts +4 -4
  103. package/dist/index19.vue.d.cts +4 -4
  104. package/dist/index19.vue.d.ts +3 -3
  105. package/dist/index2.vue.d.cts +2 -2
  106. package/dist/index2.vue.d.ts +2 -2
  107. package/dist/index21.vue.d.cts +2 -2
  108. package/dist/index21.vue.d.ts +2 -2
  109. package/dist/index22.vue.d.cts +2 -2
  110. package/dist/index22.vue.d.ts +2 -2
  111. package/dist/index23.vue.d.cts +2 -2
  112. package/dist/index23.vue.d.ts +2 -2
  113. package/dist/index25.vue.d.cts +4 -4
  114. package/dist/index25.vue.d.ts +4 -4
  115. package/dist/index27.vue.d.cts +3 -3
  116. package/dist/index27.vue.d.ts +3 -3
  117. package/dist/index28.vue.d.cts +3 -3
  118. package/dist/index28.vue.d.ts +3 -3
  119. package/dist/index3.vue.d.cts +3 -3
  120. package/dist/index3.vue.d.ts +3 -3
  121. package/dist/index4.vue.d.cts +3 -3
  122. package/dist/index6.vue.d.ts +2 -2
  123. package/dist/index7.vue.d.cts +2 -2
  124. package/dist/index8.vue.d.ts +3 -3
  125. package/dist/index9.vue.d.cts +3 -3
  126. package/dist/index9.vue.d.ts +6 -6
  127. package/dist/mapUtils.d.cts +4 -4
  128. package/dist/mapUtils.d.ts +4 -4
  129. package/dist/presets.d.cts +1 -1
  130. package/dist/presets.d.ts +1 -1
  131. package/dist/style.css +9875 -9705
  132. package/dist/useCalendarEvents.d.cts +1 -1
  133. package/dist/useCalendarEvents.d.ts +1 -1
  134. package/dist/useCollapsePanel.d.cts +2 -2
  135. package/dist/useCollapsePanel.d.ts +2 -2
  136. package/dist/useCropperCore.d.cts +10 -10
  137. package/dist/useCropperCore.d.ts +10 -10
  138. package/dist/useDraggableLayout.d.cts +6 -6
  139. package/dist/useDraggableLayout.d.ts +6 -6
  140. package/dist/useEdgeInteraction.d.cts +3 -3
  141. package/dist/useEdgeInteraction.d.ts +3 -3
  142. package/dist/useFormulaEvaluator.cjs +2 -0
  143. package/dist/useFormulaEvaluator.js +2 -0
  144. package/dist/useSearchState.d.cts +13 -13
  145. package/dist/useSearchState.d.ts +13 -13
  146. package/dist/useSignatureHistory.d.cts +5 -5
  147. package/dist/useSignatureHistory.d.ts +5 -5
  148. package/dist/useSplitResize.d.cts +3 -3
  149. package/dist/useSplitResize.d.ts +3 -3
  150. package/dist/useTableQuery.d.cts +1 -1
  151. package/dist/useTableQuery.d.ts +1 -1
  152. package/dist/useTimeSelection.d.cts +2 -2
  153. package/dist/useTimeSelection.d.ts +2 -2
  154. package/dist/useTreeOperations.d.cts +6 -6
  155. package/dist/useTreeOperations.d.ts +6 -6
  156. package/dist/useWorkflowValidation.d.cts +3 -3
  157. package/dist/useWorkflowValidation.d.ts +3 -3
  158. package/package.json +1 -1
  159. package/dist/C_FormulaEditor2.cjs +0 -2
  160. package/dist/C_FormulaEditor2.js +0 -2
@@ -66,8 +66,8 @@ declare const __VLS_export: vue.DefineComponent<CalendarProps, CalendarExpose, {
66
66
  }) => any) | undefined;
67
67
  "onEvent-dropped"?: ((event: Partial<CalendarEvent>) => any) | undefined;
68
68
  }>, {
69
- editable: boolean;
70
69
  initialView: CalendarViewType;
70
+ editable: boolean;
71
71
  events: CalendarEvent[];
72
72
  showAddDialog: boolean;
73
73
  showEditDialog: boolean;
@@ -66,8 +66,8 @@ declare const __VLS_export: vue.DefineComponent<CalendarProps, CalendarExpose, {
66
66
  }) => any) | undefined;
67
67
  "onEvent-dropped"?: ((event: Partial<CalendarEvent>) => any) | undefined;
68
68
  }>, {
69
- editable: boolean;
70
69
  initialView: CalendarViewType;
70
+ editable: boolean;
71
71
  events: CalendarEvent[];
72
72
  showAddDialog: boolean;
73
73
  showEditDialog: boolean;
@@ -71,13 +71,13 @@ declare var __VLS_7: `header-${string}`, __VLS_8: {
71
71
  type __VLS_Slots = {} & { [K in NonNullable<typeof __VLS_7>]?: (props: typeof __VLS_8) => any } & { [K in NonNullable<typeof __VLS_16>]?: (props: typeof __VLS_17) => any } & { [K in NonNullable<typeof __VLS_31>]?: (props: typeof __VLS_32) => any };
72
72
  declare const __VLS_base: vue.DefineComponent<Props, CollapsePanelExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
73
73
  change: (activeKeys: string[]) => any;
74
- collapse: (key: string) => any;
75
74
  expand: (key: string) => any;
75
+ collapse: (key: string) => any;
76
76
  "update:activeKeys": (keys: string[]) => any;
77
77
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
78
78
  onChange?: ((activeKeys: string[]) => any) | undefined;
79
- onCollapse?: ((key: string) => any) | undefined;
80
79
  onExpand?: ((key: string) => any) | undefined;
80
+ onCollapse?: ((key: string) => any) | undefined;
81
81
  "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
82
82
  }>, {
83
83
  bordered: boolean;
@@ -71,13 +71,13 @@ declare var __VLS_7: `header-${string}`, __VLS_8: {
71
71
  type __VLS_Slots = {} & { [K in NonNullable<typeof __VLS_7>]?: (props: typeof __VLS_8) => any } & { [K in NonNullable<typeof __VLS_16>]?: (props: typeof __VLS_17) => any } & { [K in NonNullable<typeof __VLS_31>]?: (props: typeof __VLS_32) => any };
72
72
  declare const __VLS_base: vue.DefineComponent<Props, CollapsePanelExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
73
73
  change: (activeKeys: string[]) => any;
74
- collapse: (key: string) => any;
75
74
  expand: (key: string) => any;
75
+ collapse: (key: string) => any;
76
76
  "update:activeKeys": (keys: string[]) => any;
77
77
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
78
78
  onChange?: ((activeKeys: string[]) => any) | undefined;
79
- onCollapse?: ((key: string) => any) | undefined;
80
79
  onExpand?: ((key: string) => any) | undefined;
80
+ onCollapse?: ((key: string) => any) | undefined;
81
81
  "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
82
82
  }>, {
83
83
  bordered: boolean;
@@ -51,30 +51,30 @@ interface ImageCropperEmits {
51
51
  //#endregion
52
52
  //#region src/components/C_ImageCropper/index.vue.d.ts
53
53
  declare const __VLS_export: vue.DefineComponent<ImageCropperProps, ImageCropperExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
54
- ready: () => any;
55
54
  error: (error: Error) => any;
56
- crop: (result: CropResult) => any;
57
- confirm: (result: CropResult) => any;
55
+ ready: () => any;
58
56
  cancel: () => any;
57
+ confirm: (result: CropResult) => any;
58
+ crop: (result: CropResult) => any;
59
59
  }, string, vue.PublicProps, Readonly<ImageCropperProps> & Readonly<{
60
- onReady?: (() => any) | undefined;
61
60
  onError?: ((error: Error) => any) | undefined;
62
- onCrop?: ((result: CropResult) => any) | undefined;
63
- onConfirm?: ((result: CropResult) => any) | undefined;
61
+ onReady?: (() => any) | undefined;
64
62
  onCancel?: (() => any) | undefined;
63
+ onConfirm?: ((result: CropResult) => any) | undefined;
64
+ onCrop?: ((result: CropResult) => any) | undefined;
65
65
  }>, {
66
+ aspectRatio: number;
66
67
  height: string | number;
67
- showToolbar: boolean;
68
- disabled: boolean;
69
68
  src: string;
70
- aspectRatio: number;
69
+ disabled: boolean;
70
+ modal: boolean;
71
+ showToolbar: boolean;
71
72
  outputFormat: CropOutputFormat;
72
73
  outputQuality: number;
73
74
  maxOutputWidth: number;
74
75
  maxOutputHeight: number;
75
76
  showPreview: boolean;
76
77
  circular: boolean;
77
- modal: boolean;
78
78
  modalTitle: string;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
@@ -51,30 +51,30 @@ interface ImageCropperEmits {
51
51
  //#endregion
52
52
  //#region src/components/C_ImageCropper/index.vue.d.ts
53
53
  declare const __VLS_export: vue.DefineComponent<ImageCropperProps, ImageCropperExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
54
- ready: () => any;
55
54
  error: (error: Error) => any;
56
- crop: (result: CropResult) => any;
57
- confirm: (result: CropResult) => any;
55
+ ready: () => any;
58
56
  cancel: () => any;
57
+ confirm: (result: CropResult) => any;
58
+ crop: (result: CropResult) => any;
59
59
  }, string, vue.PublicProps, Readonly<ImageCropperProps> & Readonly<{
60
- onReady?: (() => any) | undefined;
61
60
  onError?: ((error: Error) => any) | undefined;
62
- onCrop?: ((result: CropResult) => any) | undefined;
63
- onConfirm?: ((result: CropResult) => any) | undefined;
61
+ onReady?: (() => any) | undefined;
64
62
  onCancel?: (() => any) | undefined;
63
+ onConfirm?: ((result: CropResult) => any) | undefined;
64
+ onCrop?: ((result: CropResult) => any) | undefined;
65
65
  }>, {
66
+ aspectRatio: number;
66
67
  height: string | number;
67
- showToolbar: boolean;
68
- disabled: boolean;
69
68
  src: string;
70
- aspectRatio: number;
69
+ disabled: boolean;
70
+ modal: boolean;
71
+ showToolbar: boolean;
71
72
  outputFormat: CropOutputFormat;
72
73
  outputQuality: number;
73
74
  maxOutputWidth: number;
74
75
  maxOutputHeight: number;
75
76
  showPreview: boolean;
76
77
  circular: boolean;
77
- modal: boolean;
78
78
  modalTitle: string;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
@@ -116,15 +116,17 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
116
116
  "onItem-remove"?: ((item: DraggableItem, index: number) => any) | undefined;
117
117
  "onList-change"?: ((list: DraggableItem[]) => any) | undefined;
118
118
  }>, {
119
+ emptyText: string;
119
120
  sort: boolean;
120
121
  direction: "vertical" | "horizontal";
121
- modelValue: DraggableItem[];
122
- animation: number;
123
- disabled: boolean;
124
122
  gap: string | number;
125
123
  delay: number;
126
- emptyText: string;
124
+ modelValue: DraggableItem[];
125
+ disabled: boolean;
127
126
  itemClass: string;
127
+ justifyContent: JustifyContent;
128
+ layout: LayoutMode;
129
+ animation: number;
128
130
  group: string | GroupOptions;
129
131
  handle: string;
130
132
  showHandle: boolean;
@@ -136,11 +138,9 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
136
138
  showEmptyState: boolean;
137
139
  swapThreshold: number;
138
140
  invertSwap: boolean;
139
- layout: LayoutMode;
140
141
  gridColumns: number;
141
142
  gridRows: number;
142
143
  flexWrap: boolean;
143
- justifyContent: JustifyContent;
144
144
  alignItems: AlignItems;
145
145
  customStyles: Record<string, string | number>;
146
146
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -116,15 +116,17 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
116
116
  "onItem-remove"?: ((item: DraggableItem, index: number) => any) | undefined;
117
117
  "onList-change"?: ((list: DraggableItem[]) => any) | undefined;
118
118
  }>, {
119
+ emptyText: string;
119
120
  sort: boolean;
120
121
  direction: "vertical" | "horizontal";
121
- modelValue: DraggableItem[];
122
- animation: number;
123
- disabled: boolean;
124
122
  gap: string | number;
125
123
  delay: number;
126
- emptyText: string;
124
+ modelValue: DraggableItem[];
125
+ disabled: boolean;
127
126
  itemClass: string;
127
+ justifyContent: JustifyContent;
128
+ layout: LayoutMode;
129
+ animation: number;
128
130
  group: string | GroupOptions;
129
131
  handle: string;
130
132
  showHandle: boolean;
@@ -136,11 +138,9 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
136
138
  showEmptyState: boolean;
137
139
  swapThreshold: number;
138
140
  invertSwap: boolean;
139
- layout: LayoutMode;
140
141
  gridColumns: number;
141
142
  gridRows: number;
142
143
  flexWrap: boolean;
143
- justifyContent: JustifyContent;
144
144
  alignItems: AlignItems;
145
145
  customStyles: Record<string, string | number>;
146
146
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -259,11 +259,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
259
259
  onReady?: ((graph: Graph) => any) | undefined;
260
260
  "onData-change"?: ((data: DiagramData) => any) | undefined;
261
261
  }>, {
262
- width: string | number;
262
+ theme: "light" | "dark";
263
263
  height: string | number;
264
- readonly: boolean;
264
+ width: string | number;
265
265
  showToolbar: boolean;
266
- theme: "light" | "dark";
266
+ readonly: boolean;
267
267
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
268
268
  declare const _default: typeof __VLS_export;
269
269
  //#endregion
@@ -259,11 +259,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
259
259
  onReady?: ((graph: Graph) => any) | undefined;
260
260
  "onData-change"?: ((data: DiagramData) => any) | undefined;
261
261
  }>, {
262
- width: string | number;
262
+ theme: "light" | "dark";
263
263
  height: string | number;
264
- readonly: boolean;
264
+ width: string | number;
265
265
  showToolbar: boolean;
266
- theme: "light" | "dark";
266
+ readonly: boolean;
267
267
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
268
268
  declare const _default: typeof __VLS_export;
269
269
  //#endregion
@@ -0,0 +1,2 @@
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i=[{label:`?`,value:` ? `,type:`logic`,color:`warning`},{label:`:`,value:` : `,type:`logic`,color:`warning`},{label:`and`,value:` AND `,type:`logic`,color:`warning`},{label:`or`,value:` OR `,type:`logic`,color:`warning`},{label:`(`,value:`(`,type:`paren`},{label:`)`,value:`)`,type:`paren`},{label:`,`,value:`, `,type:`paren`},{label:`==`,value:` == `,type:`compare`},{label:`>`,value:` > `,type:`compare`},{label:`<`,value:` < `,type:`compare`},{label:`≥`,value:` >= `,type:`compare`},{label:`≤`,value:` <= `,type:`compare`},{label:`≠`,value:` != `,type:`compare`},{label:`%`,value:` % `,type:`operator`}],a=[{label:`1`,value:`1`,type:`number`},{label:`2`,value:`2`,type:`number`},{label:`3`,value:`3`,type:`number`},{label:`+`,value:` + `,type:`operator`,color:`primary`},{label:`−`,value:` - `,type:`operator`,color:`primary`},{label:`4`,value:`4`,type:`number`},{label:`5`,value:`5`,type:`number`},{label:`6`,value:`6`,type:`number`},{label:`×`,value:` * `,type:`operator`,color:`primary`},{label:`÷`,value:` / `,type:`operator`,color:`primary`},{label:`7`,value:`7`,type:`number`},{label:`8`,value:`8`,type:`number`},{label:`9`,value:`9`,type:`number`},{label:`0`,value:`0`,type:`number`},{label:`.`,value:`.`,type:`number`}],o=[{label:`⌫`,value:`BACKSPACE`,type:`action`,isAction:!0},{label:`清空`,value:`CLEAR`,type:`action`,isAction:!0}],s=[{name:`IF`,signature:`IF(条件, 真值, 假值)`,description:`根据条件返回不同的值`,category:`逻辑`},{name:`AND`,signature:`AND(条件1, 条件2)`,description:`全部条件为真时返回真`,category:`逻辑`},{name:`OR`,signature:`OR(条件1, 条件2)`,description:`任一条件为真时返回真`,category:`逻辑`},{name:`NOT`,signature:`NOT(条件)`,description:`对条件取反`,category:`逻辑`},{name:`SUM`,signature:`SUM(值1, 值2, ...)`,description:`计算所有值的总和`,category:`数学`},{name:`AVG`,signature:`AVG(值1, 值2, ...)`,description:`计算所有值的平均值`,category:`数学`},{name:`MAX`,signature:`MAX(值1, 值2, ...)`,description:`返回最大值`,category:`数学`},{name:`MIN`,signature:`MIN(值1, 值2, ...)`,description:`返回最小值`,category:`数学`},{name:`ABS`,signature:`ABS(数值)`,description:`返回绝对值`,category:`数学`},{name:`ROUND`,signature:`ROUND(数值, 小数位)`,description:`四舍五入到指定小数位`,category:`数学`},{name:`CEIL`,signature:`CEIL(数值)`,description:`向上取整`,category:`数学`},{name:`FLOOR`,signature:`FLOOR(数值)`,description:`向下取整`,category:`数学`}],c=new Set([`+`,`-`,`*`,`/`,`%`,`>`,`<`,`>=`,`<=`,`==`,`!=`,`?`,`:`,`AND`,`OR`,`NOT`]),l=new Set([`+`,`-`,`*`,`/`,`%`,`>`,`<`,`>=`,`<=`,`==`,`!=`,`?`,`:`,`AND`,`OR`]),u=1e4,d=5e3,f=Object.freeze({IF:(e,t,n)=>e?t:n,AND:(...e)=>e.every(Boolean),OR:(...e)=>e.some(Boolean),NOT:e=>!e,SUM:(...e)=>e.reduce((e,t)=>e+p(t),0),AVG:(...e)=>e.length?e.reduce((e,t)=>e+p(t),0)/e.length:0,MAX:(...e)=>Math.max(...e.map(p)),MIN:(...e)=>Math.min(...e.map(p)),ABS:e=>Math.abs(p(e)),ROUND:(e,t=0)=>{let n=10**Math.min(100,Math.max(0,Math.trunc(p(t))));return Math.round(p(e)*n)/n},CEIL:e=>Math.ceil(p(e)),FLOOR:e=>Math.floor(p(e))});function p(e){let t=Number(e);if(!Number.isFinite(t))throw Error(`无法将“${String(e)}”转换为有限数值`);return t}function m(e){if(e.length>u)throw Error(`公式长度不能超过 ${u} 个字符`);let t=[],n=0,r=e=>{if(t.push(e),t.length>d)throw Error(`公式不能超过 ${d} 个词元`)};for(;n<e.length;){let t=e[n];if(/\s/.test(t)){n+=1;continue}let i=e.slice(n),a=/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/i.exec(i);if(a){r({type:`number`,value:a[0],position:n}),n+=a[0].length;continue}if(t===`[`){let t=e.indexOf(`]`,n+1);if(t===-1)throw Error(`第 ${n+1} 个字符处缺少 ]`);let i=e.slice(n+1,t).trim();if(!i)throw Error(`第 ${n+1} 个字符处的变量名不能为空`);r({type:`variable`,value:i,position:n}),n=t+1;continue}if(t===`"`||t===`'`){let i=t,a=n,o=``,s=!1;for(n+=1;n<e.length;){let t=e[n];if(t===i){s=!0,n+=1;break}if(t===`\\`){if(n+=1,n>=e.length)break;let t=e[n];o+={n:`
2
+ `,r:`\r`,t:` `}[t]??t}else o+=t;n+=1}if(!s)throw Error(`第 ${a+1} 个字符处的字符串未闭合`);r({type:`string`,value:o,position:a});continue}let o=e.slice(n,n+2);if([`>=`,`<=`,`==`,`!=`].includes(o)){r({type:`operator`,value:o,position:n}),n+=2;continue}if(`+-*/%><?:`.includes(t)){r({type:`operator`,value:t,position:n}),n+=1;continue}if(`(),`.includes(t)){r({type:`punctuation`,value:t,position:n}),n+=1;continue}let s=/^[A-Za-z_][A-Za-z0-9_]*/.exec(i);if(s){let e=s[0],t=e.toUpperCase();r({type:[`AND`,`OR`,`NOT`].includes(t)?`operator`:`identifier`,value:[`AND`,`OR`,`NOT`].includes(t)?t:e,position:n}),n+=e.length;continue}throw Error(`第 ${n+1} 个字符“${t}”不受支持`)}return t.push({type:`eof`,value:``,position:n}),t}var h=class{cursor=0;nestingDepth=0;constructor(e){this.tokens=e}parse(){let e=this.parseConditional();return this.expect(`eof`),e}current(){return this.tokens[this.cursor]}advance(){return this.tokens[this.cursor++]}consume(e){return this.current().value===e?(this.advance(),!0):!1}expect(e,t){let n=this.current();if(n.type!==e||t!==void 0&&n.value!==t)throw Error(`第 ${n.position+1} 个字符处应为 ${t??e}`);return this.advance()}parseConditional(){if(++this.nestingDepth>100)throw Error(`公式嵌套不能超过 100 层`);try{let e=this.parseOr();if(!this.consume(`?`))return e;let t=this.parseConditional();return this.expect(`operator`,`:`),{kind:`conditional`,condition:e,truthy:t,falsy:this.parseConditional()}}finally{this.nestingDepth--}}parseBinary(e,t){let n=e();for(;t.includes(this.current().value);)n={kind:`binary`,operator:this.advance().value,left:n,right:e()};return n}parseOr(){return this.parseBinary(()=>this.parseAnd(),[`OR`])}parseAnd(){return this.parseBinary(()=>this.parseEquality(),[`AND`])}parseEquality(){return this.parseBinary(()=>this.parseComparison(),[`==`,`!=`])}parseComparison(){return this.parseBinary(()=>this.parseAdditive(),[`>`,`>=`,`<`,`<=`])}parseAdditive(){return this.parseBinary(()=>this.parseMultiplicative(),[`+`,`-`])}parseMultiplicative(){return this.parseBinary(()=>this.parseUnary(),[`*`,`/`,`%`])}parseUnary(){let e=[];for(;[`-`,`+`,`NOT`].includes(this.current().value)&&!(this.current().value===`NOT`&&this.tokens[this.cursor+1]?.value===`(`);)if(e.push(this.advance().value),e.length>100)throw Error(`一元运算不能超过 100 层`);let t=this.parsePrimary();for(let n of e.reverse())t={kind:`unary`,operator:n,value:t};return t}parsePrimary(){let e=this.current();if(e.type===`number`||e.type===`string`)return this.advance(),{kind:`literal`,value:e.type===`number`?Number(e.value):e.value};if(e.type===`variable`)return this.advance(),{kind:`variable`,name:e.value};if(e.type===`identifier`||e.type===`operator`&&[`AND`,`OR`,`NOT`].includes(e.value)){this.advance();let t=e.value.toUpperCase();if(t===`TRUE`||t===`FALSE`)return{kind:`literal`,value:t===`TRUE`};if(this.consume(`(`))return this.parseFunction(t,e);if(t===`NOT`)return{kind:`unary`,operator:`NOT`,value:this.parseUnary()};if(e.type===`identifier`)return{kind:`identifier`,name:e.value}}if(this.consume(`(`)){let e=this.parseConditional();return this.expect(`punctuation`,`)`),e}throw Error(`第 ${e.position+1} 个字符处缺少有效值`)}parseFunction(e,t){if(!Object.prototype.hasOwnProperty.call(f,e))throw Error(`第 ${t.position+1} 个字符处:未知函数“${t.value}”`);let n=[];if(!this.consume(`)`)){do n.push(this.parseConditional());while(this.consume(`,`));this.expect(`punctuation`,`)`)}let[r,i]=e===`IF`?[3,3]:e===`ROUND`?[1,2]:[`AND`,`OR`,`SUM`,`AVG`,`MAX`,`MIN`].includes(e)?[1,1/0]:[1,1];if(n.length<r||n.length>i)throw Error(`第 ${t.position+1} 个字符处:${e} 需要 ${r===i?r:`${r}–${i===1/0?`多个`:i}`} 个参数`);return{kind:`call`,name:e,args:n}}};function g(e,t){if(!Object.prototype.hasOwnProperty.call(t,e)||t[e]==null)throw Error(`变量“${e}”缺少样例数据`);let n=t[e];if(![`number`,`string`,`boolean`].includes(typeof n)||typeof n==`number`&&!Number.isFinite(n))throw Error(`变量“${e}”的数据类型不受支持`);return n}function _(e,t,n){switch(e){case`==`:return t===n;case`!=`:return t!==n;case`+`:return p(t)+p(n);case`-`:return p(t)-p(n);case`*`:return p(t)*p(n);case`/`:return p(t)/p(n);case`%`:return p(t)%p(n);default:if(typeof t==`boolean`||typeof n==`boolean`)throw Error(`运算符 ${e} 不支持布尔值`);return e===`>`?t>n:e===`>=`?t>=n:e===`<`?t<n:t<=n}}function v(e,t,n,r=0){if(r>200)throw Error(`公式计算层数超过安全限制`);let i=e=>v(e,t,n,r+1);switch(e.kind){case`literal`:return e.value;case`variable`:{let r=t.get(e.name);if(!r)throw Error(`未知变量“${e.name}”`);return g(r,n)}case`identifier`:return g(e.name,n);case`conditional`:return i(e.condition)?i(e.truthy):i(e.falsy);case`unary`:{let t=i(e.value);return e.operator===`NOT`?!t:e.operator===`-`?-p(t):p(t)}case`binary`:{let t=i(e.left);return e.operator===`AND`?!!t&&!!i(e.right):e.operator===`OR`?!!t||!!i(e.right):_(e.operator,t,i(e.right))}case`call`:return e.name===`IF`?i(e.args[0])?i(e.args[1]):i(e.args[2]):e.name===`AND`?e.args.every(e=>!!i(e)):e.name===`OR`?e.args.some(e=>!!i(e)):f[e.name](...e.args.map(i))}}function y(e){let t=m(e),n=new h(t).parse();return{tokens:t,evaluate(e,t){let r=v(n,e,t);if(typeof r==`number`&&!Number.isFinite(r))throw Error(`公式计算结果必须是有限数值`);return r}}}function b(e){return m(e)}function x(e,t){let r=(0,n.computed)(()=>new Set(e.value.map(e=>e.name))),i=(0,n.computed)(()=>new Set(e.value.map(e=>e.field))),a=(0,n.computed)(()=>new Set(t.value.map(e=>e.name.toUpperCase()))),o=null;function s(e){try{let t=b(e),n=[],r=0;return t.forEach((i,a)=>{if(i.type===`eof`)return;i.position>r&&n.push({type:`space`,value:e.slice(r,i.position),start:r,end:i.position});let o=e.slice(i.position,t[a+1]?.position??e.length).trimEnd();r=i.position+o.length;let s=t[a+1],c=i.type===`variable`?`variable`:i.type===`number`?`number`:s?.value===`(`&&(i.type===`identifier`||[`AND`,`OR`,`NOT`].includes(i.value))?`function`:i.type===`operator`?`operator`:i.type===`punctuation`?i.value===`,`?`comma`:`paren`:`text`;n.push({type:c,value:c===`variable`?i.value:o,start:i.position,end:r})}),r<e.length&&n.push({type:`space`,value:e.slice(r),start:r,end:e.length}),n}catch{return e?[{type:`text`,value:e,start:0,end:e.length}]:[]}}function c(e){let t=r.value,n=i.value,c=a.value;if(o?.formula===e&&o.names===t&&o.fields===n&&o.functions===c)return o.analysis;let l={tokens:s(e),validation:{valid:!0,message:e.trim()?`语法校验通过`:`尚未输入公式`},compiled:null};if(e.trim())try{l.compiled=y(e);for(let e of l.tokens){if(e.type===`variable`&&!t.has(e.value))throw Error(`第 ${e.start+1} 个字符处:未知变量「${e.value}」`);if(e.type===`function`&&!c.has(e.value.toUpperCase()))throw Error(`第 ${e.start+1} 个字符处:未知函数「${e.value}」`);if(e.type===`text`&&/^[A-Za-z_]\w*$/.test(e.value)&&![`TRUE`,`FALSE`].includes(e.value.toUpperCase())&&!n.has(e.value))throw Error(`第 ${e.start+1} 个字符处:未知字段「${e.value}」`)}}catch(e){let t=e instanceof Error?e.message:String(e),n=/第 (\d+) 个字符/.exec(t);l.validation={valid:!1,message:t,...n?{position:Number(n[1])-1}:{}},l.compiled=null}return o={formula:e,names:t,fields:n,functions:c,analysis:l},l}function l(e){return c(e).validation}function u(e,t){let n=0,r=``;for(let i of s(e).filter(e=>e.type===`variable`))r+=e.slice(n,i.start)+(t.get(i.value)??`__unknown_${i.value}__`),n=i.end;return r+e.slice(n)}return{tokenize:s,analyze:c,validate:l,toEvalExpression:u,variableNames:r,functionNames:a}}function ee(e){let t=(0,n.computed)(()=>({variables:e.config?.variables??e.variables??[],functions:e.config?.functions??e.functions??s,sampleData:e.config?.sampleData??e.sampleData??{},disabled:e.config?.disabled??e.disabled??!1,placeholder:e.config?.placeholder??e.placeholder??`例如:[完成值] / [目标值] * 100`,height:e.config?.height??e.height??`auto`,showPreview:e.config?.showPreview??e.showPreview??!0,showKeyboard:e.config?.showKeyboard??e.showKeyboard??!0,showVariablePanel:e.config?.showVariablePanel??e.showVariablePanel??!0,editableSampleData:e.config?.editableSampleData??e.editableSampleData??!0,templates:e.config?.templates??e.templates??[]})),r=e.modelValue??``,i=(0,n.ref)(r),a=(0,n.ref)({}),o=x((0,n.computed)(()=>t.value.variables),(0,n.computed)(()=>t.value.functions)),c=(0,n.computed)(()=>o.analyze(i.value)),l=(0,n.computed)(()=>{let e=new Map(Object.entries(t.value.sampleData));for(let[t,n]of Object.entries(a.value))n===null?e.delete(t):e.set(t,n);return Object.fromEntries(e)}),u=(0,n.computed)(()=>new Map(t.value.variables.map(e=>[e.name,e.field]))),d=(0,n.computed)(()=>{let e=c.value.tokens.filter(e=>e.type===`variable`).map(e=>e.value),n=c.value.tokens.filter(e=>e.type===`text`).map(e=>e.value);return t.value.variables.filter(t=>e.includes(t.name)||n.includes(t.field)).map(e=>({...e,value:l.value[e.field]}))}),f=(0,n.computed)(()=>{if(!c.value.validation.valid)return{success:!1,result:void 0,error:c.value.validation.message};if(!c.value.compiled)return{success:!0,result:void 0};try{return{success:!0,result:c.value.compiled.evaluate(u.value,l.value)}}catch(e){return{success:!1,result:void 0,error:e instanceof Error?e.message:String(e)}}});function p(e,n){!t.value.disabled&&t.value.editableSampleData&&(a.value={...a.value,[e]:n})}function m(){i.value=r,a.value={}}return(0,n.watch)(()=>e.modelValue,e=>{e!==void 0&&e!==i.value&&(i.value=e)}),(0,n.watch)(()=>t.value.sampleData,()=>{a.value={}}),{options:t,formula:i,analysis:c,evalResult:f,usedVariables:d,updateSample:p,reset:m}}const S={class:`formula-input__header`},C=[`readonly`,`aria-invalid`,`placeholder`],w={key:0,class:`formula-input__tokens`,"aria-label":`公式结构预览`},T=(0,n.defineComponent)({name:`FormulaInput`,__name:`FormulaInput`,props:{formula:{},tokens:{},validation:{},variableNames:{},disabled:{type:Boolean,default:!1},placeholder:{default:`例如:[完成值] / [目标值] * 100`}},emits:[`update:formula`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=(0,n.ref)(),s=(0,n.ref)(i.formula),c=`formula-feedback-${(0,n.useId)()}`,l=s.value.length,u=l;(0,n.watch)(s,e=>a(`update:formula`,e),{flush:`sync`}),(0,n.watch)(()=>i.formula,e=>{e!==s.value&&(s.value=e,l=u=e.length)});function d(){o.value&&(l=o.value.selectionStart,u=o.value.selectionEnd)}function f(e,t=l,r=u){if(i.disabled)return;let a=Math.max(0,Math.min(t,s.value.length));s.value=s.value.slice(0,a)+e+s.value.slice(Math.max(a,r)),l=u=a+e.length,(0,n.nextTick)(()=>{o.value?.focus({preventScroll:!0}),o.value?.setSelectionRange(l,u)})}function p(e){f(e)}function m(){if(l!==u){f(``);return}if(l===0)return;let e=i.tokens.find(e=>e.type===`variable`&&e.end===l),t=Array.from(s.value.slice(0,l)).pop()?.length??1;f(``,e?.start??l-t,u)}function h(){f(``,0,s.value.length)}function g(){l=u=s.value.length,o.value?.setSelectionRange(l,u)}function _(){o.value?.focus({preventScroll:!0}),g()}function v(){let e=i.validation.position??0;o.value?.focus({preventScroll:!0}),o.value?.setSelectionRange(e,Math.min(e+1,s.value.length)),d()}return t({insertAtCursor:p,backspace:m,focus:_,moveCursorToEnd:g}),(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`formula-input`,{"formula-input--disabled":e.disabled,"formula-input--error":!e.validation.valid&&e.formula.trim()}])},[(0,n.createElementVNode)(`div`,S,[r[1]||=(0,n.createElementVNode)(`span`,{class:`formula-input__label`},`01 / 编辑公式`,-1),e.formula.trim()&&!e.disabled?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,type:`button`,class:`formula-input__clear`,onClick:h},`清空公式`)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.withDirectives)((0,n.createElementVNode)(`textarea`,{ref_key:`editorRef`,ref:o,"onUpdate:modelValue":r[0]||=e=>s.value=e,class:`formula-input__editor`,readonly:e.disabled,"aria-label":`公式输入`,"aria-invalid":!e.validation.valid&&!!e.formula.trim(),"aria-describedby":c,placeholder:e.placeholder,spellcheck:`false`,onSelect:d,onClick:d,onKeyup:d,onBlur:d},null,40,C),[[n.vModelText,s.value]]),e.tokens.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,w,[r[2]||=(0,n.createElementVNode)(`span`,{class:`formula-input__tokens-label`},`结构预览`,-1),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.tokens,(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:t,class:(0,n.normalizeClass)(`formula-token formula-token--${e.type}`)},(0,n.toDisplayString)(e.type===`variable`?`[${e.value}]`:e.value),3))),128))])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,{id:c,class:`formula-input__validation`,role:`status`},[(0,n.createElementVNode)(`span`,{class:(0,n.normalizeClass)(e.formula.trim()?e.validation.valid?`formula-input__validation-success`:`formula-input__validation-error`:`formula-input__validation-hint`)},(0,n.toDisplayString)(e.formula.trim()?e.validation.valid?`语法校验通过,可在右侧调整数据试算。`:e.validation.message:`点击左侧变量开始,也可以直接输入 [变量名]。`),3),e.validation.position===void 0?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,type:`button`,class:`formula-input__locate`,onClick:v},`定位错误`))])],2))}});var E=t.t(T,[[`__scopeId`,`data-v-6bf933c2`]]);const D={class:`variable-panel`},O={class:`variable-panel__tabs`},k=[`aria-pressed`],A=[`aria-pressed`],j={class:`variable-panel__search`},M=[`aria-expanded`,`onClick`],N={class:`variable-panel__items`},P=[`disabled`,`onClick`],F={key:0},I=[`disabled`,`onClick`],L={class:`variable-panel__func-name`},R={class:`variable-panel__func-desc`},z={class:`variable-panel__func-sig`},B=(0,n.defineComponent)({__name:`VariablePanel`,props:{variables:{},functions:{},disabled:{type:Boolean}},emits:[`select-variable`,`select-function`],setup(t){let i=t,a=(0,n.ref)(`variable`),o=(0,n.ref)(``),s=(0,n.ref)(new Set),c=(0,n.computed)(()=>{let e=o.value.toLowerCase(),t=e?i.variables.filter(t=>t.name.toLowerCase().includes(e)||t.field.toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)):i.variables,n=new Map;for(let e of t){let t=e.group??`其他`,r=n.get(t);r?r.push(e):n.set(t,[e])}return Array.from(n,([e,t])=>({name:e,items:t}))});(0,n.watch)(c,e=>{for(let t of e)s.value.add(t.name)},{immediate:!0});function l(e){s.value.has(e)?s.value.delete(e):s.value.add(e)}let u=(0,n.computed)(()=>{let e=o.value.toLowerCase();return e?i.functions.filter(t=>t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)):i.functions});function d(e){switch(e){case`number`:return`mdi:numeric`;case`text`:return`mdi:format-text`;case`boolean`:return`mdi:toggle-switch-outline`;default:return`mdi:variable`}}return(i,f)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,D,[(0,n.createCommentVNode)(` 切换 Tab:变量 / 函数 `),(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`button`,{type:`button`,class:(0,n.normalizeClass)([`variable-panel__tab`,{"variable-panel__tab--active":a.value===`variable`}]),"aria-pressed":a.value===`variable`,onClick:f[0]||=e=>a.value=`variable`},` 可用变量 `,10,k),(0,n.createElementVNode)(`button`,{type:`button`,class:(0,n.normalizeClass)([`variable-panel__tab`,{"variable-panel__tab--active":a.value===`function`}]),"aria-pressed":a.value===`function`,onClick:f[1]||=e=>a.value=`function`},` 常用函数 `,10,A)]),(0,n.createCommentVNode)(` 搜索框 `),(0,n.createElementVNode)(`div`,j,[(0,n.createVNode)((0,n.unref)(r.NInput),{value:o.value,"onUpdate:value":f[2]||=e=>o.value=e,size:`small`,placeholder:`搜索变量或函数`,"input-props":{"aria-label":`搜索变量或函数`},clearable:``},{prefix:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),(0,n.createCommentVNode)(` 变量列表 `),a.value===`variable`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NScrollbar),{key:0,class:`variable-panel__list`},{default:(0,n.withCtx)(()=>[c.value.length>0?((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,{key:0},(0,n.renderList)(c.value,r=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:r.name,class:`variable-panel__group`},[(0,n.createElementVNode)(`button`,{type:`button`,class:`variable-panel__group-title`,"aria-expanded":s.value.has(r.name),onClick:e=>l(r.name)},[(0,n.createVNode)(e.t,{name:s.value.has(r.name)?`mdi:chevron-down`:`mdi:chevron-right`,size:16},null,8,[`name`]),(0,n.createTextVNode)(` `+(0,n.toDisplayString)(r.name),1)],8,M),(0,n.withDirectives)((0,n.createElementVNode)(`div`,N,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(r.items,r=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:r.field,type:`button`,class:`variable-panel__item`,disabled:t.disabled,onClick:e=>i.$emit(`select-variable`,r)},[(0,n.createVNode)(e.t,{name:d(r.type),size:15,class:`variable-panel__item-icon`},null,8,[`name`]),(0,n.createElementVNode)(`span`,null,[(0,n.createTextVNode)((0,n.toDisplayString)(r.name),1),r.description?((0,n.openBlock)(),(0,n.createElementBlock)(`small`,F,(0,n.toDisplayString)(r.description),1)):(0,n.createCommentVNode)(`v-if`,!0)])],8,P))),128))],512),[[n.vShow,s.value.has(r.name)]])]))),128)):((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NEmpty),{key:1,size:`small`,description:`无匹配变量`}))]),_:1})):((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:1},[(0,n.createCommentVNode)(` 函数列表 `),(0,n.createVNode)((0,n.unref)(r.NScrollbar),{class:`variable-panel__list`},{default:(0,n.withCtx)(()=>[u.value.length>0?((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,{key:0},(0,n.renderList)(u.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.name,type:`button`,class:`variable-panel__func`,disabled:t.disabled,onClick:t=>i.$emit(`select-function`,e)},[(0,n.createElementVNode)(`div`,L,[f[3]||=(0,n.createElementVNode)(`span`,{class:`variable-panel__func-badge`},`ƒ`,-1),(0,n.createTextVNode)(` `+(0,n.toDisplayString)(e.name),1)]),(0,n.createElementVNode)(`div`,R,(0,n.toDisplayString)(e.description),1),(0,n.createElementVNode)(`div`,z,(0,n.toDisplayString)(e.signature),1)],8,I))),128)):((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NEmpty),{key:1,size:`small`,description:`无匹配函数`}))]),_:1})],2112))]))}});var V=t.t(B,[[`__scopeId`,`data-v-2d73fec7`]]);const H={class:`vk`},U={class:`vk__body`},W={class:`vk__half vk__half--ops`},G=[`disabled`,`onClick`],te={class:`vk__half vk__half--nums`},K=[`disabled`,`onClick`],q={class:`vk__actions`},J=[`disabled`,`onClick`],Y=(0,n.defineComponent)({__name:`VirtualKeyboard`,props:{disabled:{type:Boolean,default:!1}},emits:[`key-press`,`action`],setup(e){let t=i,r=a,s=o;return(i,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,H,[(0,n.createCommentVNode)(` ═══════ 标题行 ═══════ `),a[0]||=(0,n.createElementVNode)(`div`,{class:`vk__title`},`计算公式`,-1),(0,n.createCommentVNode)(` ═══════ 键盘主体:运算符 | 数字 ═══════ `),(0,n.createElementVNode)(`div`,U,[(0,n.createCommentVNode)(` 运算符区 5 列 `),(0,n.createElementVNode)(`div`,W,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)((0,n.unref)(t),t=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:t.value,class:(0,n.normalizeClass)([`vk__key`,[t.color?`vk__key--${t.color}`:``]]),disabled:e.disabled,onClick:e=>i.$emit(`key-press`,t)},(0,n.toDisplayString)(t.label),11,G))),128))]),(0,n.createCommentVNode)(` 数字区 5 列 `),(0,n.createElementVNode)(`div`,te,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)((0,n.unref)(r),t=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:t.label+t.value,class:(0,n.normalizeClass)([`vk__key`,[t.color?`vk__key--${t.color}`:``]]),disabled:e.disabled,onClick:e=>i.$emit(`key-press`,t)},(0,n.toDisplayString)(t.label),11,K))),128))])]),(0,n.createCommentVNode)(` ═══════ 动作行:⌫ + 清空 ═══════ `),(0,n.createElementVNode)(`div`,q,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)((0,n.unref)(s),t=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:t.value,class:`vk__key vk__key--action`,disabled:e.disabled,onClick:e=>i.$emit(`action`,t.value)},(0,n.toDisplayString)(t.label),9,J))),128))])]))}});var X=t.t(Y,[[`__scopeId`,`data-v-8c874c05`]]);const Z={class:`formula-preview`,"aria-label":`公式试算`},Q={class:`formula-preview__result-label`},ne={key:0,class:`formula-preview__result-value`},re={key:1,class:`formula-preview__result-empty`},ie={class:`formula-preview__vars`},ae={class:`formula-preview__vars-title`},oe={class:`formula-preview__var-heading`},se=[`for`],ce={key:3,class:`formula-preview__var-value`},le={key:4},ue={key:0,class:`formula-preview__empty`},de=(0,n.defineComponent)({name:`FormulaPreview`,__name:`FormulaPreview`,props:{formula:{},evalResult:{},usedVariables:{},editable:{type:Boolean}},emits:[`update-value`],setup(e,{emit:t}){let i=t,a=`formula-sample-${(0,n.useId)()}`;function o(e){return typeof e==`number`?new Intl.NumberFormat(void 0,{maximumFractionDigits:6}).format(e):typeof e==`boolean`?e?`真 · true`:`假 · false`:String(e)}return(t,s)=>((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,Z,[s[1]||=(0,n.createElementVNode)(`header`,null,[(0,n.createElementVNode)(`span`,{class:`formula-preview__step`},`02`),(0,n.createElementVNode)(`div`,null,[(0,n.createElementVNode)(`h3`,null,`验证计算结果`),(0,n.createElementVNode)(`p`,null,`调整试算值,观察规则是否符合预期。`)])],-1),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`formula-preview__result`,{"formula-preview__result--error":!!e.evalResult.error}]),role:`status`,"aria-live":`polite`},[(0,n.createElementVNode)(`span`,Q,(0,n.toDisplayString)(e.evalResult.error?`暂时无法计算`:`试算结果`),1),e.evalResult.success&&e.evalResult.result!==void 0?((0,n.openBlock)(),(0,n.createElementBlock)(`output`,ne,(0,n.toDisplayString)(o(e.evalResult.result)),1)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,re,(0,n.toDisplayString)(e.formula.trim()?e.evalResult.error||`等待数据`:`输入公式后展示结果`),1))],2),(0,n.createElementVNode)(`div`,ie,[(0,n.createElementVNode)(`div`,ae,[s[0]||=(0,n.createTextVNode)(`本次使用的试算值 `,-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.usedVariables.length)+` 项`,1)]),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.usedVariables,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:t.field,class:`formula-preview__var-row`},[(0,n.createElementVNode)(`div`,oe,[(0,n.createElementVNode)(`label`,{for:`${a}-${t.field}`},(0,n.toDisplayString)(t.name),9,se),(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(t.field),1)]),e.editable&&t.type===`number`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NInputNumber),{key:0,value:typeof t.value==`number`?t.value:null,"input-props":{id:`${a}-${t.field}`,"aria-label":`试算值:${t.name}`},placeholder:`请输入数值`,"onUpdate:value":e=>i(`update-value`,t.field,e)},null,8,[`value`,`input-props`,`onUpdate:value`])):e.editable&&t.type===`boolean`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NSwitch),{key:1,value:t.value===!0,"aria-label":`试算值:${t.name}`,"onUpdate:value":e=>i(`update-value`,t.field,e)},null,8,[`value`,`aria-label`,`onUpdate:value`])):e.editable&&t.type===`text`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NInput),{key:2,value:typeof t.value==`string`?t.value:``,"input-props":{id:`${a}-${t.field}`,"aria-label":`试算值:${t.name}`},"onUpdate:value":e=>i(`update-value`,t.field,e)},null,8,[`value`,`input-props`,`onUpdate:value`])):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ce,(0,n.toDisplayString)(t.value??`未提供`),1)),t.description?((0,n.openBlock)(),(0,n.createElementBlock)(`p`,le,(0,n.toDisplayString)(t.description),1)):(0,n.createCommentVNode)(`v-if`,!0)]))),128)),e.usedVariables.length?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`p`,ue,(0,n.toDisplayString)(e.formula.trim()?`当前公式没有引用变量。`:`引用变量后,对应数据会出现在这里。`),1))]),s[2]||=(0,n.createElementVNode)(`p`,{class:`formula-preview__note`},`试算值仅用于本次验证,修改不会写入业务数据。`,-1)]))}});var fe=t.t(de,[[`__scopeId`,`data-v-b2656900`]]);const pe={class:`c-formula__title-row`},$={class:`c-formula__actions`},me={key:0,class:`c-formula__templates`,"aria-label":`公式模板`},he=[`disabled`,`aria-pressed`,`onClick`],ge={key:0,class:`c-formula__sidebar`},_e={class:`c-formula__main`},ve={key:0,class:`c-formula__keyboard`},ye={class:`c-formula__guide`},be=(0,n.defineComponent)({name:`C_FormulaEditor`,__name:`index`,props:{modelValue:{},config:{},variables:{},functions:{},sampleData:{},disabled:{type:Boolean,default:!1},placeholder:{},height:{},showPreview:{type:Boolean,default:!0},showKeyboard:{type:Boolean,default:!0},showVariablePanel:{type:Boolean,default:!0},editableSampleData:{type:Boolean,default:!0},templates:{}},emits:[`update:modelValue`,`change`,`validation-change`],setup(t,{expose:i,emit:a}){let o=t,s=a,{options:c,formula:l,analysis:u,evalResult:d,usedVariables:f,updateSample:p,reset:m}=ee(o),h=(0,n.ref)();(0,n.watch)(l,e=>{s(`update:modelValue`,e),s(`change`,e)}),(0,n.watch)(()=>u.value.validation,e=>s(`validation-change`,e),{immediate:!0});function g(e){c.value.disabled||(l.value=e)}function _(e){c.value.disabled||h.value?.insertAtCursor(e)}function v(e){c.value.disabled||(e===`BACKSPACE`&&h.value?.backspace(),e===`CLEAR`&&(l.value=``))}return i({getValue:()=>l.value,setValue:e=>{l.value=e},reset:m,validate:()=>u.value.validation,insertAtCursor:_,focus:()=>h.value?.focus()}),(t,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`section`,{class:`c-formula`,style:(0,n.normalizeStyle)({height:typeof(0,n.unref)(c).height==`number`?`${(0,n.unref)(c).height}px`:(0,n.unref)(c).height}),"aria-label":`公式编辑器`},[(0,n.createElementVNode)(`header`,pe,[i[4]||=(0,n.createElementVNode)(`div`,null,[(0,n.createElementVNode)(`span`,{class:`c-formula__eyebrow`},`FORMULA WORKBENCH`),(0,n.createElementVNode)(`h2`,null,`规则与试算`),(0,n.createElementVNode)(`p`,null,`插入变量、编辑公式,再用试算值验证结果。`)],-1),(0,n.createElementVNode)(`div`,$,[(0,n.createVNode)((0,n.unref)(r.NTag),{type:(0,n.unref)(l).trim()?(0,n.unref)(u).validation.valid?`success`:`error`:`default`,size:`small`},{default:(0,n.withCtx)(()=>[(0,n.createTextVNode)((0,n.toDisplayString)((0,n.unref)(l).trim()?(0,n.unref)(u).validation.valid?`语法有效`:`需要修正`:`等待输入`),1)]),_:1},8,[`type`]),(0,n.createVNode)((0,n.unref)(r.NButton),{size:`small`,disabled:(0,n.unref)(c).disabled,onClick:(0,n.unref)(m)},{default:(0,n.withCtx)(()=>[...i[3]||=[(0,n.createTextVNode)(`重置`,-1)]]),_:1},8,[`disabled`,`onClick`])])]),(0,n.unref)(c).templates.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,me,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)((0,n.unref)(c).templates,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.value,type:`button`,disabled:(0,n.unref)(c).disabled,"aria-pressed":(0,n.unref)(l)===e.value,onClick:t=>l.value=e.value},[(0,n.createElementVNode)(`strong`,null,(0,n.toDisplayString)(e.label),1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.description),1)],8,he))),128))])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`c-formula__body`,{"c-formula__body--no-sidebar":!(0,n.unref)(c).showVariablePanel,"c-formula__body--no-preview":!(0,n.unref)(c).showPreview}])},[(0,n.unref)(c).showVariablePanel?((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,ge,[(0,n.createVNode)(V,{variables:(0,n.unref)(c).variables,functions:(0,n.unref)(c).functions,disabled:(0,n.unref)(c).disabled,onSelectVariable:i[0]||=e=>_(`[${e.name}]`),onSelectFunction:i[1]||=e=>_(`${e.name}(`)},null,8,[`variables`,`functions`,`disabled`])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,_e,[(0,n.createVNode)(E,{ref_key:`formulaInputRef`,ref:h,formula:(0,n.unref)(l),tokens:(0,n.unref)(u).tokens,validation:(0,n.unref)(u).validation,disabled:(0,n.unref)(c).disabled,placeholder:(0,n.unref)(c).placeholder,"onUpdate:formula":g},null,8,[`formula`,`tokens`,`validation`,`disabled`,`placeholder`]),(0,n.unref)(c).showKeyboard?((0,n.openBlock)(),(0,n.createElementBlock)(`details`,ve,[i[5]||=(0,n.createElementVNode)(`summary`,null,[(0,n.createTextVNode)(`辅助键盘 `),(0,n.createElementVNode)(`span`,null,`运算符、数字与退格`)],-1),(0,n.createVNode)(X,{disabled:(0,n.unref)(c).disabled,onKeyPress:i[2]||=e=>_(e.value),onAction:v},null,8,[`disabled`])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,ye,[(0,n.createVNode)(e.t,{name:`mdi:information-outline`,size:16}),i[6]||=(0,n.createElementVNode)(`p`,null,[(0,n.createTextVNode)(`变量使用 `),(0,n.createElementVNode)(`code`,null,`[变量名]`),(0,n.createTextVNode)(`,支持括号、比较和条件函数。右侧结果是当前数据的本地试算。`)],-1)])]),(0,n.unref)(c).showPreview?((0,n.openBlock)(),(0,n.createBlock)(fe,{key:1,formula:(0,n.unref)(l),"eval-result":(0,n.unref)(d),"used-variables":(0,n.unref)(f),editable:(0,n.unref)(c).editableSampleData&&!(0,n.unref)(c).disabled,onUpdateValue:(0,n.unref)(p)},null,8,[`formula`,`eval-result`,`used-variables`,`editable`,`onUpdateValue`])):(0,n.createCommentVNode)(`v-if`,!0)],2)],4))}});var xe=t.t(be,[[`__scopeId`,`data-v-fdb8dd69`]]);function Se(e){let t=(0,n.computed)(()=>{let t=new Map;for(let n of e.value)t.set(n.name,n.field);return t}),r,i;function a(e,n){if(!e.trim())return{success:!0,result:void 0};try{return(!i||r!==e)&&(i=y(e),r=e),{success:!0,result:i.evaluate(t.value,n)}}catch(e){return{success:!1,result:void 0,error:e instanceof Error?e.message:String(e)}}}function o(e){try{return[...new Set(b(e).filter(e=>e.type===`variable`).map(e=>e.value))]}catch{return[]}}return{evaluate:a,extractVariableNames:o,variableMap:t}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Se}});
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as i,createCommentVNode as a,createElementBlock as o,createElementVNode as s,createTextVNode as c,createVNode as l,defineComponent as u,nextTick as d,normalizeClass as f,normalizeStyle as p,openBlock as m,ref as h,renderList as g,toDisplayString as _,unref as v,useId as y,vModelText as b,vShow as x,watch as S,withCtx as C,withDirectives as w}from"vue";import{NButton as T,NEmpty as E,NInput as D,NInputNumber as O,NScrollbar as k,NSwitch as A,NTag as j}from"naive-ui";const M=[{label:`?`,value:` ? `,type:`logic`,color:`warning`},{label:`:`,value:` : `,type:`logic`,color:`warning`},{label:`and`,value:` AND `,type:`logic`,color:`warning`},{label:`or`,value:` OR `,type:`logic`,color:`warning`},{label:`(`,value:`(`,type:`paren`},{label:`)`,value:`)`,type:`paren`},{label:`,`,value:`, `,type:`paren`},{label:`==`,value:` == `,type:`compare`},{label:`>`,value:` > `,type:`compare`},{label:`<`,value:` < `,type:`compare`},{label:`≥`,value:` >= `,type:`compare`},{label:`≤`,value:` <= `,type:`compare`},{label:`≠`,value:` != `,type:`compare`},{label:`%`,value:` % `,type:`operator`}],N=[{label:`1`,value:`1`,type:`number`},{label:`2`,value:`2`,type:`number`},{label:`3`,value:`3`,type:`number`},{label:`+`,value:` + `,type:`operator`,color:`primary`},{label:`−`,value:` - `,type:`operator`,color:`primary`},{label:`4`,value:`4`,type:`number`},{label:`5`,value:`5`,type:`number`},{label:`6`,value:`6`,type:`number`},{label:`×`,value:` * `,type:`operator`,color:`primary`},{label:`÷`,value:` / `,type:`operator`,color:`primary`},{label:`7`,value:`7`,type:`number`},{label:`8`,value:`8`,type:`number`},{label:`9`,value:`9`,type:`number`},{label:`0`,value:`0`,type:`number`},{label:`.`,value:`.`,type:`number`}],P=[{label:`⌫`,value:`BACKSPACE`,type:`action`,isAction:!0},{label:`清空`,value:`CLEAR`,type:`action`,isAction:!0}],F=[{name:`IF`,signature:`IF(条件, 真值, 假值)`,description:`根据条件返回不同的值`,category:`逻辑`},{name:`AND`,signature:`AND(条件1, 条件2)`,description:`全部条件为真时返回真`,category:`逻辑`},{name:`OR`,signature:`OR(条件1, 条件2)`,description:`任一条件为真时返回真`,category:`逻辑`},{name:`NOT`,signature:`NOT(条件)`,description:`对条件取反`,category:`逻辑`},{name:`SUM`,signature:`SUM(值1, 值2, ...)`,description:`计算所有值的总和`,category:`数学`},{name:`AVG`,signature:`AVG(值1, 值2, ...)`,description:`计算所有值的平均值`,category:`数学`},{name:`MAX`,signature:`MAX(值1, 值2, ...)`,description:`返回最大值`,category:`数学`},{name:`MIN`,signature:`MIN(值1, 值2, ...)`,description:`返回最小值`,category:`数学`},{name:`ABS`,signature:`ABS(数值)`,description:`返回绝对值`,category:`数学`},{name:`ROUND`,signature:`ROUND(数值, 小数位)`,description:`四舍五入到指定小数位`,category:`数学`},{name:`CEIL`,signature:`CEIL(数值)`,description:`向上取整`,category:`数学`},{name:`FLOOR`,signature:`FLOOR(数值)`,description:`向下取整`,category:`数学`}],ee=new Set([`+`,`-`,`*`,`/`,`%`,`>`,`<`,`>=`,`<=`,`==`,`!=`,`?`,`:`,`AND`,`OR`,`NOT`]),I=new Set([`+`,`-`,`*`,`/`,`%`,`>`,`<`,`>=`,`<=`,`==`,`!=`,`?`,`:`,`AND`,`OR`]),L=1e4,R=5e3,z=Object.freeze({IF:(e,t,n)=>e?t:n,AND:(...e)=>e.every(Boolean),OR:(...e)=>e.some(Boolean),NOT:e=>!e,SUM:(...e)=>e.reduce((e,t)=>e+B(t),0),AVG:(...e)=>e.length?e.reduce((e,t)=>e+B(t),0)/e.length:0,MAX:(...e)=>Math.max(...e.map(B)),MIN:(...e)=>Math.min(...e.map(B)),ABS:e=>Math.abs(B(e)),ROUND:(e,t=0)=>{let n=10**Math.min(100,Math.max(0,Math.trunc(B(t))));return Math.round(B(e)*n)/n},CEIL:e=>Math.ceil(B(e)),FLOOR:e=>Math.floor(B(e))});function B(e){let t=Number(e);if(!Number.isFinite(t))throw Error(`无法将“${String(e)}”转换为有限数值`);return t}function V(e){if(e.length>L)throw Error(`公式长度不能超过 ${L} 个字符`);let t=[],n=0,r=e=>{if(t.push(e),t.length>R)throw Error(`公式不能超过 ${R} 个词元`)};for(;n<e.length;){let t=e[n];if(/\s/.test(t)){n+=1;continue}let i=e.slice(n),a=/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/i.exec(i);if(a){r({type:`number`,value:a[0],position:n}),n+=a[0].length;continue}if(t===`[`){let t=e.indexOf(`]`,n+1);if(t===-1)throw Error(`第 ${n+1} 个字符处缺少 ]`);let i=e.slice(n+1,t).trim();if(!i)throw Error(`第 ${n+1} 个字符处的变量名不能为空`);r({type:`variable`,value:i,position:n}),n=t+1;continue}if(t===`"`||t===`'`){let i=t,a=n,o=``,s=!1;for(n+=1;n<e.length;){let t=e[n];if(t===i){s=!0,n+=1;break}if(t===`\\`){if(n+=1,n>=e.length)break;let t=e[n];o+={n:`
2
+ `,r:`\r`,t:` `}[t]??t}else o+=t;n+=1}if(!s)throw Error(`第 ${a+1} 个字符处的字符串未闭合`);r({type:`string`,value:o,position:a});continue}let o=e.slice(n,n+2);if([`>=`,`<=`,`==`,`!=`].includes(o)){r({type:`operator`,value:o,position:n}),n+=2;continue}if(`+-*/%><?:`.includes(t)){r({type:`operator`,value:t,position:n}),n+=1;continue}if(`(),`.includes(t)){r({type:`punctuation`,value:t,position:n}),n+=1;continue}let s=/^[A-Za-z_][A-Za-z0-9_]*/.exec(i);if(s){let e=s[0],t=e.toUpperCase();r({type:[`AND`,`OR`,`NOT`].includes(t)?`operator`:`identifier`,value:[`AND`,`OR`,`NOT`].includes(t)?t:e,position:n}),n+=e.length;continue}throw Error(`第 ${n+1} 个字符“${t}”不受支持`)}return t.push({type:`eof`,value:``,position:n}),t}var te=class{cursor=0;nestingDepth=0;constructor(e){this.tokens=e}parse(){let e=this.parseConditional();return this.expect(`eof`),e}current(){return this.tokens[this.cursor]}advance(){return this.tokens[this.cursor++]}consume(e){return this.current().value===e?(this.advance(),!0):!1}expect(e,t){let n=this.current();if(n.type!==e||t!==void 0&&n.value!==t)throw Error(`第 ${n.position+1} 个字符处应为 ${t??e}`);return this.advance()}parseConditional(){if(++this.nestingDepth>100)throw Error(`公式嵌套不能超过 100 层`);try{let e=this.parseOr();if(!this.consume(`?`))return e;let t=this.parseConditional();return this.expect(`operator`,`:`),{kind:`conditional`,condition:e,truthy:t,falsy:this.parseConditional()}}finally{this.nestingDepth--}}parseBinary(e,t){let n=e();for(;t.includes(this.current().value);)n={kind:`binary`,operator:this.advance().value,left:n,right:e()};return n}parseOr(){return this.parseBinary(()=>this.parseAnd(),[`OR`])}parseAnd(){return this.parseBinary(()=>this.parseEquality(),[`AND`])}parseEquality(){return this.parseBinary(()=>this.parseComparison(),[`==`,`!=`])}parseComparison(){return this.parseBinary(()=>this.parseAdditive(),[`>`,`>=`,`<`,`<=`])}parseAdditive(){return this.parseBinary(()=>this.parseMultiplicative(),[`+`,`-`])}parseMultiplicative(){return this.parseBinary(()=>this.parseUnary(),[`*`,`/`,`%`])}parseUnary(){let e=[];for(;[`-`,`+`,`NOT`].includes(this.current().value)&&!(this.current().value===`NOT`&&this.tokens[this.cursor+1]?.value===`(`);)if(e.push(this.advance().value),e.length>100)throw Error(`一元运算不能超过 100 层`);let t=this.parsePrimary();for(let n of e.reverse())t={kind:`unary`,operator:n,value:t};return t}parsePrimary(){let e=this.current();if(e.type===`number`||e.type===`string`)return this.advance(),{kind:`literal`,value:e.type===`number`?Number(e.value):e.value};if(e.type===`variable`)return this.advance(),{kind:`variable`,name:e.value};if(e.type===`identifier`||e.type===`operator`&&[`AND`,`OR`,`NOT`].includes(e.value)){this.advance();let t=e.value.toUpperCase();if(t===`TRUE`||t===`FALSE`)return{kind:`literal`,value:t===`TRUE`};if(this.consume(`(`))return this.parseFunction(t,e);if(t===`NOT`)return{kind:`unary`,operator:`NOT`,value:this.parseUnary()};if(e.type===`identifier`)return{kind:`identifier`,name:e.value}}if(this.consume(`(`)){let e=this.parseConditional();return this.expect(`punctuation`,`)`),e}throw Error(`第 ${e.position+1} 个字符处缺少有效值`)}parseFunction(e,t){if(!Object.prototype.hasOwnProperty.call(z,e))throw Error(`第 ${t.position+1} 个字符处:未知函数“${t.value}”`);let n=[];if(!this.consume(`)`)){do n.push(this.parseConditional());while(this.consume(`,`));this.expect(`punctuation`,`)`)}let[r,i]=e===`IF`?[3,3]:e===`ROUND`?[1,2]:[`AND`,`OR`,`SUM`,`AVG`,`MAX`,`MIN`].includes(e)?[1,1/0]:[1,1];if(n.length<r||n.length>i)throw Error(`第 ${t.position+1} 个字符处:${e} 需要 ${r===i?r:`${r}–${i===1/0?`多个`:i}`} 个参数`);return{kind:`call`,name:e,args:n}}};function H(e,t){if(!Object.prototype.hasOwnProperty.call(t,e)||t[e]==null)throw Error(`变量“${e}”缺少样例数据`);let n=t[e];if(![`number`,`string`,`boolean`].includes(typeof n)||typeof n==`number`&&!Number.isFinite(n))throw Error(`变量“${e}”的数据类型不受支持`);return n}function U(e,t,n){switch(e){case`==`:return t===n;case`!=`:return t!==n;case`+`:return B(t)+B(n);case`-`:return B(t)-B(n);case`*`:return B(t)*B(n);case`/`:return B(t)/B(n);case`%`:return B(t)%B(n);default:if(typeof t==`boolean`||typeof n==`boolean`)throw Error(`运算符 ${e} 不支持布尔值`);return e===`>`?t>n:e===`>=`?t>=n:e===`<`?t<n:t<=n}}function W(e,t,n,r=0){if(r>200)throw Error(`公式计算层数超过安全限制`);let i=e=>W(e,t,n,r+1);switch(e.kind){case`literal`:return e.value;case`variable`:{let r=t.get(e.name);if(!r)throw Error(`未知变量“${e.name}”`);return H(r,n)}case`identifier`:return H(e.name,n);case`conditional`:return i(e.condition)?i(e.truthy):i(e.falsy);case`unary`:{let t=i(e.value);return e.operator===`NOT`?!t:e.operator===`-`?-B(t):B(t)}case`binary`:{let t=i(e.left);return e.operator===`AND`?!!t&&!!i(e.right):e.operator===`OR`?!!t||!!i(e.right):U(e.operator,t,i(e.right))}case`call`:return e.name===`IF`?i(e.args[0])?i(e.args[1]):i(e.args[2]):e.name===`AND`?e.args.every(e=>!!i(e)):e.name===`OR`?e.args.some(e=>!!i(e)):z[e.name](...e.args.map(i))}}function G(e){let t=V(e),n=new te(t).parse();return{tokens:t,evaluate(e,t){let r=W(n,e,t);if(typeof r==`number`&&!Number.isFinite(r))throw Error(`公式计算结果必须是有限数值`);return r}}}function K(e){return V(e)}function q(e,t){let n=r(()=>new Set(e.value.map(e=>e.name))),i=r(()=>new Set(e.value.map(e=>e.field))),a=r(()=>new Set(t.value.map(e=>e.name.toUpperCase()))),o=null;function s(e){try{let t=K(e),n=[],r=0;return t.forEach((i,a)=>{if(i.type===`eof`)return;i.position>r&&n.push({type:`space`,value:e.slice(r,i.position),start:r,end:i.position});let o=e.slice(i.position,t[a+1]?.position??e.length).trimEnd();r=i.position+o.length;let s=t[a+1],c=i.type===`variable`?`variable`:i.type===`number`?`number`:s?.value===`(`&&(i.type===`identifier`||[`AND`,`OR`,`NOT`].includes(i.value))?`function`:i.type===`operator`?`operator`:i.type===`punctuation`?i.value===`,`?`comma`:`paren`:`text`;n.push({type:c,value:c===`variable`?i.value:o,start:i.position,end:r})}),r<e.length&&n.push({type:`space`,value:e.slice(r),start:r,end:e.length}),n}catch{return e?[{type:`text`,value:e,start:0,end:e.length}]:[]}}function c(e){let t=n.value,r=i.value,c=a.value;if(o?.formula===e&&o.names===t&&o.fields===r&&o.functions===c)return o.analysis;let l={tokens:s(e),validation:{valid:!0,message:e.trim()?`语法校验通过`:`尚未输入公式`},compiled:null};if(e.trim())try{l.compiled=G(e);for(let e of l.tokens){if(e.type===`variable`&&!t.has(e.value))throw Error(`第 ${e.start+1} 个字符处:未知变量「${e.value}」`);if(e.type===`function`&&!c.has(e.value.toUpperCase()))throw Error(`第 ${e.start+1} 个字符处:未知函数「${e.value}」`);if(e.type===`text`&&/^[A-Za-z_]\w*$/.test(e.value)&&![`TRUE`,`FALSE`].includes(e.value.toUpperCase())&&!r.has(e.value))throw Error(`第 ${e.start+1} 个字符处:未知字段「${e.value}」`)}}catch(e){let t=e instanceof Error?e.message:String(e),n=/第 (\d+) 个字符/.exec(t);l.validation={valid:!1,message:t,...n?{position:Number(n[1])-1}:{}},l.compiled=null}return o={formula:e,names:t,fields:r,functions:c,analysis:l},l}function l(e){return c(e).validation}function u(e,t){let n=0,r=``;for(let i of s(e).filter(e=>e.type===`variable`))r+=e.slice(n,i.start)+(t.get(i.value)??`__unknown_${i.value}__`),n=i.end;return r+e.slice(n)}return{tokenize:s,analyze:c,validate:l,toEvalExpression:u,variableNames:n,functionNames:a}}function J(e){let t=r(()=>({variables:e.config?.variables??e.variables??[],functions:e.config?.functions??e.functions??F,sampleData:e.config?.sampleData??e.sampleData??{},disabled:e.config?.disabled??e.disabled??!1,placeholder:e.config?.placeholder??e.placeholder??`例如:[完成值] / [目标值] * 100`,height:e.config?.height??e.height??`auto`,showPreview:e.config?.showPreview??e.showPreview??!0,showKeyboard:e.config?.showKeyboard??e.showKeyboard??!0,showVariablePanel:e.config?.showVariablePanel??e.showVariablePanel??!0,editableSampleData:e.config?.editableSampleData??e.editableSampleData??!0,templates:e.config?.templates??e.templates??[]})),n=e.modelValue??``,i=h(n),a=h({}),o=q(r(()=>t.value.variables),r(()=>t.value.functions)),s=r(()=>o.analyze(i.value)),c=r(()=>{let e=new Map(Object.entries(t.value.sampleData));for(let[t,n]of Object.entries(a.value))n===null?e.delete(t):e.set(t,n);return Object.fromEntries(e)}),l=r(()=>new Map(t.value.variables.map(e=>[e.name,e.field]))),u=r(()=>{let e=s.value.tokens.filter(e=>e.type===`variable`).map(e=>e.value),n=s.value.tokens.filter(e=>e.type===`text`).map(e=>e.value);return t.value.variables.filter(t=>e.includes(t.name)||n.includes(t.field)).map(e=>({...e,value:c.value[e.field]}))}),d=r(()=>{if(!s.value.validation.valid)return{success:!1,result:void 0,error:s.value.validation.message};if(!s.value.compiled)return{success:!0,result:void 0};try{return{success:!0,result:s.value.compiled.evaluate(l.value,c.value)}}catch(e){return{success:!1,result:void 0,error:e instanceof Error?e.message:String(e)}}});function f(e,n){!t.value.disabled&&t.value.editableSampleData&&(a.value={...a.value,[e]:n})}function p(){i.value=n,a.value={}}return S(()=>e.modelValue,e=>{e!==void 0&&e!==i.value&&(i.value=e)}),S(()=>t.value.sampleData,()=>{a.value={}}),{options:t,formula:i,analysis:s,evalResult:d,usedVariables:u,updateSample:f,reset:p}}const Y={class:`formula-input__header`},X=[`readonly`,`aria-invalid`,`placeholder`],Z={key:0,class:`formula-input__tokens`,"aria-label":`公式结构预览`};var Q=t(u({name:`FormulaInput`,__name:`FormulaInput`,props:{formula:{},tokens:{},validation:{},variableNames:{},disabled:{type:Boolean,default:!1},placeholder:{default:`例如:[完成值] / [目标值] * 100`}},emits:[`update:formula`],setup(e,{expose:t,emit:r}){let i=e,c=r,l=h(),u=h(i.formula),p=`formula-feedback-${y()}`,v=u.value.length,x=v;S(u,e=>c(`update:formula`,e),{flush:`sync`}),S(()=>i.formula,e=>{e!==u.value&&(u.value=e,v=x=e.length)});function C(){l.value&&(v=l.value.selectionStart,x=l.value.selectionEnd)}function T(e,t=v,n=x){if(i.disabled)return;let r=Math.max(0,Math.min(t,u.value.length));u.value=u.value.slice(0,r)+e+u.value.slice(Math.max(r,n)),v=x=r+e.length,d(()=>{l.value?.focus({preventScroll:!0}),l.value?.setSelectionRange(v,x)})}function E(e){T(e)}function D(){if(v!==x){T(``);return}if(v===0)return;let e=i.tokens.find(e=>e.type===`variable`&&e.end===v),t=Array.from(u.value.slice(0,v)).pop()?.length??1;T(``,e?.start??v-t,x)}function O(){T(``,0,u.value.length)}function k(){v=x=u.value.length,l.value?.setSelectionRange(v,x)}function A(){l.value?.focus({preventScroll:!0}),k()}function j(){let e=i.validation.position??0;l.value?.focus({preventScroll:!0}),l.value?.setSelectionRange(e,Math.min(e+1,u.value.length)),C()}return t({insertAtCursor:E,backspace:D,focus:A,moveCursorToEnd:k}),(t,r)=>(m(),o(`div`,{class:f([`formula-input`,{"formula-input--disabled":e.disabled,"formula-input--error":!e.validation.valid&&e.formula.trim()}])},[s(`div`,Y,[r[1]||=s(`span`,{class:`formula-input__label`},`01 / 编辑公式`,-1),e.formula.trim()&&!e.disabled?(m(),o(`button`,{key:0,type:`button`,class:`formula-input__clear`,onClick:O},`清空公式`)):a(`v-if`,!0)]),w(s(`textarea`,{ref_key:`editorRef`,ref:l,"onUpdate:modelValue":r[0]||=e=>u.value=e,class:`formula-input__editor`,readonly:e.disabled,"aria-label":`公式输入`,"aria-invalid":!e.validation.valid&&!!e.formula.trim(),"aria-describedby":p,placeholder:e.placeholder,spellcheck:`false`,onSelect:C,onClick:C,onKeyup:C,onBlur:C},null,40,X),[[b,u.value]]),e.tokens.length?(m(),o(`div`,Z,[r[2]||=s(`span`,{class:`formula-input__tokens-label`},`结构预览`,-1),(m(!0),o(n,null,g(e.tokens,(e,t)=>(m(),o(`span`,{key:t,class:f(`formula-token formula-token--${e.type}`)},_(e.type===`variable`?`[${e.value}]`:e.value),3))),128))])):a(`v-if`,!0),s(`div`,{id:p,class:`formula-input__validation`,role:`status`},[s(`span`,{class:f(e.formula.trim()?e.validation.valid?`formula-input__validation-success`:`formula-input__validation-error`:`formula-input__validation-hint`)},_(e.formula.trim()?e.validation.valid?`语法校验通过,可在右侧调整数据试算。`:e.validation.message:`点击左侧变量开始,也可以直接输入 [变量名]。`),3),e.validation.position===void 0?a(`v-if`,!0):(m(),o(`button`,{key:0,type:`button`,class:`formula-input__locate`,onClick:j},`定位错误`))])],2))}}),[[`__scopeId`,`data-v-6bf933c2`]]);const ne={class:`variable-panel`},re={class:`variable-panel__tabs`},ie=[`aria-pressed`],ae=[`aria-pressed`],oe={class:`variable-panel__search`},se=[`aria-expanded`,`onClick`],ce={class:`variable-panel__items`},le=[`disabled`,`onClick`],ue={key:0},de=[`disabled`,`onClick`],fe={class:`variable-panel__func-name`},pe={class:`variable-panel__func-desc`},me={class:`variable-panel__func-sig`};var he=t(u({__name:`VariablePanel`,props:{variables:{},functions:{},disabled:{type:Boolean}},emits:[`select-variable`,`select-function`],setup(t){let u=t,d=h(`variable`),p=h(``),y=h(new Set),b=r(()=>{let e=p.value.toLowerCase(),t=e?u.variables.filter(t=>t.name.toLowerCase().includes(e)||t.field.toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)):u.variables,n=new Map;for(let e of t){let t=e.group??`其他`,r=n.get(t);r?r.push(e):n.set(t,[e])}return Array.from(n,([e,t])=>({name:e,items:t}))});S(b,e=>{for(let t of e)y.value.add(t.name)},{immediate:!0});function T(e){y.value.has(e)?y.value.delete(e):y.value.add(e)}let O=r(()=>{let e=p.value.toLowerCase();return e?u.functions.filter(t=>t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)):u.functions});function A(e){switch(e){case`number`:return`mdi:numeric`;case`text`:return`mdi:format-text`;case`boolean`:return`mdi:toggle-switch-outline`;default:return`mdi:variable`}}return(r,u)=>(m(),o(`div`,ne,[a(` 切换 Tab:变量 / 函数 `),s(`div`,re,[s(`button`,{type:`button`,class:f([`variable-panel__tab`,{"variable-panel__tab--active":d.value===`variable`}]),"aria-pressed":d.value===`variable`,onClick:u[0]||=e=>d.value=`variable`},` 可用变量 `,10,ie),s(`button`,{type:`button`,class:f([`variable-panel__tab`,{"variable-panel__tab--active":d.value===`function`}]),"aria-pressed":d.value===`function`,onClick:u[1]||=e=>d.value=`function`},` 常用函数 `,10,ae)]),a(` 搜索框 `),s(`div`,oe,[l(v(D),{value:p.value,"onUpdate:value":u[2]||=e=>p.value=e,size:`small`,placeholder:`搜索变量或函数`,"input-props":{"aria-label":`搜索变量或函数`},clearable:``},{prefix:C(()=>[l(e,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),a(` 变量列表 `),d.value===`variable`?(m(),i(v(k),{key:0,class:`variable-panel__list`},{default:C(()=>[b.value.length>0?(m(!0),o(n,{key:0},g(b.value,i=>(m(),o(`div`,{key:i.name,class:`variable-panel__group`},[s(`button`,{type:`button`,class:`variable-panel__group-title`,"aria-expanded":y.value.has(i.name),onClick:e=>T(i.name)},[l(e,{name:y.value.has(i.name)?`mdi:chevron-down`:`mdi:chevron-right`,size:16},null,8,[`name`]),c(` `+_(i.name),1)],8,se),w(s(`div`,ce,[(m(!0),o(n,null,g(i.items,n=>(m(),o(`button`,{key:n.field,type:`button`,class:`variable-panel__item`,disabled:t.disabled,onClick:e=>r.$emit(`select-variable`,n)},[l(e,{name:A(n.type),size:15,class:`variable-panel__item-icon`},null,8,[`name`]),s(`span`,null,[c(_(n.name),1),n.description?(m(),o(`small`,ue,_(n.description),1)):a(`v-if`,!0)])],8,le))),128))],512),[[x,y.value.has(i.name)]])]))),128)):(m(),i(v(E),{key:1,size:`small`,description:`无匹配变量`}))]),_:1})):(m(),o(n,{key:1},[a(` 函数列表 `),l(v(k),{class:`variable-panel__list`},{default:C(()=>[O.value.length>0?(m(!0),o(n,{key:0},g(O.value,e=>(m(),o(`button`,{key:e.name,type:`button`,class:`variable-panel__func`,disabled:t.disabled,onClick:t=>r.$emit(`select-function`,e)},[s(`div`,fe,[u[3]||=s(`span`,{class:`variable-panel__func-badge`},`ƒ`,-1),c(` `+_(e.name),1)]),s(`div`,pe,_(e.description),1),s(`div`,me,_(e.signature),1)],8,de))),128)):(m(),i(v(E),{key:1,size:`small`,description:`无匹配函数`}))]),_:1})],2112))]))}}),[[`__scopeId`,`data-v-2d73fec7`]]);const ge={class:`vk`},_e={class:`vk__body`},ve={class:`vk__half vk__half--ops`},ye=[`disabled`,`onClick`],be={class:`vk__half vk__half--nums`},xe=[`disabled`,`onClick`],Se={class:`vk__actions`},Ce=[`disabled`,`onClick`];var we=t(u({__name:`VirtualKeyboard`,props:{disabled:{type:Boolean,default:!1}},emits:[`key-press`,`action`],setup(e){let t=M,r=N,i=P;return(c,l)=>(m(),o(`div`,ge,[a(` ═══════ 标题行 ═══════ `),l[0]||=s(`div`,{class:`vk__title`},`计算公式`,-1),a(` ═══════ 键盘主体:运算符 | 数字 ═══════ `),s(`div`,_e,[a(` 运算符区 5 列 `),s(`div`,ve,[(m(!0),o(n,null,g(v(t),t=>(m(),o(`button`,{key:t.value,class:f([`vk__key`,[t.color?`vk__key--${t.color}`:``]]),disabled:e.disabled,onClick:e=>c.$emit(`key-press`,t)},_(t.label),11,ye))),128))]),a(` 数字区 5 列 `),s(`div`,be,[(m(!0),o(n,null,g(v(r),t=>(m(),o(`button`,{key:t.label+t.value,class:f([`vk__key`,[t.color?`vk__key--${t.color}`:``]]),disabled:e.disabled,onClick:e=>c.$emit(`key-press`,t)},_(t.label),11,xe))),128))])]),a(` ═══════ 动作行:⌫ + 清空 ═══════ `),s(`div`,Se,[(m(!0),o(n,null,g(v(i),t=>(m(),o(`button`,{key:t.value,class:`vk__key vk__key--action`,disabled:e.disabled,onClick:e=>c.$emit(`action`,t.value)},_(t.label),9,Ce))),128))])]))}}),[[`__scopeId`,`data-v-8c874c05`]]);const Te={class:`formula-preview`,"aria-label":`公式试算`},Ee={class:`formula-preview__result-label`},De={key:0,class:`formula-preview__result-value`},Oe={key:1,class:`formula-preview__result-empty`},ke={class:`formula-preview__vars`},Ae={class:`formula-preview__vars-title`},je={class:`formula-preview__var-heading`},Me=[`for`],Ne={key:3,class:`formula-preview__var-value`},Pe={key:4},$={key:0,class:`formula-preview__empty`};var Fe=t(u({name:`FormulaPreview`,__name:`FormulaPreview`,props:{formula:{},evalResult:{},usedVariables:{},editable:{type:Boolean}},emits:[`update-value`],setup(e,{emit:t}){let r=t,l=`formula-sample-${y()}`;function u(e){return typeof e==`number`?new Intl.NumberFormat(void 0,{maximumFractionDigits:6}).format(e):typeof e==`boolean`?e?`真 · true`:`假 · false`:String(e)}return(t,d)=>(m(),o(`aside`,Te,[d[1]||=s(`header`,null,[s(`span`,{class:`formula-preview__step`},`02`),s(`div`,null,[s(`h3`,null,`验证计算结果`),s(`p`,null,`调整试算值,观察规则是否符合预期。`)])],-1),s(`div`,{class:f([`formula-preview__result`,{"formula-preview__result--error":!!e.evalResult.error}]),role:`status`,"aria-live":`polite`},[s(`span`,Ee,_(e.evalResult.error?`暂时无法计算`:`试算结果`),1),e.evalResult.success&&e.evalResult.result!==void 0?(m(),o(`output`,De,_(u(e.evalResult.result)),1)):(m(),o(`span`,Oe,_(e.formula.trim()?e.evalResult.error||`等待数据`:`输入公式后展示结果`),1))],2),s(`div`,ke,[s(`div`,Ae,[d[0]||=c(`本次使用的试算值 `,-1),s(`span`,null,_(e.usedVariables.length)+` 项`,1)]),(m(!0),o(n,null,g(e.usedVariables,t=>(m(),o(`div`,{key:t.field,class:`formula-preview__var-row`},[s(`div`,je,[s(`label`,{for:`${l}-${t.field}`},_(t.name),9,Me),s(`code`,null,_(t.field),1)]),e.editable&&t.type===`number`?(m(),i(v(O),{key:0,value:typeof t.value==`number`?t.value:null,"input-props":{id:`${l}-${t.field}`,"aria-label":`试算值:${t.name}`},placeholder:`请输入数值`,"onUpdate:value":e=>r(`update-value`,t.field,e)},null,8,[`value`,`input-props`,`onUpdate:value`])):e.editable&&t.type===`boolean`?(m(),i(v(A),{key:1,value:t.value===!0,"aria-label":`试算值:${t.name}`,"onUpdate:value":e=>r(`update-value`,t.field,e)},null,8,[`value`,`aria-label`,`onUpdate:value`])):e.editable&&t.type===`text`?(m(),i(v(D),{key:2,value:typeof t.value==`string`?t.value:``,"input-props":{id:`${l}-${t.field}`,"aria-label":`试算值:${t.name}`},"onUpdate:value":e=>r(`update-value`,t.field,e)},null,8,[`value`,`input-props`,`onUpdate:value`])):(m(),o(`span`,Ne,_(t.value??`未提供`),1)),t.description?(m(),o(`p`,Pe,_(t.description),1)):a(`v-if`,!0)]))),128)),e.usedVariables.length?a(`v-if`,!0):(m(),o(`p`,$,_(e.formula.trim()?`当前公式没有引用变量。`:`引用变量后,对应数据会出现在这里。`),1))]),d[2]||=s(`p`,{class:`formula-preview__note`},`试算值仅用于本次验证,修改不会写入业务数据。`,-1)]))}}),[[`__scopeId`,`data-v-b2656900`]]);const Ie={class:`c-formula__title-row`},Le={class:`c-formula__actions`},Re={key:0,class:`c-formula__templates`,"aria-label":`公式模板`},ze=[`disabled`,`aria-pressed`,`onClick`],Be={key:0,class:`c-formula__sidebar`},Ve={class:`c-formula__main`},He={key:0,class:`c-formula__keyboard`},Ue={class:`c-formula__guide`};var We=t(u({name:`C_FormulaEditor`,__name:`index`,props:{modelValue:{},config:{},variables:{},functions:{},sampleData:{},disabled:{type:Boolean,default:!1},placeholder:{},height:{},showPreview:{type:Boolean,default:!0},showKeyboard:{type:Boolean,default:!0},showVariablePanel:{type:Boolean,default:!0},editableSampleData:{type:Boolean,default:!0},templates:{}},emits:[`update:modelValue`,`change`,`validation-change`],setup(t,{expose:r,emit:u}){let d=t,y=u,{options:b,formula:x,analysis:w,evalResult:E,usedVariables:D,updateSample:O,reset:k}=J(d),A=h();S(x,e=>{y(`update:modelValue`,e),y(`change`,e)}),S(()=>w.value.validation,e=>y(`validation-change`,e),{immediate:!0});function M(e){b.value.disabled||(x.value=e)}function N(e){b.value.disabled||A.value?.insertAtCursor(e)}function P(e){b.value.disabled||(e===`BACKSPACE`&&A.value?.backspace(),e===`CLEAR`&&(x.value=``))}return r({getValue:()=>x.value,setValue:e=>{x.value=e},reset:k,validate:()=>w.value.validation,insertAtCursor:N,focus:()=>A.value?.focus()}),(t,r)=>(m(),o(`section`,{class:`c-formula`,style:p({height:typeof v(b).height==`number`?`${v(b).height}px`:v(b).height}),"aria-label":`公式编辑器`},[s(`header`,Ie,[r[4]||=s(`div`,null,[s(`span`,{class:`c-formula__eyebrow`},`FORMULA WORKBENCH`),s(`h2`,null,`规则与试算`),s(`p`,null,`插入变量、编辑公式,再用试算值验证结果。`)],-1),s(`div`,Le,[l(v(j),{type:v(x).trim()?v(w).validation.valid?`success`:`error`:`default`,size:`small`},{default:C(()=>[c(_(v(x).trim()?v(w).validation.valid?`语法有效`:`需要修正`:`等待输入`),1)]),_:1},8,[`type`]),l(v(T),{size:`small`,disabled:v(b).disabled,onClick:v(k)},{default:C(()=>[...r[3]||=[c(`重置`,-1)]]),_:1},8,[`disabled`,`onClick`])])]),v(b).templates.length?(m(),o(`div`,Re,[(m(!0),o(n,null,g(v(b).templates,e=>(m(),o(`button`,{key:e.value,type:`button`,disabled:v(b).disabled,"aria-pressed":v(x)===e.value,onClick:t=>x.value=e.value},[s(`strong`,null,_(e.label),1),s(`span`,null,_(e.description),1)],8,ze))),128))])):a(`v-if`,!0),s(`div`,{class:f([`c-formula__body`,{"c-formula__body--no-sidebar":!v(b).showVariablePanel,"c-formula__body--no-preview":!v(b).showPreview}])},[v(b).showVariablePanel?(m(),o(`aside`,Be,[l(he,{variables:v(b).variables,functions:v(b).functions,disabled:v(b).disabled,onSelectVariable:r[0]||=e=>N(`[${e.name}]`),onSelectFunction:r[1]||=e=>N(`${e.name}(`)},null,8,[`variables`,`functions`,`disabled`])])):a(`v-if`,!0),s(`div`,Ve,[l(Q,{ref_key:`formulaInputRef`,ref:A,formula:v(x),tokens:v(w).tokens,validation:v(w).validation,disabled:v(b).disabled,placeholder:v(b).placeholder,"onUpdate:formula":M},null,8,[`formula`,`tokens`,`validation`,`disabled`,`placeholder`]),v(b).showKeyboard?(m(),o(`details`,He,[r[5]||=s(`summary`,null,[c(`辅助键盘 `),s(`span`,null,`运算符、数字与退格`)],-1),l(we,{disabled:v(b).disabled,onKeyPress:r[2]||=e=>N(e.value),onAction:P},null,8,[`disabled`])])):a(`v-if`,!0),s(`div`,Ue,[l(e,{name:`mdi:information-outline`,size:16}),r[6]||=s(`p`,null,[c(`变量使用 `),s(`code`,null,`[变量名]`),c(`,支持括号、比较和条件函数。右侧结果是当前数据的本地试算。`)],-1)])]),v(b).showPreview?(m(),i(Fe,{key:1,formula:v(x),"eval-result":v(E),"used-variables":v(D),editable:v(b).editableSampleData&&!v(b).disabled,onUpdateValue:v(O)},null,8,[`formula`,`eval-result`,`used-variables`,`editable`,`onUpdateValue`])):a(`v-if`,!0)],2)],4))}}),[[`__scopeId`,`data-v-fdb8dd69`]]);function Ge(e){let t=r(()=>{let t=new Map;for(let n of e.value)t.set(n.name,n.field);return t}),n,i;function a(e,r){if(!e.trim())return{success:!0,result:void 0};try{return(!i||n!==e)&&(i=G(e),n=e),{success:!0,result:i.evaluate(t.value,r)}}catch(e){return{success:!1,result:void 0,error:e instanceof Error?e.message:String(e)}}}function o(e){try{return[...new Set(K(e).filter(e=>e.type===`variable`).map(e=>e.value))]}catch{return[]}}return{evaluate:a,extractVariableNames:o,variableMap:t}}export{F as a,M as c,P as i,I as l,We as n,N as o,q as r,ee as s,Ge as t};
@@ -93,8 +93,8 @@ declare const __VLS_export: vue.DefineComponent<FormSearchProps, {
93
93
  onReset?: (() => any) | undefined;
94
94
  "onChange-params"?: ((params: SearchFormParams) => any) | undefined;
95
95
  }>, {
96
- size: "small" | "medium" | "large";
97
96
  loading: boolean;
97
+ size: "small" | "medium" | "large";
98
98
  bordered: boolean;
99
99
  formItemList: SearchFormItem[];
100
100
  formParams: SearchFormParams;
@@ -162,8 +162,6 @@ declare function useSearchState(emits: {
162
162
  defaultValue?: unknown;
163
163
  attrs?: Record<string, unknown> | undefined;
164
164
  rules?: {
165
- type?: async_validator0.RuleType | undefined;
166
- required?: boolean | undefined;
167
165
  options?: {
168
166
  suppressWarning?: boolean | undefined;
169
167
  suppressValidatorError?: boolean | undefined;
@@ -219,9 +217,12 @@ declare function useSearchState(emits: {
219
217
  keys?: string[] | undefined;
220
218
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
221
219
  } | undefined;
220
+ type?: async_validator0.RuleType | undefined;
221
+ required?: boolean | undefined;
222
222
  pattern?: (RegExp | string) | undefined;
223
- min?: number | undefined;
223
+ message?: string | ((a?: string) => string) | undefined;
224
224
  max?: number | undefined;
225
+ min?: number | undefined;
225
226
  len?: number | undefined;
226
227
  enum?: Array<string | number | boolean | null | undefined> | undefined;
227
228
  whitespace?: boolean | undefined;
@@ -368,7 +369,6 @@ declare function useSearchState(emits: {
368
369
  validator?: ((rule: async_validator0.InternalRuleItem, value: async_validator0.Value, callback: (error?: string | Error) => void, source: async_validator0.Values, options: async_validator0.ValidateOption) => async_validator0.SyncValidateResult | void) | undefined;
369
370
  }[] | undefined;
370
371
  transform?: ((value: async_validator0.Value) => async_validator0.Value) | undefined;
371
- message?: string | ((a?: string) => string) | undefined;
372
372
  key?: string | undefined;
373
373
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
374
374
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -393,8 +393,6 @@ declare function useSearchState(emits: {
393
393
  defaultValue?: unknown;
394
394
  attrs?: Record<string, unknown> | undefined;
395
395
  rules?: {
396
- type?: async_validator0.RuleType | undefined;
397
- required?: boolean | undefined;
398
396
  options?: {
399
397
  suppressWarning?: boolean | undefined;
400
398
  suppressValidatorError?: boolean | undefined;
@@ -450,9 +448,12 @@ declare function useSearchState(emits: {
450
448
  keys?: string[] | undefined;
451
449
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
452
450
  } | undefined;
451
+ type?: async_validator0.RuleType | undefined;
452
+ required?: boolean | undefined;
453
453
  pattern?: (RegExp | string) | undefined;
454
- min?: number | undefined;
454
+ message?: string | ((a?: string) => string) | undefined;
455
455
  max?: number | undefined;
456
+ min?: number | undefined;
456
457
  len?: number | undefined;
457
458
  enum?: Array<string | number | boolean | null | undefined> | undefined;
458
459
  whitespace?: boolean | undefined;
@@ -599,7 +600,6 @@ declare function useSearchState(emits: {
599
600
  validator?: ((rule: async_validator0.InternalRuleItem, value: async_validator0.Value, callback: (error?: string | Error) => void, source: async_validator0.Values, options: async_validator0.ValidateOption) => async_validator0.SyncValidateResult | void) | undefined;
600
601
  }[] | undefined;
601
602
  transform?: ((value: async_validator0.Value) => async_validator0.Value) | undefined;
602
- message?: string | ((a?: string) => string) | undefined;
603
603
  key?: string | undefined;
604
604
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
605
605
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -636,8 +636,6 @@ declare function useSearchState(emits: {
636
636
  defaultValue?: unknown;
637
637
  attrs?: Record<string, unknown> | undefined;
638
638
  rules?: {
639
- type?: async_validator0.RuleType | undefined;
640
- required?: boolean | undefined;
641
639
  options?: {
642
640
  suppressWarning?: boolean | undefined;
643
641
  suppressValidatorError?: boolean | undefined;
@@ -693,9 +691,12 @@ declare function useSearchState(emits: {
693
691
  keys?: string[] | undefined;
694
692
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
695
693
  } | undefined;
694
+ type?: async_validator0.RuleType | undefined;
695
+ required?: boolean | undefined;
696
696
  pattern?: (RegExp | string) | undefined;
697
- min?: number | undefined;
697
+ message?: string | ((a?: string) => string) | undefined;
698
698
  max?: number | undefined;
699
+ min?: number | undefined;
699
700
  len?: number | undefined;
700
701
  enum?: Array<string | number | boolean | null | undefined> | undefined;
701
702
  whitespace?: boolean | undefined;
@@ -842,7 +843,6 @@ declare function useSearchState(emits: {
842
843
  validator?: ((rule: async_validator0.InternalRuleItem, value: async_validator0.Value, callback: (error?: string | Error) => void, source: async_validator0.Values, options: async_validator0.ValidateOption) => async_validator0.SyncValidateResult | void) | undefined;
843
844
  }[] | undefined;
844
845
  transform?: ((value: async_validator0.Value) => async_validator0.Value) | undefined;
845
- message?: string | ((a?: string) => string) | undefined;
846
846
  key?: string | undefined;
847
847
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
848
848
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -92,8 +92,8 @@ declare const __VLS_export: vue.DefineComponent<FormSearchProps, {
92
92
  onReset?: (() => any) | undefined;
93
93
  "onChange-params"?: ((params: SearchFormParams) => any) | undefined;
94
94
  }>, {
95
- size: "small" | "medium" | "large";
96
95
  loading: boolean;
96
+ size: "small" | "medium" | "large";
97
97
  bordered: boolean;
98
98
  formItemList: SearchFormItem[];
99
99
  formParams: SearchFormParams;
@@ -271,8 +271,6 @@ declare function useSearchState(emits: {
271
271
  defaultValue?: unknown;
272
272
  attrs?: Record<string, unknown> | undefined;
273
273
  rules?: {
274
- type?: RuleType | undefined;
275
- required?: boolean | undefined;
276
274
  options?: {
277
275
  suppressWarning?: boolean | undefined;
278
276
  suppressValidatorError?: boolean | undefined;
@@ -328,9 +326,12 @@ declare function useSearchState(emits: {
328
326
  keys?: string[] | undefined;
329
327
  error?: ((rule: InternalRuleItem, message: string) => ValidateError) | undefined;
330
328
  } | undefined;
329
+ type?: RuleType | undefined;
330
+ required?: boolean | undefined;
331
331
  pattern?: (RegExp | string) | undefined;
332
- min?: number | undefined;
332
+ message?: string | ((a?: string) => string) | undefined;
333
333
  max?: number | undefined;
334
+ min?: number | undefined;
334
335
  len?: number | undefined;
335
336
  enum?: Array<string | number | boolean | null | undefined> | undefined;
336
337
  whitespace?: boolean | undefined;
@@ -477,7 +478,6 @@ declare function useSearchState(emits: {
477
478
  validator?: ((rule: InternalRuleItem, value: Value, callback: (error?: string | Error) => void, source: Values, options: ValidateOption) => SyncValidateResult | void) | undefined;
478
479
  }[] | undefined;
479
480
  transform?: ((value: Value) => Value) | undefined;
480
- message?: string | ((a?: string) => string) | undefined;
481
481
  key?: string | undefined;
482
482
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
483
483
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -502,8 +502,6 @@ declare function useSearchState(emits: {
502
502
  defaultValue?: unknown;
503
503
  attrs?: Record<string, unknown> | undefined;
504
504
  rules?: {
505
- type?: RuleType | undefined;
506
- required?: boolean | undefined;
507
505
  options?: {
508
506
  suppressWarning?: boolean | undefined;
509
507
  suppressValidatorError?: boolean | undefined;
@@ -559,9 +557,12 @@ declare function useSearchState(emits: {
559
557
  keys?: string[] | undefined;
560
558
  error?: ((rule: InternalRuleItem, message: string) => ValidateError) | undefined;
561
559
  } | undefined;
560
+ type?: RuleType | undefined;
561
+ required?: boolean | undefined;
562
562
  pattern?: (RegExp | string) | undefined;
563
- min?: number | undefined;
563
+ message?: string | ((a?: string) => string) | undefined;
564
564
  max?: number | undefined;
565
+ min?: number | undefined;
565
566
  len?: number | undefined;
566
567
  enum?: Array<string | number | boolean | null | undefined> | undefined;
567
568
  whitespace?: boolean | undefined;
@@ -708,7 +709,6 @@ declare function useSearchState(emits: {
708
709
  validator?: ((rule: InternalRuleItem, value: Value, callback: (error?: string | Error) => void, source: Values, options: ValidateOption) => SyncValidateResult | void) | undefined;
709
710
  }[] | undefined;
710
711
  transform?: ((value: Value) => Value) | undefined;
711
- message?: string | ((a?: string) => string) | undefined;
712
712
  key?: string | undefined;
713
713
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
714
714
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -745,8 +745,6 @@ declare function useSearchState(emits: {
745
745
  defaultValue?: unknown;
746
746
  attrs?: Record<string, unknown> | undefined;
747
747
  rules?: {
748
- type?: RuleType | undefined;
749
- required?: boolean | undefined;
750
748
  options?: {
751
749
  suppressWarning?: boolean | undefined;
752
750
  suppressValidatorError?: boolean | undefined;
@@ -802,9 +800,12 @@ declare function useSearchState(emits: {
802
800
  keys?: string[] | undefined;
803
801
  error?: ((rule: InternalRuleItem, message: string) => ValidateError) | undefined;
804
802
  } | undefined;
803
+ type?: RuleType | undefined;
804
+ required?: boolean | undefined;
805
805
  pattern?: (RegExp | string) | undefined;
806
- min?: number | undefined;
806
+ message?: string | ((a?: string) => string) | undefined;
807
807
  max?: number | undefined;
808
+ min?: number | undefined;
808
809
  len?: number | undefined;
809
810
  enum?: Array<string | number | boolean | null | undefined> | undefined;
810
811
  whitespace?: boolean | undefined;
@@ -951,7 +952,6 @@ declare function useSearchState(emits: {
951
952
  validator?: ((rule: InternalRuleItem, value: Value, callback: (error?: string | Error) => void, source: Values, options: ValidateOption) => SyncValidateResult | void) | undefined;
952
953
  }[] | undefined;
953
954
  transform?: ((value: Value) => Value) | undefined;
954
- message?: string | ((a?: string) => string) | undefined;
955
955
  key?: string | undefined;
956
956
  trigger?: (naive_ui_es_form_src_interface0.ValidationTrigger | string | Array<naive_ui_es_form_src_interface0.ValidationTrigger | string>) | undefined;
957
957
  validator?: naive_ui_es_form_src_interface0.FormItemRuleValidator | undefined;
@@ -92,29 +92,29 @@ interface SignatureEmits {
92
92
  //#endregion
93
93
  //#region src/components/C_Signature/index.vue.d.ts
94
94
  declare const __VLS_export: vue.DefineComponent<SignatureProps, SignatureExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
95
+ error: (error: Error) => any;
95
96
  clear: () => any;
96
97
  change: (data: SignatureStroke[]) => any;
97
- error: (error: Error) => any;
98
98
  "start-draw": () => any;
99
99
  drawing: (point: SignaturePoint) => any;
100
100
  "end-draw": (stroke: SignatureStroke) => any;
101
101
  undo: () => any;
102
102
  redo: () => any;
103
103
  }, string, vue.PublicProps, Readonly<SignatureProps> & Readonly<{
104
+ onError?: ((error: Error) => any) | undefined;
104
105
  onClear?: (() => any) | undefined;
105
106
  onChange?: ((data: SignatureStroke[]) => any) | undefined;
106
- onError?: ((error: Error) => any) | undefined;
107
107
  "onStart-draw"?: (() => any) | undefined;
108
108
  onDrawing?: ((point: SignaturePoint) => any) | undefined;
109
109
  "onEnd-draw"?: ((stroke: SignatureStroke) => any) | undefined;
110
110
  onUndo?: (() => any) | undefined;
111
111
  onRedo?: (() => any) | undefined;
112
112
  }>, {
113
- width: number | string;
114
113
  height: number | string;
115
- readonly: boolean;
116
- showToolbar: boolean;
114
+ width: number | string;
117
115
  disabled: boolean;
116
+ showToolbar: boolean;
117
+ readonly: boolean;
118
118
  maxHistory: number;
119
119
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
120
120
  declare const _default: typeof __VLS_export;