@greypan/web-ui 11.1.0 → 12.0.0
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/README.CN.md +79 -68
- package/README.md +81 -72
- package/dist/_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js +8 -0
- package/dist/assets/menu-portal.js +3 -4
- package/dist/assets/menu-portal.js.map +1 -1
- package/dist/assets/modal-surface.js +3 -4
- package/dist/assets/modal-surface.js.map +1 -1
- package/dist/assets/overlay-motion.js +3 -4
- package/dist/assets/overlay-motion.js.map +1 -1
- package/dist/assets/scrollbar.js +5 -0
- package/dist/assets/scrollbar.js.map +1 -0
- package/dist/assets/selection-control.js +3 -4
- package/dist/assets/selection-control.js.map +1 -1
- package/dist/assets/toast-containers.js +3 -4
- package/dist/assets/toast-containers.js.map +1 -1
- package/dist/classes/glass.js +3 -4
- package/dist/classes/glass.js.map +1 -1
- package/dist/classes/glow.js +3 -4
- package/dist/classes/glow.js.map +1 -1
- package/dist/components/autocomplete/index.d.ts +485 -483
- package/dist/components/autocomplete/index.d.ts.map +1 -0
- package/dist/components/autocomplete/index.js +475 -267
- package/dist/components/autocomplete/index.js.map +1 -1
- package/dist/components/autocomplete/style.js +3 -4
- package/dist/components/autocomplete/style.js.map +1 -1
- package/dist/components/avatar/index.d.ts +26 -24
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +72 -52
- package/dist/components/avatar/index.js.map +1 -1
- package/dist/components/avatar/style.js +3 -4
- package/dist/components/avatar/style.js.map +1 -1
- package/dist/components/back-top/index.d.ts +30 -27
- package/dist/components/back-top/index.d.ts.map +1 -0
- package/dist/components/back-top/index.js +96 -62
- package/dist/components/back-top/index.js.map +1 -1
- package/dist/components/back-top/style.js +3 -4
- package/dist/components/back-top/style.js.map +1 -1
- package/dist/components/badge/index.d.ts +32 -26
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +116 -74
- package/dist/components/badge/index.js.map +1 -1
- package/dist/components/badge/style.js +3 -4
- package/dist/components/badge/style.js.map +1 -1
- package/dist/components/button/index.d.ts +392 -391
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +109 -79
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/button/style.js +3 -4
- package/dist/components/button/style.js.map +1 -1
- package/dist/components/button-group/index.d.ts +14 -13
- package/dist/components/button-group/index.d.ts.map +1 -0
- package/dist/components/button-group/index.js +43 -33
- package/dist/components/button-group/index.js.map +1 -1
- package/dist/components/button-group/style.js +3 -4
- package/dist/components/button-group/style.js.map +1 -1
- package/dist/components/checkbox/index.d.ts +399 -397
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +103 -74
- package/dist/components/checkbox/index.js.map +1 -1
- package/dist/components/checkbox/style.js +3 -4
- package/dist/components/checkbox/style.js.map +1 -1
- package/dist/components/checkbox-group/index.d.ts +397 -396
- package/dist/components/checkbox-group/index.d.ts.map +1 -0
- package/dist/components/checkbox-group/index.js +92 -70
- package/dist/components/checkbox-group/index.js.map +1 -1
- package/dist/components/checkbox-group/style.js +3 -4
- package/dist/components/checkbox-group/style.js.map +1 -1
- package/dist/components/collapse/index.d.ts +82 -75
- package/dist/components/collapse/index.d.ts.map +1 -0
- package/dist/components/collapse/index.js +228 -135
- package/dist/components/collapse/index.js.map +1 -1
- package/dist/components/collapse/style.js +3 -4
- package/dist/components/collapse/style.js.map +1 -1
- package/dist/components/context-menu/index.d.ts +307 -310
- package/dist/components/context-menu/index.d.ts.map +1 -0
- package/dist/components/context-menu/index.js +685 -270
- package/dist/components/context-menu/index.js.map +1 -1
- package/dist/components/context-menu/scrim.js +3 -4
- package/dist/components/context-menu/scrim.js.map +1 -1
- package/dist/components/context-menu/style.js +3 -4
- package/dist/components/context-menu/style.js.map +1 -1
- package/dist/components/dialog/index.d.ts +87 -78
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/index.js +183 -88
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/dialog/style.js +3 -4
- package/dist/components/dialog/style.js.map +1 -1
- package/dist/components/drawer/index.d.ts +159 -150
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +503 -242
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/style.js +3 -4
- package/dist/components/drawer/style.js.map +1 -1
- package/dist/components/dropdown/index.d.ts +125 -124
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +556 -328
- package/dist/components/dropdown/index.js.map +1 -1
- package/dist/components/dropdown/style.js +3 -4
- package/dist/components/dropdown/style.js.map +1 -1
- package/dist/components/dropdown-divider/index.d.ts +7 -6
- package/dist/components/dropdown-divider/index.d.ts.map +1 -0
- package/dist/components/dropdown-divider/index.js +10 -11
- package/dist/components/dropdown-divider/index.js.map +1 -1
- package/dist/components/dropdown-divider/style.js +3 -4
- package/dist/components/dropdown-divider/style.js.map +1 -1
- package/dist/components/dropdown-header/index.d.ts +7 -6
- package/dist/components/dropdown-header/index.d.ts.map +1 -0
- package/dist/components/dropdown-header/index.js +10 -11
- package/dist/components/dropdown-header/index.js.map +1 -1
- package/dist/components/dropdown-header/style.js +3 -4
- package/dist/components/dropdown-header/style.js.map +1 -1
- package/dist/components/dropdown-item/index.d.ts +13 -11
- package/dist/components/dropdown-item/index.d.ts.map +1 -0
- package/dist/components/dropdown-item/index.js +32 -25
- package/dist/components/dropdown-item/index.js.map +1 -1
- package/dist/components/dropdown-item/style.js +3 -4
- package/dist/components/dropdown-item/style.js.map +1 -1
- package/dist/components/editable-text/index.d.ts +506 -505
- package/dist/components/editable-text/index.d.ts.map +1 -0
- package/dist/components/editable-text/index.js +281 -127
- package/dist/components/editable-text/index.js.map +1 -1
- package/dist/components/editable-text/style.js +3 -4
- package/dist/components/editable-text/style.js.map +1 -1
- package/dist/components/empty/index.d.ts +26 -36
- package/dist/components/empty/index.d.ts.map +1 -0
- package/dist/components/empty/index.js +73 -60
- package/dist/components/empty/index.js.map +1 -1
- package/dist/components/empty/style.js +3 -4
- package/dist/components/empty/style.js.map +1 -1
- package/dist/components/icon/index.d.ts +12 -11
- package/dist/components/icon/index.d.ts.map +1 -0
- package/dist/components/icon/index.js +34 -27
- package/dist/components/icon/index.js.map +1 -1
- package/dist/components/icon/style.js +3 -4
- package/dist/components/icon/style.js.map +1 -1
- package/dist/components/image-preview/index.d.ts +58 -44
- package/dist/components/image-preview/index.d.ts.map +1 -0
- package/dist/components/image-preview/index.js +536 -265
- package/dist/components/image-preview/index.js.map +1 -1
- package/dist/components/image-preview/style.js +3 -4
- package/dist/components/image-preview/style.js.map +1 -1
- package/dist/components/index.d.ts +46 -43
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +41 -41
- package/dist/components/input/index.d.ts +418 -413
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +148 -84
- package/dist/components/input/index.js.map +1 -1
- package/dist/components/input/style.js +3 -4
- package/dist/components/input/style.js.map +1 -1
- package/dist/components/input-number/index.d.ts +453 -447
- package/dist/components/input-number/index.d.ts.map +1 -0
- package/dist/components/input-number/index.js +484 -292
- package/dist/components/input-number/index.js.map +1 -1
- package/dist/components/input-number/style.js +3 -4
- package/dist/components/input-number/style.js.map +1 -1
- package/dist/components/layout/index.d.ts +110 -87
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +238 -144
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/style.js +3 -4
- package/dist/components/layout/style.js.map +1 -1
- package/dist/components/middle-ellipsis/index.d.ts +93 -92
- package/dist/components/middle-ellipsis/index.d.ts.map +1 -0
- package/dist/components/middle-ellipsis/index.js +261 -107
- package/dist/components/middle-ellipsis/index.js.map +1 -1
- package/dist/components/middle-ellipsis/style.js +3 -4
- package/dist/components/middle-ellipsis/style.js.map +1 -1
- package/dist/components/middle-ellipsis/truncate.js +60 -30
- package/dist/components/middle-ellipsis/truncate.js.map +1 -1
- package/dist/components/option/index.d.ts +20 -18
- package/dist/components/option/index.d.ts.map +1 -0
- package/dist/components/option/index.js +53 -40
- package/dist/components/option/index.js.map +1 -1
- package/dist/components/option/style.js +3 -4
- package/dist/components/option/style.js.map +1 -1
- package/dist/components/popover/index.d.ts +69 -68
- package/dist/components/popover/index.d.ts.map +1 -0
- package/dist/components/popover/index.js +221 -104
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/popover/style.js +3 -4
- package/dist/components/popover/style.js.map +1 -1
- package/dist/components/radio/index.d.ts +396 -395
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +91 -62
- package/dist/components/radio/index.js.map +1 -1
- package/dist/components/radio/interaction.js +10 -11
- package/dist/components/radio/interaction.js.map +1 -1
- package/dist/components/radio/style.js +3 -4
- package/dist/components/radio/style.js.map +1 -1
- package/dist/components/radio-group/index.d.ts +417 -416
- package/dist/components/radio-group/index.d.ts.map +1 -0
- package/dist/components/radio-group/index.js +307 -207
- package/dist/components/radio-group/index.js.map +1 -1
- package/dist/components/radio-group/style.js +3 -4
- package/dist/components/radio-group/style.js.map +1 -1
- package/dist/components/segmented/index.d.ts +408 -402
- package/dist/components/segmented/index.d.ts.map +1 -0
- package/dist/components/segmented/index.js +267 -158
- package/dist/components/segmented/index.js.map +1 -1
- package/dist/components/segmented/style.js +3 -4
- package/dist/components/segmented/style.js.map +1 -1
- package/dist/components/segmented-trigger/index.d.ts +18 -17
- package/dist/components/segmented-trigger/index.d.ts.map +1 -0
- package/dist/components/segmented-trigger/index.js +45 -36
- package/dist/components/segmented-trigger/index.js.map +1 -1
- package/dist/components/segmented-trigger/style.js +3 -4
- package/dist/components/segmented-trigger/style.js.map +1 -1
- package/dist/components/select/index.d.ts +450 -448
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +342 -188
- package/dist/components/select/index.js.map +1 -1
- package/dist/components/select/style.js +3 -4
- package/dist/components/select/style.js.map +1 -1
- package/dist/components/slider/index.d.ts +428 -427
- package/dist/components/slider/index.d.ts.map +1 -0
- package/dist/components/slider/index.js +308 -216
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/style.js +3 -4
- package/dist/components/slider/style.js.map +1 -1
- package/dist/components/spinner/index.d.ts +39 -38
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +118 -65
- package/dist/components/spinner/index.js.map +1 -1
- package/dist/components/spinner/style.js +3 -4
- package/dist/components/spinner/style.js.map +1 -1
- package/dist/components/svg-draw-lines/index.d.ts +40 -39
- package/dist/components/svg-draw-lines/index.d.ts.map +1 -0
- package/dist/components/svg-draw-lines/index.js +189 -106
- package/dist/components/svg-draw-lines/index.js.map +1 -1
- package/dist/components/svg-draw-lines/style.js +3 -4
- package/dist/components/svg-draw-lines/style.js.map +1 -1
- package/dist/components/switch/index.d.ts +411 -409
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/index.js +193 -106
- package/dist/components/switch/index.js.map +1 -1
- package/dist/components/switch/style.js +3 -4
- package/dist/components/switch/style.js.map +1 -1
- package/dist/components/textarea/index.d.ts +430 -425
- package/dist/components/textarea/index.d.ts.map +1 -0
- package/dist/components/textarea/index.js +187 -100
- package/dist/components/textarea/index.js.map +1 -1
- package/dist/components/textarea/style.js +3 -4
- package/dist/components/textarea/style.js.map +1 -1
- package/dist/components/theme/index.d.ts +45 -44
- package/dist/components/theme/index.d.ts.map +1 -0
- package/dist/components/theme/index.js +268 -161
- package/dist/components/theme/index.js.map +1 -1
- package/dist/components/theme/style.js +3 -4
- package/dist/components/theme/style.js.map +1 -1
- package/dist/components/toast/index.d.ts +4 -3
- package/dist/components/toast/index.js +3 -3
- package/dist/components/toast/manager.d.ts +9 -8
- package/dist/components/toast/manager.d.ts.map +1 -0
- package/dist/components/toast/manager.js +215 -119
- package/dist/components/toast/manager.js.map +1 -1
- package/dist/components/toast/style.js +3 -4
- package/dist/components/toast/style.js.map +1 -1
- package/dist/components/toast/toast.d.ts +75 -71
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +203 -96
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toast/types.d.ts +10 -9
- package/dist/components/toast/types.d.ts.map +1 -0
- package/dist/components/tooltip/index.d.ts +72 -62
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +251 -93
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/components/tooltip/style.js +3 -4
- package/dist/components/tooltip/style.js.map +1 -1
- package/dist/icons/generated/akar-icons-check.d.ts +5 -4
- package/dist/icons/generated/akar-icons-check.d.ts.map +1 -0
- package/dist/icons/generated/akar-icons-check.js +3 -4
- package/dist/icons/generated/akar-icons-check.js.map +1 -1
- package/dist/icons/generated/akar-icons-circle-check.d.ts +5 -4
- package/dist/icons/generated/akar-icons-circle-check.d.ts.map +1 -0
- package/dist/icons/generated/akar-icons-circle-check.js +3 -4
- package/dist/icons/generated/akar-icons-circle-check.js.map +1 -1
- package/dist/icons/generated/andrsrxn-inbox.d.ts +7 -0
- package/dist/icons/generated/andrsrxn-inbox.d.ts.map +1 -0
- package/dist/icons/generated/andrsrxn-inbox.js +9 -0
- package/dist/icons/generated/andrsrxn-inbox.js.map +1 -0
- package/dist/icons/generated/bi-check-lg.d.ts +5 -4
- package/dist/icons/generated/bi-check-lg.d.ts.map +1 -0
- package/dist/icons/generated/bi-check-lg.js +3 -4
- package/dist/icons/generated/bi-check-lg.js.map +1 -1
- package/dist/icons/generated/bi-check.d.ts +5 -4
- package/dist/icons/generated/bi-check.d.ts.map +1 -0
- package/dist/icons/generated/bi-check.js +3 -4
- package/dist/icons/generated/bi-check.js.map +1 -1
- package/dist/icons/generated/fluent-tag-search-24-regular.d.ts +5 -4
- package/dist/icons/generated/fluent-tag-search-24-regular.d.ts.map +1 -0
- package/dist/icons/generated/fluent-tag-search-24-regular.js +3 -4
- package/dist/icons/generated/fluent-tag-search-24-regular.js.map +1 -1
- package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts +5 -4
- package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts.map +1 -0
- package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js +3 -4
- package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js.map +1 -1
- package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts +5 -4
- package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts.map +1 -0
- package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js +3 -4
- package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js.map +1 -1
- package/dist/icons/generated/heroicons-check-16-solid.d.ts +5 -4
- package/dist/icons/generated/heroicons-check-16-solid.d.ts.map +1 -0
- package/dist/icons/generated/heroicons-check-16-solid.js +3 -4
- package/dist/icons/generated/heroicons-check-16-solid.js.map +1 -1
- package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts +5 -4
- package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts.map +1 -0
- package/dist/icons/generated/heroicons-x-mark-16-solid.js +3 -4
- package/dist/icons/generated/heroicons-x-mark-16-solid.js.map +1 -1
- package/dist/icons/generated/jam-close-circle-f.d.ts +7 -6
- package/dist/icons/generated/jam-close-circle-f.d.ts.map +1 -0
- package/dist/icons/generated/jam-close-circle-f.js +3 -4
- package/dist/icons/generated/jam-close-circle-f.js.map +1 -1
- package/dist/icons/generated/lucide-arrow-down-to-line.d.ts +5 -4
- package/dist/icons/generated/lucide-arrow-down-to-line.d.ts.map +1 -0
- package/dist/icons/generated/lucide-arrow-down-to-line.js +3 -4
- package/dist/icons/generated/lucide-arrow-down-to-line.js.map +1 -1
- package/dist/icons/generated/lucide-arrow-up-to-line.d.ts +5 -4
- package/dist/icons/generated/lucide-arrow-up-to-line.d.ts.map +1 -0
- package/dist/icons/generated/lucide-arrow-up-to-line.js +3 -4
- package/dist/icons/generated/lucide-arrow-up-to-line.js.map +1 -1
- package/dist/icons/generated/lucide-bell.d.ts +5 -4
- package/dist/icons/generated/lucide-bell.d.ts.map +1 -0
- package/dist/icons/generated/lucide-bell.js +3 -4
- package/dist/icons/generated/lucide-bell.js.map +1 -1
- package/dist/icons/generated/lucide-check.d.ts +5 -4
- package/dist/icons/generated/lucide-check.d.ts.map +1 -0
- package/dist/icons/generated/lucide-check.js +3 -4
- package/dist/icons/generated/lucide-check.js.map +1 -1
- package/dist/icons/generated/lucide-chevron-down.d.ts +5 -4
- package/dist/icons/generated/lucide-chevron-down.d.ts.map +1 -0
- package/dist/icons/generated/lucide-chevron-down.js +3 -4
- package/dist/icons/generated/lucide-chevron-down.js.map +1 -1
- package/dist/icons/generated/lucide-chevron-left.d.ts +5 -4
- package/dist/icons/generated/lucide-chevron-left.d.ts.map +1 -0
- package/dist/icons/generated/lucide-chevron-left.js +3 -4
- package/dist/icons/generated/lucide-chevron-left.js.map +1 -1
- package/dist/icons/generated/lucide-chevron-right.d.ts +5 -4
- package/dist/icons/generated/lucide-chevron-right.d.ts.map +1 -0
- package/dist/icons/generated/lucide-chevron-right.js +3 -4
- package/dist/icons/generated/lucide-chevron-right.js.map +1 -1
- package/dist/icons/generated/lucide-chevron-up.d.ts +5 -4
- package/dist/icons/generated/lucide-chevron-up.d.ts.map +1 -0
- package/dist/icons/generated/lucide-chevron-up.js +3 -4
- package/dist/icons/generated/lucide-chevron-up.js.map +1 -1
- package/dist/icons/generated/lucide-circle-alert.d.ts +5 -4
- package/dist/icons/generated/lucide-circle-alert.d.ts.map +1 -0
- package/dist/icons/generated/lucide-circle-alert.js +3 -4
- package/dist/icons/generated/lucide-circle-alert.js.map +1 -1
- package/dist/icons/generated/lucide-clapperboard.d.ts +5 -4
- package/dist/icons/generated/lucide-clapperboard.d.ts.map +1 -0
- package/dist/icons/generated/lucide-clapperboard.js +3 -4
- package/dist/icons/generated/lucide-clapperboard.js.map +1 -1
- package/dist/icons/generated/lucide-clipboard-paste.d.ts +5 -4
- package/dist/icons/generated/lucide-clipboard-paste.d.ts.map +1 -0
- package/dist/icons/generated/lucide-clipboard-paste.js +3 -4
- package/dist/icons/generated/lucide-clipboard-paste.js.map +1 -1
- package/dist/icons/generated/lucide-code.d.ts +5 -4
- package/dist/icons/generated/lucide-code.d.ts.map +1 -0
- package/dist/icons/generated/lucide-code.js +3 -4
- package/dist/icons/generated/lucide-code.js.map +1 -1
- package/dist/icons/generated/lucide-copy.d.ts +5 -4
- package/dist/icons/generated/lucide-copy.d.ts.map +1 -0
- package/dist/icons/generated/lucide-copy.js +3 -4
- package/dist/icons/generated/lucide-copy.js.map +1 -1
- package/dist/icons/generated/lucide-download.d.ts +5 -4
- package/dist/icons/generated/lucide-download.d.ts.map +1 -0
- package/dist/icons/generated/lucide-download.js +3 -4
- package/dist/icons/generated/lucide-download.js.map +1 -1
- package/dist/icons/generated/lucide-ellipsis-vertical.d.ts +5 -4
- package/dist/icons/generated/lucide-ellipsis-vertical.d.ts.map +1 -0
- package/dist/icons/generated/lucide-ellipsis-vertical.js +3 -4
- package/dist/icons/generated/lucide-ellipsis-vertical.js.map +1 -1
- package/dist/icons/generated/lucide-external-link.d.ts +5 -4
- package/dist/icons/generated/lucide-external-link.d.ts.map +1 -0
- package/dist/icons/generated/lucide-external-link.js +3 -4
- package/dist/icons/generated/lucide-external-link.js.map +1 -1
- package/dist/icons/generated/lucide-eye.d.ts +5 -4
- package/dist/icons/generated/lucide-eye.d.ts.map +1 -0
- package/dist/icons/generated/lucide-eye.js +3 -4
- package/dist/icons/generated/lucide-eye.js.map +1 -1
- package/dist/icons/generated/lucide-file-text.d.ts +5 -4
- package/dist/icons/generated/lucide-file-text.d.ts.map +1 -0
- package/dist/icons/generated/lucide-file-text.js +3 -4
- package/dist/icons/generated/lucide-file-text.js.map +1 -1
- package/dist/icons/generated/lucide-file.d.ts +5 -4
- package/dist/icons/generated/lucide-file.d.ts.map +1 -0
- package/dist/icons/generated/lucide-file.js +3 -4
- package/dist/icons/generated/lucide-file.js.map +1 -1
- package/dist/icons/generated/lucide-film.d.ts +5 -4
- package/dist/icons/generated/lucide-film.d.ts.map +1 -0
- package/dist/icons/generated/lucide-film.js +3 -4
- package/dist/icons/generated/lucide-film.js.map +1 -1
- package/dist/icons/generated/lucide-folder-open.d.ts +5 -4
- package/dist/icons/generated/lucide-folder-open.d.ts.map +1 -0
- package/dist/icons/generated/lucide-folder-open.js +3 -4
- package/dist/icons/generated/lucide-folder-open.js.map +1 -1
- package/dist/icons/generated/lucide-folder.d.ts +5 -4
- package/dist/icons/generated/lucide-folder.d.ts.map +1 -0
- package/dist/icons/generated/lucide-folder.js +3 -4
- package/dist/icons/generated/lucide-folder.js.map +1 -1
- package/dist/icons/generated/lucide-globe.d.ts +5 -4
- package/dist/icons/generated/lucide-globe.d.ts.map +1 -0
- package/dist/icons/generated/lucide-globe.js +3 -4
- package/dist/icons/generated/lucide-globe.js.map +1 -1
- package/dist/icons/generated/lucide-headphones.d.ts +5 -4
- package/dist/icons/generated/lucide-headphones.d.ts.map +1 -0
- package/dist/icons/generated/lucide-headphones.js +3 -4
- package/dist/icons/generated/lucide-headphones.js.map +1 -1
- package/dist/icons/generated/lucide-heart.d.ts +5 -4
- package/dist/icons/generated/lucide-heart.d.ts.map +1 -0
- package/dist/icons/generated/lucide-heart.js +3 -4
- package/dist/icons/generated/lucide-heart.js.map +1 -1
- package/dist/icons/generated/lucide-image.d.ts +5 -4
- package/dist/icons/generated/lucide-image.d.ts.map +1 -0
- package/dist/icons/generated/lucide-image.js +3 -4
- package/dist/icons/generated/lucide-image.js.map +1 -1
- package/dist/icons/generated/lucide-inbox.d.ts +5 -4
- package/dist/icons/generated/lucide-inbox.d.ts.map +1 -0
- package/dist/icons/generated/lucide-inbox.js +3 -4
- package/dist/icons/generated/lucide-inbox.js.map +1 -1
- package/dist/icons/generated/lucide-info.d.ts +5 -4
- package/dist/icons/generated/lucide-info.d.ts.map +1 -0
- package/dist/icons/generated/lucide-info.js +3 -4
- package/dist/icons/generated/lucide-info.js.map +1 -1
- package/dist/icons/generated/lucide-layout-grid.d.ts +5 -4
- package/dist/icons/generated/lucide-layout-grid.d.ts.map +1 -0
- package/dist/icons/generated/lucide-layout-grid.js +3 -4
- package/dist/icons/generated/lucide-layout-grid.js.map +1 -1
- package/dist/icons/generated/lucide-link.d.ts +5 -4
- package/dist/icons/generated/lucide-link.d.ts.map +1 -0
- package/dist/icons/generated/lucide-link.js +3 -4
- package/dist/icons/generated/lucide-link.js.map +1 -1
- package/dist/icons/generated/lucide-list-filter.d.ts +5 -4
- package/dist/icons/generated/lucide-list-filter.d.ts.map +1 -0
- package/dist/icons/generated/lucide-list-filter.js +3 -4
- package/dist/icons/generated/lucide-list-filter.js.map +1 -1
- package/dist/icons/generated/lucide-list-restart.d.ts +5 -4
- package/dist/icons/generated/lucide-list-restart.d.ts.map +1 -0
- package/dist/icons/generated/lucide-list-restart.js +3 -4
- package/dist/icons/generated/lucide-list-restart.js.map +1 -1
- package/dist/icons/generated/lucide-loader-circle.d.ts +5 -4
- package/dist/icons/generated/lucide-loader-circle.d.ts.map +1 -0
- package/dist/icons/generated/lucide-loader-circle.js +3 -4
- package/dist/icons/generated/lucide-loader-circle.js.map +1 -1
- package/dist/icons/generated/lucide-mail.d.ts +5 -4
- package/dist/icons/generated/lucide-mail.d.ts.map +1 -0
- package/dist/icons/generated/lucide-mail.js +3 -4
- package/dist/icons/generated/lucide-mail.js.map +1 -1
- package/dist/icons/generated/lucide-minus.d.ts +5 -4
- package/dist/icons/generated/lucide-minus.d.ts.map +1 -0
- package/dist/icons/generated/lucide-minus.js +3 -4
- package/dist/icons/generated/lucide-minus.js.map +1 -1
- package/dist/icons/generated/lucide-music.d.ts +5 -4
- package/dist/icons/generated/lucide-music.d.ts.map +1 -0
- package/dist/icons/generated/lucide-music.js +3 -4
- package/dist/icons/generated/lucide-music.js.map +1 -1
- package/dist/icons/generated/lucide-package.d.ts +5 -4
- package/dist/icons/generated/lucide-package.d.ts.map +1 -0
- package/dist/icons/generated/lucide-package.js +3 -4
- package/dist/icons/generated/lucide-package.js.map +1 -1
- package/dist/icons/generated/lucide-pen-line.d.ts +5 -4
- package/dist/icons/generated/lucide-pen-line.d.ts.map +1 -0
- package/dist/icons/generated/lucide-pen-line.js +3 -4
- package/dist/icons/generated/lucide-pen-line.js.map +1 -1
- package/dist/icons/generated/lucide-pencil.d.ts +5 -4
- package/dist/icons/generated/lucide-pencil.d.ts.map +1 -0
- package/dist/icons/generated/lucide-pencil.js +3 -4
- package/dist/icons/generated/lucide-pencil.js.map +1 -1
- package/dist/icons/generated/lucide-play.d.ts +5 -4
- package/dist/icons/generated/lucide-play.d.ts.map +1 -0
- package/dist/icons/generated/lucide-play.js +3 -4
- package/dist/icons/generated/lucide-play.js.map +1 -1
- package/dist/icons/generated/lucide-plus.d.ts +5 -4
- package/dist/icons/generated/lucide-plus.d.ts.map +1 -0
- package/dist/icons/generated/lucide-plus.js +3 -4
- package/dist/icons/generated/lucide-plus.js.map +1 -1
- package/dist/icons/generated/lucide-printer.d.ts +5 -4
- package/dist/icons/generated/lucide-printer.d.ts.map +1 -0
- package/dist/icons/generated/lucide-printer.js +3 -4
- package/dist/icons/generated/lucide-printer.js.map +1 -1
- package/dist/icons/generated/lucide-redo-2.d.ts +5 -4
- package/dist/icons/generated/lucide-redo-2.d.ts.map +1 -0
- package/dist/icons/generated/lucide-redo-2.js +3 -4
- package/dist/icons/generated/lucide-redo-2.js.map +1 -1
- package/dist/icons/generated/lucide-refresh-cw.d.ts +5 -4
- package/dist/icons/generated/lucide-refresh-cw.d.ts.map +1 -0
- package/dist/icons/generated/lucide-refresh-cw.js +3 -4
- package/dist/icons/generated/lucide-refresh-cw.js.map +1 -1
- package/dist/icons/generated/lucide-scissors.d.ts +5 -4
- package/dist/icons/generated/lucide-scissors.d.ts.map +1 -0
- package/dist/icons/generated/lucide-scissors.js +3 -4
- package/dist/icons/generated/lucide-scissors.js.map +1 -1
- package/dist/icons/generated/lucide-search.d.ts +5 -4
- package/dist/icons/generated/lucide-search.d.ts.map +1 -0
- package/dist/icons/generated/lucide-search.js +3 -4
- package/dist/icons/generated/lucide-search.js.map +1 -1
- package/dist/icons/generated/lucide-settings.d.ts +5 -4
- package/dist/icons/generated/lucide-settings.d.ts.map +1 -0
- package/dist/icons/generated/lucide-settings.js +3 -4
- package/dist/icons/generated/lucide-settings.js.map +1 -1
- package/dist/icons/generated/lucide-sliders-horizontal.d.ts +5 -4
- package/dist/icons/generated/lucide-sliders-horizontal.d.ts.map +1 -0
- package/dist/icons/generated/lucide-sliders-horizontal.js +3 -4
- package/dist/icons/generated/lucide-sliders-horizontal.js.map +1 -1
- package/dist/icons/generated/lucide-star.d.ts +5 -4
- package/dist/icons/generated/lucide-star.d.ts.map +1 -0
- package/dist/icons/generated/lucide-star.js +3 -4
- package/dist/icons/generated/lucide-star.js.map +1 -1
- package/dist/icons/generated/lucide-tag.d.ts +5 -4
- package/dist/icons/generated/lucide-tag.d.ts.map +1 -0
- package/dist/icons/generated/lucide-tag.js +3 -4
- package/dist/icons/generated/lucide-tag.js.map +1 -1
- package/dist/icons/generated/lucide-tags.d.ts +5 -4
- package/dist/icons/generated/lucide-tags.d.ts.map +1 -0
- package/dist/icons/generated/lucide-tags.js +3 -4
- package/dist/icons/generated/lucide-tags.js.map +1 -1
- package/dist/icons/generated/lucide-trash-2.d.ts +5 -4
- package/dist/icons/generated/lucide-trash-2.d.ts.map +1 -0
- package/dist/icons/generated/lucide-trash-2.js +3 -4
- package/dist/icons/generated/lucide-trash-2.js.map +1 -1
- package/dist/icons/generated/lucide-triangle-alert.d.ts +5 -4
- package/dist/icons/generated/lucide-triangle-alert.d.ts.map +1 -0
- package/dist/icons/generated/lucide-triangle-alert.js +3 -4
- package/dist/icons/generated/lucide-triangle-alert.js.map +1 -1
- package/dist/icons/generated/lucide-undo-2.d.ts +5 -4
- package/dist/icons/generated/lucide-undo-2.d.ts.map +1 -0
- package/dist/icons/generated/lucide-undo-2.js +3 -4
- package/dist/icons/generated/lucide-undo-2.js.map +1 -1
- package/dist/icons/generated/lucide-upload.d.ts +5 -4
- package/dist/icons/generated/lucide-upload.d.ts.map +1 -0
- package/dist/icons/generated/lucide-upload.js +3 -4
- package/dist/icons/generated/lucide-upload.js.map +1 -1
- package/dist/icons/generated/lucide-user.d.ts +5 -4
- package/dist/icons/generated/lucide-user.d.ts.map +1 -0
- package/dist/icons/generated/lucide-user.js +3 -4
- package/dist/icons/generated/lucide-user.js.map +1 -1
- package/dist/icons/generated/lucide-wrench.d.ts +5 -4
- package/dist/icons/generated/lucide-wrench.d.ts.map +1 -0
- package/dist/icons/generated/lucide-wrench.js +3 -4
- package/dist/icons/generated/lucide-wrench.js.map +1 -1
- package/dist/icons/generated/lucide-x.d.ts +5 -4
- package/dist/icons/generated/lucide-x.d.ts.map +1 -0
- package/dist/icons/generated/lucide-x.js +3 -4
- package/dist/icons/generated/lucide-x.js.map +1 -1
- package/dist/icons/generated/mdi-tag-search-outline.d.ts +5 -4
- package/dist/icons/generated/mdi-tag-search-outline.d.ts.map +1 -0
- package/dist/icons/generated/mdi-tag-search-outline.js +3 -4
- package/dist/icons/generated/mdi-tag-search-outline.js.map +1 -1
- package/dist/icons/generated/ooui-close.d.ts +5 -4
- package/dist/icons/generated/ooui-close.d.ts.map +1 -0
- package/dist/icons/generated/ooui-close.js +3 -4
- package/dist/icons/generated/ooui-close.js.map +1 -1
- package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts +5 -4
- package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts.map +1 -0
- package/dist/icons/generated/radix-icons-panel-left-minimized.js +3 -4
- package/dist/icons/generated/radix-icons-panel-left-minimized.js.map +1 -1
- package/dist/icons/generated/radix-icons-reset.d.ts +5 -4
- package/dist/icons/generated/radix-icons-reset.d.ts.map +1 -0
- package/dist/icons/generated/radix-icons-reset.js +3 -4
- package/dist/icons/generated/radix-icons-reset.js.map +1 -1
- package/dist/icons/generated/tabler-sort-ascending-letters.d.ts +5 -4
- package/dist/icons/generated/tabler-sort-ascending-letters.d.ts.map +1 -0
- package/dist/icons/generated/tabler-sort-ascending-letters.js +3 -4
- package/dist/icons/generated/tabler-sort-ascending-letters.js.map +1 -1
- package/dist/icons/index.d.ts +75 -73
- package/dist/icons/index.js +75 -74
- package/dist/shared/element-height/index.js +51 -25
- package/dist/shared/element-height/index.js.map +1 -1
- package/dist/shared/element-width/index.js +39 -24
- package/dist/shared/element-width/index.js.map +1 -1
- package/dist/shared/events/user-change.js +14 -8
- package/dist/shared/events/user-change.js.map +1 -1
- package/dist/shared/focus/pointer-focus.js +56 -30
- package/dist/shared/focus/pointer-focus.js.map +1 -1
- package/dist/shared/focus/tabbable.js +96 -0
- package/dist/shared/focus/tabbable.js.map +1 -0
- package/dist/shared/form-association/field-id.js +13 -6
- package/dist/shared/form-association/field-id.js.map +1 -1
- package/dist/shared/form-association/index.js +75 -42
- package/dist/shared/form-association/index.js.map +1 -1
- package/dist/shared/gesture/drag-gesture.js +239 -99
- package/dist/shared/gesture/drag-gesture.js.map +1 -1
- package/dist/shared/gesture/physics.js +49 -16
- package/dist/shared/gesture/physics.js.map +1 -1
- package/dist/shared/gesture/pinch-gesture.js +111 -60
- package/dist/shared/gesture/pinch-gesture.js.map +1 -1
- package/dist/shared/group-management/index.js +181 -84
- package/dist/shared/group-management/index.js.map +1 -1
- package/dist/shared/label-emptiness/index.js +45 -26
- package/dist/shared/label-emptiness/index.js.map +1 -1
- package/dist/shared/locale/builtin-labels.js +38 -0
- package/dist/shared/locale/builtin-labels.js.map +1 -0
- package/dist/shared/menu-behavior/index.js +113 -60
- package/dist/shared/menu-behavior/index.js.map +1 -1
- package/dist/shared/menu-portal/menu-portal.js +47 -26
- package/dist/shared/menu-portal/menu-portal.js.map +1 -1
- package/dist/shared/menu-portal/menu-tree.js +132 -75
- package/dist/shared/menu-portal/menu-tree.js.map +1 -1
- package/dist/shared/normalize/index.js +16 -7
- package/dist/shared/normalize/index.js.map +1 -1
- package/dist/shared/open-state/index.js +7 -8
- package/dist/shared/open-state/index.js.map +1 -1
- package/dist/shared/option-portal/combobox-shell.js +121 -56
- package/dist/shared/option-portal/combobox-shell.js.map +1 -1
- package/dist/shared/option-portal/index.js +65 -44
- package/dist/shared/option-portal/index.js.map +1 -1
- package/dist/shared/overlay/anchored-panel.js +75 -40
- package/dist/shared/overlay/anchored-panel.js.map +1 -1
- package/dist/shared/overlay/native-dialog-presence.js +116 -52
- package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
- package/dist/shared/overlay/nested-drawer-layers.js +76 -46
- package/dist/shared/overlay/nested-drawer-layers.js.map +1 -1
- package/dist/shared/overlay/open-overlay.js +240 -136
- package/dist/shared/overlay/open-overlay.js.map +1 -1
- package/dist/shared/overlay/overlay-root.js +33 -24
- package/dist/shared/overlay/overlay-root.js.map +1 -1
- package/dist/shared/overlay/overlay.js +109 -66
- package/dist/shared/overlay/overlay.js.map +1 -1
- package/dist/shared/overlay/placement-props.js +9 -4
- package/dist/shared/overlay/placement-props.js.map +1 -1
- package/dist/shared/overlay/portal.d.ts +2 -0
- package/dist/shared/overlay/portal.d.ts.map +1 -0
- package/dist/shared/overlay/portal.js +202 -117
- package/dist/shared/overlay/portal.js.map +1 -1
- package/dist/shared/overlay/positioning-generation.js +9 -10
- package/dist/shared/overlay/positioning-generation.js.map +1 -1
- package/dist/shared/overlay/presence.js +43 -21
- package/dist/shared/overlay/presence.js.map +1 -1
- package/dist/shared/overlay/theme-overlay-scope.js +22 -19
- package/dist/shared/overlay/theme-overlay-scope.js.map +1 -1
- package/dist/shared/scroll-lock/scroll-lock.js +49 -15
- package/dist/shared/scroll-lock/scroll-lock.js.map +1 -1
- package/dist/shared/theme/duration.js +13 -6
- package/dist/shared/theme/duration.js.map +1 -1
- package/dist/shared/theme/reduced-motion.js +14 -9
- package/dist/shared/theme/reduced-motion.js.map +1 -1
- package/dist/shared/theme/root-sync.js +85 -32
- package/dist/shared/theme/root-sync.js.map +1 -1
- package/dist/shared/visible-area/index.js +81 -37
- package/dist/shared/visible-area/index.js.map +1 -1
- package/dist/types/iconify.d.ts +1 -1
- package/dist/types/iconify.js +0 -0
- package/dist/types/react.d.ts +8 -10
- package/dist/types/react.d.ts.map +1 -0
- package/dist/types/react.js +0 -0
- package/dist/types/utils.d.ts +8 -13
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +0 -0
- package/dist/types/vue.d.ts +9 -13
- package/dist/types/vue.d.ts.map +1 -0
- package/dist/types/vue.js +0 -0
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +30 -4
- package/dist/vite/index.js.map +1 -1
- package/package.json +11 -23
- package/dist/_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js +0 -9
- package/dist/components/middle-ellipsis/truncate.d.ts +0 -62
- package/dist/components/radio/interaction.d.ts +0 -4
- package/dist/scrollbars/index.d.ts +0 -33
- package/dist/scrollbars/index.js +0 -18
- package/dist/scrollbars/index.js.map +0 -1
- package/dist/scrollbars/internal.js +0 -6
- package/dist/scrollbars/internal.js.map +0 -1
- package/dist/scrollbars/style.css +0 -10
|
@@ -1,123 +1,234 @@
|
|
|
1
|
-
import
|
|
1
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
2
2
|
import "../icon/index.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
3
|
+
import glass_default from "../../classes/glass.js";
|
|
4
|
+
import lucide_chevron_left_default from "../../icons/generated/lucide-chevron-left.js";
|
|
5
|
+
import lucide_chevron_right_default from "../../icons/generated/lucide-chevron-right.js";
|
|
6
|
+
import lucide_plus_default from "../../icons/generated/lucide-plus.js";
|
|
7
|
+
import lucide_minus_default from "../../icons/generated/lucide-minus.js";
|
|
8
|
+
import ooui_close_default from "../../icons/generated/ooui-close.js";
|
|
9
|
+
import radix_icons_reset_default from "../../icons/generated/radix-icons-reset.js";
|
|
10
10
|
import "../button/index.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
import { resolveBuiltinLabelSet } from "../../shared/locale/builtin-labels.js";
|
|
12
|
+
import { defineOpenOverlay } from "../../shared/overlay/open-overlay.js";
|
|
13
|
+
import { getFallbackOverlayRoot } from "../../shared/overlay/overlay-root.js";
|
|
14
|
+
import { findNearestTheme, findRootTheme } from "../../shared/overlay/theme-overlay-scope.js";
|
|
15
|
+
import { defineScrollLockLease } from "../../shared/scroll-lock/scroll-lock.js";
|
|
16
|
+
import modal_surface_default from "../../assets/modal-surface.js";
|
|
17
|
+
import { defineNativeDialogPresence } from "../../shared/overlay/native-dialog-presence.js";
|
|
18
|
+
import { attachDragGesture } from "../../shared/gesture/drag-gesture.js";
|
|
19
|
+
import { clamp } from "../../shared/gesture/physics.js";
|
|
20
|
+
import { attachPinchGesture } from "../../shared/gesture/pinch-gesture.js";
|
|
21
|
+
import style_default from "./style.js";
|
|
22
|
+
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
23
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
24
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
25
|
+
import { styleMap } from "lit/directives/style-map.js";
|
|
26
|
+
// src/components/image-preview/index.ts
|
|
27
|
+
const MIN_SCALE = 1;
|
|
28
|
+
const MAX_SCALE = 4;
|
|
29
|
+
const ZOOM_STEP = .5;
|
|
30
|
+
const WHEEL_ZOOM_SENSITIVITY = .002;
|
|
31
|
+
const PAN_MOVE_THRESHOLD = 3;
|
|
32
|
+
const SWIPE_DISTANCE_RATIO = .15;
|
|
33
|
+
const SWIPE_VELOCITY = 320;
|
|
34
|
+
const SWIPE_FLICK_DISTANCE = 16;
|
|
35
|
+
const SWIPE_FLICK_VELOCITY = 160;
|
|
36
|
+
const SWIPE_SETTLE_MS = 320;
|
|
37
|
+
/**
|
|
38
|
+
* 图像预览的内部宿主。对外只通过 `imagePreview()` 使用,因此不导出类、
|
|
39
|
+
* 不注册 `HTMLElementTagNameMap`,避免形成声明式 tag 契约。
|
|
40
|
+
*
|
|
41
|
+
* 内部使用原生 `<dialog>.showModal()`,与 `<web-ui-dialog>` 共享
|
|
42
|
+
* `native-dialog-presence` 与 `scroll-lock` 两个底层插件,而不是复用该组件:
|
|
43
|
+
* 本组件需要自身铺满视口的 dialog(backdrop 即 dialog 背景)与自有指针交互,
|
|
44
|
+
* 与 dialog 组件的玻璃卡片 / 插槽契约不同源。
|
|
45
|
+
*/
|
|
46
|
+
let WebUiImagePreview = class WebUiImagePreview extends LitElement {
|
|
47
|
+
constructor(..._args) {
|
|
48
|
+
super(..._args);
|
|
49
|
+
this.images = [];
|
|
50
|
+
this.loop = true;
|
|
51
|
+
this.nav = false;
|
|
52
|
+
this.toolbar = false;
|
|
53
|
+
this.closable = false;
|
|
54
|
+
this.indicator = false;
|
|
55
|
+
this.swipe = false;
|
|
56
|
+
this.noScrollLock = false;
|
|
57
|
+
this.noBackdropClose = false;
|
|
58
|
+
this._open = false;
|
|
59
|
+
this._index = 0;
|
|
60
|
+
this._scale = MIN_SCALE;
|
|
61
|
+
this._offsetX = 0;
|
|
62
|
+
this._offsetY = 0;
|
|
63
|
+
this._swipeOffset = 0;
|
|
64
|
+
this._swipeSettling = false;
|
|
65
|
+
this._dragging = false;
|
|
66
|
+
this._loadedSources = /* @__PURE__ */ new Set();
|
|
67
|
+
this._swipeDir = 0;
|
|
68
|
+
this._swipeStartTime = 0;
|
|
69
|
+
this._swipeSettleCommit = false;
|
|
70
|
+
this._swipeSettleDir = 1;
|
|
71
|
+
this._scrollLock = defineScrollLockLease().make();
|
|
72
|
+
this._overlay = defineOpenOverlay().make({
|
|
29
73
|
requestClose: () => this.close(),
|
|
30
74
|
isConnected: () => this.isConnected
|
|
31
|
-
})
|
|
75
|
+
});
|
|
76
|
+
this._handle = null;
|
|
77
|
+
this._presence = defineNativeDialogPresence().make({
|
|
32
78
|
getDialog: () => this.dialog,
|
|
33
79
|
isConnected: () => this.isConnected,
|
|
34
80
|
isOpen: () => this._open
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
81
|
+
});
|
|
82
|
+
this._dismissed = false;
|
|
83
|
+
this._swipeGesture = false;
|
|
84
|
+
this._panOriginX = 0;
|
|
85
|
+
this._panOriginY = 0;
|
|
86
|
+
this._dragged = false;
|
|
87
|
+
this._blankPointerDown = false;
|
|
88
|
+
this._pinchScale = MIN_SCALE;
|
|
89
|
+
this._pinchLocalX = 0;
|
|
90
|
+
this._pinchLocalY = 0;
|
|
91
|
+
this._handleImageSettled = (event) => {
|
|
92
|
+
const image = event.currentTarget;
|
|
93
|
+
if (!image) return;
|
|
94
|
+
this._markLoaded(image);
|
|
95
|
+
this.requestUpdate();
|
|
96
|
+
};
|
|
97
|
+
this._handleCancel = (event) => {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
this.close();
|
|
100
|
+
};
|
|
101
|
+
this._handleNativeClose = () => {
|
|
41
102
|
this._notifyDismissed();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
103
|
+
};
|
|
104
|
+
this._handleTransitionEnd = (event) => {
|
|
105
|
+
this._presence.handleTransitionEnd(event);
|
|
106
|
+
};
|
|
107
|
+
this._handleKeydown = (event) => {
|
|
108
|
+
if (!this._open || event.defaultPrevented) return;
|
|
109
|
+
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
|
110
|
+
switch (event.key) {
|
|
46
111
|
case "ArrowLeft":
|
|
47
|
-
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
this.prev();
|
|
48
114
|
break;
|
|
49
115
|
case "ArrowRight":
|
|
50
|
-
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
this.next();
|
|
51
118
|
break;
|
|
52
119
|
case "+":
|
|
53
120
|
case "=":
|
|
54
|
-
|
|
121
|
+
event.preventDefault();
|
|
122
|
+
this.zoomIn();
|
|
55
123
|
break;
|
|
56
124
|
case "-":
|
|
57
125
|
case "_":
|
|
58
|
-
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
this.zoomOut();
|
|
59
128
|
break;
|
|
60
|
-
case "0":
|
|
129
|
+
case "0":
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
this.resetZoom();
|
|
61
132
|
}
|
|
62
|
-
}
|
|
133
|
+
};
|
|
134
|
+
this._handleWheel = (event) => {
|
|
63
135
|
if (!this._open) return;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
136
|
+
event.preventDefault();
|
|
137
|
+
const delta = event.deltaMode === 1 ? event.deltaY * 16 : event.deltaY;
|
|
138
|
+
const origin = this._stageOrigin();
|
|
139
|
+
this._zoomAt(this._scale * Math.exp(-delta * WHEEL_ZOOM_SENSITIVITY), event.clientX - origin.x, event.clientY - origin.y);
|
|
140
|
+
};
|
|
141
|
+
this._handleClick = (event) => {
|
|
68
142
|
if (!this._open) return;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
143
|
+
const blank = this._blankPointerDown;
|
|
144
|
+
this._blankPointerDown = false;
|
|
145
|
+
if (!blank) return;
|
|
146
|
+
if (event.detail === 0) return;
|
|
147
|
+
if (this._dragged) {
|
|
148
|
+
this._dragged = false;
|
|
149
|
+
return;
|
|
76
150
|
}
|
|
77
|
-
|
|
78
|
-
this.
|
|
79
|
-
}
|
|
151
|
+
if (this.noBackdropClose) return;
|
|
152
|
+
this.close();
|
|
153
|
+
};
|
|
154
|
+
this._handleDoubleClick = (event) => {
|
|
155
|
+
if (!this._open || event.target !== this._image) return;
|
|
156
|
+
if (this._scale > MIN_SCALE) this.resetZoom();
|
|
157
|
+
else this._setScale(MAX_SCALE / 2);
|
|
158
|
+
};
|
|
159
|
+
this._handlePinchStart = (info) => {
|
|
160
|
+
if (!this._open) return;
|
|
161
|
+
this._endGesture();
|
|
162
|
+
this._dragging = true;
|
|
163
|
+
this._dragged = true;
|
|
164
|
+
const origin = this._stageOrigin();
|
|
165
|
+
this._pinchScale = this._scale;
|
|
166
|
+
this._pinchLocalX = (info.centerX - origin.x - this._offsetX) / this._scale;
|
|
167
|
+
this._pinchLocalY = (info.centerY - origin.y - this._offsetY) / this._scale;
|
|
168
|
+
};
|
|
169
|
+
this._handlePinchMove = (info) => {
|
|
80
170
|
if (!this._open) return;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.
|
|
84
|
-
}
|
|
171
|
+
const scale = clamp(this._pinchScale * info.ratio, MIN_SCALE, MAX_SCALE);
|
|
172
|
+
const origin = this._stageOrigin();
|
|
173
|
+
this._applyScale(scale, info.centerX - origin.x - this._pinchLocalX * scale, info.centerY - origin.y - this._pinchLocalY * scale);
|
|
174
|
+
};
|
|
175
|
+
this._handlePinchEnd = () => {
|
|
176
|
+
this._dragging = false;
|
|
177
|
+
};
|
|
178
|
+
this._handlePinchCancel = () => {
|
|
179
|
+
this._dragging = false;
|
|
180
|
+
};
|
|
181
|
+
this._handleSwipeSettleEnd = (event) => {
|
|
182
|
+
if (!this._swipeSettling || event.propertyName !== "transform") return;
|
|
183
|
+
this._finishSwipeSettle();
|
|
184
|
+
};
|
|
185
|
+
this._handlePointerDown = (event) => {
|
|
85
186
|
if (!this._open) return;
|
|
86
|
-
|
|
87
|
-
this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.
|
|
97
|
-
|
|
98
|
-
|
|
187
|
+
this._cancelSwipeSettle();
|
|
188
|
+
this._swipeDir = 0;
|
|
189
|
+
this._swipeOffset = 0;
|
|
190
|
+
if (!(event.button === 0 && event.isPrimary !== false)) return;
|
|
191
|
+
this._blankPointerDown = this._isBlank(event.target);
|
|
192
|
+
this._dragged = false;
|
|
193
|
+
const stage = this._stage;
|
|
194
|
+
if (!stage || event.target !== stage && !stage.contains(event.target)) return;
|
|
195
|
+
this._swipeGesture = this._scale === MIN_SCALE && this.swipe && this.images.length > 1;
|
|
196
|
+
this._swipeStartTime = event.timeStamp;
|
|
197
|
+
this._panOriginX = this._offsetX;
|
|
198
|
+
this._panOriginY = this._offsetY;
|
|
199
|
+
this._gesture?.destroy();
|
|
200
|
+
this._gesture = attachDragGesture(event, {
|
|
99
201
|
axis: "both",
|
|
100
|
-
threshold:
|
|
101
|
-
onMove: (
|
|
102
|
-
|
|
202
|
+
threshold: PAN_MOVE_THRESHOLD,
|
|
203
|
+
onMove: (info) => {
|
|
204
|
+
if (this._swipeGesture) {
|
|
205
|
+
this._swipeOffset = info.deltaX;
|
|
206
|
+
if (info.deltaX !== 0) this._swipeDir = info.deltaX < 0 ? 1 : -1;
|
|
207
|
+
} else this._panTo(info.deltaX, info.deltaY);
|
|
103
208
|
},
|
|
104
|
-
onEnd: (
|
|
105
|
-
this._dragged =
|
|
209
|
+
onEnd: (info) => {
|
|
210
|
+
this._dragged = true;
|
|
211
|
+
this._dragging = false;
|
|
212
|
+
if (this._swipeGesture) this._settleSwipe(info.deltaX, info.velocityX, info.timeStamp);
|
|
106
213
|
},
|
|
107
214
|
onTap: () => {
|
|
108
|
-
this._dragging =
|
|
215
|
+
this._dragging = false;
|
|
109
216
|
},
|
|
110
217
|
onCancel: () => {
|
|
111
|
-
this._dragging =
|
|
218
|
+
this._dragging = false;
|
|
219
|
+
this._cancelSwipeSettle();
|
|
220
|
+
this._swipeDir = 0;
|
|
221
|
+
this._swipeOffset = 0;
|
|
112
222
|
}
|
|
113
|
-
})
|
|
223
|
+
});
|
|
224
|
+
this._dragging = true;
|
|
114
225
|
};
|
|
115
226
|
}
|
|
116
227
|
static {
|
|
117
228
|
this.styles = [
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
229
|
+
unsafeCSS(glass_default),
|
|
230
|
+
unsafeCSS(modal_surface_default),
|
|
231
|
+
unsafeCSS(style_default)
|
|
121
232
|
];
|
|
122
233
|
}
|
|
123
234
|
get dialog() {
|
|
@@ -135,20 +246,36 @@ var O = 1, k = 4, A = .5, j = .002, M = 3, N = .15, P = 320, F = 16, I = 160, L
|
|
|
135
246
|
get scale() {
|
|
136
247
|
return this._scale;
|
|
137
248
|
}
|
|
138
|
-
configure(
|
|
139
|
-
this.images =
|
|
249
|
+
configure(options) {
|
|
250
|
+
this.images = options.images;
|
|
251
|
+
this.loop = options.loop;
|
|
252
|
+
this.nav = options.nav;
|
|
253
|
+
this.toolbar = options.toolbar;
|
|
254
|
+
this.closable = options.closable;
|
|
255
|
+
this.indicator = options.indicator;
|
|
256
|
+
this.swipe = options.swipe;
|
|
257
|
+
this.noScrollLock = options.noScrollLock;
|
|
258
|
+
this.noBackdropClose = options.noBackdropClose;
|
|
259
|
+
this.ariaLabels = options.ariaLabels;
|
|
260
|
+
this._index = clamp(options.index, 0, Math.max(0, options.images.length - 1));
|
|
140
261
|
}
|
|
141
262
|
show() {
|
|
142
|
-
|
|
263
|
+
if (this._open) return;
|
|
264
|
+
this._dismissed = false;
|
|
265
|
+
this._open = true;
|
|
143
266
|
}
|
|
144
267
|
close() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
268
|
+
if (!this._open) return;
|
|
269
|
+
this._endGesture();
|
|
270
|
+
this._open = false;
|
|
271
|
+
}
|
|
272
|
+
goTo(target) {
|
|
273
|
+
const count = this.images.length;
|
|
274
|
+
if (count === 0) return;
|
|
275
|
+
const next = this.loop ? (target % count + count) % count : clamp(target, 0, count - 1);
|
|
276
|
+
if (next === this._index) return;
|
|
277
|
+
this._index = next;
|
|
278
|
+
this.resetZoom();
|
|
152
279
|
}
|
|
153
280
|
next() {
|
|
154
281
|
this.goTo(this._index + 1);
|
|
@@ -157,150 +284,261 @@ var O = 1, k = 4, A = .5, j = .002, M = 3, N = .15, P = 320, F = 16, I = 160, L
|
|
|
157
284
|
this.goTo(this._index - 1);
|
|
158
285
|
}
|
|
159
286
|
zoomIn() {
|
|
160
|
-
this._setScale(this._scale +
|
|
287
|
+
this._setScale(this._scale + ZOOM_STEP);
|
|
161
288
|
}
|
|
162
289
|
zoomOut() {
|
|
163
|
-
this._setScale(this._scale -
|
|
290
|
+
this._setScale(this._scale - ZOOM_STEP);
|
|
164
291
|
}
|
|
165
292
|
resetZoom() {
|
|
166
|
-
(this._scale
|
|
293
|
+
if (this._scale === MIN_SCALE && this._offsetX === 0 && this._offsetY === 0) return;
|
|
294
|
+
this._scale = MIN_SCALE;
|
|
295
|
+
this._offsetX = 0;
|
|
296
|
+
this._offsetY = 0;
|
|
167
297
|
}
|
|
168
298
|
connectedCallback() {
|
|
169
|
-
super.connectedCallback()
|
|
299
|
+
super.connectedCallback();
|
|
300
|
+
this._presence.reconcile();
|
|
301
|
+
this._syncScrollLock();
|
|
302
|
+
this._attachPinch();
|
|
303
|
+
this._reclaimIfOpen();
|
|
170
304
|
}
|
|
171
305
|
_reclaimIfOpen() {
|
|
172
306
|
if (!this._open || this._handle) return;
|
|
173
|
-
|
|
174
|
-
|
|
307
|
+
const dialog = this.dialog;
|
|
308
|
+
if (!dialog) return;
|
|
309
|
+
this._handle = this._overlay.claim(dialog, { ancestryFrom: this });
|
|
175
310
|
}
|
|
176
311
|
firstUpdated() {
|
|
177
312
|
this._attachPinch();
|
|
178
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* 双指缩放手势挂载。`firstUpdated` 整个生命周期只跑一次,而断连时会 destroy
|
|
316
|
+
* 并清空 `_pinch`,宿主被移出文档再接回后手势会永久失效——因此首连与重挂
|
|
317
|
+
* 共用本方法,重挂时补挂。
|
|
318
|
+
*/
|
|
179
319
|
_attachPinch() {
|
|
180
320
|
if (this._pinch) return;
|
|
181
|
-
|
|
182
|
-
|
|
321
|
+
const stage = this._stage;
|
|
322
|
+
if (!stage) return;
|
|
323
|
+
this._pinch = attachPinchGesture(stage, {
|
|
183
324
|
onStart: this._handlePinchStart,
|
|
184
325
|
onMove: this._handlePinchMove,
|
|
185
326
|
onEnd: this._handlePinchEnd,
|
|
186
327
|
onCancel: this._handlePinchCancel
|
|
187
|
-
})
|
|
188
|
-
}
|
|
189
|
-
updated(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
updated(props) {
|
|
331
|
+
super.updated(props);
|
|
332
|
+
if (!this.isConnected) return;
|
|
333
|
+
if (props.has("_open")) {
|
|
334
|
+
this._presence.sync(this._open);
|
|
335
|
+
if (this._open) window.getSelection()?.removeAllRanges();
|
|
336
|
+
const dialog = this.dialog;
|
|
337
|
+
if (dialog) {
|
|
338
|
+
if (this._open) {
|
|
339
|
+
this._handle?.release();
|
|
340
|
+
this._handle = this._overlay.claim(dialog, { ancestryFrom: this });
|
|
341
|
+
} else {
|
|
342
|
+
this._handle?.release();
|
|
343
|
+
this._handle = null;
|
|
344
|
+
}
|
|
195
345
|
}
|
|
196
|
-
(
|
|
346
|
+
if (!this._open && !this.dialog?.open) queueMicrotask(() => this._notifyDismissed());
|
|
197
347
|
}
|
|
348
|
+
if (props.has("_open") || props.has("noScrollLock")) this._syncScrollLock();
|
|
198
349
|
}
|
|
199
350
|
disconnectedCallback() {
|
|
200
|
-
super.disconnectedCallback()
|
|
351
|
+
super.disconnectedCallback();
|
|
352
|
+
this._endGesture();
|
|
353
|
+
this._pinch?.destroy();
|
|
354
|
+
this._pinch = void 0;
|
|
355
|
+
this._presence.dispose();
|
|
356
|
+
this._scrollLock.release();
|
|
357
|
+
this._handle?.release();
|
|
358
|
+
this._handle = null;
|
|
201
359
|
}
|
|
202
360
|
_syncScrollLock() {
|
|
203
361
|
this._scrollLock.sync(this._open && !this.noScrollLock);
|
|
204
362
|
}
|
|
205
363
|
_notifyDismissed() {
|
|
206
|
-
this._dismissed || this._open
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
364
|
+
if (this._dismissed || this._open) return;
|
|
365
|
+
this._dismissed = true;
|
|
366
|
+
this.dispatchEvent(new CustomEvent("preview-dismissed"));
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* 以锚点缩放:锚点是相对舞台中心的偏移,它覆盖的图片内容在缩放前后保持不动。
|
|
370
|
+
* 滚轮传光标位置,两指传两指中点,工具栏与键盘传 (0, 0)(即视口中心)。
|
|
371
|
+
*/
|
|
372
|
+
_zoomAt(next, anchorX, anchorY) {
|
|
373
|
+
const scale = clamp(next, MIN_SCALE, MAX_SCALE);
|
|
374
|
+
if (scale === this._scale) return;
|
|
375
|
+
const ratio = scale / this._scale;
|
|
376
|
+
this._applyScale(scale, anchorX - (anchorX - this._offsetX) * ratio, anchorY - (anchorY - this._offsetY) * ratio);
|
|
377
|
+
}
|
|
378
|
+
_applyScale(scale, offsetX, offsetY) {
|
|
379
|
+
this._scale = scale;
|
|
380
|
+
if (scale === MIN_SCALE) {
|
|
381
|
+
this._offsetX = 0;
|
|
382
|
+
this._offsetY = 0;
|
|
217
383
|
return;
|
|
218
384
|
}
|
|
219
|
-
this._offsetX =
|
|
385
|
+
this._offsetX = offsetX;
|
|
386
|
+
this._offsetY = offsetY;
|
|
387
|
+
this._clampOffsets();
|
|
220
388
|
}
|
|
221
|
-
_setScale(
|
|
222
|
-
this._zoomAt(
|
|
389
|
+
_setScale(next) {
|
|
390
|
+
this._zoomAt(next, 0, 0);
|
|
223
391
|
}
|
|
392
|
+
/** 舞台中心的视口坐标;所有缩放锚点都以它为原点。 */
|
|
224
393
|
_stageOrigin() {
|
|
225
|
-
|
|
226
|
-
if (!
|
|
394
|
+
const stage = this._stage;
|
|
395
|
+
if (!stage) return {
|
|
227
396
|
x: 0,
|
|
228
397
|
y: 0
|
|
229
398
|
};
|
|
230
|
-
|
|
399
|
+
const rect = stage.getBoundingClientRect();
|
|
231
400
|
return {
|
|
232
|
-
x:
|
|
233
|
-
y:
|
|
401
|
+
x: rect.left + rect.width / 2,
|
|
402
|
+
y: rect.top + rect.height / 2
|
|
234
403
|
};
|
|
235
404
|
}
|
|
405
|
+
/**
|
|
406
|
+
* 平移边界 = 图片与舞台在缩放后「尺寸差」的一半。
|
|
407
|
+
*
|
|
408
|
+
* 图片比舞台大时它是「能露出多少边缘」,比舞台小时它是「能在视口内移动多远」——
|
|
409
|
+
* 两种情形是同一个绝对差,所以 1x 也能拖动,且图片永远拖不出视口。
|
|
410
|
+
* 图片只受 max-width/max-height 收缩(不放大),因此 offsetWidth/offsetHeight
|
|
411
|
+
* 就是绘制尺寸,不受 CSS transform 影响。
|
|
412
|
+
*/
|
|
236
413
|
_offsetBounds() {
|
|
237
|
-
|
|
238
|
-
|
|
414
|
+
const stage = this._stage;
|
|
415
|
+
const image = this._image;
|
|
416
|
+
if (!stage || !image) return {
|
|
239
417
|
x: 0,
|
|
240
418
|
y: 0
|
|
241
419
|
};
|
|
242
|
-
|
|
243
|
-
|
|
420
|
+
const width = image.offsetWidth;
|
|
421
|
+
const height = image.offsetHeight;
|
|
422
|
+
if (!width || !height) return {
|
|
244
423
|
x: 0,
|
|
245
424
|
y: 0
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
|
|
425
|
+
};
|
|
426
|
+
return {
|
|
427
|
+
x: Math.abs(width * this._scale - stage.clientWidth) / 2,
|
|
428
|
+
y: Math.abs(height * this._scale - stage.clientHeight) / 2
|
|
249
429
|
};
|
|
250
430
|
}
|
|
431
|
+
/** 当前是否存在位移。1x 也能平移,因此「重置缩放」是否可用不能只看倍率。 */
|
|
251
432
|
get _isPanned() {
|
|
252
433
|
return this._offsetX !== 0 || this._offsetY !== 0;
|
|
253
434
|
}
|
|
254
435
|
_clampOffsets() {
|
|
255
|
-
|
|
256
|
-
this._offsetX =
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
436
|
+
const bounds = this._offsetBounds();
|
|
437
|
+
this._offsetX = clamp(this._offsetX, -bounds.x, bounds.x);
|
|
438
|
+
this._offsetY = clamp(this._offsetY, -bounds.y, bounds.y);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* 空白 = dialog 本体或未被图片 / 控件覆盖的舞台区域。
|
|
442
|
+
*
|
|
443
|
+
* 只能在 pointerdown(指针捕获生效前)判定:一旦舞台通过 setPointerCapture
|
|
444
|
+
* 取得捕获,后续 click 的 target 会被重定向到舞台,用它判断会把「点图片」
|
|
445
|
+
* 误判成「点空白」而关闭 overlay。
|
|
446
|
+
*/
|
|
447
|
+
_isBlank(target) {
|
|
448
|
+
return target === this.dialog || target === this._stage;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* 登记加载完成的图片,键与 render 侧 `is-loaded` 的查询同源。
|
|
452
|
+
*
|
|
453
|
+
* 不能用 `image.src`:那是 IDL 属性,返回**相对 src 解析后的绝对 URL**,而查询用的是
|
|
454
|
+
* `this.images[i].src`(调用方原始串)。相对 src 下两者永不相等 → `is-loaded` 永不
|
|
455
|
+
* 施加 → 图片停在 `opacity: 0`,尽管 img 早已 `complete`。
|
|
456
|
+
*
|
|
457
|
+
* 所属下标由模板写在 `data-index` 上(与该 img 的 `src` 出自同一处),因此多图 /
|
|
458
|
+
* lazy 渲染下不会错位。
|
|
459
|
+
*/
|
|
460
|
+
_markLoaded(image) {
|
|
461
|
+
const src = this.images[Number(image.dataset.index)]?.src;
|
|
462
|
+
if (src !== void 0) this._loadedSources.add(src);
|
|
264
463
|
}
|
|
265
464
|
_endGesture() {
|
|
266
|
-
this._gesture?.destroy()
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
465
|
+
this._gesture?.destroy();
|
|
466
|
+
this._gesture = void 0;
|
|
467
|
+
this._dragging = false;
|
|
468
|
+
this._cancelSwipeSettle();
|
|
469
|
+
this._swipeDir = 0;
|
|
470
|
+
this._swipeOffset = 0;
|
|
471
|
+
}
|
|
472
|
+
/** 轮播滑动的相邻图索引;单图没有相邻图,多图 loop 环绕,非 loop 越界返回 -1。 */
|
|
473
|
+
_adjacentIndex(dir) {
|
|
474
|
+
const count = this.images.length;
|
|
475
|
+
if (count <= 1) return -1;
|
|
476
|
+
if (this.loop) return ((this._index + dir) % count + count) % count;
|
|
477
|
+
const target = this._index + dir;
|
|
478
|
+
return target >= 0 && target < count ? target : -1;
|
|
479
|
+
}
|
|
480
|
+
/** 取消未完成的滑入/回位过渡(新手势、pointercancel、关闭等接管时)。 */
|
|
275
481
|
_cancelSwipeSettle() {
|
|
276
|
-
|
|
482
|
+
if (this._swipeSettleTimer !== void 0) {
|
|
483
|
+
clearTimeout(this._swipeSettleTimer);
|
|
484
|
+
this._swipeSettleTimer = void 0;
|
|
485
|
+
}
|
|
486
|
+
this._swipeSettling = false;
|
|
487
|
+
this._swipeSettleCommit = false;
|
|
488
|
+
this._swipeSettleDir = 1;
|
|
277
489
|
}
|
|
490
|
+
/** 滑入/回位过渡结束:按目标提交索引切换,或复位到单图静止态。 */
|
|
278
491
|
_finishSwipeSettle() {
|
|
279
492
|
if (this._swipeSettleTimer === void 0) return;
|
|
280
|
-
clearTimeout(this._swipeSettleTimer)
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
493
|
+
clearTimeout(this._swipeSettleTimer);
|
|
494
|
+
this._swipeSettleTimer = void 0;
|
|
495
|
+
const commit = this._swipeSettleCommit;
|
|
496
|
+
const dir = this._swipeSettleDir;
|
|
497
|
+
this._swipeSettling = false;
|
|
498
|
+
this._swipeSettleCommit = false;
|
|
499
|
+
this._swipeDir = 0;
|
|
500
|
+
this._swipeOffset = 0;
|
|
501
|
+
if (commit) this._commitSwipeTo(dir);
|
|
502
|
+
}
|
|
503
|
+
/** 把当前索引切换到相邻图;相邻图在滑动期间已在 DOM 中呈现,提交后直接以已加载态展示,避免重复淡入闪烁。 */
|
|
504
|
+
_commitSwipeTo(dir) {
|
|
505
|
+
const target = this._adjacentIndex(dir);
|
|
506
|
+
if (target < 0 || target === this._index) return;
|
|
507
|
+
this._index = target;
|
|
508
|
+
this.resetZoom();
|
|
509
|
+
}
|
|
510
|
+
/** 释放后的滑入/回位:把 _swipeOffset 从跟手位移过渡到目标位(越界滑入相邻图,否则回 0)。 */
|
|
511
|
+
_settleSwipe(deltaX, velocityX, endTime) {
|
|
512
|
+
const dir = this._swipeDir;
|
|
513
|
+
const stageW = this._stage?.clientWidth ?? 0;
|
|
514
|
+
if (dir === 0 || stageW <= 0) {
|
|
291
515
|
this._swipeOffset = 0;
|
|
292
516
|
return;
|
|
293
517
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
this.
|
|
518
|
+
const distanceThreshold = Math.max(1, Math.round(stageW * SWIPE_DISTANCE_RATIO));
|
|
519
|
+
const spanMs = endTime - this._swipeStartTime;
|
|
520
|
+
const fullSpanVelocity = spanMs >= 2 ? deltaX / spanMs * 1e3 : 0;
|
|
521
|
+
const commit = (Math.abs(deltaX) >= distanceThreshold || Math.abs(velocityX) >= SWIPE_VELOCITY || Math.abs(deltaX) >= SWIPE_FLICK_DISTANCE && Math.max(Math.abs(velocityX), Math.abs(fullSpanVelocity)) >= SWIPE_FLICK_VELOCITY) && this._adjacentIndex(dir) !== -1;
|
|
522
|
+
this._swipeSettling = true;
|
|
523
|
+
this._swipeSettleCommit = commit;
|
|
524
|
+
this._swipeSettleDir = dir;
|
|
525
|
+
this._swipeOffset = commit ? -dir * stageW : 0;
|
|
526
|
+
this._swipeSettleTimer = setTimeout(() => this._finishSwipeSettle(), SWIPE_SETTLE_MS);
|
|
527
|
+
}
|
|
528
|
+
_panTo(deltaX, deltaY) {
|
|
529
|
+
const bounds = this._offsetBounds();
|
|
530
|
+
this._offsetX = clamp(this._panOriginX + deltaX, -bounds.x, bounds.x);
|
|
531
|
+
this._offsetY = clamp(this._panOriginY + deltaY, -bounds.y, bounds.y);
|
|
300
532
|
}
|
|
301
533
|
render() {
|
|
302
|
-
|
|
303
|
-
|
|
534
|
+
const count = this.images.length;
|
|
535
|
+
const zoomed = this._scale > MIN_SCALE;
|
|
536
|
+
const prevIndex = count > 0 ? this._adjacentIndex(-1) : -1;
|
|
537
|
+
const nextIndex = count > 0 ? this._adjacentIndex(1) : -1;
|
|
538
|
+
const trackTransform = `translate3d(${this._swipeOffset}px, 0, 0)`;
|
|
539
|
+
const imageTransform = `translate3d(${this._offsetX}px, ${this._offsetY}px, 0) scale(${this._scale})`;
|
|
540
|
+
const neighborTransform = zoomed ? "translate3d(0, 0, 0) scale(1)" : `translate3d(0, ${this._offsetY}px, 0) scale(1)`;
|
|
541
|
+
return html`
|
|
304
542
|
<dialog
|
|
305
543
|
aria-label="Image preview"
|
|
306
544
|
@cancel=${this._handleCancel}
|
|
@@ -316,201 +554,234 @@ var O = 1, k = 4, A = .5, j = .002, M = 3, N = .15, P = 320, F = 16, I = 160, L
|
|
|
316
554
|
<div class="wui-image-preview-content">
|
|
317
555
|
<div class="wui-image-preview-surface">
|
|
318
556
|
<div
|
|
319
|
-
class=${
|
|
320
|
-
"wui-image-preview-stage":
|
|
321
|
-
"is-zoomed":
|
|
557
|
+
class=${classMap({
|
|
558
|
+
"wui-image-preview-stage": true,
|
|
559
|
+
"is-zoomed": zoomed,
|
|
322
560
|
"is-dragging": this._dragging,
|
|
323
561
|
"is-settling": this._swipeSettling
|
|
324
562
|
})}
|
|
325
563
|
>
|
|
326
564
|
<div
|
|
327
565
|
class="wui-image-preview-track"
|
|
328
|
-
style=${
|
|
566
|
+
style=${styleMap({ transform: trackTransform })}
|
|
329
567
|
@transitionend=${this._handleSwipeSettleEnd}
|
|
330
568
|
>
|
|
331
|
-
${
|
|
569
|
+
${prevIndex >= 0 ? html`
|
|
332
570
|
<div class="wui-image-preview-slide is-prev" aria-hidden="true">
|
|
333
571
|
<img
|
|
334
|
-
class=${
|
|
335
|
-
"wui-image-preview-image":
|
|
336
|
-
"is-loaded": this._loadedSources.has(this.images[
|
|
572
|
+
class=${classMap({
|
|
573
|
+
"wui-image-preview-image": true,
|
|
574
|
+
"is-loaded": this._loadedSources.has(this.images[prevIndex].src)
|
|
337
575
|
})}
|
|
338
|
-
data-index=${
|
|
339
|
-
src=${this.images[
|
|
340
|
-
alt=${this.images[
|
|
576
|
+
data-index=${prevIndex}
|
|
577
|
+
src=${this.images[prevIndex].src}
|
|
578
|
+
alt=${this.images[prevIndex].alt ?? ""}
|
|
341
579
|
draggable="false"
|
|
342
|
-
style=${
|
|
580
|
+
style=${styleMap({ transform: neighborTransform })}
|
|
343
581
|
@load=${this._handleImageSettled}
|
|
344
582
|
@error=${this._handleImageSettled}
|
|
345
583
|
/>
|
|
346
584
|
</div>
|
|
347
|
-
` :
|
|
348
|
-
${
|
|
585
|
+
` : nothing}
|
|
586
|
+
${count > 0 ? html`
|
|
349
587
|
<div class="wui-image-preview-slide is-current">
|
|
350
588
|
<img
|
|
351
|
-
class=${
|
|
352
|
-
"wui-image-preview-image":
|
|
589
|
+
class=${classMap({
|
|
590
|
+
"wui-image-preview-image": true,
|
|
353
591
|
"is-loaded": this._loadedSources.has(this.images[this._index].src)
|
|
354
592
|
})}
|
|
355
593
|
data-index=${this._index}
|
|
356
594
|
src=${this.images[this._index].src}
|
|
357
595
|
alt=${this.images[this._index].alt ?? ""}
|
|
358
596
|
draggable="false"
|
|
359
|
-
style=${
|
|
597
|
+
style=${styleMap({ transform: imageTransform })}
|
|
360
598
|
@load=${this._handleImageSettled}
|
|
361
599
|
@error=${this._handleImageSettled}
|
|
362
600
|
/>
|
|
363
601
|
</div>
|
|
364
|
-
` :
|
|
365
|
-
${
|
|
602
|
+
` : nothing}
|
|
603
|
+
${nextIndex >= 0 ? html`
|
|
366
604
|
<div class="wui-image-preview-slide is-next" aria-hidden="true">
|
|
367
605
|
<img
|
|
368
|
-
class=${
|
|
369
|
-
"wui-image-preview-image":
|
|
370
|
-
"is-loaded": this._loadedSources.has(this.images[
|
|
606
|
+
class=${classMap({
|
|
607
|
+
"wui-image-preview-image": true,
|
|
608
|
+
"is-loaded": this._loadedSources.has(this.images[nextIndex].src)
|
|
371
609
|
})}
|
|
372
|
-
data-index=${
|
|
373
|
-
src=${this.images[
|
|
374
|
-
alt=${this.images[
|
|
610
|
+
data-index=${nextIndex}
|
|
611
|
+
src=${this.images[nextIndex].src}
|
|
612
|
+
alt=${this.images[nextIndex].alt ?? ""}
|
|
375
613
|
draggable="false"
|
|
376
|
-
style=${
|
|
614
|
+
style=${styleMap({ transform: neighborTransform })}
|
|
377
615
|
@load=${this._handleImageSettled}
|
|
378
616
|
@error=${this._handleImageSettled}
|
|
379
617
|
/>
|
|
380
618
|
</div>
|
|
381
|
-
` :
|
|
619
|
+
` : nothing}
|
|
382
620
|
</div>
|
|
383
621
|
</div>
|
|
384
622
|
</div>
|
|
385
623
|
<div class="wui-image-preview-controls">
|
|
386
|
-
${this.indicator ?
|
|
387
|
-
>${this._index + 1} / ${
|
|
388
|
-
>` :
|
|
389
|
-
${this.closable ?
|
|
624
|
+
${this.indicator ? html`<span class="wui-image-preview-counter wui-glass" aria-live="polite"
|
|
625
|
+
>${this._index + 1} / ${count}</span
|
|
626
|
+
>` : nothing}
|
|
627
|
+
${this.closable ? html`
|
|
390
628
|
<web-ui-button
|
|
391
629
|
class="wui-image-preview-close"
|
|
392
630
|
variant="glass"
|
|
393
631
|
icon
|
|
394
632
|
size="36"
|
|
395
|
-
aria-label
|
|
633
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "close")}
|
|
396
634
|
@click=${this.close}
|
|
397
635
|
>
|
|
398
|
-
<web-ui-icon size="16" .icon=${
|
|
636
|
+
<web-ui-icon size="16" .icon=${ooui_close_default}></web-ui-icon>
|
|
399
637
|
</web-ui-button>
|
|
400
|
-
` :
|
|
401
|
-
${this.nav &&
|
|
638
|
+
` : nothing}
|
|
639
|
+
${this.nav && count > 1 ? html`
|
|
402
640
|
<web-ui-button
|
|
403
641
|
class="wui-image-preview-nav wui-image-preview-nav-prev"
|
|
404
642
|
variant="glass"
|
|
405
643
|
icon
|
|
406
644
|
size="44"
|
|
407
|
-
aria-label
|
|
645
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "previousImage")}
|
|
408
646
|
?disabled=${!this.loop && this._index === 0}
|
|
409
647
|
@click=${this.prev}
|
|
410
648
|
>
|
|
411
|
-
<web-ui-icon size="20" .icon=${
|
|
649
|
+
<web-ui-icon size="20" .icon=${lucide_chevron_left_default}></web-ui-icon>
|
|
412
650
|
</web-ui-button>
|
|
413
651
|
<web-ui-button
|
|
414
652
|
class="wui-image-preview-nav wui-image-preview-nav-next"
|
|
415
653
|
variant="glass"
|
|
416
654
|
icon
|
|
417
655
|
size="44"
|
|
418
|
-
aria-label
|
|
419
|
-
?disabled=${!this.loop && this._index ===
|
|
656
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "nextImage")}
|
|
657
|
+
?disabled=${!this.loop && this._index === count - 1}
|
|
420
658
|
@click=${this.next}
|
|
421
659
|
>
|
|
422
|
-
<web-ui-icon size="20" .icon=${
|
|
660
|
+
<web-ui-icon size="20" .icon=${lucide_chevron_right_default}></web-ui-icon>
|
|
423
661
|
</web-ui-button>
|
|
424
|
-
` :
|
|
425
|
-
${this.toolbar ?
|
|
662
|
+
` : nothing}
|
|
663
|
+
${this.toolbar ? html`
|
|
426
664
|
<div class="wui-image-preview-toolbar wui-glass">
|
|
427
665
|
<web-ui-button
|
|
428
666
|
variant="glass"
|
|
429
667
|
icon
|
|
430
668
|
size="30"
|
|
431
|
-
aria-label
|
|
432
|
-
?disabled=${this._scale <=
|
|
669
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "zoomOut")}
|
|
670
|
+
?disabled=${this._scale <= MIN_SCALE}
|
|
433
671
|
@click=${this.zoomOut}
|
|
434
672
|
>
|
|
435
|
-
<web-ui-icon size="16" .icon=${
|
|
673
|
+
<web-ui-icon size="16" .icon=${lucide_minus_default}></web-ui-icon>
|
|
436
674
|
</web-ui-button>
|
|
437
675
|
<span class="wui-image-preview-scale">${Math.round(this._scale * 100)}%</span>
|
|
438
676
|
<web-ui-button
|
|
439
677
|
variant="glass"
|
|
440
678
|
icon
|
|
441
679
|
size="30"
|
|
442
|
-
aria-label
|
|
443
|
-
?disabled=${this._scale >=
|
|
680
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "zoomIn")}
|
|
681
|
+
?disabled=${this._scale >= MAX_SCALE}
|
|
444
682
|
@click=${this.zoomIn}
|
|
445
683
|
>
|
|
446
|
-
<web-ui-icon size="16" .icon=${
|
|
684
|
+
<web-ui-icon size="16" .icon=${lucide_plus_default}></web-ui-icon>
|
|
447
685
|
</web-ui-button>
|
|
448
686
|
<web-ui-button
|
|
449
687
|
variant="glass"
|
|
450
688
|
icon
|
|
451
689
|
size="30"
|
|
452
|
-
aria-label
|
|
453
|
-
?disabled=${this._scale <=
|
|
690
|
+
aria-label=${resolveBuiltinLabelSet(this.ariaLabels, "resetZoom")}
|
|
691
|
+
?disabled=${this._scale <= MIN_SCALE && !this._isPanned}
|
|
454
692
|
@click=${this.resetZoom}
|
|
455
693
|
>
|
|
456
|
-
<web-ui-icon size="16" .icon=${
|
|
694
|
+
<web-ui-icon size="16" .icon=${radix_icons_reset_default}></web-ui-icon>
|
|
457
695
|
</web-ui-button>
|
|
458
696
|
</div>
|
|
459
|
-
` :
|
|
697
|
+
` : nothing}
|
|
460
698
|
</div>
|
|
461
699
|
</div>
|
|
462
700
|
</dialog>
|
|
463
701
|
`;
|
|
464
702
|
}
|
|
465
703
|
};
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
704
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "images", void 0);
|
|
705
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "loop", void 0);
|
|
706
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "nav", void 0);
|
|
707
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "toolbar", void 0);
|
|
708
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "closable", void 0);
|
|
709
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "indicator", void 0);
|
|
710
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "swipe", void 0);
|
|
711
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "noScrollLock", void 0);
|
|
712
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "noBackdropClose", void 0);
|
|
713
|
+
__decorate([property({ attribute: false })], WebUiImagePreview.prototype, "ariaLabels", void 0);
|
|
714
|
+
__decorate([state()], WebUiImagePreview.prototype, "_open", void 0);
|
|
715
|
+
__decorate([state()], WebUiImagePreview.prototype, "_index", void 0);
|
|
716
|
+
__decorate([state()], WebUiImagePreview.prototype, "_scale", void 0);
|
|
717
|
+
__decorate([state()], WebUiImagePreview.prototype, "_offsetX", void 0);
|
|
718
|
+
__decorate([state()], WebUiImagePreview.prototype, "_offsetY", void 0);
|
|
719
|
+
__decorate([state()], WebUiImagePreview.prototype, "_swipeOffset", void 0);
|
|
720
|
+
__decorate([state()], WebUiImagePreview.prototype, "_swipeSettling", void 0);
|
|
721
|
+
__decorate([state()], WebUiImagePreview.prototype, "_dragging", void 0);
|
|
722
|
+
WebUiImagePreview = __decorate([customElement("web-ui-image-preview")], WebUiImagePreview);
|
|
723
|
+
/**
|
|
724
|
+
* 打开一个命令式 image preview。
|
|
725
|
+
*
|
|
726
|
+
* 组件挂载到目标 `web-ui-theme` 的 overlay 容器(无主题作用域时回退到全局
|
|
727
|
+
* fallback root),返回的 handle 是唯一的控制入口。所有展示类 option 默认关闭,
|
|
728
|
+
* 默认只渲染图片本身。
|
|
729
|
+
*/
|
|
730
|
+
function imagePreview(options) {
|
|
731
|
+
const images = (options.images ?? []).map((item) => ({
|
|
732
|
+
src: item.src,
|
|
733
|
+
alt: item.alt ?? ""
|
|
471
734
|
}));
|
|
472
|
-
if (
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
735
|
+
if (images.length === 0) throw new Error("[web-ui-image-preview] imagePreview requires at least one image");
|
|
736
|
+
const theme = options.target ? findNearestTheme(options.target) : findRootTheme();
|
|
737
|
+
const container = options.container ?? theme?.getOverlayRoot() ?? getFallbackOverlayRoot();
|
|
738
|
+
const element = document.createElement("web-ui-image-preview");
|
|
739
|
+
element.configure({
|
|
740
|
+
images,
|
|
741
|
+
index: options.index ?? 0,
|
|
742
|
+
loop: options.loop ?? true,
|
|
743
|
+
nav: options.nav ?? false,
|
|
744
|
+
toolbar: options.toolbar ?? false,
|
|
745
|
+
closable: options.closable ?? false,
|
|
746
|
+
indicator: options.indicator ?? false,
|
|
747
|
+
swipe: options.swipe ?? false,
|
|
748
|
+
noScrollLock: options.noScrollLock ?? false,
|
|
749
|
+
noBackdropClose: options.noBackdropClose ?? false,
|
|
750
|
+
ariaLabels: options.ariaLabels
|
|
485
751
|
});
|
|
486
|
-
let
|
|
487
|
-
|
|
752
|
+
let settle;
|
|
753
|
+
const closed = new Promise((resolve) => {
|
|
754
|
+
settle = resolve;
|
|
488
755
|
});
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
756
|
+
element.addEventListener("preview-dismissed", () => {
|
|
757
|
+
element.remove();
|
|
758
|
+
settle?.();
|
|
759
|
+
settle = void 0;
|
|
760
|
+
}, { once: true });
|
|
761
|
+
container.appendChild(element);
|
|
762
|
+
element.show();
|
|
763
|
+
return {
|
|
492
764
|
get index() {
|
|
493
|
-
return
|
|
765
|
+
return element.index;
|
|
494
766
|
},
|
|
495
767
|
get scale() {
|
|
496
|
-
return
|
|
768
|
+
return element.scale;
|
|
497
769
|
},
|
|
498
770
|
get images() {
|
|
499
|
-
return
|
|
771
|
+
return element.images;
|
|
500
772
|
},
|
|
501
773
|
get closed() {
|
|
502
|
-
return
|
|
774
|
+
return closed;
|
|
503
775
|
},
|
|
504
|
-
next: () =>
|
|
505
|
-
prev: () =>
|
|
506
|
-
goTo: (
|
|
507
|
-
zoomIn: () =>
|
|
508
|
-
zoomOut: () =>
|
|
509
|
-
resetZoom: () =>
|
|
510
|
-
close: () =>
|
|
776
|
+
next: () => element.next(),
|
|
777
|
+
prev: () => element.prev(),
|
|
778
|
+
goTo: (index) => element.goTo(index),
|
|
779
|
+
zoomIn: () => element.zoomIn(),
|
|
780
|
+
zoomOut: () => element.zoomOut(),
|
|
781
|
+
resetZoom: () => element.resetZoom(),
|
|
782
|
+
close: () => element.close()
|
|
511
783
|
};
|
|
512
784
|
}
|
|
513
|
-
|
|
514
|
-
export { z as imagePreview };
|
|
785
|
+
export { imagePreview };
|
|
515
786
|
|
|
516
787
|
//# sourceMappingURL=index.js.map
|