@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.
- 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
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import{marked as
|
|
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*\/?>| )*<\/p>/i,u=/<p>(?:\s|<br\s*\/?>| )*<\/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| |<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*\\/?>| )*<\\/p>/i\nconst EMPTY_PARAGRAPH_PATTERN_TRAILING = /<p>(?:\\s|<br\\s*\\/?>| )*<\\/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","
|
|
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*\\/?>| )*<\\/p>/i\nconst EMPTY_PARAGRAPH_PATTERN_TRAILING = /<p>(?:\\s|<br\\s*\\/?>| )*<\\/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| |<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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"}
|
package/es/editor/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{QxsBlocksuiteEditor as o}from"./blocksuite-editor.mjs";import{safeCustomElement as
|
|
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
|
package/es/editor/index.mjs.map
CHANGED
|
@@ -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":["
|
|
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"}
|
package/es/editor/toolbar.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
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 '
|
|
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"}
|
package/es/entry-data-chart.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import{QxsDataChart as t}from"./data-chart.mjs";export{t as QxsDataChart};
|
|
2
2
|
//# sourceMappingURL=entry-data-chart.mjs.map
|
package/es/entry-editor.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
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
|
package/es/entry-file-upload.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1
|
+
import{QxsIcon as x}from"./icon.mjs";export{x as QxsIcon};
|
|
2
2
|
//# sourceMappingURL=entry-icon.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
1
|
+
import{QxsPhotoCropTool as p}from"./photo-crop-tool.mjs";export{p as QxsPhotoCropTool};
|
|
2
2
|
//# sourceMappingURL=entry-photo-crop-tool.mjs.map
|
package/es/entry-subject.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
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
|
package/es/file-upload.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import{css as
|
|
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=${
|
|
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="
|
|
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?
|
|
27
|
+
${this._internalFiles.length?l`
|
|
27
28
|
<div class="list" part="list">
|
|
28
|
-
${
|
|
29
|
+
${x(this._internalFiles,s=>`${s.name}-${s.url??""}`,(s,o)=>l`
|
|
29
30
|
<div class="item" part="item">
|
|
30
|
-
<span class="item-name">${
|
|
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=${
|
|
36
|
+
@click=${r=>{r.stopPropagation(),this._handleRemove(o)}}
|
|
36
37
|
>
|
|
37
38
|
×
|
|
38
39
|
</button>
|
|
39
40
|
</div>
|
|
40
41
|
`)}
|
|
41
42
|
</div>
|
|
42
|
-
`:
|
|
43
|
+
`:c}
|
|
43
44
|
|
|
44
|
-
${this._message?
|
|
45
|
+
${this._message?l`<div class="status ${this._messageType}" part="status">${this._message}</div>`:c}
|
|
45
46
|
|
|
46
|
-
${this.notip?
|
|
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
|
-
`}};
|
|
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
|
-
|
|
73
|
-
|
|
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:
|
|
88
|
-
height:
|
|
89
|
-
margin-bottom:
|
|
93
|
+
width: 28px;
|
|
94
|
+
height: 28px;
|
|
95
|
+
margin-bottom: 8px;
|
|
90
96
|
color: #3d61e3;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
.text {
|
|
94
|
-
|
|
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
|
-
|
|
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
|
package/es/file-upload.mjs.map
CHANGED
|
@@ -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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"}
|
package/es/fixed-action-bar.mjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import{css as
|
|
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=${
|
|
5
|
+
style=${l({height:`${this._barHeight}px`})}
|
|
6
6
|
>
|
|
7
7
|
<div
|
|
8
8
|
part="actionbar"
|
|
9
9
|
class=${t}
|
|
10
|
-
style=${
|
|
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
|
-
`}};
|
|
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
|
-
|
|
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":["
|
|
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
|
|
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=${
|
|
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
|
-
`:
|
|
10
|
-
${s?this._renderClassGlyph(this.loading):
|
|
11
|
-
${
|
|
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=${
|
|
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"
|
|
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
|