@qxs-bns/components 0.0.90 → 0.0.91

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 (771) hide show
  1. package/README.md +11 -15
  2. package/es/base/define.mjs +2 -0
  3. package/es/base/define.mjs.map +1 -0
  4. package/es/base/uid.mjs +2 -0
  5. package/es/base/uid.mjs.map +1 -0
  6. package/es/data-chart.mjs +142 -0
  7. package/es/data-chart.mjs.map +1 -0
  8. package/es/editor/blocksuite-editor.mjs +1115 -0
  9. package/es/editor/blocksuite-editor.mjs.map +1 -0
  10. package/es/editor/content-format.mjs +2 -0
  11. package/es/editor/content-format.mjs.map +1 -0
  12. package/es/editor/index.mjs +2 -0
  13. package/es/editor/index.mjs.map +1 -0
  14. package/es/editor/toolbar.mjs +2 -0
  15. package/es/editor/toolbar.mjs.map +1 -0
  16. package/es/entry-data-chart.mjs +2 -0
  17. package/es/entry-data-chart.mjs.map +1 -0
  18. package/es/entry-editor.mjs +2 -0
  19. package/es/entry-editor.mjs.map +1 -0
  20. package/es/entry-file-upload.mjs +2 -0
  21. package/es/entry-file-upload.mjs.map +1 -0
  22. package/es/entry-fixed-action-bar.mjs +2 -0
  23. package/es/entry-fixed-action-bar.mjs.map +1 -0
  24. package/es/entry-icon.mjs +2 -0
  25. package/es/entry-icon.mjs.map +1 -0
  26. package/es/entry-image-upload.mjs +2 -0
  27. package/es/entry-image-upload.mjs.map +1 -0
  28. package/es/entry-photo-crop-tool.mjs +2 -0
  29. package/es/entry-photo-crop-tool.mjs.map +1 -0
  30. package/es/entry-subject.mjs +2 -0
  31. package/es/entry-subject.mjs.map +1 -0
  32. package/es/file-upload.mjs +157 -0
  33. package/es/file-upload.mjs.map +1 -0
  34. package/es/fixed-action-bar.mjs +39 -0
  35. package/es/fixed-action-bar.mjs.map +1 -0
  36. package/es/icon.mjs +20 -0
  37. package/es/icon.mjs.map +1 -0
  38. package/es/image-upload.mjs +333 -0
  39. package/es/image-upload.mjs.map +1 -0
  40. package/es/index.mjs +1 -1
  41. package/es/index.mjs.map +1 -1
  42. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs +2 -0
  43. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs.map +1 -0
  44. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs +2 -0
  45. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs.map +1 -0
  46. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs +2 -0
  47. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs.map +1 -0
  48. package/es/photo-crop-tool.mjs +147 -0
  49. package/es/photo-crop-tool.mjs.map +1 -0
  50. package/es/src/alert/src/alert.mjs.map +1 -1
  51. package/es/src/components.mjs +1 -1
  52. package/es/src/data-chart/index.mjs +1 -1
  53. package/es/src/data-chart/index.mjs.map +1 -1
  54. package/es/src/dialog/src/dialog.mjs +1 -1
  55. package/es/src/dialog/src/dialog.mjs.map +1 -1
  56. package/es/src/file-upload/index.mjs +1 -1
  57. package/es/src/file-upload/index.mjs.map +1 -1
  58. package/es/src/image-upload/index.mjs +1 -1
  59. package/es/src/image-upload/index.mjs.map +1 -1
  60. package/es/src/message/src/message.mjs +1 -1
  61. package/es/src/message/src/message.mjs.map +1 -1
  62. package/es/src/photo-crop-tool/index.mjs +1 -1
  63. package/es/src/photo-crop-tool/index.mjs.map +1 -1
  64. package/es/src/ui/button/index.mjs.map +1 -1
  65. package/es/src/ui/checkbox/index.mjs.map +1 -1
  66. package/es/src/ui/dialog/index.mjs.map +1 -1
  67. package/es/src/ui/input/index.mjs +1 -1
  68. package/es/src/ui/input/index.mjs.map +1 -1
  69. package/es/src/ui/input-number/index.mjs.map +1 -1
  70. package/es/src/ui/layout/index.mjs.map +1 -1
  71. package/es/src/ui/popover/index.mjs.map +1 -1
  72. package/es/src/ui/radio/index.mjs.map +1 -1
  73. package/es/src/ui/scrollbar/index.mjs.map +1 -1
  74. package/es/src/ui/select/index.mjs +1 -1
  75. package/es/src/ui/select/index.mjs.map +1 -1
  76. package/es/src/ui/table/index.mjs.map +1 -1
  77. package/es/src/ui/tag/index.mjs.map +1 -1
  78. package/es/src/wc-bridge.mjs +2 -0
  79. package/es/src/wc-bridge.mjs.map +1 -0
  80. package/es/subject/action.mjs +171 -0
  81. package/es/subject/action.mjs.map +1 -0
  82. package/es/subject/blank-fill.mjs +385 -0
  83. package/es/subject/blank-fill.mjs.map +1 -0
  84. package/es/subject/draft.mjs +2 -0
  85. package/es/subject/draft.mjs.map +1 -0
  86. package/es/subject/layout.mjs +21 -0
  87. package/es/subject/layout.mjs.map +1 -0
  88. package/es/subject/page-end.mjs +28 -0
  89. package/es/subject/page-end.mjs.map +1 -0
  90. package/es/subject/pagination.mjs +2 -0
  91. package/es/subject/pagination.mjs.map +1 -0
  92. package/es/subject/runtime.mjs +2 -0
  93. package/es/subject/runtime.mjs.map +1 -0
  94. package/es/subject/scale.mjs +267 -0
  95. package/es/subject/scale.mjs.map +1 -0
  96. package/es/subject/shared-methods.mjs +2 -0
  97. package/es/subject/shared-methods.mjs.map +1 -0
  98. package/es/subject/shared-styles.mjs +75 -0
  99. package/es/subject/shared-styles.mjs.map +1 -0
  100. package/es/subject/single.mjs +600 -0
  101. package/es/subject/single.mjs.map +1 -0
  102. package/es/subject/sort-controller.mjs +2 -0
  103. package/es/subject/sort-controller.mjs.map +1 -0
  104. package/es/subject/sortable.mjs +30 -0
  105. package/es/subject/sortable.mjs.map +1 -0
  106. package/es/subject/sorting-card.mjs +52 -0
  107. package/es/subject/sorting-card.mjs.map +1 -0
  108. package/es/subject/text-fill.mjs +395 -0
  109. package/es/subject/text-fill.mjs.map +1 -0
  110. package/es/subject/title-prefix.mjs +2 -0
  111. package/es/subject/title-prefix.mjs.map +1 -0
  112. package/es/subject/types.mjs +2 -0
  113. package/es/subject/types.mjs.map +1 -0
  114. package/lib/base/define.cjs +2 -0
  115. package/lib/base/define.cjs.map +1 -0
  116. package/lib/base/uid.cjs +2 -0
  117. package/lib/base/uid.cjs.map +1 -0
  118. package/lib/data-chart.cjs +142 -0
  119. package/lib/data-chart.cjs.map +1 -0
  120. package/lib/editor/blocksuite-editor.cjs +1115 -0
  121. package/lib/editor/blocksuite-editor.cjs.map +1 -0
  122. package/lib/editor/content-format.cjs +2 -0
  123. package/lib/editor/content-format.cjs.map +1 -0
  124. package/lib/editor/index.cjs +2 -0
  125. package/lib/editor/index.cjs.map +1 -0
  126. package/lib/editor/toolbar.cjs +2 -0
  127. package/lib/editor/toolbar.cjs.map +1 -0
  128. package/lib/entry-data-chart.cjs +2 -0
  129. package/lib/entry-data-chart.cjs.map +1 -0
  130. package/lib/entry-editor.cjs +2 -0
  131. package/lib/entry-editor.cjs.map +1 -0
  132. package/lib/entry-file-upload.cjs +2 -0
  133. package/lib/entry-file-upload.cjs.map +1 -0
  134. package/lib/entry-fixed-action-bar.cjs +2 -0
  135. package/lib/entry-fixed-action-bar.cjs.map +1 -0
  136. package/lib/entry-icon.cjs +2 -0
  137. package/lib/entry-icon.cjs.map +1 -0
  138. package/lib/entry-image-upload.cjs +2 -0
  139. package/lib/entry-image-upload.cjs.map +1 -0
  140. package/lib/entry-photo-crop-tool.cjs +2 -0
  141. package/lib/entry-photo-crop-tool.cjs.map +1 -0
  142. package/lib/entry-subject.cjs +2 -0
  143. package/lib/entry-subject.cjs.map +1 -0
  144. package/lib/file-upload.cjs +157 -0
  145. package/lib/file-upload.cjs.map +1 -0
  146. package/lib/fixed-action-bar.cjs +39 -0
  147. package/lib/fixed-action-bar.cjs.map +1 -0
  148. package/lib/icon.cjs +20 -0
  149. package/lib/icon.cjs.map +1 -0
  150. package/lib/image-upload.cjs +333 -0
  151. package/lib/image-upload.cjs.map +1 -0
  152. package/lib/index.cjs +1 -1
  153. package/lib/index.cjs.map +1 -1
  154. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs +2 -0
  155. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs.map +1 -0
  156. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs +2 -0
  157. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs.map +1 -0
  158. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs +2 -0
  159. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs.map +1 -0
  160. package/lib/photo-crop-tool.cjs +147 -0
  161. package/lib/photo-crop-tool.cjs.map +1 -0
  162. package/lib/src/alert/src/alert.cjs.map +1 -1
  163. package/lib/src/components.cjs +1 -1
  164. package/lib/src/data-chart/index.cjs +1 -1
  165. package/lib/src/data-chart/index.cjs.map +1 -1
  166. package/lib/src/dialog/src/dialog.cjs +1 -1
  167. package/lib/src/dialog/src/dialog.cjs.map +1 -1
  168. package/lib/src/file-upload/index.cjs +1 -1
  169. package/lib/src/file-upload/index.cjs.map +1 -1
  170. package/lib/src/image-upload/index.cjs +1 -1
  171. package/lib/src/image-upload/index.cjs.map +1 -1
  172. package/lib/src/message/src/message.cjs +1 -1
  173. package/lib/src/message/src/message.cjs.map +1 -1
  174. package/lib/src/photo-crop-tool/index.cjs +1 -1
  175. package/lib/src/photo-crop-tool/index.cjs.map +1 -1
  176. package/lib/src/ui/button/index.cjs.map +1 -1
  177. package/lib/src/ui/checkbox/index.cjs.map +1 -1
  178. package/lib/src/ui/dialog/index.cjs.map +1 -1
  179. package/lib/src/ui/input/index.cjs +1 -1
  180. package/lib/src/ui/input/index.cjs.map +1 -1
  181. package/lib/src/ui/input-number/index.cjs.map +1 -1
  182. package/lib/src/ui/layout/index.cjs.map +1 -1
  183. package/lib/src/ui/popover/index.cjs.map +1 -1
  184. package/lib/src/ui/radio/index.cjs.map +1 -1
  185. package/lib/src/ui/scrollbar/index.cjs.map +1 -1
  186. package/lib/src/ui/select/index.cjs +1 -1
  187. package/lib/src/ui/select/index.cjs.map +1 -1
  188. package/lib/src/ui/table/index.cjs.map +1 -1
  189. package/lib/src/ui/tag/index.cjs.map +1 -1
  190. package/lib/src/wc-bridge.cjs +2 -0
  191. package/lib/src/wc-bridge.cjs.map +1 -0
  192. package/lib/subject/action.cjs +171 -0
  193. package/lib/subject/action.cjs.map +1 -0
  194. package/lib/subject/blank-fill.cjs +385 -0
  195. package/lib/subject/blank-fill.cjs.map +1 -0
  196. package/lib/subject/draft.cjs +2 -0
  197. package/lib/subject/draft.cjs.map +1 -0
  198. package/lib/subject/layout.cjs +21 -0
  199. package/lib/subject/layout.cjs.map +1 -0
  200. package/lib/subject/page-end.cjs +28 -0
  201. package/lib/subject/page-end.cjs.map +1 -0
  202. package/lib/subject/pagination.cjs +2 -0
  203. package/lib/subject/pagination.cjs.map +1 -0
  204. package/lib/subject/runtime.cjs +2 -0
  205. package/lib/subject/runtime.cjs.map +1 -0
  206. package/lib/subject/scale.cjs +267 -0
  207. package/lib/subject/scale.cjs.map +1 -0
  208. package/lib/subject/shared-methods.cjs +2 -0
  209. package/lib/subject/shared-methods.cjs.map +1 -0
  210. package/lib/subject/shared-styles.cjs +75 -0
  211. package/lib/subject/shared-styles.cjs.map +1 -0
  212. package/lib/subject/single.cjs +600 -0
  213. package/lib/subject/single.cjs.map +1 -0
  214. package/lib/subject/sort-controller.cjs +2 -0
  215. package/lib/subject/sort-controller.cjs.map +1 -0
  216. package/lib/subject/sortable.cjs +30 -0
  217. package/lib/subject/sortable.cjs.map +1 -0
  218. package/lib/subject/sorting-card.cjs +52 -0
  219. package/lib/subject/sorting-card.cjs.map +1 -0
  220. package/lib/subject/text-fill.cjs +395 -0
  221. package/lib/subject/text-fill.cjs.map +1 -0
  222. package/lib/subject/title-prefix.cjs +2 -0
  223. package/lib/subject/title-prefix.cjs.map +1 -0
  224. package/lib/subject/types.cjs +2 -0
  225. package/lib/subject/types.cjs.map +1 -0
  226. package/package.json +94 -32
  227. package/types/base/define.d.ts +1 -0
  228. package/types/base/uid.d.ts +1 -0
  229. package/types/data-chart.d.ts +65 -0
  230. package/types/editor/blocksuite-editor.d.ts +191 -0
  231. package/types/editor/content-format.d.ts +4 -0
  232. package/types/editor/index.d.ts +4 -0
  233. package/types/editor/toolbar.d.ts +6 -0
  234. package/types/editor/types.d.ts +42 -0
  235. package/types/entry-data-chart.d.ts +1 -0
  236. package/types/entry-editor.d.ts +2 -0
  237. package/types/entry-file-upload.d.ts +1 -0
  238. package/types/entry-fixed-action-bar.d.ts +1 -0
  239. package/types/entry-icon.d.ts +2 -0
  240. package/types/entry-image-upload.d.ts +1 -0
  241. package/types/entry-photo-crop-tool.d.ts +1 -0
  242. package/types/entry-subject.d.ts +2 -0
  243. package/types/file-upload.d.ts +48 -0
  244. package/types/fixed-action-bar.d.ts +25 -0
  245. package/types/icon.d.ts +30 -0
  246. package/types/image-upload.d.ts +68 -0
  247. package/types/index.d.ts +21 -6
  248. package/types/photo-crop-tool.d.ts +43 -0
  249. package/types/src/components.d.ts +2 -7
  250. package/types/src/components.d.ts.map +1 -1
  251. package/types/src/data-chart/index.d.ts +11 -27
  252. package/types/src/data-chart/index.d.ts.map +1 -1
  253. package/types/src/dialog/src/dialog.d.ts.map +1 -1
  254. package/types/src/file-upload/index.d.ts +10 -17
  255. package/types/src/file-upload/index.d.ts.map +1 -1
  256. package/types/src/icon/index.d.ts +1 -1
  257. package/types/src/icon/src/icon.d.ts +1 -1
  258. package/types/src/image-upload/index.d.ts +10 -25
  259. package/types/src/image-upload/index.d.ts.map +1 -1
  260. package/types/src/message/index.d.ts +2 -2
  261. package/types/src/message/index.d.ts.map +1 -1
  262. package/types/src/message/src/message.d.ts.map +1 -1
  263. package/types/src/photo-crop-tool/index.d.ts +9 -52
  264. package/types/src/photo-crop-tool/index.d.ts.map +1 -1
  265. package/types/src/subject-action/src/subject-action.vue.d.ts.map +1 -1
  266. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts +2 -2
  267. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts +2 -2
  268. package/types/src/subject-list/src/components/subject-scale.vue.d.ts +2 -2
  269. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +1 -1
  270. package/types/src/subject-list/src/components/subject-single.vue.d.ts +2 -2
  271. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +1 -1
  272. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts +2 -2
  273. package/types/src/subject-list/src/subject-list.vue.d.ts.map +1 -1
  274. package/types/src/subject-type/src/subject-type.vue.d.ts.map +1 -1
  275. package/types/src/ui/button/index.d.ts +4 -4
  276. package/types/src/ui/checkbox/index.d.ts +2 -2
  277. package/types/src/ui/checkbox/index.d.ts.map +1 -1
  278. package/types/src/ui/dialog/index.d.ts +2 -2
  279. package/types/src/ui/dialog/index.d.ts.map +1 -1
  280. package/types/src/ui/index.d.ts +9 -9
  281. package/types/src/ui/index.d.ts.map +1 -1
  282. package/types/src/ui/input/index.d.ts +4 -4
  283. package/types/src/ui/input-number/index.d.ts +4 -4
  284. package/types/src/ui/input-number/index.d.ts.map +1 -1
  285. package/types/src/ui/layout/index.d.ts +6 -6
  286. package/types/src/ui/layout/index.d.ts.map +1 -1
  287. package/types/src/ui/popover/index.d.ts +4 -4
  288. package/types/src/ui/popover/index.d.ts.map +1 -1
  289. package/types/src/ui/radio/index.d.ts.map +1 -1
  290. package/types/src/ui/scrollbar/index.d.ts.map +1 -1
  291. package/types/src/ui/select/index.d.ts +4 -4
  292. package/types/src/ui/select/index.d.ts.map +1 -1
  293. package/types/src/ui/table/index.d.ts +3 -3
  294. package/types/src/ui/table/index.d.ts.map +1 -1
  295. package/types/src/ui/tag/index.d.ts +2 -2
  296. package/types/src/ui/tag/index.d.ts.map +1 -1
  297. package/types/src/wc-bridge.d.ts +23 -0
  298. package/types/src/wc-bridge.d.ts.map +1 -0
  299. package/types/subject/action.d.ts +37 -0
  300. package/types/subject/blank-fill.d.ts +79 -0
  301. package/types/subject/draft.d.ts +63 -0
  302. package/types/subject/index.d.ts +13 -0
  303. package/types/subject/layout.d.ts +7 -0
  304. package/types/subject/page-end.d.ts +16 -0
  305. package/types/subject/pagination.d.ts +23 -0
  306. package/types/subject/runtime.d.ts +12 -0
  307. package/types/subject/scale.d.ts +55 -0
  308. package/types/subject/shared-methods.d.ts +8 -0
  309. package/types/subject/shared-styles.d.ts +5 -0
  310. package/types/subject/single.d.ts +288 -0
  311. package/types/subject/sort-controller.d.ts +3 -0
  312. package/types/subject/sortable.d.ts +19 -0
  313. package/types/subject/sorting-card.d.ts +2 -0
  314. package/types/subject/text-fill.d.ts +88 -0
  315. package/types/subject/title-prefix.d.ts +2 -0
  316. package/types/subject/types.d.ts +12 -0
  317. package/types/tsconfig.tsbuildinfo +1 -1
  318. package/es/_virtual/_commonjsHelpers.mjs +0 -2
  319. package/es/_virtual/_commonjsHelpers.mjs.map +0 -1
  320. package/es/_virtual/_plugin-vue_export-helper.mjs +0 -2
  321. package/es/_virtual/_plugin-vue_export-helper.mjs.map +0 -1
  322. package/es/_virtual/sortable.esm.mjs +0 -2
  323. package/es/_virtual/sortable.esm.mjs.map +0 -1
  324. package/es/_virtual/vuedraggable.umd.mjs +0 -2
  325. package/es/_virtual/vuedraggable.umd.mjs.map +0 -1
  326. package/es/_virtual/vuedraggable.umd2.mjs +0 -2
  327. package/es/_virtual/vuedraggable.umd2.mjs.map +0 -1
  328. package/es/node_modules/.pnpm/sortablejs@1.14.0/node_modules/sortablejs/modular/sortable.esm.mjs +0 -8
  329. package/es/node_modules/.pnpm/sortablejs@1.14.0/node_modules/sortablejs/modular/sortable.esm.mjs.map +0 -1
  330. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs +0 -2
  331. package/es/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.mjs.map +0 -1
  332. package/es/node_modules/.pnpm/vuedraggable@4.1.0_vue@3.5.18_typescript@5.9.2_/node_modules/vuedraggable/dist/vuedraggable.umd.mjs +0 -2
  333. package/es/node_modules/.pnpm/vuedraggable@4.1.0_vue@3.5.18_typescript@5.9.2_/node_modules/vuedraggable/dist/vuedraggable.umd.mjs.map +0 -1
  334. package/es/src/data-chart/src/analyze.mjs +0 -2
  335. package/es/src/data-chart/src/analyze.mjs.map +0 -1
  336. package/es/src/data-chart/src/components/area.vue.mjs +0 -2
  337. package/es/src/data-chart/src/components/area.vue.mjs.map +0 -1
  338. package/es/src/data-chart/src/components/area.vue2.mjs +0 -2
  339. package/es/src/data-chart/src/components/area.vue2.mjs.map +0 -1
  340. package/es/src/data-chart/src/components/area.vue3.mjs +0 -2
  341. package/es/src/data-chart/src/components/area.vue3.mjs.map +0 -1
  342. package/es/src/data-chart/src/components/bar.vue.mjs +0 -2
  343. package/es/src/data-chart/src/components/bar.vue.mjs.map +0 -1
  344. package/es/src/data-chart/src/components/bar.vue2.mjs +0 -2
  345. package/es/src/data-chart/src/components/bar.vue2.mjs.map +0 -1
  346. package/es/src/data-chart/src/components/bar.vue3.mjs +0 -2
  347. package/es/src/data-chart/src/components/bar.vue3.mjs.map +0 -1
  348. package/es/src/data-chart/src/components/card.vue.mjs +0 -2
  349. package/es/src/data-chart/src/components/card.vue.mjs.map +0 -1
  350. package/es/src/data-chart/src/components/card.vue2.mjs +0 -2
  351. package/es/src/data-chart/src/components/card.vue2.mjs.map +0 -1
  352. package/es/src/data-chart/src/components/card.vue3.mjs +0 -2
  353. package/es/src/data-chart/src/components/card.vue3.mjs.map +0 -1
  354. package/es/src/data-chart/src/components/data-chart-card-bg-left.svg.mjs +0 -2
  355. package/es/src/data-chart/src/components/data-chart-card-bg-left.svg.mjs.map +0 -1
  356. package/es/src/data-chart/src/components/data-chart-card-bg-right.svg.mjs +0 -2
  357. package/es/src/data-chart/src/components/data-chart-card-bg-right.svg.mjs.map +0 -1
  358. package/es/src/data-chart/src/components/empty.svg.mjs +0 -2
  359. package/es/src/data-chart/src/components/empty.svg.mjs.map +0 -1
  360. package/es/src/data-chart/src/components/empty.vue.mjs +0 -2
  361. package/es/src/data-chart/src/components/empty.vue.mjs.map +0 -1
  362. package/es/src/data-chart/src/components/empty.vue2.mjs +0 -2
  363. package/es/src/data-chart/src/components/empty.vue2.mjs.map +0 -1
  364. package/es/src/data-chart/src/components/funnel.vue.mjs +0 -2
  365. package/es/src/data-chart/src/components/funnel.vue.mjs.map +0 -1
  366. package/es/src/data-chart/src/components/funnel.vue2.mjs +0 -2
  367. package/es/src/data-chart/src/components/funnel.vue2.mjs.map +0 -1
  368. package/es/src/data-chart/src/components/funnel.vue3.mjs +0 -2
  369. package/es/src/data-chart/src/components/funnel.vue3.mjs.map +0 -1
  370. package/es/src/data-chart/src/components/line.vue.mjs +0 -2
  371. package/es/src/data-chart/src/components/line.vue.mjs.map +0 -1
  372. package/es/src/data-chart/src/components/line.vue2.mjs +0 -2
  373. package/es/src/data-chart/src/components/line.vue2.mjs.map +0 -1
  374. package/es/src/data-chart/src/components/line.vue3.mjs +0 -2
  375. package/es/src/data-chart/src/components/line.vue3.mjs.map +0 -1
  376. package/es/src/data-chart/src/components/pie.vue.mjs +0 -2
  377. package/es/src/data-chart/src/components/pie.vue.mjs.map +0 -1
  378. package/es/src/data-chart/src/components/pie.vue2.mjs +0 -2
  379. package/es/src/data-chart/src/components/pie.vue2.mjs.map +0 -1
  380. package/es/src/data-chart/src/components/pie.vue3.mjs +0 -2
  381. package/es/src/data-chart/src/components/pie.vue3.mjs.map +0 -1
  382. package/es/src/data-chart/src/components/radar.vue.mjs +0 -2
  383. package/es/src/data-chart/src/components/radar.vue.mjs.map +0 -1
  384. package/es/src/data-chart/src/components/radar.vue2.mjs +0 -2
  385. package/es/src/data-chart/src/components/radar.vue2.mjs.map +0 -1
  386. package/es/src/data-chart/src/components/radar.vue3.mjs +0 -2
  387. package/es/src/data-chart/src/components/radar.vue3.mjs.map +0 -1
  388. package/es/src/data-chart/src/components/scatter-simple.vue.mjs +0 -2
  389. package/es/src/data-chart/src/components/scatter-simple.vue.mjs.map +0 -1
  390. package/es/src/data-chart/src/components/scatter-simple.vue2.mjs +0 -2
  391. package/es/src/data-chart/src/components/scatter-simple.vue2.mjs.map +0 -1
  392. package/es/src/data-chart/src/components/scatter-simple.vue3.mjs +0 -2
  393. package/es/src/data-chart/src/components/scatter-simple.vue3.mjs.map +0 -1
  394. package/es/src/data-chart/src/components/scatter.vue.mjs +0 -2
  395. package/es/src/data-chart/src/components/scatter.vue.mjs.map +0 -1
  396. package/es/src/data-chart/src/components/scatter.vue2.mjs +0 -2
  397. package/es/src/data-chart/src/components/scatter.vue2.mjs.map +0 -1
  398. package/es/src/data-chart/src/components/scatter.vue3.mjs +0 -2
  399. package/es/src/data-chart/src/components/scatter.vue3.mjs.map +0 -1
  400. package/es/src/data-chart/src/components/table.vue.mjs +0 -2
  401. package/es/src/data-chart/src/components/table.vue.mjs.map +0 -1
  402. package/es/src/data-chart/src/components/table.vue2.mjs +0 -2
  403. package/es/src/data-chart/src/components/table.vue2.mjs.map +0 -1
  404. package/es/src/data-chart/src/data-chart.vue.mjs +0 -2
  405. package/es/src/data-chart/src/data-chart.vue.mjs.map +0 -1
  406. package/es/src/data-chart/src/data-chart.vue2.mjs +0 -2
  407. package/es/src/data-chart/src/data-chart.vue2.mjs.map +0 -1
  408. package/es/src/data-chart/src/utils/config.mjs +0 -2
  409. package/es/src/data-chart/src/utils/config.mjs.map +0 -1
  410. package/es/src/data-chart/src/utils/injectionKeys.mjs +0 -2
  411. package/es/src/data-chart/src/utils/injectionKeys.mjs.map +0 -1
  412. package/es/src/data-chart/src/utils/mapData.mjs +0 -2
  413. package/es/src/data-chart/src/utils/mapData.mjs.map +0 -1
  414. package/es/src/data-chart/src/utils/safe-eval.mjs +0 -2
  415. package/es/src/data-chart/src/utils/safe-eval.mjs.map +0 -1
  416. package/es/src/data-chart/src/utils/types.mjs +0 -2
  417. package/es/src/data-chart/src/utils/types.mjs.map +0 -1
  418. package/es/src/data-chart/src/utils/useCharts.mjs +0 -2
  419. package/es/src/data-chart/src/utils/useCharts.mjs.map +0 -1
  420. package/es/src/file-upload/src/file-upload.vue.mjs +0 -2
  421. package/es/src/file-upload/src/file-upload.vue.mjs.map +0 -1
  422. package/es/src/file-upload/src/file-upload.vue2.mjs +0 -2
  423. package/es/src/file-upload/src/file-upload.vue2.mjs.map +0 -1
  424. package/es/src/file-upload/src/file-upload.vue3.mjs +0 -2
  425. package/es/src/file-upload/src/file-upload.vue3.mjs.map +0 -1
  426. package/es/src/fixed-action-bar/index.mjs +0 -2
  427. package/es/src/fixed-action-bar/index.mjs.map +0 -1
  428. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs +0 -2
  429. package/es/src/fixed-action-bar/src/fixed-action-bar.vue.mjs.map +0 -1
  430. package/es/src/fixed-action-bar/src/fixed-action-bar.vue2.mjs +0 -2
  431. package/es/src/fixed-action-bar/src/fixed-action-bar.vue2.mjs.map +0 -1
  432. package/es/src/image-upload/src/image-upload.vue.mjs +0 -2
  433. package/es/src/image-upload/src/image-upload.vue.mjs.map +0 -1
  434. package/es/src/image-upload/src/image-upload.vue2.mjs +0 -2
  435. package/es/src/image-upload/src/image-upload.vue2.mjs.map +0 -1
  436. package/es/src/image-upload/src/image-upload.vue3.mjs +0 -2
  437. package/es/src/image-upload/src/image-upload.vue3.mjs.map +0 -1
  438. package/es/src/photo-crop-tool/src/composables.mjs +0 -2
  439. package/es/src/photo-crop-tool/src/composables.mjs.map +0 -1
  440. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs +0 -2
  441. package/es/src/photo-crop-tool/src/photo-crop-tool.vue.mjs.map +0 -1
  442. package/es/src/photo-crop-tool/src/photo-crop-tool.vue2.mjs +0 -2
  443. package/es/src/photo-crop-tool/src/photo-crop-tool.vue2.mjs.map +0 -1
  444. package/es/src/subject-action/index.mjs +0 -2
  445. package/es/src/subject-action/index.mjs.map +0 -1
  446. package/es/src/subject-action/src/subject-action.vue.mjs +0 -2
  447. package/es/src/subject-action/src/subject-action.vue.mjs.map +0 -1
  448. package/es/src/subject-action/src/subject-action.vue2.mjs +0 -2
  449. package/es/src/subject-action/src/subject-action.vue2.mjs.map +0 -1
  450. package/es/src/subject-layout/index.mjs +0 -2
  451. package/es/src/subject-layout/index.mjs.map +0 -1
  452. package/es/src/subject-layout/src/subject-layout.vue.mjs +0 -2
  453. package/es/src/subject-layout/src/subject-layout.vue.mjs.map +0 -1
  454. package/es/src/subject-layout/src/subject-layout.vue2.mjs +0 -2
  455. package/es/src/subject-layout/src/subject-layout.vue2.mjs.map +0 -1
  456. package/es/src/subject-list/index.mjs +0 -2
  457. package/es/src/subject-list/index.mjs.map +0 -1
  458. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs +0 -2
  459. package/es/src/subject-list/src/components/SubjectPageEnd.vue.mjs.map +0 -1
  460. package/es/src/subject-list/src/components/SubjectPageEnd.vue2.mjs +0 -2
  461. package/es/src/subject-list/src/components/SubjectPageEnd.vue2.mjs.map +0 -1
  462. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs +0 -2
  463. package/es/src/subject-list/src/components/SubjectRichText.vue.mjs.map +0 -1
  464. package/es/src/subject-list/src/components/SubjectRichText.vue2.mjs +0 -2
  465. package/es/src/subject-list/src/components/SubjectRichText.vue2.mjs.map +0 -1
  466. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs +0 -2
  467. package/es/src/subject-list/src/components/subject-blank-fill.vue.mjs.map +0 -1
  468. package/es/src/subject-list/src/components/subject-blank-fill.vue2.mjs +0 -2
  469. package/es/src/subject-list/src/components/subject-blank-fill.vue2.mjs.map +0 -1
  470. package/es/src/subject-list/src/components/subject-scale.vue.mjs +0 -2
  471. package/es/src/subject-list/src/components/subject-scale.vue.mjs.map +0 -1
  472. package/es/src/subject-list/src/components/subject-scale.vue2.mjs +0 -2
  473. package/es/src/subject-list/src/components/subject-scale.vue2.mjs.map +0 -1
  474. package/es/src/subject-list/src/components/subject-single.vue.mjs +0 -2
  475. package/es/src/subject-list/src/components/subject-single.vue.mjs.map +0 -1
  476. package/es/src/subject-list/src/components/subject-single.vue2.mjs +0 -2
  477. package/es/src/subject-list/src/components/subject-single.vue2.mjs.map +0 -1
  478. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs +0 -2
  479. package/es/src/subject-list/src/components/subject-text-fill.vue.mjs.map +0 -1
  480. package/es/src/subject-list/src/components/subject-text-fill.vue2.mjs +0 -2
  481. package/es/src/subject-list/src/components/subject-text-fill.vue2.mjs.map +0 -1
  482. package/es/src/subject-list/src/subject-list.vue.mjs +0 -2
  483. package/es/src/subject-list/src/subject-list.vue.mjs.map +0 -1
  484. package/es/src/subject-list/src/subject-list.vue2.mjs +0 -2
  485. package/es/src/subject-list/src/subject-list.vue2.mjs.map +0 -1
  486. package/es/src/subject-type/index.mjs +0 -2
  487. package/es/src/subject-type/index.mjs.map +0 -1
  488. package/es/src/subject-type/src/subject-type.vue.mjs +0 -2
  489. package/es/src/subject-type/src/subject-type.vue.mjs.map +0 -1
  490. package/es/src/subject-type/src/subject-type.vue2.mjs +0 -2
  491. package/es/src/subject-type/src/subject-type.vue2.mjs.map +0 -1
  492. package/lib/_virtual/_commonjsHelpers.cjs +0 -2
  493. package/lib/_virtual/_commonjsHelpers.cjs.map +0 -1
  494. package/lib/_virtual/_plugin-vue_export-helper.cjs +0 -2
  495. package/lib/_virtual/_plugin-vue_export-helper.cjs.map +0 -1
  496. package/lib/_virtual/sortable.esm.cjs +0 -2
  497. package/lib/_virtual/sortable.esm.cjs.map +0 -1
  498. package/lib/_virtual/vuedraggable.umd.cjs +0 -2
  499. package/lib/_virtual/vuedraggable.umd.cjs.map +0 -1
  500. package/lib/_virtual/vuedraggable.umd2.cjs +0 -2
  501. package/lib/_virtual/vuedraggable.umd2.cjs.map +0 -1
  502. package/lib/node_modules/.pnpm/sortablejs@1.14.0/node_modules/sortablejs/modular/sortable.esm.cjs +0 -9
  503. package/lib/node_modules/.pnpm/sortablejs@1.14.0/node_modules/sortablejs/modular/sortable.esm.cjs.map +0 -1
  504. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs +0 -2
  505. package/lib/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.cjs.map +0 -1
  506. package/lib/node_modules/.pnpm/vuedraggable@4.1.0_vue@3.5.18_typescript@5.9.2_/node_modules/vuedraggable/dist/vuedraggable.umd.cjs +0 -2
  507. package/lib/node_modules/.pnpm/vuedraggable@4.1.0_vue@3.5.18_typescript@5.9.2_/node_modules/vuedraggable/dist/vuedraggable.umd.cjs.map +0 -1
  508. package/lib/src/data-chart/src/analyze.cjs +0 -2
  509. package/lib/src/data-chart/src/analyze.cjs.map +0 -1
  510. package/lib/src/data-chart/src/components/area.vue.cjs +0 -2
  511. package/lib/src/data-chart/src/components/area.vue.cjs.map +0 -1
  512. package/lib/src/data-chart/src/components/area.vue2.cjs +0 -2
  513. package/lib/src/data-chart/src/components/area.vue2.cjs.map +0 -1
  514. package/lib/src/data-chart/src/components/area.vue3.cjs +0 -2
  515. package/lib/src/data-chart/src/components/area.vue3.cjs.map +0 -1
  516. package/lib/src/data-chart/src/components/bar.vue.cjs +0 -2
  517. package/lib/src/data-chart/src/components/bar.vue.cjs.map +0 -1
  518. package/lib/src/data-chart/src/components/bar.vue2.cjs +0 -2
  519. package/lib/src/data-chart/src/components/bar.vue2.cjs.map +0 -1
  520. package/lib/src/data-chart/src/components/bar.vue3.cjs +0 -2
  521. package/lib/src/data-chart/src/components/bar.vue3.cjs.map +0 -1
  522. package/lib/src/data-chart/src/components/card.vue.cjs +0 -2
  523. package/lib/src/data-chart/src/components/card.vue.cjs.map +0 -1
  524. package/lib/src/data-chart/src/components/card.vue2.cjs +0 -2
  525. package/lib/src/data-chart/src/components/card.vue2.cjs.map +0 -1
  526. package/lib/src/data-chart/src/components/card.vue3.cjs +0 -2
  527. package/lib/src/data-chart/src/components/card.vue3.cjs.map +0 -1
  528. package/lib/src/data-chart/src/components/data-chart-card-bg-left.svg.cjs +0 -2
  529. package/lib/src/data-chart/src/components/data-chart-card-bg-left.svg.cjs.map +0 -1
  530. package/lib/src/data-chart/src/components/data-chart-card-bg-right.svg.cjs +0 -2
  531. package/lib/src/data-chart/src/components/data-chart-card-bg-right.svg.cjs.map +0 -1
  532. package/lib/src/data-chart/src/components/empty.svg.cjs +0 -2
  533. package/lib/src/data-chart/src/components/empty.svg.cjs.map +0 -1
  534. package/lib/src/data-chart/src/components/empty.vue.cjs +0 -2
  535. package/lib/src/data-chart/src/components/empty.vue.cjs.map +0 -1
  536. package/lib/src/data-chart/src/components/empty.vue2.cjs +0 -2
  537. package/lib/src/data-chart/src/components/empty.vue2.cjs.map +0 -1
  538. package/lib/src/data-chart/src/components/funnel.vue.cjs +0 -2
  539. package/lib/src/data-chart/src/components/funnel.vue.cjs.map +0 -1
  540. package/lib/src/data-chart/src/components/funnel.vue2.cjs +0 -2
  541. package/lib/src/data-chart/src/components/funnel.vue2.cjs.map +0 -1
  542. package/lib/src/data-chart/src/components/funnel.vue3.cjs +0 -2
  543. package/lib/src/data-chart/src/components/funnel.vue3.cjs.map +0 -1
  544. package/lib/src/data-chart/src/components/line.vue.cjs +0 -2
  545. package/lib/src/data-chart/src/components/line.vue.cjs.map +0 -1
  546. package/lib/src/data-chart/src/components/line.vue2.cjs +0 -2
  547. package/lib/src/data-chart/src/components/line.vue2.cjs.map +0 -1
  548. package/lib/src/data-chart/src/components/line.vue3.cjs +0 -2
  549. package/lib/src/data-chart/src/components/line.vue3.cjs.map +0 -1
  550. package/lib/src/data-chart/src/components/pie.vue.cjs +0 -2
  551. package/lib/src/data-chart/src/components/pie.vue.cjs.map +0 -1
  552. package/lib/src/data-chart/src/components/pie.vue2.cjs +0 -2
  553. package/lib/src/data-chart/src/components/pie.vue2.cjs.map +0 -1
  554. package/lib/src/data-chart/src/components/pie.vue3.cjs +0 -2
  555. package/lib/src/data-chart/src/components/pie.vue3.cjs.map +0 -1
  556. package/lib/src/data-chart/src/components/radar.vue.cjs +0 -2
  557. package/lib/src/data-chart/src/components/radar.vue.cjs.map +0 -1
  558. package/lib/src/data-chart/src/components/radar.vue2.cjs +0 -2
  559. package/lib/src/data-chart/src/components/radar.vue2.cjs.map +0 -1
  560. package/lib/src/data-chart/src/components/radar.vue3.cjs +0 -2
  561. package/lib/src/data-chart/src/components/radar.vue3.cjs.map +0 -1
  562. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs +0 -2
  563. package/lib/src/data-chart/src/components/scatter-simple.vue.cjs.map +0 -1
  564. package/lib/src/data-chart/src/components/scatter-simple.vue2.cjs +0 -2
  565. package/lib/src/data-chart/src/components/scatter-simple.vue2.cjs.map +0 -1
  566. package/lib/src/data-chart/src/components/scatter-simple.vue3.cjs +0 -2
  567. package/lib/src/data-chart/src/components/scatter-simple.vue3.cjs.map +0 -1
  568. package/lib/src/data-chart/src/components/scatter.vue.cjs +0 -2
  569. package/lib/src/data-chart/src/components/scatter.vue.cjs.map +0 -1
  570. package/lib/src/data-chart/src/components/scatter.vue2.cjs +0 -2
  571. package/lib/src/data-chart/src/components/scatter.vue2.cjs.map +0 -1
  572. package/lib/src/data-chart/src/components/scatter.vue3.cjs +0 -2
  573. package/lib/src/data-chart/src/components/scatter.vue3.cjs.map +0 -1
  574. package/lib/src/data-chart/src/components/table.vue.cjs +0 -2
  575. package/lib/src/data-chart/src/components/table.vue.cjs.map +0 -1
  576. package/lib/src/data-chart/src/components/table.vue2.cjs +0 -2
  577. package/lib/src/data-chart/src/components/table.vue2.cjs.map +0 -1
  578. package/lib/src/data-chart/src/data-chart.vue.cjs +0 -2
  579. package/lib/src/data-chart/src/data-chart.vue.cjs.map +0 -1
  580. package/lib/src/data-chart/src/data-chart.vue2.cjs +0 -2
  581. package/lib/src/data-chart/src/data-chart.vue2.cjs.map +0 -1
  582. package/lib/src/data-chart/src/utils/config.cjs +0 -2
  583. package/lib/src/data-chart/src/utils/config.cjs.map +0 -1
  584. package/lib/src/data-chart/src/utils/injectionKeys.cjs +0 -2
  585. package/lib/src/data-chart/src/utils/injectionKeys.cjs.map +0 -1
  586. package/lib/src/data-chart/src/utils/mapData.cjs +0 -2
  587. package/lib/src/data-chart/src/utils/mapData.cjs.map +0 -1
  588. package/lib/src/data-chart/src/utils/safe-eval.cjs +0 -2
  589. package/lib/src/data-chart/src/utils/safe-eval.cjs.map +0 -1
  590. package/lib/src/data-chart/src/utils/types.cjs +0 -2
  591. package/lib/src/data-chart/src/utils/types.cjs.map +0 -1
  592. package/lib/src/data-chart/src/utils/useCharts.cjs +0 -2
  593. package/lib/src/data-chart/src/utils/useCharts.cjs.map +0 -1
  594. package/lib/src/file-upload/src/file-upload.vue.cjs +0 -2
  595. package/lib/src/file-upload/src/file-upload.vue.cjs.map +0 -1
  596. package/lib/src/file-upload/src/file-upload.vue2.cjs +0 -2
  597. package/lib/src/file-upload/src/file-upload.vue2.cjs.map +0 -1
  598. package/lib/src/file-upload/src/file-upload.vue3.cjs +0 -2
  599. package/lib/src/file-upload/src/file-upload.vue3.cjs.map +0 -1
  600. package/lib/src/fixed-action-bar/index.cjs +0 -2
  601. package/lib/src/fixed-action-bar/index.cjs.map +0 -1
  602. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs +0 -2
  603. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue.cjs.map +0 -1
  604. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue2.cjs +0 -2
  605. package/lib/src/fixed-action-bar/src/fixed-action-bar.vue2.cjs.map +0 -1
  606. package/lib/src/image-upload/src/image-upload.vue.cjs +0 -2
  607. package/lib/src/image-upload/src/image-upload.vue.cjs.map +0 -1
  608. package/lib/src/image-upload/src/image-upload.vue2.cjs +0 -2
  609. package/lib/src/image-upload/src/image-upload.vue2.cjs.map +0 -1
  610. package/lib/src/image-upload/src/image-upload.vue3.cjs +0 -2
  611. package/lib/src/image-upload/src/image-upload.vue3.cjs.map +0 -1
  612. package/lib/src/photo-crop-tool/src/composables.cjs +0 -2
  613. package/lib/src/photo-crop-tool/src/composables.cjs.map +0 -1
  614. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs +0 -2
  615. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue.cjs.map +0 -1
  616. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue2.cjs +0 -2
  617. package/lib/src/photo-crop-tool/src/photo-crop-tool.vue2.cjs.map +0 -1
  618. package/lib/src/subject-action/index.cjs +0 -2
  619. package/lib/src/subject-action/index.cjs.map +0 -1
  620. package/lib/src/subject-action/src/subject-action.vue.cjs +0 -2
  621. package/lib/src/subject-action/src/subject-action.vue.cjs.map +0 -1
  622. package/lib/src/subject-action/src/subject-action.vue2.cjs +0 -2
  623. package/lib/src/subject-action/src/subject-action.vue2.cjs.map +0 -1
  624. package/lib/src/subject-layout/index.cjs +0 -2
  625. package/lib/src/subject-layout/index.cjs.map +0 -1
  626. package/lib/src/subject-layout/src/subject-layout.vue.cjs +0 -2
  627. package/lib/src/subject-layout/src/subject-layout.vue.cjs.map +0 -1
  628. package/lib/src/subject-layout/src/subject-layout.vue2.cjs +0 -2
  629. package/lib/src/subject-layout/src/subject-layout.vue2.cjs.map +0 -1
  630. package/lib/src/subject-list/index.cjs +0 -2
  631. package/lib/src/subject-list/index.cjs.map +0 -1
  632. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs +0 -2
  633. package/lib/src/subject-list/src/components/SubjectPageEnd.vue.cjs.map +0 -1
  634. package/lib/src/subject-list/src/components/SubjectPageEnd.vue2.cjs +0 -2
  635. package/lib/src/subject-list/src/components/SubjectPageEnd.vue2.cjs.map +0 -1
  636. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs +0 -2
  637. package/lib/src/subject-list/src/components/SubjectRichText.vue.cjs.map +0 -1
  638. package/lib/src/subject-list/src/components/SubjectRichText.vue2.cjs +0 -2
  639. package/lib/src/subject-list/src/components/SubjectRichText.vue2.cjs.map +0 -1
  640. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs +0 -2
  641. package/lib/src/subject-list/src/components/subject-blank-fill.vue.cjs.map +0 -1
  642. package/lib/src/subject-list/src/components/subject-blank-fill.vue2.cjs +0 -2
  643. package/lib/src/subject-list/src/components/subject-blank-fill.vue2.cjs.map +0 -1
  644. package/lib/src/subject-list/src/components/subject-scale.vue.cjs +0 -2
  645. package/lib/src/subject-list/src/components/subject-scale.vue.cjs.map +0 -1
  646. package/lib/src/subject-list/src/components/subject-scale.vue2.cjs +0 -2
  647. package/lib/src/subject-list/src/components/subject-scale.vue2.cjs.map +0 -1
  648. package/lib/src/subject-list/src/components/subject-single.vue.cjs +0 -2
  649. package/lib/src/subject-list/src/components/subject-single.vue.cjs.map +0 -1
  650. package/lib/src/subject-list/src/components/subject-single.vue2.cjs +0 -2
  651. package/lib/src/subject-list/src/components/subject-single.vue2.cjs.map +0 -1
  652. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs +0 -2
  653. package/lib/src/subject-list/src/components/subject-text-fill.vue.cjs.map +0 -1
  654. package/lib/src/subject-list/src/components/subject-text-fill.vue2.cjs +0 -2
  655. package/lib/src/subject-list/src/components/subject-text-fill.vue2.cjs.map +0 -1
  656. package/lib/src/subject-list/src/subject-list.vue.cjs +0 -2
  657. package/lib/src/subject-list/src/subject-list.vue.cjs.map +0 -1
  658. package/lib/src/subject-list/src/subject-list.vue2.cjs +0 -2
  659. package/lib/src/subject-list/src/subject-list.vue2.cjs.map +0 -1
  660. package/lib/src/subject-type/index.cjs +0 -2
  661. package/lib/src/subject-type/index.cjs.map +0 -1
  662. package/lib/src/subject-type/src/subject-type.vue.cjs +0 -2
  663. package/lib/src/subject-type/src/subject-type.vue.cjs.map +0 -1
  664. package/lib/src/subject-type/src/subject-type.vue2.cjs +0 -2
  665. package/lib/src/subject-type/src/subject-type.vue2.cjs.map +0 -1
  666. package/theme-chalk/index.css +0 -1
  667. package/theme-chalk/index.scss +0 -21
  668. package/theme-chalk/src/base.css +0 -1
  669. package/theme-chalk/src/base.scss +0 -16
  670. package/theme-chalk/src/common/qxs-components.css +0 -1
  671. package/theme-chalk/src/common/qxs-components.scss +0 -4
  672. package/theme-chalk/src/common/qxs-variables.css +0 -1
  673. package/theme-chalk/src/common/qxs-variables.scss +0 -81
  674. package/theme-chalk/src/data-chart/empty.css +0 -1
  675. package/theme-chalk/src/data-chart/empty.scss +0 -24
  676. package/theme-chalk/src/data-chart/index.css +0 -1
  677. package/theme-chalk/src/data-chart/index.scss +0 -11
  678. package/theme-chalk/src/data-chart/table.css +0 -1
  679. package/theme-chalk/src/data-chart/table.scss +0 -43
  680. package/theme-chalk/src/dialog.css +0 -1
  681. package/theme-chalk/src/dialog.scss +0 -122
  682. package/theme-chalk/src/file-upload.css +0 -0
  683. package/theme-chalk/src/file-upload.scss +0 -7
  684. package/theme-chalk/src/fixed-action-bar.css +0 -1
  685. package/theme-chalk/src/fixed-action-bar.scss +0 -18
  686. package/theme-chalk/src/icon.css +0 -1
  687. package/theme-chalk/src/icon.scss +0 -35
  688. package/theme-chalk/src/image-upload.css +0 -1
  689. package/theme-chalk/src/image-upload.scss +0 -149
  690. package/theme-chalk/src/mixins/_var.css +0 -0
  691. package/theme-chalk/src/mixins/_var.scss +0 -24
  692. package/theme-chalk/src/mixins/config.css +0 -0
  693. package/theme-chalk/src/mixins/config.scss +0 -12
  694. package/theme-chalk/src/mixins/function.css +0 -0
  695. package/theme-chalk/src/mixins/function.scss +0 -95
  696. package/theme-chalk/src/mixins/mixins.css +0 -0
  697. package/theme-chalk/src/mixins/mixins.scss +0 -102
  698. package/theme-chalk/src/normalize.css +0 -1
  699. package/theme-chalk/src/normalize.scss +0 -11
  700. package/theme-chalk/src/photo-crop-tool.css +0 -1
  701. package/theme-chalk/src/photo-crop-tool.scss +0 -98
  702. package/theme-chalk/src/subject-action.css +0 -1
  703. package/theme-chalk/src/subject-action.scss +0 -78
  704. package/theme-chalk/src/subject-layout.css +0 -1
  705. package/theme-chalk/src/subject-layout.scss +0 -28
  706. package/theme-chalk/src/subject-list.css +0 -1
  707. package/theme-chalk/src/subject-list.scss +0 -568
  708. package/theme-chalk/src/subject-template.css +0 -1
  709. package/theme-chalk/src/subject-template.scss +0 -5
  710. package/theme-chalk/src/subject-type.css +0 -1
  711. package/theme-chalk/src/subject-type.scss +0 -42
  712. package/theme-chalk/src/tiny-mce-editor.css +0 -1
  713. package/theme-chalk/src/tiny-mce-editor.scss +0 -29
  714. package/theme-chalk/src/ui/button.css +0 -1
  715. package/theme-chalk/src/ui/button.scss +0 -173
  716. package/theme-chalk/src/ui/input.css +0 -1
  717. package/theme-chalk/src/ui/input.scss +0 -128
  718. package/theme-chalk/src/ui/table.css +0 -1
  719. package/theme-chalk/src/ui/table.scss +0 -166
  720. package/types/src/data-chart/src/analyze.d.ts +0 -23
  721. package/types/src/data-chart/src/analyze.d.ts.map +0 -1
  722. package/types/src/data-chart/src/components/area.vue.d.ts +0 -12
  723. package/types/src/data-chart/src/components/area.vue.d.ts.map +0 -1
  724. package/types/src/data-chart/src/components/bar.vue.d.ts +0 -12
  725. package/types/src/data-chart/src/components/bar.vue.d.ts.map +0 -1
  726. package/types/src/data-chart/src/components/card.vue.d.ts +0 -27
  727. package/types/src/data-chart/src/components/card.vue.d.ts.map +0 -1
  728. package/types/src/data-chart/src/components/empty.vue.d.ts +0 -11
  729. package/types/src/data-chart/src/components/empty.vue.d.ts.map +0 -1
  730. package/types/src/data-chart/src/components/funnel.vue.d.ts +0 -11
  731. package/types/src/data-chart/src/components/funnel.vue.d.ts.map +0 -1
  732. package/types/src/data-chart/src/components/line.vue.d.ts +0 -12
  733. package/types/src/data-chart/src/components/line.vue.d.ts.map +0 -1
  734. package/types/src/data-chart/src/components/pie.vue.d.ts +0 -12
  735. package/types/src/data-chart/src/components/pie.vue.d.ts.map +0 -1
  736. package/types/src/data-chart/src/components/radar.vue.d.ts +0 -11
  737. package/types/src/data-chart/src/components/radar.vue.d.ts.map +0 -1
  738. package/types/src/data-chart/src/components/scatter-simple.vue.d.ts +0 -11
  739. package/types/src/data-chart/src/components/scatter-simple.vue.d.ts.map +0 -1
  740. package/types/src/data-chart/src/components/scatter.vue.d.ts +0 -11
  741. package/types/src/data-chart/src/components/scatter.vue.d.ts.map +0 -1
  742. package/types/src/data-chart/src/components/table.vue.d.ts +0 -27
  743. package/types/src/data-chart/src/components/table.vue.d.ts.map +0 -1
  744. package/types/src/data-chart/src/data-chart.vue.d.ts +0 -28
  745. package/types/src/data-chart/src/data-chart.vue.d.ts.map +0 -1
  746. package/types/src/data-chart/src/utils/config.d.ts +0 -41
  747. package/types/src/data-chart/src/utils/config.d.ts.map +0 -1
  748. package/types/src/data-chart/src/utils/injectionKeys.d.ts +0 -3
  749. package/types/src/data-chart/src/utils/injectionKeys.d.ts.map +0 -1
  750. package/types/src/data-chart/src/utils/mapData.d.ts +0 -64
  751. package/types/src/data-chart/src/utils/mapData.d.ts.map +0 -1
  752. package/types/src/data-chart/src/utils/safe-eval.d.ts +0 -9
  753. package/types/src/data-chart/src/utils/safe-eval.d.ts.map +0 -1
  754. package/types/src/data-chart/src/utils/types.d.ts +0 -72
  755. package/types/src/data-chart/src/utils/types.d.ts.map +0 -1
  756. package/types/src/data-chart/src/utils/useCharts.d.ts +0 -16
  757. package/types/src/data-chart/src/utils/useCharts.d.ts.map +0 -1
  758. package/types/src/file-upload/src/file-upload.vue.d.ts +0 -34
  759. package/types/src/file-upload/src/file-upload.vue.d.ts.map +0 -1
  760. package/types/src/fixed-action-bar/index.d.ts +0 -56
  761. package/types/src/fixed-action-bar/index.d.ts.map +0 -1
  762. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts +0 -31
  763. package/types/src/fixed-action-bar/src/fixed-action-bar.vue.d.ts.map +0 -1
  764. package/types/src/image-upload/src/image-upload.vue.d.ts +0 -49
  765. package/types/src/image-upload/src/image-upload.vue.d.ts.map +0 -1
  766. package/types/src/photo-crop-tool/src/composables.d.ts +0 -7
  767. package/types/src/photo-crop-tool/src/composables.d.ts.map +0 -1
  768. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts +0 -65
  769. package/types/src/photo-crop-tool/src/photo-crop-tool.vue.d.ts.map +0 -1
  770. package/types/src/subject-list/src/components/SubjectRichText.vue.d.ts +0 -25
  771. package/types/src/subject-list/src/components/SubjectRichText.vue.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single.cjs","sources":["../../../../packages/components/src/subject/single.ts"],"sourcesContent":["import type { AnswerType } from './types'\nimport { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { safeCustomElement } from '../base/define'\nimport { uid } from '../base/uid'\nimport { SUB_TEXT_EDITOR_TOOLBAR } from '../editor/toolbar'\nimport { buildSubjectPreviewTitle, buildSubjectSortingTitle, emitSubjectEvent, emitSubjectModelValue, getSubjectImageResources, getSubjectVideoResource, resolveSubjectCategoryLabel, showSubjectToast } from './shared-methods'\nimport { subjectControlResetStyles, subjectFormBaseStyles, subjectHostStyles, subjectPreviewBaseStyles, subjectTextareaStyles } from './shared-styles'\nimport { renderSortingCard, sortingCardStyles } from './sorting-card'\nimport { SubjectTypeLabel } from './types'\n\nexport interface SubjectErrorOptions {\n message: string\n code?: string\n field?: string\n row?: any\n}\n\nexport class SubjectError extends Error {\n constructor(\n message: string,\n public code: string = 'VALIDATION_ERROR',\n public field?: string,\n public row?: any,\n ) {\n super(message)\n this.name = 'SubjectError'\n }\n\n static from(options: SubjectErrorOptions): SubjectError {\n return new SubjectError(options.message, options.code, options.field, options.row)\n }\n}\n\ninterface Answer {\n title: string\n isCorrect: boolean\n customAnswerId?: string\n answerId?: string\n resultItem?: string\n orderIndex?: number\n answerRelations?: any[]\n relationType?: number | null\n}\n\ninterface SubjectSnapshot {\n title: string\n answers: Answer[]\n analysis: string\n leastAnswerCount: number | null\n selectedTagList: TagItem[]\n examExpand: string\n showRichText: boolean\n richText: string\n orderList: string[]\n}\n\nconst iconPlus = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></svg>`\nconst iconRemove = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></svg>`\nconst iconArrow = html`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"6 9 12 15 18 9\"/></svg>`\n\nfunction normalizeTitle(text: string) {\n return text\n .replace(/^\\d+\\.\\s*/, '')\n .replace(/[\\s,,。.!!??;;::、'\"“”‘’()()[\\]【】\\-_/\\\\]+/g, '')\n .toLowerCase()\n}\n\nexport function trimText(value: unknown) {\n return String(value ?? '').trim()\n}\n\nexport function trimCommaSeparatedText(value: unknown) {\n return String(value ?? '')\n .split(',')\n .map(item => item.trim())\n .filter(Boolean)\n .join(',')\n}\n\n/**\n * 标签项 - 用于关联题目的标签信息\n * @typedef {object} TagItem\n * @property {string|number} tagId - 标签ID\n * @property {string} tagName - 标签名称\n * @property {KnowledgePointInfo[]} [knowledgePointInfos] - 关联的知识点的列表\n */\nexport interface TagItem {\n tagId: string | number\n tagName: string\n knowledgePointInfos?: KnowledgePointInfo[]\n}\n\n/**\n * 知识点信息\n * @typedef {object} KnowledgePointInfo\n * @property {string|number} knowledgePointId - 知识点ID\n * @property {string} knowledgePointName - 知识点名称\n */\nexport interface KnowledgePointInfo {\n knowledgePointId: string | number\n knowledgePointName: string\n}\n\n/**\n * 分类选项\n * @typedef {object} Category\n * @property {string|number} categoryId - 分类ID\n * @property {string} title - 分类标题\n */\nexport interface Category {\n categoryId: string | number\n title: string\n}\n\n/**\n * 题库搜索结果项\n * @typedef {object} SearchResult\n * @property {string|number} id - 题目ID\n * @property {string} title - 题目标题\n * @property {string} value - 用于搜索框显示的值\n * @property {any} [key: string] - 其他扩展字段\n */\nexport interface SearchResult {\n id: string | number\n title: string\n value: string\n [key: string]: any\n}\n\n/**\n * 题目资源(图片或视频)\n * @typedef {object} Resource\n * @property {1|2} resourceType - 资源类型:1-图片, 2-视频\n * @property {object} resource - 资源详情\n * @property {string} [resource.url] - 资源URL\n * @property {string} [resource.middle] - 中等尺寸图片URL\n * @property {string} [resource.videoId] - 视频ID\n */\nexport interface Resource {\n resourceType: 1 | 2\n resource: {\n url?: string\n middle?: string\n videoId?: string\n [key: string]: any\n }\n}\n\n@safeCustomElement('qxs-subject-single')\nexport class QxsSubjectSingle extends LitElement {\n static styles = [sortingCardStyles, subjectHostStyles, subjectControlResetStyles, subjectPreviewBaseStyles, subjectFormBaseStyles, subjectTextareaStyles, css`\n .preview-answer { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }\n .preview-answer .radio { display: grid; grid-template-columns: auto auto minmax(0, 1fr); column-gap: 10px; row-gap: 3px; align-items: center; }\n .preview-answer .order { color: #6b7280; font-size: 13px; font-weight: 600; }\n .preview-answer .answer-main { min-width: 0; display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 8px; }\n .preview-answer .answer-text { min-width: 0; font-size: 14px; line-height: 1.7; font-weight: 500; color: #303133; }\n .preview-answer .answer-meta { grid-column: 3; display: flex; flex-wrap: wrap; gap: 8px; font-size: 12px; line-height: 1.6; color: #8b95a7; }\n .preview-answer .correct { color: #3D61E3; font-weight: 600; }\n .preview-answer .result-info { color: #8b95a7; }\n\n .flex { display: flex; }\n .flex-items-center { display: flex; align-items: center; }\n .flex-items-start { display: flex; align-items: flex-start; }\n .flex-justify-end { display: flex; justify-content: flex-end; }\n .edit-actions {\n display: flex;\n justify-content: flex-end;\n padding-left: 88px;\n }\n .edit-inline {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px 14px;\n min-height: 32px;\n }\n .edit-note {\n margin-top: 6px;\n font-size: 12px;\n line-height: 1.6;\n color: #909399;\n }\n\n .answer-list { display: flex; flex-direction: column; gap: 10px; }\n .answer-item {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n border-radius: 4px;\n }\n .answer-item .label {\n min-width: 28px;\n font-size: 13px;\n font-weight: 600;\n color: #6b7280;\n letter-spacing: 0;\n }\n .answer-item .input { flex: 1; min-width: 240px; max-width: 380px; position: relative; display: block; }\n .answer-item .input input {\n height: 36px; padding: 0 56px 0 10px;\n font-size: 13px; line-height: 32px;\n border: 1px solid #dcdfe6; border-radius: 6px; width: 100%;\n transition: border-color .2s; box-sizing: border-box;\n }\n .answer-item .input input:focus { border-color: #3D61E3; outline: none; }\n .answer-item .input input:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }\n .answer-item .input .char-counter {\n position: absolute; right: 8px; top: 50%; transform: translateY(-50%);\n font-size: 12px; color: #909399; line-height: 1; pointer-events: none;\n }\n\n .answer-item .correct {\n color: #909399;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 20px;\n white-space: nowrap;\n }\n .answer-item .correct:hover { color: #3D61E3; }\n .answer-item .correct.is-correct { color: #67c23a; }\n .answer-item .correct input {\n width: 14px;\n height: 14px;\n margin: 0;\n flex: 0 0 auto;\n cursor: pointer;\n accent-color: #3D61E3;\n }\n .answer-item .correct .correct-text {\n display: inline-flex;\n align-items: center;\n line-height: 1.2;\n }\n\n .answer-item .icon {\n margin-left: 6px; cursor: pointer; display: inline-flex;\n align-items: center; justify-content: center;\n width: 24px; height: 24px; border-radius: 4px;\n border: 1px solid #dcdfe6; background: #fff; color: #909399;\n transition: all 0.2s;\n }\n .answer-item .icon:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }\n .answer-item .icon.disabled { color: #e4e7ed; border-color: #e4e7ed; cursor: not-allowed; }\n\n .answer-item .link {\n color: #3D61E3;\n cursor: pointer;\n font-size: 12px;\n white-space: nowrap;\n }\n .answer-item .link:hover { color: #2D4CB8; }\n\n .el-select {\n width: 150px; height: 34px; border: 1px solid #dcdfe6; border-radius: 6px;\n padding: 0 8px; font-size: 13px; background: #fff; appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23c0c4cc' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat; background-position: right 8px center;\n }\n .el-select:focus { border-color: #3D61E3; outline: none; }\n .el-select:disabled { background: #f5f7fa; color: #c0c4cc; cursor: not-allowed; }\n\n .sort-badge { font-weight: bold; color: #3D61E3; margin-left: 10px; }\n\n .el-link { color: #3D61E3; cursor: pointer; font-size: 12px; background: none; border: none; padding: 0; margin: 0; font-family: inherit; }\n .el-link:hover { color: #2D4CB8; }\n .el-link.danger { color: #f56c6c; }\n\n .value-text { font-size: 13px; color: #606266; white-space: pre-wrap; }\n .muted-text { font-size: 12px; color: #909399; }\n\n .search-wrap { position: relative; }\n .search-dropdown {\n position: absolute; z-index: 120; left: 0; right: 0; top: calc(100% + 4px);\n background: #fff; border: 1px solid #e4e7ed; border-radius: 6px;\n box-shadow: 0 8px 20px rgba(0,0,0,.12); overflow: hidden;\n }\n .search-item {\n padding: 10px 12px; cursor: pointer; transition: background .2s;\n font-size: 13px; color: #606266; line-height: 1.4;\n }\n .search-item:hover { background: #f5f7fa; color: #3D61E3; }\n .search-empty { padding: 10px 12px; font-size: 12px; color: #909399; }\n\n .tag-list { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-height: 32px; }\n .tag-item {\n display: inline-flex; align-items: center; gap: 4px;\n padding: 4px 8px; font-size: 12px; line-height: 1;\n color: #3D61E3; background: #ecf5ff; border: 1px solid #d9ecff; border-radius: 4px;\n }\n .tag-item .close { cursor: pointer; color: #909399; }\n .tag-item .close:hover { color: #f56c6c; }\n .tag-hint { font-size: 12px; color: #909399; }\n\n .resource-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px; }\n .resource-summary { font-size: 12px; color: #606266; }\n .resource-thumbs { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }\n .resource-thumb {\n width: 72px; height: 72px; object-fit: cover; border-radius: 6px;\n border: 1px solid #e4e7ed; cursor: pointer; background: #f5f7fa;\n }\n .resource-video {\n display: inline-flex; align-items: center; justify-content: center;\n min-width: 88px; height: 30px; padding: 0 10px; border: 1px solid #dcdfe6; border-radius: 4px;\n color: #606266; background: #fff; cursor: pointer; font-size: 12px; transition: all .2s;\n }\n .resource-video:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }\n .media-stage { display: flex; align-items: center; justify-content: center; min-height: 240px; }\n .media-stage img, .media-stage video { max-width: 100%; max-height: 60vh; border-radius: 6px; }\n .media-footer { display: flex; justify-content: space-between; align-items: center; gap: 8px; width: 100%; }\n .media-footer .group { display: flex; gap: 8px; }\n\n /* Multi-select with tags (Element Plus style) */\n .multi-select-wrapper { position: relative; }\n .multi-select {\n width: 240px; min-height: 36px; border: 1px solid #dcdfe6; border-radius: 6px;\n padding: 0 30px 0 8px; font-size: 13px; background: #fff; cursor: pointer;\n display: flex; flex-wrap: nowrap; align-items: center; gap: 4px;\n transition: border-color .2s; position: relative; overflow: hidden;\n }\n .multi-select:hover { border-color: #c0c4cc; }\n .multi-select.focused { border-color: #3D61E3; }\n .multi-select.disabled { background: #f5f7fa; cursor: not-allowed; }\n .multi-select .placeholder { color: #c0c4cc; font-size: 13px; padding: 4px 0; }\n .multi-select .arrow {\n position: absolute; right: 8px; top: 50%; transform: translateY(-50%);\n color: #c0c4cc; display: inline-flex; transition: transform .2s;\n }\n .multi-select.focused .arrow { transform: translateY(-50%) rotate(180deg); color: #3D61E3; }\n .multi-select .tag {\n display: inline-flex; align-items: center; gap: 2px;\n background: #f0f2f5; border-radius: 3px; padding: 0 6px; height: 20px;\n font-size: 12px; color: #606266; line-height: 20px;\n }\n .multi-select .tag .tag-close {\n display: inline-flex; cursor: pointer; color: #909399; margin-left: 2px; line-height: 1;\n }\n .multi-select .tag .tag-close:hover { color: #3D61E3; }\n .multi-select-dropdown {\n position: absolute; z-index: 100; background: #fff; left: 0; top: 100%; margin-top: 4px;\n border: 1px solid #e4e7ed; border-radius: 3px;\n box-shadow: 0 4px 12px rgba(0,0,0,.12); min-width: 240px; max-height: 140px; overflow-y: auto;\n }\n .multi-select-option {\n padding: 4px 12px; font-size: 13px; color: #606266; cursor: pointer;\n transition: background .2s;\n }\n .multi-select-option:hover { background: #f5f7fa; }\n .multi-select-option.selected { color: #3D61E3; font-weight: 500; }\n\n @media (max-width: 720px) {\n .edit-row,\n .section-row {\n flex-direction: column;\n gap: 8px;\n }\n\n .edit-row > .label,\n .section-row > .label {\n min-width: 0;\n padding-top: 0;\n }\n\n .edit-actions {\n padding-left: 0;\n justify-content: flex-start;\n }\n\n .answer-item .input {\n min-width: 0;\n max-width: none;\n width: 100%;\n }\n }\n\n .modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9000; display: flex; align-items: center; justify-content: center; }\n .modal { background: #fff; border-radius: 6px; width: 520px; max-width: 90vw; box-shadow: 0 12px 32px rgba(0,0,0,.12); display: flex; flex-direction: column; }\n .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px 12px; border-bottom: 1px solid #e4e7ed; }\n .modal-title { font-size: 14px; font-weight: 600; color: #303133; }\n .modal-close { background: none; border: none; font-size: 18px; cursor: pointer; color: #909399; padding: 0; line-height: 1; }\n .modal-close:hover { color: #3D61E3; }\n .modal-body { padding: 20px; }\n .modal-body textarea { min-height: 120px; }\n .modal-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid #e4e7ed; }\n .modal-footer button { padding: 6px 16px; font-size: 12px; border-radius: 3px; cursor: pointer; border: 1px solid #dcdfe6; background: #fff; color: #606266; }\n .modal-footer button:hover { color: #3D61E3; border-color: #a0cfff; }\n .modal-footer button.primary { background: #3D61E3; border-color: #3D61E3; color: #fff; }\n .modal-footer button.primary:hover { background: #2D4CB8; border-color: #2D4CB8; }\n .correct-hint-dialog { width: 520px; max-width: min(90vw, 520px); }\n .correct-hint-dialog .modal-header { padding: 18px 20px 14px; }\n .correct-hint-dialog .modal-title { font-size: 16px; font-weight: 700; color: #303133; }\n .correct-hint-dialog .modal-close { display: none; }\n .correct-hint-dialog .modal-body {\n padding: 32px 28px 20px;\n font-size: 14px;\n line-height: 1.8;\n color: #303133;\n text-align: center;\n }\n .correct-hint-copy { max-width: 420px; margin: 0 auto; }\n .correct-hint-highlight { color: #4c6fff; }\n .correct-hint-dialog .modal-footer {\n justify-content: center;\n gap: 12px;\n padding: 0 28px 28px;\n border-top: none;\n }\n .correct-hint-dialog .modal-footer button {\n min-width: 120px;\n height: 36px;\n padding: 0 18px;\n font-size: 14px;\n border-radius: 4px;\n }\n `]\n\n @property({ type: Number, attribute: 'order-index' }) 'order-index' = 0\n @property({ type: String, attribute: 'subject-prefix' }) 'subject-prefix'?: string\n @property({ type: Boolean, attribute: 'is-edit' }) 'is-edit' = false\n @property({ type: Boolean, attribute: 'is-save' }) 'is-save' = false\n @property({ type: Boolean, attribute: 'is-set' }) 'is-set' = false\n @property({ type: Boolean, attribute: 'is-set-correct-answer' }) 'is-set-correct-answer' = false\n @property({ type: Boolean, attribute: 'lock-answer-key' }) lockAnswerKey = false\n @property({ type: Boolean, attribute: 'is-key' }) 'is-key' = false\n @property({ type: Boolean, attribute: 'show-action' }) 'show-action' = true\n @property({ type: Boolean, attribute: 'show-add' }) 'show-add' = true\n @property({ type: Boolean, attribute: 'hide-add-rich-text' }) 'hide-add-rich-text' = false\n @property({ type: Boolean, attribute: 'show-rich-text' }) 'show-rich-text' = false\n @property({ type: Boolean, attribute: 'show-delete-action' }) 'show-delete-action' = true\n @property({ type: Boolean, attribute: 'show-save-action' }) 'show-save-action' = true\n @property({ type: Boolean, reflect: true }) sorting = false\n @property({ type: Boolean, attribute: 'show-answer-setting' }) 'show-answer-setting' = false\n @property({ type: Boolean, attribute: 'show-key' }) 'show-key' = false\n @property({ type: Boolean, attribute: 'show-analysis' }) 'show-analysis' = false\n @property({ attribute: 'question-type', reflect: true }) type: AnswerType = 'single'\n @property({ type: Number, attribute: 'answer-check-type' }) 'answer-check-type' = 1\n @property({ type: Number, attribute: 'exam-answer-relation-type' }) 'exam-answer-relation-type' = 0\n @property({ type: String, attribute: 'rich-text-content' }) 'rich-text-content' = ''\n @property({ type: String }) analysis = ''\n @property({ type: Number, attribute: 'least-answer-count' }) 'least-answer-count': number | null = null\n @property({ type: String, attribute: 'exam-expand' }) 'exam-expand' = ''\n @property({ type: String, attribute: 'custom-id' }) 'custom-id' = ''\n @property({ type: Number, attribute: 'exam-id' }) 'exam-id' = 0\n @property({ type: String, attribute: 'category-id' }) 'category-id' = ''\n @property({ type: Object, attribute: 'upload-image' }) 'upload-image': (file: File) => Promise<string> = async (file: File) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = e => resolve(e.target?.result as string)\n reader.onerror = reject\n reader.readAsDataURL(file)\n })\n }\n\n @property({ type: Array, attribute: 'answer-list' })\n get 'answer-list'() { return this._answers }\n\n set 'answer-list'(v: any) {\n // 编辑模式下不接受外部更新,避免覆盖用户正在编辑的内容\n if (this['is-edit']) {\n return\n }\n const arr = Array.isArray(v) ? v : []\n this._answers = arr.length\n ? arr.map((a: any) => this._normalizeAnswerItem(a))\n : [\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n ]\n this.requestUpdate('answer-list')\n }\n\n // ============ 业务接口 Props ============\n /**\n * 标签列表 - 用于关联题目的标签信息\n * @type {TagItem[]}\n * @description 业务系统传入已选择的标签列表\n */\n @property({ type: Array, attribute: 'tag-list' }) 'tag-list': TagItem[] = []\n /**\n * 分类列表 - 可用于题目的分类选项\n * @type {Category[]}\n * @description 业务系统传入可选的分类列表\n */\n @property({ type: Array, attribute: 'category-list' }) 'category-list': Category[] = []\n /**\n * AI 推荐答案 - AI 根据题目内容推荐的答案\n * @type {string}\n * @description AI 返回的推荐答案,格式如 \"1. 选项A\\n2. 选项B\"\n */\n @property({ type: String, attribute: 'ai-answer' }) 'ai-answer' = ''\n /**\n * 图片/视频资源列表 - 题目附带的媒体资源\n * @type {Resource[]}\n * @description 题目附带图片或视频资源\n */\n @property({ type: Array, attribute: 'resource-list' }) 'resource-list': Resource[] = []\n /**\n * 是否显示标签功能\n * @type {boolean}\n * @default false\n * @description 业务功能开关,控制是否显示标签选择 UI\n */\n @property({ type: Boolean, attribute: 'show-tag' }) 'show-tag' = false\n /**\n * 是否显示分类功能\n * @type {boolean}\n * @default false\n * @description 业务功能开关,控制是否显示分类选择 UI\n */\n @property({ type: Boolean, attribute: 'show-category' }) 'show-category' = false\n /**\n * 是否显示 AI 推荐功能\n * @type {boolean}\n * @default false\n * @description 业务功能开关,控制是否显示 AI 推荐答案 UI\n */\n @property({ type: Boolean, attribute: 'show-ai' }) 'show-ai' = false\n /**\n * 是否显示资源功能\n * @type {boolean}\n * @default false\n * @description 业务功能开关,控制是否显示图片/视频资源 UI\n */\n @property({ type: Boolean, attribute: 'show-resource' }) 'show-resource' = false\n /**\n * 是否显示跳题功能\n * @type {boolean}\n * @default false\n * @description 业务功能开关,控制是否显示跳题逻辑设置入口\n */\n @property({ type: Boolean, attribute: 'show-jump' }) 'show-jump' = false\n /**\n * 跳题状态 - 是否已设置跳题逻辑\n * @type {boolean}\n * @default false\n * @description 标记当前题目是否已设置跳题逻辑\n */\n @property({ type: Boolean, attribute: 'has-jump' }) 'has-jump' = false\n /**\n * 题库搜索接口地址\n * @type {string}\n * @description 题库模糊搜索接口地址,用于题库搜索功能\n */\n @property({ type: String, attribute: 'search-api' }) 'search-api' = ''\n /**\n * 题库搜索回调函数\n * @type {Function}\n * @param {string} query - 搜索关键词\n * @param {number} answerType - 题目类型:0-单选, 1-多选\n * @returns {Promise<SearchResult[]>} 搜索结果列表\n * @description 题库搜索的回调函数,由业务系统实现搜索逻辑\n */\n @property({ type: Object, attribute: 'search-handler' }) 'search-handler'?: (query: string, answerType: number) => Promise<SearchResult[]>\n\n // 双向绑定支持\n @property({ type: String, attribute: 'model-value' }) 'model-value' = ''\n @property({ type: Boolean, attribute: 'use-model' }) 'use-model' = false\n\n @state() private _answers: Answer[] = [\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n { title: '', isCorrect: false }, { title: '', isCorrect: false },\n ]\n\n @property({ type: String }) title = ''\n\n @state() private _title = ''\n @state() private _analysis = ''\n @state() private _richText = ''\n @state() private _showRichText = false\n @state() private _leastAnswerCount: number | null = null\n @state() private _answerCheckType = 1\n @state() private _isKey = false\n @state() private _orderList: string[] = []\n @state() private _selectedTagList: TagItem[] = []\n @state() private _categoryId = ''\n @state() private _searchResults: SearchResult[] = []\n @state() private _searchOpen = false\n @state() private _searchLoading = false\n @state() private _sortDropdownOpen = false\n @state() private _imageViewerOpen = false\n @state() private _imageViewerIndex = 0\n @state() private _videoViewerOpen = false\n @state() private _correctHintDialogOpen = false\n @state() private _hasShownCorrectHint = false\n @state() private _changeTypeDialogOpen = false\n\n private _searchTimer: number | null = null\n private _searchToken = 0\n\n private readonly TITLE_MAX = 200\n private readonly ANSWER_MAX = 100\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._handleDocumentClick)\n this._syncExternalProps()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('click', this._handleDocumentClick)\n if (this._searchTimer) {\n window.clearTimeout(this._searchTimer)\n this._searchTimer = null\n }\n }\n\n private _handleDocumentClick = (e: MouseEvent) => {\n const path = e.composedPath()\n const wrapper = this.shadowRoot?.querySelector('.multi-select-wrapper')\n const searchWrap = this.shadowRoot?.querySelector('.search-wrap')\n if (wrapper && !path.includes(wrapper)) {\n this._sortDropdownOpen = false\n }\n if (searchWrap && !path.includes(searchWrap)) {\n this._searchOpen = false\n }\n this.requestUpdate()\n }\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('is-edit') && this['is-edit']) { this._syncProps() }\n if (!this['is-edit'] && (changed.has('title') || changed.has('answer-list') || changed.has('analysis') || changed.has('least-answer-count') || changed.has('answer-check-type') || changed.has('tag-list') || changed.has('category-id') || changed.has('rich-text-content'))) {\n this._syncExternalProps()\n }\n if (changed.has('is-key')) {\n this._isKey = this['is-key']\n }\n if (changed.has('tag-list')) {\n this._selectedTagList = Array.isArray(this['tag-list']) ? this['tag-list'].map(item => ({ ...item })) : []\n }\n if (changed.has('category-id')) {\n this._categoryId = this['category-id'] ? String(this['category-id']) : ''\n }\n if (changed.has('exam-expand') || changed.has('answer-list')) { this._syncExamExpand() }\n if (changed.has('model-value') && this['use-model']) {\n this._title = this['model-value']\n }\n }\n\n private _supportsLeastAnswerCount(answerType: AnswerType = this.type) {\n return answerType === 'multiple' || answerType === 'sort'\n }\n\n private _normalizeLeastAnswerCount(value: unknown, answerType: AnswerType = this.type): number | null {\n if (!this._supportsLeastAnswerCount(answerType) || value === '' || value === null || value === undefined) {\n return null\n }\n const count = Number(value)\n return Number.isFinite(count) && count > 0 ? count : null\n }\n\n private _leastAnswerCountSuffix(value: number | null, answerType: AnswerType = this.type) {\n if (!this._supportsLeastAnswerCount(answerType) || value === null) {\n return ''\n }\n return `,至少选${value}项${answerType === 'sort' ? '并排序' : ''}`\n }\n\n private _normalizeAnswerItem(answer: any): Answer {\n const next: Answer = {\n ...answer,\n title: trimText(answer?.title ?? answer?.answer ?? ''),\n isCorrect: !!answer?.isCorrect,\n }\n const answerId = answer?.answerId ?? answer?.examAnswerId\n if (answerId !== undefined) {\n next.answerId = answerId\n }\n return next\n }\n\n private _syncExternalProps() {\n this._title = this.title || ''\n this._analysis = this.analysis || ''\n this._leastAnswerCount = this._normalizeLeastAnswerCount(this['least-answer-count'])\n this._answerCheckType = this['answer-check-type'] || 1\n this._isKey = this['is-key']\n this._selectedTagList = Array.isArray(this['tag-list']) ? this['tag-list'].map(item => ({ ...item })) : []\n this._categoryId = this['category-id'] ? String(this['category-id']) : ''\n this._richText = this['rich-text-content'] || ''\n this._showRichText = !!this['rich-text-content']\n if (this['answer-list']?.length) {\n this._answers = this['answer-list'].map((a: any) => this._normalizeAnswerItem(a))\n }\n }\n\n private _syncProps() {\n this._title = (this as any).title || ''\n this._analysis = this.analysis || ''\n this._leastAnswerCount = this._normalizeLeastAnswerCount(this['least-answer-count'])\n this._answerCheckType = this['answer-check-type'] || 1\n this._isKey = this['is-key']\n this._selectedTagList = Array.isArray(this['tag-list']) ? this['tag-list'].map(item => ({ ...item })) : []\n this._categoryId = this['category-id'] ? String(this['category-id']) : ''\n this._richText = this['rich-text-content'] || ''\n this._showRichText = !!this['rich-text-content']\n if (this['answer-list']?.length) {\n this._answers = this['answer-list'].map((a: any) => this._normalizeAnswerItem(a))\n }\n this._syncExamExpand()\n }\n\n private _syncExamExpand() {\n if (!this['exam-expand'] || !this['answer-list']?.length) { return }\n const ids = this['exam-expand'].split(',')\n const answers = this['answer-list'] as any[]\n this._orderList = ids.map((id) => {\n const index = answers.findIndex((answer, answerIndex) =>\n String(answer.answerId ?? answer.orderIndex ?? (answerIndex + 1)) === String(id),\n )\n return index >= 0 ? this._label(index) : ''\n }).filter(Boolean)\n }\n\n private _emit(name: string, detail?: unknown) {\n emitSubjectEvent(this, name, detail)\n }\n\n private _searchAnswerType() {\n if (this.type === 'single') { return 0 }\n if (this.type === 'multiple') { return 1 }\n return 5\n }\n\n private _queueSearch(query: string) {\n if (this._searchTimer) {\n window.clearTimeout(this._searchTimer)\n this._searchTimer = null\n }\n const keyword = query.trim()\n if (!keyword || (!this['search-api'] && typeof this['search-handler'] !== 'function')) {\n this._searchResults = []\n this._searchOpen = false\n this._searchLoading = false\n return\n }\n this._searchTimer = window.setTimeout(() => {\n void this._runSearch(keyword)\n }, 300)\n }\n\n private async _runSearch(query: string) {\n const currentToken = ++this._searchToken\n this._searchLoading = true\n this._searchOpen = true\n this.requestUpdate()\n try {\n let result: SearchResult[] = []\n if (typeof this['search-handler'] === 'function') {\n result = await this['search-handler'](query, this._searchAnswerType())\n }\n else if (this['search-api']) {\n const params = new URLSearchParams({\n searchKey: query,\n answerType: String(this._searchAnswerType()),\n })\n const response = await fetch(`${this['search-api']}${this['search-api'].includes('?') ? '&' : '?'}${params.toString()}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const payload = await response.json()\n const list = Array.isArray(payload) ? payload : Array.isArray(payload?.data) ? payload.data : []\n result = list.map((item: any) => ({\n ...item,\n value: item?.value || item?.title || '',\n }))\n }\n if (currentToken !== this._searchToken) { return }\n this._searchResults = Array.isArray(result) ? result : []\n }\n catch (error: any) {\n if (currentToken !== this._searchToken) { return }\n this._searchResults = []\n showSubjectToast(error?.message || '题库搜索失败')\n }\n finally {\n if (currentToken === this._searchToken) {\n this._searchLoading = false\n this.requestUpdate()\n }\n }\n }\n\n private _selectSearchResult(item: SearchResult) {\n const selectedTitle = item.value || item.title || ''\n this._title = selectedTitle\n this._searchResults = []\n this._searchOpen = false\n if (this['use-model']) {\n emitSubjectModelValue(this, this._title)\n }\n this._emit('title-select', {\n ...item,\n id: item.id ?? item.examId ?? item.questionId,\n title: item.title || selectedTitle,\n value: selectedTitle,\n customId: this['custom-id'] || '',\n })\n }\n\n private _applyAiAnswer() {\n if (!this['ai-answer']?.trim()) {\n showSubjectToast('暂无 AI 推荐答案')\n return\n }\n const aiTitles = this['ai-answer']\n .split(/\\r?\\n/)\n .map(line => normalizeTitle(line))\n .filter(Boolean)\n let matched = 0\n if (this.type === 'single') {\n let selected = false\n this._answers = this._answers.map((answer) => {\n const shouldSelect = !selected && aiTitles.includes(normalizeTitle(answer.title || ''))\n if (shouldSelect) {\n selected = true\n matched++\n }\n return { ...answer, isCorrect: shouldSelect }\n })\n }\n else {\n this._answers = this._answers.map((answer) => {\n const shouldSelect = aiTitles.includes(normalizeTitle(answer.title || ''))\n if (shouldSelect) { matched++ }\n return { ...answer, isCorrect: shouldSelect }\n })\n }\n if (!matched) {\n showSubjectToast('未找到匹配的选项,请检查选项内容是否一致')\n return\n }\n this.requestUpdate()\n }\n\n private _onCategoryChange(value: string) {\n this._categoryId = value\n this._emit('category-change', {\n value,\n customId: this['custom-id'] || '',\n examId: this['exam-id'] || 0,\n })\n }\n\n private _setRelation(item: Answer, answerIndex: number) {\n const answer = item.customAnswerId\n ? { ...item }\n : { ...item, customAnswerId: item.answerId || uid() }\n this._answers = this._answers.map((current, index) => index === answerIndex ? answer : current)\n this.requestUpdate()\n this._emit('set-relation', {\n customId: this['custom-id'] || '',\n examId: this['exam-id'] || 0,\n answerIndex,\n answer,\n })\n }\n\n private _relationLength(relations: any[] = []) {\n return relations.reduce((count, item) => count + (Array.isArray(item?.relationAnswers) ? item.relationAnswers.length : 0), 0)\n }\n\n private _emitEditResultItem(item: Answer, answerIndex: number) {\n this._emit('edit-result-item', {\n customId: this['custom-id'] || '',\n examId: this['exam-id'] || 0,\n answerIndex,\n answer: { ...item },\n resultItem: item.resultItem || '',\n })\n }\n\n private _resultSlotName(index: number) {\n return `business-result-item-${index}`\n }\n\n private _imageResources() {\n return getSubjectImageResources(this['resource-list'] || [])\n }\n\n private _videoResource() {\n return getSubjectVideoResource(this['resource-list'] || [])\n }\n\n private _openImageViewer(index = 0) {\n if (!this._imageResources().length) { return }\n this._imageViewerIndex = index\n this._imageViewerOpen = true\n }\n\n private _closeImageViewer() {\n this._imageViewerOpen = false\n }\n\n private _moveImage(step: number) {\n const images = this._imageResources()\n if (!images.length) { return }\n this._imageViewerIndex = (this._imageViewerIndex + step + images.length) % images.length\n }\n\n private _openVideoViewer() {\n if (!this._videoResource()?.url) { return }\n this._videoViewerOpen = true\n }\n\n private _closeVideoViewer() {\n this._videoViewerOpen = false\n }\n\n private _label(i: number) { return String.fromCharCode(65 + i) }\n\n private get _titlePlaceholder() {\n return this.type === 'single' ? '单选题' : this.type === 'multiple' ? '多选题' : '排序题'\n }\n\n private _setCorrect(item: Answer, val: boolean) {\n if (this.lockAnswerKey) { return }\n if (this.type === 'single') {\n this._answers = this._answers.map(answer => ({\n ...answer,\n isCorrect: answer === item ? val : (val ? false : !!answer.isCorrect),\n }))\n }\n else {\n this._answers = this._answers.map(answer => answer === item\n ? { ...answer, isCorrect: val }\n : answer)\n }\n this.requestUpdate()\n }\n\n private _onTitleInput(e: Event) {\n const el = e.target as HTMLTextAreaElement\n if (el.value.length > this.TITLE_MAX) { el.value = el.value.slice(0, this.TITLE_MAX) }\n this._title = el.value\n this._queueSearch(this._title)\n // 双向绑定:通知外部更新\n if (this['use-model']) {\n emitSubjectModelValue(this, this._title)\n }\n }\n\n private _onAnswerInput(e: Event, idx: number) {\n const el = e.target as HTMLInputElement\n if (el.value.length > this.ANSWER_MAX) { el.value = el.value.slice(0, this.ANSWER_MAX) }\n this._answers[idx].title = el.value\n this.requestUpdate()\n }\n\n private _addAnswer(index: number) {\n const arr = [...this._answers]\n arr.splice(index + 1, 0, { title: '', isCorrect: false, customAnswerId: uid() })\n this._answers = arr\n }\n\n private _deleteAnswer(index: number) {\n if (this._answers.length < 3) { return }\n this._answers = this._answers.filter((_, i) => i !== index)\n }\n\n private _toggleSortItem(letter: string) {\n const idx = this._orderList.indexOf(letter)\n if (idx >= 0) {\n this._orderList = this._orderList.filter(l => l !== letter)\n }\n else {\n this._orderList = [...this._orderList, letter]\n }\n this.requestUpdate()\n }\n\n private _removeSortItem(letter: string) {\n this._orderList = this._orderList.filter(l => l !== letter)\n this.requestUpdate()\n }\n\n private _getSortOrder(index: number): number | null {\n const pos = this._orderList.indexOf(this._label(index))\n return pos >= 0 ? pos + 1 : null\n }\n\n private _sortAnswerValue(letter: string) {\n const index = letter.charCodeAt(0) - 65\n const answer = this._answers[index] as any\n return answer?.answerId ?? index + 1\n }\n\n private _rowMeta() {\n return {\n customId: this['custom-id'] || undefined,\n answerType: this.type,\n orderIndex: this['order-index'],\n }\n }\n\n private _collectSnapshot(): SubjectSnapshot {\n const answers = (this['is-edit'] ? this._answers : this['answer-list'] || []).map((answer: any) => ({\n ...answer,\n title: trimText(answer?.title ?? answer?.answer ?? ''),\n isCorrect: !!answer?.isCorrect,\n resultItem: trimText(answer?.resultItem ?? ''),\n }))\n const orderList = this['is-edit']\n ? [...this._orderList]\n : (() => {\n const expand = this['exam-expand']\n if (!expand) { return [] }\n return expand.split(',').map((id: string) => {\n const index = (this['answer-list'] as any[])?.findIndex((answer, answerIndex) =>\n String(answer.answerId ?? answer.orderIndex ?? (answerIndex + 1)) === String(id),\n )\n return index >= 0 ? this._label(index) : ''\n }).filter(Boolean)\n })()\n return {\n title: trimText(this['is-edit'] ? this._title : (this as any).title || ''),\n answers,\n analysis: trimText(this['is-edit'] ? this._analysis : this.analysis || ''),\n leastAnswerCount: this['is-edit']\n ? this._leastAnswerCount\n : this._normalizeLeastAnswerCount(this['least-answer-count']),\n selectedTagList: Array.isArray(this._selectedTagList) ? [...this._selectedTagList] : [],\n examExpand: this['is-edit']\n ? orderList.map((letter: string) => this._sortAnswerValue(letter)).join(',')\n : (this['exam-expand'] || ''),\n showRichText: this['is-edit'] ? this._showRichText : !!this['rich-text-content'],\n richText: this['is-edit'] ? this._richText : this['rich-text-content'] || '',\n orderList,\n }\n }\n\n private _validateSnapshot(snapshot: SubjectSnapshot, answerType: AnswerType = this.type) {\n const row = this._rowMeta()\n const errors: SubjectError[] = []\n\n if (!snapshot.title) {\n errors.push(new SubjectError('题目标题不能为空!', 'EMPTY_TITLE', 'title', row))\n }\n let isSetCorrectAnswer = false\n let correctAnswerCount = 0\n\n snapshot.answers.forEach((answer, index) => {\n if (!answer.title?.trim()) {\n errors.push(new SubjectError(`选项${String.fromCharCode(65 + index)}未填写`, 'ANSWER_EMPTY', 'answers', row))\n }\n if (answerType !== 'sort' && answer.isCorrect) {\n isSetCorrectAnswer = true\n correctAnswerCount++\n }\n })\n\n const titleSet = new Set(snapshot.answers.map(answer => answer.title))\n if (titleSet.size !== snapshot.answers.length && snapshot.answers.length > 0) {\n errors.push(new SubjectError('选项不能重复', 'DUPLICATE_ANSWERS', 'answers', row))\n }\n\n if (answerType === 'single' && correctAnswerCount > 1) {\n errors.push(new SubjectError(\n '此题为单选题,设置了多个推荐/正确选项,请保存时确认是否切换为多选题',\n 'SINGLE_MULTI_CORRECT',\n 'answers',\n row,\n ))\n }\n\n if (answerType === 'multiple') {\n if (correctAnswerCount === 1) {\n errors.push(new SubjectError('请设置至少两个推荐/正确选项', 'CORRECT_COUNT_INVALID', 'answers', row))\n }\n if (correctAnswerCount > 0) {\n isSetCorrectAnswer = true\n }\n if (isSetCorrectAnswer && snapshot.leastAnswerCount !== null && correctAnswerCount < snapshot.leastAnswerCount) {\n errors.push(new SubjectError('至少选几项与推荐/正确选项数不符', 'LEAST_ANSWER_COUNT_INVALID', 'answers', row))\n }\n }\n\n if (answerType === 'sort') {\n isSetCorrectAnswer = snapshot.orderList.length > 0\n if (snapshot.leastAnswerCount !== null && snapshot.orderList.length < snapshot.leastAnswerCount) {\n errors.push(new SubjectError('至少选几项与推荐/正确选项数不符', 'LEAST_ANSWER_COUNT_INVALID', 'orderList', row))\n }\n }\n\n return {\n errors,\n isSetCorrectAnswer,\n correctAnswerCount,\n }\n }\n\n private _serialize(answerType: AnswerType = this.type) {\n const snapshot = this._collectSnapshot()\n const { errors, isSetCorrectAnswer } = this._validateSnapshot(snapshot, answerType)\n if (errors.length) {\n throw errors[0]\n }\n const result: any = {\n answerType: String(answerType),\n examTypeEnum: String(answerType),\n title: snapshot.title,\n answers: snapshot.answers.map((answer, index) => {\n const relationType = answer.resultItem\n ? 1\n : (Array.isArray(answer.answerRelations) && answer.answerRelations.length ? 2 : null)\n const next: any = { ...answer, orderIndex: index + 1, answer: answer.title, relationType }\n if (answer.answerId !== undefined) {\n next.examAnswerId = answer.answerId\n }\n if (relationType === null) {\n delete next.relationType\n }\n return next\n }),\n examExpand: snapshot.examExpand,\n analysis: snapshot.analysis,\n isSetCorrectAnswer,\n examRichTextContent: snapshot.showRichText ? snapshot.richText : '',\n }\n if (this['exam-answer-relation-type']) {\n result.examAnswerRelationType = this['exam-answer-relation-type']\n }\n if (this._supportsLeastAnswerCount(answerType)) {\n result.leastAnswerCount = snapshot.leastAnswerCount\n }\n if (this['custom-id']) { result.customId = this['custom-id'] }\n return result\n }\n\n private _shouldShowCorrectHint() {\n if (this.type === 'sort') {\n return !this._orderList.length\n }\n return !this._answers.some(answer => !!answer.isCorrect)\n }\n\n private async _finalizeSave() {\n try {\n const data = await this.toJSON()\n this._emit('save', data)\n }\n catch (err: any) {\n showSubjectToast(err.message)\n }\n }\n\n async toJSON(): Promise<any> {\n return Promise.resolve(this._serialize())\n }\n\n validate(): SubjectError[] {\n return this._validateSnapshot(this._collectSnapshot()).errors\n }\n\n setResultItem(answerIndex: number, resultItem: string) {\n if (answerIndex < 0 || answerIndex >= this._answers.length) {\n return\n }\n this._answers = this._answers.map((answer, index) => index === answerIndex\n ? { ...answer, resultItem: resultItem || '' }\n : answer)\n this.requestUpdate()\n }\n\n setAnswerRelation(customAnswerId: string, answerRelations: any) {\n if (!customAnswerId) {\n return\n }\n this._answers = this._answers.map((answer) => {\n const currentId = String(answer.customAnswerId ?? answer.answerId ?? '')\n return currentId === String(customAnswerId)\n ? { ...answer, answerRelations }\n : answer\n })\n this.requestUpdate()\n }\n\n private _renderCorrectHintDialog() {\n if (!this._correctHintDialogOpen) { return '' }\n return html`\n <div class=\"modal-backdrop\" @click=${() => { this._correctHintDialogOpen = false }}>\n <div class=\"modal correct-hint-dialog\" @click=${(e: Event) => e.stopPropagation()}>\n <div class=\"modal-header\">\n <span class=\"modal-title\">温馨提示</span>\n </div>\n <div class=\"modal-body\">\n <div class=\"correct-hint-copy\">\n 为了收集更全面、有价值的数据,建议您为问卷每题设定<span class=\"correct-hint-highlight\">推荐/正确选项</span>。这将助力深入分析,让调研结果更精准、有意义。\n </div>\n </div>\n <div class=\"modal-footer\">\n <button @click=${async () => {\n this._hasShownCorrectHint = true\n this._correctHintDialogOpen = false\n await this._finalizeSave()\n }}>完成编辑</button>\n <button class=\"primary\" @click=${() => { this._correctHintDialogOpen = false }}>去设置</button>\n </div>\n </div>\n </div>\n `\n }\n\n private _renderChangeTypeDialog() {\n if (!this._changeTypeDialogOpen) { return '' }\n return html`\n <div class=\"modal-backdrop\" @click=${() => { this._changeTypeDialogOpen = false }}>\n <div class=\"modal\" @click=${(e: Event) => e.stopPropagation()}>\n <div class=\"modal-header\">\n <span class=\"modal-title\">提示</span>\n <button class=\"modal-close\" @click=${() => { this._changeTypeDialogOpen = false }}>&#x2715;</button>\n </div>\n <div class=\"modal-body\">\n <div class=\"value-text\">此题为单选题,设置了多个推荐/正确选项,是否切换成多选题?</div>\n </div>\n <div class=\"modal-footer\">\n <button @click=${() => { this._changeTypeDialogOpen = false }}>取消</button>\n <button class=\"primary\" @click=${() => {\n try {\n const data = this._serialize('multiple')\n this._changeTypeDialogOpen = false\n this._emit('save', data)\n }\n catch (error: any) {\n showSubjectToast(error?.message || '保存失败')\n }\n }}>切换</button>\n </div>\n </div>\n </div>\n `\n }\n\n private _renderSearchDropdown() {\n if (!this['is-edit'] || (!this._searchOpen && !this._searchLoading)) { return '' }\n return html`\n <div class=\"search-dropdown\">\n ${this._searchLoading\n ? html`<div class=\"search-empty\">搜索中...</div>`\n : this._searchResults.length\n ? this._searchResults.map(item => html`\n <div class=\"search-item\" @click=${() => this._selectSearchResult(item)}>${item.value || item.title}</div>\n `)\n : html`<div class=\"search-empty\">暂无匹配题目</div>`}\n </div>\n `\n }\n\n private _renderCategorySection() {\n if (!this['show-category']) { return '' }\n return html`\n <div class=\"flex-items-start section-row\">\n <div class=\"label\"><span>分类:</span></div>\n <div style=\"flex:1\">\n ${this['is-edit']\n ? html`\n <select class=\"el-select\" .value=${String(this._categoryId)}\n @change=${(e: Event) => this._onCategoryChange((e.target as HTMLSelectElement).value)}>\n <option value=\"\">选择分类</option>\n ${this['category-list'].map(item => html`\n <option value=${String(item.categoryId)} ?selected=${String(item.categoryId) === String(this._categoryId)}>${item.title}</option>\n `)}\n </select>\n `\n : html`<span class=\"value-text\">${resolveSubjectCategoryLabel(this['category-list'], this._categoryId)}</span>`}\n </div>\n </div>\n `\n }\n\n private _renderAiSection() {\n if (!this['show-ai'] || !['single', 'multiple'].includes(this.type)) { return '' }\n return html`\n <div class=\"flex-items-start section-row\">\n <div class=\"label\"><span>AI推荐:</span></div>\n <div style=\"flex:1\">\n <span class=\"value-text\">${this['ai-answer'] || '暂无'}</span>\n ${this['is-edit']\n ? html`<div style=\"margin-top:8px\"><span class=\"el-link\" @click=${() => this._applyAiAnswer()}>一键勾选</span></div>`\n : ''}\n </div>\n </div>\n `\n }\n\n private _renderResourceSection() {\n if (!this['show-resource']) { return '' }\n const images = this._imageResources()\n const video = this._videoResource()\n return html`\n <div class=\"flex-items-start section-row\">\n <div class=\"label\"><span>资源:</span></div>\n <div style=\"flex:1\">\n <div class=\"resource-summary\">\n 图片 ${images.length} 张${video ? ',含视频资源' : ''}\n </div>\n <div class=\"resource-actions\">\n ${images.length ? html`<span class=\"el-link\" @click=${() => this._openImageViewer(0)}>查看图片</span>` : ''}\n ${video?.url ? html`<span class=\"el-link\" @click=${() => this._openVideoViewer()}>查看视频</span>` : ''}\n ${!images.length && !video?.url ? html`<span class=\"muted-text\">暂无资源</span>` : ''}\n </div>\n ${images.length\n ? html`\n <div class=\"resource-thumbs\">\n ${images.slice(0, 4).map((src, index) => html`\n <img class=\"resource-thumb\" src=${src} alt=\"resource\" @click=${() => this._openImageViewer(index)} />\n `)}\n </div>\n `\n : ''}\n </div>\n </div>\n `\n }\n\n private _renderImageViewer() {\n if (!this._imageViewerOpen) { return '' }\n const images = this._imageResources()\n const current = images[this._imageViewerIndex]\n if (!current) { return '' }\n return html`\n <div class=\"modal-backdrop\" @click=${() => this._closeImageViewer()}>\n <div class=\"modal\" @click=${(e: Event) => e.stopPropagation()}>\n <div class=\"modal-header\">\n <span class=\"modal-title\">图片预览</span>\n <button class=\"modal-close\" @click=${() => this._closeImageViewer()}>&#x2715;</button>\n </div>\n <div class=\"modal-body\">\n <div class=\"media-stage\"><img src=${current} alt=\"resource-preview\" /></div>\n </div>\n <div class=\"modal-footer\">\n <div class=\"media-footer\">\n <span class=\"muted-text\">${this._imageViewerIndex + 1} / ${images.length}</span>\n <div class=\"group\">\n ${images.length > 1 ? html`<button @click=${() => this._moveImage(-1)}>上一张</button>` : ''}\n ${images.length > 1 ? html`<button @click=${() => this._moveImage(1)}>下一张</button>` : ''}\n <button class=\"primary\" @click=${() => this._closeImageViewer()}>关闭</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n `\n }\n\n private _renderVideoViewer() {\n const video = this._videoResource()\n if (!this._videoViewerOpen || !video?.url) { return '' }\n return html`\n <div class=\"modal-backdrop\" @click=${() => this._closeVideoViewer()}>\n <div class=\"modal\" @click=${(e: Event) => e.stopPropagation()}>\n <div class=\"modal-header\">\n <span class=\"modal-title\">视频预览</span>\n <button class=\"modal-close\" @click=${() => this._closeVideoViewer()}>&#x2715;</button>\n </div>\n <div class=\"modal-body\">\n <div class=\"media-stage\">\n <video src=${video.url} controls playsinline></video>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"primary\" @click=${() => this._closeVideoViewer()}>关闭</button>\n </div>\n </div>\n </div>\n `\n }\n\n private async _save(e?: Event) {\n e?.stopImmediatePropagation()\n const errors = this.validate()\n const convertWarning = errors.find(error => error.code === 'SINGLE_MULTI_CORRECT')\n const blockingErrors = errors.filter(error => error.code !== 'SINGLE_MULTI_CORRECT')\n if (blockingErrors.length) {\n showSubjectToast(blockingErrors[0].message)\n return\n }\n if (convertWarning) {\n this._changeTypeDialogOpen = true\n return\n }\n if (!this._hasShownCorrectHint && this._shouldShowCorrectHint()) {\n this._correctHintDialogOpen = true\n return\n }\n await this._finalizeSave()\n }\n\n private _renderPreview() {\n const typeSuffix = this.type === 'single'\n ? '(单选题)'\n : `(${this._titlePlaceholder}${this._leastAnswerCountSuffix(this._normalizeLeastAnswerCount(this['least-answer-count']))})`\n const answers = this['answer-list'] as Answer[]\n const previewTitle = buildSubjectPreviewTitle(this['subject-prefix'], this['order-index'], (this as any).title || '')\n return html`\n <div class=\"preview\">\n <div class=\"preview-header\">\n <div class=\"preview-title-row\">\n <span class=\"title\">${previewTitle}</span>\n <span class=\"preview-type\">${typeSuffix.replace(/[()]/g, '')}</span>\n </div>\n ${this['show-rich-text'] && this['rich-text-content'] ? html`<div class=\"rich-text\" .innerHTML=${this['rich-text-content']}></div>` : ''}\n </div>\n <div class=\"preview-answer\">\n ${answers.map((a, i) => html`\n <div class=\"radio\">\n <input type=\"${this.type === 'sort' ? 'checkbox' : 'radio'}\" .checked=${!!a.isCorrect} disabled />\n <span class=\"order\">${this._label(i)}.</span>\n <div class=\"answer-main\">\n <span class=\"answer-text\">${a.title}</span>\n ${this.type !== 'sort' && a.isCorrect ? html`<span class=\"correct\">推荐 / 正确选项</span>` : ''}\n </div>\n ${this.type !== 'sort' && (\n this['exam-answer-relation-type'] === 1\n || this['exam-answer-relation-type'] === 2\n )\n ? html`\n <div class=\"answer-meta\">\n ${this['exam-answer-relation-type'] === 1\n ? html`<span class=\"result-info\">${a.resultItem ? '已设置结果项' : '未设置结果项'}</span>`\n : ''}\n ${this['exam-answer-relation-type'] === 2\n ? html`<span class=\"result-info\">${Array.isArray(a.answerRelations) && a.answerRelations.length ? `关联了${this._relationLength(a.answerRelations)}项` : '未设置关联'}</span>`\n : ''}\n </div>\n `\n : ''}\n </div>\n `)}\n </div>\n ${this['show-category'] && this._categoryId\n ? html`<div class=\"section-row\"><span class=\"value-text\">分类:${resolveSubjectCategoryLabel(this['category-list'], this._categoryId)}</span></div>`\n : ''}\n ${this['show-resource'] ? this._renderResourceSection() : ''}\n </div>\n `\n }\n\n private _renderSorting() {\n const title = trimText(this['is-edit'] ? this._title : (this as any).title || '') || '未命名题目'\n const orderText = buildSubjectSortingTitle(this['subject-prefix'], this['order-index'], title)\n return renderSortingCard(orderText, SubjectTypeLabel[this.type] || this.type)\n }\n\n private _renderEdit() {\n return html`\n <div class=\"edit-form\">\n <div class=\"edit-row\">\n <div class=\"label\"><span>题目:</span></div>\n <div class=\"row-body\">\n <div class=\"el-input search-wrap\">\n <textarea rows=\"2\" .value=${this._title}\n maxlength=${this.TITLE_MAX}\n @input=${(e: Event) => this._onTitleInput(e)}\n placeholder=\"【${this._titlePlaceholder}】请输入问题\"></textarea>\n <span class=\"char-counter\">${this._title.length}/${this.TITLE_MAX}</span>\n ${this._renderSearchDropdown()}\n </div>\n </div>\n </div>\n\n ${['multiple', 'sort'].includes(this.type)\n ? html`\n <div class=\"edit-row section-row\">\n <div class=\"label\"><span>设置:</span></div>\n <div class=\"row-body\">\n <select class=\"el-select\" .value=${this._leastAnswerCount === null ? '' : String(this._leastAnswerCount)} ?disabled=${this.lockAnswerKey}\n @change=${(e: Event) => {\n const value = (e.target as HTMLSelectElement).value\n this._leastAnswerCount = this._normalizeLeastAnswerCount(value)\n }}>\n <option value=\"\">至少选择几项</option>\n ${Array.from({ length: Math.max(0, this._answers.length - 1) }, (_, i) => i + 2).map(n => html`\n <option value=${n} ?selected=${this._leastAnswerCount === n}>至少选择${n}项</option>\n `)}\n </select>\n </div>\n </div>\n `\n : ''}\n\n <div class=\"edit-row section-row edit-row--compact\">\n <div class=\"label\"><span>${this.type === 'sort' ? '排序项:' : '选项:'}</span></div>\n <div class=\"row-body\">\n <div class=\"answer-list\">\n ${this._answers.map((a, i) => html`\n <div class=\"answer-item\">\n <span class=\"label\">${this._label(i)}.</span>\n <div class=\"input\">\n <input type=\"text\" .value=${a.title}\n maxlength=${this.ANSWER_MAX}\n @input=${(e: Event) => this._onAnswerInput(e, i)}\n placeholder=\"选项${this._label(i)}\" />\n <span class=\"char-counter\">${a.title.length}/${this.ANSWER_MAX}</span>\n </div>\n\n ${this.type === 'sort' && this._getSortOrder(i) !== null\n ? html`<span class=\"sort-badge\">第${this._getSortOrder(i)}位</span>`\n : ''}\n\n ${['single', 'multiple'].includes(this.type)\n ? html`\n <label class=\"correct ${a.isCorrect ? 'is-correct' : ''}\">\n <input type=\"checkbox\" .checked=${a.isCorrect} ?disabled=${this.lockAnswerKey}\n @change=${(e: Event) => this._setCorrect(a, (e.target as HTMLInputElement).checked)} />\n <span class=\"correct-text\">推荐/正确选项</span>\n </label>\n `\n : ''}\n\n <span class=\"icon\"\n @click=${() => this._addAnswer(i)}>\n ${iconPlus}\n </span>\n <span class=\"icon ${this._answers.length < 3 ? 'disabled' : ''}\"\n @click=${() => this._deleteAnswer(i)}>\n ${iconRemove}\n </span>\n\n ${this['exam-answer-relation-type'] === 1 && this.type !== 'sort'\n ? html`\n <slot name=${this._resultSlotName(i)}>\n <button class=\"el-link\" @click=${() => this._emitEditResultItem(a, i)}>\n ${a.resultItem ? '编辑结果' : '添加结果'}\n </button>\n </slot>\n `\n : ''}\n\n ${this['exam-answer-relation-type'] === 2 && this.type !== 'sort'\n ? html`\n <button class=\"el-link\" @click=${() => this._setRelation(a, i)}>\n ${Array.isArray(a.answerRelations) && a.answerRelations.length ? `关联了${this._relationLength(a.answerRelations)}项` : '关联检查'}\n </button>\n `\n : ''}\n\n </div>\n `)}\n </div>\n </div>\n </div>\n\n ${this.type === 'sort'\n ? html`\n <div class=\"edit-row section-row\">\n <div class=\"label\"><span>排序答案:</span></div>\n <div class=\"row-body\">\n <div class=\"multi-select-wrapper\">\n <div class=\"multi-select ${this._sortDropdownOpen ? 'focused' : ''} ${this.lockAnswerKey ? 'disabled' : ''}\"\n @click=${() => { if (!this.lockAnswerKey) { this._sortDropdownOpen = !this._sortDropdownOpen; this.requestUpdate() } }}>\n ${this._orderList.length > 0\n ? this._orderList.map(l => html`\n <span class=\"tag\">\n ${l}\n <span class=\"tag-close\" @click=${(e: Event) => {\n if (this.lockAnswerKey) { return }\n e.stopPropagation()\n this._removeSortItem(l)\n }}>&#x2715;</span>\n </span>\n `)\n : html`<span class=\"placeholder\">请按顺序选择排序答案</span>`\n }\n <span class=\"arrow\">${iconArrow}</span>\n </div>\n ${this._sortDropdownOpen\n ? html`\n <div class=\"multi-select-dropdown\">\n ${this._answers.map((_, i) => html`\n <div class=\"multi-select-option ${this._orderList.includes(this._label(i)) ? 'selected' : ''}\"\n @click=${() => {\n if (this.lockAnswerKey) { return }\n this._toggleSortItem(this._label(i))\n this.requestUpdate()\n }}>\n ${this._label(i)}\n </div>\n `)}\n </div>\n `\n : ''}\n </div>\n </div>\n </div>\n `\n : ''}\n\n <slot name=\"business-tag\"></slot>\n\n ${this._renderCategorySection()}\n\n ${this._renderAiSection()}\n\n ${this._renderResourceSection()}\n\n ${this['show-rich-text'] && this._showRichText\n ? html`\n <div class=\"edit-row section-row\">\n <div class=\"label\"><span>副文本:</span></div>\n <div class=\"row-body\">\n <slot name=\"sub-text\">\n <qxs-blocksuite-editor\n .content=${this._richText}\n .toolbar=${SUB_TEXT_EDITOR_TOOLBAR}\n .upload-image=${this['upload-image']}\n ?is-edit=${true}\n @input=${(e: CustomEvent) => { this._richText = (e.target as any).getContent() }}\n ></qxs-blocksuite-editor>\n </slot>\n ${!this['show-action']\n ? html`<div class=\"flex-justify-end\" style=\"margin-top:8px\"><span class=\"el-link danger\" @click=${() => { this._showRichText = false; this._richText = '' }}>删除富文本</span></div>`\n : ''}\n </div>\n </div>\n `\n : ''}\n\n ${this['show-analysis']\n ? html`\n <div class=\"edit-row section-row\">\n <div class=\"label\"><span>解析:</span></div>\n <div class=\"row-body\">\n <textarea rows=\"2\" .value=${this._analysis}\n @input=${(e: Event) => { this._analysis = (e.target as HTMLTextAreaElement).value }}\n placeholder=\"请输入题目解析\"></textarea>\n </div>\n </div>\n `\n : ''}\n </div>\n `\n }\n\n render() {\n if (this.sorting) {\n return this._renderSorting()\n }\n\n const content = this['is-edit']\n ? html`<div slot=\"edit\">${this._renderEdit()}</div>`\n : html`<div slot=\"preview\">${this._renderPreview()}</div>`\n\n return html`\n <qxs-subject-layout .show-edit=${this['is-edit']}>\n ${content}\n ${this['show-action']\n ? html`\n <qxs-subject-action\n .is-edit=${this['is-edit']}\n .is-set=${this['is-set']}\n .show-add=${this['show-add']}\n .show-rich-text=${this['show-rich-text'] && this._showRichText}\n .hide-add-rich-text=${!this['show-rich-text'] || this['hide-add-rich-text']}\n .show-delete-action=${this['show-delete-action']}\n .show-save-action=${this['show-save-action']}\n .show-jump=${this['show-jump']}\n @delete=${() => this._emit('delete')}\n @save=${this._save}\n @edit=${() => this._emit('edit')}\n @move=${(e: CustomEvent) => this._emit('move', e.detail)}\n @jump=${() => this._emit('jump', {\n customId: this['custom-id'] || '',\n examId: this['exam-id'] || 0,\n answerType: this.type,\n })}\n @add=${(e: CustomEvent) => this._emit('add', e.detail)}\n @on-show-rich-text=${() => {\n this._showRichText = !this._showRichText\n if (!this._showRichText) {\n this._richText = ''\n }\n }}\n ></qxs-subject-action>\n `\n : ''}\n <slot name=\"action\"></slot>\n </qxs-subject-layout>\n ${this._renderCorrectHintDialog()}\n ${this._renderChangeTypeDialog()}\n ${this._renderImageViewer()}\n ${this._renderVideoViewer()}\n `\n }\n}\n\nexport function register() {}\n"],"names":["SubjectError","Error","constructor","message","code","arguments","length","undefined","field","row","super","this","name","from","options","iconPlus","html","iconRemove","iconArrow","normalizeTitle","text","replace","toLowerCase","trimText","value","String","trim","QxsSubjectSingle","LitElement","lockAnswerKey","sorting","type","analysis","async","Promise","resolve","reject","reader","FileReader","onload","e","target","result","onerror","readAsDataURL","file","_answers","title","isCorrect","_title","_analysis","_richText","_showRichText","_leastAnswerCount","_answerCheckType","_isKey","_orderList","_selectedTagList","_categoryId","_searchResults","_searchOpen","_searchLoading","_sortDropdownOpen","_imageViewerOpen","_imageViewerIndex","_videoViewerOpen","_correctHintDialogOpen","_hasShownCorrectHint","_changeTypeDialogOpen","_searchTimer","_searchToken","TITLE_MAX","ANSWER_MAX","_handleDocumentClick","path","composedPath","wrapper","shadowRoot","querySelector","searchWrap","includes","requestUpdate","v","arr","Array","isArray","map","a","_normalizeAnswerItem","connectedCallback","document","addEventListener","_syncExternalProps","disconnectedCallback","removeEventListener","window","clearTimeout","willUpdate","changed","has","_syncProps","item","_syncExamExpand","_supportsLeastAnswerCount","answerType","_normalizeLeastAnswerCount","count","Number","isFinite","_leastAnswerCountSuffix","answer","next","answerId","examAnswerId","ids","split","answers","id","index","findIndex","answerIndex","orderIndex","_label","filter","Boolean","_emit","detail","emitSubjectEvent","_searchAnswerType","_queueSearch","query","keyword","setTimeout","_runSearch","currentToken","params","URLSearchParams","searchKey","response","fetch","toString","ok","status","payload","json","data","error","showSubjectToast","_selectSearchResult","selectedTitle","emitSubjectModelValue","examId","questionId","customId","_applyAiAnswer","aiTitles","line","matched","selected","shouldSelect","_onCategoryChange","_setRelation","customAnswerId","uid","current","_relationLength","reduce","relationAnswers","_emitEditResultItem","resultItem","_resultSlotName","_imageResources","getSubjectImageResources","_videoResource","getSubjectVideoResource","_openImageViewer","_closeImageViewer","_moveImage","step","images","_openVideoViewer","url","_closeVideoViewer","i","fromCharCode","_titlePlaceholder","_setCorrect","val","_onTitleInput","el","slice","_onAnswerInput","idx","_addAnswer","splice","_deleteAnswer","_","_toggleSortItem","letter","indexOf","l","_removeSortItem","_getSortOrder","pos","_sortAnswerValue","charCodeAt","_rowMeta","_collectSnapshot","orderList","expand","leastAnswerCount","selectedTagList","examExpand","join","showRichText","richText","_validateSnapshot","snapshot","errors","push","isSetCorrectAnswer","correctAnswerCount","forEach","Set","size","_serialize","examTypeEnum","relationType","answerRelations","examRichTextContent","examAnswerRelationType","_shouldShowCorrectHint","some","_finalizeSave","toJSON","err","validate","setResultItem","setAnswerRelation","_renderCorrectHintDialog","stopPropagation","_renderChangeTypeDialog","_renderSearchDropdown","_renderCategorySection","categoryId","resolveSubjectCategoryLabel","_renderAiSection","_renderResourceSection","video","src","_renderImageViewer","_renderVideoViewer","_save","stopImmediatePropagation","convertWarning","find","blockingErrors","_renderPreview","typeSuffix","previewTitle","buildSubjectPreviewTitle","_renderSorting","orderText","buildSubjectSortingTitle","renderSortingCard","SubjectTypeLabel","_renderEdit","Math","max","n","checked","SUB_TEXT_EDITOR_TOOLBAR","getContent","render","content","styles","sortingCardStyles","subjectHostStyles","subjectControlResetStyles","subjectPreviewBaseStyles","subjectFormBaseStyles","subjectTextareaStyles","css","__decorateClass","property","attribute","prototype","reflect","Object","state","safeCustomElement"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";exports.moveSubjectItem=function(t,e,r){if(e===r||e<0||r<0||e>=t.length||r>=t.length)return t.map(t=>({...t}));const n=t.map(t=>({...t})),[s]=n.splice(e,1);return n.splice(r,0,s),n},exports.reorderSubjects=function(t,e){if(!e.length)return t.map(t=>({...t}));const r=new Map,n=[];return t.forEach(t=>{t.customId&&r.set(String(t.customId),{...t})}),e.forEach(t=>{const e=r.get(String(t));e&&(n.push(e),r.delete(String(t)))}),t.forEach(t=>{t.customId&&!r.has(String(t.customId))||(n.push(r.get(String(t.customId))||{...t}),r.delete(String(t.customId)))}),n};
2
+ //# sourceMappingURL=sort-controller.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-controller.cjs","sources":["../../../../packages/components/src/subject/sort-controller.ts"],"sourcesContent":["import type { SubjectLikeItem } from './pagination'\n\nexport function moveSubjectItem(items: SubjectLikeItem[], fromIndex: number, toIndex: number): SubjectLikeItem[] {\n if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= items.length || toIndex >= items.length) {\n return items.map(item => ({ ...item }))\n }\n\n const next = items.map(item => ({ ...item }))\n const [moved] = next.splice(fromIndex, 1)\n next.splice(toIndex, 0, moved)\n return next\n}\n\nexport function reorderSubjects(items: SubjectLikeItem[], orderedIds: string[]): SubjectLikeItem[] {\n if (!orderedIds.length) {\n return items.map(item => ({ ...item }))\n }\n\n const itemMap = new Map<string, SubjectLikeItem>()\n const next: SubjectLikeItem[] = []\n\n items.forEach((item) => {\n if (item.customId) {\n itemMap.set(String(item.customId), { ...item })\n }\n })\n\n orderedIds.forEach((id) => {\n const item = itemMap.get(String(id))\n if (!item) {\n return\n }\n next.push(item)\n itemMap.delete(String(id))\n })\n\n items.forEach((item) => {\n if (!item.customId || itemMap.has(String(item.customId))) {\n next.push(itemMap.get(String(item.customId)) || { ...item })\n itemMap.delete(String(item.customId))\n }\n })\n\n return next\n}\n"],"names":["items","fromIndex","toIndex","length","map","item","next","moved","splice","orderedIds","itemMap","Map","forEach","customId","set","String","id","get","push","delete","has"],"mappings":"qCAEO,SAAyBA,EAA0BC,EAAmBC,GAC3E,GAAID,IAAcC,GAAWD,EAAY,GAAKC,EAAU,GAAKD,GAAaD,EAAMG,QAAUD,GAAWF,EAAMG,OACzG,OAAOH,EAAMI,IAAIC,IAAA,IAAcA,KAGjC,MAAMC,EAAON,EAAMI,YAAkBC,MAC9BE,GAASD,EAAKE,OAAOP,EAAW,GAEvC,OADAK,EAAKE,OAAON,EAAS,EAAGK,GACjBD,CACT,0BAEO,SAAyBN,EAA0BS,GACxD,IAAKA,EAAWN,OACd,OAAOH,EAAMI,IAAIC,IAAA,IAAcA,KAGjC,MAAMK,MAAcC,IACdL,EAA0B,GAwBhC,OAtBAN,EAAMY,QAASP,IACTA,EAAKQ,UACPH,EAAQI,IAAIC,OAAOV,EAAKQ,UAAW,IAAKR,MAI5CI,EAAWG,QAASI,IAClB,MAAMX,EAAOK,EAAQO,IAAIF,OAAOC,IAC3BX,IAGLC,EAAKY,KAAKb,GACVK,EAAQS,OAAOJ,OAAOC,OAGxBhB,EAAMY,QAASP,IACRA,EAAKQ,WAAYH,EAAQU,IAAIL,OAAOV,EAAKQ,aAC5CP,EAAKY,KAAKR,EAAQO,IAAIF,OAAOV,EAAKQ,YAAc,IAAKR,IACrDK,EAAQS,OAAOJ,OAAOV,EAAKQ,cAIxBP,CACT"}
@@ -0,0 +1,30 @@
1
+ "use strict";var e=require("lit"),t=require("lit/decorators.js"),s=require("sortablejs"),r=require("../base/define.cjs"),o=require("./sort-controller.cjs"),i=require("./types.cjs"),l=Object.defineProperty,a=Object.getOwnPropertyDescriptor,n=(e,t,s,r)=>{for(var o,i=r>1?void 0:r?a(t,s):t,n=e.length-1;n>=0;n--)(o=e[n])&&(i=(r?o(t,s,i):o(i))||i);return r&&i&&l(t,s,i),i};exports.QxsSubjectSortable=class extends e.LitElement{constructor(){super(...arguments),this.items=[],this._items=[],this._sortable=null}willUpdate(e){e.has("items")&&(this._items=Array.isArray(this.items)?this.items.map(e=>({...e})):[])}firstUpdated(){this._initSortable()}updated(e){e.has("_items")&&(this._sortable?.destroy(),this._sortable=null,this.updateComplete.then(()=>this._initSortable()))}disconnectedCallback(){super.disconnectedCallback(),this._sortable?.destroy(),this._sortable=null}reorderByIds(e){this._items=o.reorderSubjects(this._items,e),this._emitSortChange()}_initSortable(){const e=this.renderRoot.querySelector(".sort-list");e&&(this._sortable=s.create(e,{handle:".handle",animation:180,ghostClass:"sort-ghost",chosenClass:"sort-chosen",onEnd:e=>{const{oldIndex:t,newIndex:s}=e;null!=t&&null!=s&&t!==s&&(this._items=o.moveSubjectItem(this._items,t,s),this._emitSortChange(t,s))}}))}_emitSortChange(e,t){this.dispatchEvent(new CustomEvent("sort-change",{bubbles:!0,composed:!0,detail:{items:this._items.map(e=>({...e})),newIndex:t,oldIndex:e,orderedIds:this._items.map(e=>String(e.customId||"")).filter(Boolean)}}))}_label(e,t){return"function"==typeof this["label-renderer"]?this["label-renderer"](e,t):e.title||`未命名${i.SubjectTypeLabel[e.answerType]||"题目"}`}render(){return e.html`
2
+ <div class="sort-list">
3
+ ${this._items.map((t,s)=>e.html`
4
+ <div class="sort-item" data-id=${t.customId||""}>
5
+ <span class="handle">⋮⋮</span>
6
+ <div class="content">
7
+ <div class="title">${this._label(t,s)}</div>
8
+ <div class="meta">${i.SubjectTypeLabel[t.answerType]||t.answerType}</div>
9
+ </div>
10
+ </div>
11
+ `)}
12
+ </div>
13
+ `}},exports.QxsSubjectSortable.styles=e.css`
14
+ :host { display: block; font-family: inherit; font-size: 13px; }
15
+ *, ::before, ::after { box-sizing: border-box; }
16
+ .sort-list { display: flex; flex-direction: column; gap: 10px; }
17
+ .sort-item {
18
+ display: flex; align-items: center; gap: 12px;
19
+ padding: 12px 14px; background: #fff; border: 1px solid #e4e7ed; border-radius: 10px;
20
+ cursor: grab; transition: all .2s;
21
+ }
22
+ .sort-item:hover { border-color: #bfd1ff; background: #f8fbff; }
23
+ .sort-item.sort-ghost { opacity: .5; background: #ecf5ff; }
24
+ .sort-item.sort-chosen { border-color: #3D61E3; box-shadow: 0 8px 20px rgba(61,97,227,.12); }
25
+ .handle { color: #909399; font-size: 16px; user-select: none; }
26
+ .content { flex: 1; min-width: 0; }
27
+ .title { font-size: 13px; color: #303133; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
28
+ .meta { margin-top: 4px; font-size: 12px; color: #909399; }
29
+ `,n([t.property({type:Array})],exports.QxsSubjectSortable.prototype,"items",2),n([t.property({type:Object,attribute:"label-renderer"})],exports.QxsSubjectSortable.prototype,"label-renderer",2),n([t.state()],exports.QxsSubjectSortable.prototype,"_items",2),exports.QxsSubjectSortable=n([r.safeCustomElement("qxs-subject-sortable")],exports.QxsSubjectSortable);
30
+ //# sourceMappingURL=sortable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortable.cjs","sources":["../../../../packages/components/src/subject/sortable.ts"],"sourcesContent":["import type { SubjectLikeItem } from './pagination'\nimport { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport Sortable, { type SortableEvent, type SortableInstance } from 'sortablejs'\nimport { safeCustomElement } from '../base/define'\nimport { moveSubjectItem, reorderSubjects } from './sort-controller'\nimport { SubjectTypeLabel } from './types'\n\n@safeCustomElement('qxs-subject-sortable')\nexport class QxsSubjectSortable extends LitElement {\n static styles = css`\n :host { display: block; font-family: inherit; font-size: 13px; }\n *, ::before, ::after { box-sizing: border-box; }\n .sort-list { display: flex; flex-direction: column; gap: 10px; }\n .sort-item {\n display: flex; align-items: center; gap: 12px;\n padding: 12px 14px; background: #fff; border: 1px solid #e4e7ed; border-radius: 10px;\n cursor: grab; transition: all .2s;\n }\n .sort-item:hover { border-color: #bfd1ff; background: #f8fbff; }\n .sort-item.sort-ghost { opacity: .5; background: #ecf5ff; }\n .sort-item.sort-chosen { border-color: #3D61E3; box-shadow: 0 8px 20px rgba(61,97,227,.12); }\n .handle { color: #909399; font-size: 16px; user-select: none; }\n .content { flex: 1; min-width: 0; }\n .title { font-size: 13px; color: #303133; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .meta { margin-top: 4px; font-size: 12px; color: #909399; }\n `\n\n @property({ type: Array }) items: SubjectLikeItem[] = []\n @property({ type: Object, attribute: 'label-renderer' }) 'label-renderer'?: (item: SubjectLikeItem, index: number) => string\n\n @state() private _items: SubjectLikeItem[] = []\n private _sortable: SortableInstance | null = null\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('items')) {\n this._items = Array.isArray(this.items) ? this.items.map(item => ({ ...item })) : []\n }\n }\n\n firstUpdated() {\n this._initSortable()\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('_items')) {\n this._sortable?.destroy()\n this._sortable = null\n this.updateComplete.then(() => this._initSortable())\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._sortable?.destroy()\n this._sortable = null\n }\n\n reorderByIds(orderedIds: string[]) {\n this._items = reorderSubjects(this._items, orderedIds)\n this._emitSortChange()\n }\n\n private _initSortable() {\n const list = this.renderRoot.querySelector<HTMLElement>('.sort-list')\n if (!list) {\n return\n }\n this._sortable = Sortable.create(list, {\n handle: '.handle',\n animation: 180,\n ghostClass: 'sort-ghost',\n chosenClass: 'sort-chosen',\n onEnd: (event: SortableEvent) => {\n const { oldIndex, newIndex } = event\n if (oldIndex == null || newIndex == null || oldIndex === newIndex) {\n return\n }\n this._items = moveSubjectItem(this._items, oldIndex, newIndex)\n this._emitSortChange(oldIndex, newIndex)\n },\n })\n }\n\n private _emitSortChange(oldIndex?: number, newIndex?: number) {\n this.dispatchEvent(new CustomEvent('sort-change', {\n bubbles: true,\n composed: true,\n detail: {\n items: this._items.map(item => ({ ...item })),\n newIndex,\n oldIndex,\n orderedIds: this._items.map(item => String(item.customId || '')).filter(Boolean),\n },\n }))\n }\n\n private _label(item: SubjectLikeItem, index: number) {\n if (typeof this['label-renderer'] === 'function') {\n return this['label-renderer'](item, index)\n }\n return item.title || `未命名${SubjectTypeLabel[item.answerType] || '题目'}`\n }\n\n render() {\n return html`\n <div class=\"sort-list\">\n ${this._items.map((item, index) => html`\n <div class=\"sort-item\" data-id=${item.customId || ''}>\n <span class=\"handle\">⋮⋮</span>\n <div class=\"content\">\n <div class=\"title\">${this._label(item, index)}</div>\n <div class=\"meta\">${SubjectTypeLabel[item.answerType] || item.answerType}</div>\n </div>\n </div>\n `)}\n </div>\n `\n }\n}\n\nexport function register() {}\n"],"names":["QxsSubjectSortable","LitElement","constructor","super","arguments","this","items","_items","_sortable","willUpdate","changed","has","Array","isArray","map","item","firstUpdated","_initSortable","updated","destroy","updateComplete","then","disconnectedCallback","reorderByIds","orderedIds","reorderSubjects","_emitSortChange","list","renderRoot","querySelector","Sortable","create","handle","animation","ghostClass","chosenClass","onEnd","event","oldIndex","newIndex","moveSubjectItem","dispatchEvent","CustomEvent","bubbles","composed","detail","String","customId","filter","Boolean","_label","index","title","SubjectTypeLabel","answerType","render","html","styles","css","__decorateClass","property","type","prototype","Object","attribute","state","safeCustomElement"],"mappings":"iXASaA,QAAAA,mBAAN,cAAiCC,EAAAA,WAAjCC,WAAAA,GAAAC,SAAAC,WAmBsBC,KAAAC,MAA2B,GAG7CD,KAAQE,OAA4B,GAC7CF,KAAQG,UAAqC,IAAA,CAE7CC,UAAAA,CAAWC,GACLA,EAAQC,IAAI,WACdN,KAAKE,OAASK,MAAMC,QAAQR,KAAKC,OAASD,KAAKC,MAAMQ,YAAkBC,KAAW,GAEtF,CAEAC,YAAAA,GACEX,KAAKY,eACP,CAEAC,OAAAA,CAAQR,GACFA,EAAQC,IAAI,YACdN,KAAKG,WAAWW,UAChBd,KAAKG,UAAY,KACjBH,KAAKe,eAAeC,KAAK,IAAMhB,KAAKY,iBAExC,CAEAK,oBAAAA,GACEnB,MAAMmB,uBACNjB,KAAKG,WAAWW,UAChBd,KAAKG,UAAY,IACnB,CAEAe,YAAAA,CAAaC,GACXnB,KAAKE,OAASkB,EAAAA,gBAAgBpB,KAAKE,OAAQiB,GAC3CnB,KAAKqB,iBACP,CAEQT,aAAAA,GACN,MAAMU,EAAOtB,KAAKuB,WAAWC,cAA2B,cACnDF,IAGLtB,KAAKG,UAAYsB,EAASC,OAAOJ,EAAM,CACrCK,OAAQ,UACRC,UAAW,IACXC,WAAY,aACZC,YAAa,cACbC,MAAQC,IACN,MAAMC,SAAEA,EAAAC,SAAUA,GAAaF,EACf,MAAZC,GAAgC,MAAZC,GAAoBD,IAAaC,IAGzDlC,KAAKE,OAASiC,EAAAA,gBAAgBnC,KAAKE,OAAQ+B,EAAUC,GACrDlC,KAAKqB,gBAAgBY,EAAUC,OAGrC,CAEQb,eAAAA,CAAgBY,EAAmBC,GACzClC,KAAKoC,cAAc,IAAIC,YAAY,cAAe,CAChDC,SAAS,EACTC,UAAU,EACVC,OAAQ,CACNvC,MAAOD,KAAKE,OAAOO,YAAkBC,KACrCwB,WACAD,WACAd,WAAYnB,KAAKE,OAAOO,IAAIC,GAAQ+B,OAAO/B,EAAKgC,UAAY,KAAKC,OAAOC,YAG9E,CAEQC,MAAAA,CAAOnC,EAAuBoC,GACpC,MAAsC,mBAA3B9C,KAAK,kBACPA,KAAK,kBAAkBU,EAAMoC,GAE/BpC,EAAKqC,OAAS,MAAMC,EAAAA,iBAAiBtC,EAAKuC,aAAe,MAClE,CAEAC,MAAAA,GACE,OAAOC,EAAAA,IAAA;;UAEDnD,KAAKE,OAAOO,IAAI,CAACC,EAAMoC,IAAUK,EAAAA,IAAA;2CACAzC,EAAKgC,UAAY;;;mCAGzB1C,KAAK6C,OAAOnC,EAAMoC;kCACnBE,EAAAA,iBAAiBtC,EAAKuC,aAAevC,EAAKuC;;;;;KAM1E,GA7GWtD,QAAAA,mBACJyD,OAASC,EAAAA,GAAA;;;;;;;;;;;;;;;;IAkBWC,EAAA,CAA1BC,EAAAA,SAAS,CAAEC,KAAMjD,SAnBPZ,QAAAA,mBAmBgB8D,UAAA,QAAA,GAC8BH,EAAA,CAAxDC,EAAAA,SAAS,CAAEC,KAAME,OAAQC,UAAW,oBApB1BhE,QAAAA,mBAoB8C8D,UAAA,iBAAA,GAExCH,EAAA,CAAhBM,EAAAA,SAtBUjE,QAAAA,mBAsBM8D,UAAA,SAAA,GAtBN9D,QAAAA,mBAAN2D,EAAA,CADNO,EAAAA,kBAAkB,yBACNlE,QAAAA"}
@@ -0,0 +1,52 @@
1
+ "use strict";var r=require("lit");const i=r.css`
2
+ .sorting-card {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 12px;
6
+ padding: 12px 14px;
7
+ background: #fff;
8
+ border: 1px solid #e4e7ed;
9
+ border-radius: 10px;
10
+ transition: all 0.2s;
11
+ }
12
+
13
+ .sorting-card:hover {
14
+ border-color: #bfd1ff;
15
+ background: #f8fbff;
16
+ }
17
+
18
+ .sorting-handle {
19
+ color: #909399;
20
+ font-size: 16px;
21
+ line-height: 1;
22
+ user-select: none;
23
+ }
24
+
25
+ .sorting-content {
26
+ flex: 1;
27
+ min-width: 0;
28
+ }
29
+
30
+ .sorting-title {
31
+ font-size: 13px;
32
+ color: #303133;
33
+ white-space: nowrap;
34
+ overflow: hidden;
35
+ text-overflow: ellipsis;
36
+ }
37
+
38
+ .sorting-meta {
39
+ margin-top: 4px;
40
+ font-size: 12px;
41
+ color: #909399;
42
+ }
43
+ `;exports.renderSortingCard=function(i,t){return r.html`
44
+ <div class="sorting-card">
45
+ <span class="sorting-handle">⋮⋮</span>
46
+ <div class="sorting-content">
47
+ <div class="sorting-title">${i}</div>
48
+ <div class="sorting-meta">${t}</div>
49
+ </div>
50
+ </div>
51
+ `},exports.sortingCardStyles=i;
52
+ //# sourceMappingURL=sorting-card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorting-card.cjs","sources":["../../../../packages/components/src/subject/sorting-card.ts"],"sourcesContent":["import { css, html } from 'lit'\n\nexport const sortingCardStyles = css`\n .sorting-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n background: #fff;\n border: 1px solid #e4e7ed;\n border-radius: 10px;\n transition: all 0.2s;\n }\n\n .sorting-card:hover {\n border-color: #bfd1ff;\n background: #f8fbff;\n }\n\n .sorting-handle {\n color: #909399;\n font-size: 16px;\n line-height: 1;\n user-select: none;\n }\n\n .sorting-content {\n flex: 1;\n min-width: 0;\n }\n\n .sorting-title {\n font-size: 13px;\n color: #303133;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .sorting-meta {\n margin-top: 4px;\n font-size: 12px;\n color: #909399;\n }\n`\n\nexport function renderSortingCard(title: string, meta: string) {\n return html`\n <div class=\"sorting-card\">\n <span class=\"sorting-handle\">⋮⋮</span>\n <div class=\"sorting-content\">\n <div class=\"sorting-title\">${title}</div>\n <div class=\"sorting-meta\">${meta}</div>\n </div>\n </div>\n `\n}\n"],"names":["sortingCardStyles","css","title","meta","html"],"mappings":"kCAEO,MAAMA,EAAoBC,EAAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA4C1B,SAA2BC,EAAeC,GAC/C,OAAOC,EAAAA,IAAA;;;;qCAI4BF;oCACDC;;;GAIpC"}