@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
@@ -1,2 +1,9 @@
1
- import{marked as n}from"../node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs";import e from"../node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs";import{gfm as r}from"../node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs";const t="<p></p>",o="<p></p>",s=/^\s*<p>(?:\s|<br\s*\/?>|&nbsp;)*<\/p>/i,m=/<p>(?:\s|<br\s*\/?>|&nbsp;)*<\/p>\s*$/i,p=new e({headingStyle:"atx",codeBlockStyle:"fenced"});function i(e,r){const s=e??"",m=s.trim();if(!m)return t;if("markdown"===r){const e=function(n){const e=n.replace(/\r\n?/g,"\n").split("\n");let r=0;for(;r<e.length&&""===e[r]?.trim();)r+=1;return r}(s),r=function(n){const e=n.replace(/\r\n?/g,"\n").split("\n");let r=0;for(let n=e.length-1;n>=0&&""===e[n]?.trim();n-=1)r+=1;return r}(s),p=n.parse(m,{async:!1,gfm:!0})||t;return`${o.repeat(e)}${p}${o.repeat(r)}`}return s||t}function l(n,e){const r=n.trim();if(!r||r===t)return"";if("markdown"===e){const{html:e,leading:r,trailing:t}=function(n){let e=n,r=0,t=0;for(;s.test(e);)e=e.replace(s,""),r+=1;for(;m.test(e);)e=e.replace(m,""),t+=1;return{html:e,leading:r,trailing:t}}(n),o=e.trim(),i=o?function(n){return n.replace(/\n[ \t]{4,}\n(?=(?:\s*(?:[-*+]|\d+\.)\s))/g,"\n").replace(/^(\s*)[-*+]\s+/gm,"$1- ").replace(/^(\s*\d+\.)\s+/gm,"$1 ")}(p.turndown(o).trim()):"";return`${"\n".repeat(r)}${i}${"\n".repeat(t)}`}return n}p.use(r);export{t as EMPTY_EDITOR_HTML,i as transformIncomingContentByFormat,l as transformOutgoingContentByFormat};
1
+ import{marked as g}from"../node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs";import f from"../node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs";import{gfm as T}from"../node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs";const s="<p></p>",a="<p></p>",p=/^\s*<p>(?:\s|<br\s*\/?>|&nbsp;)*<\/p>/i,u=/<p>(?:\s|<br\s*\/?>|&nbsp;)*<\/p>\s*$/i,i="QXSEMPTYLISTITEMTOKEN",m=new f({headingStyle:"atx",codeBlockStyle:"fenced"});m.use(T);function E(t){return t.replace(/\n[ \t]{4,}\n(?=(?:\s*(?:[-*+]|\d+\.)\s))/g,`
2
+ `).replace(/^(\s*)[-*+]\s+/gm,"$1- ").replace(/^(\s*\d+\.)\s+/gm,"$1 ")}function P(t){if(!t.includes("<li"))return t;if(typeof DOMParser>"u")return t.replace(/<li([^>]*)>\s*<p([^>]*)>(?:\s|&nbsp;|<br\s*\/?>)*<\/p>\s*<\/li>/gi,`<li$1><p$2>${i}</p></li>`).replace(/<li([^>]*)>\s*<\/li>/gi,`<li$1>${i}</li>`);const e=new DOMParser().parseFromString(t,"text/html");return e.querySelectorAll("li").forEach(n=>{if(n.textContent?.trim()||n.querySelector("img,video,table,pre,blockquote,ul,ol,hr,input"))return;const r=n.querySelector(":scope > p");if(r){r.textContent=i;return}n.textContent=i}),e.body.innerHTML}function $(t){return t.replace(new RegExp(`(^[ \\t]*(?:- |\\d+\\. ))${i}$`,"gm"),"$1")}function L(t){const e=t.replace(/\r\n?/g,`
3
+ `).split(`
4
+ `);let n=0;for(;n<e.length&&e[n]?.trim()==="";)n+=1;return n}function M(t){const e=t.replace(/\r\n?/g,`
5
+ `).split(`
6
+ `);let n=0;for(let r=e.length-1;r>=0&&e[r]?.trim()==="";r-=1)n+=1;return n}function w(t){let e=t,n=0,r=0;for(;p.test(e);)e=e.replace(p,""),n+=1;for(;u.test(e);)e=e.replace(u,""),r+=1;return{html:e,leading:n,trailing:r}}function R(t,e){const n=t??"",r=n.trim();if(!r)return s;if(e==="markdown"){const l=L(n),c=M(n),o=g.parse(r,{async:!1,gfm:!0})||s;return`${a.repeat(l)}${o}${a.repeat(c)}`}return n||s}function _(t,e){const n=t.trim();if(!n||n===s)return"";if(e==="markdown"){const{html:r,leading:l,trailing:c}=w(t),o=r.trim(),d=o?$(E(m.turndown(P(o)).trim())):"";return`${`
7
+ `.repeat(l)}${d}${`
8
+ `.repeat(c)}`}return t}export{s as EMPTY_EDITOR_HTML,R as transformIncomingContentByFormat,_ as transformOutgoingContentByFormat};
2
9
  //# sourceMappingURL=content-format.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-format.mjs","sources":["../../../../packages/components/src/editor/content-format.ts"],"sourcesContent":["import { marked } from 'marked'\nimport TurndownService from 'turndown'\nimport { gfm } from 'turndown-plugin-gfm'\nimport type { QxsBlocksuiteEditorContentFormat } from './types'\n\nexport const EMPTY_EDITOR_HTML = '<p></p>'\nconst EMPTY_PARAGRAPH_HTML = '<p></p>'\nconst EMPTY_PARAGRAPH_PATTERN = /^\\s*<p>(?:\\s|<br\\s*\\/?>|&nbsp;)*<\\/p>/i\nconst EMPTY_PARAGRAPH_PATTERN_TRAILING = /<p>(?:\\s|<br\\s*\\/?>|&nbsp;)*<\\/p>\\s*$/i\n\nconst turndown = new TurndownService({\n headingStyle: 'atx',\n codeBlockStyle: 'fenced',\n})\n\nturndown.use(gfm)\n\nfunction normalizeMarkdownListFormatting(markdown: string): string {\n return markdown\n .replace(/\\n[ \\t]{4,}\\n(?=(?:\\s*(?:[-*+]|\\d+\\.)\\s))/g, '\\n')\n .replace(/^(\\s*)[-*+]\\s+/gm, '$1- ')\n .replace(/^(\\s*\\d+\\.)\\s+/gm, '$1 ')\n}\n\nfunction countLeadingBlankLines(value: string) {\n const lines = value.replace(/\\r\\n?/g, '\\n').split('\\n')\n let count = 0\n while (count < lines.length && lines[count]?.trim() === '') {\n count += 1\n }\n return count\n}\n\nfunction countTrailingBlankLines(value: string) {\n const lines = value.replace(/\\r\\n?/g, '\\n').split('\\n')\n let count = 0\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n if (lines[index]?.trim() !== '') {\n break\n }\n count += 1\n }\n return count\n}\n\nfunction stripBoundaryEmptyParagraphs(value: string) {\n let html = value\n let leading = 0\n let trailing = 0\n\n while (EMPTY_PARAGRAPH_PATTERN.test(html)) {\n html = html.replace(EMPTY_PARAGRAPH_PATTERN, '')\n leading += 1\n }\n\n while (EMPTY_PARAGRAPH_PATTERN_TRAILING.test(html)) {\n html = html.replace(EMPTY_PARAGRAPH_PATTERN_TRAILING, '')\n trailing += 1\n }\n\n return {\n html,\n leading,\n trailing,\n }\n}\n\nexport function transformIncomingContentByFormat(\n value: string | null | undefined,\n format: QxsBlocksuiteEditorContentFormat,\n): string {\n const source = value ?? ''\n const trimmed = source.trim()\n\n if (!trimmed) {\n return EMPTY_EDITOR_HTML\n }\n\n if (format === 'markdown') {\n const leadingBlankLines = countLeadingBlankLines(source)\n const trailingBlankLines = countTrailingBlankLines(source)\n const contentHtml = (marked.parse(trimmed, { async: false, gfm: true }) as string) || EMPTY_EDITOR_HTML\n return `${EMPTY_PARAGRAPH_HTML.repeat(leadingBlankLines)}${contentHtml}${EMPTY_PARAGRAPH_HTML.repeat(trailingBlankLines)}`\n }\n\n return source || EMPTY_EDITOR_HTML\n}\n\nexport function transformOutgoingContentByFormat(\n value: string,\n format: QxsBlocksuiteEditorContentFormat,\n): string {\n const trimmed = value.trim()\n\n if (!trimmed || trimmed === EMPTY_EDITOR_HTML) {\n return ''\n }\n\n if (format === 'markdown') {\n const { html, leading, trailing } = stripBoundaryEmptyParagraphs(value)\n const normalizedHtml = html.trim()\n const markdown = normalizedHtml\n ? normalizeMarkdownListFormatting(turndown.turndown(normalizedHtml).trim())\n : ''\n return `${'\\n'.repeat(leading)}${markdown}${'\\n'.repeat(trailing)}`\n }\n\n return value\n}\n"],"names":["EMPTY_EDITOR_HTML","EMPTY_PARAGRAPH_HTML","EMPTY_PARAGRAPH_PATTERN","EMPTY_PARAGRAPH_PATTERN_TRAILING","turndown","TurndownService","headingStyle","codeBlockStyle","transformIncomingContentByFormat","value","format","source","trimmed","trim","leadingBlankLines","lines","replace","split","count","length","countLeadingBlankLines","trailingBlankLines","index","countTrailingBlankLines","contentHtml","marked","parse","async","gfm","repeat","transformOutgoingContentByFormat","html","leading","trailing","test","stripBoundaryEmptyParagraphs","normalizedHtml","markdown","normalizeMarkdownListFormatting","use"],"mappings":"wUAKO,MAAMA,EAAoB,UAC3BC,EAAuB,UACvBC,EAA0B,yCAC1BC,EAAmC,yCAEnCC,EAAW,IAAIC,EAAgB,CACnCC,aAAc,MACdC,eAAgB,WAuDX,SAASC,EACdC,EACAC,GAEA,MAAMC,EAASF,GAAS,GAClBG,EAAUD,EAAOE,OAEvB,IAAKD,EACH,OAAOZ,EAGT,GAAe,aAAXU,EAAuB,CACzB,MAAMI,EAvDV,SAAgCL,GAC9B,MAAMM,EAAQN,EAAMO,QAAQ,SAAU,MAAMC,MAAM,MAClD,IAAIC,EAAQ,EACZ,KAAOA,EAAQH,EAAMI,QAAmC,KAAzBJ,EAAMG,IAAQL,QAC3CK,GAAS,EAEX,OAAOA,CACT,CAgD8BE,CAAuBT,GAC3CU,EA/CV,SAAiCZ,GAC/B,MAAMM,EAAQN,EAAMO,QAAQ,SAAU,MAAMC,MAAM,MAClD,IAAIC,EAAQ,EACZ,IAAA,IAASI,EAAQP,EAAMI,OAAS,EAAGG,GAAS,GACb,KAAzBP,EAAMO,IAAQT,OAD2BS,GAAS,EAItDJ,GAAS,EAEX,OAAOA,CACT,CAqC+BK,CAAwBZ,GAC7Ca,EAAeC,EAAOC,MAAMd,EAAS,CAAEe,OAAO,EAAOC,KAAK,KAAsB5B,EACtF,MAAO,GAAGC,EAAqB4B,OAAOf,KAAqBU,IAAcvB,EAAqB4B,OAAOR,IACvG,CAEA,OAAOV,GAAUX,CACnB,CAEO,SAAS8B,EACdrB,EACAC,GAEA,MAAME,EAAUH,EAAMI,OAEtB,IAAKD,GAAWA,IAAYZ,EAC1B,MAAO,GAGT,GAAe,aAAXU,EAAuB,CACzB,MAAMqB,KAAEA,EAAAC,QAAMA,EAAAC,SAASA,GAtD3B,SAAsCxB,GACpC,IAAIsB,EAAOtB,EACPuB,EAAU,EACVC,EAAW,EAEf,KAAO/B,EAAwBgC,KAAKH,IAClCA,EAAOA,EAAKf,QAAQd,EAAyB,IAC7C8B,GAAW,EAGb,KAAO7B,EAAiC+B,KAAKH,IAC3CA,EAAOA,EAAKf,QAAQb,EAAkC,IACtD8B,GAAY,EAGd,MAAO,CACLF,OACAC,UACAC,WAEJ,CAkCwCE,CAA6B1B,GAC3D2B,EAAiBL,EAAKlB,OACtBwB,EAAWD,EApFrB,SAAyCC,GACvC,OAAOA,EACJrB,QAAQ,6CAA8C,MACtDA,QAAQ,mBAAoB,QAC5BA,QAAQ,mBAAoB,MACjC,CAgFQsB,CAAgClC,EAASA,SAASgC,GAAgBvB,QAClE,GACJ,MAAO,GAAG,KAAKgB,OAAOG,KAAWK,IAAW,KAAKR,OAAOI,IAC1D,CAEA,OAAOxB,CACT,CA7FAL,EAASmC,IAAIX"}
1
+ {"version":3,"file":"content-format.mjs","sources":["../../../../packages/components/src/editor/content-format.ts"],"sourcesContent":["import { marked } from 'marked'\nimport TurndownService from 'turndown'\nimport { gfm } from 'turndown-plugin-gfm'\nimport type { QxsBlocksuiteEditorContentFormat } from './types'\n\nexport const EMPTY_EDITOR_HTML = '<p></p>'\nconst EMPTY_PARAGRAPH_HTML = '<p></p>'\nconst EMPTY_PARAGRAPH_PATTERN = /^\\s*<p>(?:\\s|<br\\s*\\/?>|&nbsp;)*<\\/p>/i\nconst EMPTY_PARAGRAPH_PATTERN_TRAILING = /<p>(?:\\s|<br\\s*\\/?>|&nbsp;)*<\\/p>\\s*$/i\nconst EMPTY_LIST_ITEM_PLACEHOLDER = 'QXSEMPTYLISTITEMTOKEN'\n\nconst turndown = new TurndownService({\n headingStyle: 'atx',\n codeBlockStyle: 'fenced',\n})\n\nturndown.use(gfm)\n\nfunction normalizeMarkdownListFormatting(markdown: string): string {\n return markdown\n .replace(/\\n[ \\t]{4,}\\n(?=(?:\\s*(?:[-*+]|\\d+\\.)\\s))/g, '\\n')\n .replace(/^(\\s*)[-*+]\\s+/gm, '$1- ')\n .replace(/^(\\s*\\d+\\.)\\s+/gm, '$1 ')\n}\n\nfunction injectEmptyListItemPlaceholders(html: string) {\n if (!html.includes('<li')) {\n return html\n }\n\n if (typeof DOMParser === 'undefined') {\n return html\n .replace(\n /<li([^>]*)>\\s*<p([^>]*)>(?:\\s|&nbsp;|<br\\s*\\/?>)*<\\/p>\\s*<\\/li>/gi,\n `<li$1><p$2>${EMPTY_LIST_ITEM_PLACEHOLDER}</p></li>`,\n )\n .replace(\n /<li([^>]*)>\\s*<\\/li>/gi,\n `<li$1>${EMPTY_LIST_ITEM_PLACEHOLDER}</li>`,\n )\n }\n\n const document = new DOMParser().parseFromString(html, 'text/html')\n document.querySelectorAll('li').forEach((item) => {\n if (\n item.textContent?.trim()\n || item.querySelector('img,video,table,pre,blockquote,ul,ol,hr,input')\n ) {\n return\n }\n\n const paragraph = item.querySelector(':scope > p')\n if (paragraph) {\n paragraph.textContent = EMPTY_LIST_ITEM_PLACEHOLDER\n return\n }\n\n item.textContent = EMPTY_LIST_ITEM_PLACEHOLDER\n })\n\n return document.body.innerHTML\n}\n\nfunction restoreEmptyListItemsInMarkdown(markdown: string) {\n return markdown.replace(\n new RegExp(`(^[ \\\\t]*(?:- |\\\\d+\\\\. ))${EMPTY_LIST_ITEM_PLACEHOLDER}$`, 'gm'),\n '$1',\n )\n}\n\nfunction countLeadingBlankLines(value: string) {\n const lines = value.replace(/\\r\\n?/g, '\\n').split('\\n')\n let count = 0\n while (count < lines.length && lines[count]?.trim() === '') {\n count += 1\n }\n return count\n}\n\nfunction countTrailingBlankLines(value: string) {\n const lines = value.replace(/\\r\\n?/g, '\\n').split('\\n')\n let count = 0\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n if (lines[index]?.trim() !== '') {\n break\n }\n count += 1\n }\n return count\n}\n\nfunction stripBoundaryEmptyParagraphs(value: string) {\n let html = value\n let leading = 0\n let trailing = 0\n\n while (EMPTY_PARAGRAPH_PATTERN.test(html)) {\n html = html.replace(EMPTY_PARAGRAPH_PATTERN, '')\n leading += 1\n }\n\n while (EMPTY_PARAGRAPH_PATTERN_TRAILING.test(html)) {\n html = html.replace(EMPTY_PARAGRAPH_PATTERN_TRAILING, '')\n trailing += 1\n }\n\n return {\n html,\n leading,\n trailing,\n }\n}\n\nexport function transformIncomingContentByFormat(\n value: string | null | undefined,\n format: QxsBlocksuiteEditorContentFormat,\n): string {\n const source = value ?? ''\n const trimmed = source.trim()\n\n if (!trimmed) {\n return EMPTY_EDITOR_HTML\n }\n\n if (format === 'markdown') {\n const leadingBlankLines = countLeadingBlankLines(source)\n const trailingBlankLines = countTrailingBlankLines(source)\n const contentHtml = (marked.parse(trimmed, { async: false, gfm: true }) as string) || EMPTY_EDITOR_HTML\n return `${EMPTY_PARAGRAPH_HTML.repeat(leadingBlankLines)}${contentHtml}${EMPTY_PARAGRAPH_HTML.repeat(trailingBlankLines)}`\n }\n\n return source || EMPTY_EDITOR_HTML\n}\n\nexport function transformOutgoingContentByFormat(\n value: string,\n format: QxsBlocksuiteEditorContentFormat,\n): string {\n const trimmed = value.trim()\n\n if (!trimmed || trimmed === EMPTY_EDITOR_HTML) {\n return ''\n }\n\n if (format === 'markdown') {\n const { html, leading, trailing } = stripBoundaryEmptyParagraphs(value)\n const normalizedHtml = html.trim()\n const markdown = normalizedHtml\n ? restoreEmptyListItemsInMarkdown(\n normalizeMarkdownListFormatting(\n turndown.turndown(injectEmptyListItemPlaceholders(normalizedHtml)).trim(),\n ),\n )\n : ''\n return `${'\\n'.repeat(leading)}${markdown}${'\\n'.repeat(trailing)}`\n }\n\n return value\n}\n"],"names":["EMPTY_EDITOR_HTML","EMPTY_PARAGRAPH_HTML","EMPTY_PARAGRAPH_PATTERN","EMPTY_PARAGRAPH_PATTERN_TRAILING","EMPTY_LIST_ITEM_PLACEHOLDER","turndown","TurndownService","gfm","normalizeMarkdownListFormatting","markdown","injectEmptyListItemPlaceholders","html","document","item","paragraph","restoreEmptyListItemsInMarkdown","countLeadingBlankLines","value","lines","count","countTrailingBlankLines","index","stripBoundaryEmptyParagraphs","leading","trailing","transformIncomingContentByFormat","format","source","trimmed","leadingBlankLines","trailingBlankLines","contentHtml","marked","transformOutgoingContentByFormat","normalizedHtml"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{QxsBlocksuiteEditor as o}from"./blocksuite-editor.mjs";import{safeCustomElement as e}from"../base/define.mjs";function i(){}e("qxs-blocksuite-editor")(o);export{o as QxsBlocksuiteEditor,i as register};
1
+ import{QxsBlocksuiteEditor as o}from"./blocksuite-editor.mjs";import{safeCustomElement as t}from"../base/define.mjs";t("qxs-blocksuite-editor")(o);function i(){}export{o as QxsBlocksuiteEditor,i as register};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../packages/components/src/editor/index.ts"],"sourcesContent":["import { QxsBlocksuiteEditor } from './blocksuite-editor'\nimport { safeCustomElement } from '../base/define'\n\nexport { QxsBlocksuiteEditor }\nexport * from './types'\n\nsafeCustomElement('qxs-blocksuite-editor')(QxsBlocksuiteEditor)\n\nexport function register() {}\n"],"names":["register","safeCustomElement","QxsBlocksuiteEditor"],"mappings":"qHAQO,SAASA,IAAY,CAF5BC,EAAkB,wBAAlBA,CAA2CC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../packages/components/src/editor/index.ts"],"sourcesContent":["import { QxsBlocksuiteEditor } from './blocksuite-editor'\nimport { safeCustomElement } from '../base/define'\n\nexport { QxsBlocksuiteEditor }\nexport * from './types'\n\nsafeCustomElement('qxs-blocksuite-editor')(QxsBlocksuiteEditor)\n\nexport function register() {}\n"],"names":["safeCustomElement","QxsBlocksuiteEditor","register"],"mappings":"qHAMAA,EAAkB,uBAAuB,EAAEC,CAAmB,EAEvD,SAASC,GAAW,CAAC"}
@@ -1,2 +1,2 @@
1
- const t=["format","heading","align","code","link","image","list","blockquote","table"],e=[...t],i=["format","link","image","list","blockquote"],r=e.filter(t=>"table"!==t),l=new Set(t);function a(t){if(Array.isArray(t))return t.filter(t=>l.has(t));if("string"!=typeof t)return[...e];return t.split(/[\s,|]+/).map(t=>t.trim()).filter(Boolean).filter(t=>l.has(t))}export{e as DEFAULT_EDITOR_TOOLBAR,t as EDITOR_TOOLBAR_ITEMS,i as SIMPLE_EDITOR_TOOLBAR,r as SUB_TEXT_EDITOR_TOOLBAR,a as parseEditorToolbarItems};
1
+ const e=["format","heading","align","list","blockquote","code","link","table","image"],i=[...e],s=["format","link","image","list","blockquote"],T=i.filter(t=>t!=="table"),r=new Set(e);function O(t){return Array.isArray(t)?t.filter(o=>r.has(o)):typeof t!="string"?[...i]:t.split(/[\s,|]+/).map(o=>o.trim()).filter(Boolean).filter(o=>r.has(o))}export{i as DEFAULT_EDITOR_TOOLBAR,e as EDITOR_TOOLBAR_ITEMS,s as SIMPLE_EDITOR_TOOLBAR,T as SUB_TEXT_EDITOR_TOOLBAR,O as parseEditorToolbarItems};
2
2
  //# sourceMappingURL=toolbar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.mjs","sources":["../../../../packages/components/src/editor/toolbar.ts"],"sourcesContent":["export const EDITOR_TOOLBAR_ITEMS = [\n 'format',\n 'heading',\n 'align',\n 'code',\n 'link',\n 'image',\n 'list',\n 'blockquote',\n 'table',\n] as const\n\nexport type EditorToolbarItem = (typeof EDITOR_TOOLBAR_ITEMS)[number]\n\nexport const DEFAULT_EDITOR_TOOLBAR: EditorToolbarItem[] = [...EDITOR_TOOLBAR_ITEMS]\n\nexport const SIMPLE_EDITOR_TOOLBAR: EditorToolbarItem[] = [\n 'format',\n 'link',\n 'image',\n 'list',\n 'blockquote',\n]\n\nexport const SUB_TEXT_EDITOR_TOOLBAR: EditorToolbarItem[] = DEFAULT_EDITOR_TOOLBAR.filter(\n item => item !== 'table',\n)\n\nconst EDITOR_TOOLBAR_ITEM_SET = new Set<string>(EDITOR_TOOLBAR_ITEMS)\n\nexport function parseEditorToolbarItems(\n value: string | readonly string[] | null | undefined,\n): EditorToolbarItem[] {\n if (Array.isArray(value)) {\n return value.filter((item): item is EditorToolbarItem => EDITOR_TOOLBAR_ITEM_SET.has(item))\n }\n\n if (typeof value !== 'string') {\n return [...DEFAULT_EDITOR_TOOLBAR]\n }\n\n const tokens = value\n .split(/[\\s,|]+/)\n .map(token => token.trim())\n .filter(Boolean)\n\n return tokens.filter((item): item is EditorToolbarItem => EDITOR_TOOLBAR_ITEM_SET.has(item))\n}\n"],"names":["EDITOR_TOOLBAR_ITEMS","DEFAULT_EDITOR_TOOLBAR","SIMPLE_EDITOR_TOOLBAR","SUB_TEXT_EDITOR_TOOLBAR","filter","item","EDITOR_TOOLBAR_ITEM_SET","Set","parseEditorToolbarItems","value","Array","isArray","has","split","map","token","trim","Boolean"],"mappings":"AAAO,MAAMA,EAAuB,CAClC,SACA,UACA,QACA,OACA,OACA,QACA,OACA,aACA,SAKWC,EAA8C,IAAID,GAElDE,EAA6C,CACxD,SACA,OACA,QACA,OACA,cAGWC,EAA+CF,EAAuBG,UAChE,UAATC,GAGJC,EAA0B,IAAIC,IAAYP,GAEzC,SAASQ,EACdC,GAEA,GAAIC,MAAMC,QAAQF,GAChB,OAAOA,EAAML,OAAQC,GAAoCC,EAAwBM,IAAIP,IAGvF,GAAqB,iBAAVI,EACT,MAAO,IAAIR,GAQb,OALeQ,EACZI,MAAM,WACNC,IAAIC,GAASA,EAAMC,QACnBZ,OAAOa,SAEIb,OAAQC,GAAoCC,EAAwBM,IAAIP,GACxF"}
1
+ {"version":3,"file":"toolbar.mjs","sources":["../../../../packages/components/src/editor/toolbar.ts"],"sourcesContent":["export const EDITOR_TOOLBAR_ITEMS = [\n 'format',\n 'heading',\n 'align',\n 'list',\n 'blockquote',\n 'code',\n 'link',\n 'table',\n 'image',\n] as const\n\nexport type EditorToolbarItem = (typeof EDITOR_TOOLBAR_ITEMS)[number]\n\nexport const DEFAULT_EDITOR_TOOLBAR: EditorToolbarItem[] = [...EDITOR_TOOLBAR_ITEMS]\n\nexport const SIMPLE_EDITOR_TOOLBAR: EditorToolbarItem[] = [\n 'format',\n 'link',\n 'image',\n 'list',\n 'blockquote',\n]\n\nexport const SUB_TEXT_EDITOR_TOOLBAR: EditorToolbarItem[] = DEFAULT_EDITOR_TOOLBAR.filter(\n item => item !== 'table',\n)\n\nconst EDITOR_TOOLBAR_ITEM_SET = new Set<string>(EDITOR_TOOLBAR_ITEMS)\n\nexport function parseEditorToolbarItems(\n value: string | readonly string[] | null | undefined,\n): EditorToolbarItem[] {\n if (Array.isArray(value)) {\n return value.filter((item): item is EditorToolbarItem => EDITOR_TOOLBAR_ITEM_SET.has(item))\n }\n\n if (typeof value !== 'string') {\n return [...DEFAULT_EDITOR_TOOLBAR]\n }\n\n const tokens = value\n .split(/[\\s,|]+/)\n .map(token => token.trim())\n .filter(Boolean)\n\n return tokens.filter((item): item is EditorToolbarItem => EDITOR_TOOLBAR_ITEM_SET.has(item))\n}\n"],"names":["EDITOR_TOOLBAR_ITEMS","DEFAULT_EDITOR_TOOLBAR","SIMPLE_EDITOR_TOOLBAR","SUB_TEXT_EDITOR_TOOLBAR","item","EDITOR_TOOLBAR_ITEM_SET","parseEditorToolbarItems","value","token"],"mappings":"AAAO,MAAMA,EAAuB,CAClC,SACA,UACA,QACA,OACA,aACA,OACA,OACA,QACA,OACF,EAIaC,EAA8C,CAAC,GAAGD,CAAoB,EAEtEE,EAA6C,CACxD,SACA,OACA,QACA,OACA,YACF,EAEaC,EAA+CF,EAAuB,UACzEG,IAAS,OACnB,EAEMC,EAA0B,IAAI,IAAYL,CAAoB,EAE7D,SAASM,EACdC,EACqB,CACrB,OAAI,MAAM,QAAQA,CAAK,EACdA,EAAM,OAAQH,GAAoCC,EAAwB,IAAID,CAAI,CAAC,EAGxF,OAAOG,GAAU,SACZ,CAAC,GAAGN,CAAsB,EAGpBM,EACZ,MAAM,SAAS,EACf,IAAIC,GAASA,EAAM,KAAA,CAAM,EACzB,OAAO,OAAO,EAEH,OAAQJ,GAAoCC,EAAwB,IAAID,CAAI,CAAC,CAC7F"}
@@ -1,2 +1,2 @@
1
- export{QxsDataChart}from"./data-chart.mjs";
1
+ import{QxsDataChart as t}from"./data-chart.mjs";export{t as QxsDataChart};
2
2
  //# sourceMappingURL=entry-data-chart.mjs.map
@@ -1,2 +1,2 @@
1
- export{register}from"./editor/index.mjs";export{QxsBlocksuiteEditor}from"./editor/blocksuite-editor.mjs";
1
+ import{register as e}from"./editor/index.mjs";import{QxsBlocksuiteEditor as i}from"./editor/blocksuite-editor.mjs";export{i as QxsBlocksuiteEditor,e as register};
2
2
  //# sourceMappingURL=entry-editor.mjs.map
@@ -1,2 +1,2 @@
1
- export{QxsFileUpload}from"./file-upload.mjs";
1
+ import{QxsFileUpload as l}from"./file-upload.mjs";export{l as QxsFileUpload};
2
2
  //# sourceMappingURL=entry-file-upload.mjs.map
@@ -1,2 +1,2 @@
1
- export{QxsFixedActionBar}from"./fixed-action-bar.mjs";
1
+ import{QxsFixedActionBar as x}from"./fixed-action-bar.mjs";export{x as QxsFixedActionBar};
2
2
  //# sourceMappingURL=entry-fixed-action-bar.mjs.map
package/es/entry-icon.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export{QxsIcon}from"./icon.mjs";
1
+ import{QxsIcon as x}from"./icon.mjs";export{x as QxsIcon};
2
2
  //# sourceMappingURL=entry-icon.mjs.map
@@ -1,2 +1,2 @@
1
- export{QxsImageUpload}from"./image-upload.mjs";
1
+ import{QxsImageUpload as e}from"./image-upload.mjs";export{e as QxsImageUpload};
2
2
  //# sourceMappingURL=entry-image-upload.mjs.map
@@ -1,2 +1,2 @@
1
- export{QxsPhotoCropTool}from"./photo-crop-tool.mjs";
1
+ import{QxsPhotoCropTool as p}from"./photo-crop-tool.mjs";export{p as QxsPhotoCropTool};
2
2
  //# sourceMappingURL=entry-photo-crop-tool.mjs.map
@@ -1,2 +1,2 @@
1
- export{QxsSubjectAction}from"./subject/action.mjs";export{QxsBlankFill}from"./subject/blank-fill.mjs";export{createSubjectDraft}from"./subject/draft.mjs";export{QxsSubjectLayout}from"./subject/layout.mjs";export{QxsPageEnd}from"./subject/page-end.mjs";export{getPaginationMeta,insertPageBreak,rebuildPageBreaksFromPageIndex,removePageBreak,serializeSubjectsWithPageIndex}from"./subject/pagination.mjs";export{collectSubjectElements,serializeSubjectElements,validateSubjectElements}from"./subject/runtime.mjs";export{QxsScale}from"./subject/scale.mjs";export{QxsSubjectSingle}from"./subject/single.mjs";export{moveSubjectItem,reorderSubjects}from"./subject/sort-controller.mjs";export{QxsSubjectSortable}from"./subject/sortable.mjs";export{QxsTextFill}from"./subject/text-fill.mjs";
1
+ import{QxsSubjectAction as r}from"./subject/action.mjs";import{QxsBlankFill as x}from"./subject/blank-fill.mjs";import{createSubjectDraft as m}from"./subject/draft.mjs";import{QxsSubjectLayout as s}from"./subject/layout.mjs";import{QxsPageEnd as i}from"./subject/page-end.mjs";import{getPaginationMeta as b,insertPageBreak as f,rebuildPageBreaksFromPageIndex as u,removePageBreak as n,serializeSubjectsWithPageIndex as p}from"./subject/pagination.mjs";import{collectSubjectElements as g,serializeSubjectElements as Q,validateSubjectElements as P}from"./subject/runtime.mjs";import{QxsScale as k}from"./subject/scale.mjs";import{QxsSubjectSingle as E}from"./subject/single.mjs";import{moveSubjectItem as F,reorderSubjects as I}from"./subject/sort-controller.mjs";import{QxsSubjectSortable as h}from"./subject/sortable.mjs";import{QxsTextFill as A}from"./subject/text-fill.mjs";export{x as QxsBlankFill,i as QxsPageEnd,k as QxsScale,r as QxsSubjectAction,s as QxsSubjectLayout,E as QxsSubjectSingle,h as QxsSubjectSortable,A as QxsTextFill,g as collectSubjectElements,m as createSubjectDraft,b as getPaginationMeta,f as insertPageBreak,F as moveSubjectItem,u as rebuildPageBreaksFromPageIndex,n as removePageBreak,I as reorderSubjects,Q as serializeSubjectElements,p as serializeSubjectsWithPageIndex,P as validateSubjectElements};
2
2
  //# sourceMappingURL=entry-subject.mjs.map
@@ -1,8 +1,9 @@
1
- import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property as a,state as r,query as n}from"lit/decorators.js";import{classMap as o}from"lit/directives/class-map.js";import{repeat as l}from"lit/directives/repeat.js";import{safeCustomElement as p}from"./base/define.mjs";var d=Object.defineProperty,h=Object.getOwnPropertyDescriptor,c=(e,t,s,i)=>{for(var a,r=i>1?void 0:i?h(t,s):t,n=e.length-1;n>=0;n--)(a=e[n])&&(r=(i?a(t,s,r):a(r))||r);return i&&r&&d(t,s,r),r};function g(e){return e.trim().replace(/^\./,"").split("/").pop()?.toLowerCase()??""}let u=class extends t{constructor(){super(...arguments),this.action="",this.name="file",this.size=20,this.max=3,this.accept="zip,rar",this.files=[],this.notip=!1,this.ext=[],this._internalFiles=[],this._isDragging=!1,this._message="",this._messageType="info",this._pendingUploadCount=0}connectedCallback(){super.connectedCallback(),this._syncFilesFromProps()}updated(e){e.has("files")&&this._syncFilesFromProps()}get _exts(){return(this.ext.length?this.ext:this.accept.split(",")).map(g).filter(Boolean)}_syncFilesFromProps(){this._internalFiles=[...this.files]}_setMessage(e,t){this._messageType=e,this._message=t}_clearMessage(){this._message="",this._messageType="info"}_validateFile(e){const t=g(e.name.split(".").pop()??""),s=this._exts.includes(t),i=e.size/1024/1024<this.size;return s?i?!(this._internalFiles.length+this._pendingUploadCount>=this.max)||(this._setMessage("warning","文件上传超过限制"),!1):(this._setMessage("error",`上传文件大小不能超过 ${this.size}MB!`),!1):(this._setMessage("error",`上传文件只支持 ${this._exts.join(" / ")} 格式!`),!1)}_dispatchUploadSuccess(e){this.dispatchEvent(new CustomEvent("upload-success",{detail:e,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("on-success",{detail:e,bubbles:!0,composed:!0})),"function"==typeof this.onSuccess&&this.onSuccess(e.response,e.file,e.files)}_dispatchFilesChange(){this.dispatchEvent(new CustomEvent("files-change",{detail:{items:this._internalFiles.slice()},bubbles:!0,composed:!0}))}_handleSelectedFiles(e){this._clearMessage(),e.forEach(e=>{this._validateFile(e)&&this._uploadFile(e)})}_handleDrop(e){e.preventDefault(),this._isDragging=!1;const t=e.dataTransfer?.files;t&&this._handleSelectedFiles(Array.from(t))}_handleDragOver(e){e.preventDefault(),this._isDragging=!0}_handleDragLeave(){this._isDragging=!1}_handleInputChange(e){const t=e.target,s=t.files;s&&(this._handleSelectedFiles(Array.from(s)),t.value="")}_uploadFile(e){if(!this.action)return void this._setMessage("warning","请先配置上传地址 action");const t=new FormData;t.append(this.name,e),this.data&&Object.entries(this.data).forEach(e=>{let[s,i]=e;t.append(s,i)});const s=new XMLHttpRequest;s.open("POST",this.action),this._pendingUploadCount+=1,this.headers&&Object.entries(this.headers).forEach(e=>{let[t,i]=e;s.setRequestHeader(t,i)}),s.onload=()=>{if(this._pendingUploadCount=Math.max(0,this._pendingUploadCount-1),s.status>=200&&s.status<300){const t=function(e){try{return JSON.parse(e)}catch{return e}}(s.responseText),i={name:e.name,file:e};this._internalFiles=[...this._internalFiles,i],this._setMessage("info",`${e.name} 上传成功`),this._dispatchFilesChange(),this._dispatchUploadSuccess({response:t,file:e,files:this._internalFiles.map(e=>e.file).filter(Boolean),items:this._internalFiles.slice()})}else this._setMessage("error","上传失败")},s.onerror=()=>{this._pendingUploadCount=Math.max(0,this._pendingUploadCount-1),this._setMessage("error","上传失败")},s.send(t)}_handleRemove(e){this._internalFiles=this._internalFiles.filter((t,s)=>s!==e),this._dispatchFilesChange()}render(){const e={control:!0,"is-dragging":this._isDragging};return i`
1
+ import{css as g,LitElement as f,nothing as c,html as l}from"lit";import{property as n,state as h,query as m}from"lit/decorators.js";import{classMap as _}from"lit/directives/class-map.js";import{repeat as x}from"lit/directives/repeat.js";import{styleMap as y}from"lit/directives/style-map.js";import{safeCustomElement as b}from"./base/define.mjs";var v=Object.defineProperty,F=Object.getOwnPropertyDescriptor,a=(e,t,s,o)=>{for(var r=o>1?void 0:o?F(t,s):t,p=e.length-1,d;p>=0;p--)(d=e[p])&&(r=(o?d(t,s,r):d(r))||r);return o&&r&&v(t,s,r),r};function u(e){return e.trim().replace(/^\./,"").split("/").pop()?.toLowerCase()??""}function w(e){try{return JSON.parse(e)}catch{return e}}let i=class extends f{constructor(){super(...arguments),this.action="",this.name="file",this.size=20,this.width=160,this.height=90,this.max=3,this.accept="zip,rar",this.files=[],this.notip=!1,this.ext=[],this._internalFiles=[],this._isDragging=!1,this._message="",this._messageType="info",this._pendingUploadCount=0}connectedCallback(){super.connectedCallback(),this._syncFilesFromProps()}updated(e){e.has("files")&&this._syncFilesFromProps()}get _exts(){return(this.ext.length?this.ext:this.accept.split(",")).map(u).filter(Boolean)}_syncFilesFromProps(){this._internalFiles=[...this.files]}_setMessage(e,t){this._messageType=e,this._message=t}_clearMessage(){this._message="",this._messageType="info"}_validateFile(e){const t=u(e.name.split(".").pop()??""),s=this._exts.includes(t),o=e.size/1024/1024<this.size;return s?o?this._internalFiles.length+this._pendingUploadCount>=this.max?(this._setMessage("warning","文件上传超过限制"),!1):!0:(this._setMessage("error",`上传文件大小不能超过 ${this.size}MB!`),!1):(this._setMessage("error",`上传文件只支持 ${this._exts.join(" / ")} 格式!`),!1)}_dispatchUploadSuccess(e){this.dispatchEvent(new CustomEvent("upload-success",{detail:e,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("on-success",{detail:e,bubbles:!0,composed:!0})),typeof this.onSuccess=="function"&&this.onSuccess(e.response,e.file,e.files)}_dispatchFilesChange(){this.dispatchEvent(new CustomEvent("files-change",{detail:{items:this._internalFiles.slice()},bubbles:!0,composed:!0}))}_handleSelectedFiles(e){this._clearMessage(),e.forEach(t=>{this._validateFile(t)&&this._uploadFile(t)})}_handleDrop(e){e.preventDefault(),this._isDragging=!1;const t=e.dataTransfer?.files;t&&this._handleSelectedFiles(Array.from(t))}_handleDragOver(e){e.preventDefault(),this._isDragging=!0}_handleDragLeave(){this._isDragging=!1}_handleInputChange(e){const t=e.target,s=t.files;s&&(this._handleSelectedFiles(Array.from(s)),t.value="")}_uploadFile(e){if(!this.action){this._setMessage("warning","请先配置上传地址 action");return}const t=new FormData;t.append(this.name,e),this.data&&Object.entries(this.data).forEach(([o,r])=>{t.append(o,r)});const s=new XMLHttpRequest;s.open("POST",this.action),this._pendingUploadCount+=1,this.headers&&Object.entries(this.headers).forEach(([o,r])=>{s.setRequestHeader(o,r)}),s.onload=()=>{if(this._pendingUploadCount=Math.max(0,this._pendingUploadCount-1),s.status>=200&&s.status<300){const o=w(s.responseText),r={name:e.name,file:e};this._internalFiles=[...this._internalFiles,r],this._setMessage("info",`${e.name} 上传成功`),this._dispatchFilesChange(),this._dispatchUploadSuccess({response:o,file:e,files:this._internalFiles.map(p=>p.file).filter(Boolean),items:this._internalFiles.slice()})}else this._setMessage("error","上传失败")},s.onerror=()=>{this._pendingUploadCount=Math.max(0,this._pendingUploadCount-1),this._setMessage("error","上传失败")},s.send(t)}_handleRemove(e){this._internalFiles=this._internalFiles.filter((t,s)=>s!==e),this._dispatchFilesChange()}render(){const e={control:!0,"is-dragging":this._isDragging},t={"--upload-width":`${this.width}px`,"--upload-height":`${this.height}px`};return l`
2
2
  <div class="upload" part="container">
3
3
  <div
4
- class=${o(e)}
4
+ class=${_(e)}
5
5
  part="control"
6
+ style=${y(t)}
6
7
  @click=${()=>this._input?.click()}
7
8
  @drop=${this._handleDrop}
8
9
  @dragover=${this._handleDragOver}
@@ -16,34 +17,34 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
16
17
  @change=${this._handleInputChange}
17
18
  >
18
19
  <div class="icon" part="icon" aria-hidden="true">
19
- <svg viewBox="0 0 24 24" fill="currentColor" width="52" height="52">
20
+ <svg viewBox="0 0 24 24" fill="currentColor" width="100%" height="100%">
20
21
  <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"/>
21
22
  </svg>
22
23
  </div>
23
24
  <div class="text" part="text">将文件拖到此处,或<em>点击上传</em></div>
24
25
  </div>
25
26
 
26
- ${this._internalFiles.length?i`
27
+ ${this._internalFiles.length?l`
27
28
  <div class="list" part="list">
28
- ${l(this._internalFiles,e=>`${e.name}-${e.url??""}`,(e,t)=>i`
29
+ ${x(this._internalFiles,s=>`${s.name}-${s.url??""}`,(s,o)=>l`
29
30
  <div class="item" part="item">
30
- <span class="item-name">${e.name}</span>
31
+ <span class="item-name">${s.name}</span>
31
32
  <button
32
33
  class="remove"
33
34
  part="remove"
34
35
  type="button"
35
- @click=${e=>{e.stopPropagation(),this._handleRemove(t)}}
36
+ @click=${r=>{r.stopPropagation(),this._handleRemove(o)}}
36
37
  >
37
38
  ×
38
39
  </button>
39
40
  </div>
40
41
  `)}
41
42
  </div>
42
- `:s}
43
+ `:c}
43
44
 
44
- ${this._message?i`<div class="status ${this._messageType}" part="status">${this._message}</div>`:s}
45
+ ${this._message?l`<div class="status ${this._messageType}" part="status">${this._message}</div>`:c}
45
46
 
46
- ${this.notip?s:i`
47
+ ${this.notip?c:l`
47
48
  <div class="status info" part="tip">
48
49
  <slot name="tip">
49
50
  上传文件支持 ${this._exts.join(" / ")} 格式,单个文件大小不超过 ${this.size}MB,且文件数量不超过 ${this.max} 个
@@ -51,10 +52,12 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
51
52
  </div>
52
53
  `}
53
54
  </div>
54
- `}};u.styles=e`
55
+ `}};i.styles=g`
55
56
  :host {
56
57
  display: block;
57
58
  width: 100%;
59
+ --upload-width: 160px;
60
+ --upload-height: 90px;
58
61
  color: #0f172a;
59
62
  font-size: 14px;
60
63
  }
@@ -62,6 +65,7 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
62
65
  .upload {
63
66
  display: grid;
64
67
  gap: 12px;
68
+ justify-items: start;
65
69
  }
66
70
 
67
71
  .control {
@@ -69,8 +73,10 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
69
73
  flex-direction: column;
70
74
  align-items: center;
71
75
  justify-content: center;
72
- min-height: 150px;
73
- padding: 24px;
76
+ box-sizing: border-box;
77
+ width: var(--upload-width);
78
+ min-height: var(--upload-height);
79
+ padding: 10px 12px;
74
80
  cursor: pointer;
75
81
  background: #f8fafc;
76
82
  border: 1px dashed #cbd5e1;
@@ -84,14 +90,15 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
84
90
  }
85
91
 
86
92
  .icon {
87
- width: 52px;
88
- height: 52px;
89
- margin-bottom: 14px;
93
+ width: 28px;
94
+ height: 28px;
95
+ margin-bottom: 8px;
90
96
  color: #3d61e3;
91
97
  }
92
98
 
93
99
  .text {
94
- line-height: 1.6;
100
+ font-size: 12px;
101
+ line-height: 1.4;
95
102
  color: #475569;
96
103
  text-align: center;
97
104
  }
@@ -153,5 +160,5 @@ import{css as e,LitElement as t,nothing as s,html as i}from"lit";import{property
153
160
  color: #b91c1c;
154
161
  background: #fef2f2;
155
162
  }
156
- `,c([a({type:String})],u.prototype,"action",2),c([a({attribute:!1})],u.prototype,"headers",2),c([a({attribute:!1})],u.prototype,"data",2),c([a({type:String})],u.prototype,"name",2),c([a({type:Number})],u.prototype,"size",2),c([a({type:Number,attribute:"max"})],u.prototype,"max",2),c([a({type:String})],u.prototype,"accept",2),c([a({attribute:!1})],u.prototype,"files",2),c([a({type:Boolean})],u.prototype,"notip",2),c([a({attribute:!1})],u.prototype,"ext",2),c([r()],u.prototype,"_internalFiles",2),c([r()],u.prototype,"_isDragging",2),c([r()],u.prototype,"_message",2),c([r()],u.prototype,"_messageType",2),c([n('input[type="file"]')],u.prototype,"_input",2),u=c([p("qxs-file-upload")],u);export{u as QxsFileUpload};
163
+ `;a([n({type:String})],i.prototype,"action",2);a([n({attribute:!1})],i.prototype,"headers",2);a([n({attribute:!1})],i.prototype,"data",2);a([n({type:String})],i.prototype,"name",2);a([n({type:Number})],i.prototype,"size",2);a([n({type:Number})],i.prototype,"width",2);a([n({type:Number})],i.prototype,"height",2);a([n({type:Number,attribute:"max"})],i.prototype,"max",2);a([n({type:String})],i.prototype,"accept",2);a([n({attribute:!1})],i.prototype,"files",2);a([n({type:Boolean})],i.prototype,"notip",2);a([n({attribute:!1})],i.prototype,"ext",2);a([h()],i.prototype,"_internalFiles",2);a([h()],i.prototype,"_isDragging",2);a([h()],i.prototype,"_message",2);a([h()],i.prototype,"_messageType",2);a([m('input[type="file"]')],i.prototype,"_input",2);i=a([b("qxs-file-upload")],i);export{i as QxsFileUpload};
157
164
  //# sourceMappingURL=file-upload.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.mjs","sources":["../../../packages/components/src/file-upload.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { safeCustomElement } from './base/define'\n\ntype UploadItem = {\n name: string\n url?: string\n file?: File\n}\n\ntype UploadSuccessDetail = {\n response: any\n file: File\n files: File[]\n items: UploadItem[]\n}\n\nfunction normalizeExt(value: string) {\n return value.trim().replace(/^\\./, '').split('/').pop()?.toLowerCase() ?? ''\n}\n\nfunction parseJsonResponse(responseText: string) {\n try {\n return JSON.parse(responseText)\n }\n catch {\n return responseText\n }\n}\n\n@safeCustomElement('qxs-file-upload')\nexport class QxsFileUpload extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n color: #0f172a;\n font-size: 14px;\n }\n\n .upload {\n display: grid;\n gap: 12px;\n }\n\n .control {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 150px;\n padding: 24px;\n cursor: pointer;\n background: #f8fafc;\n border: 1px dashed #cbd5e1;\n border-radius: 16px;\n transition: border-color 0.2s ease, background-color 0.2s ease;\n }\n\n .control.is-dragging {\n background: #eef4ff;\n border-color: #3d61e3;\n }\n\n .icon {\n width: 52px;\n height: 52px;\n margin-bottom: 14px;\n color: #3d61e3;\n }\n\n .text {\n line-height: 1.6;\n color: #475569;\n text-align: center;\n }\n\n .text em {\n font-style: normal;\n color: #3d61e3;\n }\n\n .list {\n display: grid;\n gap: 8px;\n }\n\n .item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n background: #fff;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n }\n\n .item-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .remove {\n padding: 0;\n color: #94a3b8;\n cursor: pointer;\n background: transparent;\n border: 0;\n }\n\n .status {\n padding: 10px 12px;\n line-height: 1.6;\n border-radius: 12px;\n }\n\n .status.info {\n color: #1d4ed8;\n background: #eff6ff;\n }\n\n .status.warning {\n color: #9a3412;\n background: #fff7ed;\n }\n\n .status.error {\n color: #b91c1c;\n background: #fef2f2;\n }\n `\n\n @property({ type: String }) action = ''\n @property({ attribute: false }) headers?: Record<string, string>\n @property({ attribute: false }) data?: Record<string, string | Blob>\n @property({ type: String }) name = 'file'\n @property({ type: Number }) size = 20\n @property({ type: Number, attribute: 'max' }) max = 3\n @property({ type: String }) accept = 'zip,rar'\n @property({ attribute: false }) files: UploadItem[] = []\n @property({ type: Boolean }) notip = false\n @property({ attribute: false }) ext: string[] = []\n\n @state() private _internalFiles: UploadItem[] = []\n @state() private _isDragging = false\n @state() private _message = ''\n @state() private _messageType: 'info' | 'warning' | 'error' = 'info'\n\n @query('input[type=\"file\"]') private _input?: HTMLInputElement\n private _pendingUploadCount = 0\n\n connectedCallback() {\n super.connectedCallback()\n this._syncFilesFromProps()\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('files')) {\n this._syncFilesFromProps()\n }\n }\n\n private get _exts() {\n const source = this.ext.length ? this.ext : this.accept.split(',')\n return source.map(normalizeExt).filter(Boolean)\n }\n\n private _syncFilesFromProps() {\n this._internalFiles = [...this.files]\n }\n\n private _setMessage(type: 'info' | 'warning' | 'error', message: string) {\n this._messageType = type\n this._message = message\n }\n\n private _clearMessage() {\n this._message = ''\n this._messageType = 'info'\n }\n\n private _validateFile(file: File) {\n const fileExt = normalizeExt(file.name.split('.').pop() ?? '')\n const isTypeOk = this._exts.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < this.size\n\n if (!isTypeOk) {\n this._setMessage('error', `上传文件只支持 ${this._exts.join(' / ')} 格式!`)\n return false\n }\n\n if (!isSizeOk) {\n this._setMessage('error', `上传文件大小不能超过 ${this.size}MB!`)\n return false\n }\n\n if (this._internalFiles.length + this._pendingUploadCount >= this.max) {\n this._setMessage('warning', '文件上传超过限制')\n return false\n }\n\n return true\n }\n\n private _dispatchUploadSuccess(detail: UploadSuccessDetail) {\n this.dispatchEvent(new CustomEvent('upload-success', {\n detail,\n bubbles: true,\n composed: true,\n }))\n this.dispatchEvent(new CustomEvent('on-success', {\n detail,\n bubbles: true,\n composed: true,\n }))\n\n if (typeof (this as any).onSuccess === 'function') {\n ;(this as any).onSuccess(detail.response, detail.file, detail.files)\n }\n }\n\n private _dispatchFilesChange() {\n this.dispatchEvent(new CustomEvent('files-change', {\n detail: { items: this._internalFiles.slice() },\n bubbles: true,\n composed: true,\n }))\n }\n\n private _handleSelectedFiles(files: File[]) {\n this._clearMessage()\n files.forEach((file) => {\n if (this._validateFile(file)) {\n this._uploadFile(file)\n }\n })\n }\n\n private _handleDrop(event: DragEvent) {\n event.preventDefault()\n this._isDragging = false\n const files = event.dataTransfer?.files\n if (!files) {\n return\n }\n this._handleSelectedFiles(Array.from(files))\n }\n\n private _handleDragOver(event: DragEvent) {\n event.preventDefault()\n this._isDragging = true\n }\n\n private _handleDragLeave() {\n this._isDragging = false\n }\n\n private _handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement\n const files = target.files\n if (!files) {\n return\n }\n\n this._handleSelectedFiles(Array.from(files))\n target.value = ''\n }\n\n private _uploadFile(file: File) {\n if (!this.action) {\n this._setMessage('warning', '请先配置上传地址 action')\n return\n }\n\n const formData = new FormData()\n formData.append(this.name, file)\n\n if (this.data) {\n Object.entries(this.data).forEach(([key, value]) => {\n formData.append(key, value)\n })\n }\n\n const xhr = new XMLHttpRequest()\n xhr.open('POST', this.action)\n this._pendingUploadCount += 1\n\n if (this.headers) {\n Object.entries(this.headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value)\n })\n }\n\n xhr.onload = () => {\n this._pendingUploadCount = Math.max(0, this._pendingUploadCount - 1)\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = parseJsonResponse(xhr.responseText)\n const nextItem: UploadItem = { name: file.name, file }\n this._internalFiles = [...this._internalFiles, nextItem]\n this._setMessage('info', `${file.name} 上传成功`)\n this._dispatchFilesChange()\n this._dispatchUploadSuccess({\n response,\n file,\n files: this._internalFiles.map(item => item.file).filter(Boolean) as File[],\n items: this._internalFiles.slice(),\n })\n }\n else {\n this._setMessage('error', '上传失败')\n }\n }\n\n xhr.onerror = () => {\n this._pendingUploadCount = Math.max(0, this._pendingUploadCount - 1)\n this._setMessage('error', '上传失败')\n }\n\n xhr.send(formData)\n }\n\n private _handleRemove(index: number) {\n this._internalFiles = this._internalFiles.filter((_, fileIndex) => fileIndex !== index)\n this._dispatchFilesChange()\n }\n\n render() {\n const controlClasses = {\n control: true,\n 'is-dragging': this._isDragging,\n }\n\n return html`\n <div class=\"upload\" part=\"container\">\n <div\n class=${classMap(controlClasses)}\n part=\"control\"\n @click=${() => this._input?.click()}\n @drop=${this._handleDrop}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n >\n <input\n type=\"file\"\n accept=${this.accept}\n ?multiple=${this.max > 1}\n style=\"display:none\"\n @change=${this._handleInputChange}\n >\n <div class=\"icon\" part=\"icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"52\" height=\"52\">\n <path d=\"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\"/>\n </svg>\n </div>\n <div class=\"text\" part=\"text\">将文件拖到此处,或<em>点击上传</em></div>\n </div>\n\n ${this._internalFiles.length\n ? html`\n <div class=\"list\" part=\"list\">\n ${repeat(this._internalFiles, item => `${item.name}-${item.url ?? ''}`, (item, index) => html`\n <div class=\"item\" part=\"item\">\n <span class=\"item-name\">${item.name}</span>\n <button\n class=\"remove\"\n part=\"remove\"\n type=\"button\"\n @click=${(event: Event) => {\n event.stopPropagation()\n this._handleRemove(index)\n }}\n >\n ×\n </button>\n </div>\n `)}\n </div>\n `\n : nothing}\n\n ${this._message\n ? html`<div class=\"status ${this._messageType}\" part=\"status\">${this._message}</div>`\n : nothing}\n\n ${this.notip\n ? nothing\n : html`\n <div class=\"status info\" part=\"tip\">\n <slot name=\"tip\">\n 上传文件支持 ${this._exts.join(' / ')} 格式,单个文件大小不超过 ${this.size}MB,且文件数量不超过 ${this.max} 个\n </slot>\n </div>\n `}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-file-upload': QxsFileUpload\n }\n}\n"],"names":["normalizeExt","value","trim","replace","split","pop","toLowerCase","QxsFileUpload","LitElement","constructor","super","arguments","this","action","name","size","max","accept","files","notip","ext","_internalFiles","_isDragging","_message","_messageType","_pendingUploadCount","connectedCallback","_syncFilesFromProps","updated","changed","has","_exts","length","map","filter","Boolean","_setMessage","type","message","_clearMessage","_validateFile","file","fileExt","isTypeOk","includes","isSizeOk","join","_dispatchUploadSuccess","detail","dispatchEvent","CustomEvent","bubbles","composed","onSuccess","response","_dispatchFilesChange","items","slice","_handleSelectedFiles","forEach","_uploadFile","_handleDrop","event","preventDefault","dataTransfer","Array","from","_handleDragOver","_handleDragLeave","_handleInputChange","target","formData","FormData","append","data","Object","entries","_ref","key","xhr","XMLHttpRequest","open","headers","_ref2","setRequestHeader","onload","Math","status","responseText","JSON","parse","parseJsonResponse","nextItem","item","onerror","send","_handleRemove","index","_","fileIndex","render","controlClasses","control","html","classMap","_input","click","repeat","url","stopPropagation","nothing","styles","css","__decorateClass","property","String","prototype","attribute","Number","state","query","safeCustomElement"],"mappings":"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"}
1
+ {"version":3,"file":"file-upload.mjs","sources":["../../../packages/components/src/file-upload.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\ntype UploadItem = {\n name: string\n url?: string\n file?: File\n}\n\ntype UploadSuccessDetail = {\n response: any\n file: File\n files: File[]\n items: UploadItem[]\n}\n\nfunction normalizeExt(value: string) {\n return value.trim().replace(/^\\./, '').split('/').pop()?.toLowerCase() ?? ''\n}\n\nfunction parseJsonResponse(responseText: string) {\n try {\n return JSON.parse(responseText)\n }\n catch {\n return responseText\n }\n}\n\n@safeCustomElement('qxs-file-upload')\nexport class QxsFileUpload extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n --upload-width: 160px;\n --upload-height: 90px;\n color: #0f172a;\n font-size: 14px;\n }\n\n .upload {\n display: grid;\n gap: 12px;\n justify-items: start;\n }\n\n .control {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--upload-width);\n min-height: var(--upload-height);\n padding: 10px 12px;\n cursor: pointer;\n background: #f8fafc;\n border: 1px dashed #cbd5e1;\n border-radius: 16px;\n transition: border-color 0.2s ease, background-color 0.2s ease;\n }\n\n .control.is-dragging {\n background: #eef4ff;\n border-color: #3d61e3;\n }\n\n .icon {\n width: 28px;\n height: 28px;\n margin-bottom: 8px;\n color: #3d61e3;\n }\n\n .text {\n font-size: 12px;\n line-height: 1.4;\n color: #475569;\n text-align: center;\n }\n\n .text em {\n font-style: normal;\n color: #3d61e3;\n }\n\n .list {\n display: grid;\n gap: 8px;\n }\n\n .item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n background: #fff;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n }\n\n .item-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .remove {\n padding: 0;\n color: #94a3b8;\n cursor: pointer;\n background: transparent;\n border: 0;\n }\n\n .status {\n padding: 10px 12px;\n line-height: 1.6;\n border-radius: 12px;\n }\n\n .status.info {\n color: #1d4ed8;\n background: #eff6ff;\n }\n\n .status.warning {\n color: #9a3412;\n background: #fff7ed;\n }\n\n .status.error {\n color: #b91c1c;\n background: #fef2f2;\n }\n `\n\n @property({ type: String }) action = ''\n @property({ attribute: false }) headers?: Record<string, string>\n @property({ attribute: false }) data?: Record<string, string | Blob>\n @property({ type: String }) name = 'file'\n @property({ type: Number }) size = 20\n @property({ type: Number }) width = 160\n @property({ type: Number }) height = 90\n @property({ type: Number, attribute: 'max' }) max = 3\n @property({ type: String }) accept = 'zip,rar'\n @property({ attribute: false }) files: UploadItem[] = []\n @property({ type: Boolean }) notip = false\n @property({ attribute: false }) ext: string[] = []\n\n @state() private _internalFiles: UploadItem[] = []\n @state() private _isDragging = false\n @state() private _message = ''\n @state() private _messageType: 'info' | 'warning' | 'error' = 'info'\n\n @query('input[type=\"file\"]') private _input?: HTMLInputElement\n private _pendingUploadCount = 0\n\n connectedCallback() {\n super.connectedCallback()\n this._syncFilesFromProps()\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('files')) {\n this._syncFilesFromProps()\n }\n }\n\n private get _exts() {\n const source = this.ext.length ? this.ext : this.accept.split(',')\n return source.map(normalizeExt).filter(Boolean)\n }\n\n private _syncFilesFromProps() {\n this._internalFiles = [...this.files]\n }\n\n private _setMessage(type: 'info' | 'warning' | 'error', message: string) {\n this._messageType = type\n this._message = message\n }\n\n private _clearMessage() {\n this._message = ''\n this._messageType = 'info'\n }\n\n private _validateFile(file: File) {\n const fileExt = normalizeExt(file.name.split('.').pop() ?? '')\n const isTypeOk = this._exts.includes(fileExt)\n const isSizeOk = file.size / 1024 / 1024 < this.size\n\n if (!isTypeOk) {\n this._setMessage('error', `上传文件只支持 ${this._exts.join(' / ')} 格式!`)\n return false\n }\n\n if (!isSizeOk) {\n this._setMessage('error', `上传文件大小不能超过 ${this.size}MB!`)\n return false\n }\n\n if (this._internalFiles.length + this._pendingUploadCount >= this.max) {\n this._setMessage('warning', '文件上传超过限制')\n return false\n }\n\n return true\n }\n\n private _dispatchUploadSuccess(detail: UploadSuccessDetail) {\n this.dispatchEvent(new CustomEvent('upload-success', {\n detail,\n bubbles: true,\n composed: true,\n }))\n this.dispatchEvent(new CustomEvent('on-success', {\n detail,\n bubbles: true,\n composed: true,\n }))\n\n if (typeof (this as any).onSuccess === 'function') {\n ;(this as any).onSuccess(detail.response, detail.file, detail.files)\n }\n }\n\n private _dispatchFilesChange() {\n this.dispatchEvent(new CustomEvent('files-change', {\n detail: { items: this._internalFiles.slice() },\n bubbles: true,\n composed: true,\n }))\n }\n\n private _handleSelectedFiles(files: File[]) {\n this._clearMessage()\n files.forEach((file) => {\n if (this._validateFile(file)) {\n this._uploadFile(file)\n }\n })\n }\n\n private _handleDrop(event: DragEvent) {\n event.preventDefault()\n this._isDragging = false\n const files = event.dataTransfer?.files\n if (!files) {\n return\n }\n this._handleSelectedFiles(Array.from(files))\n }\n\n private _handleDragOver(event: DragEvent) {\n event.preventDefault()\n this._isDragging = true\n }\n\n private _handleDragLeave() {\n this._isDragging = false\n }\n\n private _handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement\n const files = target.files\n if (!files) {\n return\n }\n\n this._handleSelectedFiles(Array.from(files))\n target.value = ''\n }\n\n private _uploadFile(file: File) {\n if (!this.action) {\n this._setMessage('warning', '请先配置上传地址 action')\n return\n }\n\n const formData = new FormData()\n formData.append(this.name, file)\n\n if (this.data) {\n Object.entries(this.data).forEach(([key, value]) => {\n formData.append(key, value)\n })\n }\n\n const xhr = new XMLHttpRequest()\n xhr.open('POST', this.action)\n this._pendingUploadCount += 1\n\n if (this.headers) {\n Object.entries(this.headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value)\n })\n }\n\n xhr.onload = () => {\n this._pendingUploadCount = Math.max(0, this._pendingUploadCount - 1)\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = parseJsonResponse(xhr.responseText)\n const nextItem: UploadItem = { name: file.name, file }\n this._internalFiles = [...this._internalFiles, nextItem]\n this._setMessage('info', `${file.name} 上传成功`)\n this._dispatchFilesChange()\n this._dispatchUploadSuccess({\n response,\n file,\n files: this._internalFiles.map(item => item.file).filter(Boolean) as File[],\n items: this._internalFiles.slice(),\n })\n }\n else {\n this._setMessage('error', '上传失败')\n }\n }\n\n xhr.onerror = () => {\n this._pendingUploadCount = Math.max(0, this._pendingUploadCount - 1)\n this._setMessage('error', '上传失败')\n }\n\n xhr.send(formData)\n }\n\n private _handleRemove(index: number) {\n this._internalFiles = this._internalFiles.filter((_, fileIndex) => fileIndex !== index)\n this._dispatchFilesChange()\n }\n\n render() {\n const controlClasses = {\n control: true,\n 'is-dragging': this._isDragging,\n }\n const controlStyle = {\n '--upload-width': `${this.width}px`,\n '--upload-height': `${this.height}px`,\n }\n\n return html`\n <div class=\"upload\" part=\"container\">\n <div\n class=${classMap(controlClasses)}\n part=\"control\"\n style=${styleMap(controlStyle)}\n @click=${() => this._input?.click()}\n @drop=${this._handleDrop}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n >\n <input\n type=\"file\"\n accept=${this.accept}\n ?multiple=${this.max > 1}\n style=\"display:none\"\n @change=${this._handleInputChange}\n >\n <div class=\"icon\" part=\"icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"100%\" height=\"100%\">\n <path d=\"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\"/>\n </svg>\n </div>\n <div class=\"text\" part=\"text\">将文件拖到此处,或<em>点击上传</em></div>\n </div>\n\n ${this._internalFiles.length\n ? html`\n <div class=\"list\" part=\"list\">\n ${repeat(this._internalFiles, item => `${item.name}-${item.url ?? ''}`, (item, index) => html`\n <div class=\"item\" part=\"item\">\n <span class=\"item-name\">${item.name}</span>\n <button\n class=\"remove\"\n part=\"remove\"\n type=\"button\"\n @click=${(event: Event) => {\n event.stopPropagation()\n this._handleRemove(index)\n }}\n >\n ×\n </button>\n </div>\n `)}\n </div>\n `\n : nothing}\n\n ${this._message\n ? html`<div class=\"status ${this._messageType}\" part=\"status\">${this._message}</div>`\n : nothing}\n\n ${this.notip\n ? nothing\n : html`\n <div class=\"status info\" part=\"tip\">\n <slot name=\"tip\">\n 上传文件支持 ${this._exts.join(' / ')} 格式,单个文件大小不超过 ${this.size}MB,且文件数量不超过 ${this.max} 个\n </slot>\n </div>\n `}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-file-upload': QxsFileUpload\n }\n}\n"],"names":["normalizeExt","value","parseJsonResponse","responseText","QxsFileUpload","LitElement","changed","type","message","file","fileExt","isTypeOk","isSizeOk","detail","files","event","target","formData","key","xhr","response","nextItem","item","index","_","fileIndex","controlClasses","controlStyle","html","classMap","styleMap","repeat","nothing","css","__decorateClass","property","state","query","safeCustomElement"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
- import{css as t,LitElement as e,html as s}from"lit";import{property as i,state as r,query as o}from"lit/decorators.js";import{styleMap as a}from"lit/directives/style-map.js";import{safeCustomElement as n}from"./base/define.mjs";var h=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=(t,e,s,i)=>{for(var r,o=i>1?void 0:i?c(e,s):e,a=t.length-1;a>=0;a--)(r=t[a])&&(o=(i?r(e,s,o):r(o))||o);return i&&o&&h(e,s,o),o};let d=class extends e{constructor(){super(...arguments),this.padding=8,this.className="",this._barHeight=0,this._barLeft=0,this._barWidth=0,this._isBottom=!1,this._actionbarObserver=null,this._hostObserver=null,this._resizeHandler=()=>{this._syncGeometry(),this._syncScrollState()},this._scrollFrame=0,this._handleScroll=()=>{this._scrollFrame&&cancelAnimationFrame(this._scrollFrame),this._scrollFrame=requestAnimationFrame(()=>{this._scrollFrame=0,this._syncScrollState()})}}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._resizeHandler,{passive:!0}),window.addEventListener("scroll",this._handleScroll,{passive:!0})}firstUpdated(){this._initObservers(),queueMicrotask(()=>{this.isConnected&&(this._syncGeometry(),this._syncScrollState())})}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._resizeHandler),window.removeEventListener("scroll",this._handleScroll),this._actionbarObserver?.disconnect(),this._hostObserver?.disconnect(),this._scrollFrame&&(cancelAnimationFrame(this._scrollFrame),this._scrollFrame=0)}_initObservers(){if("undefined"==typeof ResizeObserver)return;const t=this._getLayoutAnchor();this._actionbarObserver=new ResizeObserver(()=>{this._syncGeometry()}),this._hostObserver=new ResizeObserver(()=>{this._syncGeometry()}),this._actionbar&&this._actionbarObserver.observe(this._actionbar),this._hostObserver.observe(this),t!==this&&this._hostObserver.observe(t)}_getLayoutAnchor(){return this.parentElement??this}_syncGeometry(){const t=this._getLayoutAnchor().getBoundingClientRect();this._barWidth=Math.max(Math.round(t.width),0),this._barLeft=Math.round(t.left);const e=Math.ceil(this._actionbar?.getBoundingClientRect().height||0);this._barHeight=Math.max(e,0)}_syncScrollState(){const t=document.documentElement;this._isBottom=Math.ceil(window.scrollY+t.clientHeight)>=t.scrollHeight}_bottomPadding(){return"undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent)?Math.max(this.padding,20):this.padding}render(){const t=["actionbar",this._isBottom?"":"is-shadow",this.className].filter(Boolean).join(" ");return s`
1
+ import{css as b,LitElement as _,html as p}from"lit";import{property as d,state as a,query as m}from"lit/decorators.js";import{styleMap as l}from"lit/directives/style-map.js";import{safeCustomElement as f}from"./base/define.mjs";var v=Object.defineProperty,u=Object.getOwnPropertyDescriptor,s=(t,i,n,o)=>{for(var r=o>1?void 0:o?u(i,n):i,c=t.length-1,h;c>=0;c--)(h=t[c])&&(r=(o?h(i,n,r):h(r))||r);return o&&r&&v(i,n,r),r};function y(){return typeof navigator>"u"?!1:/Android/i.test(navigator.userAgent)}let e=class extends _{constructor(){super(...arguments),this.padding=8,this.className="",this._barHeight=0,this._barLeft=0,this._barWidth=0,this._isBottom=!1,this._actionbarObserver=null,this._hostObserver=null,this._resizeHandler=()=>{this._syncGeometry(),this._syncScrollState()},this._scrollFrame=0,this._handleScroll=()=>{this._scrollFrame&&cancelAnimationFrame(this._scrollFrame),this._scrollFrame=requestAnimationFrame(()=>{this._scrollFrame=0,this._syncScrollState()})}}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._resizeHandler,{passive:!0}),window.addEventListener("scroll",this._handleScroll,{passive:!0})}firstUpdated(){this._initObservers(),queueMicrotask(()=>{this.isConnected&&(this._syncGeometry(),this._syncScrollState())})}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._resizeHandler),window.removeEventListener("scroll",this._handleScroll),this._actionbarObserver?.disconnect(),this._hostObserver?.disconnect(),this._scrollFrame&&(cancelAnimationFrame(this._scrollFrame),this._scrollFrame=0)}_initObservers(){if(typeof ResizeObserver>"u")return;const t=this._getLayoutAnchor();this._actionbarObserver=new ResizeObserver(()=>{this._syncGeometry()}),this._hostObserver=new ResizeObserver(()=>{this._syncGeometry()}),this._actionbar&&this._actionbarObserver.observe(this._actionbar),this._hostObserver.observe(this),t!==this&&this._hostObserver.observe(t)}_getLayoutAnchor(){return this.parentElement??this}_syncGeometry(){const t=this._getLayoutAnchor().getBoundingClientRect();this._barWidth=Math.max(Math.round(t.width),0),this._barLeft=Math.round(t.left);const i=Math.ceil(this._actionbar?.getBoundingClientRect().height||0);this._barHeight=Math.max(i,0)}_syncScrollState(){const t=document.documentElement;this._isBottom=Math.ceil(window.scrollY+t.clientHeight)>=t.scrollHeight}_bottomPadding(){return y()?Math.max(this.padding,20):this.padding}render(){const t=["actionbar",this._isBottom?"":"is-shadow",this.className].filter(Boolean).join(" ");return p`
2
2
  <div
3
3
  part="placeholder"
4
4
  class="placeholder"
5
- style=${a({height:`${this._barHeight}px`})}
5
+ style=${l({height:`${this._barHeight}px`})}
6
6
  >
7
7
  <div
8
8
  part="actionbar"
9
9
  class=${t}
10
- style=${a({width:`${this._barWidth}px`,left:`${this._barLeft}px`,padding:`${this.padding}px`,paddingBottom:`calc(env(safe-area-inset-bottom) + ${this._bottomPadding()}px)`})}
10
+ style=${l({width:`${this._barWidth}px`,left:`${this._barLeft}px`,padding:`${this.padding}px`,paddingBottom:`calc(env(safe-area-inset-bottom) + ${this._bottomPadding()}px)`})}
11
11
  >
12
12
  <slot></slot>
13
13
  </div>
14
14
  </div>
15
- `}};d.styles=t`
15
+ `}};e.styles=b`
16
16
  :host {
17
17
  display: block;
18
18
  width: 100%;
@@ -35,5 +35,5 @@ import{css as t,LitElement as e,html as s}from"lit";import{property as i,state a
35
35
  .actionbar.is-shadow {
36
36
  box-shadow: 0 0 1px 0 var(--qxs-border-color, #f3f3f2);
37
37
  }
38
- `,l([i({type:Number})],d.prototype,"padding",2),l([i({type:String,attribute:"class-name"})],d.prototype,"className",2),l([r()],d.prototype,"_barHeight",2),l([r()],d.prototype,"_barLeft",2),l([r()],d.prototype,"_barWidth",2),l([r()],d.prototype,"_isBottom",2),l([o(".actionbar")],d.prototype,"_actionbar",2),d=l([n("qxs-fixed-action-bar")],d);export{d as QxsFixedActionBar};
38
+ `;s([d({type:Number})],e.prototype,"padding",2);s([d({type:String,attribute:"class-name"})],e.prototype,"className",2);s([a()],e.prototype,"_barHeight",2);s([a()],e.prototype,"_barLeft",2);s([a()],e.prototype,"_barWidth",2);s([a()],e.prototype,"_isBottom",2);s([m(".actionbar")],e.prototype,"_actionbar",2);e=s([f("qxs-fixed-action-bar")],e);export{e as QxsFixedActionBar};
39
39
  //# sourceMappingURL=fixed-action-bar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixed-action-bar.mjs","sources":["../../../packages/components/src/fixed-action-bar.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\nfunction isAndroidDevice() {\n if (typeof navigator === 'undefined') {\n return false\n }\n\n return /Android/i.test(navigator.userAgent)\n}\n\n@safeCustomElement('qxs-fixed-action-bar')\nexport class QxsFixedActionBar extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n }\n\n .placeholder {\n width: 100%;\n }\n\n .actionbar {\n position: fixed;\n bottom: 0;\n z-index: 10;\n box-sizing: border-box;\n text-align: center;\n background-color: var(--qxs-bg-color, #fff);\n transition: box-shadow 0.3s ease;\n }\n\n .actionbar.is-shadow {\n box-shadow: 0 0 1px 0 var(--qxs-border-color, #f3f3f2);\n }\n `\n\n @property({ type: Number }) padding = 8\n @property({ type: String, attribute: 'class-name' }) className = ''\n\n @state() private _barHeight = 0\n @state() private _barLeft = 0\n @state() private _barWidth = 0\n @state() private _isBottom = false\n\n @query('.actionbar') private _actionbar?: HTMLDivElement\n\n private _actionbarObserver: ResizeObserver | null = null\n private _hostObserver: ResizeObserver | null = null\n private _resizeHandler = () => {\n this._syncGeometry()\n this._syncScrollState()\n }\n private _scrollFrame = 0\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener('resize', this._resizeHandler, { passive: true })\n window.addEventListener('scroll', this._handleScroll, { passive: true })\n }\n\n firstUpdated() {\n this._initObservers()\n queueMicrotask(() => {\n if (!this.isConnected) {\n return\n }\n\n this._syncGeometry()\n this._syncScrollState()\n })\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener('resize', this._resizeHandler)\n window.removeEventListener('scroll', this._handleScroll)\n this._actionbarObserver?.disconnect()\n this._hostObserver?.disconnect()\n\n if (this._scrollFrame) {\n cancelAnimationFrame(this._scrollFrame)\n this._scrollFrame = 0\n }\n }\n\n private _handleScroll = () => {\n if (this._scrollFrame) {\n cancelAnimationFrame(this._scrollFrame)\n }\n\n this._scrollFrame = requestAnimationFrame(() => {\n this._scrollFrame = 0\n this._syncScrollState()\n })\n }\n\n private _initObservers() {\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const layoutAnchor = this._getLayoutAnchor()\n\n this._actionbarObserver = new ResizeObserver(() => {\n this._syncGeometry()\n })\n this._hostObserver = new ResizeObserver(() => {\n this._syncGeometry()\n })\n\n if (this._actionbar) {\n this._actionbarObserver.observe(this._actionbar)\n }\n this._hostObserver.observe(this)\n if (layoutAnchor !== this) {\n this._hostObserver.observe(layoutAnchor)\n }\n }\n\n private _getLayoutAnchor() {\n return this.parentElement ?? this\n }\n\n private _syncGeometry() {\n const hostRect = this._getLayoutAnchor().getBoundingClientRect()\n this._barWidth = Math.max(Math.round(hostRect.width), 0)\n this._barLeft = Math.round(hostRect.left)\n\n const barHeight = Math.ceil(this._actionbar?.getBoundingClientRect().height || 0)\n this._barHeight = Math.max(barHeight, 0)\n }\n\n private _syncScrollState() {\n const doc = document.documentElement\n this._isBottom = Math.ceil(window.scrollY + doc.clientHeight) >= doc.scrollHeight\n }\n\n private _bottomPadding() {\n return isAndroidDevice()\n ? Math.max(this.padding, 20)\n : this.padding\n }\n\n render() {\n const actionbarClassName = ['actionbar', !this._isBottom ? 'is-shadow' : '', this.className]\n .filter(Boolean)\n .join(' ')\n\n return html`\n <div\n part=\"placeholder\"\n class=\"placeholder\"\n style=${styleMap({ height: `${this._barHeight}px` })}\n >\n <div\n part=\"actionbar\"\n class=${actionbarClassName}\n style=${styleMap({\n width: `${this._barWidth}px`,\n left: `${this._barLeft}px`,\n padding: `${this.padding}px`,\n paddingBottom: `calc(env(safe-area-inset-bottom) + ${this._bottomPadding()}px)`,\n })}\n >\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n"],"names":["QxsFixedActionBar","LitElement","constructor","super","arguments","this","padding","className","_barHeight","_barLeft","_barWidth","_isBottom","_actionbarObserver","_hostObserver","_resizeHandler","_syncGeometry","_syncScrollState","_scrollFrame","_handleScroll","cancelAnimationFrame","requestAnimationFrame","connectedCallback","window","addEventListener","passive","firstUpdated","_initObservers","queueMicrotask","isConnected","disconnectedCallback","removeEventListener","disconnect","ResizeObserver","layoutAnchor","_getLayoutAnchor","_actionbar","observe","parentElement","hostRect","getBoundingClientRect","Math","max","round","width","left","barHeight","ceil","height","doc","document","documentElement","scrollY","clientHeight","scrollHeight","_bottomPadding","navigator","test","userAgent","render","actionbarClassName","filter","Boolean","join","html","styleMap","paddingBottom","styles","css","__decorateClass","property","type","Number","prototype","String","attribute","state","query","safeCustomElement"],"mappings":"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"}
1
+ {"version":3,"file":"fixed-action-bar.mjs","sources":["../../../packages/components/src/fixed-action-bar.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\nfunction isAndroidDevice() {\n if (typeof navigator === 'undefined') {\n return false\n }\n\n return /Android/i.test(navigator.userAgent)\n}\n\n@safeCustomElement('qxs-fixed-action-bar')\nexport class QxsFixedActionBar extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n }\n\n .placeholder {\n width: 100%;\n }\n\n .actionbar {\n position: fixed;\n bottom: 0;\n z-index: 10;\n box-sizing: border-box;\n text-align: center;\n background-color: var(--qxs-bg-color, #fff);\n transition: box-shadow 0.3s ease;\n }\n\n .actionbar.is-shadow {\n box-shadow: 0 0 1px 0 var(--qxs-border-color, #f3f3f2);\n }\n `\n\n @property({ type: Number }) padding = 8\n @property({ type: String, attribute: 'class-name' }) className = ''\n\n @state() private _barHeight = 0\n @state() private _barLeft = 0\n @state() private _barWidth = 0\n @state() private _isBottom = false\n\n @query('.actionbar') private _actionbar?: HTMLDivElement\n\n private _actionbarObserver: ResizeObserver | null = null\n private _hostObserver: ResizeObserver | null = null\n private _resizeHandler = () => {\n this._syncGeometry()\n this._syncScrollState()\n }\n private _scrollFrame = 0\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener('resize', this._resizeHandler, { passive: true })\n window.addEventListener('scroll', this._handleScroll, { passive: true })\n }\n\n firstUpdated() {\n this._initObservers()\n queueMicrotask(() => {\n if (!this.isConnected) {\n return\n }\n\n this._syncGeometry()\n this._syncScrollState()\n })\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener('resize', this._resizeHandler)\n window.removeEventListener('scroll', this._handleScroll)\n this._actionbarObserver?.disconnect()\n this._hostObserver?.disconnect()\n\n if (this._scrollFrame) {\n cancelAnimationFrame(this._scrollFrame)\n this._scrollFrame = 0\n }\n }\n\n private _handleScroll = () => {\n if (this._scrollFrame) {\n cancelAnimationFrame(this._scrollFrame)\n }\n\n this._scrollFrame = requestAnimationFrame(() => {\n this._scrollFrame = 0\n this._syncScrollState()\n })\n }\n\n private _initObservers() {\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const layoutAnchor = this._getLayoutAnchor()\n\n this._actionbarObserver = new ResizeObserver(() => {\n this._syncGeometry()\n })\n this._hostObserver = new ResizeObserver(() => {\n this._syncGeometry()\n })\n\n if (this._actionbar) {\n this._actionbarObserver.observe(this._actionbar)\n }\n this._hostObserver.observe(this)\n if (layoutAnchor !== this) {\n this._hostObserver.observe(layoutAnchor)\n }\n }\n\n private _getLayoutAnchor() {\n return this.parentElement ?? this\n }\n\n private _syncGeometry() {\n const hostRect = this._getLayoutAnchor().getBoundingClientRect()\n this._barWidth = Math.max(Math.round(hostRect.width), 0)\n this._barLeft = Math.round(hostRect.left)\n\n const barHeight = Math.ceil(this._actionbar?.getBoundingClientRect().height || 0)\n this._barHeight = Math.max(barHeight, 0)\n }\n\n private _syncScrollState() {\n const doc = document.documentElement\n this._isBottom = Math.ceil(window.scrollY + doc.clientHeight) >= doc.scrollHeight\n }\n\n private _bottomPadding() {\n return isAndroidDevice()\n ? Math.max(this.padding, 20)\n : this.padding\n }\n\n render() {\n const actionbarClassName = ['actionbar', !this._isBottom ? 'is-shadow' : '', this.className]\n .filter(Boolean)\n .join(' ')\n\n return html`\n <div\n part=\"placeholder\"\n class=\"placeholder\"\n style=${styleMap({ height: `${this._barHeight}px` })}\n >\n <div\n part=\"actionbar\"\n class=${actionbarClassName}\n style=${styleMap({\n width: `${this._barWidth}px`,\n left: `${this._barLeft}px`,\n padding: `${this.padding}px`,\n paddingBottom: `calc(env(safe-area-inset-bottom) + ${this._bottomPadding()}px)`,\n })}\n >\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n"],"names":["isAndroidDevice","QxsFixedActionBar","LitElement","layoutAnchor","hostRect","barHeight","doc","actionbarClassName","html","styleMap","css","__decorateClass","property","state","query","safeCustomElement"],"mappings":"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"}
package/es/icon.mjs CHANGED
@@ -1,20 +1,20 @@
1
- import{LitElement as t,nothing as e,html as i}from"lit";import{property as r,state as s}from"lit/decorators.js";import{styleMap as o}from"lit/directives/style-map.js";import{safeCustomElement as n}from"./base/define.mjs";var a=Object.defineProperty,l=Object.getOwnPropertyDescriptor,c=(t,e,i,r)=>{for(var s,o=r>1?void 0:r?l(e,i):e,n=t.length-1;n>=0;n--)(s=t[n])&&(o=(r?s(e,i,o):s(o))||o);return r&&o&&a(e,i,o),o};let h=class extends t{constructor(){super(...arguments),this.icon="",this.flip="",this.rotate=0,this.color="",this.localIconPrefix="icon-",this.fallback="",this.loading="",this._imageLoading=!1,this._imageError=!1}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this._resetImageState()}willUpdate(t){(t.has("icon")||t.has("color")&&"iconify"===this._outputType())&&this._resetImageState()}_outputType(){if("string"!=typeof this.icon)return"empty";const t=this.icon.trim();if(!t)return"empty";return/^https?:\/\//.test(t)||(/^\.{1,2}\//.test(e=t)||e.startsWith("/")||e.includes("/"))?"img":/^i-[^:]+:[^:]+/.test(t)?"unocss":t.startsWith("i-")&&!t.includes(":")?"css":t.includes(":")&&!t.startsWith("i-")?"iconify":/^[\w-]+$/.test(t)&&!t.startsWith("i-")?"svg":"css";var e}_iconName(){return"string"==typeof this.icon?this.icon.trim():""}_resetImageState(){const t=this._outputType();if("img"===t||"iconify"===t)return this._imageLoading=!0,void(this._imageError=!1);this._imageLoading=!1,this._imageError=!1}_formatSize(t){return null==t||""===t?"":"number"==typeof t||/^\d+(?:\.\d+)?$/.test(t)?`${t}px`:t}_transformStyle(){const t=[];switch(this.flip){case"horizontal":t.push("rotateY(180deg)");break;case"vertical":t.push("rotateX(180deg)");break;case"both":t.push("rotateX(180deg)","rotateY(180deg)")}return this.rotate&&t.push(`rotate(${this.rotate%360}deg)`),t.join(" ")}_containerStyle(){const t=this._formatSize(this.size)||"1em",e=this._transformStyle();return{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:t,height:t,fontSize:t,lineHeight:"1",color:this.color||"currentColor",verticalAlign:"-2px",transform:e||void 0,transformOrigin:"center",fill:"currentColor"}}_glyphStyle(){return{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"100%",height:"100%",lineHeight:"1",color:"inherit",fontSize:"inherit",flexShrink:"0"}}_imageStyle(){return{display:!(arguments.length>0&&void 0!==arguments[0])||arguments[0]?"block":"none",width:"100%",height:"100%",objectFit:"contain",flexShrink:"0"}}_imageSource(){if("iconify"===this._outputType()){const t=new URL(`https://api.iconify.design/${this._iconName()}.svg`);return this.color&&t.searchParams.set("color",this.color),t.toString()}return this._iconName()}_renderClassGlyph(t){const r=t.split(/\s+/).filter(Boolean).join(" ");return r?i`<i class=${r} style=${o(this._glyphStyle())} aria-hidden="true"></i>`:e}_renderSvgSprite(){const t=this._iconName();return t?i`
1
+ import{LitElement as g,nothing as o,html as c}from"lit";import{property as n,state as u}from"lit/decorators.js";import{styleMap as h}from"lit/directives/style-map.js";import{safeCustomElement as m}from"./base/define.mjs";var y=Object.defineProperty,_=Object.getOwnPropertyDescriptor,i=(t,e,s,l)=>{for(var a=l>1?void 0:l?_(e,s):e,p=t.length-1,f;p>=0;p--)(f=t[p])&&(a=(l?f(e,s,a):f(a))||a);return l&&a&&y(e,s,a),a};let r=class extends g{constructor(){super(...arguments),this.icon="",this.flip="",this.rotate=0,this.color="",this.localIconPrefix="icon-",this.fallback="",this.loading="",this._imageLoading=!1,this._imageError=!1}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this._resetImageState()}willUpdate(t){(t.has("icon")||t.has("color")&&this._outputType()==="iconify")&&this._resetImageState()}_outputType(){if(typeof this.icon!="string")return"empty";const t=this.icon.trim();if(!t)return"empty";const e=s=>/^\.{1,2}\//.test(s)||s.startsWith("/")||s.includes("/");return/^https?:\/\//.test(t)||e(t)?"img":/^i-[^:]+:[^:]+/.test(t)?"unocss":t.startsWith("i-")&&!t.includes(":")?"css":t.includes(":")&&!t.startsWith("i-")?"iconify":/^[\w-]+$/.test(t)&&!t.startsWith("i-")?"svg":"css"}_iconName(){return typeof this.icon=="string"?this.icon.trim():""}_resetImageState(){const t=this._outputType();if(t==="img"||t==="iconify"){this._imageLoading=!0,this._imageError=!1;return}this._imageLoading=!1,this._imageError=!1}_formatSize(t){return t==null||t===""?"":typeof t=="number"?`${t}px`:/^\d+(?:\.\d+)?$/.test(t)?`${t}px`:t}_transformStyle(){const t=[];switch(this.flip){case"horizontal":t.push("rotateY(180deg)");break;case"vertical":t.push("rotateX(180deg)");break;case"both":t.push("rotateX(180deg)","rotateY(180deg)");break}return this.rotate&&t.push(`rotate(${this.rotate%360}deg)`),t.join(" ")}_containerStyle(){const t=this._formatSize(this.size)||"1em",e=this._transformStyle();return{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:t,height:t,fontSize:t,lineHeight:"1",color:this.color||"currentColor",verticalAlign:"-2px",transform:e||void 0,transformOrigin:"center",fill:"currentColor"}}_glyphStyle(){return{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"100%",height:"100%",lineHeight:"1",color:"inherit",fontSize:"inherit",flexShrink:"0"}}_imageStyle(t=!0){return{display:t?"block":"none",width:"100%",height:"100%",objectFit:"contain",flexShrink:"0"}}_imageSource(){if(this._outputType()==="iconify"){const t=new URL(`https://api.iconify.design/${this._iconName()}.svg`);return this.color&&t.searchParams.set("color",this.color),t.toString()}return this._iconName()}_renderClassGlyph(t){const e=t.split(/\s+/).filter(Boolean).join(" ");return e?c`<i class=${e} style=${h(this._glyphStyle())} aria-hidden="true"></i>`:o}_renderSvgSprite(){const t=this._iconName();return t?c`
2
2
  <svg
3
3
  aria-hidden="true"
4
4
  viewBox="0 0 1024 1024"
5
- style=${o({display:"block",width:"100%",height:"100%",fill:"currentColor",flexShrink:"0"})}
5
+ style=${h({display:"block",width:"100%",height:"100%",fill:"currentColor",flexShrink:"0"})}
6
6
  >
7
7
  <use href=${`#${this.localIconPrefix}${t}`}></use>
8
8
  </svg>
9
- `:e}_renderImage(){const t=this._imageSource();if(!t)return e;const r=this._imageError&&!!this.fallback,s=!this._imageError&&this._imageLoading&&!!this.loading,n=!this._imageError&&!s;return i`
10
- ${s?this._renderClassGlyph(this.loading):e}
11
- ${r?this._renderClassGlyph(this.fallback):e}
9
+ `:o}_renderImage(){const t=this._imageSource();if(!t)return o;const e=this._imageError&&!!this.fallback,s=!this._imageError&&this._imageLoading&&!!this.loading,l=!this._imageError&&!s;return c`
10
+ ${s?this._renderClassGlyph(this.loading):o}
11
+ ${e?this._renderClassGlyph(this.fallback):o}
12
12
  <img
13
13
  src=${t}
14
14
  alt=""
15
- style=${o(this._imageStyle(n))}
15
+ style=${h(this._imageStyle(l))}
16
16
  @load=${()=>{this._imageLoading=!1,this._imageError=!1}}
17
17
  @error=${()=>{this._imageLoading=!1,this._imageError=!0}}
18
18
  />
19
- `}render(){const t=this._outputType();if("empty"===t)return e;let r=e;switch(t){case"iconify":case"img":r=this._renderImage();break;case"unocss":case"css":r=this._renderClassGlyph(this._iconName());break;case"svg":r=this._renderSvgSprite();break;default:r=e}return i`<span class="qxs-icon-wc" style=${o(this._containerStyle())}>${r}</span>`}};c([r({attribute:!1})],h.prototype,"icon",2),c([r({type:String})],h.prototype,"flip",2),c([r({type:Number})],h.prototype,"rotate",2),c([r({type:String})],h.prototype,"color",2),c([r({attribute:!1})],h.prototype,"size",2),c([r({type:String,attribute:"local-icon-prefix"})],h.prototype,"localIconPrefix",2),c([r({type:String})],h.prototype,"fallback",2),c([r({type:String})],h.prototype,"loading",2),c([s()],h.prototype,"_imageLoading",2),c([s()],h.prototype,"_imageError",2),h=c([n("qxs-icon")],h);export{h as QxsIcon};
19
+ `}render(){const t=this._outputType();if(t==="empty")return o;let e=o;switch(t){case"iconify":case"img":e=this._renderImage();break;case"unocss":case"css":e=this._renderClassGlyph(this._iconName());break;case"svg":e=this._renderSvgSprite();break;default:e=o}return c`<span class="qxs-icon-wc" style=${h(this._containerStyle())}>${e}</span>`}};i([n({attribute:!1})],r.prototype,"icon",2);i([n({type:String})],r.prototype,"flip",2);i([n({type:Number})],r.prototype,"rotate",2);i([n({type:String})],r.prototype,"color",2);i([n({attribute:!1})],r.prototype,"size",2);i([n({type:String,attribute:"local-icon-prefix"})],r.prototype,"localIconPrefix",2);i([n({type:String})],r.prototype,"fallback",2);i([n({type:String})],r.prototype,"loading",2);i([u()],r.prototype,"_imageLoading",2);i([u()],r.prototype,"_imageError",2);r=i([m("qxs-icon")],r);export{r as QxsIcon};
20
20
  //# sourceMappingURL=icon.mjs.map