@qxs-bns/components 0.0.91 → 0.0.92

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 (415) hide show
  1. package/es/base/define.mjs +1 -1
  2. package/es/base/define.mjs.map +1 -1
  3. package/es/base/uid.mjs +1 -1
  4. package/es/base/uid.mjs.map +1 -1
  5. package/es/data-chart.mjs +15 -14
  6. package/es/data-chart.mjs.map +1 -1
  7. package/es/editor/blocksuite-editor.mjs +62 -51
  8. package/es/editor/blocksuite-editor.mjs.map +1 -1
  9. package/es/editor/content-format.mjs +8 -1
  10. package/es/editor/content-format.mjs.map +1 -1
  11. package/es/editor/index.mjs +1 -1
  12. package/es/editor/index.mjs.map +1 -1
  13. package/es/editor/toolbar.mjs +1 -1
  14. package/es/editor/toolbar.mjs.map +1 -1
  15. package/es/entry-data-chart.mjs +1 -1
  16. package/es/entry-editor.mjs +1 -1
  17. package/es/entry-file-upload.mjs +1 -1
  18. package/es/entry-fixed-action-bar.mjs +1 -1
  19. package/es/entry-icon.mjs +1 -1
  20. package/es/entry-image-upload.mjs +1 -1
  21. package/es/entry-photo-crop-tool.mjs +1 -1
  22. package/es/entry-subject.mjs +1 -1
  23. package/es/file-upload.mjs +25 -18
  24. package/es/file-upload.mjs.map +1 -1
  25. package/es/fixed-action-bar.mjs +5 -5
  26. package/es/fixed-action-bar.mjs.map +1 -1
  27. package/es/icon.mjs +7 -7
  28. package/es/icon.mjs.map +1 -1
  29. package/es/image-upload.mjs +26 -26
  30. package/es/image-upload.mjs.map +1 -1
  31. package/es/index.mjs +1 -1
  32. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs +59 -1
  33. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs.map +1 -1
  34. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs +16 -1
  35. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs.map +1 -1
  36. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs +62 -0
  37. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs.map +1 -0
  38. package/es/photo-crop-tool.mjs +12 -12
  39. package/es/photo-crop-tool.mjs.map +1 -1
  40. package/es/subject/action.mjs +58 -58
  41. package/es/subject/action.mjs.map +1 -1
  42. package/es/subject/blank-fill.mjs +80 -80
  43. package/es/subject/blank-fill.mjs.map +1 -1
  44. package/es/subject/draft.mjs +1 -1
  45. package/es/subject/draft.mjs.map +1 -1
  46. package/es/subject/layout.mjs +4 -4
  47. package/es/subject/layout.mjs.map +1 -1
  48. package/es/subject/page-end.mjs +5 -5
  49. package/es/subject/page-end.mjs.map +1 -1
  50. package/es/subject/pagination.mjs +1 -1
  51. package/es/subject/pagination.mjs.map +1 -1
  52. package/es/subject/runtime.mjs +1 -1
  53. package/es/subject/runtime.mjs.map +1 -1
  54. package/es/subject/scale.mjs +53 -50
  55. package/es/subject/scale.mjs.map +1 -1
  56. package/es/subject/shared-methods.mjs +1 -1
  57. package/es/subject/shared-methods.mjs.map +1 -1
  58. package/es/subject/shared-styles.mjs +53 -15
  59. package/es/subject/shared-styles.mjs.map +1 -1
  60. package/es/subject/single-interactions.mjs +2 -0
  61. package/es/subject/single-interactions.mjs.map +1 -0
  62. package/es/subject/single-model.mjs +2 -0
  63. package/es/subject/single-model.mjs.map +1 -0
  64. package/es/subject/single-state.mjs +2 -0
  65. package/es/subject/single-state.mjs.map +1 -0
  66. package/es/subject/single.mjs +177 -177
  67. package/es/subject/single.mjs.map +1 -1
  68. package/es/subject/sort-controller.mjs +1 -1
  69. package/es/subject/sort-controller.mjs.map +1 -1
  70. package/es/subject/sortable.mjs +13 -13
  71. package/es/subject/sortable.mjs.map +1 -1
  72. package/es/subject/sorting-card.mjs +12 -12
  73. package/es/subject/sorting-card.mjs.map +1 -1
  74. package/es/subject/subject-shared.mjs +2 -0
  75. package/es/subject/subject-shared.mjs.map +1 -0
  76. package/es/subject/text-fill.mjs +73 -73
  77. package/es/subject/text-fill.mjs.map +1 -1
  78. package/es/subject/title-prefix.mjs +1 -1
  79. package/es/subject/title-prefix.mjs.map +1 -1
  80. package/es/subject/types.mjs +1 -1
  81. package/es/subject/types.mjs.map +1 -1
  82. package/lib/base/define.cjs +1 -1
  83. package/lib/base/define.cjs.map +1 -1
  84. package/lib/base/uid.cjs +1 -1
  85. package/lib/base/uid.cjs.map +1 -1
  86. package/lib/data-chart.cjs +16 -15
  87. package/lib/data-chart.cjs.map +1 -1
  88. package/lib/editor/blocksuite-editor.cjs +62 -51
  89. package/lib/editor/blocksuite-editor.cjs.map +1 -1
  90. package/lib/editor/content-format.cjs +8 -1
  91. package/lib/editor/content-format.cjs.map +1 -1
  92. package/lib/editor/index.cjs +1 -1
  93. package/lib/editor/index.cjs.map +1 -1
  94. package/lib/editor/toolbar.cjs +1 -1
  95. package/lib/editor/toolbar.cjs.map +1 -1
  96. package/lib/entry-data-chart.cjs +1 -1
  97. package/lib/entry-editor.cjs +1 -1
  98. package/lib/entry-file-upload.cjs +1 -1
  99. package/lib/entry-fixed-action-bar.cjs +1 -1
  100. package/lib/entry-icon.cjs +1 -1
  101. package/lib/entry-image-upload.cjs +1 -1
  102. package/lib/entry-photo-crop-tool.cjs +1 -1
  103. package/lib/entry-subject.cjs +1 -1
  104. package/lib/file-upload.cjs +24 -17
  105. package/lib/file-upload.cjs.map +1 -1
  106. package/lib/fixed-action-bar.cjs +6 -6
  107. package/lib/fixed-action-bar.cjs.map +1 -1
  108. package/lib/icon.cjs +9 -9
  109. package/lib/icon.cjs.map +1 -1
  110. package/lib/image-upload.cjs +26 -26
  111. package/lib/image-upload.cjs.map +1 -1
  112. package/lib/index.cjs +1 -1
  113. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs +59 -1
  114. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs.map +1 -1
  115. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs +16 -1
  116. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs.map +1 -1
  117. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs +62 -0
  118. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs.map +1 -0
  119. package/lib/photo-crop-tool.cjs +11 -11
  120. package/lib/photo-crop-tool.cjs.map +1 -1
  121. package/lib/subject/action.cjs +42 -42
  122. package/lib/subject/action.cjs.map +1 -1
  123. package/lib/subject/blank-fill.cjs +80 -80
  124. package/lib/subject/blank-fill.cjs.map +1 -1
  125. package/lib/subject/draft.cjs +1 -1
  126. package/lib/subject/draft.cjs.map +1 -1
  127. package/lib/subject/layout.cjs +4 -4
  128. package/lib/subject/layout.cjs.map +1 -1
  129. package/lib/subject/page-end.cjs +4 -4
  130. package/lib/subject/page-end.cjs.map +1 -1
  131. package/lib/subject/pagination.cjs +1 -1
  132. package/lib/subject/pagination.cjs.map +1 -1
  133. package/lib/subject/runtime.cjs +1 -1
  134. package/lib/subject/runtime.cjs.map +1 -1
  135. package/lib/subject/scale.cjs +53 -50
  136. package/lib/subject/scale.cjs.map +1 -1
  137. package/lib/subject/shared-methods.cjs +1 -1
  138. package/lib/subject/shared-methods.cjs.map +1 -1
  139. package/lib/subject/shared-styles.cjs +54 -16
  140. package/lib/subject/shared-styles.cjs.map +1 -1
  141. package/lib/subject/single-interactions.cjs +2 -0
  142. package/lib/subject/single-interactions.cjs.map +1 -0
  143. package/lib/subject/single-model.cjs +2 -0
  144. package/lib/subject/single-model.cjs.map +1 -0
  145. package/lib/subject/single-state.cjs +2 -0
  146. package/lib/subject/single-state.cjs.map +1 -0
  147. package/lib/subject/single.cjs +177 -177
  148. package/lib/subject/single.cjs.map +1 -1
  149. package/lib/subject/sort-controller.cjs +1 -1
  150. package/lib/subject/sort-controller.cjs.map +1 -1
  151. package/lib/subject/sortable.cjs +15 -15
  152. package/lib/subject/sortable.cjs.map +1 -1
  153. package/lib/subject/sorting-card.cjs +12 -12
  154. package/lib/subject/sorting-card.cjs.map +1 -1
  155. package/lib/subject/subject-shared.cjs +2 -0
  156. package/lib/subject/subject-shared.cjs.map +1 -0
  157. package/lib/subject/text-fill.cjs +81 -81
  158. package/lib/subject/text-fill.cjs.map +1 -1
  159. package/lib/subject/title-prefix.cjs +1 -1
  160. package/lib/subject/title-prefix.cjs.map +1 -1
  161. package/lib/subject/types.cjs +1 -1
  162. package/lib/subject/types.cjs.map +1 -1
  163. package/package.json +5 -5
  164. package/types/editor/blocksuite-editor.d.ts +2 -0
  165. package/types/editor/toolbar.d.ts +1 -1
  166. package/types/file-upload.d.ts +2 -0
  167. package/types/subject/blank-fill.d.ts +1 -1
  168. package/types/subject/runtime.d.ts +1 -1
  169. package/types/subject/scale.d.ts +1 -1
  170. package/types/subject/single-interactions.d.ts +46 -0
  171. package/types/subject/single-model.d.ts +88 -0
  172. package/types/subject/single-state.d.ts +42 -0
  173. package/types/subject/single.d.ts +7 -85
  174. package/types/subject/sortable.d.ts +1 -1
  175. package/types/subject/subject-shared.d.ts +43 -0
  176. package/types/subject/text-fill.d.ts +1 -1
  177. package/README.md +0 -562
  178. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs +0 -2
  179. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs.map +0 -1
  180. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs +0 -2
  181. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs.map +0 -1
  182. package/es/package.json.mjs +0 -2
  183. package/es/package.json.mjs.map +0 -1
  184. package/es/src/alert/index.mjs +0 -2
  185. package/es/src/alert/index.mjs.map +0 -1
  186. package/es/src/alert/src/alert.mjs +0 -2
  187. package/es/src/alert/src/alert.mjs.map +0 -1
  188. package/es/src/components.mjs +0 -2
  189. package/es/src/components.mjs.map +0 -1
  190. package/es/src/data-chart/index.mjs +0 -2
  191. package/es/src/data-chart/index.mjs.map +0 -1
  192. package/es/src/defaults.mjs +0 -2
  193. package/es/src/defaults.mjs.map +0 -1
  194. package/es/src/dialog/src/dialog.mjs +0 -2
  195. package/es/src/dialog/src/dialog.mjs.map +0 -1
  196. package/es/src/feedback-plugin/index.mjs +0 -2
  197. package/es/src/feedback-plugin/index.mjs.map +0 -1
  198. package/es/src/file-upload/index.mjs +0 -2
  199. package/es/src/file-upload/index.mjs.map +0 -1
  200. package/es/src/icon/index.mjs +0 -2
  201. package/es/src/icon/index.mjs.map +0 -1
  202. package/es/src/icon/src/icon.mjs +0 -2
  203. package/es/src/icon/src/icon.mjs.map +0 -1
  204. package/es/src/image-upload/index.mjs +0 -2
  205. package/es/src/image-upload/index.mjs.map +0 -1
  206. package/es/src/make-installer.mjs +0 -2
  207. package/es/src/make-installer.mjs.map +0 -1
  208. package/es/src/message/src/message.mjs +0 -2
  209. package/es/src/message/src/message.mjs.map +0 -1
  210. package/es/src/photo-crop-tool/index.mjs +0 -2
  211. package/es/src/photo-crop-tool/index.mjs.map +0 -1
  212. package/es/src/tiny-mce-editor/index.mjs +0 -2
  213. package/es/src/tiny-mce-editor/index.mjs.map +0 -1
  214. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +0 -2
  215. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +0 -1
  216. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs +0 -2
  217. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs.map +0 -1
  218. package/es/src/ui/button/index.mjs +0 -2
  219. package/es/src/ui/button/index.mjs.map +0 -1
  220. package/es/src/ui/checkbox/index.mjs +0 -2
  221. package/es/src/ui/checkbox/index.mjs.map +0 -1
  222. package/es/src/ui/dialog/index.mjs +0 -2
  223. package/es/src/ui/dialog/index.mjs.map +0 -1
  224. package/es/src/ui/input/index.mjs +0 -2
  225. package/es/src/ui/input/index.mjs.map +0 -1
  226. package/es/src/ui/input-number/index.mjs +0 -2
  227. package/es/src/ui/input-number/index.mjs.map +0 -1
  228. package/es/src/ui/layout/index.mjs +0 -2
  229. package/es/src/ui/layout/index.mjs.map +0 -1
  230. package/es/src/ui/link/index.mjs +0 -2
  231. package/es/src/ui/link/index.mjs.map +0 -1
  232. package/es/src/ui/popover/index.mjs +0 -2
  233. package/es/src/ui/popover/index.mjs.map +0 -1
  234. package/es/src/ui/radio/index.mjs +0 -2
  235. package/es/src/ui/radio/index.mjs.map +0 -1
  236. package/es/src/ui/scrollbar/index.mjs +0 -2
  237. package/es/src/ui/scrollbar/index.mjs.map +0 -1
  238. package/es/src/ui/select/index.mjs +0 -2
  239. package/es/src/ui/select/index.mjs.map +0 -1
  240. package/es/src/ui/table/index.mjs +0 -2
  241. package/es/src/ui/table/index.mjs.map +0 -1
  242. package/es/src/ui/tag/index.mjs +0 -2
  243. package/es/src/ui/tag/index.mjs.map +0 -1
  244. package/es/src/wc-bridge.mjs +0 -2
  245. package/es/src/wc-bridge.mjs.map +0 -1
  246. package/es/src/withInstall.mjs +0 -2
  247. package/es/src/withInstall.mjs.map +0 -1
  248. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs +0 -2
  249. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs.map +0 -1
  250. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs +0 -2
  251. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs.map +0 -1
  252. package/lib/package.json.cjs +0 -2
  253. package/lib/package.json.cjs.map +0 -1
  254. package/lib/src/alert/index.cjs +0 -2
  255. package/lib/src/alert/index.cjs.map +0 -1
  256. package/lib/src/alert/src/alert.cjs +0 -2
  257. package/lib/src/alert/src/alert.cjs.map +0 -1
  258. package/lib/src/components.cjs +0 -2
  259. package/lib/src/components.cjs.map +0 -1
  260. package/lib/src/data-chart/index.cjs +0 -2
  261. package/lib/src/data-chart/index.cjs.map +0 -1
  262. package/lib/src/defaults.cjs +0 -2
  263. package/lib/src/defaults.cjs.map +0 -1
  264. package/lib/src/dialog/src/dialog.cjs +0 -2
  265. package/lib/src/dialog/src/dialog.cjs.map +0 -1
  266. package/lib/src/feedback-plugin/index.cjs +0 -2
  267. package/lib/src/feedback-plugin/index.cjs.map +0 -1
  268. package/lib/src/file-upload/index.cjs +0 -2
  269. package/lib/src/file-upload/index.cjs.map +0 -1
  270. package/lib/src/icon/index.cjs +0 -2
  271. package/lib/src/icon/index.cjs.map +0 -1
  272. package/lib/src/icon/src/icon.cjs +0 -2
  273. package/lib/src/icon/src/icon.cjs.map +0 -1
  274. package/lib/src/image-upload/index.cjs +0 -2
  275. package/lib/src/image-upload/index.cjs.map +0 -1
  276. package/lib/src/make-installer.cjs +0 -2
  277. package/lib/src/make-installer.cjs.map +0 -1
  278. package/lib/src/message/src/message.cjs +0 -2
  279. package/lib/src/message/src/message.cjs.map +0 -1
  280. package/lib/src/photo-crop-tool/index.cjs +0 -2
  281. package/lib/src/photo-crop-tool/index.cjs.map +0 -1
  282. package/lib/src/tiny-mce-editor/index.cjs +0 -2
  283. package/lib/src/tiny-mce-editor/index.cjs.map +0 -1
  284. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +0 -2
  285. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +0 -1
  286. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs +0 -2
  287. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs.map +0 -1
  288. package/lib/src/ui/button/index.cjs +0 -2
  289. package/lib/src/ui/button/index.cjs.map +0 -1
  290. package/lib/src/ui/checkbox/index.cjs +0 -2
  291. package/lib/src/ui/checkbox/index.cjs.map +0 -1
  292. package/lib/src/ui/dialog/index.cjs +0 -2
  293. package/lib/src/ui/dialog/index.cjs.map +0 -1
  294. package/lib/src/ui/input/index.cjs +0 -2
  295. package/lib/src/ui/input/index.cjs.map +0 -1
  296. package/lib/src/ui/input-number/index.cjs +0 -2
  297. package/lib/src/ui/input-number/index.cjs.map +0 -1
  298. package/lib/src/ui/layout/index.cjs +0 -2
  299. package/lib/src/ui/layout/index.cjs.map +0 -1
  300. package/lib/src/ui/link/index.cjs +0 -2
  301. package/lib/src/ui/link/index.cjs.map +0 -1
  302. package/lib/src/ui/popover/index.cjs +0 -2
  303. package/lib/src/ui/popover/index.cjs.map +0 -1
  304. package/lib/src/ui/radio/index.cjs +0 -2
  305. package/lib/src/ui/radio/index.cjs.map +0 -1
  306. package/lib/src/ui/scrollbar/index.cjs +0 -2
  307. package/lib/src/ui/scrollbar/index.cjs.map +0 -1
  308. package/lib/src/ui/select/index.cjs +0 -2
  309. package/lib/src/ui/select/index.cjs.map +0 -1
  310. package/lib/src/ui/table/index.cjs +0 -2
  311. package/lib/src/ui/table/index.cjs.map +0 -1
  312. package/lib/src/ui/tag/index.cjs +0 -2
  313. package/lib/src/ui/tag/index.cjs.map +0 -1
  314. package/lib/src/wc-bridge.cjs +0 -2
  315. package/lib/src/wc-bridge.cjs.map +0 -1
  316. package/lib/src/withInstall.cjs +0 -2
  317. package/lib/src/withInstall.cjs.map +0 -1
  318. package/types/index.d.ts.map +0 -1
  319. package/types/src/alert/index.d.ts +0 -66
  320. package/types/src/alert/index.d.ts.map +0 -1
  321. package/types/src/alert/src/alert.d.ts +0 -73
  322. package/types/src/alert/src/alert.d.ts.map +0 -1
  323. package/types/src/components.d.ts +0 -10
  324. package/types/src/components.d.ts.map +0 -1
  325. package/types/src/data-chart/index.d.ts +0 -13
  326. package/types/src/data-chart/index.d.ts.map +0 -1
  327. package/types/src/defaults.d.ts +0 -6
  328. package/types/src/defaults.d.ts.map +0 -1
  329. package/types/src/dialog/index.d.ts +0 -3
  330. package/types/src/dialog/index.d.ts.map +0 -1
  331. package/types/src/dialog/src/dialog.d.ts +0 -25
  332. package/types/src/dialog/src/dialog.d.ts.map +0 -1
  333. package/types/src/feedback-plugin/index.d.ts +0 -9
  334. package/types/src/feedback-plugin/index.d.ts.map +0 -1
  335. package/types/src/file-upload/index.d.ts +0 -12
  336. package/types/src/file-upload/index.d.ts.map +0 -1
  337. package/types/src/icon/index.d.ts +0 -56
  338. package/types/src/icon/index.d.ts.map +0 -1
  339. package/types/src/icon/src/icon.d.ts +0 -62
  340. package/types/src/icon/src/icon.d.ts.map +0 -1
  341. package/types/src/image-upload/index.d.ts +0 -12
  342. package/types/src/image-upload/index.d.ts.map +0 -1
  343. package/types/src/make-installer.d.ts +0 -6
  344. package/types/src/make-installer.d.ts.map +0 -1
  345. package/types/src/message/index.d.ts +0 -3
  346. package/types/src/message/index.d.ts.map +0 -1
  347. package/types/src/message/src/message.d.ts +0 -21
  348. package/types/src/message/src/message.d.ts.map +0 -1
  349. package/types/src/message/src/toaster.vue.d.ts +0 -3
  350. package/types/src/message/src/toaster.vue.d.ts.map +0 -1
  351. package/types/src/photo-crop-tool/index.d.ts +0 -12
  352. package/types/src/photo-crop-tool/index.d.ts.map +0 -1
  353. package/types/src/subject-action/index.d.ts +0 -93
  354. package/types/src/subject-action/index.d.ts.map +0 -1
  355. package/types/src/subject-action/src/subject-action.vue.d.ts +0 -92
  356. package/types/src/subject-action/src/subject-action.vue.d.ts.map +0 -1
  357. package/types/src/subject-layout/index.d.ts +0 -30
  358. package/types/src/subject-layout/index.d.ts.map +0 -1
  359. package/types/src/subject-layout/src/subject-layout.vue.d.ts +0 -20
  360. package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +0 -1
  361. package/types/src/subject-list/index.d.ts +0 -20
  362. package/types/src/subject-list/index.d.ts.map +0 -1
  363. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts +0 -24
  364. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts.map +0 -1
  365. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts +0 -32
  366. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +0 -1
  367. package/types/src/subject-list/src/components/subject-scale.vue.d.ts +0 -29
  368. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +0 -1
  369. package/types/src/subject-list/src/components/subject-single.vue.d.ts +0 -37
  370. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +0 -1
  371. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts +0 -34
  372. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +0 -1
  373. package/types/src/subject-list/src/subject-list.vue.d.ts +0 -21
  374. package/types/src/subject-list/src/subject-list.vue.d.ts.map +0 -1
  375. package/types/src/subject-type/index.d.ts +0 -8
  376. package/types/src/subject-type/index.d.ts.map +0 -1
  377. package/types/src/subject-type/src/subject-type.vue.d.ts +0 -7
  378. package/types/src/subject-type/src/subject-type.vue.d.ts.map +0 -1
  379. package/types/src/tiny-mce-editor/index.d.ts +0 -20
  380. package/types/src/tiny-mce-editor/index.d.ts.map +0 -1
  381. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts +0 -32
  382. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts.map +0 -1
  383. package/types/src/ui/button/index.d.ts +0 -96
  384. package/types/src/ui/button/index.d.ts.map +0 -1
  385. package/types/src/ui/checkbox/index.d.ts +0 -111
  386. package/types/src/ui/checkbox/index.d.ts.map +0 -1
  387. package/types/src/ui/dialog/index.d.ts +0 -134
  388. package/types/src/ui/dialog/index.d.ts.map +0 -1
  389. package/types/src/ui/index.d.ts +0 -16
  390. package/types/src/ui/index.d.ts.map +0 -1
  391. package/types/src/ui/input/index.d.ts +0 -132
  392. package/types/src/ui/input/index.d.ts.map +0 -1
  393. package/types/src/ui/input-number/index.d.ts +0 -106
  394. package/types/src/ui/input-number/index.d.ts.map +0 -1
  395. package/types/src/ui/layout/index.d.ts +0 -373
  396. package/types/src/ui/layout/index.d.ts.map +0 -1
  397. package/types/src/ui/link/index.d.ts +0 -57
  398. package/types/src/ui/link/index.d.ts.map +0 -1
  399. package/types/src/ui/popover/index.d.ts +0 -89
  400. package/types/src/ui/popover/index.d.ts.map +0 -1
  401. package/types/src/ui/radio/index.d.ts +0 -84
  402. package/types/src/ui/radio/index.d.ts.map +0 -1
  403. package/types/src/ui/scrollbar/index.d.ts +0 -35
  404. package/types/src/ui/scrollbar/index.d.ts.map +0 -1
  405. package/types/src/ui/select/index.d.ts +0 -113
  406. package/types/src/ui/select/index.d.ts.map +0 -1
  407. package/types/src/ui/table/index.d.ts +0 -152
  408. package/types/src/ui/table/index.d.ts.map +0 -1
  409. package/types/src/ui/tag/index.d.ts +0 -69
  410. package/types/src/ui/tag/index.d.ts.map +0 -1
  411. package/types/src/wc-bridge.d.ts +0 -23
  412. package/types/src/wc-bridge.d.ts.map +0 -1
  413. package/types/src/withInstall.d.ts +0 -4
  414. package/types/src/withInstall.d.ts.map +0 -1
  415. package/types/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turndown.browser.es.cjs","sources":["../../../../../../../../../node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.js"],"sourcesContent":["function extend(destination) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) destination[key] = source[key];\n }\n }\n return destination;\n}\nfunction repeat(character, count) {\n return Array(count + 1).join(character);\n}\nfunction trimLeadingNewlines(string) {\n return string.replace(/^\\n*/, '');\n}\nfunction trimTrailingNewlines(string) {\n // avoid match-at-end regexp bottleneck, see #370\n var indexEnd = string.length;\n while (indexEnd > 0 && string[indexEnd - 1] === '\\n') indexEnd--;\n return string.substring(0, indexEnd);\n}\nfunction trimNewlines(string) {\n return trimTrailingNewlines(trimLeadingNewlines(string));\n}\nvar blockElements = ['ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS', 'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER', 'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES', 'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD', 'TFOOT', 'TH', 'THEAD', 'TR', 'UL'];\nfunction isBlock(node) {\n return is(node, blockElements);\n}\nvar voidElements = ['AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT', 'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'];\nfunction isVoid(node) {\n return is(node, voidElements);\n}\nfunction hasVoid(node) {\n return has(node, voidElements);\n}\nvar meaningfulWhenBlankElements = ['A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT', 'AUDIO', 'VIDEO'];\nfunction isMeaningfulWhenBlank(node) {\n return is(node, meaningfulWhenBlankElements);\n}\nfunction hasMeaningfulWhenBlank(node) {\n return has(node, meaningfulWhenBlankElements);\n}\nfunction is(node, tagNames) {\n return tagNames.indexOf(node.nodeName) >= 0;\n}\nfunction has(node, tagNames) {\n return node.getElementsByTagName && tagNames.some(function (tagName) {\n return node.getElementsByTagName(tagName).length;\n });\n}\nvar markdownEscapes = [[/\\\\/g, '\\\\\\\\'], [/\\*/g, '\\\\*'], [/^-/g, '\\\\-'], [/^\\+ /g, '\\\\+ '], [/^(=+)/g, '\\\\$1'], [/^(#{1,6}) /g, '\\\\$1 '], [/`/g, '\\\\`'], [/^~~~/g, '\\\\~~~'], [/\\[/g, '\\\\['], [/\\]/g, '\\\\]'], [/^>/g, '\\\\>'], [/_/g, '\\\\_'], [/^(\\d+)\\. /g, '$1\\\\. ']];\nfunction escapeMarkdown(string) {\n return markdownEscapes.reduce(function (accumulator, escape) {\n return accumulator.replace(escape[0], escape[1]);\n }, string);\n}\n\nvar rules = {};\nrules.paragraph = {\n filter: 'p',\n replacement: function (content) {\n return '\\n\\n' + content + '\\n\\n';\n }\n};\nrules.lineBreak = {\n filter: 'br',\n replacement: function (content, node, options) {\n return options.br + '\\n';\n }\n};\nrules.heading = {\n filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n replacement: function (content, node, options) {\n var hLevel = Number(node.nodeName.charAt(1));\n if (options.headingStyle === 'setext' && hLevel < 3) {\n var underline = repeat(hLevel === 1 ? '=' : '-', content.length);\n return '\\n\\n' + content + '\\n' + underline + '\\n\\n';\n } else {\n return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n';\n }\n }\n};\nrules.blockquote = {\n filter: 'blockquote',\n replacement: function (content) {\n content = trimNewlines(content).replace(/^/gm, '> ');\n return '\\n\\n' + content + '\\n\\n';\n }\n};\nrules.list = {\n filter: ['ul', 'ol'],\n replacement: function (content, node) {\n var parent = node.parentNode;\n if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n return '\\n' + content;\n } else {\n return '\\n\\n' + content + '\\n\\n';\n }\n }\n};\nrules.listItem = {\n filter: 'li',\n replacement: function (content, node, options) {\n var prefix = options.bulletListMarker + ' ';\n var parent = node.parentNode;\n if (parent.nodeName === 'OL') {\n var start = parent.getAttribute('start');\n var index = Array.prototype.indexOf.call(parent.children, node);\n prefix = (start ? Number(start) + index : index + 1) + '. ';\n }\n var isParagraph = /\\n$/.test(content);\n content = trimNewlines(content) + (isParagraph ? '\\n' : '');\n content = content.replace(/\\n/gm, '\\n' + ' '.repeat(prefix.length)); // indent\n return prefix + content + (node.nextSibling ? '\\n' : '');\n }\n};\nrules.indentedCodeBlock = {\n filter: function (node, options) {\n return options.codeBlockStyle === 'indented' && node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\n },\n replacement: function (content, node, options) {\n return '\\n\\n ' + node.firstChild.textContent.replace(/\\n/g, '\\n ') + '\\n\\n';\n }\n};\nrules.fencedCodeBlock = {\n filter: function (node, options) {\n return options.codeBlockStyle === 'fenced' && node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\n },\n replacement: function (content, node, options) {\n var className = node.firstChild.getAttribute('class') || '';\n var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n var code = node.firstChild.textContent;\n var fenceChar = options.fence.charAt(0);\n var fenceSize = 3;\n var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n var match;\n while (match = fenceInCodeRegex.exec(code)) {\n if (match[0].length >= fenceSize) {\n fenceSize = match[0].length + 1;\n }\n }\n var fence = repeat(fenceChar, fenceSize);\n return '\\n\\n' + fence + language + '\\n' + code.replace(/\\n$/, '') + '\\n' + fence + '\\n\\n';\n }\n};\nrules.horizontalRule = {\n filter: 'hr',\n replacement: function (content, node, options) {\n return '\\n\\n' + options.hr + '\\n\\n';\n }\n};\nrules.inlineLink = {\n filter: function (node, options) {\n return options.linkStyle === 'inlined' && node.nodeName === 'A' && node.getAttribute('href');\n },\n replacement: function (content, node) {\n var href = escapeLinkDestination(node.getAttribute('href'));\n var title = escapeLinkTitle(cleanAttribute(node.getAttribute('title')));\n var titlePart = title ? ' \"' + title + '\"' : '';\n return '[' + content + '](' + href + titlePart + ')';\n }\n};\nrules.referenceLink = {\n filter: function (node, options) {\n return options.linkStyle === 'referenced' && node.nodeName === 'A' && node.getAttribute('href');\n },\n replacement: function (content, node, options) {\n var href = escapeLinkDestination(node.getAttribute('href'));\n var title = cleanAttribute(node.getAttribute('title'));\n if (title) title = ' \"' + escapeLinkTitle(title) + '\"';\n var replacement;\n var reference;\n switch (options.linkReferenceStyle) {\n case 'collapsed':\n replacement = '[' + content + '][]';\n reference = '[' + content + ']: ' + href + title;\n break;\n case 'shortcut':\n replacement = '[' + content + ']';\n reference = '[' + content + ']: ' + href + title;\n break;\n default:\n var id = this.references.length + 1;\n replacement = '[' + content + '][' + id + ']';\n reference = '[' + id + ']: ' + href + title;\n }\n this.references.push(reference);\n return replacement;\n },\n references: [],\n append: function (options) {\n var references = '';\n if (this.references.length) {\n references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n this.references = []; // Reset references\n }\n return references;\n }\n};\nrules.emphasis = {\n filter: ['em', 'i'],\n replacement: function (content, node, options) {\n if (!content.trim()) return '';\n return options.emDelimiter + content + options.emDelimiter;\n }\n};\nrules.strong = {\n filter: ['strong', 'b'],\n replacement: function (content, node, options) {\n if (!content.trim()) return '';\n return options.strongDelimiter + content + options.strongDelimiter;\n }\n};\nrules.code = {\n filter: function (node) {\n var hasSiblings = node.previousSibling || node.nextSibling;\n var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n return node.nodeName === 'CODE' && !isCodeBlock;\n },\n replacement: function (content) {\n if (!content) return '';\n content = content.replace(/\\r?\\n|\\r/g, ' ');\n var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n var delimiter = '`';\n var matches = content.match(/`+/gm) || [];\n while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n return delimiter + extraSpace + content + extraSpace + delimiter;\n }\n};\nrules.image = {\n filter: 'img',\n replacement: function (content, node) {\n var alt = escapeMarkdown(cleanAttribute(node.getAttribute('alt')));\n var src = escapeLinkDestination(node.getAttribute('src') || '');\n var title = cleanAttribute(node.getAttribute('title'));\n var titlePart = title ? ' \"' + escapeLinkTitle(title) + '\"' : '';\n return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '';\n }\n};\nfunction cleanAttribute(attribute) {\n return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : '';\n}\nfunction escapeLinkDestination(destination) {\n var escaped = destination.replace(/([<>()])/g, '\\\\$1');\n return escaped.indexOf(' ') >= 0 ? '<' + escaped + '>' : escaped;\n}\nfunction escapeLinkTitle(title) {\n return title.replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Manages a collection of rules used to convert HTML to Markdown\n */\n\nfunction Rules(options) {\n this.options = options;\n this._keep = [];\n this._remove = [];\n this.blankRule = {\n replacement: options.blankReplacement\n };\n this.keepReplacement = options.keepReplacement;\n this.defaultRule = {\n replacement: options.defaultReplacement\n };\n this.array = [];\n for (var key in options.rules) this.array.push(options.rules[key]);\n}\nRules.prototype = {\n add: function (key, rule) {\n this.array.unshift(rule);\n },\n keep: function (filter) {\n this._keep.unshift({\n filter: filter,\n replacement: this.keepReplacement\n });\n },\n remove: function (filter) {\n this._remove.unshift({\n filter: filter,\n replacement: function () {\n return '';\n }\n });\n },\n forNode: function (node) {\n if (node.isBlank) return this.blankRule;\n var rule;\n if (rule = findRule(this.array, node, this.options)) return rule;\n if (rule = findRule(this._keep, node, this.options)) return rule;\n if (rule = findRule(this._remove, node, this.options)) return rule;\n return this.defaultRule;\n },\n forEach: function (fn) {\n for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n }\n};\nfunction findRule(rules, node, options) {\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (filterValue(rule, node, options)) return rule;\n }\n return undefined;\n}\nfunction filterValue(rule, node, options) {\n var filter = rule.filter;\n if (typeof filter === 'string') {\n if (filter === node.nodeName.toLowerCase()) return true;\n } else if (Array.isArray(filter)) {\n if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true;\n } else if (typeof filter === 'function') {\n if (filter.call(rule, node, options)) return true;\n } else {\n throw new TypeError('`filter` needs to be a string, array, or function');\n }\n}\n\n/**\n * The collapseWhitespace function is adapted from collapse-whitespace\n * by Luc Thevenard.\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n *\n * @param {Object} options\n */\nfunction collapseWhitespace(options) {\n var element = options.element;\n var isBlock = options.isBlock;\n var isVoid = options.isVoid;\n var isPre = options.isPre || function (node) {\n return node.nodeName === 'PRE';\n };\n if (!element.firstChild || isPre(element)) return;\n var prevText = null;\n var keepLeadingWs = false;\n var prev = null;\n var node = next(prev, element, isPre);\n while (node !== element) {\n if (node.nodeType === 3 || node.nodeType === 4) {\n // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n if ((!prevText || / $/.test(prevText.data)) && !keepLeadingWs && text[0] === ' ') {\n text = text.substr(1);\n }\n\n // `text` might be empty at this point.\n if (!text) {\n node = remove(node);\n continue;\n }\n node.data = text;\n prevText = node;\n } else if (node.nodeType === 1) {\n // Node.ELEMENT_NODE\n if (isBlock(node) || node.nodeName === 'BR') {\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n }\n prevText = null;\n keepLeadingWs = false;\n } else if (isVoid(node) || isPre(node)) {\n // Avoid trimming space around non-block, non-BR void elements and inline PRE.\n prevText = null;\n keepLeadingWs = true;\n } else if (prevText) {\n // Drop protection if set previously.\n keepLeadingWs = false;\n }\n } else {\n node = remove(node);\n continue;\n }\n var nextNode = next(prev, node, isPre);\n prev = node;\n node = nextNode;\n }\n if (prevText) {\n prevText.data = prevText.data.replace(/ $/, '');\n if (!prevText.data) {\n remove(prevText);\n }\n }\n}\n\n/**\n * remove(node) removes the given node from the DOM and returns the\n * next node in the sequence.\n *\n * @param {Node} node\n * @return {Node} node\n */\nfunction remove(node) {\n var next = node.nextSibling || node.parentNode;\n node.parentNode.removeChild(node);\n return next;\n}\n\n/**\n * next(prev, current, isPre) returns the next node in the sequence, given the\n * current and previous nodes.\n *\n * @param {Node} prev\n * @param {Node} current\n * @param {Function} isPre\n * @return {Node}\n */\nfunction next(prev, current, isPre) {\n if (prev && prev.parentNode === current || isPre(current)) {\n return current.nextSibling || current.parentNode;\n }\n return current.firstChild || current.nextSibling || current.parentNode;\n}\n\n/*\n * Set up window for Node.js\n */\n\nvar root = typeof window !== 'undefined' ? window : {};\n\n/*\n * Parsing HTML strings\n */\n\nfunction canParseHTMLNatively() {\n var Parser = root.DOMParser;\n var canParse = false;\n\n // Adapted from https://gist.github.com/1129031\n // Firefox/Opera/IE throw errors on unsupported types\n try {\n // WebKit returns null on unsupported types\n if (new Parser().parseFromString('', 'text/html')) {\n canParse = true;\n }\n } catch (e) {}\n return canParse;\n}\nfunction createHTMLParser() {\n var Parser = function () {};\n {\n if (shouldUseActiveX()) {\n Parser.prototype.parseFromString = function (string) {\n var doc = new window.ActiveXObject('htmlfile');\n doc.designMode = 'on'; // disable on-page scripts\n doc.open();\n doc.write(string);\n doc.close();\n return doc;\n };\n } else {\n Parser.prototype.parseFromString = function (string) {\n var doc = document.implementation.createHTMLDocument('');\n doc.open();\n doc.write(string);\n doc.close();\n return doc;\n };\n }\n }\n return Parser;\n}\nfunction shouldUseActiveX() {\n var useActiveX = false;\n try {\n document.implementation.createHTMLDocument('').open();\n } catch (e) {\n if (root.ActiveXObject) useActiveX = true;\n }\n return useActiveX;\n}\nvar HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\nfunction RootNode(input, options) {\n var root;\n if (typeof input === 'string') {\n var doc = htmlParser().parseFromString(\n // DOM parsers arrange elements in the <head> and <body>.\n // Wrapping in a custom element ensures elements are reliably arranged in\n // a single element.\n '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>', 'text/html');\n root = doc.getElementById('turndown-root');\n } else {\n root = input.cloneNode(true);\n }\n collapseWhitespace({\n element: root,\n isBlock: isBlock,\n isVoid: isVoid,\n isPre: options.preformattedCode ? isPreOrCode : null\n });\n return root;\n}\nvar _htmlParser;\nfunction htmlParser() {\n _htmlParser = _htmlParser || new HTMLParser();\n return _htmlParser;\n}\nfunction isPreOrCode(node) {\n return node.nodeName === 'PRE' || node.nodeName === 'CODE';\n}\n\nfunction Node(node, options) {\n node.isBlock = isBlock(node);\n node.isCode = node.nodeName === 'CODE' || node.parentNode.isCode;\n node.isBlank = isBlank(node);\n node.flankingWhitespace = flankingWhitespace(node, options);\n return node;\n}\nfunction isBlank(node) {\n return !isVoid(node) && !isMeaningfulWhenBlank(node) && /^\\s*$/i.test(node.textContent) && !hasVoid(node) && !hasMeaningfulWhenBlank(node);\n}\nfunction flankingWhitespace(node, options) {\n if (node.isBlock || options.preformattedCode && node.isCode) {\n return {\n leading: '',\n trailing: ''\n };\n }\n var edges = edgeWhitespace(node.textContent);\n\n // abandon leading ASCII WS if left-flanked by ASCII WS\n if (edges.leadingAscii && isFlankedByWhitespace('left', node, options)) {\n edges.leading = edges.leadingNonAscii;\n }\n\n // abandon trailing ASCII WS if right-flanked by ASCII WS\n if (edges.trailingAscii && isFlankedByWhitespace('right', node, options)) {\n edges.trailing = edges.trailingNonAscii;\n }\n return {\n leading: edges.leading,\n trailing: edges.trailing\n };\n}\nfunction edgeWhitespace(string) {\n var m = string.match(/^(([ \\t\\r\\n]*)(\\s*))(?:(?=\\S)[\\s\\S]*\\S)?((\\s*?)([ \\t\\r\\n]*))$/);\n return {\n leading: m[1],\n // whole string for whitespace-only strings\n leadingAscii: m[2],\n leadingNonAscii: m[3],\n trailing: m[4],\n // empty for whitespace-only strings\n trailingNonAscii: m[5],\n trailingAscii: m[6]\n };\n}\nfunction isFlankedByWhitespace(side, node, options) {\n var sibling;\n var regExp;\n var isFlanked;\n if (side === 'left') {\n sibling = node.previousSibling;\n regExp = / $/;\n } else {\n sibling = node.nextSibling;\n regExp = /^ /;\n }\n if (sibling) {\n if (sibling.nodeType === 3) {\n isFlanked = regExp.test(sibling.nodeValue);\n } else if (options.preformattedCode && sibling.nodeName === 'CODE') {\n isFlanked = false;\n } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n isFlanked = regExp.test(sibling.textContent);\n }\n }\n return isFlanked;\n}\n\nvar reduce = Array.prototype.reduce;\nfunction TurndownService(options) {\n if (!(this instanceof TurndownService)) return new TurndownService(options);\n var defaults = {\n rules: rules,\n headingStyle: 'setext',\n hr: '* * *',\n bulletListMarker: '*',\n codeBlockStyle: 'indented',\n fence: '```',\n emDelimiter: '_',\n strongDelimiter: '**',\n linkStyle: 'inlined',\n linkReferenceStyle: 'full',\n br: ' ',\n preformattedCode: false,\n blankReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' : '';\n },\n keepReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML;\n },\n defaultReplacement: function (content, node) {\n return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content;\n }\n };\n this.options = extend({}, defaults, options);\n this.rules = new Rules(this.options);\n}\nTurndownService.prototype = {\n /**\n * The entry point for converting a string or DOM node to Markdown\n * @public\n * @param {String|HTMLElement} input The string or DOM node to convert\n * @returns A Markdown representation of the input\n * @type String\n */\n\n turndown: function (input) {\n if (!canConvert(input)) {\n throw new TypeError(input + ' is not a string, or an element/document/fragment node.');\n }\n if (input === '') return '';\n var output = process.call(this, new RootNode(input, this.options));\n return postProcess.call(this, output);\n },\n /**\n * Add one or more plugins\n * @public\n * @param {Function|Array} plugin The plugin or array of plugins to add\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n use: function (plugin) {\n if (Array.isArray(plugin)) {\n for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n } else if (typeof plugin === 'function') {\n plugin(this);\n } else {\n throw new TypeError('plugin must be a Function or an Array of Functions');\n }\n return this;\n },\n /**\n * Adds a rule\n * @public\n * @param {String} key The unique key of the rule\n * @param {Object} rule The rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n addRule: function (key, rule) {\n this.rules.add(key, rule);\n return this;\n },\n /**\n * Keep a node (as HTML) that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n keep: function (filter) {\n this.rules.keep(filter);\n return this;\n },\n /**\n * Remove a node that matches the filter\n * @public\n * @param {String|Array|Function} filter The unique key of the rule\n * @returns The Turndown instance for chaining\n * @type Object\n */\n\n remove: function (filter) {\n this.rules.remove(filter);\n return this;\n },\n /**\n * Escapes Markdown syntax\n * @public\n * @param {String} string The string to escape\n * @returns A string with Markdown syntax escaped\n * @type String\n */\n\n escape: function (string) {\n return escapeMarkdown(string);\n }\n};\n\n/**\n * Reduces a DOM node down to its Markdown string equivalent\n * @private\n * @param {HTMLElement} parentNode The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction process(parentNode) {\n var self = this;\n return reduce.call(parentNode.childNodes, function (output, node) {\n node = new Node(node, self.options);\n var replacement = '';\n if (node.nodeType === 3) {\n replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n } else if (node.nodeType === 1) {\n replacement = replacementForNode.call(self, node);\n }\n return join(output, replacement);\n }, '');\n}\n\n/**\n * Appends strings as each rule requires and trims the output\n * @private\n * @param {String} output The conversion output\n * @returns A trimmed version of the ouput\n * @type String\n */\n\nfunction postProcess(output) {\n var self = this;\n this.rules.forEach(function (rule) {\n if (typeof rule.append === 'function') {\n output = join(output, rule.append(self.options));\n }\n });\n return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '');\n}\n\n/**\n * Converts an element node to its Markdown equivalent\n * @private\n * @param {HTMLElement} node The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction replacementForNode(node) {\n var rule = this.rules.forNode(node);\n var content = process.call(this, node);\n var whitespace = node.flankingWhitespace;\n if (whitespace.leading || whitespace.trailing) content = content.trim();\n return whitespace.leading + rule.replacement(content, node, this.options) + whitespace.trailing;\n}\n\n/**\n * Joins replacement to the current output with appropriate number of new lines\n * @private\n * @param {String} output The current conversion output\n * @param {String} replacement The string to append to the output\n * @returns Joined output\n * @type String\n */\n\nfunction join(output, replacement) {\n var s1 = trimTrailingNewlines(output);\n var s2 = trimLeadingNewlines(replacement);\n var nls = Math.max(output.length - s1.length, replacement.length - s2.length);\n var separator = '\\n\\n'.substring(0, nls);\n return s1 + separator + s2;\n}\n\n/**\n * Determines whether an input can be converted\n * @private\n * @param {String|HTMLElement} input Describe this parameter\n * @returns Describe what it returns\n * @type String|Object|Array|Boolean|Number\n */\n\nfunction canConvert(input) {\n return input != null && (typeof input === 'string' || input.nodeType && (input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11));\n}\n\nexport { TurndownService as default };\n"],"names":["extend","destination","i","source","key","repeat","character","count","trimLeadingNewlines","string","trimTrailingNewlines","indexEnd","trimNewlines","blockElements","isBlock","node","is","voidElements","isVoid","hasVoid","has","meaningfulWhenBlankElements","isMeaningfulWhenBlank","hasMeaningfulWhenBlank","tagNames","tagName","markdownEscapes","escapeMarkdown","accumulator","escape","rules","content","options","hLevel","underline","parent","prefix","start","index","isParagraph","className","language","code","fenceChar","fenceSize","fenceInCodeRegex","match","fence","href","escapeLinkDestination","title","escapeLinkTitle","cleanAttribute","titlePart","replacement","reference","id","references","hasSiblings","isCodeBlock","extraSpace","delimiter","matches","alt","src","attribute","escaped","Rules","rule","filter","findRule","fn","filterValue","collapseWhitespace","element","isPre","prevText","keepLeadingWs","prev","next","text","remove","nextNode","current","root","canParseHTMLNatively","Parser","canParse","createHTMLParser","shouldUseActiveX","doc","useActiveX","HTMLParser","RootNode","input","htmlParser","isPreOrCode","_htmlParser","Node","isBlank","flankingWhitespace","edges","edgeWhitespace","isFlankedByWhitespace","m","side","sibling","regExp","isFlanked","reduce","TurndownService","defaults","canConvert","output","process","postProcess","plugin","parentNode","self","replacementForNode","join","whitespace","s1","s2","nls","separator"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
- "use strict";var t=require("lit"),e=require("lit/decorators.js"),i=require("lit/directives/style-map.js"),r=require("./base/define.cjs"),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,h=(t,e,i,r)=>{for(var h,a=r>1?void 0:r?s(e,i):e,n=t.length-1;n>=0;n--)(h=t[n])&&(a=(r?h(e,i,a):h(a))||a);return r&&a&&o(e,i,a),a};function a(t,e,i){return Math.min(Math.max(t,e),i)}function n(t){const[e,i]=t.split("/").map(t=>Number.parseFloat(t.trim()));return!e||!i||Number.isNaN(e)||Number.isNaN(i)?16/9:e/i}exports.QxsPhotoCropTool=class extends t.LitElement{constructor(){super(...arguments),this.imgFile=null,this.aspectRatio="16 / 9",this.defaultWidth=320,this.defaultHeight=180,this.zoomType="fixed",this._errorMessage="",this._imageUrl="",this._cropRect={x:0,y:0,width:320,height:180},this._imageRect={x:0,y:0,width:0,height:0},this._resizeObserver=null,this._dragType=null,this._dragOrigin=null,this._dragStartRect=null,this._pendingReset=!0,this._rafId=0,this._handleImageLoad=()=>{this._scheduleLayoutSync()},this._handlePointerDown=(t,e)=>{e.preventDefault(),e.stopPropagation(),this._dragType=t,this._dragOrigin={x:e.clientX,y:e.clientY},this._dragStartRect={...this._cropRect}},this._handlePointerMove=t=>{if(!this._dragType||!this._dragOrigin||!this._dragStartRect)return;t.preventDefault();const e=t.clientX-this._dragOrigin.x,i=t.clientY-this._dragOrigin.y;"move"!==this._dragType?this._cropRect=this._resizeByHandle(this._dragType,this._dragStartRect,e,i):this._cropRect=this._clampMoveRect({...this._dragStartRect,x:this._dragStartRect.x+e,y:this._dragStartRect.y+i})},this._handlePointerUp=()=>{this._dragType=null,this._dragOrigin=null,this._dragStartRect=null}}connectedCallback(){super.connectedCallback(),window.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("pointerup",this._handlePointerUp),window.addEventListener("pointercancel",this._handlePointerUp)}firstUpdated(){"undefined"!=typeof ResizeObserver&&(this._resizeObserver=new ResizeObserver(()=>{this._scheduleLayoutSync()}),this._resizeObserver.observe(this))}disconnectedCallback(){super.disconnectedCallback(),this._revokeImageUrl(),this._resizeObserver?.disconnect(),this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0),window.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("pointerup",this._handlePointerUp),window.removeEventListener("pointercancel",this._handlePointerUp)}updated(t){t.has("imgFile")&&this._applyImageFile(),(t.has("defaultWidth")||t.has("defaultHeight")||t.has("aspectRatio")||t.has("zoomType"))&&(this._pendingReset=!0,this._scheduleLayoutSync())}async crop(){if(!(this._image&&this._imageRect.width&&this._image.naturalWidth&&this._image.naturalHeight))return null;const t=this._image.naturalWidth/this._imageRect.width,e=Math.max(this._cropRect.x-this._imageRect.x,0)*t,i=Math.max(this._cropRect.y-this._imageRect.y,0)*t,r=Math.max(this._cropRect.width*t,1),o=Math.max(this._cropRect.height*t,1),s=document.createElement("canvas");s.width=Math.round(r),s.height=Math.round(o);const h=s.getContext("2d");return h?(h.drawImage(this._image,e,i,r,o,0,0,s.width,s.height),await new Promise(t=>{s.toBlob(e=>{t(e?new File([e],"cropped_image.png",{type:"image/png"}):null)},"image/png")})):null}resize(){this._pendingReset=!0,this._resetCropRect()}_applyImageFile(){return this._revokeImageUrl(),this.imgFile?this.imgFile.type.startsWith("image/")?(this._errorMessage="",this._imageUrl=URL.createObjectURL(this.imgFile),void(this._pendingReset=!0)):(this._errorMessage="文件类型错误",void(this._imageUrl="")):(this._errorMessage="",this._imageUrl="",this._pendingReset=!0,void(this._cropRect={x:0,y:0,width:this.defaultWidth,height:this.defaultHeight}))}_revokeImageUrl(){this._imageUrl&&URL.revokeObjectURL(this._imageUrl)}_scheduleLayoutSync(){this._rafId&&cancelAnimationFrame(this._rafId),this._rafId=requestAnimationFrame(()=>{this._rafId=0,this._syncImageRect()})}_syncImageRect(){if(!(this._container&&this._image&&this._image.naturalWidth&&this._image.naturalHeight))return;const t=this._container.clientWidth||this.clientWidth,e=this._container.clientHeight||this.clientHeight;if(!t||!e)return;const i=Math.min(t/this._image.naturalWidth,e/this._image.naturalHeight),r=this._image.naturalWidth*i,o=this._image.naturalHeight*i,s=(t-r)/2,h=(e-o)/2;this._imageRect={x:s,y:h,width:r,height:o},this._pendingReset?(this._resetCropRect(),this._pendingReset=!1):this._cropRect=this._clampMoveRect(this._cropRect)}_resetCropRect(){const t=n(this.aspectRatio),e=this._imageRect.width||this.defaultWidth,i=this._imageRect.height||this.defaultHeight;let r=Math.min(this.defaultWidth,e),o=Math.min(this.defaultHeight,i);"fixed"===this.zoomType&&(o=r/t,o>i&&(o=i,r=o*t)),r=Math.min(r,e),o=Math.min(o,i),this._cropRect={x:this._imageRect.x+(e-r)/2,y:this._imageRect.y+(i-o)/2,width:r,height:o}}_clampMoveRect(t){const e=this._imageRect.x+this._imageRect.width-t.width,i=this._imageRect.y+this._imageRect.height-t.height;return{...t,x:a(t.x,this._imageRect.x,e),y:a(t.y,this._imageRect.y,i)}}_resizeByHandle(t,e,i,r){return"free"===this.zoomType?this._resizeFree(t,e,i,r):this._resizeFixed(t,e,i)}_resizeFree(t,e,i,r){const o=40,s=e.x,h=e.y,n=e.x+e.width,c=e.y+e.height;if("top-left"===t){const t=a(s+i,this._imageRect.x,n-o),e=a(h+r,this._imageRect.y,c-o);return{x:t,y:e,width:n-t,height:c-e}}if("top-right"===t){const t=a(n+i,s+o,this._imageRect.x+this._imageRect.width),e=a(h+r,this._imageRect.y,c-o);return{x:s,y:e,width:t-s,height:c-e}}if("bottom-right"===t){return{x:s,y:h,width:a(n+i,s+o,this._imageRect.x+this._imageRect.width)-s,height:a(c+r,h+o,this._imageRect.y+this._imageRect.height)-h}}const d=a(s+i,this._imageRect.x,n-o);return{x:d,y:h,width:n-d,height:a(c+r,h+o,this._imageRect.y+this._imageRect.height)-h}}_resizeFixed(t,e,i){const r=n(this.aspectRatio),o=e.x+e.width,s=e.y+e.height;if("top-left"===t){let t=a(e.width-i,40,o-this._imageRect.x);t=Math.min(t,(s-this._imageRect.y)*r);const h=t/r;return{x:o-t,y:s-h,width:t,height:h}}if("top-right"===t){let t=a(e.width+i,40,this._imageRect.x+this._imageRect.width-e.x);t=Math.min(t,(s-this._imageRect.y)*r);const o=t/r;return{x:e.x,y:s-o,width:t,height:o}}if("bottom-right"===t){let t=a(e.width+i,40,this._imageRect.x+this._imageRect.width-e.x);t=Math.min(t,(this._imageRect.y+this._imageRect.height-e.y)*r);const o=t/r;return{x:e.x,y:e.y,width:t,height:o}}let h=a(e.width-i,40,o-this._imageRect.x);h=Math.min(h,(this._imageRect.y+this._imageRect.height-e.y)*r);const c=h/r;return{x:o-h,y:e.y,width:h,height:c}}render(){const e=this._imageRect.width?i.styleMap({left:`${this._imageRect.x}px`,top:`${this._imageRect.y}px`,width:`${this._imageRect.width}px`,height:`${this._imageRect.height}px`}):"",r=i.styleMap({left:`${this._cropRect.x}px`,top:`${this._cropRect.y}px`,width:`${this._cropRect.width}px`,height:`${this._cropRect.height}px`,aspectRatio:"fixed"===this.zoomType?this.aspectRatio:""});return t.html`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("lit"),p=require("lit/decorators.js"),f=require("lit/directives/style-map.js"),w=require("./base/define.cjs");var R=Object.defineProperty,b=Object.getOwnPropertyDescriptor,l=(m,e,t,i)=>{for(var o=i>1?void 0:i?b(e,t):e,s=m.length-1,r;s>=0;s--)(r=m[s])&&(o=(i?r(e,t,o):r(o))||o);return i&&o&&R(e,t,o),o};function c(m,e,t){return Math.min(Math.max(m,e),t)}function x(m){const[e,t]=m.split("/").map(i=>Number.parseFloat(i.trim()));return!e||!t||Number.isNaN(e)||Number.isNaN(t)?16/9:e/t}exports.QxsPhotoCropTool=class extends y.LitElement{constructor(){super(...arguments),this.imgFile=null,this.aspectRatio="16 / 9",this.defaultWidth=320,this.defaultHeight=180,this.zoomType="fixed",this._errorMessage="",this._imageUrl="",this._cropRect={x:0,y:0,width:320,height:180},this._imageRect={x:0,y:0,width:0,height:0},this._resizeObserver=null,this._dragType=null,this._dragOrigin=null,this._dragStartRect=null,this._pendingReset=!0,this._rafId=0,this._handleImageLoad=()=>{this._scheduleLayoutSync()},this._handlePointerDown=(e,t)=>{t.preventDefault(),t.stopPropagation(),this._dragType=e,this._dragOrigin={x:t.clientX,y:t.clientY},this._dragStartRect={...this._cropRect}},this._handlePointerMove=e=>{if(!this._dragType||!this._dragOrigin||!this._dragStartRect)return;e.preventDefault();const t=e.clientX-this._dragOrigin.x,i=e.clientY-this._dragOrigin.y;if(this._dragType==="move"){this._cropRect=this._clampMoveRect({...this._dragStartRect,x:this._dragStartRect.x+t,y:this._dragStartRect.y+i});return}this._cropRect=this._resizeByHandle(this._dragType,this._dragStartRect,t,i)},this._handlePointerUp=()=>{this._dragType=null,this._dragOrigin=null,this._dragStartRect=null}}connectedCallback(){super.connectedCallback(),window.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("pointerup",this._handlePointerUp),window.addEventListener("pointercancel",this._handlePointerUp)}firstUpdated(){typeof ResizeObserver>"u"||(this._resizeObserver=new ResizeObserver(()=>{this._scheduleLayoutSync()}),this._resizeObserver.observe(this))}disconnectedCallback(){super.disconnectedCallback(),this._revokeImageUrl(),this._resizeObserver?.disconnect(),this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0),window.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("pointerup",this._handlePointerUp),window.removeEventListener("pointercancel",this._handlePointerUp)}updated(e){e.has("imgFile")&&this._applyImageFile(),(e.has("defaultWidth")||e.has("defaultHeight")||e.has("aspectRatio")||e.has("zoomType"))&&(this._pendingReset=!0,this._scheduleLayoutSync())}async crop(){if(!this._image||!this._imageRect.width||!this._image.naturalWidth||!this._image.naturalHeight)return null;const e=this._image.naturalWidth/this._imageRect.width,t=Math.max(this._cropRect.x-this._imageRect.x,0)*e,i=Math.max(this._cropRect.y-this._imageRect.y,0)*e,o=Math.max(this._cropRect.width*e,1),s=Math.max(this._cropRect.height*e,1),r=document.createElement("canvas");r.width=Math.round(o),r.height=Math.round(s);const h=r.getContext("2d");return h?(h.drawImage(this._image,t,i,o,s,0,0,r.width,r.height),await new Promise(n=>{r.toBlob(g=>{if(!g){n(null);return}n(new File([g],"cropped_image.png",{type:"image/png"}))},"image/png")})):null}resize(){this._pendingReset=!0,this._resetCropRect()}_applyImageFile(){if(this._revokeImageUrl(),!this.imgFile){this._errorMessage="",this._imageUrl="",this._pendingReset=!0,this._cropRect={x:0,y:0,width:this.defaultWidth,height:this.defaultHeight};return}if(!this.imgFile.type.startsWith("image/")){this._errorMessage="文件类型错误",this._imageUrl="";return}this._errorMessage="",this._imageUrl=URL.createObjectURL(this.imgFile),this._pendingReset=!0}_revokeImageUrl(){this._imageUrl&&URL.revokeObjectURL(this._imageUrl)}_scheduleLayoutSync(){this._rafId&&cancelAnimationFrame(this._rafId),this._rafId=requestAnimationFrame(()=>{this._rafId=0,this._syncImageRect()})}_syncImageRect(){if(!this._container||!this._image||!this._image.naturalWidth||!this._image.naturalHeight)return;const e=this._container.clientWidth||this.clientWidth,t=this._container.clientHeight||this.clientHeight;if(!e||!t)return;const i=Math.min(e/this._image.naturalWidth,t/this._image.naturalHeight),o=this._image.naturalWidth*i,s=this._image.naturalHeight*i,r=(e-o)/2,h=(t-s)/2;this._imageRect={x:r,y:h,width:o,height:s},this._pendingReset?(this._resetCropRect(),this._pendingReset=!1):this._cropRect=this._clampMoveRect(this._cropRect)}_resetCropRect(){const e=x(this.aspectRatio),t=this._imageRect.width||this.defaultWidth,i=this._imageRect.height||this.defaultHeight;let o=Math.min(this.defaultWidth,t),s=Math.min(this.defaultHeight,i);this.zoomType==="fixed"&&(s=o/e,s>i&&(s=i,o=s*e)),o=Math.min(o,t),s=Math.min(s,i),this._cropRect={x:this._imageRect.x+(t-o)/2,y:this._imageRect.y+(i-s)/2,width:o,height:s}}_clampMoveRect(e){const t=this._imageRect.x+this._imageRect.width-e.width,i=this._imageRect.y+this._imageRect.height-e.height;return{...e,x:c(e.x,this._imageRect.x,t),y:c(e.y,this._imageRect.y,i)}}_resizeByHandle(e,t,i,o){return this.zoomType==="free"?this._resizeFree(e,t,i,o):this._resizeFixed(e,t,i)}_resizeFree(e,t,i,o){const r=t.x,h=t.y,n=t.x+t.width,g=t.y+t.height;if(e==="top-left"){const u=c(r+i,this._imageRect.x,n-40),_=c(h+o,this._imageRect.y,g-40);return{x:u,y:_,width:n-u,height:g-_}}if(e==="top-right"){const u=c(n+i,r+40,this._imageRect.x+this._imageRect.width),_=c(h+o,this._imageRect.y,g-40);return{x:r,y:_,width:u-r,height:g-_}}if(e==="bottom-right"){const u=c(n+i,r+40,this._imageRect.x+this._imageRect.width),_=c(g+o,h+40,this._imageRect.y+this._imageRect.height);return{x:r,y:h,width:u-r,height:_-h}}const a=c(r+i,this._imageRect.x,n-40),d=c(g+o,h+40,this._imageRect.y+this._imageRect.height);return{x:a,y:h,width:n-a,height:d-h}}_resizeFixed(e,t,i){const o=x(this.aspectRatio),s=40,r=t.x+t.width,h=t.y+t.height;if(e==="top-left"){let a=c(t.width-i,s,r-this._imageRect.x);a=Math.min(a,(h-this._imageRect.y)*o);const d=a/o;return{x:r-a,y:h-d,width:a,height:d}}if(e==="top-right"){let a=c(t.width+i,s,this._imageRect.x+this._imageRect.width-t.x);a=Math.min(a,(h-this._imageRect.y)*o);const d=a/o;return{x:t.x,y:h-d,width:a,height:d}}if(e==="bottom-right"){let a=c(t.width+i,s,this._imageRect.x+this._imageRect.width-t.x);a=Math.min(a,(this._imageRect.y+this._imageRect.height-t.y)*o);const d=a/o;return{x:t.x,y:t.y,width:a,height:d}}let n=c(t.width-i,s,r-this._imageRect.x);n=Math.min(n,(this._imageRect.y+this._imageRect.height-t.y)*o);const g=n/o;return{x:r-n,y:t.y,width:n,height:g}}render(){const e=this._imageRect.width?f.styleMap({left:`${this._imageRect.x}px`,top:`${this._imageRect.y}px`,width:`${this._imageRect.width}px`,height:`${this._imageRect.height}px`}):"",t=f.styleMap({left:`${this._cropRect.x}px`,top:`${this._cropRect.y}px`,width:`${this._cropRect.width}px`,height:`${this._cropRect.height}px`,aspectRatio:this.zoomType==="fixed"?this.aspectRatio:""});return y.html`
2
2
  <div part="container" class="img-box">
3
- ${this._errorMessage?t.html`<div part="error-message" class="error-message">${this._errorMessage}</div>`:this._imageUrl?t.html`
3
+ ${this._errorMessage?y.html`<div part="error-message" class="error-message">${this._errorMessage}</div>`:this._imageUrl?y.html`
4
4
  <img
5
5
  part="image"
6
6
  class="image"
@@ -12,33 +12,33 @@
12
12
  <div
13
13
  part="crop-box"
14
14
  class="crop-tool-box"
15
- style=${r}
16
- @pointerdown=${t=>this._handlePointerDown("move",t)}
15
+ style=${t}
16
+ @pointerdown=${i=>this._handlePointerDown("move",i)}
17
17
  >
18
18
  <div
19
19
  part="handle top-left"
20
20
  class="handle top-left"
21
- @pointerdown=${t=>this._handlePointerDown("top-left",t)}
21
+ @pointerdown=${i=>this._handlePointerDown("top-left",i)}
22
22
  ></div>
23
23
  <div
24
24
  part="handle top-right"
25
25
  class="handle top-right"
26
- @pointerdown=${t=>this._handlePointerDown("top-right",t)}
26
+ @pointerdown=${i=>this._handlePointerDown("top-right",i)}
27
27
  ></div>
28
28
  <div
29
29
  part="handle bottom-right"
30
30
  class="handle bottom-right"
31
- @pointerdown=${t=>this._handlePointerDown("bottom-right",t)}
31
+ @pointerdown=${i=>this._handlePointerDown("bottom-right",i)}
32
32
  ></div>
33
33
  <div
34
34
  part="handle bottom-left"
35
35
  class="handle bottom-left"
36
- @pointerdown=${t=>this._handlePointerDown("bottom-left",t)}
36
+ @pointerdown=${i=>this._handlePointerDown("bottom-left",i)}
37
37
  ></div>
38
38
  </div>
39
- `:t.html`<div part="placeholder" class="placeholder">请选择图片</div>`}
39
+ `:y.html`<div part="placeholder" class="placeholder">请选择图片</div>`}
40
40
  </div>
41
- `}},exports.QxsPhotoCropTool.styles=t.css`
41
+ `}};exports.QxsPhotoCropTool.styles=y.css`
42
42
  :host {
43
43
  display: block;
44
44
  width: 100%;
@@ -143,5 +143,5 @@
143
143
  cursor: nesw-resize;
144
144
  transform: translate(-50%, 50%);
145
145
  }
146
- `,h([e.property({attribute:!1})],exports.QxsPhotoCropTool.prototype,"imgFile",2),h([e.property({type:String,attribute:"aspect-ratio"})],exports.QxsPhotoCropTool.prototype,"aspectRatio",2),h([e.property({type:Number,attribute:"default-width"})],exports.QxsPhotoCropTool.prototype,"defaultWidth",2),h([e.property({type:Number,attribute:"default-height"})],exports.QxsPhotoCropTool.prototype,"defaultHeight",2),h([e.property({type:String,attribute:"zoom-type"})],exports.QxsPhotoCropTool.prototype,"zoomType",2),h([e.state()],exports.QxsPhotoCropTool.prototype,"_errorMessage",2),h([e.state()],exports.QxsPhotoCropTool.prototype,"_imageUrl",2),h([e.state()],exports.QxsPhotoCropTool.prototype,"_cropRect",2),h([e.state()],exports.QxsPhotoCropTool.prototype,"_imageRect",2),h([e.query(".img-box")],exports.QxsPhotoCropTool.prototype,"_container",2),h([e.query(".image")],exports.QxsPhotoCropTool.prototype,"_image",2),exports.QxsPhotoCropTool=h([r.safeCustomElement("qxs-photo-crop-tool")],exports.QxsPhotoCropTool);
146
+ `;l([p.property({attribute:!1})],exports.QxsPhotoCropTool.prototype,"imgFile",2);l([p.property({type:String,attribute:"aspect-ratio"})],exports.QxsPhotoCropTool.prototype,"aspectRatio",2);l([p.property({type:Number,attribute:"default-width"})],exports.QxsPhotoCropTool.prototype,"defaultWidth",2);l([p.property({type:Number,attribute:"default-height"})],exports.QxsPhotoCropTool.prototype,"defaultHeight",2);l([p.property({type:String,attribute:"zoom-type"})],exports.QxsPhotoCropTool.prototype,"zoomType",2);l([p.state()],exports.QxsPhotoCropTool.prototype,"_errorMessage",2);l([p.state()],exports.QxsPhotoCropTool.prototype,"_imageUrl",2);l([p.state()],exports.QxsPhotoCropTool.prototype,"_cropRect",2);l([p.state()],exports.QxsPhotoCropTool.prototype,"_imageRect",2);l([p.query(".img-box")],exports.QxsPhotoCropTool.prototype,"_container",2);l([p.query(".image")],exports.QxsPhotoCropTool.prototype,"_image",2);exports.QxsPhotoCropTool=l([w.safeCustomElement("qxs-photo-crop-tool")],exports.QxsPhotoCropTool);
147
147
  //# sourceMappingURL=photo-crop-tool.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"photo-crop-tool.cjs","sources":["../../../packages/components/src/photo-crop-tool.ts"],"sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\ntype ZoomType = 'fixed' | 'free'\ntype HandleType = 'move' | 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left'\n\ntype CropRect = {\n x: number\n y: number\n width: number\n height: number\n}\n\ntype DisplayRect = CropRect\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction parseAspectRatio(value: string) {\n const [left, right] = value.split('/').map(part => Number.parseFloat(part.trim()))\n if (!left || !right || Number.isNaN(left) || Number.isNaN(right)) {\n return 16 / 9\n }\n return left / right\n}\n\n@safeCustomElement('qxs-photo-crop-tool')\nexport class QxsPhotoCropTool extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: 240px;\n }\n\n .img-box {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background: #fafafa;\n border-radius: 12px;\n }\n\n .placeholder,\n .error-message {\n padding: 20px;\n font-size: 14px;\n line-height: 1.6;\n color: #64748b;\n text-align: center;\n }\n\n .error-message {\n color: #dc2626;\n }\n\n .image {\n position: absolute;\n inset: 0;\n user-select: none;\n -webkit-user-drag: none;\n pointer-events: none;\n }\n\n .crop-tool-box {\n position: absolute;\n box-sizing: border-box;\n overflow: visible;\n cursor: move;\n border: 1px dashed #fff;\n box-shadow: 0 0 0 9999px rgb(0 0 0 / 40%);\n touch-action: none;\n }\n\n .handle {\n position: absolute;\n z-index: 2;\n width: 28%;\n aspect-ratio: 1 / 1;\n background-color: rgb(2 2 2 / 1%);\n border-radius: 50%;\n transition: background-color 0.2s ease;\n }\n\n .handle::after {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 10px;\n height: 10px;\n content: '';\n background: var(--vp-c-brand-1, #3d61e3);\n border-radius: 50%;\n transform: translate(-50%, -50%);\n }\n\n .handle:hover,\n .handle:active {\n background-color: rgb(2 2 2 / 50%);\n }\n\n .top-left {\n top: 0;\n left: 0;\n cursor: nwse-resize;\n transform: translate(-50%, -50%);\n }\n\n .top-right {\n top: 0;\n right: 0;\n cursor: nesw-resize;\n transform: translate(50%, -50%);\n }\n\n .bottom-right {\n right: 0;\n bottom: 0;\n cursor: nwse-resize;\n transform: translate(50%, 50%);\n }\n\n .bottom-left {\n bottom: 0;\n left: 0;\n cursor: nesw-resize;\n transform: translate(-50%, 50%);\n }\n `\n\n @property({ attribute: false }) imgFile: File | null = null\n @property({ type: String, attribute: 'aspect-ratio' }) aspectRatio = '16 / 9'\n @property({ type: Number, attribute: 'default-width' }) defaultWidth = 320\n @property({ type: Number, attribute: 'default-height' }) defaultHeight = 180\n @property({ type: String, attribute: 'zoom-type' }) zoomType: ZoomType = 'fixed'\n\n @state() private _errorMessage = ''\n @state() private _imageUrl = ''\n @state() private _cropRect: CropRect = { x: 0, y: 0, width: 320, height: 180 }\n @state() private _imageRect: DisplayRect = { x: 0, y: 0, width: 0, height: 0 }\n\n @query('.img-box') private _container?: HTMLDivElement\n @query('.image') private _image?: HTMLImageElement\n\n private _resizeObserver: ResizeObserver | null = null\n private _dragType: HandleType | null = null\n private _dragOrigin: { x: number, y: number } | null = null\n private _dragStartRect: CropRect | null = null\n private _pendingReset = true\n private _rafId = 0\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener('pointermove', this._handlePointerMove)\n window.addEventListener('pointerup', this._handlePointerUp)\n window.addEventListener('pointercancel', this._handlePointerUp)\n }\n\n firstUpdated() {\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n this._resizeObserver = new ResizeObserver(() => {\n this._scheduleLayoutSync()\n })\n this._resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._revokeImageUrl()\n this._resizeObserver?.disconnect()\n if (this._rafId) {\n cancelAnimationFrame(this._rafId)\n this._rafId = 0\n }\n window.removeEventListener('pointermove', this._handlePointerMove)\n window.removeEventListener('pointerup', this._handlePointerUp)\n window.removeEventListener('pointercancel', this._handlePointerUp)\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('imgFile')) {\n this._applyImageFile()\n }\n\n if (changed.has('defaultWidth') || changed.has('defaultHeight') || changed.has('aspectRatio') || changed.has('zoomType')) {\n this._pendingReset = true\n this._scheduleLayoutSync()\n }\n }\n\n async crop() {\n if (!this._image || !this._imageRect.width || !this._image.naturalWidth || !this._image.naturalHeight) {\n return null\n }\n\n const scale = this._image.naturalWidth / this._imageRect.width\n const cropX = Math.max(this._cropRect.x - this._imageRect.x, 0) * scale\n const cropY = Math.max(this._cropRect.y - this._imageRect.y, 0) * scale\n const cropWidth = Math.max(this._cropRect.width * scale, 1)\n const cropHeight = Math.max(this._cropRect.height * scale, 1)\n\n const canvas = document.createElement('canvas')\n canvas.width = Math.round(cropWidth)\n canvas.height = Math.round(cropHeight)\n const context = canvas.getContext('2d')\n\n if (!context) {\n return null\n }\n\n context.drawImage(\n this._image,\n cropX,\n cropY,\n cropWidth,\n cropHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n )\n\n return await new Promise<File | null>((resolve) => {\n canvas.toBlob((blob) => {\n if (!blob) {\n resolve(null)\n return\n }\n\n resolve(new File([blob], 'cropped_image.png', { type: 'image/png' }))\n }, 'image/png')\n })\n }\n\n resize() {\n this._pendingReset = true\n this._resetCropRect()\n }\n\n private _applyImageFile() {\n this._revokeImageUrl()\n\n if (!this.imgFile) {\n this._errorMessage = ''\n this._imageUrl = ''\n this._pendingReset = true\n this._cropRect = {\n x: 0,\n y: 0,\n width: this.defaultWidth,\n height: this.defaultHeight,\n }\n return\n }\n\n if (!this.imgFile.type.startsWith('image/')) {\n this._errorMessage = '文件类型错误'\n this._imageUrl = ''\n return\n }\n\n this._errorMessage = ''\n this._imageUrl = URL.createObjectURL(this.imgFile)\n this._pendingReset = true\n }\n\n private _revokeImageUrl() {\n if (this._imageUrl) {\n URL.revokeObjectURL(this._imageUrl)\n }\n }\n\n private _scheduleLayoutSync() {\n if (this._rafId) {\n cancelAnimationFrame(this._rafId)\n }\n\n this._rafId = requestAnimationFrame(() => {\n this._rafId = 0\n this._syncImageRect()\n })\n }\n\n private _syncImageRect() {\n if (!this._container || !this._image || !this._image.naturalWidth || !this._image.naturalHeight) {\n return\n }\n\n const containerWidth = this._container.clientWidth || this.clientWidth\n const containerHeight = this._container.clientHeight || this.clientHeight\n if (!containerWidth || !containerHeight) {\n return\n }\n\n const scale = Math.min(\n containerWidth / this._image.naturalWidth,\n containerHeight / this._image.naturalHeight,\n )\n\n const width = this._image.naturalWidth * scale\n const height = this._image.naturalHeight * scale\n const x = (containerWidth - width) / 2\n const y = (containerHeight - height) / 2\n\n this._imageRect = { x, y, width, height }\n\n if (this._pendingReset) {\n this._resetCropRect()\n this._pendingReset = false\n }\n else {\n this._cropRect = this._clampMoveRect(this._cropRect)\n }\n }\n\n private _resetCropRect() {\n const aspect = parseAspectRatio(this.aspectRatio)\n const availableWidth = this._imageRect.width || this.defaultWidth\n const availableHeight = this._imageRect.height || this.defaultHeight\n\n let width = Math.min(this.defaultWidth, availableWidth)\n let height = Math.min(this.defaultHeight, availableHeight)\n\n if (this.zoomType === 'fixed') {\n height = width / aspect\n if (height > availableHeight) {\n height = availableHeight\n width = height * aspect\n }\n }\n\n width = Math.min(width, availableWidth)\n height = Math.min(height, availableHeight)\n\n this._cropRect = {\n x: this._imageRect.x + (availableWidth - width) / 2,\n y: this._imageRect.y + (availableHeight - height) / 2,\n width,\n height,\n }\n }\n\n private _handleImageLoad = () => {\n this._scheduleLayoutSync()\n }\n\n private _handlePointerDown = (type: HandleType, event: PointerEvent) => {\n event.preventDefault()\n event.stopPropagation()\n this._dragType = type\n this._dragOrigin = { x: event.clientX, y: event.clientY }\n this._dragStartRect = { ...this._cropRect }\n }\n\n private _handlePointerMove = (event: PointerEvent) => {\n if (!this._dragType || !this._dragOrigin || !this._dragStartRect) {\n return\n }\n\n event.preventDefault()\n const deltaX = event.clientX - this._dragOrigin.x\n const deltaY = event.clientY - this._dragOrigin.y\n\n if (this._dragType === 'move') {\n this._cropRect = this._clampMoveRect({\n ...this._dragStartRect,\n x: this._dragStartRect.x + deltaX,\n y: this._dragStartRect.y + deltaY,\n })\n return\n }\n\n this._cropRect = this._resizeByHandle(this._dragType, this._dragStartRect, deltaX, deltaY)\n }\n\n private _handlePointerUp = () => {\n this._dragType = null\n this._dragOrigin = null\n this._dragStartRect = null\n }\n\n private _clampMoveRect(rect: CropRect) {\n const maxX = this._imageRect.x + this._imageRect.width - rect.width\n const maxY = this._imageRect.y + this._imageRect.height - rect.height\n\n return {\n ...rect,\n x: clamp(rect.x, this._imageRect.x, maxX),\n y: clamp(rect.y, this._imageRect.y, maxY),\n }\n }\n\n private _resizeByHandle(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number, deltaY: number) {\n if (this.zoomType === 'free') {\n return this._resizeFree(handle, startRect, deltaX, deltaY)\n }\n\n return this._resizeFixed(handle, startRect, deltaX)\n }\n\n private _resizeFree(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number, deltaY: number) {\n const minSize = 40\n const left = startRect.x\n const top = startRect.y\n const right = startRect.x + startRect.width\n const bottom = startRect.y + startRect.height\n\n if (handle === 'top-left') {\n const x = clamp(left + deltaX, this._imageRect.x, right - minSize)\n const y = clamp(top + deltaY, this._imageRect.y, bottom - minSize)\n return { x, y, width: right - x, height: bottom - y }\n }\n\n if (handle === 'top-right') {\n const newRight = clamp(right + deltaX, left + minSize, this._imageRect.x + this._imageRect.width)\n const y = clamp(top + deltaY, this._imageRect.y, bottom - minSize)\n return { x: left, y, width: newRight - left, height: bottom - y }\n }\n\n if (handle === 'bottom-right') {\n const newRight = clamp(right + deltaX, left + minSize, this._imageRect.x + this._imageRect.width)\n const newBottom = clamp(bottom + deltaY, top + minSize, this._imageRect.y + this._imageRect.height)\n return { x: left, y: top, width: newRight - left, height: newBottom - top }\n }\n\n const x = clamp(left + deltaX, this._imageRect.x, right - minSize)\n const newBottom = clamp(bottom + deltaY, top + minSize, this._imageRect.y + this._imageRect.height)\n return { x, y: top, width: right - x, height: newBottom - top }\n }\n\n private _resizeFixed(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number) {\n const aspect = parseAspectRatio(this.aspectRatio)\n const minWidth = 40\n const startRight = startRect.x + startRect.width\n const startBottom = startRect.y + startRect.height\n\n if (handle === 'top-left') {\n let width = clamp(startRect.width - deltaX, minWidth, startRight - this._imageRect.x)\n width = Math.min(width, (startBottom - this._imageRect.y) * aspect)\n const height = width / aspect\n return { x: startRight - width, y: startBottom - height, width, height }\n }\n\n if (handle === 'top-right') {\n let width = clamp(startRect.width + deltaX, minWidth, this._imageRect.x + this._imageRect.width - startRect.x)\n width = Math.min(width, (startBottom - this._imageRect.y) * aspect)\n const height = width / aspect\n return { x: startRect.x, y: startBottom - height, width, height }\n }\n\n if (handle === 'bottom-right') {\n let width = clamp(startRect.width + deltaX, minWidth, this._imageRect.x + this._imageRect.width - startRect.x)\n width = Math.min(width, (this._imageRect.y + this._imageRect.height - startRect.y) * aspect)\n const height = width / aspect\n return { x: startRect.x, y: startRect.y, width, height }\n }\n\n let width = clamp(startRect.width - deltaX, minWidth, startRight - this._imageRect.x)\n width = Math.min(width, (this._imageRect.y + this._imageRect.height - startRect.y) * aspect)\n const height = width / aspect\n return { x: startRight - width, y: startRect.y, width, height }\n }\n\n render() {\n const imageStyle = this._imageRect.width\n ? styleMap({\n left: `${this._imageRect.x}px`,\n top: `${this._imageRect.y}px`,\n width: `${this._imageRect.width}px`,\n height: `${this._imageRect.height}px`,\n })\n : ''\n\n const cropStyle = styleMap({\n left: `${this._cropRect.x}px`,\n top: `${this._cropRect.y}px`,\n width: `${this._cropRect.width}px`,\n height: `${this._cropRect.height}px`,\n aspectRatio: this.zoomType === 'fixed' ? this.aspectRatio : '',\n })\n\n return html`\n <div part=\"container\" class=\"img-box\">\n ${this._errorMessage\n ? html`<div part=\"error-message\" class=\"error-message\">${this._errorMessage}</div>`\n : this._imageUrl\n ? html`\n <img\n part=\"image\"\n class=\"image\"\n style=${imageStyle}\n src=${this._imageUrl}\n alt=\"\"\n @load=${this._handleImageLoad}\n />\n <div\n part=\"crop-box\"\n class=\"crop-tool-box\"\n style=${cropStyle}\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('move', event)}\n >\n <div\n part=\"handle top-left\"\n class=\"handle top-left\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('top-left', event)}\n ></div>\n <div\n part=\"handle top-right\"\n class=\"handle top-right\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('top-right', event)}\n ></div>\n <div\n part=\"handle bottom-right\"\n class=\"handle bottom-right\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('bottom-right', event)}\n ></div>\n <div\n part=\"handle bottom-left\"\n class=\"handle bottom-left\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('bottom-left', event)}\n ></div>\n </div>\n `\n : html`<div part=\"placeholder\" class=\"placeholder\">请选择图片</div>`}\n </div>\n `\n }\n}\n"],"names":["clamp","value","min","max","Math","parseAspectRatio","left","right","split","map","Number","parseFloat","part","trim","isNaN","QxsPhotoCropTool","LitElement","constructor","super","arguments","this","imgFile","aspectRatio","defaultWidth","defaultHeight","zoomType","_errorMessage","_imageUrl","_cropRect","x","y","width","height","_imageRect","_resizeObserver","_dragType","_dragOrigin","_dragStartRect","_pendingReset","_rafId","_handleImageLoad","_scheduleLayoutSync","_handlePointerDown","type","event","preventDefault","stopPropagation","clientX","clientY","_handlePointerMove","deltaX","deltaY","_resizeByHandle","_clampMoveRect","_handlePointerUp","connectedCallback","window","addEventListener","firstUpdated","ResizeObserver","observe","disconnectedCallback","_revokeImageUrl","disconnect","cancelAnimationFrame","removeEventListener","updated","changed","has","_applyImageFile","crop","_image","naturalWidth","naturalHeight","scale","cropX","cropY","cropWidth","cropHeight","canvas","document","createElement","round","context","getContext","drawImage","Promise","resolve","toBlob","blob","File","resize","_resetCropRect","startsWith","URL","createObjectURL","revokeObjectURL","requestAnimationFrame","_syncImageRect","_container","containerWidth","clientWidth","containerHeight","clientHeight","aspect","availableWidth","availableHeight","rect","maxX","maxY","handle","startRect","_resizeFree","_resizeFixed","minSize","top","bottom","newRight","startRight","startBottom","render","imageStyle","styleMap","cropStyle","html","styles","css","__decorateClass","property","attribute","prototype","String","state","query","safeCustomElement"],"mappings":"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"}
1
+ {"version":3,"file":"photo-crop-tool.cjs","sources":["../../../packages/components/src/photo-crop-tool.ts"],"sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\ntype ZoomType = 'fixed' | 'free'\ntype HandleType = 'move' | 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left'\n\ntype CropRect = {\n x: number\n y: number\n width: number\n height: number\n}\n\ntype DisplayRect = CropRect\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction parseAspectRatio(value: string) {\n const [left, right] = value.split('/').map(part => Number.parseFloat(part.trim()))\n if (!left || !right || Number.isNaN(left) || Number.isNaN(right)) {\n return 16 / 9\n }\n return left / right\n}\n\n@safeCustomElement('qxs-photo-crop-tool')\nexport class QxsPhotoCropTool extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n min-height: 240px;\n }\n\n .img-box {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background: #fafafa;\n border-radius: 12px;\n }\n\n .placeholder,\n .error-message {\n padding: 20px;\n font-size: 14px;\n line-height: 1.6;\n color: #64748b;\n text-align: center;\n }\n\n .error-message {\n color: #dc2626;\n }\n\n .image {\n position: absolute;\n inset: 0;\n user-select: none;\n -webkit-user-drag: none;\n pointer-events: none;\n }\n\n .crop-tool-box {\n position: absolute;\n box-sizing: border-box;\n overflow: visible;\n cursor: move;\n border: 1px dashed #fff;\n box-shadow: 0 0 0 9999px rgb(0 0 0 / 40%);\n touch-action: none;\n }\n\n .handle {\n position: absolute;\n z-index: 2;\n width: 28%;\n aspect-ratio: 1 / 1;\n background-color: rgb(2 2 2 / 1%);\n border-radius: 50%;\n transition: background-color 0.2s ease;\n }\n\n .handle::after {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 10px;\n height: 10px;\n content: '';\n background: var(--vp-c-brand-1, #3d61e3);\n border-radius: 50%;\n transform: translate(-50%, -50%);\n }\n\n .handle:hover,\n .handle:active {\n background-color: rgb(2 2 2 / 50%);\n }\n\n .top-left {\n top: 0;\n left: 0;\n cursor: nwse-resize;\n transform: translate(-50%, -50%);\n }\n\n .top-right {\n top: 0;\n right: 0;\n cursor: nesw-resize;\n transform: translate(50%, -50%);\n }\n\n .bottom-right {\n right: 0;\n bottom: 0;\n cursor: nwse-resize;\n transform: translate(50%, 50%);\n }\n\n .bottom-left {\n bottom: 0;\n left: 0;\n cursor: nesw-resize;\n transform: translate(-50%, 50%);\n }\n `\n\n @property({ attribute: false }) imgFile: File | null = null\n @property({ type: String, attribute: 'aspect-ratio' }) aspectRatio = '16 / 9'\n @property({ type: Number, attribute: 'default-width' }) defaultWidth = 320\n @property({ type: Number, attribute: 'default-height' }) defaultHeight = 180\n @property({ type: String, attribute: 'zoom-type' }) zoomType: ZoomType = 'fixed'\n\n @state() private _errorMessage = ''\n @state() private _imageUrl = ''\n @state() private _cropRect: CropRect = { x: 0, y: 0, width: 320, height: 180 }\n @state() private _imageRect: DisplayRect = { x: 0, y: 0, width: 0, height: 0 }\n\n @query('.img-box') private _container?: HTMLDivElement\n @query('.image') private _image?: HTMLImageElement\n\n private _resizeObserver: ResizeObserver | null = null\n private _dragType: HandleType | null = null\n private _dragOrigin: { x: number, y: number } | null = null\n private _dragStartRect: CropRect | null = null\n private _pendingReset = true\n private _rafId = 0\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener('pointermove', this._handlePointerMove)\n window.addEventListener('pointerup', this._handlePointerUp)\n window.addEventListener('pointercancel', this._handlePointerUp)\n }\n\n firstUpdated() {\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n this._resizeObserver = new ResizeObserver(() => {\n this._scheduleLayoutSync()\n })\n this._resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._revokeImageUrl()\n this._resizeObserver?.disconnect()\n if (this._rafId) {\n cancelAnimationFrame(this._rafId)\n this._rafId = 0\n }\n window.removeEventListener('pointermove', this._handlePointerMove)\n window.removeEventListener('pointerup', this._handlePointerUp)\n window.removeEventListener('pointercancel', this._handlePointerUp)\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('imgFile')) {\n this._applyImageFile()\n }\n\n if (changed.has('defaultWidth') || changed.has('defaultHeight') || changed.has('aspectRatio') || changed.has('zoomType')) {\n this._pendingReset = true\n this._scheduleLayoutSync()\n }\n }\n\n async crop() {\n if (!this._image || !this._imageRect.width || !this._image.naturalWidth || !this._image.naturalHeight) {\n return null\n }\n\n const scale = this._image.naturalWidth / this._imageRect.width\n const cropX = Math.max(this._cropRect.x - this._imageRect.x, 0) * scale\n const cropY = Math.max(this._cropRect.y - this._imageRect.y, 0) * scale\n const cropWidth = Math.max(this._cropRect.width * scale, 1)\n const cropHeight = Math.max(this._cropRect.height * scale, 1)\n\n const canvas = document.createElement('canvas')\n canvas.width = Math.round(cropWidth)\n canvas.height = Math.round(cropHeight)\n const context = canvas.getContext('2d')\n\n if (!context) {\n return null\n }\n\n context.drawImage(\n this._image,\n cropX,\n cropY,\n cropWidth,\n cropHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n )\n\n return await new Promise<File | null>((resolve) => {\n canvas.toBlob((blob) => {\n if (!blob) {\n resolve(null)\n return\n }\n\n resolve(new File([blob], 'cropped_image.png', { type: 'image/png' }))\n }, 'image/png')\n })\n }\n\n resize() {\n this._pendingReset = true\n this._resetCropRect()\n }\n\n private _applyImageFile() {\n this._revokeImageUrl()\n\n if (!this.imgFile) {\n this._errorMessage = ''\n this._imageUrl = ''\n this._pendingReset = true\n this._cropRect = {\n x: 0,\n y: 0,\n width: this.defaultWidth,\n height: this.defaultHeight,\n }\n return\n }\n\n if (!this.imgFile.type.startsWith('image/')) {\n this._errorMessage = '文件类型错误'\n this._imageUrl = ''\n return\n }\n\n this._errorMessage = ''\n this._imageUrl = URL.createObjectURL(this.imgFile)\n this._pendingReset = true\n }\n\n private _revokeImageUrl() {\n if (this._imageUrl) {\n URL.revokeObjectURL(this._imageUrl)\n }\n }\n\n private _scheduleLayoutSync() {\n if (this._rafId) {\n cancelAnimationFrame(this._rafId)\n }\n\n this._rafId = requestAnimationFrame(() => {\n this._rafId = 0\n this._syncImageRect()\n })\n }\n\n private _syncImageRect() {\n if (!this._container || !this._image || !this._image.naturalWidth || !this._image.naturalHeight) {\n return\n }\n\n const containerWidth = this._container.clientWidth || this.clientWidth\n const containerHeight = this._container.clientHeight || this.clientHeight\n if (!containerWidth || !containerHeight) {\n return\n }\n\n const scale = Math.min(\n containerWidth / this._image.naturalWidth,\n containerHeight / this._image.naturalHeight,\n )\n\n const width = this._image.naturalWidth * scale\n const height = this._image.naturalHeight * scale\n const x = (containerWidth - width) / 2\n const y = (containerHeight - height) / 2\n\n this._imageRect = { x, y, width, height }\n\n if (this._pendingReset) {\n this._resetCropRect()\n this._pendingReset = false\n }\n else {\n this._cropRect = this._clampMoveRect(this._cropRect)\n }\n }\n\n private _resetCropRect() {\n const aspect = parseAspectRatio(this.aspectRatio)\n const availableWidth = this._imageRect.width || this.defaultWidth\n const availableHeight = this._imageRect.height || this.defaultHeight\n\n let width = Math.min(this.defaultWidth, availableWidth)\n let height = Math.min(this.defaultHeight, availableHeight)\n\n if (this.zoomType === 'fixed') {\n height = width / aspect\n if (height > availableHeight) {\n height = availableHeight\n width = height * aspect\n }\n }\n\n width = Math.min(width, availableWidth)\n height = Math.min(height, availableHeight)\n\n this._cropRect = {\n x: this._imageRect.x + (availableWidth - width) / 2,\n y: this._imageRect.y + (availableHeight - height) / 2,\n width,\n height,\n }\n }\n\n private _handleImageLoad = () => {\n this._scheduleLayoutSync()\n }\n\n private _handlePointerDown = (type: HandleType, event: PointerEvent) => {\n event.preventDefault()\n event.stopPropagation()\n this._dragType = type\n this._dragOrigin = { x: event.clientX, y: event.clientY }\n this._dragStartRect = { ...this._cropRect }\n }\n\n private _handlePointerMove = (event: PointerEvent) => {\n if (!this._dragType || !this._dragOrigin || !this._dragStartRect) {\n return\n }\n\n event.preventDefault()\n const deltaX = event.clientX - this._dragOrigin.x\n const deltaY = event.clientY - this._dragOrigin.y\n\n if (this._dragType === 'move') {\n this._cropRect = this._clampMoveRect({\n ...this._dragStartRect,\n x: this._dragStartRect.x + deltaX,\n y: this._dragStartRect.y + deltaY,\n })\n return\n }\n\n this._cropRect = this._resizeByHandle(this._dragType, this._dragStartRect, deltaX, deltaY)\n }\n\n private _handlePointerUp = () => {\n this._dragType = null\n this._dragOrigin = null\n this._dragStartRect = null\n }\n\n private _clampMoveRect(rect: CropRect) {\n const maxX = this._imageRect.x + this._imageRect.width - rect.width\n const maxY = this._imageRect.y + this._imageRect.height - rect.height\n\n return {\n ...rect,\n x: clamp(rect.x, this._imageRect.x, maxX),\n y: clamp(rect.y, this._imageRect.y, maxY),\n }\n }\n\n private _resizeByHandle(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number, deltaY: number) {\n if (this.zoomType === 'free') {\n return this._resizeFree(handle, startRect, deltaX, deltaY)\n }\n\n return this._resizeFixed(handle, startRect, deltaX)\n }\n\n private _resizeFree(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number, deltaY: number) {\n const minSize = 40\n const left = startRect.x\n const top = startRect.y\n const right = startRect.x + startRect.width\n const bottom = startRect.y + startRect.height\n\n if (handle === 'top-left') {\n const x = clamp(left + deltaX, this._imageRect.x, right - minSize)\n const y = clamp(top + deltaY, this._imageRect.y, bottom - minSize)\n return { x, y, width: right - x, height: bottom - y }\n }\n\n if (handle === 'top-right') {\n const newRight = clamp(right + deltaX, left + minSize, this._imageRect.x + this._imageRect.width)\n const y = clamp(top + deltaY, this._imageRect.y, bottom - minSize)\n return { x: left, y, width: newRight - left, height: bottom - y }\n }\n\n if (handle === 'bottom-right') {\n const newRight = clamp(right + deltaX, left + minSize, this._imageRect.x + this._imageRect.width)\n const newBottom = clamp(bottom + deltaY, top + minSize, this._imageRect.y + this._imageRect.height)\n return { x: left, y: top, width: newRight - left, height: newBottom - top }\n }\n\n const x = clamp(left + deltaX, this._imageRect.x, right - minSize)\n const newBottom = clamp(bottom + deltaY, top + minSize, this._imageRect.y + this._imageRect.height)\n return { x, y: top, width: right - x, height: newBottom - top }\n }\n\n private _resizeFixed(handle: Exclude<HandleType, 'move'>, startRect: CropRect, deltaX: number) {\n const aspect = parseAspectRatio(this.aspectRatio)\n const minWidth = 40\n const startRight = startRect.x + startRect.width\n const startBottom = startRect.y + startRect.height\n\n if (handle === 'top-left') {\n let width = clamp(startRect.width - deltaX, minWidth, startRight - this._imageRect.x)\n width = Math.min(width, (startBottom - this._imageRect.y) * aspect)\n const height = width / aspect\n return { x: startRight - width, y: startBottom - height, width, height }\n }\n\n if (handle === 'top-right') {\n let width = clamp(startRect.width + deltaX, minWidth, this._imageRect.x + this._imageRect.width - startRect.x)\n width = Math.min(width, (startBottom - this._imageRect.y) * aspect)\n const height = width / aspect\n return { x: startRect.x, y: startBottom - height, width, height }\n }\n\n if (handle === 'bottom-right') {\n let width = clamp(startRect.width + deltaX, minWidth, this._imageRect.x + this._imageRect.width - startRect.x)\n width = Math.min(width, (this._imageRect.y + this._imageRect.height - startRect.y) * aspect)\n const height = width / aspect\n return { x: startRect.x, y: startRect.y, width, height }\n }\n\n let width = clamp(startRect.width - deltaX, minWidth, startRight - this._imageRect.x)\n width = Math.min(width, (this._imageRect.y + this._imageRect.height - startRect.y) * aspect)\n const height = width / aspect\n return { x: startRight - width, y: startRect.y, width, height }\n }\n\n render() {\n const imageStyle = this._imageRect.width\n ? styleMap({\n left: `${this._imageRect.x}px`,\n top: `${this._imageRect.y}px`,\n width: `${this._imageRect.width}px`,\n height: `${this._imageRect.height}px`,\n })\n : ''\n\n const cropStyle = styleMap({\n left: `${this._cropRect.x}px`,\n top: `${this._cropRect.y}px`,\n width: `${this._cropRect.width}px`,\n height: `${this._cropRect.height}px`,\n aspectRatio: this.zoomType === 'fixed' ? this.aspectRatio : '',\n })\n\n return html`\n <div part=\"container\" class=\"img-box\">\n ${this._errorMessage\n ? html`<div part=\"error-message\" class=\"error-message\">${this._errorMessage}</div>`\n : this._imageUrl\n ? html`\n <img\n part=\"image\"\n class=\"image\"\n style=${imageStyle}\n src=${this._imageUrl}\n alt=\"\"\n @load=${this._handleImageLoad}\n />\n <div\n part=\"crop-box\"\n class=\"crop-tool-box\"\n style=${cropStyle}\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('move', event)}\n >\n <div\n part=\"handle top-left\"\n class=\"handle top-left\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('top-left', event)}\n ></div>\n <div\n part=\"handle top-right\"\n class=\"handle top-right\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('top-right', event)}\n ></div>\n <div\n part=\"handle bottom-right\"\n class=\"handle bottom-right\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('bottom-right', event)}\n ></div>\n <div\n part=\"handle bottom-left\"\n class=\"handle bottom-left\"\n @pointerdown=${(event: PointerEvent) => this._handlePointerDown('bottom-left', event)}\n ></div>\n </div>\n `\n : html`<div part=\"placeholder\" class=\"placeholder\">请选择图片</div>`}\n </div>\n `\n }\n}\n"],"names":["clamp","value","min","max","parseAspectRatio","left","right","part","QxsPhotoCropTool","LitElement","type","event","deltaX","deltaY","changed","scale","cropX","cropY","cropWidth","cropHeight","canvas","context","resolve","blob","containerWidth","containerHeight","width","height","x","y","aspect","availableWidth","availableHeight","rect","maxX","maxY","handle","startRect","top","bottom","newRight","newBottom","minWidth","startRight","startBottom","imageStyle","styleMap","cropStyle","html","css","__decorateClass","property","state","query","safeCustomElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";var t=require("lit"),e=require("lit/decorators.js"),o=require("../base/define.cjs"),s=require("./shared-styles.cjs"),i=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=(t,e,o,s)=>{for(var r,a=s>1?void 0:s?n(e,o):e,l=t.length-1;l>=0;l--)(r=t[l])&&(a=(s?r(e,o,a):r(a))||a);return s&&a&&i(e,o,a),a};const a=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],l=[{type:"single",label:"单选题"},{type:"multiple",label:"多选题"},{type:"blank_fill",label:"填空题"},{type:"text_fill",label:"问答题"},{type:"scale",label:"量表题"},{type:"sort",label:"排序题"},{type:"page_end",label:"分页符"}];exports.QxsSubjectAction=class extends t.LitElement{constructor(){super(...arguments),this["is-edit"]=!1,this["is-set"]=!1,this["is-key"]=!1,this["answer-check-type"]=1,this["show-other-option"]=!1,this["show-answer-setting"]=!1,this["show-key"]=!1,this["show-rich-text"]=!1,this["hide-add-rich-text"]=!1,this["show-delete-action"]=!0,this["show-save-action"]=!0,this["page-end"]=!1,this["show-move"]=!1,this["show-add"]=!0,this["show-jump"]=!1,this["exam-answer-relation-type"]=0,this._modalOpen=!1,this._currentCheckType=1,this._addMenuOpen=!1,this._handleDocumentClick=t=>{const e=t.composedPath(),o=this.shadowRoot?.querySelector(".add-menu-wrap");o&&!e.includes(o)&&(this._addMenuOpen=!1)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleDocumentClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleDocumentClick)}updated(t){t.has("answer-check-type")&&(this._currentCheckType=this["answer-check-type"])}_emit(t,e){this.dispatchEvent(new CustomEvent(t,{bubbles:!0,composed:!0,detail:e??null}))}get _answerText(){return a.find(t=>t.value===this["answer-check-type"])?.label??""}get _showAnswerSetting(){return this["show-other-option"]||this["show-answer-setting"]}get _showKey(){return this["show-other-option"]||this["show-key"]}_renderEditMode(){return t.html`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("lit"),o=require("lit/decorators.js"),b=require("../base/define.cjs"),d=require("./shared-styles.cjs");var u=Object.defineProperty,h=Object.getOwnPropertyDescriptor,s=(n,e,r,a)=>{for(var i=a>1?void 0:a?h(e,r):e,l=n.length-1,c;l>=0;l--)(c=n[l])&&(i=(a?c(e,r,i):c(i))||i);return a&&i&&u(e,r,i),i};const p=[{value:2,label:"必须全部都是支持选项,方可下一步"},{value:1,label:"无需判断是否是支持选项"},{value:3,label:"包含全部支持选项,即可下一步"}],x=[{type:"single",label:"单选题"},{type:"multiple",label:"多选题"},{type:"blank_fill",label:"填空题"},{type:"text_fill",label:"问答题"},{type:"scale",label:"量表题"},{type:"sort",label:"排序题"},{type:"page_end",label:"分页符"}];exports.QxsSubjectAction=class extends t.LitElement{constructor(){super(...arguments),this["is-edit"]=!1,this["is-set"]=!1,this["is-key"]=!1,this["answer-check-type"]=1,this["show-other-option"]=!1,this["show-answer-setting"]=!1,this["show-key"]=!1,this["show-rich-text"]=!1,this["hide-add-rich-text"]=!1,this["show-delete-action"]=!0,this["show-save-action"]=!0,this["page-end"]=!1,this["show-move"]=!1,this["show-add"]=!0,this["show-jump"]=!1,this["exam-answer-relation-type"]=0,this._modalOpen=!1,this._currentCheckType=1,this._addMenuOpen=!1,this._handleDocumentClick=e=>{const r=e.composedPath(),a=this.shadowRoot?.querySelector(".add-menu-wrap");a&&!r.includes(a)&&(this._addMenuOpen=!1)}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleDocumentClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleDocumentClick)}updated(e){e.has("answer-check-type")&&(this._currentCheckType=this["answer-check-type"])}_emit(e,r){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:r??null}))}get _answerText(){return p.find(e=>e.value===this["answer-check-type"])?.label??""}get _showAnswerSetting(){return this["show-other-option"]||this["show-answer-setting"]}get _showKey(){return this["show-other-option"]||this["show-key"]}_renderEditMode(){return t.html`
2
2
  <div class="left">
3
3
  <span class="inline-actions">
4
4
  ${this["show-add"]?t.html`
@@ -20,7 +20,7 @@
20
20
  `:""}
21
21
  ${this._showKey?t.html`
22
22
  <label class="checkbox-label">
23
- <input type="checkbox" .checked=${this["is-key"]} @change=${t=>this._emit("set-key",{value:t.target.checked})} />
23
+ <input type="checkbox" .checked=${this["is-key"]} @change=${e=>this._emit("set-key",{value:e.target.checked})} />
24
24
  核心题
25
25
  </label>
26
26
  `:""}
@@ -58,19 +58,19 @@
58
58
  <button class="text-btn text-btn--default btn-margin" @click=${()=>this._emit("move","down")}>下移</button>
59
59
  `:""}
60
60
  ${!this["is-set"]&&this["show-delete-action"]?t.html`<button class="text-btn text-btn--danger btn-margin" @click=${()=>this._emit("delete")}>删除</button>`:""}
61
- ${this["page-end"]||this["is-set"]?"":t.html`
61
+ ${!this["page-end"]&&!this["is-set"]?t.html`
62
62
  <button class="text-btn text-btn--default" @click=${()=>this._emit("edit")}>编辑</button>
63
- `}
63
+ `:""}
64
64
  </div>
65
65
  `}_renderModal(){return this._modalOpen?t.html`
66
66
  <div class="modal-backdrop" @click=${()=>{this._modalOpen=!1}}>
67
- <div class="modal" @click=${t=>t.stopPropagation()}>
67
+ <div class="modal" @click=${e=>e.stopPropagation()}>
68
68
  <div class="modal-header">
69
69
  <span class="modal-title">答题设置</span>
70
70
  <button class="modal-close" @click=${()=>{this._modalOpen=!1}}>&#x2715;</button>
71
71
  </div>
72
72
  <div class="modal-body">
73
- ${a.map(e=>t.html`
73
+ ${p.map(e=>t.html`
74
74
  <label class="radio-item">
75
75
  <input type="radio" name="answer-check-type" .value=${String(e.value)}
76
76
  .checked=${this._currentCheckType===e.value}
@@ -87,7 +87,7 @@
87
87
  </div>
88
88
  `:""}_renderAddMenu(){return this._addMenuOpen?t.html`
89
89
  <div class="add-menu">
90
- ${l.map(e=>t.html`
90
+ ${x.map(e=>t.html`
91
91
  <button class="add-item" @click=${()=>{this._addMenuOpen=!1,this._emit("add",e.type)}}>${e.label}</button>
92
92
  `)}
93
93
  </div>
@@ -97,8 +97,8 @@
97
97
  ${this["is-set"]?t.html`<div class="has-set">*此题设置了跳题逻辑</div>`:""}
98
98
  </div>
99
99
  ${this._renderModal()}
100
- `}},exports.QxsSubjectAction.styles=[s.subjectControlResetStyles,t.css`
101
- :host { display: block; font-family: inherit; font-size: 12px; }
100
+ `}};exports.QxsSubjectAction.styles=[d.subjectHostStyles,d.subjectControlResetStyles,t.css`
101
+ :host { font-size: 12px; }
102
102
 
103
103
  .action { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; flex-wrap: wrap; gap: 8px; }
104
104
  .action.active { background: transparent; }
@@ -107,50 +107,50 @@
107
107
 
108
108
  .action-icon {
109
109
  display: inline-flex; align-items: center; justify-content: center;
110
- width: 32px; height: 32px; font-size: 18px; color: #303133;
111
- cursor: pointer; border-radius: 6px; border: 1px solid #dcdfe6;
112
- background: #fff; transition: all 0.2s;
110
+ width: 32px; height: 32px; font-size: 18px; color: var(--qxs-subject-text-primary, #303133);
111
+ cursor: pointer; border-radius: 6px; border: 1px solid var(--qxs-subject-border, #dcdfe6);
112
+ background: var(--qxs-subject-fill-blank, #fff); transition: all 0.2s;
113
113
  }
114
- .action-icon:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }
115
- .action-icon--danger:hover { color: #f56c6c; border-color: #f56c6c; background: #fef0f0; }
116
- .action-icon:disabled { color: #c0c4cc; cursor: not-allowed; opacity: 0.6; }
114
+ .action-icon:hover { color: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-color-primary, #3D61E3); background: var(--qxs-subject-fill-soft-primary, #ecf5ff); }
115
+ .action-icon--danger:hover { color: var(--qxs-subject-color-danger, #f56c6c); border-color: var(--qxs-subject-color-danger, #f56c6c); background: var(--qxs-subject-fill-soft-danger, #fef0f0); }
116
+ .action-icon:disabled { color: var(--qxs-subject-text-disabled, #c0c4cc); cursor: not-allowed; opacity: 0.6; }
117
117
 
118
118
  .text-btn {
119
119
  display: inline-flex; align-items: center; gap: 4px;
120
120
  padding: 6px 12px; font-size: 12px; border-radius: 3px;
121
121
  cursor: pointer; border: 1px solid; transition: all 0.2s;
122
122
  }
123
- .text-btn--primary { background: #3D61E3; border-color: #3D61E3; color: #fff; }
124
- .text-btn--primary:hover { background: #2D4CB8; border-color: #2D4CB8; }
125
- .text-btn--default { background: #fff; border-color: #dcdfe6; color: #606266; }
126
- .text-btn--default:hover { color: #3D61E3; border-color: #a0cfff; }
127
- .text-btn--danger { background: #f56c6c; border-color: #f56c6c; color: #fff; }
128
- .text-btn--danger:hover { background: #e05252; border-color: #e05252; }
123
+ .text-btn--primary { background: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-color-primary, #3D61E3); color: var(--qxs-subject-fill-blank, #fff); }
124
+ .text-btn--primary:hover { background: var(--qxs-subject-color-primary-hover, #2D4CB8); border-color: var(--qxs-subject-color-primary-hover, #2D4CB8); }
125
+ .text-btn--default { background: var(--qxs-subject-fill-blank, #fff); border-color: var(--qxs-subject-border, #dcdfe6); color: var(--qxs-subject-text-regular, #606266); }
126
+ .text-btn--default:hover { color: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-fill-soft-primary-border-strong, #bfd1ff); }
127
+ .text-btn--danger { background: var(--qxs-subject-color-danger, #f56c6c); border-color: var(--qxs-subject-color-danger, #f56c6c); color: var(--qxs-subject-fill-blank, #fff); }
128
+ .text-btn--danger:hover { background: var(--qxs-subject-color-danger-hover, #e05252); border-color: var(--qxs-subject-color-danger-hover, #e05252); }
129
129
 
130
- .link-btn { background: none; border: none; color: #3D61E3; cursor: pointer; font-size: 12px; }
131
- .link-btn:hover { color: #2D4CB8; }
130
+ .link-btn { background: none; border: none; color: var(--qxs-subject-color-primary, #3D61E3); cursor: pointer; font-size: 12px; }
131
+ .link-btn:hover { color: var(--qxs-subject-color-primary-hover, #2D4CB8); }
132
132
 
133
- .checkbox-label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; color: #606266; user-select: none; font-size: 12px; }
133
+ .checkbox-label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; color: var(--qxs-subject-text-regular, #606266); user-select: none; font-size: 12px; }
134
134
  .checkbox-label.disabled { cursor: not-allowed; opacity: 0.6; }
135
135
  .has-set { display: flex; align-items: center; font-size: 12px; color: #bbb; }
136
- .answer-text { font-size: 11px; color: #909399; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
136
+ .answer-text { font-size: 11px; color: var(--qxs-subject-text-secondary, #909399); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
137
137
 
138
138
  .btn-margin { margin-right: 10px; }
139
139
 
140
140
  .modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.5); z-index: 2000; display: flex; align-items: center; justify-content: center; }
141
- .modal { background: #fff; border-radius: 4px; min-width: 360px; max-width: 460px; box-shadow: 0 12px 32px rgba(0,0,0,.1); }
142
- .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px 12px; border-bottom: 1px solid #e4e7ed; }
143
- .modal-title { font-size: 14px; font-weight: 600; color: #303133; }
144
- .modal-close { background: none; border: none; font-size: 16px; cursor: pointer; color: #909399; padding: 0; line-height: 1; }
145
- .modal-close:hover { color: #3D61E3; }
141
+ .modal { background: var(--qxs-subject-fill-blank, #fff); border-radius: 4px; min-width: 360px; max-width: 460px; box-shadow: 0 12px 32px rgba(0,0,0,.1); }
142
+ .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px 12px; border-bottom: 1px solid var(--qxs-subject-border-light, #e4e7ed); }
143
+ .modal-title { font-size: 14px; font-weight: 600; color: var(--qxs-subject-text-primary, #303133); }
144
+ .modal-close { background: none; border: none; font-size: 16px; cursor: pointer; color: var(--qxs-subject-text-secondary, #909399); padding: 0; line-height: 1; }
145
+ .modal-close:hover { color: var(--qxs-subject-color-primary, #3D61E3); }
146
146
  .modal-body { padding: 20px; }
147
- .modal-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid #e4e7ed; }
148
- .modal-footer button { padding: 6px 16px; font-size: 12px; border-radius: 3px; cursor: pointer; border: 1px solid #dcdfe6; background: #fff; color: #606266; }
149
- .modal-footer button:hover { color: #3D61E3; border-color: #a0cfff; }
150
- .modal-footer button.primary { background: #3D61E3; border-color: #3D61E3; color: #fff; }
151
- .modal-footer button.primary:hover { background: #2D4CB8; border-color: #2D4CB8; }
147
+ .modal-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid var(--qxs-subject-border-light, #e4e7ed); }
148
+ .modal-footer button { padding: 6px 16px; font-size: 12px; border-radius: 3px; cursor: pointer; border: 1px solid var(--qxs-subject-border, #dcdfe6); background: var(--qxs-subject-fill-blank, #fff); color: var(--qxs-subject-text-regular, #606266); }
149
+ .modal-footer button:hover { color: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-fill-soft-primary-border-strong, #bfd1ff); }
150
+ .modal-footer button.primary { background: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-color-primary, #3D61E3); color: var(--qxs-subject-fill-blank, #fff); }
151
+ .modal-footer button.primary:hover { background: var(--qxs-subject-color-primary-hover, #2D4CB8); border-color: var(--qxs-subject-color-primary-hover, #2D4CB8); }
152
152
 
153
- .radio-item { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; cursor: pointer; font-size: 13px; color: #606266; }
153
+ .radio-item { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; cursor: pointer; font-size: 13px; color: var(--qxs-subject-text-regular, #606266); }
154
154
  .radio-item:last-child { margin-bottom: 0; }
155
155
 
156
156
  .inline-actions { display: inline-flex; align-items: center; gap: 12px; flex-wrap: wrap; }
@@ -158,14 +158,14 @@
158
158
  .add-menu {
159
159
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 50;
160
160
  display: grid; grid-template-columns: repeat(2, minmax(84px, 1fr)); gap: 8px;
161
- min-width: 196px; padding: 10px; background: #fff; border: 1px solid #e4e7ed;
162
- border-radius: 6px; box-shadow: 0 8px 20px rgba(0,0,0,.12);
161
+ min-width: 196px; padding: 10px; background: var(--qxs-subject-fill-blank, #fff); border: 1px solid var(--qxs-subject-border-light, #e4e7ed);
162
+ border-radius: 6px; box-shadow: var(--qxs-subject-shadow-soft, 0 8px 20px rgba(0,0,0,.12));
163
163
  }
164
164
  .add-item {
165
165
  display: inline-flex; align-items: center; justify-content: center;
166
- min-height: 30px; padding: 0 10px; border: 1px solid #dcdfe6; border-radius: 4px;
167
- background: #fff; color: #606266; font-size: 12px; cursor: pointer; transition: all .2s;
166
+ min-height: 30px; padding: 0 10px; border: 1px solid var(--qxs-subject-border, #dcdfe6); border-radius: 4px;
167
+ background: var(--qxs-subject-fill-blank, #fff); color: var(--qxs-subject-text-regular, #606266); font-size: 12px; cursor: pointer; transition: all .2s;
168
168
  }
169
- .add-item:hover { color: #3D61E3; border-color: #3D61E3; background: #ecf5ff; }
170
- `],r([e.property({type:Boolean,attribute:"is-edit"})],exports.QxsSubjectAction.prototype,"is-edit",2),r([e.property({type:Boolean,attribute:"is-set"})],exports.QxsSubjectAction.prototype,"is-set",2),r([e.property({type:Boolean,attribute:"is-key"})],exports.QxsSubjectAction.prototype,"is-key",2),r([e.property({type:Number,attribute:"answer-check-type"})],exports.QxsSubjectAction.prototype,"answer-check-type",2),r([e.property({type:Boolean,attribute:"show-other-option"})],exports.QxsSubjectAction.prototype,"show-other-option",2),r([e.property({type:Boolean,attribute:"show-answer-setting"})],exports.QxsSubjectAction.prototype,"show-answer-setting",2),r([e.property({type:Boolean,attribute:"show-key"})],exports.QxsSubjectAction.prototype,"show-key",2),r([e.property({type:Boolean,attribute:"show-rich-text"})],exports.QxsSubjectAction.prototype,"show-rich-text",2),r([e.property({type:Boolean,attribute:"hide-add-rich-text"})],exports.QxsSubjectAction.prototype,"hide-add-rich-text",2),r([e.property({type:Boolean,attribute:"show-delete-action"})],exports.QxsSubjectAction.prototype,"show-delete-action",2),r([e.property({type:Boolean,attribute:"show-save-action"})],exports.QxsSubjectAction.prototype,"show-save-action",2),r([e.property({type:Boolean,attribute:"page-end"})],exports.QxsSubjectAction.prototype,"page-end",2),r([e.property({type:Boolean,attribute:"show-move"})],exports.QxsSubjectAction.prototype,"show-move",2),r([e.property({type:Boolean,attribute:"show-add"})],exports.QxsSubjectAction.prototype,"show-add",2),r([e.property({type:Boolean,attribute:"show-jump"})],exports.QxsSubjectAction.prototype,"show-jump",2),r([e.property({type:Number,attribute:"exam-answer-relation-type"})],exports.QxsSubjectAction.prototype,"exam-answer-relation-type",2),r([e.state()],exports.QxsSubjectAction.prototype,"_modalOpen",2),r([e.state()],exports.QxsSubjectAction.prototype,"_currentCheckType",2),r([e.state()],exports.QxsSubjectAction.prototype,"_addMenuOpen",2),exports.QxsSubjectAction=r([o.safeCustomElement("qxs-subject-action")],exports.QxsSubjectAction);
169
+ .add-item:hover { color: var(--qxs-subject-color-primary, #3D61E3); border-color: var(--qxs-subject-color-primary, #3D61E3); background: var(--qxs-subject-fill-soft-primary, #ecf5ff); }
170
+ `];s([o.property({type:Boolean,attribute:"is-edit"})],exports.QxsSubjectAction.prototype,"is-edit",2);s([o.property({type:Boolean,attribute:"is-set"})],exports.QxsSubjectAction.prototype,"is-set",2);s([o.property({type:Boolean,attribute:"is-key"})],exports.QxsSubjectAction.prototype,"is-key",2);s([o.property({type:Number,attribute:"answer-check-type"})],exports.QxsSubjectAction.prototype,"answer-check-type",2);s([o.property({type:Boolean,attribute:"show-other-option"})],exports.QxsSubjectAction.prototype,"show-other-option",2);s([o.property({type:Boolean,attribute:"show-answer-setting"})],exports.QxsSubjectAction.prototype,"show-answer-setting",2);s([o.property({type:Boolean,attribute:"show-key"})],exports.QxsSubjectAction.prototype,"show-key",2);s([o.property({type:Boolean,attribute:"show-rich-text"})],exports.QxsSubjectAction.prototype,"show-rich-text",2);s([o.property({type:Boolean,attribute:"hide-add-rich-text"})],exports.QxsSubjectAction.prototype,"hide-add-rich-text",2);s([o.property({type:Boolean,attribute:"show-delete-action"})],exports.QxsSubjectAction.prototype,"show-delete-action",2);s([o.property({type:Boolean,attribute:"show-save-action"})],exports.QxsSubjectAction.prototype,"show-save-action",2);s([o.property({type:Boolean,attribute:"page-end"})],exports.QxsSubjectAction.prototype,"page-end",2);s([o.property({type:Boolean,attribute:"show-move"})],exports.QxsSubjectAction.prototype,"show-move",2);s([o.property({type:Boolean,attribute:"show-add"})],exports.QxsSubjectAction.prototype,"show-add",2);s([o.property({type:Boolean,attribute:"show-jump"})],exports.QxsSubjectAction.prototype,"show-jump",2);s([o.property({type:Number,attribute:"exam-answer-relation-type"})],exports.QxsSubjectAction.prototype,"exam-answer-relation-type",2);s([o.state()],exports.QxsSubjectAction.prototype,"_modalOpen",2);s([o.state()],exports.QxsSubjectAction.prototype,"_currentCheckType",2);s([o.state()],exports.QxsSubjectAction.prototype,"_addMenuOpen",2);exports.QxsSubjectAction=s([b.safeCustomElement("qxs-subject-action")],exports.QxsSubjectAction);
171
171
  //# sourceMappingURL=action.cjs.map