@robot-admin/naive-ui-components 0.17.6 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/C_AntV.css +10 -10
  3. package/dist/C_AntV.d.cts +2 -2
  4. package/dist/C_AntV.d.ts +2 -2
  5. package/dist/C_AntV2.cjs +1 -1
  6. package/dist/C_AntV2.js +1 -1
  7. package/dist/C_Date.cjs +1 -1
  8. package/dist/C_Date.css +5 -5
  9. package/dist/C_Date.d.cts +18 -2
  10. package/dist/C_Date.d.ts +18 -2
  11. package/dist/C_Date.js +1 -1
  12. package/dist/C_Date2.cjs +1 -1
  13. package/dist/C_Date2.js +1 -1
  14. package/dist/C_Draggable.css +53 -53
  15. package/dist/C_Draggable.d.cts +2 -2
  16. package/dist/C_Draggable.d.ts +2 -2
  17. package/dist/C_Draggable2.cjs +1 -1
  18. package/dist/C_Draggable2.js +1 -1
  19. package/dist/C_Editor.d.cts +1 -1
  20. package/dist/C_Editor.d.ts +1 -1
  21. package/dist/C_Form.cjs +1 -1
  22. package/dist/C_FormModal.d.cts +1 -1
  23. package/dist/C_FormModal.d.ts +1 -1
  24. package/dist/C_FormSearch.cjs +1 -1
  25. package/dist/C_FormSearch.css +52 -52
  26. package/dist/C_FormSearch.d.cts +18 -2
  27. package/dist/C_FormSearch.d.ts +18 -2
  28. package/dist/C_FormSearch.js +1 -1
  29. package/dist/C_FormSearch2.cjs +1 -1
  30. package/dist/C_FormSearch2.js +1 -1
  31. package/dist/C_Guide.d.cts +1 -1
  32. package/dist/C_Guide.d.ts +1 -1
  33. package/dist/C_Icon.d.cts +1 -1
  34. package/dist/C_Icon.d.ts +1 -1
  35. package/dist/C_Language.d.cts +1 -1
  36. package/dist/C_Language.d.ts +1 -1
  37. package/dist/C_Loading.d.cts +1 -1
  38. package/dist/C_Loading.d.ts +1 -1
  39. package/dist/C_Login.d.cts +1 -1
  40. package/dist/C_Login.d.ts +1 -1
  41. package/dist/C_Markdown.d.cts +1 -1
  42. package/dist/C_Markdown.d.ts +1 -1
  43. package/dist/C_Menu.d.ts +1 -1
  44. package/dist/C_OrgChart.d.cts +1 -1
  45. package/dist/C_OrgChart.d.ts +1 -1
  46. package/dist/C_Progress.d.cts +1 -1
  47. package/dist/C_Progress.d.ts +1 -1
  48. package/dist/C_Skeleton.d.cts +1 -1
  49. package/dist/C_Skeleton.d.ts +1 -1
  50. package/dist/C_Steps.d.cts +1 -1
  51. package/dist/C_Steps.d.ts +1 -1
  52. package/dist/C_Table.base.css +144 -155
  53. package/dist/C_Table.css +144 -155
  54. package/dist/C_Table.d.cts +2 -2
  55. package/dist/C_Table.d.ts +6 -6
  56. package/dist/C_TagsView.d.cts +1 -1
  57. package/dist/C_TagsView.d.ts +1 -1
  58. package/dist/C_Theme.d.cts +1 -1
  59. package/dist/C_Theme.d.ts +1 -1
  60. package/dist/C_Time.cjs +1 -1
  61. package/dist/C_Time.css +4 -4
  62. package/dist/C_Time.d.cts +18 -2
  63. package/dist/C_Time.d.ts +18 -2
  64. package/dist/C_Time.js +1 -1
  65. package/dist/C_Time2.cjs +1 -1
  66. package/dist/C_Time2.js +1 -1
  67. package/dist/C_Timeline.d.cts +1 -1
  68. package/dist/C_Timeline.d.ts +1 -1
  69. package/dist/C_Transfer.css +26 -26
  70. package/dist/C_Transfer.d.cts +2 -2
  71. package/dist/C_Transfer.d.ts +2 -2
  72. package/dist/C_Transfer2.cjs +1 -1
  73. package/dist/C_Transfer2.js +1 -1
  74. package/dist/C_Tree.css +23 -23
  75. package/dist/C_Tree.d.ts +4 -4
  76. package/dist/C_Tree2.cjs +1 -1
  77. package/dist/C_Tree2.js +1 -1
  78. package/dist/C_VtableGantt.cjs +1 -1
  79. package/dist/C_VtableGantt.css +31 -31
  80. package/dist/C_VtableGantt.d.cts +18 -2
  81. package/dist/C_VtableGantt.d.ts +18 -2
  82. package/dist/C_VtableGantt.js +1 -1
  83. package/dist/C_WorkFlow.css +150 -150
  84. package/dist/C_WorkFlow.d.cts +2 -2
  85. package/dist/C_WorkFlow.d.ts +2 -2
  86. package/dist/C_WorkFlow2.cjs +1 -1
  87. package/dist/C_WorkFlow2.js +1 -1
  88. package/dist/constants3.d.cts +6 -6
  89. package/dist/constants3.d.ts +6 -6
  90. package/dist/constants4.d.cts +7 -7
  91. package/dist/constants4.d.ts +7 -7
  92. package/dist/constants5.d.cts +2 -2
  93. package/dist/constants5.d.ts +2 -2
  94. package/dist/data.d.cts +7 -7
  95. package/dist/data.d.ts +7 -7
  96. package/dist/dateRange.d.cts +197 -0
  97. package/dist/dateRange.d.ts +197 -0
  98. package/dist/formValidation.cjs +1 -1
  99. package/dist/formValidation.js +1 -1
  100. package/dist/graphics.cjs +1 -0
  101. package/dist/graphics.d.cts +837 -0
  102. package/dist/graphics.d.ts +837 -0
  103. package/dist/graphics.js +1 -0
  104. package/dist/helpers.cjs +1 -1
  105. package/dist/index.cjs +1 -1
  106. package/dist/index.d.cts +47 -43
  107. package/dist/index.d.ts +47 -44
  108. package/dist/index.js +1 -1
  109. package/dist/index.vue.d.cts +4 -4
  110. package/dist/index.vue.d.ts +4 -4
  111. package/dist/index10.vue.d.cts +3 -3
  112. package/dist/index10.vue.d.ts +53 -68
  113. package/dist/index11.vue.d.cts +53 -68
  114. package/dist/index11.vue.d.ts +52 -58
  115. package/dist/index12.vue.d.cts +52 -58
  116. package/dist/index12.vue.d.ts +124 -50
  117. package/dist/index13.vue.d.cts +124 -50
  118. package/dist/index13.vue.d.ts +51 -123
  119. package/dist/index14.vue.d.cts +51 -123
  120. package/dist/index14.vue.d.ts +26 -52
  121. package/dist/index15.vue.d.cts +26 -52
  122. package/dist/index15.vue.d.ts +12 -26
  123. package/dist/index16.vue.d.cts +12 -26
  124. package/dist/index16.vue.d.ts +129 -13
  125. package/dist/index17.vue.d.cts +129 -13
  126. package/dist/index17.vue.d.ts +76 -129
  127. package/dist/index18.vue.d.cts +76 -129
  128. package/dist/index18.vue.d.ts +65 -75
  129. package/dist/index19.vue.d.cts +97 -75
  130. package/dist/index19.vue.d.ts +94 -62
  131. package/dist/index2.vue.d.cts +2 -2
  132. package/dist/index2.vue.d.ts +2 -2
  133. package/dist/index20.vue.d.cts +40 -91
  134. package/dist/index20.vue.d.ts +40 -91
  135. package/dist/index21.vue.d.cts +89 -40
  136. package/dist/index21.vue.d.ts +89 -40
  137. package/dist/index22.vue.d.cts +37 -95
  138. package/dist/index22.vue.d.ts +37 -95
  139. package/dist/index23.vue.d.cts +8 -34
  140. package/dist/index23.vue.d.ts +8 -34
  141. package/dist/index24.vue.d.cts +86 -9
  142. package/dist/index24.vue.d.ts +86 -9
  143. package/dist/index25.vue.d.cts +99 -654
  144. package/dist/index25.vue.d.ts +99 -654
  145. package/dist/index26.vue.d.cts +66 -87
  146. package/dist/index26.vue.d.ts +66 -87
  147. package/dist/index3.vue.d.cts +2 -2
  148. package/dist/index3.vue.d.ts +2 -2
  149. package/dist/index4.vue.d.cts +3 -3
  150. package/dist/index6.vue.d.ts +3 -3
  151. package/dist/index7.vue.d.cts +3 -3
  152. package/dist/index8.vue.d.ts +4 -4
  153. package/dist/index9.vue.d.cts +4 -4
  154. package/dist/index9.vue.d.ts +3 -3
  155. package/dist/mapUtils.d.cts +3 -3
  156. package/dist/mapUtils.d.ts +3 -3
  157. package/dist/presets.d.cts +5 -3
  158. package/dist/presets.d.ts +5 -3
  159. package/dist/style.css +499 -510
  160. package/dist/types.d.ts +51 -0
  161. package/dist/types2.d.cts +51 -0
  162. package/dist/useCalendarEvents.d.cts +2 -2
  163. package/dist/useCalendarEvents.d.ts +2 -2
  164. package/dist/useCollapsePanel.d.cts +4 -4
  165. package/dist/useCollapsePanel.d.ts +4 -4
  166. package/dist/useCropperCore.d.cts +9 -9
  167. package/dist/useCropperCore.d.ts +9 -9
  168. package/dist/useDraggableLayout.d.cts +94 -125
  169. package/dist/useDraggableLayout.d.ts +94 -125
  170. package/dist/useDynamicFormState.d.cts +23 -15
  171. package/dist/useDynamicFormState.d.ts +23 -15
  172. package/dist/useEdgeInteraction.d.cts +10 -5
  173. package/dist/useEdgeInteraction.d.ts +10 -5
  174. package/dist/useFullscreen.d.cts +3 -3
  175. package/dist/useFullscreen.d.ts +3 -3
  176. package/dist/useInfiniteScroll.d.cts +2 -2
  177. package/dist/useInfiniteScroll.d.ts +2 -2
  178. package/dist/useQRCode.d.cts +4 -4
  179. package/dist/useQRCode.d.ts +4 -4
  180. package/dist/useSignatureHistory.d.cts +3 -3
  181. package/dist/useSignatureHistory.d.ts +3 -3
  182. package/dist/useSplitResize.d.cts +6 -6
  183. package/dist/useSplitResize.d.ts +6 -6
  184. package/dist/useTableQuery.cjs +2 -2
  185. package/dist/useTableQuery.d.cts +490 -519
  186. package/dist/useTableQuery.d.ts +490 -519
  187. package/dist/useTableQuery.js +2 -2
  188. package/dist/useTimeSelection.d.cts +19 -52
  189. package/dist/useTimeSelection.d.ts +19 -52
  190. package/dist/useWorkflowValidation.d.cts +495 -116
  191. package/dist/useWorkflowValidation.d.ts +495 -116
  192. package/dist/verification.d.cts +4 -4
  193. package/dist/verification.d.ts +4 -4
  194. package/docs/guides/usage.en.md +18 -1
  195. package/docs/guides/usage.md +18 -1
  196. package/package.json +2 -2
  197. package/dist/C_VtableGantt2.cjs +0 -1
  198. package/dist/C_VtableGantt2.js +0 -1
  199. package/dist/index27.vue.d.cts +0 -111
  200. package/dist/index27.vue.d.ts +0 -111
  201. package/dist/index28.vue.d.cts +0 -84
  202. package/dist/index28.vue.d.ts +0 -84
  203. package/dist/useSearchState.d.cts +0 -163
  204. package/dist/useSearchState.d.ts +0 -163
@@ -258,9 +258,9 @@ type PlayerInstance = InstanceType<typeof xgplayer.default>;
258
258
  //#endregion
259
259
  //#region src/components/C_VideoPlayer/index.vue.d.ts
260
260
  declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
261
+ ready: () => any;
261
262
  ended: () => any;
262
263
  error: (error: Error) => any;
263
- ready: () => any;
264
264
  stateChange: (state: PlayerState) => any;
265
265
  qualityChange: (quality: QualityLevel) => any;
266
266
  rateChange: (rate: number) => any;
@@ -271,9 +271,9 @@ declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExp
271
271
  quizAnswer: (quizId: string, answer: string | string[], isCorrect: boolean) => any;
272
272
  timeUpdate: (currentTime: number, duration: number) => any;
273
273
  }, string, vue.PublicProps, Readonly<VideoPlayerProps> & Readonly<{
274
+ onReady?: (() => any) | undefined;
274
275
  onEnded?: (() => any) | undefined;
275
276
  onError?: ((error: Error) => any) | undefined;
276
- onReady?: (() => any) | undefined;
277
277
  onStateChange?: ((state: PlayerState) => any) | undefined;
278
278
  onQualityChange?: ((quality: QualityLevel) => any) | undefined;
279
279
  onRateChange?: ((rate: number) => any) | undefined;
package/dist/data.d.cts CHANGED
@@ -67,26 +67,26 @@ declare const __VLS_base: vue.DefineComponent<CTabsProps, {
67
67
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
68
68
  "update:modelValue": (value: TabsValue) => any;
69
69
  change: (value: TabsValue, item: TabsItem | undefined) => any;
70
- close: (value: TabsValue) => any;
71
70
  add: () => any;
71
+ close: (value: TabsValue) => any;
72
72
  }, string, vue.PublicProps, Readonly<CTabsProps> & Readonly<{
73
73
  "onUpdate:modelValue"?: ((value: TabsValue) => any) | undefined;
74
74
  onChange?: ((value: TabsValue, item: TabsItem | undefined) => any) | undefined;
75
- onClose?: ((value: TabsValue) => any) | undefined;
76
75
  onAdd?: (() => any) | undefined;
76
+ onClose?: ((value: TabsValue) => any) | undefined;
77
77
  }>, {
78
78
  modelValue: TabsValue | null;
79
79
  type: TabsType;
80
- addable: boolean;
81
- animated: boolean;
82
80
  size: TabsSize;
83
- closable: boolean;
84
- placement: TabsPlacement;
85
- displayDirective: TabsDisplayDirective;
86
81
  items: readonly TabsItem[];
87
82
  defaultValue: TabsValue | null;
83
+ placement: TabsPlacement;
88
84
  justifyContent: TabsJustifyContent;
85
+ animated: boolean;
86
+ closable: boolean;
87
+ addable: boolean;
89
88
  tabsOnly: boolean;
89
+ displayDirective: TabsDisplayDirective;
90
90
  paneClass: string;
91
91
  paneStyle: string | vue.CSSProperties;
92
92
  beforeChange: (target: TabsValue, current: TabsValue | null) => boolean | Promise<boolean>;
package/dist/data.d.ts CHANGED
@@ -67,26 +67,26 @@ declare const __VLS_base: vue.DefineComponent<CTabsProps, {
67
67
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
68
68
  "update:modelValue": (value: TabsValue) => any;
69
69
  change: (value: TabsValue, item: TabsItem | undefined) => any;
70
- close: (value: TabsValue) => any;
71
70
  add: () => any;
71
+ close: (value: TabsValue) => any;
72
72
  }, string, vue.PublicProps, Readonly<CTabsProps> & Readonly<{
73
73
  "onUpdate:modelValue"?: ((value: TabsValue) => any) | undefined;
74
74
  onChange?: ((value: TabsValue, item: TabsItem | undefined) => any) | undefined;
75
- onClose?: ((value: TabsValue) => any) | undefined;
76
75
  onAdd?: (() => any) | undefined;
76
+ onClose?: ((value: TabsValue) => any) | undefined;
77
77
  }>, {
78
78
  modelValue: TabsValue | null;
79
79
  type: TabsType;
80
- addable: boolean;
81
- animated: boolean;
82
80
  size: TabsSize;
83
- closable: boolean;
84
- placement: TabsPlacement;
85
- displayDirective: TabsDisplayDirective;
86
81
  items: readonly TabsItem[];
87
82
  defaultValue: TabsValue | null;
83
+ placement: TabsPlacement;
88
84
  justifyContent: TabsJustifyContent;
85
+ animated: boolean;
86
+ closable: boolean;
87
+ addable: boolean;
89
88
  tabsOnly: boolean;
89
+ displayDirective: TabsDisplayDirective;
90
90
  paneClass: string;
91
91
  paneStyle: string | vue.CSSProperties;
92
92
  beforeChange: (target: TabsValue, current: TabsValue | null) => boolean | Promise<boolean>;
@@ -0,0 +1,197 @@
1
+ import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.cjs";
2
+ import { t as ComponentDensity } from "./density.cjs";
3
+ import * as vue from "vue";
4
+ import { MaybeRefOrGetter, Ref } from "vue";
5
+ import { FormInst, FormItemRule } from "naive-ui";
6
+
7
+ //#region src/components/C_FormSearch/types.d.ts
8
+ /** 搜索字段支持的控件类型 */
9
+ type SearchFieldType = 'input' | 'select' | 'date-range' | 'spacer';
10
+ type SearchOptionValue = string | number | boolean;
11
+ interface SearchOptionItem<V extends SearchOptionValue = SearchOptionValue> {
12
+ labelDefault?: string;
13
+ label?: string;
14
+ value?: V;
15
+ disabled?: boolean;
16
+ [key: string]: unknown;
17
+ }
18
+ /** 动态模型保留原有开放契约;明确业务模型使用下方的字段和值关联。 */
19
+ interface SearchFormItemBase {
20
+ type: SearchFieldType;
21
+ prop: string;
22
+ placeholder?: string;
23
+ list?: SearchOptionItem[];
24
+ hisList?: string[];
25
+ isFocus?: boolean;
26
+ show?: boolean;
27
+ defaultValue?: unknown;
28
+ attrs?: Record<string, unknown>;
29
+ rules?: FormItemRule[];
30
+ }
31
+ type FieldOptions<V> = Array<Omit<SearchOptionItem, 'value'> & {
32
+ value: Extract<V, SearchOptionValue>;
33
+ }>;
34
+ type FieldAttributes = Record<string, unknown>;
35
+ type TypedSearchControl<V> = {
36
+ type: 'spacer';
37
+ list?: never;
38
+ } | (string extends V ? {
39
+ type: 'input';
40
+ list?: never;
41
+ } : never) | (null extends V ? [number, number] extends V ? {
42
+ type: 'date-range';
43
+ list?: never;
44
+ } : never : never) | (NonNullable<V> extends readonly (infer Item)[] ? [] extends NonNullable<V> ? {
45
+ type: 'select';
46
+ attrs: FieldAttributes & {
47
+ multiple: true;
48
+ };
49
+ list?: FieldOptions<Item>;
50
+ } : never : NonNullable<V> extends SearchOptionValue ? null extends V ? {
51
+ type: 'select';
52
+ attrs?: FieldAttributes & {
53
+ multiple?: false;
54
+ };
55
+ list?: FieldOptions<NonNullable<V>>;
56
+ } : {
57
+ type: 'select';
58
+ attrs: FieldAttributes & {
59
+ multiple?: false;
60
+ clearable: false;
61
+ };
62
+ defaultValue: NonNullable<V>;
63
+ list?: FieldOptions<NonNullable<V>>;
64
+ } : never);
65
+ /**
66
+ * 字段值与控件清空语义关联,业务模型无需自行修补 reset/clear 的类型。
67
+ * 日期默认使用时间戳范围;格式化范围可使用 SearchDateRangeValue。
68
+ */
69
+ type SearchFormItem<T extends object = SearchFormParams> = {
70
+ prop: Extract<keyof T, string>;
71
+ } & (string extends keyof T ? SearchFormItemBase : { [P in Extract<keyof T, string>]: Omit<SearchFormItemBase, 'type' | 'prop' | 'defaultValue' | 'list'> & {
72
+ prop: P;
73
+ defaultValue?: T[P];
74
+ } & TypedSearchControl<T[P]> }[Extract<keyof T, string>]);
75
+ interface SearchFormParams {
76
+ pageNum?: number;
77
+ pageSize?: number;
78
+ [key: string]: unknown;
79
+ }
80
+ interface SearchConfig<T extends object = SearchFormParams> {
81
+ /** 与 C_Form、C_Table 统一的布局密度,显式 size 和字段 attrs.size 优先。 */
82
+ density?: ComponentDensity;
83
+ foldThreshold?: number;
84
+ historyMaxItems?: number;
85
+ requireValue?: boolean;
86
+ feedback?: ComponentFeedback;
87
+ locale?: ComponentLocale;
88
+ onSearch?: (params: T) => void | Promise<unknown>;
89
+ }
90
+ interface FormSearchRuntimeProps<T extends object = SearchFormParams> {
91
+ bordered?: boolean;
92
+ formItemList: SearchFormItem<NoInfer<T>>[];
93
+ /** @deprecated Use modelValue with v-model. */
94
+ formParams?: T;
95
+ modelValue?: T;
96
+ formSearchInputHistoryString?: string;
97
+ size?: 'small' | 'medium' | 'large';
98
+ loading?: boolean;
99
+ config?: SearchConfig<NoInfer<T>>;
100
+ }
101
+ /** 具体业务模型必须提供完整初始值;动态默认模型继续支持空配置接入。 */
102
+ type FormSearchProps<T extends object = SearchFormParams> = Omit<FormSearchRuntimeProps<T>, 'modelValue' | 'formParams'> & (string extends keyof T ? {
103
+ modelValue?: T;
104
+ formParams?: T;
105
+ } : {
106
+ modelValue: T;
107
+ formParams?: T;
108
+ } | {
109
+ modelValue?: T;
110
+ formParams: T;
111
+ });
112
+ interface FormSearchEmits<T extends object = SearchFormParams> {
113
+ search: [params: T];
114
+ reset: [params: T];
115
+ 'change-params': [params: T];
116
+ 'update:modelValue': [params: T];
117
+ }
118
+ /** 公开实例的顶层 Ref 已由 Vue 解包。 */
119
+ interface FormSearchExpose<T extends object = SearchFormParams> {
120
+ formRef: FormInst | null;
121
+ formParams: T;
122
+ searchFn: () => Promise<boolean>;
123
+ cleanFn: () => void;
124
+ changeFoldState: () => void;
125
+ }
126
+ //#endregion
127
+ //#region src/components/C_FormSearch/composables/useSearchHistory.d.ts
128
+ interface SearchHistoryOptions {
129
+ storageKey?: string;
130
+ maxItems?: number;
131
+ }
132
+ /**
133
+ *
134
+ */
135
+ declare function useSearchHistory<T extends object = SearchFormParams>(fields: Ref<SearchFormItem<T>[]>, formParams: Ref<T>, options?: MaybeRefOrGetter<SearchHistoryOptions>): {
136
+ enabled: vue.ComputedRef<boolean>;
137
+ handleFocus: (prop: string) => void;
138
+ closeAllPanels: () => void;
139
+ selectHistoryItem: (value: string, prop: string) => void;
140
+ deleteHistoryItem: (prop: string, index: number) => void;
141
+ clearAllHistory: (prop: string) => void;
142
+ saveCurrentInputs: () => void;
143
+ restoreFromStorage: () => void;
144
+ };
145
+ //#endregion
146
+ //#region src/components/C_FormSearch/composables/useSearchState.d.ts
147
+ interface UseSearchStateOptions<T extends object = SearchFormParams> {
148
+ formItemList: SearchFormItem<T>[];
149
+ formParams: T;
150
+ config?: MaybeRefOrGetter<SearchConfig<T> | undefined>;
151
+ loading?: MaybeRefOrGetter<boolean>;
152
+ historyOptions?: MaybeRefOrGetter<SearchHistoryOptions>;
153
+ }
154
+ /**
155
+ *
156
+ */
157
+ declare function useSearchState<T extends object = SearchFormParams>(emits: {
158
+ (event: 'search', params: T): void;
159
+ (event: 'reset', params: T): void;
160
+ (event: 'change-params', params: T): void;
161
+ (event: 'update:modelValue', params: T): void;
162
+ }, options: UseSearchStateOptions<T>): {
163
+ formRef: Ref<FormInst | null, FormInst | null>;
164
+ fields: Ref<SearchFormItem<T>[], SearchFormItem<T>[]>;
165
+ formParams: Ref<T, T>;
166
+ expanded: Ref<boolean, boolean>;
167
+ searching: vue.ComputedRef<boolean>;
168
+ visibleFields: vue.ComputedRef<SearchFormItem<T>[]>;
169
+ hasExpandButton: vue.ComputedRef<boolean>;
170
+ history: {
171
+ enabled: vue.ComputedRef<boolean>;
172
+ handleFocus: (prop: string) => void;
173
+ closeAllPanels: () => void;
174
+ selectHistoryItem: (value: string, prop: string) => void;
175
+ deleteHistoryItem: (prop: string, index: number) => void;
176
+ clearAllHistory: (prop: string) => void;
177
+ saveCurrentInputs: () => void;
178
+ restoreFromStorage: () => void;
179
+ };
180
+ searchFn: () => Promise<boolean>;
181
+ resetFn: () => void;
182
+ toggleFold: () => void;
183
+ syncFromProps: (newItems: SearchFormItem<T>[], newParams: T) => void;
184
+ };
185
+ //#endregion
186
+ //#region src/components/C_FormSearch/dateRange.d.ts
187
+ type DateRangeInput = {
188
+ mode: 'formatted';
189
+ value: [string, string];
190
+ } | {
191
+ mode: 'timestamp';
192
+ value: [number, number] | null;
193
+ };
194
+ /** 搜索日期范围模型,同时支持时间戳和显式格式化日期。 */
195
+ type SearchDateRangeValue = DateRangeInput['value'];
196
+ //#endregion
197
+ export { FormSearchEmits as a, SearchConfig as c, SearchFormParams as d, SearchOptionItem as f, useSearchHistory as i, SearchFieldType as l, SearchDateRangeValue as n, FormSearchExpose as o, useSearchState as r, FormSearchProps as s, DateRangeInput as t, SearchFormItem as u };
@@ -0,0 +1,197 @@
1
+ import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.js";
2
+ import { t as ComponentDensity } from "./density.js";
3
+ import * as vue from "vue";
4
+ import { MaybeRefOrGetter, Ref } from "vue";
5
+ import { FormInst, FormItemRule } from "naive-ui";
6
+
7
+ //#region src/components/C_FormSearch/types.d.ts
8
+ /** 搜索字段支持的控件类型 */
9
+ type SearchFieldType = 'input' | 'select' | 'date-range' | 'spacer';
10
+ type SearchOptionValue = string | number | boolean;
11
+ interface SearchOptionItem<V extends SearchOptionValue = SearchOptionValue> {
12
+ labelDefault?: string;
13
+ label?: string;
14
+ value?: V;
15
+ disabled?: boolean;
16
+ [key: string]: unknown;
17
+ }
18
+ /** 动态模型保留原有开放契约;明确业务模型使用下方的字段和值关联。 */
19
+ interface SearchFormItemBase {
20
+ type: SearchFieldType;
21
+ prop: string;
22
+ placeholder?: string;
23
+ list?: SearchOptionItem[];
24
+ hisList?: string[];
25
+ isFocus?: boolean;
26
+ show?: boolean;
27
+ defaultValue?: unknown;
28
+ attrs?: Record<string, unknown>;
29
+ rules?: FormItemRule[];
30
+ }
31
+ type FieldOptions<V> = Array<Omit<SearchOptionItem, 'value'> & {
32
+ value: Extract<V, SearchOptionValue>;
33
+ }>;
34
+ type FieldAttributes = Record<string, unknown>;
35
+ type TypedSearchControl<V> = {
36
+ type: 'spacer';
37
+ list?: never;
38
+ } | (string extends V ? {
39
+ type: 'input';
40
+ list?: never;
41
+ } : never) | (null extends V ? [number, number] extends V ? {
42
+ type: 'date-range';
43
+ list?: never;
44
+ } : never : never) | (NonNullable<V> extends readonly (infer Item)[] ? [] extends NonNullable<V> ? {
45
+ type: 'select';
46
+ attrs: FieldAttributes & {
47
+ multiple: true;
48
+ };
49
+ list?: FieldOptions<Item>;
50
+ } : never : NonNullable<V> extends SearchOptionValue ? null extends V ? {
51
+ type: 'select';
52
+ attrs?: FieldAttributes & {
53
+ multiple?: false;
54
+ };
55
+ list?: FieldOptions<NonNullable<V>>;
56
+ } : {
57
+ type: 'select';
58
+ attrs: FieldAttributes & {
59
+ multiple?: false;
60
+ clearable: false;
61
+ };
62
+ defaultValue: NonNullable<V>;
63
+ list?: FieldOptions<NonNullable<V>>;
64
+ } : never);
65
+ /**
66
+ * 字段值与控件清空语义关联,业务模型无需自行修补 reset/clear 的类型。
67
+ * 日期默认使用时间戳范围;格式化范围可使用 SearchDateRangeValue。
68
+ */
69
+ type SearchFormItem<T extends object = SearchFormParams> = {
70
+ prop: Extract<keyof T, string>;
71
+ } & (string extends keyof T ? SearchFormItemBase : { [P in Extract<keyof T, string>]: Omit<SearchFormItemBase, 'type' | 'prop' | 'defaultValue' | 'list'> & {
72
+ prop: P;
73
+ defaultValue?: T[P];
74
+ } & TypedSearchControl<T[P]> }[Extract<keyof T, string>]);
75
+ interface SearchFormParams {
76
+ pageNum?: number;
77
+ pageSize?: number;
78
+ [key: string]: unknown;
79
+ }
80
+ interface SearchConfig<T extends object = SearchFormParams> {
81
+ /** 与 C_Form、C_Table 统一的布局密度,显式 size 和字段 attrs.size 优先。 */
82
+ density?: ComponentDensity;
83
+ foldThreshold?: number;
84
+ historyMaxItems?: number;
85
+ requireValue?: boolean;
86
+ feedback?: ComponentFeedback;
87
+ locale?: ComponentLocale;
88
+ onSearch?: (params: T) => void | Promise<unknown>;
89
+ }
90
+ interface FormSearchRuntimeProps<T extends object = SearchFormParams> {
91
+ bordered?: boolean;
92
+ formItemList: SearchFormItem<NoInfer<T>>[];
93
+ /** @deprecated Use modelValue with v-model. */
94
+ formParams?: T;
95
+ modelValue?: T;
96
+ formSearchInputHistoryString?: string;
97
+ size?: 'small' | 'medium' | 'large';
98
+ loading?: boolean;
99
+ config?: SearchConfig<NoInfer<T>>;
100
+ }
101
+ /** 具体业务模型必须提供完整初始值;动态默认模型继续支持空配置接入。 */
102
+ type FormSearchProps<T extends object = SearchFormParams> = Omit<FormSearchRuntimeProps<T>, 'modelValue' | 'formParams'> & (string extends keyof T ? {
103
+ modelValue?: T;
104
+ formParams?: T;
105
+ } : {
106
+ modelValue: T;
107
+ formParams?: T;
108
+ } | {
109
+ modelValue?: T;
110
+ formParams: T;
111
+ });
112
+ interface FormSearchEmits<T extends object = SearchFormParams> {
113
+ search: [params: T];
114
+ reset: [params: T];
115
+ 'change-params': [params: T];
116
+ 'update:modelValue': [params: T];
117
+ }
118
+ /** 公开实例的顶层 Ref 已由 Vue 解包。 */
119
+ interface FormSearchExpose<T extends object = SearchFormParams> {
120
+ formRef: FormInst | null;
121
+ formParams: T;
122
+ searchFn: () => Promise<boolean>;
123
+ cleanFn: () => void;
124
+ changeFoldState: () => void;
125
+ }
126
+ //#endregion
127
+ //#region src/components/C_FormSearch/composables/useSearchHistory.d.ts
128
+ interface SearchHistoryOptions {
129
+ storageKey?: string;
130
+ maxItems?: number;
131
+ }
132
+ /**
133
+ *
134
+ */
135
+ declare function useSearchHistory<T extends object = SearchFormParams>(fields: Ref<SearchFormItem<T>[]>, formParams: Ref<T>, options?: MaybeRefOrGetter<SearchHistoryOptions>): {
136
+ enabled: vue.ComputedRef<boolean>;
137
+ handleFocus: (prop: string) => void;
138
+ closeAllPanels: () => void;
139
+ selectHistoryItem: (value: string, prop: string) => void;
140
+ deleteHistoryItem: (prop: string, index: number) => void;
141
+ clearAllHistory: (prop: string) => void;
142
+ saveCurrentInputs: () => void;
143
+ restoreFromStorage: () => void;
144
+ };
145
+ //#endregion
146
+ //#region src/components/C_FormSearch/composables/useSearchState.d.ts
147
+ interface UseSearchStateOptions<T extends object = SearchFormParams> {
148
+ formItemList: SearchFormItem<T>[];
149
+ formParams: T;
150
+ config?: MaybeRefOrGetter<SearchConfig<T> | undefined>;
151
+ loading?: MaybeRefOrGetter<boolean>;
152
+ historyOptions?: MaybeRefOrGetter<SearchHistoryOptions>;
153
+ }
154
+ /**
155
+ *
156
+ */
157
+ declare function useSearchState<T extends object = SearchFormParams>(emits: {
158
+ (event: 'search', params: T): void;
159
+ (event: 'reset', params: T): void;
160
+ (event: 'change-params', params: T): void;
161
+ (event: 'update:modelValue', params: T): void;
162
+ }, options: UseSearchStateOptions<T>): {
163
+ formRef: Ref<FormInst | null, FormInst | null>;
164
+ fields: Ref<SearchFormItem<T>[], SearchFormItem<T>[]>;
165
+ formParams: Ref<T, T>;
166
+ expanded: Ref<boolean, boolean>;
167
+ searching: vue.ComputedRef<boolean>;
168
+ visibleFields: vue.ComputedRef<SearchFormItem<T>[]>;
169
+ hasExpandButton: vue.ComputedRef<boolean>;
170
+ history: {
171
+ enabled: vue.ComputedRef<boolean>;
172
+ handleFocus: (prop: string) => void;
173
+ closeAllPanels: () => void;
174
+ selectHistoryItem: (value: string, prop: string) => void;
175
+ deleteHistoryItem: (prop: string, index: number) => void;
176
+ clearAllHistory: (prop: string) => void;
177
+ saveCurrentInputs: () => void;
178
+ restoreFromStorage: () => void;
179
+ };
180
+ searchFn: () => Promise<boolean>;
181
+ resetFn: () => void;
182
+ toggleFold: () => void;
183
+ syncFromProps: (newItems: SearchFormItem<T>[], newParams: T) => void;
184
+ };
185
+ //#endregion
186
+ //#region src/components/C_FormSearch/dateRange.d.ts
187
+ type DateRangeInput = {
188
+ mode: 'formatted';
189
+ value: [string, string];
190
+ } | {
191
+ mode: 'timestamp';
192
+ value: [number, number] | null;
193
+ };
194
+ /** 搜索日期范围模型,同时支持时间戳和显式格式化日期。 */
195
+ type SearchDateRangeValue = DateRangeInput['value'];
196
+ //#endregion
197
+ export { FormSearchEmits as a, SearchConfig as c, SearchFormParams as d, SearchOptionItem as f, useSearchHistory as i, SearchFieldType as l, SearchDateRangeValue as n, FormSearchExpose as o, useSearchState as r, FormSearchProps as s, DateRangeInput as t, SearchFormItem as u };
@@ -1 +1 @@
1
- require(`./chunk.cjs`);let e=require(`@robot-admin/form-validate`);const t=e.PRESET_RULES,n=e.NAIVE_COMBOS;function r(t=[]){return t.map(t=>{let n=`validate`in t&&typeof t.validate==`function`?(0,e.toNaiveRule)(t):t;return{...n,...Array.isArray(n.trigger)?{trigger:[...n.trigger]}:{}}})}function i(t,n){return r([{...e.BasicRules.required(t,[`input`,`change`,`blur`]),message:n}])[0]}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
1
+ require(`./chunk.cjs`);let e=require(`@robot-admin/form-validate`);function t(e){return`validate`in e&&typeof e.validate==`function`}function n(n=[]){return n.map(n=>{let r=t(n)?(0,e.toNaiveRule)(n):n;return{...r,...Array.isArray(r.trigger)?{trigger:[...r.trigger]}:{}}})}function r(t,r){return n([{...e.BasicRules.required(t,[`input`,`change`,`blur`]),message:r}])[0]}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
@@ -1 +1 @@
1
- import{BasicRules as e,NAIVE_COMBOS as t,PRESET_RULES as n,SPEC_RULES as r,toNaiveRule as i}from"@robot-admin/form-validate";const a=n,o=t;function s(e=[]){return e.map(e=>{let t=`validate`in e&&typeof e.validate==`function`?i(e):e;return{...t,...Array.isArray(t.trigger)?{trigger:[...t.trigger]}:{}}})}function c(t,n){return s([{...e.required(t,[`input`,`change`,`blur`]),message:n}])[0]}export{s as a,c as i,a as n,r,o as t};
1
+ import{BasicRules as e,NAIVE_COMBOS as t,PRESET_RULES as n,SPEC_RULES as r,toNaiveRule as i}from"@robot-admin/form-validate";function a(e){return`validate`in e&&typeof e.validate==`function`}function o(e=[]){return e.map(e=>{let t=a(e)?i(e):e;return{...t,...Array.isArray(t.trigger)?{trigger:[...t.trigger]}:{}}})}function s(t,n){return o([{...e.required(t,[`input`,`change`,`blur`]),message:n}])[0]}export{o as a,s as i,n,r,t};
@@ -0,0 +1 @@
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={headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`,borderLineWidth:1,fontSize:14,fontWeight:`bold`},bodyStyle:{borderColor:`rgba(128, 128, 128, 0.2)`,borderLineWidth:[1,0,1,0],fontSize:13}},a={basic:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`任务名称`,width:220,tree:!0},{field:`start`,title:`开始时间`,width:120},{field:`end`,title:`结束时间`,width:120},{field:`progress`,title:`进度`,width:80}],tableWidth:420,minTableWidth:300,theme:i},frame:{outerFrameStyle:{borderLineWidth:1,borderColor:`#e1e4e8`,cornerRadius:6},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:2}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,labelText:`{title}`,labelTextStyle:{fontSize:12,textAlign:`left`},barStyle:{width:18,barColor:`#1890ff`,completedBarColor:`#52c41a`,cornerRadius:4,borderLineWidth:0},milestoneStyle:{borderColor:`#fa8c16`,borderLineWidth:1,fillColor:`#ffd666`,width:12}},timelineHeader:{colWidth:60,horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},scales:[{unit:`week`,step:1,format:e=>`第${e.dateIndex}周`,style:{fontSize:12,fontWeight:`bold`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},project:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`任务名称`,width:200,tree:!0,editor:`input`},{field:`start`,title:`开始时间`,width:120,editor:`date-input`},{field:`end`,title:`结束时间`,width:120,editor:`date-input`},{field:`priority`,title:`优先级`,width:80,editor:`input`},{field:`progress`,title:`进度%`,width:80,editor:`input`}],tableWidth:480,minTableWidth:350,maxTableWidth:800,theme:i,hierarchyExpandLevel:2},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#e1e4e8`,cornerRadius:8},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,hoverBarStyle:{barOverlayColor:`rgba(24, 144, 255, 0.3)`},labelText:`{title} {progress}%`,labelTextStyle:{fontSize:12,textAlign:`left`,textOverflow:`ellipsis`},barStyle:{width:20,barColor:`#1890ff`,completedBarColor:`#52c41a`,cornerRadius:6,borderLineWidth:0}},timelineHeader:{colWidth:60,horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},scales:[{unit:`week`,step:1,startOfWeek:`monday`,format:e=>`第${e.dateIndex}周`,style:{fontSize:13,fontWeight:`bold`,textAlign:`center`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11,textAlign:`center`}}]},rowSeriesNumber:{title:`序号`,dragOrder:!0,headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`},style:{borderColor:`rgba(128, 128, 128, 0.2)`}},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},timeline:{overscrollBehavior:`none`,headerRowHeight:45,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`事件名称`,width:250,tree:!0},{field:`start`,title:`时间`,width:150}],tableWidth:400,minTableWidth:300,theme:{headerStyle:{...i.headerStyle},bodyStyle:i.bodyStyle}},frame:{outerFrameStyle:{borderLineWidth:1,borderColor:`rgba(128, 128, 128, 0.3)`,cornerRadius:4},verticalSplitLineMoveable:!0},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,labelText:`{title}`,labelTextStyle:{fontSize:12,textAlign:`left`},barStyle:{width:22,barColor:`#722ed1`,completedBarColor:`#b37feb`,cornerRadius:8,borderLineWidth:0}},timelineHeader:{colWidth:60,scales:[{unit:`month`,step:1,format:e=>`${e.dateIndex}月`,style:{fontSize:13,fontWeight:`bold`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},milestone:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:38,taskListTable:{columns:[{field:`title`,title:`里程碑`,width:200,tree:!0},{field:`start`,title:`目标日期`,width:120},{field:`priority`,title:`重要性`,width:100}],tableWidth:400,minTableWidth:300,theme:{headerStyle:{...i.headerStyle,borderColor:`#ffa940`},bodyStyle:{...i.bodyStyle,borderColor:`#ffa940`}}},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#ffa940`,cornerRadius:6},verticalSplitLineMoveable:!0},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(255, 168, 64, 0.3)`},horizontalLine:{lineWidth:1,lineColor:`rgba(255, 168, 64, 0.3)`}},taskBar:{startDateField:`start`,endDateField:`start`,labelText:`{title}`,labelTextStyle:{fontSize:12},barStyle:{width:0,barColor:`transparent`},milestoneStyle:{borderColor:`#fa8c16`,borderLineWidth:2,fillColor:`#ffd666`,width:16}},timelineHeader:{colWidth:80,scales:[{unit:`month`,step:1,format:e=>`${e.dateIndex}月`,style:{fontSize:13,fontWeight:`bold`}},{unit:`week`,step:1,format:e=>`第${e.dateIndex}周`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},official:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`title`,width:180,sort:!0,tree:!0,editor:`input`},{field:`start`,title:`start`,width:120,sort:!0,editor:`date-input`},{field:`end`,title:`end`,width:120,sort:!0,editor:`date-input`},{field:`priority`,title:`priority`,width:80,sort:!0,editor:`input`},{field:`progress`,title:`progress`,width:80,sort:!0,editor:`input`}],tableWidth:460,minTableWidth:350,maxTableWidth:800,theme:{headerStyle:{...i.headerStyle,fontSize:18,color:`red`},bodyStyle:{...i.bodyStyle,fontSize:16,color:`#4D4D4D`}},hierarchyExpandLevel:2},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#e1e4e8`,cornerRadius:8},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3},horizontalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,hoverBarStyle:{barOverlayColor:`rgba(99, 144, 0, 0.4)`},labelText:`{title} {progress}%`,labelTextStyle:{fontSize:16,textAlign:`left`,textOverflow:`ellipsis`},barStyle:{width:20,barColor:`#ee8800`,completedBarColor:`#91e8e0`,cornerRadius:8,borderLineWidth:1,borderColor:`black`},milestoneStyle:{borderColor:`red`,borderLineWidth:1,fillColor:`green`,width:15}},timelineHeader:{backgroundColor:`#EEF1F5`,colWidth:60,horizontalLine:{lineWidth:1,lineColor:`#e1e4e8`},verticalLine:{lineWidth:1,lineColor:`#e1e4e8`},scales:[{unit:`week`,step:1,startOfWeek:`sunday`,format:e=>`Week ${e.dateIndex}`,style:{fontSize:20,fontWeight:`bold`,color:`white`,strokeColor:`black`,textAlign:`right`,textBaseline:`bottom`,textStick:!0}},{unit:`day`,step:1,format:e=>e.dateIndex.toString(),style:{fontSize:20,fontWeight:`bold`,color:`white`,strokeColor:`black`,textAlign:`right`,textBaseline:`bottom`}}]},markLine:[{date:`2024-07-28`,style:{lineWidth:1,lineColor:`blue`,lineDash:[8,4]}},{date:`2024-08-17`,style:{lineWidth:2,lineColor:`red`,lineDash:[8,4]}}],rowSeriesNumber:{title:`行号`,dragOrder:!0,headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`},style:{borderColor:`rgba(128, 128, 128, 0.2)`}},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}}},o=new Set([`__proto__`,`prototype`,`constructor`]),s=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null};function c(e,t){let n=new WeakMap,r=(e,t)=>{let i=n.get(t);if(i)return i;let a={...e};n.set(t,a);for(let[n,i]of Object.entries(t))o.has(n)||(a[n]=s(i)?r(s(e[n])?e[n]:{},i):i);return a};return r(e,t)}function l(e,t,n){e.on(`click_task_bar`,e=>{e.record&&t(e.record,e.event)}),e.on(`change_date_range`,e=>{if(e.record){let t={start:e.startDate,end:e.endDate};n({...e.record,...t},t)}}),e.on(`progress_update`,e=>{if(e.record){let t={progress:e.progress};n({...e.record,...t},t)}});let r=e.taskListTableInstance;r&&(r.on(`click_cell`,e=>{let n=r.getCellOriginRecord(e.col,e.row);n&&typeof n==`object`&&`id`in n&&t(n,e.event)}),r.on(`change_cell_value`,e=>{let t=r.getCellOriginRecord(e.col,e.row),i=r.getHeaderField(e.col,e.row);t&&typeof i==`string`&&n({...t,[i]:e.changedValue},{[i]:e.changedValue})}))}const u={class:`c-vtable-gantt-wrapper`},d={key:0,class:`gantt-toolbar`},f={class:`toolbar-left`},p={class:`gantt-title`},m={class:`toolbar-right`},h={class:`gantt-body`},g=(0,n.defineComponent)({name:`C_VtableGantt`,__name:`index`,props:{data:{default:()=>[]},options:{default:()=>({})},preset:{default:`basic`},height:{default:`600px`},title:{default:``},showToolbar:{type:Boolean,default:!0},showFullscreenButton:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`ganttCreated`,`taskClick`,`taskChange`,`error`],setup(t,{expose:i,emit:o}){let s=t,g=o,_=(0,n.ref)(),v=(0,n.shallowRef)(),y=(0,n.ref)(!1),b=(0,n.ref)(!1),x=(0,n.shallowRef)(),S=0,C,w=!1,T,E,D,O=(0,n.computed)(()=>typeof s.height==`number`?`${s.height}px`:s.height),k=(e,t)=>!w&&e===S&&_.value===t,A=e=>e.map(e=>({...e,title:e.title||`任务${e.id}`,children:e.children?A(e.children):void 0})),j=e=>({underlayBackgroundColor:e?`#1e1e1e`:`#ffffff`,timelineHeaderBg:e?`#2d2d2d`:`#EEF1F5`,gridBg:e?`#1e1e1e`:`#ffffff`,lineColor:e?`rgba(255, 255, 255, 0.1)`:`rgba(128, 128, 128, 0.2)`,textColor:e?`#ffffff`:`#000000`}),M=(e,t)=>({...e,backgroundColor:t.timelineHeaderBg,horizontalLine:{...e?.horizontalLine,lineColor:t.lineColor},verticalLine:{...e?.verticalLine,lineColor:t.lineColor},scales:e?.scales?.map(e=>({...e,style:{...e.style,color:t.textColor}}))}),N=(e,t)=>({...e,backgroundColor:t.gridBg,horizontalLine:{...e?.horizontalLine,lineColor:t.lineColor},verticalLine:{...e?.verticalLine,lineColor:t.lineColor}}),P=(e,t,n,r)=>({...e,records:t,underlayBackgroundColor:r.underlayBackgroundColor,taskListTable:{...e.taskListTable,theme:n.extends(e.taskListTable?.theme??{})},timelineHeader:M(e.timelineHeader,r),grid:N(e.grid,r)}),F=(e,t,n)=>{let r=s.theme===`dark`;return P(t,n,r?e.DARK:e.DEFAULT,j(r))},I=e=>{if(e)try{e.release()}catch(e){console.warn(`销毁甘特图失败:`,e)}},L=(e,t,n)=>{e.editor(t)||e.editor(t,n())},R=async()=>{clearTimeout(C),C=void 0;let e=_.value;if(!e||w)return;let t=++S;b.value=!0,x.value=void 0;let n;try{let[{Gantt:r},{themes:i,register:o},{InputEditor:u,DateInputEditor:d}]=await Promise.all([import(`@visactor/vtable-gantt`),import(`@visactor/vtable`),import(`@visactor/vtable-editors`)]);if(!k(t,e))return;L(o,`input`,()=>new u),L(o,`date-input`,()=>new d);let f=c(a[s.preset]||a.basic,s.options),p=F(i,f,A(s.data));U();let m=new r(e,p);if(n=m,!k(t,e)){m.release();return}l(m,(e,t)=>g(`taskClick`,e,t),(e,t)=>g(`taskChange`,e,t)),v.value=m,T=p,E=f,D=i,n=void 0,g(`ganttCreated`,m)}catch(r){if(I(n),!k(t,e))return;x.value=r instanceof Error?r:Error(String(r)),g(`error`,x.value)}finally{k(t,e)&&(b.value=!1)}},z=async()=>{let e=_.value;if(e)try{document.fullscreenElement===e?await document.exitFullscreen():await e.requestFullscreen(),y.value=document.fullscreenElement===e}catch(t){console.warn(`全屏切换失败:`,t),y.value=document.fullscreenElement===e}},B=()=>{y.value=document.fullscreenElement===_.value},V=e=>{if(v.value&&e)try{let t=A(e);v.value.setRecords(t),T&&={...T,records:t}}catch(e){console.warn(`更新数据失败:`,e)}},H=e=>{if(v.value&&T&&E&&D)try{let t=c(E,e),n=F(D,t,T.records??[]);v.value.updateOption(n),T=n,E=t}catch(e){console.warn(`更新配置失败:`,e)}},U=()=>{let e=v.value;v.value=void 0,T=void 0,E=void 0,D=void 0,I(e)};return(0,n.watch)(()=>s.data,e=>{e&&v.value&&V(e)},{deep:!0}),(0,n.watch)(()=>[s.options,s.preset,s.theme],()=>void R(),{deep:!0,flush:`post`}),(0,n.onMounted)(()=>{w=!1,document.addEventListener(`fullscreenchange`,B),(0,n.nextTick)(()=>{w||S>0||(C=setTimeout(()=>R(),100))})}),(0,n.onUnmounted)(()=>{w=!0,b.value=!1,S+=1,C&&clearTimeout(C),document.removeEventListener(`fullscreenchange`,B),U()}),i({ganttInstance:v,loading:b,error:x,reload:R,updateData:V,updateOptions:H,toggleFullscreen:z}),(i,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[t.showToolbar?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createElementVNode)(`div`,f,[(0,n.createElementVNode)(`span`,p,(0,n.toDisplayString)(t.title||`甘特图`),1)]),(0,n.createElementVNode)(`div`,m,[t.showFullscreenButton?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NButton),{key:0,size:`small`,onClick:z},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:y.value?`carbon:minimize`:`carbon:maximize`,size:16,color:`currentColor`},null,8,[`name`])]),default:(0,n.withCtx)(()=>[(0,n.createTextVNode)(` `+(0,n.toDisplayString)(y.value?`退出全屏`:`全屏`),1)]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`div`,{ref_key:`ganttContainerRef`,ref:_,class:`gantt-container`,style:(0,n.normalizeStyle)({height:O.value})},null,4),x.value?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NResult),{key:0,class:`gantt-error`,status:`error`,title:`甘特图加载失败`,description:x.value.message},{footer:(0,n.withCtx)(()=>[(0,n.createVNode)((0,n.unref)(r.NButton),{loading:b.value,onClick:R},{default:(0,n.withCtx)(()=>[...a[0]||=[(0,n.createTextVNode)(`重试`,-1)]]),_:1},8,[`loading`])]),_:1},8,[`description`])):(0,n.createCommentVNode)(`v-if`,!0)])]))}});var _=t.t(g,[[`__scopeId`,`data-v-f33bf002`]]);function v(e,t){e.add(t)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return v}});