@qxs-bns/components 0.0.91 → 0.0.93
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.
- package/es/base/define.mjs +1 -1
- package/es/base/define.mjs.map +1 -1
- package/es/base/uid.mjs +1 -1
- package/es/base/uid.mjs.map +1 -1
- package/es/data-chart.mjs +15 -14
- package/es/data-chart.mjs.map +1 -1
- package/es/editor/blocksuite-editor.mjs +62 -51
- package/es/editor/blocksuite-editor.mjs.map +1 -1
- package/es/editor/content-format.mjs +8 -1
- package/es/editor/content-format.mjs.map +1 -1
- package/es/editor/index.mjs +1 -1
- package/es/editor/index.mjs.map +1 -1
- package/es/editor/toolbar.mjs +1 -1
- package/es/editor/toolbar.mjs.map +1 -1
- package/es/entry-data-chart.mjs +1 -1
- package/es/entry-editor.mjs +1 -1
- package/es/entry-file-upload.mjs +1 -1
- package/es/entry-fixed-action-bar.mjs +1 -1
- package/es/entry-icon.mjs +1 -1
- package/es/entry-image-upload.mjs +1 -1
- package/es/entry-photo-crop-tool.mjs +1 -1
- package/es/entry-subject.mjs +1 -1
- package/es/file-upload.mjs +25 -18
- package/es/file-upload.mjs.map +1 -1
- package/es/fixed-action-bar.mjs +5 -5
- package/es/fixed-action-bar.mjs.map +1 -1
- package/es/icon.mjs +7 -7
- package/es/icon.mjs.map +1 -1
- package/es/image-upload.mjs +26 -26
- package/es/image-upload.mjs.map +1 -1
- package/es/index.mjs +1 -1
- package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs +59 -1
- package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs.map +1 -1
- package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs +16 -1
- 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
- package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs +62 -0
- package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs.map +1 -0
- package/es/photo-crop-tool.mjs +12 -12
- package/es/photo-crop-tool.mjs.map +1 -1
- package/es/subject/action.mjs +58 -58
- package/es/subject/action.mjs.map +1 -1
- package/es/subject/blank-fill.mjs +80 -80
- package/es/subject/blank-fill.mjs.map +1 -1
- package/es/subject/draft.mjs +1 -1
- package/es/subject/draft.mjs.map +1 -1
- package/es/subject/layout.mjs +4 -4
- package/es/subject/layout.mjs.map +1 -1
- package/es/subject/page-end.mjs +5 -5
- package/es/subject/page-end.mjs.map +1 -1
- package/es/subject/pagination.mjs +1 -1
- package/es/subject/pagination.mjs.map +1 -1
- package/es/subject/runtime.mjs +1 -1
- package/es/subject/runtime.mjs.map +1 -1
- package/es/subject/scale.mjs +53 -50
- package/es/subject/scale.mjs.map +1 -1
- package/es/subject/shared-methods.mjs +1 -1
- package/es/subject/shared-methods.mjs.map +1 -1
- package/es/subject/shared-styles.mjs +53 -15
- package/es/subject/shared-styles.mjs.map +1 -1
- package/es/subject/single-interactions.mjs +2 -0
- package/es/subject/single-interactions.mjs.map +1 -0
- package/es/subject/single-model.mjs +2 -0
- package/es/subject/single-model.mjs.map +1 -0
- package/es/subject/single-state.mjs +2 -0
- package/es/subject/single-state.mjs.map +1 -0
- package/es/subject/single.mjs +177 -177
- package/es/subject/single.mjs.map +1 -1
- package/es/subject/sort-controller.mjs +1 -1
- package/es/subject/sort-controller.mjs.map +1 -1
- package/es/subject/sortable.mjs +13 -13
- package/es/subject/sortable.mjs.map +1 -1
- package/es/subject/sorting-card.mjs +12 -12
- package/es/subject/sorting-card.mjs.map +1 -1
- package/es/subject/subject-shared.mjs +2 -0
- package/es/subject/subject-shared.mjs.map +1 -0
- package/es/subject/text-fill.mjs +73 -73
- package/es/subject/text-fill.mjs.map +1 -1
- package/es/subject/title-prefix.mjs +1 -1
- package/es/subject/title-prefix.mjs.map +1 -1
- package/es/subject/types.mjs +1 -1
- package/es/subject/types.mjs.map +1 -1
- package/lib/base/define.cjs +1 -1
- package/lib/base/define.cjs.map +1 -1
- package/lib/base/uid.cjs +1 -1
- package/lib/base/uid.cjs.map +1 -1
- package/lib/data-chart.cjs +16 -15
- package/lib/data-chart.cjs.map +1 -1
- package/lib/editor/blocksuite-editor.cjs +62 -51
- package/lib/editor/blocksuite-editor.cjs.map +1 -1
- package/lib/editor/content-format.cjs +8 -1
- package/lib/editor/content-format.cjs.map +1 -1
- package/lib/editor/index.cjs +1 -1
- package/lib/editor/index.cjs.map +1 -1
- package/lib/editor/toolbar.cjs +1 -1
- package/lib/editor/toolbar.cjs.map +1 -1
- package/lib/entry-data-chart.cjs +1 -1
- package/lib/entry-editor.cjs +1 -1
- package/lib/entry-file-upload.cjs +1 -1
- package/lib/entry-fixed-action-bar.cjs +1 -1
- package/lib/entry-icon.cjs +1 -1
- package/lib/entry-image-upload.cjs +1 -1
- package/lib/entry-photo-crop-tool.cjs +1 -1
- package/lib/entry-subject.cjs +1 -1
- package/lib/file-upload.cjs +24 -17
- package/lib/file-upload.cjs.map +1 -1
- package/lib/fixed-action-bar.cjs +6 -6
- package/lib/fixed-action-bar.cjs.map +1 -1
- package/lib/icon.cjs +9 -9
- package/lib/icon.cjs.map +1 -1
- package/lib/image-upload.cjs +26 -26
- package/lib/image-upload.cjs.map +1 -1
- package/lib/index.cjs +1 -1
- package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs +59 -1
- package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs.map +1 -1
- package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs +16 -1
- 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
- package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs +62 -0
- package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs.map +1 -0
- package/lib/photo-crop-tool.cjs +11 -11
- package/lib/photo-crop-tool.cjs.map +1 -1
- package/lib/subject/action.cjs +42 -42
- package/lib/subject/action.cjs.map +1 -1
- package/lib/subject/blank-fill.cjs +80 -80
- package/lib/subject/blank-fill.cjs.map +1 -1
- package/lib/subject/draft.cjs +1 -1
- package/lib/subject/draft.cjs.map +1 -1
- package/lib/subject/layout.cjs +4 -4
- package/lib/subject/layout.cjs.map +1 -1
- package/lib/subject/page-end.cjs +4 -4
- package/lib/subject/page-end.cjs.map +1 -1
- package/lib/subject/pagination.cjs +1 -1
- package/lib/subject/pagination.cjs.map +1 -1
- package/lib/subject/runtime.cjs +1 -1
- package/lib/subject/runtime.cjs.map +1 -1
- package/lib/subject/scale.cjs +53 -50
- package/lib/subject/scale.cjs.map +1 -1
- package/lib/subject/shared-methods.cjs +1 -1
- package/lib/subject/shared-methods.cjs.map +1 -1
- package/lib/subject/shared-styles.cjs +54 -16
- package/lib/subject/shared-styles.cjs.map +1 -1
- package/lib/subject/single-interactions.cjs +2 -0
- package/lib/subject/single-interactions.cjs.map +1 -0
- package/lib/subject/single-model.cjs +2 -0
- package/lib/subject/single-model.cjs.map +1 -0
- package/lib/subject/single-state.cjs +2 -0
- package/lib/subject/single-state.cjs.map +1 -0
- package/lib/subject/single.cjs +177 -177
- package/lib/subject/single.cjs.map +1 -1
- package/lib/subject/sort-controller.cjs +1 -1
- package/lib/subject/sort-controller.cjs.map +1 -1
- package/lib/subject/sortable.cjs +15 -15
- package/lib/subject/sortable.cjs.map +1 -1
- package/lib/subject/sorting-card.cjs +12 -12
- package/lib/subject/sorting-card.cjs.map +1 -1
- package/lib/subject/subject-shared.cjs +2 -0
- package/lib/subject/subject-shared.cjs.map +1 -0
- package/lib/subject/text-fill.cjs +81 -81
- package/lib/subject/text-fill.cjs.map +1 -1
- package/lib/subject/title-prefix.cjs +1 -1
- package/lib/subject/title-prefix.cjs.map +1 -1
- package/lib/subject/types.cjs +1 -1
- package/lib/subject/types.cjs.map +1 -1
- package/package.json +5 -5
- package/types/editor/blocksuite-editor.d.ts +2 -0
- package/types/editor/toolbar.d.ts +1 -1
- package/types/file-upload.d.ts +2 -0
- package/types/subject/blank-fill.d.ts +1 -1
- package/types/subject/runtime.d.ts +1 -1
- package/types/subject/scale.d.ts +1 -1
- package/types/subject/single-interactions.d.ts +46 -0
- package/types/subject/single-model.d.ts +88 -0
- package/types/subject/single-state.d.ts +42 -0
- package/types/subject/single.d.ts +7 -85
- package/types/subject/sortable.d.ts +1 -1
- package/types/subject/subject-shared.d.ts +43 -0
- package/types/subject/text-fill.d.ts +1 -1
- package/README.md +0 -562
- 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
- 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
- package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs +0 -2
- package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs.map +0 -1
- package/es/package.json.mjs +0 -2
- package/es/package.json.mjs.map +0 -1
- package/es/src/alert/index.mjs +0 -2
- package/es/src/alert/index.mjs.map +0 -1
- package/es/src/alert/src/alert.mjs +0 -2
- package/es/src/alert/src/alert.mjs.map +0 -1
- package/es/src/components.mjs +0 -2
- package/es/src/components.mjs.map +0 -1
- package/es/src/data-chart/index.mjs +0 -2
- package/es/src/data-chart/index.mjs.map +0 -1
- package/es/src/defaults.mjs +0 -2
- package/es/src/defaults.mjs.map +0 -1
- package/es/src/dialog/src/dialog.mjs +0 -2
- package/es/src/dialog/src/dialog.mjs.map +0 -1
- package/es/src/feedback-plugin/index.mjs +0 -2
- package/es/src/feedback-plugin/index.mjs.map +0 -1
- package/es/src/file-upload/index.mjs +0 -2
- package/es/src/file-upload/index.mjs.map +0 -1
- package/es/src/icon/index.mjs +0 -2
- package/es/src/icon/index.mjs.map +0 -1
- package/es/src/icon/src/icon.mjs +0 -2
- package/es/src/icon/src/icon.mjs.map +0 -1
- package/es/src/image-upload/index.mjs +0 -2
- package/es/src/image-upload/index.mjs.map +0 -1
- package/es/src/make-installer.mjs +0 -2
- package/es/src/make-installer.mjs.map +0 -1
- package/es/src/message/src/message.mjs +0 -2
- package/es/src/message/src/message.mjs.map +0 -1
- package/es/src/photo-crop-tool/index.mjs +0 -2
- package/es/src/photo-crop-tool/index.mjs.map +0 -1
- package/es/src/tiny-mce-editor/index.mjs +0 -2
- package/es/src/tiny-mce-editor/index.mjs.map +0 -1
- package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +0 -2
- package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +0 -1
- package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs +0 -2
- package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs.map +0 -1
- package/es/src/ui/button/index.mjs +0 -2
- package/es/src/ui/button/index.mjs.map +0 -1
- package/es/src/ui/checkbox/index.mjs +0 -2
- package/es/src/ui/checkbox/index.mjs.map +0 -1
- package/es/src/ui/dialog/index.mjs +0 -2
- package/es/src/ui/dialog/index.mjs.map +0 -1
- package/es/src/ui/input/index.mjs +0 -2
- package/es/src/ui/input/index.mjs.map +0 -1
- package/es/src/ui/input-number/index.mjs +0 -2
- package/es/src/ui/input-number/index.mjs.map +0 -1
- package/es/src/ui/layout/index.mjs +0 -2
- package/es/src/ui/layout/index.mjs.map +0 -1
- package/es/src/ui/link/index.mjs +0 -2
- package/es/src/ui/link/index.mjs.map +0 -1
- package/es/src/ui/popover/index.mjs +0 -2
- package/es/src/ui/popover/index.mjs.map +0 -1
- package/es/src/ui/radio/index.mjs +0 -2
- package/es/src/ui/radio/index.mjs.map +0 -1
- package/es/src/ui/scrollbar/index.mjs +0 -2
- package/es/src/ui/scrollbar/index.mjs.map +0 -1
- package/es/src/ui/select/index.mjs +0 -2
- package/es/src/ui/select/index.mjs.map +0 -1
- package/es/src/ui/table/index.mjs +0 -2
- package/es/src/ui/table/index.mjs.map +0 -1
- package/es/src/ui/tag/index.mjs +0 -2
- package/es/src/ui/tag/index.mjs.map +0 -1
- package/es/src/wc-bridge.mjs +0 -2
- package/es/src/wc-bridge.mjs.map +0 -1
- package/es/src/withInstall.mjs +0 -2
- package/es/src/withInstall.mjs.map +0 -1
- 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
- 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
- package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs +0 -2
- package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs.map +0 -1
- package/lib/package.json.cjs +0 -2
- package/lib/package.json.cjs.map +0 -1
- package/lib/src/alert/index.cjs +0 -2
- package/lib/src/alert/index.cjs.map +0 -1
- package/lib/src/alert/src/alert.cjs +0 -2
- package/lib/src/alert/src/alert.cjs.map +0 -1
- package/lib/src/components.cjs +0 -2
- package/lib/src/components.cjs.map +0 -1
- package/lib/src/data-chart/index.cjs +0 -2
- package/lib/src/data-chart/index.cjs.map +0 -1
- package/lib/src/defaults.cjs +0 -2
- package/lib/src/defaults.cjs.map +0 -1
- package/lib/src/dialog/src/dialog.cjs +0 -2
- package/lib/src/dialog/src/dialog.cjs.map +0 -1
- package/lib/src/feedback-plugin/index.cjs +0 -2
- package/lib/src/feedback-plugin/index.cjs.map +0 -1
- package/lib/src/file-upload/index.cjs +0 -2
- package/lib/src/file-upload/index.cjs.map +0 -1
- package/lib/src/icon/index.cjs +0 -2
- package/lib/src/icon/index.cjs.map +0 -1
- package/lib/src/icon/src/icon.cjs +0 -2
- package/lib/src/icon/src/icon.cjs.map +0 -1
- package/lib/src/image-upload/index.cjs +0 -2
- package/lib/src/image-upload/index.cjs.map +0 -1
- package/lib/src/make-installer.cjs +0 -2
- package/lib/src/make-installer.cjs.map +0 -1
- package/lib/src/message/src/message.cjs +0 -2
- package/lib/src/message/src/message.cjs.map +0 -1
- package/lib/src/photo-crop-tool/index.cjs +0 -2
- package/lib/src/photo-crop-tool/index.cjs.map +0 -1
- package/lib/src/tiny-mce-editor/index.cjs +0 -2
- package/lib/src/tiny-mce-editor/index.cjs.map +0 -1
- package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +0 -2
- package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +0 -1
- package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs +0 -2
- package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs.map +0 -1
- package/lib/src/ui/button/index.cjs +0 -2
- package/lib/src/ui/button/index.cjs.map +0 -1
- package/lib/src/ui/checkbox/index.cjs +0 -2
- package/lib/src/ui/checkbox/index.cjs.map +0 -1
- package/lib/src/ui/dialog/index.cjs +0 -2
- package/lib/src/ui/dialog/index.cjs.map +0 -1
- package/lib/src/ui/input/index.cjs +0 -2
- package/lib/src/ui/input/index.cjs.map +0 -1
- package/lib/src/ui/input-number/index.cjs +0 -2
- package/lib/src/ui/input-number/index.cjs.map +0 -1
- package/lib/src/ui/layout/index.cjs +0 -2
- package/lib/src/ui/layout/index.cjs.map +0 -1
- package/lib/src/ui/link/index.cjs +0 -2
- package/lib/src/ui/link/index.cjs.map +0 -1
- package/lib/src/ui/popover/index.cjs +0 -2
- package/lib/src/ui/popover/index.cjs.map +0 -1
- package/lib/src/ui/radio/index.cjs +0 -2
- package/lib/src/ui/radio/index.cjs.map +0 -1
- package/lib/src/ui/scrollbar/index.cjs +0 -2
- package/lib/src/ui/scrollbar/index.cjs.map +0 -1
- package/lib/src/ui/select/index.cjs +0 -2
- package/lib/src/ui/select/index.cjs.map +0 -1
- package/lib/src/ui/table/index.cjs +0 -2
- package/lib/src/ui/table/index.cjs.map +0 -1
- package/lib/src/ui/tag/index.cjs +0 -2
- package/lib/src/ui/tag/index.cjs.map +0 -1
- package/lib/src/wc-bridge.cjs +0 -2
- package/lib/src/wc-bridge.cjs.map +0 -1
- package/lib/src/withInstall.cjs +0 -2
- package/lib/src/withInstall.cjs.map +0 -1
- package/types/index.d.ts.map +0 -1
- package/types/src/alert/index.d.ts +0 -66
- package/types/src/alert/index.d.ts.map +0 -1
- package/types/src/alert/src/alert.d.ts +0 -73
- package/types/src/alert/src/alert.d.ts.map +0 -1
- package/types/src/components.d.ts +0 -10
- package/types/src/components.d.ts.map +0 -1
- package/types/src/data-chart/index.d.ts +0 -13
- package/types/src/data-chart/index.d.ts.map +0 -1
- package/types/src/defaults.d.ts +0 -6
- package/types/src/defaults.d.ts.map +0 -1
- package/types/src/dialog/index.d.ts +0 -3
- package/types/src/dialog/index.d.ts.map +0 -1
- package/types/src/dialog/src/dialog.d.ts +0 -25
- package/types/src/dialog/src/dialog.d.ts.map +0 -1
- package/types/src/feedback-plugin/index.d.ts +0 -9
- package/types/src/feedback-plugin/index.d.ts.map +0 -1
- package/types/src/file-upload/index.d.ts +0 -12
- package/types/src/file-upload/index.d.ts.map +0 -1
- package/types/src/icon/index.d.ts +0 -56
- package/types/src/icon/index.d.ts.map +0 -1
- package/types/src/icon/src/icon.d.ts +0 -62
- package/types/src/icon/src/icon.d.ts.map +0 -1
- package/types/src/image-upload/index.d.ts +0 -12
- package/types/src/image-upload/index.d.ts.map +0 -1
- package/types/src/make-installer.d.ts +0 -6
- package/types/src/make-installer.d.ts.map +0 -1
- package/types/src/message/index.d.ts +0 -3
- package/types/src/message/index.d.ts.map +0 -1
- package/types/src/message/src/message.d.ts +0 -21
- package/types/src/message/src/message.d.ts.map +0 -1
- package/types/src/message/src/toaster.vue.d.ts +0 -3
- package/types/src/message/src/toaster.vue.d.ts.map +0 -1
- package/types/src/photo-crop-tool/index.d.ts +0 -12
- package/types/src/photo-crop-tool/index.d.ts.map +0 -1
- package/types/src/subject-action/index.d.ts +0 -93
- package/types/src/subject-action/index.d.ts.map +0 -1
- package/types/src/subject-action/src/subject-action.vue.d.ts +0 -92
- package/types/src/subject-action/src/subject-action.vue.d.ts.map +0 -1
- package/types/src/subject-layout/index.d.ts +0 -30
- package/types/src/subject-layout/index.d.ts.map +0 -1
- package/types/src/subject-layout/src/subject-layout.vue.d.ts +0 -20
- package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +0 -1
- package/types/src/subject-list/index.d.ts +0 -20
- package/types/src/subject-list/index.d.ts.map +0 -1
- package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts +0 -24
- package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts.map +0 -1
- package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts +0 -32
- package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +0 -1
- package/types/src/subject-list/src/components/subject-scale.vue.d.ts +0 -29
- package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +0 -1
- package/types/src/subject-list/src/components/subject-single.vue.d.ts +0 -37
- package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +0 -1
- package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts +0 -34
- package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +0 -1
- package/types/src/subject-list/src/subject-list.vue.d.ts +0 -21
- package/types/src/subject-list/src/subject-list.vue.d.ts.map +0 -1
- package/types/src/subject-type/index.d.ts +0 -8
- package/types/src/subject-type/index.d.ts.map +0 -1
- package/types/src/subject-type/src/subject-type.vue.d.ts +0 -7
- package/types/src/subject-type/src/subject-type.vue.d.ts.map +0 -1
- package/types/src/tiny-mce-editor/index.d.ts +0 -20
- package/types/src/tiny-mce-editor/index.d.ts.map +0 -1
- package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts +0 -32
- package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts.map +0 -1
- package/types/src/ui/button/index.d.ts +0 -96
- package/types/src/ui/button/index.d.ts.map +0 -1
- package/types/src/ui/checkbox/index.d.ts +0 -111
- package/types/src/ui/checkbox/index.d.ts.map +0 -1
- package/types/src/ui/dialog/index.d.ts +0 -134
- package/types/src/ui/dialog/index.d.ts.map +0 -1
- package/types/src/ui/index.d.ts +0 -16
- package/types/src/ui/index.d.ts.map +0 -1
- package/types/src/ui/input/index.d.ts +0 -132
- package/types/src/ui/input/index.d.ts.map +0 -1
- package/types/src/ui/input-number/index.d.ts +0 -106
- package/types/src/ui/input-number/index.d.ts.map +0 -1
- package/types/src/ui/layout/index.d.ts +0 -373
- package/types/src/ui/layout/index.d.ts.map +0 -1
- package/types/src/ui/link/index.d.ts +0 -57
- package/types/src/ui/link/index.d.ts.map +0 -1
- package/types/src/ui/popover/index.d.ts +0 -89
- package/types/src/ui/popover/index.d.ts.map +0 -1
- package/types/src/ui/radio/index.d.ts +0 -84
- package/types/src/ui/radio/index.d.ts.map +0 -1
- package/types/src/ui/scrollbar/index.d.ts +0 -35
- package/types/src/ui/scrollbar/index.d.ts.map +0 -1
- package/types/src/ui/select/index.d.ts +0 -113
- package/types/src/ui/select/index.d.ts.map +0 -1
- package/types/src/ui/table/index.d.ts +0 -152
- package/types/src/ui/table/index.d.ts.map +0 -1
- package/types/src/ui/tag/index.d.ts +0 -69
- package/types/src/ui/tag/index.d.ts.map +0 -1
- package/types/src/wc-bridge.d.ts +0 -23
- package/types/src/wc-bridge.d.ts.map +0 -1
- package/types/src/withInstall.d.ts +0 -4
- package/types/src/withInstall.d.ts.map +0 -1
- package/types/tsconfig.tsbuildinfo +0 -1
package/es/icon.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.mjs","sources":["../../../packages/components/src/icon.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\ntype IconOutputType = 'iconify' | 'unocss' | 'css' | 'img' | 'svg' | 'empty'\n\n@safeCustomElement('qxs-icon')\nexport class QxsIcon extends LitElement {\n @property({ attribute: false }) icon = ''\n @property({ type: String }) flip: 'horizontal' | 'vertical' | 'both' | '' = ''\n @property({ type: Number }) rotate = 0\n @property({ type: String }) color = ''\n @property({ attribute: false }) size: string | number | undefined\n @property({ type: String, attribute: 'local-icon-prefix' }) localIconPrefix = 'icon-'\n @property({ type: String }) fallback = ''\n @property({ type: String }) loading = ''\n\n @state() private _imageLoading = false\n @state() private _imageError = false\n\n createRenderRoot() {\n return this\n }\n\n connectedCallback() {\n super.connectedCallback()\n this._resetImageState()\n }\n\n protected willUpdate(changed: Map<string, unknown>) {\n if (changed.has('icon') || (changed.has('color') && this._outputType() === 'iconify')) {\n this._resetImageState()\n }\n }\n\n private _outputType(): IconOutputType {\n if (typeof this.icon !== 'string') {\n return 'empty'\n }\n\n const icon = this.icon.trim()\n if (!icon) {\n return 'empty'\n }\n\n const hasPathFeatures = (value: string) => /^\\.{1,2}\\//.test(value) || value.startsWith('/') || value.includes('/')\n if (/^https?:\\/\\//.test(icon) || hasPathFeatures(icon)) {\n return 'img'\n }\n\n if (/^i-[^:]+:[^:]+/.test(icon)) {\n return 'unocss'\n }\n\n if (icon.startsWith('i-') && !icon.includes(':')) {\n return 'css'\n }\n\n if (icon.includes(':') && !icon.startsWith('i-')) {\n return 'iconify'\n }\n\n if (/^[\\w-]+$/.test(icon) && !icon.startsWith('i-')) {\n return 'svg'\n }\n\n return 'css'\n }\n\n private _iconName() {\n return typeof this.icon === 'string' ? this.icon.trim() : ''\n }\n\n private _resetImageState() {\n const type = this._outputType()\n if (type === 'img' || type === 'iconify') {\n this._imageLoading = true\n this._imageError = false\n return\n }\n\n this._imageLoading = false\n this._imageError = false\n }\n\n private _formatSize(size: string | number | undefined) {\n if (size == null || size === '') {\n return ''\n }\n\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n return size\n }\n\n private _transformStyle() {\n const transforms: string[] = []\n\n switch (this.flip) {\n case 'horizontal':\n transforms.push('rotateY(180deg)')\n break\n case 'vertical':\n transforms.push('rotateX(180deg)')\n break\n case 'both':\n transforms.push('rotateX(180deg)', 'rotateY(180deg)')\n break\n }\n\n if (this.rotate) {\n transforms.push(`rotate(${this.rotate % 360}deg)`)\n }\n\n return transforms.join(' ')\n }\n\n private _containerStyle() {\n const formattedSize = this._formatSize(this.size) || '1em'\n const transform = this._transformStyle()\n\n return {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: formattedSize,\n height: formattedSize,\n fontSize: formattedSize,\n lineHeight: '1',\n color: this.color || 'currentColor',\n verticalAlign: '-2px',\n transform: transform || undefined,\n transformOrigin: 'center',\n fill: 'currentColor',\n }\n }\n\n private _glyphStyle() {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n lineHeight: '1',\n color: 'inherit',\n fontSize: 'inherit',\n flexShrink: '0',\n }\n }\n\n private _imageStyle(visible = true) {\n return {\n display: visible ? 'block' : 'none',\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n flexShrink: '0',\n }\n }\n\n private _imageSource() {\n if (this._outputType() === 'iconify') {\n const url = new URL(`https://api.iconify.design/${this._iconName()}.svg`)\n if (this.color) {\n url.searchParams.set('color', this.color)\n }\n return url.toString()\n }\n return this._iconName()\n }\n\n private _renderClassGlyph(iconClass: string) {\n const classes = iconClass.split(/\\s+/).filter(Boolean).join(' ')\n if (!classes) {\n return nothing\n }\n\n return html`<i class=${classes} style=${styleMap(this._glyphStyle())} aria-hidden=\"true\"></i>`\n }\n\n private _renderSvgSprite() {\n const iconName = this._iconName()\n if (!iconName) {\n return nothing\n }\n\n return html`\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 1024 1024\"\n style=${styleMap({\n display: 'block',\n width: '100%',\n height: '100%',\n fill: 'currentColor',\n flexShrink: '0',\n })}\n >\n <use href=${`#${this.localIconPrefix}${iconName}`}></use>\n </svg>\n `\n }\n\n private _renderImage() {\n const source = this._imageSource()\n if (!source) {\n return nothing\n }\n\n const showFallback = this._imageError && !!this.fallback\n const showLoading = !this._imageError && this._imageLoading && !!this.loading\n const showImage = !this._imageError && !showLoading\n\n return html`\n ${showLoading ? this._renderClassGlyph(this.loading) : nothing}\n ${showFallback ? this._renderClassGlyph(this.fallback) : nothing}\n <img\n src=${source}\n alt=\"\"\n style=${styleMap(this._imageStyle(showImage))}\n @load=${() => {\n this._imageLoading = false\n this._imageError = false\n }}\n @error=${() => {\n this._imageLoading = false\n this._imageError = true\n }}\n />\n `\n }\n\n render() {\n const type = this._outputType()\n if (type === 'empty') {\n return nothing\n }\n\n let content: ReturnType<typeof html> | typeof nothing = nothing\n\n switch (type) {\n case 'iconify':\n case 'img':\n content = this._renderImage()\n break\n case 'unocss':\n case 'css':\n content = this._renderClassGlyph(this._iconName())\n break\n case 'svg':\n content = this._renderSvgSprite()\n break\n default:\n content = nothing\n }\n\n return html`<span class=\"qxs-icon-wc\" style=${styleMap(this._containerStyle())}>${content}</span>`\n }\n}\n\nexport function register() {\n // auto-registered via @safeCustomElement\n}\n"],"names":["QxsIcon","LitElement","constructor","super","arguments","this","icon","flip","rotate","color","localIconPrefix","fallback","loading","_imageLoading","_imageError","createRenderRoot","connectedCallback","_resetImageState","willUpdate","changed","has","_outputType","trim","test","value","startsWith","includes","_iconName","type","_formatSize","size","_transformStyle","transforms","push","join","_containerStyle","formattedSize","transform","position","display","alignItems","justifyContent","width","height","fontSize","lineHeight","verticalAlign","transformOrigin","fill","_glyphStyle","flexShrink","_imageStyle","objectFit","_imageSource","url","URL","searchParams","set","toString","_renderClassGlyph","iconClass","classes","split","filter","Boolean","html","styleMap","nothing","_renderSvgSprite","iconName","_renderImage","source","showFallback","showLoading","showImage","render","content","__decorateClass","property","attribute","prototype","String","Number","state","safeCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"icon.mjs","sources":["../../../packages/components/src/icon.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\ntype IconOutputType = 'iconify' | 'unocss' | 'css' | 'img' | 'svg' | 'empty'\n\n@safeCustomElement('qxs-icon')\nexport class QxsIcon extends LitElement {\n @property({ attribute: false }) icon = ''\n @property({ type: String }) flip: 'horizontal' | 'vertical' | 'both' | '' = ''\n @property({ type: Number }) rotate = 0\n @property({ type: String }) color = ''\n @property({ attribute: false }) size: string | number | undefined\n @property({ type: String, attribute: 'local-icon-prefix' }) localIconPrefix = 'icon-'\n @property({ type: String }) fallback = ''\n @property({ type: String }) loading = ''\n\n @state() private _imageLoading = false\n @state() private _imageError = false\n\n createRenderRoot() {\n return this\n }\n\n connectedCallback() {\n super.connectedCallback()\n this._resetImageState()\n }\n\n protected willUpdate(changed: Map<string, unknown>) {\n if (changed.has('icon') || (changed.has('color') && this._outputType() === 'iconify')) {\n this._resetImageState()\n }\n }\n\n private _outputType(): IconOutputType {\n if (typeof this.icon !== 'string') {\n return 'empty'\n }\n\n const icon = this.icon.trim()\n if (!icon) {\n return 'empty'\n }\n\n const hasPathFeatures = (value: string) => /^\\.{1,2}\\//.test(value) || value.startsWith('/') || value.includes('/')\n if (/^https?:\\/\\//.test(icon) || hasPathFeatures(icon)) {\n return 'img'\n }\n\n if (/^i-[^:]+:[^:]+/.test(icon)) {\n return 'unocss'\n }\n\n if (icon.startsWith('i-') && !icon.includes(':')) {\n return 'css'\n }\n\n if (icon.includes(':') && !icon.startsWith('i-')) {\n return 'iconify'\n }\n\n if (/^[\\w-]+$/.test(icon) && !icon.startsWith('i-')) {\n return 'svg'\n }\n\n return 'css'\n }\n\n private _iconName() {\n return typeof this.icon === 'string' ? this.icon.trim() : ''\n }\n\n private _resetImageState() {\n const type = this._outputType()\n if (type === 'img' || type === 'iconify') {\n this._imageLoading = true\n this._imageError = false\n return\n }\n\n this._imageLoading = false\n this._imageError = false\n }\n\n private _formatSize(size: string | number | undefined) {\n if (size == null || size === '') {\n return ''\n }\n\n if (typeof size === 'number') {\n return `${size}px`\n }\n\n if (/^\\d+(?:\\.\\d+)?$/.test(size)) {\n return `${size}px`\n }\n\n return size\n }\n\n private _transformStyle() {\n const transforms: string[] = []\n\n switch (this.flip) {\n case 'horizontal':\n transforms.push('rotateY(180deg)')\n break\n case 'vertical':\n transforms.push('rotateX(180deg)')\n break\n case 'both':\n transforms.push('rotateX(180deg)', 'rotateY(180deg)')\n break\n }\n\n if (this.rotate) {\n transforms.push(`rotate(${this.rotate % 360}deg)`)\n }\n\n return transforms.join(' ')\n }\n\n private _containerStyle() {\n const formattedSize = this._formatSize(this.size) || '1em'\n const transform = this._transformStyle()\n\n return {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: formattedSize,\n height: formattedSize,\n fontSize: formattedSize,\n lineHeight: '1',\n color: this.color || 'currentColor',\n verticalAlign: '-2px',\n transform: transform || undefined,\n transformOrigin: 'center',\n fill: 'currentColor',\n }\n }\n\n private _glyphStyle() {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n lineHeight: '1',\n color: 'inherit',\n fontSize: 'inherit',\n flexShrink: '0',\n }\n }\n\n private _imageStyle(visible = true) {\n return {\n display: visible ? 'block' : 'none',\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n flexShrink: '0',\n }\n }\n\n private _imageSource() {\n if (this._outputType() === 'iconify') {\n const url = new URL(`https://api.iconify.design/${this._iconName()}.svg`)\n if (this.color) {\n url.searchParams.set('color', this.color)\n }\n return url.toString()\n }\n return this._iconName()\n }\n\n private _renderClassGlyph(iconClass: string) {\n const classes = iconClass.split(/\\s+/).filter(Boolean).join(' ')\n if (!classes) {\n return nothing\n }\n\n return html`<i class=${classes} style=${styleMap(this._glyphStyle())} aria-hidden=\"true\"></i>`\n }\n\n private _renderSvgSprite() {\n const iconName = this._iconName()\n if (!iconName) {\n return nothing\n }\n\n return html`\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 1024 1024\"\n style=${styleMap({\n display: 'block',\n width: '100%',\n height: '100%',\n fill: 'currentColor',\n flexShrink: '0',\n })}\n >\n <use href=${`#${this.localIconPrefix}${iconName}`}></use>\n </svg>\n `\n }\n\n private _renderImage() {\n const source = this._imageSource()\n if (!source) {\n return nothing\n }\n\n const showFallback = this._imageError && !!this.fallback\n const showLoading = !this._imageError && this._imageLoading && !!this.loading\n const showImage = !this._imageError && !showLoading\n\n return html`\n ${showLoading ? this._renderClassGlyph(this.loading) : nothing}\n ${showFallback ? this._renderClassGlyph(this.fallback) : nothing}\n <img\n src=${source}\n alt=\"\"\n style=${styleMap(this._imageStyle(showImage))}\n @load=${() => {\n this._imageLoading = false\n this._imageError = false\n }}\n @error=${() => {\n this._imageLoading = false\n this._imageError = true\n }}\n />\n `\n }\n\n render() {\n const type = this._outputType()\n if (type === 'empty') {\n return nothing\n }\n\n let content: ReturnType<typeof html> | typeof nothing = nothing\n\n switch (type) {\n case 'iconify':\n case 'img':\n content = this._renderImage()\n break\n case 'unocss':\n case 'css':\n content = this._renderClassGlyph(this._iconName())\n break\n case 'svg':\n content = this._renderSvgSprite()\n break\n default:\n content = nothing\n }\n\n return html`<span class=\"qxs-icon-wc\" style=${styleMap(this._containerStyle())}>${content}</span>`\n }\n}\n\nexport function register() {\n // auto-registered via @safeCustomElement\n}\n"],"names":["QxsIcon","LitElement","changed","icon","hasPathFeatures","value","type","size","transforms","formattedSize","transform","visible","url","iconClass","classes","html","styleMap","nothing","iconName","source","showFallback","showLoading","showImage","content","__decorateClass","property","state","safeCustomElement"],"mappings":"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"}
|
package/es/image-upload.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{html as
|
|
1
|
+
import{html as p,css as v,LitElement as f,nothing as d}from"lit";import{property as l,state as c,query as m}from"lit/decorators.js";import{repeat as b}from"lit/directives/repeat.js";import{styleMap as _}from"lit/directives/style-map.js";import{safeCustomElement as y}from"./base/define.mjs";var w=Object.defineProperty,x=Object.getOwnPropertyDescriptor,n=(e,s,t,r)=>{for(var o=r>1?void 0:r?x(s,t):s,a=e.length-1,h;a>=0;a--)(h=e[a])&&(o=(r?h(s,t,o):h(o))||o);return r&&o&&w(s,t,o),o};function F(e){try{return JSON.parse(e)}catch{return e}}const k=p`
|
|
2
2
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
3
3
|
<path
|
|
4
4
|
d="M1.5 12s3.5-6 10.5-6 10.5 6 10.5 6-3.5 6-10.5 6S1.5 12 1.5 12Z"
|
|
@@ -17,7 +17,7 @@ import{html as e,css as t,LitElement as i,nothing as s}from"lit";import{property
|
|
|
17
17
|
stroke-width="1.8"
|
|
18
18
|
/>
|
|
19
19
|
</svg>
|
|
20
|
-
|
|
20
|
+
`,$=p`
|
|
21
21
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
22
22
|
<path
|
|
23
23
|
d="M7 7l10 10M17 7L7 17"
|
|
@@ -27,45 +27,45 @@ import{html as e,css as t,LitElement as i,nothing as s}from"lit";import{property
|
|
|
27
27
|
stroke-width="1.9"
|
|
28
28
|
/>
|
|
29
29
|
</svg>
|
|
30
|
-
`;let
|
|
31
|
-
<div class="upload" style=${
|
|
30
|
+
`;let i=class extends f{constructor(){super(...arguments),this.action="",this.name="file",this.size=20,this.width=160,this.height=90,this.accept="image/jpeg,image/jpg,image/png,image/gif",this.placeholder="上传图片",this.notip=!1,this.tipText="",this.disabled=!1,this.limit=1,this.fileList=[],this._internalFiles=[],this._viewerVisible=!1,this._viewerIndex=0,this._message="",this._messageType="",this._hasScrollLock=!1,this._pendingRequests=new Map}connectedCallback(){super.connectedCallback(),this._syncFileList()}disconnectedCallback(){this._syncScrollLock(!1),super.disconnectedCallback(),this._pendingRequests.forEach(e=>e.abort()),this._pendingRequests.clear(),this._internalFiles.forEach(e=>this._revokeFileUrl(e))}updated(e){e.has("fileList")&&this._syncFileList(),e.has("_viewerVisible")&&this._syncScrollLock(this._viewerVisible)}get _exts(){return this.accept.split(",").map(e=>e.split("/").pop()?.toLowerCase()??"").filter(Boolean)}get _tipMessage(){if(this.tipText)return this.tipText;const e=`支持 ${this._exts.join(" / ")} 格式,大小不超过 ${this.size}MB`,s=this.width&&this.height?`,建议尺寸 ${this.width}×${this.height}`:"";return e+s}_syncFileList(){this._internalFiles=[...this.fileList]}_setMessage(e,s){this._messageType=e,this._message=s}_clearMessage(){this._messageType="",this._message=""}_revokeFileUrl(e){e.url?.startsWith("blob:")&&URL.revokeObjectURL(e.url)}_emitFileListChange(){const e={fileList:this._internalFiles.slice()};this.dispatchEvent(new CustomEvent("file-list-change",{detail:e,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("update:fileList",{detail:e,bubbles:!0,composed:!0}))}_emitSuccess(e){this.dispatchEvent(new CustomEvent("upload-success",{detail:e,bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("success",{detail:e,bubbles:!0,composed:!0}))}_getFileKey(e){return String(e.uid??e.name)}_updateFileByKey(e,s){let t=!1;return this._internalFiles=this._internalFiles.map(r=>this._getFileKey(r)!==e?r:(t=!0,s(r))),t}_emitRemove(e){this.dispatchEvent(new CustomEvent("remove",{detail:{file:e},bubbles:!0,composed:!0}))}_validateFile(e){const s=e.name.split(".").pop()?.toLowerCase()??"";return this._exts.some(o=>o===s)?e.size/1024/1024>this.size?(this._setMessage("error",`图片大小不能超过 ${this.size}MB`),!1):!0:(this._setMessage("error",`仅支持上传 ${this._exts.join(" / ")} 格式的图片`),!1)}_handleSelectedFiles(e){if(this.disabled||!e.length)return;this._clearMessage();const s=e.filter(t=>this._validateFile(t));if(s.length){if(!this.action){this._setMessage("warning","请先配置上传地址 action");return}if(this._internalFiles.length+s.length>this.limit){this._setMessage("warning",`最多上传 ${this.limit} 张图片`);return}s.forEach(t=>{const r={uid:Date.now()+Math.random(),name:t.name,size:t.size,status:"uploading",progress:0,url:URL.createObjectURL(t),file:t};this._internalFiles=[...this._internalFiles,r],this._emitFileListChange(),this._uploadFile(t,r)})}}_handleInputChange(e){const s=e.target,t=s.files;t&&(this._handleSelectedFiles(Array.from(t)),s.value="")}_uploadFile(e,s){const t=new FormData;t.append(this.name,e),this.data&&Object.entries(this.data).forEach(([a,h])=>{t.append(a,h)});const r=new XMLHttpRequest,o=this._getFileKey(s);r.open("POST",this.action),this._pendingRequests.set(o,r),this.headers&&Object.entries(this.headers).forEach(([a,h])=>{r.setRequestHeader(a,h)}),r.upload.onprogress=a=>{if(a.lengthComputable){const h=Math.floor(a.loaded/a.total*100);this._updateFileByKey(o,u=>({...u,progress:h}))}},r.onload=()=>{if(this._pendingRequests.get(o)===r)if(this._pendingRequests.delete(o),r.status>=200&&r.status<300){const a=F(r.responseText);if(!this._updateFileByKey(o,g=>({...g,status:"success",progress:100})))return;this._emitFileListChange();const u=this._internalFiles.find(g=>this._getFileKey(g)===o);if(!u)return;this._emitSuccess({response:a,file:{...u},files:this._internalFiles.slice()})}else this._updateFileByKey(o,a=>({...a,status:"fail",progress:0})),this._setMessage("error","上传失败")},r.onerror=()=>{this._pendingRequests.get(o)===r&&(this._pendingRequests.delete(o),this._updateFileByKey(o,a=>({...a,status:"fail",progress:0})),this._setMessage("error","上传失败"))},r.onabort=()=>{this._pendingRequests.get(o)===r&&this._pendingRequests.delete(o)},r.send(t)}_handlePreview(e){this._viewerIndex=e,this._viewerVisible=!0}_closeViewer(){this._viewerVisible=!1}_prevImage(){this._viewerIndex=(this._viewerIndex-1+this._internalFiles.length)%this._internalFiles.length}_nextImage(){this._viewerIndex=(this._viewerIndex+1)%this._internalFiles.length}_handleRemove(e){if(this.disabled)return;const s=this._internalFiles[e];if(!s)return;const t=this._getFileKey(s),r=this._pendingRequests.get(t);r&&(this._pendingRequests.delete(t),r.abort()),this._revokeFileUrl(s),this._internalFiles=this._internalFiles.filter((o,a)=>a!==e),this._emitFileListChange(),this._emitRemove(s),this._viewerIndex>=this._internalFiles.length&&(this._viewerIndex=Math.max(0,this._internalFiles.length-1)),this._internalFiles.length||(this._viewerVisible=!1)}_syncScrollLock(e){if(typeof document>"u")return;const s=document.documentElement,t=document.body;if(e){if(this._hasScrollLock)return;i._scrollLockCount===0&&(i._previousHtmlOverflow=s.style.overflow,i._previousBodyOverflow=t.style.overflow,s.style.overflow="hidden",t.style.overflow="hidden"),i._scrollLockCount+=1,this._hasScrollLock=!0;return}this._hasScrollLock&&(i._scrollLockCount=Math.max(0,i._scrollLockCount-1),this._hasScrollLock=!1,i._scrollLockCount===0&&(s.style.overflow=i._previousHtmlOverflow,t.style.overflow=i._previousBodyOverflow,i._previousHtmlOverflow="",i._previousBodyOverflow=""))}render(){const e={"--upload-width":`${this.width}px`,"--upload-height":`${this.height}px`},s=this._internalFiles[this._viewerIndex];return p`
|
|
31
|
+
<div class="upload" style=${_(e)} part="container">
|
|
32
32
|
<div class="list" part="list">
|
|
33
|
-
${
|
|
33
|
+
${b(this._internalFiles,t=>String(t.uid??t.name),(t,r)=>p`
|
|
34
34
|
<div class="item" part="item">
|
|
35
|
-
${t.url?
|
|
35
|
+
${t.url?p`<img src=${t.url} alt=${t.name} part="image">`:p`<div class="placeholder" part="placeholder">无图片</div>`}
|
|
36
36
|
|
|
37
|
-
${"uploading"
|
|
37
|
+
${t.status==="uploading"?p`
|
|
38
38
|
<div class="progress" part="progress">
|
|
39
|
-
<div class="progress-bar" style=${
|
|
39
|
+
<div class="progress-bar" style=${_({width:`${t.progress??0}%`})}></div>
|
|
40
40
|
</div>
|
|
41
|
-
`:
|
|
41
|
+
`:d}
|
|
42
42
|
|
|
43
43
|
<div class="actions" part="actions">
|
|
44
|
-
${t.url?
|
|
44
|
+
${t.url?p`
|
|
45
45
|
<button
|
|
46
46
|
class="action"
|
|
47
47
|
data-action="preview"
|
|
48
48
|
type="button"
|
|
49
49
|
aria-label="预览图片"
|
|
50
|
-
@click=${()=>this._handlePreview(
|
|
50
|
+
@click=${()=>this._handlePreview(r)}
|
|
51
51
|
>
|
|
52
|
-
${
|
|
52
|
+
${k}
|
|
53
53
|
</button>
|
|
54
|
-
`:
|
|
54
|
+
`:d}
|
|
55
55
|
<button
|
|
56
56
|
class="action ${this.disabled?"is-disabled":""}"
|
|
57
57
|
data-action="remove"
|
|
58
58
|
type="button"
|
|
59
59
|
aria-label="删除图片"
|
|
60
|
-
@click=${()=>this._handleRemove(
|
|
60
|
+
@click=${()=>this._handleRemove(r)}
|
|
61
61
|
>
|
|
62
|
-
${
|
|
62
|
+
${$}
|
|
63
63
|
</button>
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
66
66
|
`)}
|
|
67
67
|
|
|
68
|
-
${this._internalFiles.length<this.limit?
|
|
68
|
+
${this._internalFiles.length<this.limit?p`
|
|
69
69
|
<label class="add ${this.disabled?"is-disabled":""}" part="add">
|
|
70
70
|
<input
|
|
71
71
|
type="file"
|
|
@@ -79,32 +79,32 @@ import{html as e,css as t,LitElement as i,nothing as s}from"lit";import{property
|
|
|
79
79
|
<div>${this.placeholder}</div>
|
|
80
80
|
</div>
|
|
81
81
|
</label>
|
|
82
|
-
`:
|
|
82
|
+
`:d}
|
|
83
83
|
</div>
|
|
84
84
|
|
|
85
|
-
${this._message?
|
|
85
|
+
${this._message?p`<div class="message ${this._messageType}" part="message">${this._message}</div>`:d}
|
|
86
86
|
|
|
87
|
-
${this.notip?
|
|
87
|
+
${this.notip?d:p`
|
|
88
88
|
<div class="tip" part="tip">
|
|
89
89
|
<slot name="tip">${this._tipMessage}</slot>
|
|
90
90
|
</div>
|
|
91
91
|
`}
|
|
92
92
|
|
|
93
|
-
${this._viewerVisible&&
|
|
93
|
+
${this._viewerVisible&&s?.url?p`
|
|
94
94
|
<div class="viewer" part="viewer">
|
|
95
95
|
<div class="viewer-mask" @click=${this._closeViewer}></div>
|
|
96
96
|
<button class="viewer-close" type="button" @click=${this._closeViewer}>×</button>
|
|
97
|
-
${this._internalFiles.length>1?
|
|
97
|
+
${this._internalFiles.length>1?p`
|
|
98
98
|
<button class="viewer-nav prev" type="button" @click=${this._prevImage}>‹</button>
|
|
99
99
|
<button class="viewer-nav next" type="button" @click=${this._nextImage}>›</button>
|
|
100
|
-
`:
|
|
100
|
+
`:d}
|
|
101
101
|
<div class="viewer-inner">
|
|
102
|
-
<img src=${
|
|
102
|
+
<img src=${s.url} alt=${s.name}>
|
|
103
103
|
</div>
|
|
104
104
|
</div>
|
|
105
|
-
`:
|
|
105
|
+
`:d}
|
|
106
106
|
</div>
|
|
107
|
-
`}};
|
|
107
|
+
`}};i._scrollLockCount=0;i._previousHtmlOverflow="";i._previousBodyOverflow="";i.styles=v`
|
|
108
108
|
:host {
|
|
109
109
|
display: block;
|
|
110
110
|
--upload-width: 160px;
|
|
@@ -329,5 +329,5 @@ import{html as e,css as t,LitElement as i,nothing as s}from"lit";import{property
|
|
|
329
329
|
.viewer-nav.next {
|
|
330
330
|
right: 20px;
|
|
331
331
|
}
|
|
332
|
-
|
|
332
|
+
`;n([l({type:String})],i.prototype,"action",2);n([l({attribute:!1})],i.prototype,"headers",2);n([l({attribute:!1})],i.prototype,"data",2);n([l({type:String})],i.prototype,"name",2);n([l({type:Number})],i.prototype,"size",2);n([l({type:Number})],i.prototype,"width",2);n([l({type:Number})],i.prototype,"height",2);n([l({type:String})],i.prototype,"accept",2);n([l({type:String})],i.prototype,"placeholder",2);n([l({type:Boolean})],i.prototype,"notip",2);n([l({type:String,attribute:"tip-text"})],i.prototype,"tipText",2);n([l({type:Boolean})],i.prototype,"disabled",2);n([l({type:Number})],i.prototype,"limit",2);n([l({attribute:!1})],i.prototype,"fileList",2);n([c()],i.prototype,"_internalFiles",2);n([c()],i.prototype,"_viewerVisible",2);n([c()],i.prototype,"_viewerIndex",2);n([c()],i.prototype,"_message",2);n([c()],i.prototype,"_messageType",2);n([m('input[type="file"]')],i.prototype,"_input",2);i=n([y("qxs-image-upload")],i);export{i as QxsImageUpload};
|
|
333
333
|
//# sourceMappingURL=image-upload.mjs.map
|
package/es/image-upload.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-upload.mjs","sources":["../../../packages/components/src/image-upload.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\nexport type ImageUploadFile = {\n uid?: string | number\n name: string\n url?: string\n size?: number\n status?: 'ready' | 'uploading' | 'success' | 'fail'\n progress?: number\n file?: File\n}\n\ntype UploadSuccessDetail = {\n response: any\n file: ImageUploadFile\n files: ImageUploadFile[]\n}\n\nfunction parseJsonResponse(responseText: string) {\n try {\n return JSON.parse(responseText)\n }\n catch {\n return responseText\n }\n}\n\nconst previewIcon = html`\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M1.5 12s3.5-6 10.5-6 10.5 6 10.5 6-3.5 6-10.5 6S1.5 12 1.5 12Z\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.8\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3.2\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n />\n </svg>\n`\n\nconst removeIcon = html`\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M7 7l10 10M17 7L7 17\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-width=\"1.9\"\n />\n </svg>\n`\n\n@safeCustomElement('qxs-image-upload')\nexport class QxsImageUpload extends LitElement {\n private static _scrollLockCount = 0\n private static _previousHtmlOverflow = ''\n private static _previousBodyOverflow = ''\n\n static styles = css`\n :host {\n display: block;\n --upload-width: 160px;\n --upload-height: 90px;\n color: #0f172a;\n font-size: 14px;\n }\n\n .upload {\n display: grid;\n gap: 10px;\n }\n\n .list {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n }\n\n .item,\n .add {\n position: relative;\n width: var(--upload-width);\n height: var(--upload-height);\n overflow: hidden;\n border: 1px dashed #cbd5e1;\n border-radius: 14px;\n background: #f8fafc;\n transition: border-color 0.2s ease;\n }\n\n .item:hover {\n border-color: #3d61e3;\n }\n\n .add:hover {\n border-color: #94a3b8;\n }\n\n .add {\n display: grid;\n place-items: center;\n cursor: pointer;\n background: #f8fafc;\n }\n\n .add.is-disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .add input {\n display: none;\n }\n\n .add-content {\n display: grid;\n gap: 8px;\n place-items: center;\n color: #64748b;\n text-align: center;\n }\n\n .add-icon {\n font-size: 28px;\n line-height: 1;\n color: #3d61e3;\n }\n\n .item img,\n .viewer img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .item img {\n transition: none;\n }\n\n .placeholder {\n display: grid;\n place-items: center;\n width: 100%;\n height: 100%;\n color: #94a3b8;\n background: #f8fafc;\n }\n\n .progress {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 4px;\n background: rgb(15 23 42 / 12%);\n }\n\n .progress-bar {\n height: 100%;\n background: #3d61e3;\n transition: width 0.2s ease;\n }\n\n .actions {\n position: absolute;\n inset: 0;\n display: flex;\n gap: 14px;\n align-items: center;\n justify-content: center;\n background: rgb(15 23 42 / 48%);\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n .item:hover .actions {\n opacity: 1;\n }\n\n .action {\n display: grid;\n place-items: center;\n width: 38px;\n height: 38px;\n color: #fff;\n cursor: pointer;\n background: rgb(255 255 255 / 14%);\n border: 0;\n border-radius: 999px;\n transition: background 0.18s ease;\n }\n\n .action.is-disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n\n .action:hover {\n background: rgb(255 255 255 / 24%);\n }\n\n .action:focus-visible {\n outline: 2px solid rgb(255 255 255 / 88%);\n outline-offset: 2px;\n }\n\n .action svg {\n width: 18px;\n height: 18px;\n }\n\n .tip,\n .message {\n font-size: 12px;\n line-height: 1.6;\n color: #64748b;\n }\n\n .message {\n padding: 10px 12px;\n border-radius: 12px;\n }\n\n .message.error {\n color: #b91c1c;\n background: #fef2f2;\n }\n\n .message.warning {\n color: #9a3412;\n background: #fff7ed;\n }\n\n .viewer {\n position: fixed;\n inset: 0;\n z-index: 9999;\n display: grid;\n place-items: center;\n }\n\n .viewer-mask {\n position: absolute;\n inset: 0;\n background: rgb(0 0 0 / 82%);\n }\n\n .viewer-inner {\n position: relative;\n z-index: 1;\n width: min(88vw, 960px);\n height: min(80vh, 640px);\n }\n\n .viewer-close,\n .viewer-nav {\n position: absolute;\n z-index: 1;\n color: #fff;\n cursor: pointer;\n background: transparent;\n border: 0;\n }\n\n .viewer-close {\n top: 16px;\n right: 16px;\n font-size: 32px;\n }\n\n .viewer-nav {\n top: 50%;\n font-size: 52px;\n transform: translateY(-50%);\n }\n\n .viewer-nav.prev {\n left: 20px;\n }\n\n .viewer-nav.next {\n right: 20px;\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: String }) accept = 'image/jpeg,image/jpg,image/png,image/gif'\n @property({ type: String }) placeholder = '上传图片'\n @property({ type: Boolean }) notip = false\n @property({ type: String, attribute: 'tip-text' }) tipText = ''\n @property({ type: Boolean }) disabled = false\n @property({ type: Number }) limit = 1\n @property({ attribute: false }) fileList: ImageUploadFile[] = []\n\n @state() private _internalFiles: ImageUploadFile[] = []\n @state() private _viewerVisible = false\n @state() private _viewerIndex = 0\n @state() private _message = ''\n @state() private _messageType: 'error' | 'warning' | '' = ''\n\n @query('input[type=\"file\"]') private _input?: HTMLInputElement\n private _hasScrollLock = false\n private _pendingRequests = new Map<string, XMLHttpRequest>()\n\n connectedCallback() {\n super.connectedCallback()\n this._syncFileList()\n }\n\n disconnectedCallback() {\n this._syncScrollLock(false)\n super.disconnectedCallback()\n this._pendingRequests.forEach(xhr => xhr.abort())\n this._pendingRequests.clear()\n this._internalFiles.forEach(file => this._revokeFileUrl(file))\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('fileList')) {\n this._syncFileList()\n }\n\n if (changed.has('_viewerVisible')) {\n this._syncScrollLock(this._viewerVisible)\n }\n }\n\n private get _exts() {\n return this.accept\n .split(',')\n .map(item => item.split('/').pop()?.toLowerCase() ?? '')\n .filter(Boolean)\n }\n\n private get _tipMessage() {\n if (this.tipText) {\n return this.tipText\n }\n const formatText = `支持 ${this._exts.join(' / ')} 格式,大小不超过 ${this.size}MB`\n const sizeText = this.width && this.height ? `,建议尺寸 ${this.width}×${this.height}` : ''\n return formatText + sizeText\n }\n\n private _syncFileList() {\n this._internalFiles = [...this.fileList]\n }\n\n private _setMessage(type: 'error' | 'warning', message: string) {\n this._messageType = type\n this._message = message\n }\n\n private _clearMessage() {\n this._messageType = ''\n this._message = ''\n }\n\n private _revokeFileUrl(file: ImageUploadFile) {\n if (file.url?.startsWith('blob:')) {\n URL.revokeObjectURL(file.url)\n }\n }\n\n private _emitFileListChange() {\n const detail = { fileList: this._internalFiles.slice() }\n this.dispatchEvent(new CustomEvent('file-list-change', { detail, bubbles: true, composed: true }))\n this.dispatchEvent(new CustomEvent('update:fileList', { detail, bubbles: true, composed: true }))\n }\n\n private _emitSuccess(detail: UploadSuccessDetail) {\n this.dispatchEvent(new CustomEvent('upload-success', { detail, bubbles: true, composed: true }))\n this.dispatchEvent(new CustomEvent('success', { detail, bubbles: true, composed: true }))\n }\n\n private _getFileKey(file: Pick<ImageUploadFile, 'uid' | 'name'>) {\n return String(file.uid ?? file.name)\n }\n\n private _updateFileByKey(fileKey: string, updater: (file: ImageUploadFile) => ImageUploadFile) {\n let changed = false\n this._internalFiles = this._internalFiles.map((item) => {\n if (this._getFileKey(item) !== fileKey) {\n return item\n }\n changed = true\n return updater(item)\n })\n return changed\n }\n\n private _emitRemove(file: ImageUploadFile) {\n this.dispatchEvent(new CustomEvent('remove', {\n detail: { file },\n bubbles: true,\n composed: true,\n }))\n }\n\n private _validateFile(file: File) {\n const fileExt = file.name.split('.').pop()?.toLowerCase() ?? ''\n const isTypeOk = this._exts.some(ext => ext === fileExt)\n\n if (!isTypeOk) {\n this._setMessage('error', `仅支持上传 ${this._exts.join(' / ')} 格式的图片`)\n return false\n }\n\n const fileSizeMB = file.size / 1024 / 1024\n if (fileSizeMB > this.size) {\n this._setMessage('error', `图片大小不能超过 ${this.size}MB`)\n return false\n }\n\n return true\n }\n\n private _handleSelectedFiles(files: File[]) {\n if (this.disabled || !files.length) {\n return\n }\n\n this._clearMessage()\n const validFiles = files.filter(file => this._validateFile(file))\n\n if (!validFiles.length) {\n return\n }\n\n if (!this.action) {\n this._setMessage('warning', '请先配置上传地址 action')\n return\n }\n\n if (this._internalFiles.length + validFiles.length > this.limit) {\n this._setMessage('warning', `最多上传 ${this.limit} 张图片`)\n return\n }\n\n validFiles.forEach((file) => {\n const imageFile: ImageUploadFile = {\n uid: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n status: 'uploading',\n progress: 0,\n url: URL.createObjectURL(file),\n file,\n }\n\n this._internalFiles = [...this._internalFiles, imageFile]\n this._emitFileListChange()\n this._uploadFile(file, imageFile)\n })\n }\n\n private _handleInputChange(event: Event) {\n const input = event.target as HTMLInputElement\n const files = input.files\n if (!files) {\n return\n }\n\n this._handleSelectedFiles(Array.from(files))\n input.value = ''\n }\n\n private _uploadFile(file: File, imageFile: ImageUploadFile) {\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 const fileKey = this._getFileKey(imageFile)\n xhr.open('POST', this.action)\n this._pendingRequests.set(fileKey, xhr)\n\n if (this.headers) {\n Object.entries(this.headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value)\n })\n }\n\n xhr.upload.onprogress = (event) => {\n if (event.lengthComputable) {\n const progress = Math.floor((event.loaded / event.total) * 100)\n this._updateFileByKey(fileKey, item => ({ ...item, progress }))\n }\n }\n\n xhr.onload = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = parseJsonResponse(xhr.responseText)\n const changed = this._updateFileByKey(fileKey, item => ({\n ...item,\n status: 'success',\n progress: 100,\n }))\n if (!changed) {\n return\n }\n this._emitFileListChange()\n const updatedFile = this._internalFiles.find(item => this._getFileKey(item) === fileKey)\n if (!updatedFile) {\n return\n }\n this._emitSuccess({\n response,\n file: { ...updatedFile },\n files: this._internalFiles.slice(),\n })\n }\n else {\n this._updateFileByKey(fileKey, item => ({ ...item, status: 'fail', progress: 0 }))\n this._setMessage('error', '上传失败')\n }\n }\n\n xhr.onerror = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n this._updateFileByKey(fileKey, item => ({ ...item, status: 'fail', progress: 0 }))\n this._setMessage('error', '上传失败')\n }\n\n xhr.onabort = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n }\n\n xhr.send(formData)\n }\n\n private _handlePreview(index: number) {\n this._viewerIndex = index\n this._viewerVisible = true\n }\n\n private _closeViewer() {\n this._viewerVisible = false\n }\n\n private _prevImage() {\n this._viewerIndex = (this._viewerIndex - 1 + this._internalFiles.length) % this._internalFiles.length\n }\n\n private _nextImage() {\n this._viewerIndex = (this._viewerIndex + 1) % this._internalFiles.length\n }\n\n private _handleRemove(index: number) {\n if (this.disabled) {\n return\n }\n\n const file = this._internalFiles[index]\n if (!file) {\n return\n }\n\n const fileKey = this._getFileKey(file)\n const pendingRequest = this._pendingRequests.get(fileKey)\n if (pendingRequest) {\n this._pendingRequests.delete(fileKey)\n pendingRequest.abort()\n }\n\n this._revokeFileUrl(file)\n this._internalFiles = this._internalFiles.filter((_, fileIndex) => fileIndex !== index)\n this._emitFileListChange()\n this._emitRemove(file)\n\n if (this._viewerIndex >= this._internalFiles.length) {\n this._viewerIndex = Math.max(0, this._internalFiles.length - 1)\n }\n if (!this._internalFiles.length) {\n this._viewerVisible = false\n }\n }\n\n private _syncScrollLock(locked: boolean) {\n if (typeof document === 'undefined') {\n return\n }\n\n const htmlElement = document.documentElement\n const bodyElement = document.body\n\n if (locked) {\n if (this._hasScrollLock) {\n return\n }\n\n if (QxsImageUpload._scrollLockCount === 0) {\n QxsImageUpload._previousHtmlOverflow = htmlElement.style.overflow\n QxsImageUpload._previousBodyOverflow = bodyElement.style.overflow\n htmlElement.style.overflow = 'hidden'\n bodyElement.style.overflow = 'hidden'\n }\n\n QxsImageUpload._scrollLockCount += 1\n this._hasScrollLock = true\n return\n }\n\n if (!this._hasScrollLock) {\n return\n }\n\n QxsImageUpload._scrollLockCount = Math.max(0, QxsImageUpload._scrollLockCount - 1)\n this._hasScrollLock = false\n\n if (QxsImageUpload._scrollLockCount === 0) {\n htmlElement.style.overflow = QxsImageUpload._previousHtmlOverflow\n bodyElement.style.overflow = QxsImageUpload._previousBodyOverflow\n QxsImageUpload._previousHtmlOverflow = ''\n QxsImageUpload._previousBodyOverflow = ''\n }\n }\n\n render() {\n const cssVars = {\n '--upload-width': `${this.width}px`,\n '--upload-height': `${this.height}px`,\n }\n const currentPreview = this._internalFiles[this._viewerIndex]\n\n return html`\n <div class=\"upload\" style=${styleMap(cssVars)} part=\"container\">\n <div class=\"list\" part=\"list\">\n ${repeat(this._internalFiles, file => String(file.uid ?? file.name), (file, index) => html`\n <div class=\"item\" part=\"item\">\n ${file.url\n ? html`<img src=${file.url} alt=${file.name} part=\"image\">`\n : html`<div class=\"placeholder\" part=\"placeholder\">无图片</div>`}\n\n ${file.status === 'uploading'\n ? html`\n <div class=\"progress\" part=\"progress\">\n <div class=\"progress-bar\" style=${styleMap({ width: `${file.progress ?? 0}%` })}></div>\n </div>\n `\n : nothing}\n\n <div class=\"actions\" part=\"actions\">\n ${file.url\n ? html`\n <button\n class=\"action\"\n data-action=\"preview\"\n type=\"button\"\n aria-label=\"预览图片\"\n @click=${() => this._handlePreview(index)}\n >\n ${previewIcon}\n </button>\n `\n : nothing}\n <button\n class=\"action ${this.disabled ? 'is-disabled' : ''}\"\n data-action=\"remove\"\n type=\"button\"\n aria-label=\"删除图片\"\n @click=${() => this._handleRemove(index)}\n >\n ${removeIcon}\n </button>\n </div>\n </div>\n `)}\n\n ${this._internalFiles.length < this.limit\n ? html`\n <label class=\"add ${this.disabled ? 'is-disabled' : ''}\" part=\"add\">\n <input\n type=\"file\"\n accept=${this.accept}\n ?multiple=${this.limit > 1}\n ?disabled=${this.disabled}\n @change=${this._handleInputChange}\n >\n <div class=\"add-content\" part=\"add-content\">\n <div class=\"add-icon\">+</div>\n <div>${this.placeholder}</div>\n </div>\n </label>\n `\n : nothing}\n </div>\n\n ${this._message\n ? html`<div class=\"message ${this._messageType}\" part=\"message\">${this._message}</div>`\n : nothing}\n\n ${this.notip\n ? nothing\n : html`\n <div class=\"tip\" part=\"tip\">\n <slot name=\"tip\">${this._tipMessage}</slot>\n </div>\n `}\n\n ${this._viewerVisible && currentPreview?.url\n ? html`\n <div class=\"viewer\" part=\"viewer\">\n <div class=\"viewer-mask\" @click=${this._closeViewer}></div>\n <button class=\"viewer-close\" type=\"button\" @click=${this._closeViewer}>×</button>\n ${this._internalFiles.length > 1\n ? html`\n <button class=\"viewer-nav prev\" type=\"button\" @click=${this._prevImage}>‹</button>\n <button class=\"viewer-nav next\" type=\"button\" @click=${this._nextImage}>›</button>\n `\n : nothing}\n <div class=\"viewer-inner\">\n <img src=${currentPreview.url} alt=${currentPreview.name}>\n </div>\n </div>\n `\n : nothing}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-image-upload': QxsImageUpload\n }\n}\n"],"names":["previewIcon","html","removeIcon","QxsImageUpload","LitElement","constructor","super","arguments","this","action","name","size","width","height","accept","placeholder","notip","tipText","disabled","limit","fileList","_internalFiles","_viewerVisible","_viewerIndex","_message","_messageType","_hasScrollLock","_pendingRequests","Map","connectedCallback","_syncFileList","disconnectedCallback","_syncScrollLock","forEach","xhr","abort","clear","file","_revokeFileUrl","updated","changed","has","_exts","split","map","item","pop","toLowerCase","filter","Boolean","_tipMessage","join","_setMessage","type","message","_clearMessage","url","startsWith","URL","revokeObjectURL","_emitFileListChange","detail","slice","dispatchEvent","CustomEvent","bubbles","composed","_emitSuccess","_getFileKey","String","uid","_updateFileByKey","fileKey","updater","_emitRemove","_validateFile","fileExt","some","ext","_handleSelectedFiles","files","length","validFiles","imageFile","Date","now","Math","random","status","progress","createObjectURL","_uploadFile","_handleInputChange","event","input","target","Array","from","value","formData","FormData","append","data","Object","entries","_ref","key","XMLHttpRequest","open","set","headers","_ref2","setRequestHeader","upload","onprogress","lengthComputable","floor","loaded","total","onload","get","delete","response","responseText","JSON","parse","parseJsonResponse","updatedFile","find","onerror","onabort","send","_handlePreview","index","_closeViewer","_prevImage","_nextImage","_handleRemove","pendingRequest","_","fileIndex","max","locked","document","htmlElement","documentElement","bodyElement","body","_scrollLockCount","_previousHtmlOverflow","style","overflow","_previousBodyOverflow","render","cssVars","currentPreview","styleMap","repeat","nothing","styles","css","__decorateClass","property","prototype","attribute","Number","state","query","safeCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image-upload.mjs","sources":["../../../packages/components/src/image-upload.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { safeCustomElement } from './base/define'\n\nexport type ImageUploadFile = {\n uid?: string | number\n name: string\n url?: string\n size?: number\n status?: 'ready' | 'uploading' | 'success' | 'fail'\n progress?: number\n file?: File\n}\n\ntype UploadSuccessDetail = {\n response: any\n file: ImageUploadFile\n files: ImageUploadFile[]\n}\n\nfunction parseJsonResponse(responseText: string) {\n try {\n return JSON.parse(responseText)\n }\n catch {\n return responseText\n }\n}\n\nconst previewIcon = html`\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M1.5 12s3.5-6 10.5-6 10.5 6 10.5 6-3.5 6-10.5 6S1.5 12 1.5 12Z\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.8\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3.2\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n />\n </svg>\n`\n\nconst removeIcon = html`\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M7 7l10 10M17 7L7 17\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-width=\"1.9\"\n />\n </svg>\n`\n\n@safeCustomElement('qxs-image-upload')\nexport class QxsImageUpload extends LitElement {\n private static _scrollLockCount = 0\n private static _previousHtmlOverflow = ''\n private static _previousBodyOverflow = ''\n\n static styles = css`\n :host {\n display: block;\n --upload-width: 160px;\n --upload-height: 90px;\n color: #0f172a;\n font-size: 14px;\n }\n\n .upload {\n display: grid;\n gap: 10px;\n }\n\n .list {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n }\n\n .item,\n .add {\n position: relative;\n width: var(--upload-width);\n height: var(--upload-height);\n overflow: hidden;\n border: 1px dashed #cbd5e1;\n border-radius: 14px;\n background: #f8fafc;\n transition: border-color 0.2s ease;\n }\n\n .item:hover {\n border-color: #3d61e3;\n }\n\n .add:hover {\n border-color: #94a3b8;\n }\n\n .add {\n display: grid;\n place-items: center;\n cursor: pointer;\n background: #f8fafc;\n }\n\n .add.is-disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .add input {\n display: none;\n }\n\n .add-content {\n display: grid;\n gap: 8px;\n place-items: center;\n color: #64748b;\n text-align: center;\n }\n\n .add-icon {\n font-size: 28px;\n line-height: 1;\n color: #3d61e3;\n }\n\n .item img,\n .viewer img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .item img {\n transition: none;\n }\n\n .placeholder {\n display: grid;\n place-items: center;\n width: 100%;\n height: 100%;\n color: #94a3b8;\n background: #f8fafc;\n }\n\n .progress {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 4px;\n background: rgb(15 23 42 / 12%);\n }\n\n .progress-bar {\n height: 100%;\n background: #3d61e3;\n transition: width 0.2s ease;\n }\n\n .actions {\n position: absolute;\n inset: 0;\n display: flex;\n gap: 14px;\n align-items: center;\n justify-content: center;\n background: rgb(15 23 42 / 48%);\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n .item:hover .actions {\n opacity: 1;\n }\n\n .action {\n display: grid;\n place-items: center;\n width: 38px;\n height: 38px;\n color: #fff;\n cursor: pointer;\n background: rgb(255 255 255 / 14%);\n border: 0;\n border-radius: 999px;\n transition: background 0.18s ease;\n }\n\n .action.is-disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n\n .action:hover {\n background: rgb(255 255 255 / 24%);\n }\n\n .action:focus-visible {\n outline: 2px solid rgb(255 255 255 / 88%);\n outline-offset: 2px;\n }\n\n .action svg {\n width: 18px;\n height: 18px;\n }\n\n .tip,\n .message {\n font-size: 12px;\n line-height: 1.6;\n color: #64748b;\n }\n\n .message {\n padding: 10px 12px;\n border-radius: 12px;\n }\n\n .message.error {\n color: #b91c1c;\n background: #fef2f2;\n }\n\n .message.warning {\n color: #9a3412;\n background: #fff7ed;\n }\n\n .viewer {\n position: fixed;\n inset: 0;\n z-index: 9999;\n display: grid;\n place-items: center;\n }\n\n .viewer-mask {\n position: absolute;\n inset: 0;\n background: rgb(0 0 0 / 82%);\n }\n\n .viewer-inner {\n position: relative;\n z-index: 1;\n width: min(88vw, 960px);\n height: min(80vh, 640px);\n }\n\n .viewer-close,\n .viewer-nav {\n position: absolute;\n z-index: 1;\n color: #fff;\n cursor: pointer;\n background: transparent;\n border: 0;\n }\n\n .viewer-close {\n top: 16px;\n right: 16px;\n font-size: 32px;\n }\n\n .viewer-nav {\n top: 50%;\n font-size: 52px;\n transform: translateY(-50%);\n }\n\n .viewer-nav.prev {\n left: 20px;\n }\n\n .viewer-nav.next {\n right: 20px;\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: String }) accept = 'image/jpeg,image/jpg,image/png,image/gif'\n @property({ type: String }) placeholder = '上传图片'\n @property({ type: Boolean }) notip = false\n @property({ type: String, attribute: 'tip-text' }) tipText = ''\n @property({ type: Boolean }) disabled = false\n @property({ type: Number }) limit = 1\n @property({ attribute: false }) fileList: ImageUploadFile[] = []\n\n @state() private _internalFiles: ImageUploadFile[] = []\n @state() private _viewerVisible = false\n @state() private _viewerIndex = 0\n @state() private _message = ''\n @state() private _messageType: 'error' | 'warning' | '' = ''\n\n @query('input[type=\"file\"]') private _input?: HTMLInputElement\n private _hasScrollLock = false\n private _pendingRequests = new Map<string, XMLHttpRequest>()\n\n connectedCallback() {\n super.connectedCallback()\n this._syncFileList()\n }\n\n disconnectedCallback() {\n this._syncScrollLock(false)\n super.disconnectedCallback()\n this._pendingRequests.forEach(xhr => xhr.abort())\n this._pendingRequests.clear()\n this._internalFiles.forEach(file => this._revokeFileUrl(file))\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('fileList')) {\n this._syncFileList()\n }\n\n if (changed.has('_viewerVisible')) {\n this._syncScrollLock(this._viewerVisible)\n }\n }\n\n private get _exts() {\n return this.accept\n .split(',')\n .map(item => item.split('/').pop()?.toLowerCase() ?? '')\n .filter(Boolean)\n }\n\n private get _tipMessage() {\n if (this.tipText) {\n return this.tipText\n }\n const formatText = `支持 ${this._exts.join(' / ')} 格式,大小不超过 ${this.size}MB`\n const sizeText = this.width && this.height ? `,建议尺寸 ${this.width}×${this.height}` : ''\n return formatText + sizeText\n }\n\n private _syncFileList() {\n this._internalFiles = [...this.fileList]\n }\n\n private _setMessage(type: 'error' | 'warning', message: string) {\n this._messageType = type\n this._message = message\n }\n\n private _clearMessage() {\n this._messageType = ''\n this._message = ''\n }\n\n private _revokeFileUrl(file: ImageUploadFile) {\n if (file.url?.startsWith('blob:')) {\n URL.revokeObjectURL(file.url)\n }\n }\n\n private _emitFileListChange() {\n const detail = { fileList: this._internalFiles.slice() }\n this.dispatchEvent(new CustomEvent('file-list-change', { detail, bubbles: true, composed: true }))\n this.dispatchEvent(new CustomEvent('update:fileList', { detail, bubbles: true, composed: true }))\n }\n\n private _emitSuccess(detail: UploadSuccessDetail) {\n this.dispatchEvent(new CustomEvent('upload-success', { detail, bubbles: true, composed: true }))\n this.dispatchEvent(new CustomEvent('success', { detail, bubbles: true, composed: true }))\n }\n\n private _getFileKey(file: Pick<ImageUploadFile, 'uid' | 'name'>) {\n return String(file.uid ?? file.name)\n }\n\n private _updateFileByKey(fileKey: string, updater: (file: ImageUploadFile) => ImageUploadFile) {\n let changed = false\n this._internalFiles = this._internalFiles.map((item) => {\n if (this._getFileKey(item) !== fileKey) {\n return item\n }\n changed = true\n return updater(item)\n })\n return changed\n }\n\n private _emitRemove(file: ImageUploadFile) {\n this.dispatchEvent(new CustomEvent('remove', {\n detail: { file },\n bubbles: true,\n composed: true,\n }))\n }\n\n private _validateFile(file: File) {\n const fileExt = file.name.split('.').pop()?.toLowerCase() ?? ''\n const isTypeOk = this._exts.some(ext => ext === fileExt)\n\n if (!isTypeOk) {\n this._setMessage('error', `仅支持上传 ${this._exts.join(' / ')} 格式的图片`)\n return false\n }\n\n const fileSizeMB = file.size / 1024 / 1024\n if (fileSizeMB > this.size) {\n this._setMessage('error', `图片大小不能超过 ${this.size}MB`)\n return false\n }\n\n return true\n }\n\n private _handleSelectedFiles(files: File[]) {\n if (this.disabled || !files.length) {\n return\n }\n\n this._clearMessage()\n const validFiles = files.filter(file => this._validateFile(file))\n\n if (!validFiles.length) {\n return\n }\n\n if (!this.action) {\n this._setMessage('warning', '请先配置上传地址 action')\n return\n }\n\n if (this._internalFiles.length + validFiles.length > this.limit) {\n this._setMessage('warning', `最多上传 ${this.limit} 张图片`)\n return\n }\n\n validFiles.forEach((file) => {\n const imageFile: ImageUploadFile = {\n uid: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n status: 'uploading',\n progress: 0,\n url: URL.createObjectURL(file),\n file,\n }\n\n this._internalFiles = [...this._internalFiles, imageFile]\n this._emitFileListChange()\n this._uploadFile(file, imageFile)\n })\n }\n\n private _handleInputChange(event: Event) {\n const input = event.target as HTMLInputElement\n const files = input.files\n if (!files) {\n return\n }\n\n this._handleSelectedFiles(Array.from(files))\n input.value = ''\n }\n\n private _uploadFile(file: File, imageFile: ImageUploadFile) {\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 const fileKey = this._getFileKey(imageFile)\n xhr.open('POST', this.action)\n this._pendingRequests.set(fileKey, xhr)\n\n if (this.headers) {\n Object.entries(this.headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value)\n })\n }\n\n xhr.upload.onprogress = (event) => {\n if (event.lengthComputable) {\n const progress = Math.floor((event.loaded / event.total) * 100)\n this._updateFileByKey(fileKey, item => ({ ...item, progress }))\n }\n }\n\n xhr.onload = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = parseJsonResponse(xhr.responseText)\n const changed = this._updateFileByKey(fileKey, item => ({\n ...item,\n status: 'success',\n progress: 100,\n }))\n if (!changed) {\n return\n }\n this._emitFileListChange()\n const updatedFile = this._internalFiles.find(item => this._getFileKey(item) === fileKey)\n if (!updatedFile) {\n return\n }\n this._emitSuccess({\n response,\n file: { ...updatedFile },\n files: this._internalFiles.slice(),\n })\n }\n else {\n this._updateFileByKey(fileKey, item => ({ ...item, status: 'fail', progress: 0 }))\n this._setMessage('error', '上传失败')\n }\n }\n\n xhr.onerror = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n this._updateFileByKey(fileKey, item => ({ ...item, status: 'fail', progress: 0 }))\n this._setMessage('error', '上传失败')\n }\n\n xhr.onabort = () => {\n if (this._pendingRequests.get(fileKey) !== xhr) {\n return\n }\n this._pendingRequests.delete(fileKey)\n }\n\n xhr.send(formData)\n }\n\n private _handlePreview(index: number) {\n this._viewerIndex = index\n this._viewerVisible = true\n }\n\n private _closeViewer() {\n this._viewerVisible = false\n }\n\n private _prevImage() {\n this._viewerIndex = (this._viewerIndex - 1 + this._internalFiles.length) % this._internalFiles.length\n }\n\n private _nextImage() {\n this._viewerIndex = (this._viewerIndex + 1) % this._internalFiles.length\n }\n\n private _handleRemove(index: number) {\n if (this.disabled) {\n return\n }\n\n const file = this._internalFiles[index]\n if (!file) {\n return\n }\n\n const fileKey = this._getFileKey(file)\n const pendingRequest = this._pendingRequests.get(fileKey)\n if (pendingRequest) {\n this._pendingRequests.delete(fileKey)\n pendingRequest.abort()\n }\n\n this._revokeFileUrl(file)\n this._internalFiles = this._internalFiles.filter((_, fileIndex) => fileIndex !== index)\n this._emitFileListChange()\n this._emitRemove(file)\n\n if (this._viewerIndex >= this._internalFiles.length) {\n this._viewerIndex = Math.max(0, this._internalFiles.length - 1)\n }\n if (!this._internalFiles.length) {\n this._viewerVisible = false\n }\n }\n\n private _syncScrollLock(locked: boolean) {\n if (typeof document === 'undefined') {\n return\n }\n\n const htmlElement = document.documentElement\n const bodyElement = document.body\n\n if (locked) {\n if (this._hasScrollLock) {\n return\n }\n\n if (QxsImageUpload._scrollLockCount === 0) {\n QxsImageUpload._previousHtmlOverflow = htmlElement.style.overflow\n QxsImageUpload._previousBodyOverflow = bodyElement.style.overflow\n htmlElement.style.overflow = 'hidden'\n bodyElement.style.overflow = 'hidden'\n }\n\n QxsImageUpload._scrollLockCount += 1\n this._hasScrollLock = true\n return\n }\n\n if (!this._hasScrollLock) {\n return\n }\n\n QxsImageUpload._scrollLockCount = Math.max(0, QxsImageUpload._scrollLockCount - 1)\n this._hasScrollLock = false\n\n if (QxsImageUpload._scrollLockCount === 0) {\n htmlElement.style.overflow = QxsImageUpload._previousHtmlOverflow\n bodyElement.style.overflow = QxsImageUpload._previousBodyOverflow\n QxsImageUpload._previousHtmlOverflow = ''\n QxsImageUpload._previousBodyOverflow = ''\n }\n }\n\n render() {\n const cssVars = {\n '--upload-width': `${this.width}px`,\n '--upload-height': `${this.height}px`,\n }\n const currentPreview = this._internalFiles[this._viewerIndex]\n\n return html`\n <div class=\"upload\" style=${styleMap(cssVars)} part=\"container\">\n <div class=\"list\" part=\"list\">\n ${repeat(this._internalFiles, file => String(file.uid ?? file.name), (file, index) => html`\n <div class=\"item\" part=\"item\">\n ${file.url\n ? html`<img src=${file.url} alt=${file.name} part=\"image\">`\n : html`<div class=\"placeholder\" part=\"placeholder\">无图片</div>`}\n\n ${file.status === 'uploading'\n ? html`\n <div class=\"progress\" part=\"progress\">\n <div class=\"progress-bar\" style=${styleMap({ width: `${file.progress ?? 0}%` })}></div>\n </div>\n `\n : nothing}\n\n <div class=\"actions\" part=\"actions\">\n ${file.url\n ? html`\n <button\n class=\"action\"\n data-action=\"preview\"\n type=\"button\"\n aria-label=\"预览图片\"\n @click=${() => this._handlePreview(index)}\n >\n ${previewIcon}\n </button>\n `\n : nothing}\n <button\n class=\"action ${this.disabled ? 'is-disabled' : ''}\"\n data-action=\"remove\"\n type=\"button\"\n aria-label=\"删除图片\"\n @click=${() => this._handleRemove(index)}\n >\n ${removeIcon}\n </button>\n </div>\n </div>\n `)}\n\n ${this._internalFiles.length < this.limit\n ? html`\n <label class=\"add ${this.disabled ? 'is-disabled' : ''}\" part=\"add\">\n <input\n type=\"file\"\n accept=${this.accept}\n ?multiple=${this.limit > 1}\n ?disabled=${this.disabled}\n @change=${this._handleInputChange}\n >\n <div class=\"add-content\" part=\"add-content\">\n <div class=\"add-icon\">+</div>\n <div>${this.placeholder}</div>\n </div>\n </label>\n `\n : nothing}\n </div>\n\n ${this._message\n ? html`<div class=\"message ${this._messageType}\" part=\"message\">${this._message}</div>`\n : nothing}\n\n ${this.notip\n ? nothing\n : html`\n <div class=\"tip\" part=\"tip\">\n <slot name=\"tip\">${this._tipMessage}</slot>\n </div>\n `}\n\n ${this._viewerVisible && currentPreview?.url\n ? html`\n <div class=\"viewer\" part=\"viewer\">\n <div class=\"viewer-mask\" @click=${this._closeViewer}></div>\n <button class=\"viewer-close\" type=\"button\" @click=${this._closeViewer}>×</button>\n ${this._internalFiles.length > 1\n ? html`\n <button class=\"viewer-nav prev\" type=\"button\" @click=${this._prevImage}>‹</button>\n <button class=\"viewer-nav next\" type=\"button\" @click=${this._nextImage}>›</button>\n `\n : nothing}\n <div class=\"viewer-inner\">\n <img src=${currentPreview.url} alt=${currentPreview.name}>\n </div>\n </div>\n `\n : nothing}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-image-upload': QxsImageUpload\n }\n}\n"],"names":["parseJsonResponse","responseText","previewIcon","html","removeIcon","QxsImageUpload","LitElement","xhr","file","changed","item","formatText","sizeText","type","message","detail","fileKey","updater","fileExt","ext","files","validFiles","imageFile","event","input","formData","key","value","progress","response","updatedFile","index","pendingRequest","_","fileIndex","locked","htmlElement","bodyElement","cssVars","currentPreview","styleMap","repeat","nothing","css","__decorateClass","property","state","query","safeCustomElement"],"mappings":"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"}
|
package/es/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import{QxsSubjectAction as o}from"./subject/action.mjs";import{QxsBlankFill as x}from"./subject/blank-fill.mjs";import{createSubjectDraft as m}from"./subject/draft.mjs";import{QxsSubjectLayout as p}from"./subject/layout.mjs";import{QxsPageEnd as f}from"./subject/page-end.mjs";import{getPaginationMeta as c,insertPageBreak as Q,rebuildPageBreaksFromPageIndex as n,removePageBreak as u,serializeSubjectsWithPageIndex as S}from"./subject/pagination.mjs";import{collectSubjectElements as g,serializeSubjectElements as j,validateSubjectElements as d}from"./subject/runtime.mjs";import{QxsScale as B}from"./subject/scale.mjs";import{QxsSubjectSingle as E}from"./subject/single.mjs";import{moveSubjectItem as I,reorderSubjects as h}from"./subject/sort-controller.mjs";import{QxsSubjectSortable as z}from"./subject/sortable.mjs";import{QxsTextFill as C}from"./subject/text-fill.mjs";import{register as T}from"./editor/index.mjs";import{QxsIcon as y}from"./icon.mjs";import{QxsFixedActionBar as M}from"./fixed-action-bar.mjs";import{QxsPhotoCropTool as q}from"./photo-crop-tool.mjs";import{QxsFileUpload as G}from"./file-upload.mjs";import{QxsImageUpload as J}from"./image-upload.mjs";import{QxsDataChart as N}from"./data-chart.mjs";import{QxsBlocksuiteEditor as R}from"./editor/blocksuite-editor.mjs";export{x as QxsBlankFill,R as QxsBlocksuiteEditor,N as QxsDataChart,G as QxsFileUpload,M as QxsFixedActionBar,y as QxsIcon,J as QxsImageUpload,f as QxsPageEnd,q as QxsPhotoCropTool,B as QxsScale,o as QxsSubjectAction,p as QxsSubjectLayout,E as QxsSubjectSingle,z as QxsSubjectSortable,C as QxsTextFill,g as collectSubjectElements,m as createSubjectDraft,c as getPaginationMeta,Q as insertPageBreak,I as moveSubjectItem,n as rebuildPageBreaksFromPageIndex,T as register,u as removePageBreak,h as reorderSubjects,j as serializeSubjectElements,S as serializeSubjectsWithPageIndex,d as validateSubjectElements};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|