@robot-admin/naive-ui-components 0.14.3 → 0.16.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 (254) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +130 -741
  3. package/README_EN.md +137 -678
  4. package/dist/C_ActionBar.css +57 -58
  5. package/dist/C_ActionBar2.cjs +1 -1
  6. package/dist/C_ActionBar2.js +1 -1
  7. package/dist/C_AntV.css +232 -238
  8. package/dist/C_AntV2.cjs +2 -2
  9. package/dist/C_AntV2.js +2 -2
  10. package/dist/C_AudioPlayer.css +9 -9
  11. package/dist/C_AvatarGroup.css +5 -6
  12. package/dist/C_Barcode.css +1 -1
  13. package/dist/C_Breadcrumb.css +15 -18
  14. package/dist/C_Breadcrumb2.cjs +1 -1
  15. package/dist/C_Breadcrumb2.js +1 -1
  16. package/dist/C_Captcha.css +46 -49
  17. package/dist/C_Captcha2.cjs +1 -1
  18. package/dist/C_Captcha2.js +1 -1
  19. package/dist/C_Cascade.css +5 -6
  20. package/dist/C_Chat.css +8 -8
  21. package/dist/C_City.css +2 -2
  22. package/dist/C_Code.css +9 -9
  23. package/dist/C_CollapsePanel.css +9 -9
  24. package/dist/C_ContextMenu.css +31 -31
  25. package/dist/C_Cron.css +271 -274
  26. package/dist/C_Date.css +1 -1
  27. package/dist/C_Draggable.css +10 -11
  28. package/dist/C_Editor.css +2 -2
  29. package/dist/C_FilePreview.css +423 -423
  30. package/dist/C_Form.base.css +608 -602
  31. package/dist/C_Form.cjs +1 -1
  32. package/dist/C_Form.css +610 -604
  33. package/dist/C_Form.d.cts +2 -2
  34. package/dist/C_Form.d.ts +2 -2
  35. package/dist/C_Form.js +1 -1
  36. package/dist/C_FormModal.cjs +1 -1
  37. package/dist/C_FormModal.css +12 -17
  38. package/dist/C_FormModal.js +1 -1
  39. package/dist/C_FormModal2.cjs +1 -1
  40. package/dist/C_FormModal2.js +1 -1
  41. package/dist/C_FormSearch.css +53 -55
  42. package/dist/C_FormSearch2.cjs +1 -1
  43. package/dist/C_FormSearch2.js +1 -1
  44. package/dist/C_FormulaEditor.css +204 -205
  45. package/dist/C_FullCalendar.css +13 -15
  46. package/dist/C_FullCalendar2.cjs +1 -1
  47. package/dist/C_FullCalendar2.js +1 -1
  48. package/dist/C_GlobalSearch.css +11 -12
  49. package/dist/C_Guide.css +10 -10
  50. package/dist/C_Icon.css +7 -8
  51. package/dist/C_ImageCropper.css +69 -69
  52. package/dist/C_Language.css +8 -8
  53. package/dist/C_Loading.css +22 -25
  54. package/dist/C_Loading2.cjs +1 -1
  55. package/dist/C_Loading2.js +1 -1
  56. package/dist/C_Login.css +130 -135
  57. package/dist/C_Login2.cjs +1 -1
  58. package/dist/C_Login2.js +1 -1
  59. package/dist/C_Map.css +22 -23
  60. package/dist/C_Markdown.css +6 -7
  61. package/dist/C_Menu.css +2 -5
  62. package/dist/C_Menu2.cjs +1 -1
  63. package/dist/C_Menu2.js +1 -1
  64. package/dist/C_NotificationCenter.css +316 -281
  65. package/dist/C_NotificationCenter.d.cts +2 -2
  66. package/dist/C_NotificationCenter.d.ts +2 -2
  67. package/dist/C_NotificationCenter2.cjs +1 -1
  68. package/dist/C_NotificationCenter2.js +1 -1
  69. package/dist/C_OrgChart.css +8 -8
  70. package/dist/C_PageLoading.css +34 -39
  71. package/dist/C_QRCode.css +5 -6
  72. package/dist/C_Signature.css +5 -6
  73. package/dist/C_Skeleton.css +2 -2
  74. package/dist/C_SplitPane.css +2 -2
  75. package/dist/C_Steps.css +5 -6
  76. package/dist/C_Table.base.css +1090 -879
  77. package/dist/C_Table.cjs +1 -1
  78. package/dist/C_Table.css +1096 -885
  79. package/dist/C_Table.d.cts +1 -1
  80. package/dist/C_Table.d.ts +1 -1
  81. package/dist/C_Table.js +1 -1
  82. package/dist/C_Tabs.css +5 -6
  83. package/dist/C_TagsView.css +60 -63
  84. package/dist/C_TagsView2.cjs +1 -1
  85. package/dist/C_TagsView2.js +1 -1
  86. package/dist/C_Theme.css +7 -8
  87. package/dist/C_Time.css +1 -1
  88. package/dist/C_Timeline.css +8 -8
  89. package/dist/C_Transfer.css +10 -11
  90. package/dist/C_Tree.css +16 -17
  91. package/dist/C_Upload.css +156 -157
  92. package/dist/C_VideoPlayer.css +267 -267
  93. package/dist/C_VtableGantt.css +2 -2
  94. package/dist/C_WaterFall.css +2 -2
  95. package/dist/C_WorkFlow.css +466 -470
  96. package/dist/C_WorkFlow2.cjs +1 -1
  97. package/dist/C_WorkFlow2.js +1 -1
  98. package/dist/Card.cjs +1 -0
  99. package/dist/Card.js +1 -0
  100. package/dist/Custom.cjs +1 -0
  101. package/dist/Custom.js +1 -0
  102. package/dist/Dynamic.cjs +1 -0
  103. package/dist/Dynamic.js +1 -0
  104. package/dist/Steps.cjs +1 -0
  105. package/dist/Steps.js +1 -0
  106. package/dist/Tabs.cjs +1 -0
  107. package/dist/Tabs.js +1 -0
  108. package/dist/cascader.cjs +1 -0
  109. package/dist/cascader.js +1 -0
  110. package/dist/color-picker.cjs +1 -0
  111. package/dist/color-picker.js +1 -0
  112. package/dist/constants3.d.cts +71 -117
  113. package/dist/constants3.d.ts +71 -117
  114. package/dist/constants4.d.cts +3 -3
  115. package/dist/constants4.d.ts +3 -3
  116. package/dist/constants5.d.cts +2 -2
  117. package/dist/constants5.d.ts +2 -2
  118. package/dist/context.cjs +1 -0
  119. package/dist/context.js +1 -0
  120. package/dist/contracts.d.cts +24 -0
  121. package/dist/contracts.d.ts +24 -0
  122. package/dist/createPageLoading.cjs +1 -1
  123. package/dist/createPageLoading.js +1 -1
  124. package/dist/data.cjs +1 -1
  125. package/dist/data.d.cts +9 -9
  126. package/dist/data.d.ts +9 -9
  127. package/dist/data.js +1 -1
  128. package/dist/date-picker.cjs +1 -0
  129. package/dist/date-picker.js +1 -0
  130. package/dist/feedback.cjs +1 -0
  131. package/dist/feedback.js +1 -0
  132. package/dist/helpers.cjs +1 -1
  133. package/dist/helpers.js +1 -1
  134. package/dist/index.cjs +1 -1
  135. package/dist/index.d.cts +7 -5
  136. package/dist/index.d.ts +7 -5
  137. package/dist/index.js +1 -1
  138. package/dist/index.vue.d.cts +5 -5
  139. package/dist/index.vue.d.ts +5 -5
  140. package/dist/index10.vue.d.cts +5 -5
  141. package/dist/index10.vue.d.ts +3 -3
  142. package/dist/index11.vue.d.cts +3 -3
  143. package/dist/index11.vue.d.ts +2 -2
  144. package/dist/index12.vue.d.cts +2 -2
  145. package/dist/index12.vue.d.ts +1 -1
  146. package/dist/index13.vue.d.cts +1 -1
  147. package/dist/index14.vue.d.ts +9 -9
  148. package/dist/index15.vue.d.cts +9 -9
  149. package/dist/index15.vue.d.ts +1 -1
  150. package/dist/index16.vue.d.cts +1 -1
  151. package/dist/index18.vue.d.ts +4 -4
  152. package/dist/index19.vue.d.cts +4 -4
  153. package/dist/index19.vue.d.ts +2 -9
  154. package/dist/index2.vue.d.cts +2 -2
  155. package/dist/index2.vue.d.ts +2 -2
  156. package/dist/index20.vue.d.cts +1 -1
  157. package/dist/index20.vue.d.ts +1 -1
  158. package/dist/index21.vue.d.cts +2 -2
  159. package/dist/index21.vue.d.ts +2 -2
  160. package/dist/index22.vue.d.cts +1 -1
  161. package/dist/index22.vue.d.ts +1 -1
  162. package/dist/index23.vue.d.cts +1 -1
  163. package/dist/index23.vue.d.ts +1 -1
  164. package/dist/index25.vue.d.cts +4 -4
  165. package/dist/index25.vue.d.ts +4 -4
  166. package/dist/index26.vue.d.cts +1 -1
  167. package/dist/index26.vue.d.ts +1 -1
  168. package/dist/index27.vue.d.cts +5 -5
  169. package/dist/index27.vue.d.ts +5 -5
  170. package/dist/index28.vue.d.cts +3 -3
  171. package/dist/index28.vue.d.ts +3 -3
  172. package/dist/index3.vue.d.cts +3 -3
  173. package/dist/index3.vue.d.ts +3 -3
  174. package/dist/index4.vue.d.cts +2 -9
  175. package/dist/index6.vue.d.ts +4 -4
  176. package/dist/index7.vue.d.cts +4 -4
  177. package/dist/index8.vue.d.ts +3 -3
  178. package/dist/index9.vue.d.cts +3 -3
  179. package/dist/index9.vue.d.ts +5 -5
  180. package/dist/mapUtils.d.cts +5 -5
  181. package/dist/mapUtils.d.ts +5 -5
  182. package/dist/presets.d.cts +8 -2
  183. package/dist/presets.d.ts +8 -2
  184. package/dist/rate.cjs +1 -0
  185. package/dist/rate.js +1 -0
  186. package/dist/slider.cjs +1 -0
  187. package/dist/slider.js +1 -0
  188. package/dist/style.css +10725 -10722
  189. package/dist/time-picker.cjs +1 -0
  190. package/dist/time-picker.js +1 -0
  191. package/dist/upload.cjs +1 -0
  192. package/dist/upload.js +1 -0
  193. package/dist/useActionTask.cjs +1 -0
  194. package/dist/useActionTask.js +1 -0
  195. package/dist/useCalendarEvents.d.cts +2 -2
  196. package/dist/useCalendarEvents.d.ts +2 -2
  197. package/dist/useCollapsePanel.d.cts +5 -5
  198. package/dist/useCollapsePanel.d.ts +5 -5
  199. package/dist/useComponentLocale.cjs +1 -0
  200. package/dist/useComponentLocale.js +1 -0
  201. package/dist/useCropperCore.d.cts +8 -8
  202. package/dist/useCropperCore.d.ts +8 -8
  203. package/dist/useDraggableLayout.d.cts +9 -9
  204. package/dist/useDraggableLayout.d.ts +9 -9
  205. package/dist/useDynamicFormState.cjs +1 -0
  206. package/dist/useDynamicFormState.d.cts +64 -40
  207. package/dist/useDynamicFormState.d.ts +64 -40
  208. package/dist/useDynamicFormState.js +1 -0
  209. package/dist/useEdgeInteraction.d.cts +2 -2
  210. package/dist/useEdgeInteraction.d.ts +2 -2
  211. package/dist/useQRCode.d.cts +2 -2
  212. package/dist/useQRCode.d.ts +2 -2
  213. package/dist/useSearchState.d.cts +14 -724
  214. package/dist/useSearchState.d.ts +14 -833
  215. package/dist/useSignatureHistory.d.cts +3 -3
  216. package/dist/useSignatureHistory.d.ts +3 -3
  217. package/dist/useSplitResize.d.cts +5 -5
  218. package/dist/useSplitResize.d.ts +5 -5
  219. package/dist/useTableQuery.cjs +3 -3
  220. package/dist/useTableQuery.d.cts +66 -33
  221. package/dist/useTableQuery.d.ts +66 -33
  222. package/dist/useTableQuery.js +3 -3
  223. package/dist/useTimeSelection.d.cts +2 -2
  224. package/dist/useTimeSelection.d.ts +2 -2
  225. package/dist/useTreeOperations.d.cts +7 -7
  226. package/dist/useTreeOperations.d.ts +7 -7
  227. package/dist/useWorkflowValidation.d.cts +5 -5
  228. package/dist/useWorkflowValidation.d.ts +5 -5
  229. package/dist/verification.d.cts +1 -1
  230. package/dist/verification.d.ts +1 -1
  231. package/docs/architecture.en.md +83 -0
  232. package/docs/architecture.md +83 -0
  233. package/docs/assets/README.md +47 -0
  234. package/docs/assets/naive-ui-components-banner.png +0 -0
  235. package/docs/assets/naive-ui-components-banner.svg +69 -0
  236. package/docs/assets/naive-ui-components-logo.png +0 -0
  237. package/docs/assets/naive-ui-components-logo.svg +22 -0
  238. package/docs/components.en.md +118 -0
  239. package/docs/components.md +118 -0
  240. package/docs/engineering.en.md +132 -0
  241. package/docs/engineering.md +133 -0
  242. package/docs/guides/notification-center.md +95 -0
  243. package/docs/guides/usage.en.md +638 -0
  244. package/docs/guides/usage.md +699 -0
  245. package/docs/performance-0.15.0.md +20 -0
  246. package/docs/security-scan-2026-10-06.md +11 -0
  247. package/docs/security-scan-2026-10-18.md +16 -0
  248. package/package.json +29 -11
  249. package/dist/C_Form2.cjs +0 -1
  250. package/dist/C_Form2.js +0 -1
  251. package/dist/config.cjs +0 -1
  252. package/dist/config.d.cts +0 -33
  253. package/dist/config.d.ts +0 -33
  254. package/dist/config.js +0 -1
@@ -1,12 +1,6 @@
1
1
  :root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
2
2
 
3
- /* unplugin-vue-components disabled */
4
- /* layer: default */
5
- .inline-flex[data-v-075758a0]{display:inline-flex;}
6
- .transform[data-v-075758a0]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
7
- .px[data-v-075758a0]{padding-left:1rem;padding-right:1rem;}
8
-
9
- /* unplugin-vue-components disabled */.c-icon[data-v-075758a0] {
3
+ .c-icon[data-v-075758a0] {
10
4
  display: inline-flex;
11
5
  align-items: center;
12
6
  justify-content: center;
@@ -65,202 +59,13 @@
65
59
  transform: rotate(360deg);
66
60
  }
67
61
  }
68
- /* unplugin-vue-components disabled *//* 公式工作区:变量、原生输入与试算结果共享一个模型。 */
69
- .c-formula[data-v-b006a294] {
70
- container: formula-editor/inline-size;
71
- overflow: auto;
72
- border: 1px solid var(--c-border);
73
- border-radius: 16px;
74
- background: var(--c-bg-card);
75
- color: var(--c-text-2);
76
- }
77
- .c-formula h2[data-v-b006a294],
78
- .c-formula p[data-v-b006a294] {
79
- margin: 0;
80
- }
81
- .c-formula__title-row[data-v-b006a294] {
82
- display: flex;
83
- align-items: center;
84
- justify-content: space-between;
85
- flex-wrap: wrap;
86
- gap: 16px;
87
- padding: 24px;
88
- border-bottom: 1px solid var(--c-border);
89
- }
90
- .c-formula__title-row h2[data-v-b006a294] {
91
- margin-top: 8px;
92
- color: var(--c-text-1);
93
- font-size: 22px;
94
- letter-spacing: -0.4px;
95
- }
96
- .c-formula__title-row p[data-v-b006a294] {
97
- margin-top: 6px;
98
- font-size: 13px;
99
- }
100
- .c-formula__eyebrow[data-v-b006a294] {
101
- color: var(--c-primary);
102
- font: 600 10px ui-monospace, monospace;
103
- letter-spacing: 2px;
104
- }
105
- .c-formula__actions[data-v-b006a294] {
106
- display: flex;
107
- align-items: center;
108
- gap: 12px;
109
- }
110
- .c-formula__templates[data-v-b006a294] {
111
- display: grid;
112
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
113
- gap: 8px;
114
- padding: 16px 24px;
115
- border-bottom: 1px solid var(--c-border);
116
- }
117
- .c-formula__templates button[data-v-b006a294] {
118
- appearance: none;
119
- display: flex;
120
- flex-direction: column;
121
- text-align: left;
122
- gap: 4px;
123
- border: 1px solid var(--c-border);
124
- border-radius: 10px;
125
- padding: 12px 16px;
126
- background: transparent;
127
- color: var(--c-text-2);
128
- font: inherit;
129
- cursor: pointer;
130
- }
131
- .c-formula__templates button strong[data-v-b006a294] {
132
- color: var(--c-text-1);
133
- font-size: 12px;
134
- }
135
- .c-formula__templates button span[data-v-b006a294] {
136
- font-size: 11px;
137
- }
138
- .c-formula__templates button[aria-pressed=true][data-v-b006a294], .c-formula__templates button[data-v-b006a294]:hover:enabled {
139
- border-color: var(--c-primary);
140
- background: color-mix(in srgb, var(--c-primary) 6%, transparent);
141
- }
142
- .c-formula__templates button[data-v-b006a294]:disabled {
143
- opacity: 0.5;
144
- cursor: not-allowed;
145
- }
146
- .c-formula__templates button[data-v-b006a294]:focus-visible {
147
- outline: 2px solid var(--c-primary);
148
- outline-offset: 2px;
149
- }
150
- .c-formula__body[data-v-b006a294] {
151
- display: grid;
152
- grid-template-columns: 210px minmax(0, 1fr) 300px;
153
- align-items: stretch;
154
- }
155
- .c-formula__body--no-sidebar[data-v-b006a294] {
156
- grid-template-columns: minmax(0, 1fr) 300px;
157
- }
158
- .c-formula__body--no-preview[data-v-b006a294] {
159
- grid-template-columns: 210px minmax(0, 1fr);
160
- }
161
- .c-formula__body--no-sidebar.c-formula__body--no-preview[data-v-b006a294] {
162
- grid-template-columns: minmax(0, 1fr);
163
- }
164
- .c-formula__sidebar[data-v-b006a294] {
165
- min-width: 0;
166
- border-right: 1px solid var(--c-border);
167
- }
168
- .c-formula__main[data-v-b006a294] {
169
- min-width: 0;
170
- padding: 24px;
171
- }
172
- .c-formula__keyboard[data-v-b006a294] {
173
- margin-top: 20px;
174
- border: 1px solid var(--c-border);
175
- border-radius: 12px;
176
- background: color-mix(in srgb, var(--c-primary) 2%, var(--c-bg-card));
177
- }
178
- .c-formula__keyboard summary[data-v-b006a294] {
179
- display: flex;
180
- align-items: center;
181
- gap: 10px;
182
- padding: 12px 16px;
183
- list-style: none;
184
- font-size: 12px;
185
- cursor: pointer;
186
- color: var(--c-primary);
187
- }
188
- .c-formula__keyboard summary[data-v-b006a294]::-webkit-details-marker {
189
- display: none;
190
- }
191
- .c-formula__keyboard summary[data-v-b006a294]:focus-visible {
192
- outline: 2px solid var(--c-primary);
193
- outline-offset: 2px;
194
- }
195
- .c-formula__keyboard[open] summary[data-v-b006a294] {
196
- border-bottom: 1px solid var(--c-border);
197
- }
198
- .c-formula__keyboard[open] .c-formula__keyboard-chevron[data-v-b006a294] {
199
- transform: rotate(180deg);
200
- }
201
- .c-formula__keyboard-title[data-v-b006a294] {
202
- min-width: 0;
203
- flex: 1;
204
- color: var(--c-text-1);
205
- font-weight: 600;
206
- }
207
- .c-formula__keyboard-title small[data-v-b006a294] {
208
- display: block;
209
- margin-top: 3px;
210
- color: var(--c-text-3);
211
- font-size: 11px;
212
- font-weight: 400;
213
- }
214
- .c-formula__keyboard-chevron[data-v-b006a294] {
215
- flex-shrink: 0;
216
- }
217
- .c-formula__guide[data-v-b006a294] {
218
- display: flex;
219
- align-items: flex-start;
220
- gap: 8px;
221
- margin-top: 20px;
222
- font-size: 11px;
223
- color: var(--c-text-3);
224
- line-height: 1.8;
225
- }
226
- .c-formula__guide[data-v-b006a294] > :first-child {
227
- flex-shrink: 0;
228
- margin-top: 3px;
229
- }
230
- .c-formula__guide code[data-v-b006a294] {
231
- color: var(--c-primary);
232
- }
233
- @container formula-editor (max-width: 980px) {
234
- .c-formula__body[data-v-b006a294] {
235
- grid-template-columns: 190px minmax(0, 1fr);
236
- }
237
- .c-formula__body--no-sidebar[data-v-b006a294] {
238
- grid-template-columns: minmax(0, 1fr);
239
- }
240
- .c-formula__body[data-v-b006a294] > .formula-preview {
241
- grid-column: 1/-1;
242
- border-left: 0;
243
- border-top: 1px solid var(--c-border);
244
- }
245
- }
246
- @container formula-editor (max-width: 580px) {
247
- .c-formula__body[data-v-b006a294] {
248
- grid-template-columns: minmax(0, 1fr);
249
- }
250
- .c-formula__sidebar[data-v-b006a294] {
251
- border-right: 0;
252
- border-bottom: 1px solid var(--c-border);
253
- }
254
- .c-formula__title-row[data-v-b006a294],
255
- .c-formula__main[data-v-b006a294] {
256
- padding: 18px;
257
- }
258
- }
259
- /* unplugin-vue-components disabled */
62
+
260
63
  /* layer: default */
261
- .px[data-v-b006a294]{padding-left:1rem;padding-right:1rem;}
64
+ .inline-flex[data-v-075758a0]{display:inline-flex;}
65
+ .transform[data-v-075758a0]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
66
+ .px[data-v-075758a0]{padding-left:1rem;padding-right:1rem;}
262
67
 
263
- /* unplugin-vue-components disabled *//* 原生文本输入与转义后的结构预览,避免 contenteditable 光标和样式副作用。 */
68
+ /* 原生文本输入与转义后的结构预览,避免 contenteditable 光标和样式副作用。 */
264
69
  .formula-input__header[data-v-5b2f30eb] {
265
70
  display: flex;
266
71
  justify-content: space-between;
@@ -369,7 +174,7 @@
369
174
  .formula-input .formula-token--number[data-v-5b2f30eb] {
370
175
  color: var(--c-warning);
371
176
  }
372
- /* unplugin-vue-components disabled *//* 隔离试算值与明确结果,组件宽度变化时自然换行。 */
177
+ /* 隔离试算值与明确结果,组件宽度变化时自然换行。 */
373
178
  .formula-preview[data-v-b2656900] {
374
179
  min-width: 0;
375
180
  padding: 24px;
@@ -475,7 +280,7 @@
475
280
  padding-top: 16px;
476
281
  border-top: 1px solid var(--c-border);
477
282
  }
478
- /* unplugin-vue-components disabled *//* VariablePanel 组件样式 */
283
+ /* VariablePanel 组件样式 */
479
284
  .variable-panel[data-v-2d73fec7] {
480
285
  display: flex;
481
286
  flex-direction: column;
@@ -635,7 +440,7 @@
635
440
  color: var(--c-text-3);
636
441
  margin-top: 3px;
637
442
  }
638
- /* unplugin-vue-components disabled *//*
443
+ /*
639
444
  * @Author: ChenYu ycyplus@gmail.com
640
445
  * @Date: 2026-10-07
641
446
  * @Description: 主题驱动的公式键帽与容器响应式布局
@@ -826,4 +631,198 @@
826
631
  .virtual-keyboard__key[data-v-05f0982d] {
827
632
  transition: none;
828
633
  }
829
- }
634
+ }
635
+ /* 公式工作区:变量、原生输入与试算结果共享一个模型。 */
636
+ .c-formula[data-v-b006a294] {
637
+ container: formula-editor/inline-size;
638
+ overflow: auto;
639
+ border: 1px solid var(--c-border);
640
+ border-radius: 16px;
641
+ background: var(--c-bg-card);
642
+ color: var(--c-text-2);
643
+ }
644
+ .c-formula h2[data-v-b006a294],
645
+ .c-formula p[data-v-b006a294] {
646
+ margin: 0;
647
+ }
648
+ .c-formula__title-row[data-v-b006a294] {
649
+ display: flex;
650
+ align-items: center;
651
+ justify-content: space-between;
652
+ flex-wrap: wrap;
653
+ gap: 16px;
654
+ padding: 24px;
655
+ border-bottom: 1px solid var(--c-border);
656
+ }
657
+ .c-formula__title-row h2[data-v-b006a294] {
658
+ margin-top: 8px;
659
+ color: var(--c-text-1);
660
+ font-size: 22px;
661
+ letter-spacing: -0.4px;
662
+ }
663
+ .c-formula__title-row p[data-v-b006a294] {
664
+ margin-top: 6px;
665
+ font-size: 13px;
666
+ }
667
+ .c-formula__eyebrow[data-v-b006a294] {
668
+ color: var(--c-primary);
669
+ font: 600 10px ui-monospace, monospace;
670
+ letter-spacing: 2px;
671
+ }
672
+ .c-formula__actions[data-v-b006a294] {
673
+ display: flex;
674
+ align-items: center;
675
+ gap: 12px;
676
+ }
677
+ .c-formula__templates[data-v-b006a294] {
678
+ display: grid;
679
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr));
680
+ gap: 8px;
681
+ padding: 16px 24px;
682
+ border-bottom: 1px solid var(--c-border);
683
+ }
684
+ .c-formula__templates button[data-v-b006a294] {
685
+ appearance: none;
686
+ display: flex;
687
+ flex-direction: column;
688
+ text-align: left;
689
+ gap: 4px;
690
+ border: 1px solid var(--c-border);
691
+ border-radius: 10px;
692
+ padding: 12px 16px;
693
+ background: transparent;
694
+ color: var(--c-text-2);
695
+ font: inherit;
696
+ cursor: pointer;
697
+ }
698
+ .c-formula__templates button strong[data-v-b006a294] {
699
+ color: var(--c-text-1);
700
+ font-size: 12px;
701
+ }
702
+ .c-formula__templates button span[data-v-b006a294] {
703
+ font-size: 11px;
704
+ }
705
+ .c-formula__templates button[aria-pressed=true][data-v-b006a294], .c-formula__templates button[data-v-b006a294]:hover:enabled {
706
+ border-color: var(--c-primary);
707
+ background: color-mix(in srgb, var(--c-primary) 6%, transparent);
708
+ }
709
+ .c-formula__templates button[data-v-b006a294]:disabled {
710
+ opacity: 0.5;
711
+ cursor: not-allowed;
712
+ }
713
+ .c-formula__templates button[data-v-b006a294]:focus-visible {
714
+ outline: 2px solid var(--c-primary);
715
+ outline-offset: 2px;
716
+ }
717
+ .c-formula__body[data-v-b006a294] {
718
+ display: grid;
719
+ grid-template-columns: 210px minmax(0, 1fr) 300px;
720
+ align-items: stretch;
721
+ }
722
+ .c-formula__body--no-sidebar[data-v-b006a294] {
723
+ grid-template-columns: minmax(0, 1fr) 300px;
724
+ }
725
+ .c-formula__body--no-preview[data-v-b006a294] {
726
+ grid-template-columns: 210px minmax(0, 1fr);
727
+ }
728
+ .c-formula__body--no-sidebar.c-formula__body--no-preview[data-v-b006a294] {
729
+ grid-template-columns: minmax(0, 1fr);
730
+ }
731
+ .c-formula__sidebar[data-v-b006a294] {
732
+ min-width: 0;
733
+ border-right: 1px solid var(--c-border);
734
+ }
735
+ .c-formula__main[data-v-b006a294] {
736
+ min-width: 0;
737
+ padding: 24px;
738
+ }
739
+ .c-formula__keyboard[data-v-b006a294] {
740
+ margin-top: 20px;
741
+ border: 1px solid var(--c-border);
742
+ border-radius: 12px;
743
+ background: color-mix(in srgb, var(--c-primary) 2%, var(--c-bg-card));
744
+ }
745
+ .c-formula__keyboard summary[data-v-b006a294] {
746
+ display: flex;
747
+ align-items: center;
748
+ gap: 10px;
749
+ padding: 12px 16px;
750
+ list-style: none;
751
+ font-size: 12px;
752
+ cursor: pointer;
753
+ color: var(--c-primary);
754
+ }
755
+ .c-formula__keyboard summary[data-v-b006a294]::-webkit-details-marker {
756
+ display: none;
757
+ }
758
+ .c-formula__keyboard summary[data-v-b006a294]:focus-visible {
759
+ outline: 2px solid var(--c-primary);
760
+ outline-offset: 2px;
761
+ }
762
+ .c-formula__keyboard[open] summary[data-v-b006a294] {
763
+ border-bottom: 1px solid var(--c-border);
764
+ }
765
+ .c-formula__keyboard[open] .c-formula__keyboard-chevron[data-v-b006a294] {
766
+ transform: rotate(180deg);
767
+ }
768
+ .c-formula__keyboard-title[data-v-b006a294] {
769
+ min-width: 0;
770
+ flex: 1;
771
+ color: var(--c-text-1);
772
+ font-weight: 600;
773
+ }
774
+ .c-formula__keyboard-title small[data-v-b006a294] {
775
+ display: block;
776
+ margin-top: 3px;
777
+ color: var(--c-text-3);
778
+ font-size: 11px;
779
+ font-weight: 400;
780
+ }
781
+ .c-formula__keyboard-chevron[data-v-b006a294] {
782
+ flex-shrink: 0;
783
+ }
784
+ .c-formula__guide[data-v-b006a294] {
785
+ display: flex;
786
+ align-items: flex-start;
787
+ gap: 8px;
788
+ margin-top: 20px;
789
+ font-size: 11px;
790
+ color: var(--c-text-3);
791
+ line-height: 1.8;
792
+ }
793
+ .c-formula__guide[data-v-b006a294] > :first-child {
794
+ flex-shrink: 0;
795
+ margin-top: 3px;
796
+ }
797
+ .c-formula__guide code[data-v-b006a294] {
798
+ color: var(--c-primary);
799
+ }
800
+ @container formula-editor (max-width: 980px) {
801
+ .c-formula__body[data-v-b006a294] {
802
+ grid-template-columns: 190px minmax(0, 1fr);
803
+ }
804
+ .c-formula__body--no-sidebar[data-v-b006a294] {
805
+ grid-template-columns: minmax(0, 1fr);
806
+ }
807
+ .c-formula__body[data-v-b006a294] > .formula-preview {
808
+ grid-column: 1/-1;
809
+ border-left: 0;
810
+ border-top: 1px solid var(--c-border);
811
+ }
812
+ }
813
+ @container formula-editor (max-width: 580px) {
814
+ .c-formula__body[data-v-b006a294] {
815
+ grid-template-columns: minmax(0, 1fr);
816
+ }
817
+ .c-formula__sidebar[data-v-b006a294] {
818
+ border-right: 0;
819
+ border-bottom: 1px solid var(--c-border);
820
+ }
821
+ .c-formula__title-row[data-v-b006a294],
822
+ .c-formula__main[data-v-b006a294] {
823
+ padding: 18px;
824
+ }
825
+ }
826
+
827
+ /* layer: default */
828
+ .px[data-v-b006a294]{padding-left:1rem;padding-right:1rem;}
@@ -1,26 +1,24 @@
1
1
  :root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
2
2
 
3
- /* unplugin-vue-components disabled */
4
- .c-full-calendar[data-v-a9cd14da] {
3
+
4
+ .c-full-calendar[data-v-01d32289] {
5
5
  width: 100%;
6
6
  }
7
- .event-color-swatch[data-v-a9cd14da] {
7
+ .event-color-swatch[data-v-01d32289] {
8
8
  cursor: pointer;
9
9
  }
10
- .event-color-swatch[data-v-a9cd14da]:focus-visible {
10
+ .event-color-swatch[data-v-01d32289]:focus-visible {
11
11
  outline: 2px solid #3f86ff;
12
12
  outline-offset: 2px;
13
13
  }
14
14
 
15
- /* unplugin-vue-components disabled */
15
+
16
16
  /* layer: default */
17
- .grid[data-v-a9cd14da]{display:grid;}
18
- .ml-10\%[data-v-a9cd14da]{margin-left:10%;}
19
- .mt-20px[data-v-a9cd14da]{margin-top:20px;}
20
- .block[data-v-a9cd14da]{display:block;}
21
- .flex[data-v-a9cd14da]{display:flex;}
22
- .table[data-v-a9cd14da]{display:table;}
23
- .border[data-v-a9cd14da]{border-width:1px;}
24
- .outline[data-v-a9cd14da]{outline-style:solid;}
25
- .filter[data-v-a9cd14da]{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia);}
26
- .transition[data-v-a9cd14da]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
17
+ .grid[data-v-01d32289]{display:grid;}
18
+ .ml-10\%[data-v-01d32289]{margin-left:10%;}
19
+ .mt-20px[data-v-01d32289]{margin-top:20px;}
20
+ .block[data-v-01d32289]{display:block;}
21
+ .flex[data-v-01d32289]{display:flex;}
22
+ .border[data-v-01d32289]{border-width:1px;}
23
+ .outline[data-v-01d32289]{outline-style:solid;}
24
+ .transition[data-v-01d32289]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
@@ -1 +1 @@
1
- const e=require(`./chunk.cjs`),t=require(`./config.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`@fullcalendar/vue3`);a=e.t(a);let o=require(`@fullcalendar/daygrid`);o=e.t(o);let s=require(`@fullcalendar/interaction`);s=e.t(s);let c=require(`@fullcalendar/list`);c=e.t(c);let l=require(`@fullcalendar/core/locales/zh-cn`);l=e.t(l);const u=[`#3f86ff`,`#ff6b6b`,`#67c23a`,`#e6a23c`,`#9c27b0`,`#00bcd4`,`#ff5722`],d={id:``,title:``,date:Date.now(),startTime:`09:00`,endTime:`10:00`,color:`#3f86ff`},f={left:`prev,next today`,center:`title`,right:`dayGridMonth,dayGridWeek,dayGridDay,listWeek`},p={today:`今天`,month:`月`,week:`周`,day:`日`,list:`列表`},m=/^([01]\d|2[0-3]):([0-5]\d)$/;function h(e,t,n){if(e===null||!Number.isFinite(e))return null;let r=m.exec(t),i=m.exec(n);if(!r||!i)return null;let a=Number(r[1])*60+Number(r[2]),o=Number(i[1])*60+Number(i[2]);if(o<=a)return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let c=e=>new Date(s.getFullYear(),s.getMonth(),s.getDate(),Math.floor(e/60),e%60),l=c(a),u=c(o);return l.getHours()*60+l.getMinutes()!==a||u.getHours()*60+u.getMinutes()!==o?null:{start:l,end:u}}let g=0;const _=()=>globalThis.crypto?.randomUUID?.()??`calendar-${Date.now()}-${++g}`;function v(e,n){let i=t.r(),a=(0,r.ref)(null),m=(0,r.ref)([...e.events??[]]),g=(0,r.ref)(!1),v=(0,r.ref)(!1),y=(0,r.ref)(!1),b=(0,r.shallowRef)(null),x=(0,r.ref)({...d}),S=e=>{m.value=[...m.value,e],n(`update:events`,m.value)},C=e=>{let t=m.value.findIndex(t=>t.id===e.id);t!==-1&&(m.value=m.value.map((n,r)=>r===t?{...n,...e}:n),n(`update:events`,m.value))},w=e=>{m.value=m.value.filter(t=>t.id!==e),n(`update:events`,m.value)};function T(t){e.editable&&(t.jsEvent.preventDefault(),b.value=t.event,e.showEditDialog&&(g.value=!0))}function E(t){!e.editable||!e.showAddDialog||k(t.date)}function D(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};C(t),n(`event-dropped`,t),i.success(`事件 "${e.event.title}" 时间已更新`)}function O(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};C(t),n(`event-updated`,t)}function k(e){y.value=!1,x.value={...d,date:e.getTime(),color:u[Math.floor(Math.random()*u.length)]},v.value=!0}function A(){let e=b.value;if(!e?.start)return;let{start:t}=e;y.value=!0;let n=new Date(t),r=e.end&&!e.allDay?new Date(e.end):new Date(t.getTime()+36e5);x.value={id:e.id,title:e.title,date:n.getTime(),startTime:`${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`,endTime:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`,color:e.backgroundColor||`#3f86ff`},g.value=!1,v.value=!0}function j(){if(!x.value.title.trim())return i.error(`请输入事件标题`),!1;let e=h(x.value.date,x.value.startTime,x.value.endTime);if(!e)return i.error(`请选择有效日期和时间,且结束时间须晚于开始时间`),!1;if(y.value&&!m.value.some(e=>e.id===x.value.id))return i.error(`事件已不存在,请刷新后重试`),!1;let t={id:y.value?x.value.id:_(),title:x.value.title.trim(),...e,color:x.value.color};return y.value?(C(t),n(`event-updated`,t),i.success(`事件已更新`)):(S(t),n(`event-added`,t),i.success(`事件已添加`)),v.value=!1,!0}function M(){if(!b.value)return;let{id:e,title:t}=b.value;if(!m.value.some(t=>t.id===e)){g.value=!1;return}w(e),n(`event-deleted`,{id:e,title:t}),g.value=!1,i.success(`已删除事件: ${t}`)}let N=(0,r.shallowRef)({plugins:[o.default,s.default,c.default],locale:l.default,initialView:e.initialView??`dayGridMonth`,events:m.value,headerToolbar:f,buttonText:p,editable:e.editable??!0,eventClick:T,dateClick:E,eventDrop:D,eventResize:O});return(0,r.watch)(()=>e.events,e=>{m.value=[...e??[]]},{deep:!0}),(0,r.watch)(m,e=>{N.value={...N.value,events:e}},{deep:!0}),(0,r.watch)(()=>e.editable,e=>{N.value={...N.value,editable:e??!0}}),(0,r.watch)(()=>e.initialView,e=>{e&&a.value?.getApi().changeView(e)}),{calendarRef:a,calendarOptions:N,showActionDialog:g,showEditModal:v,isEditing:y,selectedEvent:b,editForm:x,eventColors:u,openEditModal:A,saveEvent:j,deleteEvent:M,expose:{getApi:()=>a.value?.getApi(),addEvent:S,updateEvent:C,deleteEvent:w,getEvents:()=>m.value.map(e=>({...e,start:e.start instanceof Date?new Date(e.start):e.start,end:e.end instanceof Date?new Date(e.end):e.end}))}}}const y={class:`c-full-calendar`},b={class:`ml-10% mt-20px`},x={style:{padding:`20px`}},S={style:{"margin-bottom":`16px`}},C={style:{"margin-bottom":`16px`}},w={style:{display:`grid`,"grid-template-columns":`1fr 1fr`,gap:`16px`}},T={style:{"margin-top":`16px`}},E={style:{display:`flex`,gap:`8px`}},D=[`aria-label`,`aria-pressed`,`onClick`],O=(0,r.defineComponent)({name:`C_FullCalendar`,__name:`index`,props:{events:{default:()=>[]},initialView:{default:`dayGridMonth`},editable:{type:Boolean,default:!0},showAddDialog:{type:Boolean,default:!0},showEditDialog:{type:Boolean,default:!0}},emits:[`update:events`,`event-added`,`event-updated`,`event-deleted`,`event-dropped`],setup(e,{expose:t,emit:n}){let{calendarRef:o,calendarOptions:s,showActionDialog:c,showEditModal:l,isEditing:u,selectedEvent:d,editForm:f,eventColors:p,openEditModal:m,saveEvent:h,deleteEvent:g,expose:_}=v(e,n);return t(_),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,y,[(0,r.createVNode)((0,r.unref)(a.default),{ref_key:`calendarRef`,ref:o,options:(0,r.unref)(s)},null,8,[`options`]),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NModal),{key:0,show:(0,r.unref)(c),"onUpdate:show":t[0]||=e=>(0,r.isRef)(c)?c.value=e:null,preset:`dialog`,title:`事件操作 - ${(0,r.unref)(d)?.title}`,style:{width:`400px`}},{default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,b,[(0,r.createVNode)((0,r.unref)(i.NButton),{type:`primary`,onClick:(0,r.unref)(m),style:{"margin-right":`12px`},size:`small`},{default:(0,r.withCtx)(()=>[...t[6]||=[(0,r.createTextVNode)(` 编辑 `,-1)]]),_:1},8,[`onClick`]),(0,r.createVNode)((0,r.unref)(i.NButton),{type:`error`,onClick:(0,r.unref)(g),size:`small`},{default:(0,r.withCtx)(()=>[...t[7]||=[(0,r.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),_:1},8,[`show`,`title`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NModal),{show:(0,r.unref)(l),"onUpdate:show":t[5]||=e=>(0,r.isRef)(l)?l.value=e:null,preset:`dialog`,title:(0,r.unref)(u)?`编辑事件`:`添加事件`,"positive-text":`保存`,"negative-text":`取消`,onPositiveClick:(0,r.unref)(h)},{default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,x,[(0,r.createElementVNode)(`div`,S,[t[8]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件标题`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).title,"onUpdate:value":t[1]||=e=>(0,r.unref)(f).title=e,placeholder:`请输入事件标题`,"aria-label":`事件标题`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,C,[t[9]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件日期`,-1),(0,r.createVNode)((0,r.unref)(i.NDatePicker),{value:(0,r.unref)(f).date,"onUpdate:value":t[2]||=e=>(0,r.unref)(f).date=e,type:`date`,format:`yyyy-MM-dd`,style:{width:`100%`},"aria-label":`事件日期`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,w,[(0,r.createElementVNode)(`div`,null,[t[10]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`开始时间`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).startTime,"onUpdate:value":t[3]||=e=>(0,r.unref)(f).startTime=e,placeholder:`09:00`,"aria-label":`开始时间(24 小时制)`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,null,[t[11]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`结束时间`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).endTime,"onUpdate:value":t[4]||=e=>(0,r.unref)(f).endTime=e,placeholder:`10:00`,"aria-label":`结束时间(24 小时制)`},null,8,[`value`])])]),(0,r.createElementVNode)(`div`,T,[t[12]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件颜色`,-1),(0,r.createElementVNode)(`div`,E,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(p),e=>((0,r.openBlock)(),(0,r.createElementBlock)(`button`,{key:e,type:`button`,class:`event-color-swatch`,"aria-label":`事件颜色 ${e}`,"aria-pressed":(0,r.unref)(f).color===e,style:(0,r.normalizeStyle)({width:`30px`,height:`30px`,backgroundColor:e,borderRadius:`50%`,border:(0,r.unref)(f).color===e?`3px solid #000`:`2px solid #ddd`}),onClick:t=>(0,r.unref)(f).color=e},null,12,D))),128))])])])]),_:1},8,[`show`,`title`,`onPositiveClick`])]))}});var k=n.t(O,[[`__scopeId`,`data-v-a9cd14da`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return k}});
1
+ const e=require(`./chunk.cjs`),t=require(`./feedback.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`@fullcalendar/vue3`);a=e.t(a);let o=require(`@fullcalendar/daygrid`);o=e.t(o);let s=require(`@fullcalendar/interaction`);s=e.t(s);let c=require(`@fullcalendar/list`);c=e.t(c);let l=require(`@fullcalendar/core/locales/zh-cn`);l=e.t(l);const u=[`#3f86ff`,`#ff6b6b`,`#67c23a`,`#e6a23c`,`#9c27b0`,`#00bcd4`,`#ff5722`],d={id:``,title:``,date:Date.now(),startTime:`09:00`,endTime:`10:00`,color:`#3f86ff`},f={left:`prev,next today`,center:`title`,right:`dayGridMonth,dayGridWeek,dayGridDay,listWeek`},p={today:`今天`,month:`月`,week:`周`,day:`日`,list:`列表`},m=/^([01]\d|2[0-3]):([0-5]\d)$/;function h(e,t,n){if(e===null||!Number.isFinite(e))return null;let r=m.exec(t),i=m.exec(n);if(!r||!i)return null;let a=Number(r[1])*60+Number(r[2]),o=Number(i[1])*60+Number(i[2]);if(o<=a)return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let c=e=>new Date(s.getFullYear(),s.getMonth(),s.getDate(),Math.floor(e/60),e%60),l=c(a),u=c(o);return l.getHours()*60+l.getMinutes()!==a||u.getHours()*60+u.getMinutes()!==o?null:{start:l,end:u}}let g=0;const _=()=>globalThis.crypto?.randomUUID?.()??`calendar-${Date.now()}-${++g}`;function v(e,n){let i=t.t(),a=(0,r.ref)(null),m=(0,r.ref)([...e.events??[]]),g=(0,r.ref)(!1),v=(0,r.ref)(!1),y=(0,r.ref)(!1),b=(0,r.shallowRef)(null),x=(0,r.ref)({...d}),S=e=>{m.value=[...m.value,e],n(`update:events`,m.value)},C=e=>{let t=m.value.findIndex(t=>t.id===e.id);t!==-1&&(m.value=m.value.map((n,r)=>r===t?{...n,...e}:n),n(`update:events`,m.value))},w=e=>{m.value=m.value.filter(t=>t.id!==e),n(`update:events`,m.value)};function T(t){e.editable&&(t.jsEvent.preventDefault(),b.value=t.event,e.showEditDialog&&(g.value=!0))}function E(t){!e.editable||!e.showAddDialog||k(t.date)}function D(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};C(t),n(`event-dropped`,t),i.success(`事件 "${e.event.title}" 时间已更新`)}function O(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};C(t),n(`event-updated`,t)}function k(e){y.value=!1,x.value={...d,date:e.getTime(),color:u[Math.floor(Math.random()*u.length)]},v.value=!0}function A(){let e=b.value;if(!e?.start)return;let{start:t}=e;y.value=!0;let n=new Date(t),r=e.end&&!e.allDay?new Date(e.end):new Date(t.getTime()+36e5);x.value={id:e.id,title:e.title,date:n.getTime(),startTime:`${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`,endTime:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`,color:e.backgroundColor||`#3f86ff`},g.value=!1,v.value=!0}function j(){if(!x.value.title.trim())return i.error(`请输入事件标题`),!1;let e=h(x.value.date,x.value.startTime,x.value.endTime);if(!e)return i.error(`请选择有效日期和时间,且结束时间须晚于开始时间`),!1;if(y.value&&!m.value.some(e=>e.id===x.value.id))return i.error(`事件已不存在,请刷新后重试`),!1;let t={id:y.value?x.value.id:_(),title:x.value.title.trim(),...e,color:x.value.color};return y.value?(C(t),n(`event-updated`,t),i.success(`事件已更新`)):(S(t),n(`event-added`,t),i.success(`事件已添加`)),v.value=!1,!0}function M(){if(!b.value)return;let{id:e,title:t}=b.value;if(!m.value.some(t=>t.id===e)){g.value=!1;return}w(e),n(`event-deleted`,{id:e,title:t}),g.value=!1,i.success(`已删除事件: ${t}`)}let N=(0,r.shallowRef)({plugins:[o.default,s.default,c.default],locale:l.default,initialView:e.initialView??`dayGridMonth`,events:m.value,headerToolbar:f,buttonText:p,editable:e.editable??!0,eventClick:T,dateClick:E,eventDrop:D,eventResize:O});return(0,r.watch)(()=>e.events,e=>{m.value=[...e??[]]},{deep:!0}),(0,r.watch)(m,e=>{N.value={...N.value,events:e}},{deep:!0}),(0,r.watch)(()=>e.editable,e=>{N.value={...N.value,editable:e??!0}}),(0,r.watch)(()=>e.initialView,e=>{e&&a.value?.getApi().changeView(e)}),{calendarRef:a,calendarOptions:N,showActionDialog:g,showEditModal:v,isEditing:y,selectedEvent:b,editForm:x,eventColors:u,openEditModal:A,saveEvent:j,deleteEvent:M,expose:{getApi:()=>a.value?.getApi(),addEvent:S,updateEvent:C,deleteEvent:w,getEvents:()=>m.value.map(e=>({...e,start:e.start instanceof Date?new Date(e.start):e.start,end:e.end instanceof Date?new Date(e.end):e.end}))}}}const y={class:`c-full-calendar`},b={class:`ml-10% mt-20px`},x={style:{padding:`20px`}},S={style:{"margin-bottom":`16px`}},C={style:{"margin-bottom":`16px`}},w={style:{display:`grid`,"grid-template-columns":`1fr 1fr`,gap:`16px`}},T={style:{"margin-top":`16px`}},E={style:{display:`flex`,gap:`8px`}},D=[`aria-label`,`aria-pressed`,`onClick`],O=(0,r.defineComponent)({name:`C_FullCalendar`,__name:`index`,props:{events:{default:()=>[]},initialView:{default:`dayGridMonth`},editable:{type:Boolean,default:!0},showAddDialog:{type:Boolean,default:!0},showEditDialog:{type:Boolean,default:!0}},emits:[`update:events`,`event-added`,`event-updated`,`event-deleted`,`event-dropped`],setup(e,{expose:t,emit:n}){let{calendarRef:o,calendarOptions:s,showActionDialog:c,showEditModal:l,isEditing:u,selectedEvent:d,editForm:f,eventColors:p,openEditModal:m,saveEvent:h,deleteEvent:g,expose:_}=v(e,n);return t(_),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,y,[(0,r.createVNode)((0,r.unref)(a.default),{ref_key:`calendarRef`,ref:o,options:(0,r.unref)(s)},null,8,[`options`]),(0,r.unref)(c)?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NModal),{key:0,show:(0,r.unref)(c),"onUpdate:show":t[0]||=e=>(0,r.isRef)(c)?c.value=e:null,preset:`dialog`,title:`事件操作 - ${(0,r.unref)(d)?.title}`,style:{width:`400px`}},{default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,b,[(0,r.createVNode)((0,r.unref)(i.NButton),{type:`primary`,onClick:(0,r.unref)(m),style:{"margin-right":`12px`},size:`small`},{default:(0,r.withCtx)(()=>[...t[6]||=[(0,r.createTextVNode)(` 编辑 `,-1)]]),_:1},8,[`onClick`]),(0,r.createVNode)((0,r.unref)(i.NButton),{type:`error`,onClick:(0,r.unref)(g),size:`small`},{default:(0,r.withCtx)(()=>[...t[7]||=[(0,r.createTextVNode)(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),_:1},8,[`show`,`title`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NModal),{show:(0,r.unref)(l),"onUpdate:show":t[5]||=e=>(0,r.isRef)(l)?l.value=e:null,preset:`dialog`,title:(0,r.unref)(u)?`编辑事件`:`添加事件`,"positive-text":`保存`,"negative-text":`取消`,onPositiveClick:(0,r.unref)(h)},{default:(0,r.withCtx)(()=>[(0,r.createElementVNode)(`div`,x,[(0,r.createElementVNode)(`div`,S,[t[8]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件标题`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).title,"onUpdate:value":t[1]||=e=>(0,r.unref)(f).title=e,placeholder:`请输入事件标题`,"aria-label":`事件标题`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,C,[t[9]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件日期`,-1),(0,r.createVNode)((0,r.unref)(i.NDatePicker),{value:(0,r.unref)(f).date,"onUpdate:value":t[2]||=e=>(0,r.unref)(f).date=e,type:`date`,format:`yyyy-MM-dd`,style:{width:`100%`},"aria-label":`事件日期`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,w,[(0,r.createElementVNode)(`div`,null,[t[10]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`开始时间`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).startTime,"onUpdate:value":t[3]||=e=>(0,r.unref)(f).startTime=e,placeholder:`09:00`,"aria-label":`开始时间(24 小时制)`},null,8,[`value`])]),(0,r.createElementVNode)(`div`,null,[t[11]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`结束时间`,-1),(0,r.createVNode)((0,r.unref)(i.NInput),{value:(0,r.unref)(f).endTime,"onUpdate:value":t[4]||=e=>(0,r.unref)(f).endTime=e,placeholder:`10:00`,"aria-label":`结束时间(24 小时制)`},null,8,[`value`])])]),(0,r.createElementVNode)(`div`,T,[t[12]||=(0,r.createElementVNode)(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件颜色`,-1),(0,r.createElementVNode)(`div`,E,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)((0,r.unref)(p),e=>((0,r.openBlock)(),(0,r.createElementBlock)(`button`,{key:e,type:`button`,class:`event-color-swatch`,"aria-label":`事件颜色 ${e}`,"aria-pressed":(0,r.unref)(f).color===e,style:(0,r.normalizeStyle)({width:`30px`,height:`30px`,backgroundColor:e,borderRadius:`50%`,border:(0,r.unref)(f).color===e?`3px solid #000`:`2px solid #ddd`}),onClick:t=>(0,r.unref)(f).color=e},null,12,D))),128))])])])]),_:1},8,[`show`,`title`,`onPositiveClick`])]))}});var k=n.t(O,[[`__scopeId`,`data-v-01d32289`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return k}});
@@ -1 +1 @@
1
- import{r as e}from"./config.js";import{t}from"./export-helper.js";import{Fragment as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,isRef as u,normalizeStyle as d,openBlock as f,ref as p,renderList as m,shallowRef as h,unref as g,watch as _,withCtx as v}from"vue";import{NButton as y,NDatePicker as b,NInput as x,NModal as S}from"naive-ui";import C from"@fullcalendar/vue3";import w from"@fullcalendar/daygrid";import T from"@fullcalendar/interaction";import E from"@fullcalendar/list";import D from"@fullcalendar/core/locales/zh-cn";const O=[`#3f86ff`,`#ff6b6b`,`#67c23a`,`#e6a23c`,`#9c27b0`,`#00bcd4`,`#ff5722`],k={id:``,title:``,date:Date.now(),startTime:`09:00`,endTime:`10:00`,color:`#3f86ff`},A={left:`prev,next today`,center:`title`,right:`dayGridMonth,dayGridWeek,dayGridDay,listWeek`},j={today:`今天`,month:`月`,week:`周`,day:`日`,list:`列表`},M=/^([01]\d|2[0-3]):([0-5]\d)$/;function N(e,t,n){if(e===null||!Number.isFinite(e))return null;let r=M.exec(t),i=M.exec(n);if(!r||!i)return null;let a=Number(r[1])*60+Number(r[2]),o=Number(i[1])*60+Number(i[2]);if(o<=a)return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let c=e=>new Date(s.getFullYear(),s.getMonth(),s.getDate(),Math.floor(e/60),e%60),l=c(a),u=c(o);return l.getHours()*60+l.getMinutes()!==a||u.getHours()*60+u.getMinutes()!==o?null:{start:l,end:u}}let P=0;const F=()=>globalThis.crypto?.randomUUID?.()??`calendar-${Date.now()}-${++P}`;function I(t,n){let r=e(),i=p(null),a=p([...t.events??[]]),o=p(!1),s=p(!1),c=p(!1),l=h(null),u=p({...k}),d=e=>{a.value=[...a.value,e],n(`update:events`,a.value)},f=e=>{let t=a.value.findIndex(t=>t.id===e.id);t!==-1&&(a.value=a.value.map((n,r)=>r===t?{...n,...e}:n),n(`update:events`,a.value))},m=e=>{a.value=a.value.filter(t=>t.id!==e),n(`update:events`,a.value)};function g(e){t.editable&&(e.jsEvent.preventDefault(),l.value=e.event,t.showEditDialog&&(o.value=!0))}function v(e){!t.editable||!t.showAddDialog||x(e.date)}function y(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};f(t),n(`event-dropped`,t),r.success(`事件 "${e.event.title}" 时间已更新`)}function b(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};f(t),n(`event-updated`,t)}function x(e){c.value=!1,u.value={...k,date:e.getTime(),color:O[Math.floor(Math.random()*O.length)]},s.value=!0}function S(){let e=l.value;if(!e?.start)return;let{start:t}=e;c.value=!0;let n=new Date(t),r=e.end&&!e.allDay?new Date(e.end):new Date(t.getTime()+36e5);u.value={id:e.id,title:e.title,date:n.getTime(),startTime:`${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`,endTime:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`,color:e.backgroundColor||`#3f86ff`},o.value=!1,s.value=!0}function C(){if(!u.value.title.trim())return r.error(`请输入事件标题`),!1;let e=N(u.value.date,u.value.startTime,u.value.endTime);if(!e)return r.error(`请选择有效日期和时间,且结束时间须晚于开始时间`),!1;if(c.value&&!a.value.some(e=>e.id===u.value.id))return r.error(`事件已不存在,请刷新后重试`),!1;let t={id:c.value?u.value.id:F(),title:u.value.title.trim(),...e,color:u.value.color};return c.value?(f(t),n(`event-updated`,t),r.success(`事件已更新`)):(d(t),n(`event-added`,t),r.success(`事件已添加`)),s.value=!1,!0}function M(){if(!l.value)return;let{id:e,title:t}=l.value;if(!a.value.some(t=>t.id===e)){o.value=!1;return}m(e),n(`event-deleted`,{id:e,title:t}),o.value=!1,r.success(`已删除事件: ${t}`)}let P=h({plugins:[w,T,E],locale:D,initialView:t.initialView??`dayGridMonth`,events:a.value,headerToolbar:A,buttonText:j,editable:t.editable??!0,eventClick:g,dateClick:v,eventDrop:y,eventResize:b});return _(()=>t.events,e=>{a.value=[...e??[]]},{deep:!0}),_(a,e=>{P.value={...P.value,events:e}},{deep:!0}),_(()=>t.editable,e=>{P.value={...P.value,editable:e??!0}}),_(()=>t.initialView,e=>{e&&i.value?.getApi().changeView(e)}),{calendarRef:i,calendarOptions:P,showActionDialog:o,showEditModal:s,isEditing:c,selectedEvent:l,editForm:u,eventColors:O,openEditModal:S,saveEvent:C,deleteEvent:M,expose:{getApi:()=>i.value?.getApi(),addEvent:d,updateEvent:f,deleteEvent:m,getEvents:()=>a.value.map(e=>({...e,start:e.start instanceof Date?new Date(e.start):e.start,end:e.end instanceof Date?new Date(e.end):e.end}))}}}const L={class:`c-full-calendar`},R={class:`ml-10% mt-20px`},z={style:{padding:`20px`}},B={style:{"margin-bottom":`16px`}},V={style:{"margin-bottom":`16px`}},H={style:{display:`grid`,"grid-template-columns":`1fr 1fr`,gap:`16px`}},U={style:{"margin-top":`16px`}},W={style:{display:`flex`,gap:`8px`}},G=[`aria-label`,`aria-pressed`,`onClick`];var K=t(l({name:`C_FullCalendar`,__name:`index`,props:{events:{default:()=>[]},initialView:{default:`dayGridMonth`},editable:{type:Boolean,default:!0},showAddDialog:{type:Boolean,default:!0},showEditDialog:{type:Boolean,default:!0}},emits:[`update:events`,`event-added`,`event-updated`,`event-deleted`,`event-dropped`],setup(e,{expose:t,emit:l}){let{calendarRef:p,calendarOptions:h,showActionDialog:_,showEditModal:w,isEditing:T,selectedEvent:E,editForm:D,eventColors:O,openEditModal:k,saveEvent:A,deleteEvent:j,expose:M}=I(e,l);return t(M),(e,t)=>(f(),a(`div`,L,[c(g(C),{ref_key:`calendarRef`,ref:p,options:g(h)},null,8,[`options`]),g(_)?(f(),r(g(S),{key:0,show:g(_),"onUpdate:show":t[0]||=e=>u(_)?_.value=e:null,preset:`dialog`,title:`事件操作 - ${g(E)?.title}`,style:{width:`400px`}},{default:v(()=>[o(`div`,R,[c(g(y),{type:`primary`,onClick:g(k),style:{"margin-right":`12px`},size:`small`},{default:v(()=>[...t[6]||=[s(` 编辑 `,-1)]]),_:1},8,[`onClick`]),c(g(y),{type:`error`,onClick:g(j),size:`small`},{default:v(()=>[...t[7]||=[s(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),_:1},8,[`show`,`title`])):i(`v-if`,!0),c(g(S),{show:g(w),"onUpdate:show":t[5]||=e=>u(w)?w.value=e:null,preset:`dialog`,title:g(T)?`编辑事件`:`添加事件`,"positive-text":`保存`,"negative-text":`取消`,onPositiveClick:g(A)},{default:v(()=>[o(`div`,z,[o(`div`,B,[t[8]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件标题`,-1),c(g(x),{value:g(D).title,"onUpdate:value":t[1]||=e=>g(D).title=e,placeholder:`请输入事件标题`,"aria-label":`事件标题`},null,8,[`value`])]),o(`div`,V,[t[9]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件日期`,-1),c(g(b),{value:g(D).date,"onUpdate:value":t[2]||=e=>g(D).date=e,type:`date`,format:`yyyy-MM-dd`,style:{width:`100%`},"aria-label":`事件日期`},null,8,[`value`])]),o(`div`,H,[o(`div`,null,[t[10]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`开始时间`,-1),c(g(x),{value:g(D).startTime,"onUpdate:value":t[3]||=e=>g(D).startTime=e,placeholder:`09:00`,"aria-label":`开始时间(24 小时制)`},null,8,[`value`])]),o(`div`,null,[t[11]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`结束时间`,-1),c(g(x),{value:g(D).endTime,"onUpdate:value":t[4]||=e=>g(D).endTime=e,placeholder:`10:00`,"aria-label":`结束时间(24 小时制)`},null,8,[`value`])])]),o(`div`,U,[t[12]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件颜色`,-1),o(`div`,W,[(f(!0),a(n,null,m(g(O),e=>(f(),a(`button`,{key:e,type:`button`,class:`event-color-swatch`,"aria-label":`事件颜色 ${e}`,"aria-pressed":g(D).color===e,style:d({width:`30px`,height:`30px`,backgroundColor:e,borderRadius:`50%`,border:g(D).color===e?`3px solid #000`:`2px solid #ddd`}),onClick:t=>g(D).color=e},null,12,G))),128))])])])]),_:1},8,[`show`,`title`,`onPositiveClick`])]))}}),[[`__scopeId`,`data-v-a9cd14da`]]);export{O as a,k as i,I as n,A as o,j as r,K as t};
1
+ import{t as e}from"./feedback.js";import{t}from"./export-helper.js";import{Fragment as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,isRef as u,normalizeStyle as d,openBlock as f,ref as p,renderList as m,shallowRef as h,unref as g,watch as _,withCtx as v}from"vue";import{NButton as y,NDatePicker as b,NInput as x,NModal as S}from"naive-ui";import C from"@fullcalendar/vue3";import w from"@fullcalendar/daygrid";import T from"@fullcalendar/interaction";import E from"@fullcalendar/list";import D from"@fullcalendar/core/locales/zh-cn";const O=[`#3f86ff`,`#ff6b6b`,`#67c23a`,`#e6a23c`,`#9c27b0`,`#00bcd4`,`#ff5722`],k={id:``,title:``,date:Date.now(),startTime:`09:00`,endTime:`10:00`,color:`#3f86ff`},A={left:`prev,next today`,center:`title`,right:`dayGridMonth,dayGridWeek,dayGridDay,listWeek`},j={today:`今天`,month:`月`,week:`周`,day:`日`,list:`列表`},M=/^([01]\d|2[0-3]):([0-5]\d)$/;function N(e,t,n){if(e===null||!Number.isFinite(e))return null;let r=M.exec(t),i=M.exec(n);if(!r||!i)return null;let a=Number(r[1])*60+Number(r[2]),o=Number(i[1])*60+Number(i[2]);if(o<=a)return null;let s=new Date(e);if(Number.isNaN(s.getTime()))return null;let c=e=>new Date(s.getFullYear(),s.getMonth(),s.getDate(),Math.floor(e/60),e%60),l=c(a),u=c(o);return l.getHours()*60+l.getMinutes()!==a||u.getHours()*60+u.getMinutes()!==o?null:{start:l,end:u}}let P=0;const F=()=>globalThis.crypto?.randomUUID?.()??`calendar-${Date.now()}-${++P}`;function I(t,n){let r=e(),i=p(null),a=p([...t.events??[]]),o=p(!1),s=p(!1),c=p(!1),l=h(null),u=p({...k}),d=e=>{a.value=[...a.value,e],n(`update:events`,a.value)},f=e=>{let t=a.value.findIndex(t=>t.id===e.id);t!==-1&&(a.value=a.value.map((n,r)=>r===t?{...n,...e}:n),n(`update:events`,a.value))},m=e=>{a.value=a.value.filter(t=>t.id!==e),n(`update:events`,a.value)};function g(e){t.editable&&(e.jsEvent.preventDefault(),l.value=e.event,t.showEditDialog&&(o.value=!0))}function v(e){!t.editable||!t.showAddDialog||x(e.date)}function y(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};f(t),n(`event-dropped`,t),r.success(`事件 "${e.event.title}" 时间已更新`)}function b(e){let t={id:e.event.id,start:e.event.start??void 0,end:e.event.end??void 0};f(t),n(`event-updated`,t)}function x(e){c.value=!1,u.value={...k,date:e.getTime(),color:O[Math.floor(Math.random()*O.length)]},s.value=!0}function S(){let e=l.value;if(!e?.start)return;let{start:t}=e;c.value=!0;let n=new Date(t),r=e.end&&!e.allDay?new Date(e.end):new Date(t.getTime()+36e5);u.value={id:e.id,title:e.title,date:n.getTime(),startTime:`${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`,endTime:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`,color:e.backgroundColor||`#3f86ff`},o.value=!1,s.value=!0}function C(){if(!u.value.title.trim())return r.error(`请输入事件标题`),!1;let e=N(u.value.date,u.value.startTime,u.value.endTime);if(!e)return r.error(`请选择有效日期和时间,且结束时间须晚于开始时间`),!1;if(c.value&&!a.value.some(e=>e.id===u.value.id))return r.error(`事件已不存在,请刷新后重试`),!1;let t={id:c.value?u.value.id:F(),title:u.value.title.trim(),...e,color:u.value.color};return c.value?(f(t),n(`event-updated`,t),r.success(`事件已更新`)):(d(t),n(`event-added`,t),r.success(`事件已添加`)),s.value=!1,!0}function M(){if(!l.value)return;let{id:e,title:t}=l.value;if(!a.value.some(t=>t.id===e)){o.value=!1;return}m(e),n(`event-deleted`,{id:e,title:t}),o.value=!1,r.success(`已删除事件: ${t}`)}let P=h({plugins:[w,T,E],locale:D,initialView:t.initialView??`dayGridMonth`,events:a.value,headerToolbar:A,buttonText:j,editable:t.editable??!0,eventClick:g,dateClick:v,eventDrop:y,eventResize:b});return _(()=>t.events,e=>{a.value=[...e??[]]},{deep:!0}),_(a,e=>{P.value={...P.value,events:e}},{deep:!0}),_(()=>t.editable,e=>{P.value={...P.value,editable:e??!0}}),_(()=>t.initialView,e=>{e&&i.value?.getApi().changeView(e)}),{calendarRef:i,calendarOptions:P,showActionDialog:o,showEditModal:s,isEditing:c,selectedEvent:l,editForm:u,eventColors:O,openEditModal:S,saveEvent:C,deleteEvent:M,expose:{getApi:()=>i.value?.getApi(),addEvent:d,updateEvent:f,deleteEvent:m,getEvents:()=>a.value.map(e=>({...e,start:e.start instanceof Date?new Date(e.start):e.start,end:e.end instanceof Date?new Date(e.end):e.end}))}}}const L={class:`c-full-calendar`},R={class:`ml-10% mt-20px`},z={style:{padding:`20px`}},B={style:{"margin-bottom":`16px`}},V={style:{"margin-bottom":`16px`}},H={style:{display:`grid`,"grid-template-columns":`1fr 1fr`,gap:`16px`}},U={style:{"margin-top":`16px`}},W={style:{display:`flex`,gap:`8px`}},G=[`aria-label`,`aria-pressed`,`onClick`];var K=t(l({name:`C_FullCalendar`,__name:`index`,props:{events:{default:()=>[]},initialView:{default:`dayGridMonth`},editable:{type:Boolean,default:!0},showAddDialog:{type:Boolean,default:!0},showEditDialog:{type:Boolean,default:!0}},emits:[`update:events`,`event-added`,`event-updated`,`event-deleted`,`event-dropped`],setup(e,{expose:t,emit:l}){let{calendarRef:p,calendarOptions:h,showActionDialog:_,showEditModal:w,isEditing:T,selectedEvent:E,editForm:D,eventColors:O,openEditModal:k,saveEvent:A,deleteEvent:j,expose:M}=I(e,l);return t(M),(e,t)=>(f(),a(`div`,L,[c(g(C),{ref_key:`calendarRef`,ref:p,options:g(h)},null,8,[`options`]),g(_)?(f(),r(g(S),{key:0,show:g(_),"onUpdate:show":t[0]||=e=>u(_)?_.value=e:null,preset:`dialog`,title:`事件操作 - ${g(E)?.title}`,style:{width:`400px`}},{default:v(()=>[o(`div`,R,[c(g(y),{type:`primary`,onClick:g(k),style:{"margin-right":`12px`},size:`small`},{default:v(()=>[...t[6]||=[s(` 编辑 `,-1)]]),_:1},8,[`onClick`]),c(g(y),{type:`error`,onClick:g(j),size:`small`},{default:v(()=>[...t[7]||=[s(` 删除 `,-1)]]),_:1},8,[`onClick`])])]),_:1},8,[`show`,`title`])):i(`v-if`,!0),c(g(S),{show:g(w),"onUpdate:show":t[5]||=e=>u(w)?w.value=e:null,preset:`dialog`,title:g(T)?`编辑事件`:`添加事件`,"positive-text":`保存`,"negative-text":`取消`,onPositiveClick:g(A)},{default:v(()=>[o(`div`,z,[o(`div`,B,[t[8]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件标题`,-1),c(g(x),{value:g(D).title,"onUpdate:value":t[1]||=e=>g(D).title=e,placeholder:`请输入事件标题`,"aria-label":`事件标题`},null,8,[`value`])]),o(`div`,V,[t[9]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件日期`,-1),c(g(b),{value:g(D).date,"onUpdate:value":t[2]||=e=>g(D).date=e,type:`date`,format:`yyyy-MM-dd`,style:{width:`100%`},"aria-label":`事件日期`},null,8,[`value`])]),o(`div`,H,[o(`div`,null,[t[10]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`开始时间`,-1),c(g(x),{value:g(D).startTime,"onUpdate:value":t[3]||=e=>g(D).startTime=e,placeholder:`09:00`,"aria-label":`开始时间(24 小时制)`},null,8,[`value`])]),o(`div`,null,[t[11]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`结束时间`,-1),c(g(x),{value:g(D).endTime,"onUpdate:value":t[4]||=e=>g(D).endTime=e,placeholder:`10:00`,"aria-label":`结束时间(24 小时制)`},null,8,[`value`])])]),o(`div`,U,[t[12]||=o(`label`,{style:{display:`block`,"margin-bottom":`8px`,"font-weight":`500`}},`事件颜色`,-1),o(`div`,W,[(f(!0),a(n,null,m(g(O),e=>(f(),a(`button`,{key:e,type:`button`,class:`event-color-swatch`,"aria-label":`事件颜色 ${e}`,"aria-pressed":g(D).color===e,style:d({width:`30px`,height:`30px`,backgroundColor:e,borderRadius:`50%`,border:g(D).color===e?`3px solid #000`:`2px solid #ddd`}),onClick:t=>g(D).color=e},null,12,G))),128))])])])]),_:1},8,[`show`,`title`,`onPositiveClick`])]))}}),[[`__scopeId`,`data-v-01d32289`]]);export{O as a,k as i,I as n,A as o,j as r,K as t};
@@ -1,16 +1,6 @@
1
1
  :root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
2
2
 
3
- /* unplugin-vue-components disabled */
4
- /* layer: icons */
5
- .i-mdi\:clock-time-four-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M12 20c4.4 0 8-3.6 8-8s-3.6-8-8-8s-8 3.6-8 8s3.6 8 8 8m0-18c5.5 0 10 4.5 10 10s-4.5 10-10 10S2 17.5 2 12S6.5 2 12 2m5 11.9l-.7 1.3l-5.3-2.9V7h1.5v4.4z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
6
- .i-mdi\:close[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
7
- .i-mdi\:delete-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6zM8 9h8v10H8zm7.5-5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
8
- .i-mdi\:file-document-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm0 2h7v5h5v11H6zm2 8v2h8v-2zm0 4v2h5v-2z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
9
- .i-mdi\:magnify[data-v-88dfb808],
10
- .i-mdi\:search[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5l-1.5 1.5l-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16A6.5 6.5 0 0 1 3 9.5A6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14S14 12 14 9.5S12 5 9.5 5'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
11
- .i-mdi\:menu[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
12
-
13
- /* unplugin-vue-components disabled */[data-v-88dfb808] .robot-highlight {
3
+ [data-v-88dfb808] .robot-highlight {
14
4
  background: linear-gradient(135deg, rgba(255, 193, 7, 0.25), rgba(255, 193, 7, 0.35));
15
5
  color: inherit;
16
6
  border-radius: 3px;
@@ -622,4 +612,13 @@
622
612
  text-align: center;
623
613
  order: -1;
624
614
  }
625
- }
615
+ }
616
+
617
+ /* layer: icons */
618
+ .i-mdi\:clock-time-four-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M12 20c4.4 0 8-3.6 8-8s-3.6-8-8-8s-8 3.6-8 8s3.6 8 8 8m0-18c5.5 0 10 4.5 10 10s-4.5 10-10 10S2 17.5 2 12S6.5 2 12 2m5 11.9l-.7 1.3l-5.3-2.9V7h1.5v4.4z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
619
+ .i-mdi\:close[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
620
+ .i-mdi\:delete-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6zM8 9h8v10H8zm7.5-5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
621
+ .i-mdi\:file-document-outline[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6zm0 2h7v5h5v11H6zm2 8v2h8v-2zm0 4v2h5v-2z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
622
+ .i-mdi\:magnify[data-v-88dfb808],
623
+ .i-mdi\:search[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5l-1.5 1.5l-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16A6.5 6.5 0 0 1 3 9.5A6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14S14 12 14 9.5S12 5 9.5 5'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}
624
+ .i-mdi\:menu[data-v-88dfb808]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em;}