@greypan/web-ui 11.2.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 -390
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +108 -74
- 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 +72 -71
- package/dist/components/collapse/index.d.ts.map +1 -0
- package/dist/components/collapse/index.js +225 -130
- 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 +17 -15
- package/dist/components/empty/index.d.ts.map +1 -0
- package/dist/components/empty/index.js +66 -37
- 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 +5 -4
- package/dist/icons/generated/andrsrxn-inbox.d.ts.map +1 -0
- package/dist/icons/generated/andrsrxn-inbox.js +3 -4
- package/dist/icons/generated/andrsrxn-inbox.js.map +1 -1
- 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 -74
- package/dist/icons/index.js +75 -75
- 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 +10 -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,141 +1,237 @@
|
|
|
1
|
-
import { getFallbackOverlayRoot
|
|
2
|
-
import { findNearestTheme
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return
|
|
11
|
-
}
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import { getFallbackOverlayRoot } from "../../shared/overlay/overlay-root.js";
|
|
2
|
+
import { findNearestTheme, findRootTheme } from "../../shared/overlay/theme-overlay-scope.js";
|
|
3
|
+
// src/components/toast/manager.ts
|
|
4
|
+
let toastIdCounter = 0;
|
|
5
|
+
const toastContainers = /* @__PURE__ */ new Set();
|
|
6
|
+
const visibleToasts = /* @__PURE__ */ new Map();
|
|
7
|
+
let pendingBatch;
|
|
8
|
+
let isBatchScheduled = false;
|
|
9
|
+
function generateId() {
|
|
10
|
+
return `toast-${++toastIdCounter}`;
|
|
11
|
+
}
|
|
12
|
+
function resolveRoot(options) {
|
|
13
|
+
const targetTheme = options.target ? findNearestTheme(options.target) : findRootTheme();
|
|
14
|
+
return options.container ?? targetTheme?.getOverlayRoot() ?? getFallbackOverlayRoot();
|
|
15
|
+
}
|
|
16
|
+
function ensureContainer(position, root) {
|
|
17
|
+
const existing = Array.from(root.children).find((child) => child instanceof HTMLElement && child.dataset.wuiToastPosition === position);
|
|
18
|
+
if (existing) return existing;
|
|
19
|
+
const container = document.createElement("div");
|
|
20
|
+
container.className = `wui-toast-container wui-toast-${position} wui-scroll`;
|
|
21
|
+
container.dataset.wuiToastPosition = position;
|
|
22
|
+
container.setAttribute("role", "log");
|
|
23
|
+
container.setAttribute("aria-live", "polite");
|
|
24
|
+
container.setAttribute("aria-relevant", "additions");
|
|
25
|
+
root.appendChild(container);
|
|
26
|
+
toastContainers.add(container);
|
|
27
|
+
container.addEventListener("pointerenter", () => container.dataset.hovered = "true");
|
|
28
|
+
container.addEventListener("pointerleave", () => {
|
|
29
|
+
delete container.dataset.hovered;
|
|
30
|
+
scrollToBottom(container);
|
|
26
31
|
});
|
|
32
|
+
return container;
|
|
27
33
|
}
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
function pruneContainer(container) {
|
|
35
|
+
if (!container || container.children.length > 0) return;
|
|
36
|
+
container.remove();
|
|
37
|
+
toastContainers.delete(container);
|
|
38
|
+
}
|
|
39
|
+
function scrollToBottom(container) {
|
|
40
|
+
if (container.dataset.hovered === "true") return;
|
|
41
|
+
requestAnimationFrame(() => {
|
|
42
|
+
container.scrollTop = container.scrollHeight;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function scheduleBatchFlush() {
|
|
46
|
+
if (isBatchScheduled) return;
|
|
47
|
+
isBatchScheduled = true;
|
|
48
|
+
Promise.resolve().then(flushBatch);
|
|
49
|
+
}
|
|
50
|
+
function flushBatch() {
|
|
51
|
+
isBatchScheduled = false;
|
|
52
|
+
const batch = pendingBatch;
|
|
53
|
+
pendingBatch = void 0;
|
|
54
|
+
if (!batch) return;
|
|
55
|
+
const containersToScroll = /* @__PURE__ */ new Set();
|
|
56
|
+
for (const item of batch) {
|
|
57
|
+
const container = ensureContainer(item.options.position || "top-right", item.root);
|
|
58
|
+
mountToast(item.id, item.options, container);
|
|
59
|
+
containersToScroll.add(container);
|
|
39
60
|
}
|
|
40
|
-
for (
|
|
61
|
+
for (const container of containersToScroll) scrollToBottom(container);
|
|
41
62
|
}
|
|
42
|
-
|
|
63
|
+
/**
|
|
64
|
+
* 命令式 API 的 upsert 语义:指定同一个 id 的多次调用收敛到同一条 toast。
|
|
65
|
+
* 给出的字段覆盖,未给出的保持原值;`container` 与 `target` 以首次为准,换 overlay root 牵连更广。
|
|
66
|
+
*/
|
|
67
|
+
function mergePatch(base, patch) {
|
|
43
68
|
return {
|
|
44
|
-
...
|
|
45
|
-
message:
|
|
46
|
-
heading:
|
|
47
|
-
type:
|
|
48
|
-
duration:
|
|
49
|
-
closable:
|
|
50
|
-
position:
|
|
51
|
-
container:
|
|
52
|
-
target:
|
|
69
|
+
...base,
|
|
70
|
+
message: patch.message ?? base.message,
|
|
71
|
+
heading: patch.heading ?? base.heading,
|
|
72
|
+
type: patch.type ?? base.type,
|
|
73
|
+
duration: patch.duration ?? base.duration,
|
|
74
|
+
closable: patch.closable ?? base.closable,
|
|
75
|
+
position: patch.position ?? base.position,
|
|
76
|
+
container: base.container,
|
|
77
|
+
target: base.target
|
|
53
78
|
};
|
|
54
79
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
function applyPatch(el, options) {
|
|
81
|
+
if (options.message !== void 0) el.message = options.message;
|
|
82
|
+
if (options.heading !== void 0) el.heading = options.heading;
|
|
83
|
+
if (options.type !== void 0) el.type = options.type;
|
|
84
|
+
if (options.closable !== void 0) el.noCloseButton = options.closable === false;
|
|
85
|
+
if (options.duration !== void 0) el.setDuration(options.duration);
|
|
86
|
+
if (options.position !== void 0 && options.position !== el.position) relocateToast(el, options.position);
|
|
87
|
+
}
|
|
88
|
+
function relocateToast(el, position) {
|
|
89
|
+
const prev = el.parentElement;
|
|
90
|
+
const root = prev?.parentElement;
|
|
91
|
+
if (!root) return;
|
|
92
|
+
const next = ensureContainer(position, root);
|
|
93
|
+
const movable = next;
|
|
94
|
+
if (typeof movable.moveBefore === "function") movable.moveBefore(el, null);
|
|
95
|
+
else {
|
|
96
|
+
el.pauseAutoClose();
|
|
97
|
+
next.appendChild(el);
|
|
98
|
+
el.resumeAutoClose();
|
|
99
|
+
}
|
|
100
|
+
el.position = position;
|
|
101
|
+
pruneContainer(prev);
|
|
102
|
+
scrollToBottom(next);
|
|
103
|
+
}
|
|
104
|
+
function createToast(options) {
|
|
105
|
+
const id = options.id || generateId();
|
|
106
|
+
const mounted = visibleToasts.get(id);
|
|
107
|
+
if (mounted) {
|
|
108
|
+
if (mounted.isConnected && !mounted.dismissing) {
|
|
109
|
+
applyPatch(mounted, options);
|
|
110
|
+
return id;
|
|
111
|
+
}
|
|
112
|
+
visibleToasts.delete(id);
|
|
69
113
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
114
|
+
const pending = pendingBatch?.find((item) => item.id === id);
|
|
115
|
+
if (pending) {
|
|
116
|
+
pending.options = mergePatch(pending.options, options);
|
|
117
|
+
return id;
|
|
118
|
+
}
|
|
119
|
+
if (!pendingBatch) pendingBatch = [];
|
|
120
|
+
pendingBatch.push({
|
|
121
|
+
id,
|
|
122
|
+
options,
|
|
123
|
+
root: resolveRoot(options)
|
|
124
|
+
});
|
|
125
|
+
scheduleBatchFlush();
|
|
126
|
+
return id;
|
|
127
|
+
}
|
|
128
|
+
function mountToast(id, options, container) {
|
|
129
|
+
const el = document.createElement("web-ui-toast");
|
|
130
|
+
const type = options.type || "info";
|
|
131
|
+
el.toastId = id;
|
|
132
|
+
el.type = type;
|
|
133
|
+
el.position = options.position || "top-right";
|
|
134
|
+
el.heading = options.heading || "";
|
|
135
|
+
el.message = options.message;
|
|
136
|
+
el.duration = options.duration ?? (type === "error" ? 5e3 : 3e3);
|
|
137
|
+
el.noCloseButton = options.closable === false;
|
|
138
|
+
el.addEventListener("toast-close", () => removeToastElement(el));
|
|
139
|
+
container.appendChild(el);
|
|
140
|
+
visibleToasts.set(id, el);
|
|
141
|
+
requestAnimationFrame(() => {
|
|
142
|
+
if (el.dismissing) return;
|
|
143
|
+
el.show();
|
|
81
144
|
});
|
|
82
145
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
function
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
146
|
+
/**
|
|
147
|
+
* 按元素身份解绑并移除。退场中的旧元素会在稍后派发 `toast-close`,而此刻同 id 可能已经有
|
|
148
|
+
* 新元素(退场窗口内的 upsert 会新建一条);若按 `detail.id` 删映射,就会把刚建好的那条
|
|
149
|
+
* 一起删掉 —— 与「孤儿元素收不走」是同一类缺陷,只是换了个入口。
|
|
150
|
+
*/
|
|
151
|
+
function removeToastElement(el) {
|
|
152
|
+
if (visibleToasts.get(el.toastId) === el) visibleToasts.delete(el.toastId);
|
|
153
|
+
const container = el.parentElement;
|
|
154
|
+
el.remove();
|
|
155
|
+
pruneContainer(container);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* id 不在 Map 里时仍要清掉同 id 的残留节点:按 id 删除的路径若在这里直接 return,
|
|
159
|
+
* 重复挂载留下的孤儿 toast 就连自关闭、close() 和 clear() 都收不走,会永久留在
|
|
160
|
+
* role="log" 容器里。强删不派发 `toast-close`,但对不可从管理器触达的元素来说没有消费方状态可言。
|
|
161
|
+
*/
|
|
162
|
+
function removeStray(id) {
|
|
163
|
+
for (const container of toastContainers) for (const child of Array.from(container.children)) {
|
|
164
|
+
if (child.tagName !== "WEB-UI-TOAST") continue;
|
|
165
|
+
if (child.toastId === id) child.remove();
|
|
166
|
+
}
|
|
167
|
+
for (const container of Array.from(toastContainers)) pruneContainer(container);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 关闭一个 id 时,「还没开始显示」的两种状态都要能取消,否则 close() 会静默失效:
|
|
171
|
+
*
|
|
172
|
+
* - 同 tick 仍在 `pendingBatch` 里:还不是 DOM 元素,`removeStray` 扫不到 —— 出队即取消挂载。
|
|
173
|
+
* - 已 `flushBatch`、rAF 里的 `show()` 未跑:元素在映射里但 `visible` 仍是 false,
|
|
174
|
+
* `dismiss()` 现在对这段窗口立即派发(无退场动画可播),由 toast-close 监听摘除。
|
|
175
|
+
*
|
|
176
|
+
* 已在退场的元素不必也不该再动:它自己延迟派发的 toast-close 会收尾,重复 close 不改变结果。
|
|
177
|
+
*/
|
|
178
|
+
function close(id) {
|
|
179
|
+
const queued = pendingBatch;
|
|
180
|
+
if (queued) {
|
|
181
|
+
const index = queued.findIndex((item) => item.id === id);
|
|
182
|
+
if (index >= 0) {
|
|
183
|
+
queued.splice(index, 1);
|
|
98
184
|
return;
|
|
99
185
|
}
|
|
100
186
|
}
|
|
101
|
-
|
|
102
|
-
if (
|
|
103
|
-
|
|
187
|
+
const el = visibleToasts.get(id);
|
|
188
|
+
if (el) {
|
|
189
|
+
el.dismiss("programmatic");
|
|
104
190
|
return;
|
|
105
191
|
}
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
function
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
192
|
+
removeStray(id);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 队列条目与已挂载元素一起取消。二者都会在同一个微任务内落地,只遍历已挂载元素会让
|
|
196
|
+
* 「clear() 之后仍冒出一条」成为唯一的例外 —— 与 close() 的可用范围对齐。
|
|
197
|
+
*/
|
|
198
|
+
function clear() {
|
|
199
|
+
pendingBatch = void 0;
|
|
200
|
+
for (const el of visibleToasts.values()) el.dismiss("clear");
|
|
201
|
+
}
|
|
202
|
+
function toast(options) {
|
|
203
|
+
return createToast(options);
|
|
204
|
+
}
|
|
205
|
+
toast.success = (message, options) => createToast({
|
|
206
|
+
...options,
|
|
207
|
+
message,
|
|
118
208
|
type: "success"
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
|
|
209
|
+
});
|
|
210
|
+
toast.info = (message, options) => createToast({
|
|
211
|
+
...options,
|
|
212
|
+
message,
|
|
122
213
|
type: "info"
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
|
|
214
|
+
});
|
|
215
|
+
toast.warning = (message, options) => createToast({
|
|
216
|
+
...options,
|
|
217
|
+
message,
|
|
126
218
|
type: "warning"
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
|
|
219
|
+
});
|
|
220
|
+
toast.error = (message, options) => createToast({
|
|
221
|
+
...options,
|
|
222
|
+
message,
|
|
130
223
|
type: "error"
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
224
|
+
});
|
|
225
|
+
toast.close = close;
|
|
226
|
+
toast.clear = clear;
|
|
227
|
+
toast._reset = () => {
|
|
228
|
+
pendingBatch = void 0;
|
|
229
|
+
isBatchScheduled = false;
|
|
230
|
+
for (const el of visibleToasts.values()) el.remove();
|
|
231
|
+
visibleToasts.clear();
|
|
232
|
+
for (const container of toastContainers) container.remove();
|
|
233
|
+
toastContainers.clear();
|
|
137
234
|
};
|
|
138
|
-
|
|
139
|
-
export { w as toast };
|
|
235
|
+
export { toast };
|
|
140
236
|
|
|
141
237
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","names":[],"sources":["../../../src/components/toast/manager.ts"],"sourcesContent":["import { getFallbackOverlayRoot } from '@/shared/overlay/overlay-root'\nimport { findNearestTheme, findRootTheme } from '@/shared/overlay/theme-overlay-scope'\n\nimport type { WebUiToast } from './toast'\nimport type { ToastInstanceOptions, ToastOptions, ToastPosition } from './types'\n\nlet toastIdCounter = 0\n\nconst toastContainers = new Set<HTMLElement>()\nconst visibleToasts = new Map<string, WebUiToast>()\n\nlet pendingBatch: Array<{ id: string; options: ToastInstanceOptions; root: HTMLElement }> | undefined\nlet isBatchScheduled = false\n\ntype ToastShortcutOptions = Omit<ToastOptions, 'message' | 'type'> & Pick<ToastInstanceOptions, 'position'>\n\n// moveBefore 尚未进入 Baseline,DOM lib 未必声明;按能力探测调用,缺失时走降级分支。\ntype MaybeMoveBefore = HTMLElement & { moveBefore?: (node: Node, child: Node | null) => void }\n\nfunction generateId(): string {\n return `toast-${++toastIdCounter}`\n}\n\nfunction resolveRoot(options: ToastInstanceOptions): HTMLElement {\n const targetTheme = options.target ? findNearestTheme(options.target) : findRootTheme()\n return options.container ?? targetTheme?.getOverlayRoot() ?? getFallbackOverlayRoot()\n}\n\nfunction ensureContainer(position: ToastPosition, root: HTMLElement): HTMLElement {\n const existing = Array.from(root.children).find(\n (child): child is HTMLElement => child instanceof HTMLElement && child.dataset.wuiToastPosition === position\n )\n if (existing) return existing\n\n const container = document.createElement('div')\n container.className = `wui-toast-container wui-toast-${position} wui-scroll`\n container.dataset.wuiToastPosition = position\n container.setAttribute('role', 'log')\n container.setAttribute('aria-live', 'polite')\n container.setAttribute('aria-relevant', 'additions')\n root.appendChild(container)\n toastContainers.add(container)\n\n container.addEventListener('pointerenter', () => (container.dataset.hovered = 'true'))\n container.addEventListener('pointerleave', () => {\n delete container.dataset.hovered\n scrollToBottom(container)\n })\n return container\n}\n\nfunction pruneContainer(container: HTMLElement | null) {\n if (!container || container.children.length > 0) return\n container.remove()\n toastContainers.delete(container)\n}\n\nfunction scrollToBottom(container: HTMLElement) {\n if (container.dataset.hovered === 'true') return\n requestAnimationFrame(() => {\n container.scrollTop = container.scrollHeight\n })\n}\n\nfunction scheduleBatchFlush() {\n if (isBatchScheduled) return\n isBatchScheduled = true\n void Promise.resolve().then(flushBatch)\n}\n\nfunction flushBatch() {\n isBatchScheduled = false\n const batch = pendingBatch\n pendingBatch = undefined\n if (!batch) return\n\n const containersToScroll = new Set<HTMLElement>()\n for (const item of batch) {\n // 容器在挂载时才解析:待挂载条目被 patch 改了 position 也能落到正确容器。\n const container = ensureContainer(item.options.position || 'top-right', item.root)\n mountToast(item.id, item.options, container)\n containersToScroll.add(container)\n }\n for (const container of containersToScroll) scrollToBottom(container)\n}\n\n/**\n * 命令式 API 的 upsert 语义:指定同一个 id 的多次调用收敛到同一条 toast。\n * 给出的字段覆盖,未给出的保持原值;`container` 与 `target` 以首次为准,换 overlay root 牵连更广。\n */\nfunction mergePatch(base: ToastInstanceOptions, patch: ToastInstanceOptions): ToastInstanceOptions {\n return {\n ...base,\n message: patch.message ?? base.message,\n heading: patch.heading ?? base.heading,\n type: patch.type ?? base.type,\n duration: patch.duration ?? base.duration,\n closable: patch.closable ?? base.closable,\n position: patch.position ?? base.position,\n container: base.container,\n target: base.target\n }\n}\n\nfunction applyPatch(el: WebUiToast, options: ToastInstanceOptions) {\n if (options.message !== undefined) el.message = options.message\n if (options.heading !== undefined) el.heading = options.heading\n if (options.type !== undefined) el.type = options.type\n if (options.closable !== undefined) el.noCloseButton = options.closable === false\n // duration 只有显式传入才重启计时;message/heading/type 都是 Lit 属性,赋值不碰 _closeTimer。\n // 悬停暂停期间交给元素自己裁决:setDuration() 只记新值不点火,否则鼠标还压在 toast 上\n // 时倒计时就被重启,「悬停暂停」在这条路径上会静默失效。\n if (options.duration !== undefined) el.setDuration(options.duration)\n if (options.position !== undefined && options.position !== el.position) relocateToast(el, options.position)\n}\n\nfunction relocateToast(el: WebUiToast, position: ToastPosition) {\n const prev = el.parentElement\n const root = prev?.parentElement\n if (!root) return\n const next = ensureContainer(position, root)\n\n const movable = next as MaybeMoveBefore\n if (typeof movable.moveBefore === 'function') {\n // 不摘出节点,disconnected/connected 都不触发:计时、焦点与动画状态原样保留。\n movable.moveBefore(el, null)\n } else {\n el.pauseAutoClose()\n next.appendChild(el)\n el.resumeAutoClose()\n }\n\n el.position = position\n pruneContainer(prev)\n scrollToBottom(next)\n}\n\nfunction createToast(options: ToastInstanceOptions): string {\n const id = options.id || generateId()\n\n const mounted = visibleToasts.get(id)\n if (mounted) {\n /*\n * 「已挂载但 show() 还没跑」的窗口(mountToast 之后、rAF 里的 show() 之前)仍复用同一条元素;\n * 正在退场、或被宿主摘出 DOM 的元素则不再接受更新。后者的补丁只会落在一条即将(或已经)\n * 离开文档的元素上:调用方拿到同一个 id,却没有任何可见通知,`relocateToast` 也会因\n * 找不到 root 而静默吞掉 position。因此摘掉映射、改走新建路径。\n * 退场元素仍在 DOM 里,由它自己延迟派发的 `toast-close` 收尾(按元素身份解绑,见 removeToastElement)。\n */\n if (mounted.isConnected && !mounted.dismissing) {\n applyPatch(mounted, options)\n return id\n }\n visibleToasts.delete(id)\n }\n\n const pending = pendingBatch?.find(item => item.id === id)\n if (pending) {\n pending.options = mergePatch(pending.options, options)\n return id\n }\n\n if (!pendingBatch) pendingBatch = []\n pendingBatch.push({ id, options, root: resolveRoot(options) })\n scheduleBatchFlush()\n return id\n}\n\nfunction mountToast(id: string, options: ToastInstanceOptions, container: HTMLElement) {\n const el = document.createElement('web-ui-toast')\n const type = options.type || 'info'\n el.toastId = id\n el.type = type\n el.position = options.position || 'top-right'\n el.heading = options.heading || ''\n el.message = options.message\n // error 的 5000 只在挂载时兜底,不写进 options:写进去 applyPatch 就会把它当成「显式传入\n // duration」而每次 upsert 都重启倒计时,与「duration 只有显式传入才重启」的契约冲突。\n el.duration = options.duration ?? (type === 'error' ? 5000 : 3000)\n el.noCloseButton = options.closable === false\n\n el.addEventListener('toast-close', () => removeToastElement(el))\n\n container.appendChild(el)\n visibleToasts.set(id, el)\n requestAnimationFrame(() => {\n // close()/clear() 可能已经在这段窗口里收走了它(见 dismiss 的无退场动画分支):\n // 不再入场,否则一条孤儿元素会在 duration 之后补派一次同 id 的 toast-close。\n if (el.dismissing) return\n el.show()\n })\n}\n\n/**\n * 按元素身份解绑并移除。退场中的旧元素会在稍后派发 `toast-close`,而此刻同 id 可能已经有\n * 新元素(退场窗口内的 upsert 会新建一条);若按 `detail.id` 删映射,就会把刚建好的那条\n * 一起删掉 —— 与「孤儿元素收不走」是同一类缺陷,只是换了个入口。\n */\nfunction removeToastElement(el: WebUiToast) {\n if (visibleToasts.get(el.toastId) === el) visibleToasts.delete(el.toastId)\n const container = el.parentElement\n el.remove()\n pruneContainer(container)\n}\n\n/**\n * id 不在 Map 里时仍要清掉同 id 的残留节点:早先的按 id 删除路径在这里直接 return,\n * 重复挂载留下的孤儿 toast 因此连自关闭、close() 和 clear() 都收不走,会永久留在\n * role=\"log\" 容器里。强删不派发 `toast-close`,但对不可从管理器触达的元素来说没有消费方状态可言。\n */\nfunction removeStray(id: string) {\n for (const container of toastContainers) {\n for (const child of Array.from(container.children)) {\n if (child.tagName !== 'WEB-UI-TOAST') continue\n if ((child as Partial<WebUiToast>).toastId === id) child.remove()\n }\n }\n for (const container of Array.from(toastContainers)) pruneContainer(container)\n}\n\n/**\n * 关闭一个 id 时,「还没开始显示」的两种状态都要能取消,否则 close() 会静默失效:\n *\n * - 同 tick 仍在 `pendingBatch` 里:还不是 DOM 元素,`removeStray` 扫不到 —— 出队即取消挂载。\n * - 已 `flushBatch`、rAF 里的 `show()` 未跑:元素在映射里但 `visible` 仍是 false,\n * `dismiss()` 现在对这段窗口立即派发(无退场动画可播),由 toast-close 监听摘除。\n *\n * 已在退场的元素不必也不该再动:它自己延迟派发的 toast-close 会收尾,重复 close 不改变结果。\n */\nfunction close(id: string) {\n const queued = pendingBatch\n if (queued) {\n const index = queued.findIndex(item => item.id === id)\n if (index >= 0) {\n queued.splice(index, 1)\n return\n }\n }\n\n const el = visibleToasts.get(id)\n if (el) {\n el.dismiss('programmatic')\n return\n }\n removeStray(id)\n}\n\n/**\n * 队列条目与已挂载元素一起取消。二者都会在同一个微任务内落地,只遍历已挂载元素会让\n * 「clear() 之后仍冒出一条」成为唯一的例外 —— 与 close() 的可用范围对齐。\n */\nfunction clear() {\n pendingBatch = undefined\n for (const el of visibleToasts.values()) el.dismiss('clear')\n}\n\nfunction toast(options: ToastInstanceOptions): string {\n return createToast(options)\n}\n\ntoast.success = (message: string, options?: ToastShortcutOptions) =>\n createToast({ ...options, message, type: 'success' })\ntoast.info = (message: string, options?: ToastShortcutOptions) => createToast({ ...options, message, type: 'info' })\ntoast.warning = (message: string, options?: ToastShortcutOptions) =>\n createToast({ ...options, message, type: 'warning' })\n// 不注入 duration:error 的 5000 默认值在 mountToast 兜底,否则 upsert 每次都判定为\n// 「显式传入 duration」而重启倒计时(success/info/warning 都没有这个不对称)。\ntoast.error = (message: string, options?: ToastShortcutOptions) => createToast({ ...options, message, type: 'error' })\ntoast.close = close\ntoast.clear = clear\n\n// 重置全部状态(测试用)\ntoast._reset = () => {\n pendingBatch = undefined\n isBatchScheduled = false\n for (const el of visibleToasts.values()) el.remove()\n visibleToasts.clear()\n for (const container of toastContainers) container.remove()\n toastContainers.clear()\n}\n\nexport { toast }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","names":[],"sources":["../../../src/components/toast/manager.ts"],"sourcesContent":["import { getFallbackOverlayRoot } from '@/shared/overlay/overlay-root'\nimport { findNearestTheme, findRootTheme } from '@/shared/overlay/theme-overlay-scope'\n\nimport type { WebUiToast } from './toast'\nimport type { ToastInstanceOptions, ToastOptions, ToastPosition } from './types'\n\nlet toastIdCounter = 0\n\nconst toastContainers = new Set<HTMLElement>()\nconst visibleToasts = new Map<string, WebUiToast>()\n\nlet pendingBatch: Array<{ id: string; options: ToastInstanceOptions; root: HTMLElement }> | undefined\nlet isBatchScheduled = false\n\ntype ToastShortcutOptions = Omit<ToastOptions, 'message' | 'type'> & Pick<ToastInstanceOptions, 'position'>\n\n// moveBefore 尚未进入 Baseline,DOM lib 未必声明;按能力探测调用,缺失时走降级分支。\ntype MaybeMoveBefore = HTMLElement & { moveBefore?: (node: Node, child: Node | null) => void }\n\nfunction generateId(): string {\n return `toast-${++toastIdCounter}`\n}\n\nfunction resolveRoot(options: ToastInstanceOptions): HTMLElement {\n const targetTheme = options.target ? findNearestTheme(options.target) : findRootTheme()\n return options.container ?? targetTheme?.getOverlayRoot() ?? getFallbackOverlayRoot()\n}\n\nfunction ensureContainer(position: ToastPosition, root: HTMLElement): HTMLElement {\n const existing = Array.from(root.children).find(\n (child): child is HTMLElement => child instanceof HTMLElement && child.dataset.wuiToastPosition === position\n )\n if (existing) return existing\n\n const container = document.createElement('div')\n container.className = `wui-toast-container wui-toast-${position} wui-scroll`\n container.dataset.wuiToastPosition = position\n container.setAttribute('role', 'log')\n container.setAttribute('aria-live', 'polite')\n container.setAttribute('aria-relevant', 'additions')\n root.appendChild(container)\n toastContainers.add(container)\n\n container.addEventListener('pointerenter', () => (container.dataset.hovered = 'true'))\n container.addEventListener('pointerleave', () => {\n delete container.dataset.hovered\n scrollToBottom(container)\n })\n return container\n}\n\nfunction pruneContainer(container: HTMLElement | null) {\n if (!container || container.children.length > 0) return\n container.remove()\n toastContainers.delete(container)\n}\n\nfunction scrollToBottom(container: HTMLElement) {\n if (container.dataset.hovered === 'true') return\n requestAnimationFrame(() => {\n container.scrollTop = container.scrollHeight\n })\n}\n\nfunction scheduleBatchFlush() {\n if (isBatchScheduled) return\n isBatchScheduled = true\n void Promise.resolve().then(flushBatch)\n}\n\nfunction flushBatch() {\n isBatchScheduled = false\n const batch = pendingBatch\n pendingBatch = undefined\n if (!batch) return\n\n const containersToScroll = new Set<HTMLElement>()\n for (const item of batch) {\n // 容器在挂载时才解析:待挂载条目被 patch 改了 position 也能落到正确容器。\n const container = ensureContainer(item.options.position || 'top-right', item.root)\n mountToast(item.id, item.options, container)\n containersToScroll.add(container)\n }\n for (const container of containersToScroll) scrollToBottom(container)\n}\n\n/**\n * 命令式 API 的 upsert 语义:指定同一个 id 的多次调用收敛到同一条 toast。\n * 给出的字段覆盖,未给出的保持原值;`container` 与 `target` 以首次为准,换 overlay root 牵连更广。\n */\nfunction mergePatch(base: ToastInstanceOptions, patch: ToastInstanceOptions): ToastInstanceOptions {\n return {\n ...base,\n message: patch.message ?? base.message,\n heading: patch.heading ?? base.heading,\n type: patch.type ?? base.type,\n duration: patch.duration ?? base.duration,\n closable: patch.closable ?? base.closable,\n position: patch.position ?? base.position,\n container: base.container,\n target: base.target\n }\n}\n\nfunction applyPatch(el: WebUiToast, options: ToastInstanceOptions) {\n if (options.message !== undefined) el.message = options.message\n if (options.heading !== undefined) el.heading = options.heading\n if (options.type !== undefined) el.type = options.type\n if (options.closable !== undefined) el.noCloseButton = options.closable === false\n // duration 只有显式传入才重启计时;message/heading/type 都是 Lit 属性,赋值不碰 _closeTimer。\n // 悬停暂停期间交给元素自己裁决:setDuration() 只记新值不点火,否则鼠标还压在 toast 上\n // 时倒计时就被重启,「悬停暂停」在这条路径上会静默失效。\n if (options.duration !== undefined) el.setDuration(options.duration)\n if (options.position !== undefined && options.position !== el.position) relocateToast(el, options.position)\n}\n\nfunction relocateToast(el: WebUiToast, position: ToastPosition) {\n const prev = el.parentElement\n const root = prev?.parentElement\n if (!root) return\n const next = ensureContainer(position, root)\n\n const movable = next as MaybeMoveBefore\n if (typeof movable.moveBefore === 'function') {\n // 不摘出节点,disconnected/connected 都不触发:计时、焦点与动画状态原样保留。\n movable.moveBefore(el, null)\n } else {\n el.pauseAutoClose()\n next.appendChild(el)\n el.resumeAutoClose()\n }\n\n el.position = position\n pruneContainer(prev)\n scrollToBottom(next)\n}\n\nfunction createToast(options: ToastInstanceOptions): string {\n const id = options.id || generateId()\n\n const mounted = visibleToasts.get(id)\n if (mounted) {\n /*\n * 「已挂载但 show() 还没跑」的窗口(mountToast 之后、rAF 里的 show() 之前)仍复用同一条元素;\n * 正在退场、或被宿主摘出 DOM 的元素则不再接受更新。后者的补丁只会落在一条即将(或已经)\n * 离开文档的元素上:调用方拿到同一个 id,却没有任何可见通知,`relocateToast` 也会因\n * 找不到 root 而静默吞掉 position。因此摘掉映射、改走新建路径。\n * 退场元素仍在 DOM 里,由它自己延迟派发的 `toast-close` 收尾(按元素身份解绑,见 removeToastElement)。\n */\n if (mounted.isConnected && !mounted.dismissing) {\n applyPatch(mounted, options)\n return id\n }\n visibleToasts.delete(id)\n }\n\n const pending = pendingBatch?.find(item => item.id === id)\n if (pending) {\n pending.options = mergePatch(pending.options, options)\n return id\n }\n\n if (!pendingBatch) pendingBatch = []\n pendingBatch.push({ id, options, root: resolveRoot(options) })\n scheduleBatchFlush()\n return id\n}\n\nfunction mountToast(id: string, options: ToastInstanceOptions, container: HTMLElement) {\n const el = document.createElement('web-ui-toast')\n const type = options.type || 'info'\n el.toastId = id\n el.type = type\n el.position = options.position || 'top-right'\n el.heading = options.heading || ''\n el.message = options.message\n // error 的 5000 只在挂载时兜底,不写进 options:写进去 applyPatch 就会把它当成「显式传入\n // duration」而每次 upsert 都重启倒计时,与「duration 只有显式传入才重启」的契约冲突。\n el.duration = options.duration ?? (type === 'error' ? 5000 : 3000)\n el.noCloseButton = options.closable === false\n\n el.addEventListener('toast-close', () => removeToastElement(el))\n\n container.appendChild(el)\n visibleToasts.set(id, el)\n requestAnimationFrame(() => {\n // close()/clear() 可能已经在这段窗口里收走了它(见 dismiss 的无退场动画分支):\n // 不再入场,否则一条孤儿元素会在 duration 之后补派一次同 id 的 toast-close。\n if (el.dismissing) return\n el.show()\n })\n}\n\n/**\n * 按元素身份解绑并移除。退场中的旧元素会在稍后派发 `toast-close`,而此刻同 id 可能已经有\n * 新元素(退场窗口内的 upsert 会新建一条);若按 `detail.id` 删映射,就会把刚建好的那条\n * 一起删掉 —— 与「孤儿元素收不走」是同一类缺陷,只是换了个入口。\n */\nfunction removeToastElement(el: WebUiToast) {\n if (visibleToasts.get(el.toastId) === el) visibleToasts.delete(el.toastId)\n const container = el.parentElement\n el.remove()\n pruneContainer(container)\n}\n\n/**\n * id 不在 Map 里时仍要清掉同 id 的残留节点:按 id 删除的路径若在这里直接 return,\n * 重复挂载留下的孤儿 toast 就连自关闭、close() 和 clear() 都收不走,会永久留在\n * role=\"log\" 容器里。强删不派发 `toast-close`,但对不可从管理器触达的元素来说没有消费方状态可言。\n */\nfunction removeStray(id: string) {\n for (const container of toastContainers) {\n for (const child of Array.from(container.children)) {\n if (child.tagName !== 'WEB-UI-TOAST') continue\n if ((child as Partial<WebUiToast>).toastId === id) child.remove()\n }\n }\n for (const container of Array.from(toastContainers)) pruneContainer(container)\n}\n\n/**\n * 关闭一个 id 时,「还没开始显示」的两种状态都要能取消,否则 close() 会静默失效:\n *\n * - 同 tick 仍在 `pendingBatch` 里:还不是 DOM 元素,`removeStray` 扫不到 —— 出队即取消挂载。\n * - 已 `flushBatch`、rAF 里的 `show()` 未跑:元素在映射里但 `visible` 仍是 false,\n * `dismiss()` 现在对这段窗口立即派发(无退场动画可播),由 toast-close 监听摘除。\n *\n * 已在退场的元素不必也不该再动:它自己延迟派发的 toast-close 会收尾,重复 close 不改变结果。\n */\nfunction close(id: string) {\n const queued = pendingBatch\n if (queued) {\n const index = queued.findIndex(item => item.id === id)\n if (index >= 0) {\n queued.splice(index, 1)\n return\n }\n }\n\n const el = visibleToasts.get(id)\n if (el) {\n el.dismiss('programmatic')\n return\n }\n removeStray(id)\n}\n\n/**\n * 队列条目与已挂载元素一起取消。二者都会在同一个微任务内落地,只遍历已挂载元素会让\n * 「clear() 之后仍冒出一条」成为唯一的例外 —— 与 close() 的可用范围对齐。\n */\nfunction clear() {\n pendingBatch = undefined\n for (const el of visibleToasts.values()) el.dismiss('clear')\n}\n\nfunction toast(options: ToastInstanceOptions): string {\n return createToast(options)\n}\n\ntoast.success = (message: string, options?: ToastShortcutOptions) =>\n createToast({ ...options, message, type: 'success' })\ntoast.info = (message: string, options?: ToastShortcutOptions) => createToast({ ...options, message, type: 'info' })\ntoast.warning = (message: string, options?: ToastShortcutOptions) =>\n createToast({ ...options, message, type: 'warning' })\n// 不注入 duration:error 的 5000 默认值在 mountToast 兜底,否则 upsert 每次都判定为\n// 「显式传入 duration」而重启倒计时(success/info/warning 都没有这个不对称)。\ntoast.error = (message: string, options?: ToastShortcutOptions) => createToast({ ...options, message, type: 'error' })\ntoast.close = close\ntoast.clear = clear\n\n// 重置全部状态(测试用)\ntoast._reset = () => {\n pendingBatch = undefined\n isBatchScheduled = false\n for (const el of visibleToasts.values()) el.remove()\n visibleToasts.clear()\n for (const container of toastContainers) container.remove()\n toastContainers.clear()\n}\n\nexport { toast }\n"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
export { e as default };
|
|
1
|
+
// src/components/toast/style.css?inline
|
|
2
|
+
var style_default = "*,:before,:after{box-sizing:border-box}:host{display:block}:host([hidden]){display:none}.toast{--wui-internal-glass-shadow:var(--wui-shadow-panel,0 3px 9px #00000045);--wui-glass-corner-radius:var(--wui-radius-menu,18px);transform:translate(var(--toast-slide-x,0), var(--toast-slide-y,-8px)) scale(var(--wui-scale-enter,.9));gap:var(--wui-space-2,8px);width:min(320px, calc(100dvw - 2 * var(--wui-toast-viewport-gap,16px)));min-height:36px;padding:var(--wui-space-2,8px);border-radius:var(--wui-radius-menu,18px);font-size:var(--wui-font-size,14px);line-height:var(--wui-line-height-normal,1.5);color:var(--wui-color-text,#1b1b1b);opacity:0;background-color:var(--wui-color-surface-overlay,#f8f8f8eb);-webkit-backdrop-filter:blur(0) saturate(var(--wui-glass-saturation,160%)) brightness(var(--wui-glass-brightness,1.06));backdrop-filter:blur(0) saturate(var(--wui-glass-saturation,160%)) brightness(var(--wui-glass-brightness,1.06));transition:opacity var(--wui-duration-toast-enter,.28s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1)), -webkit-backdrop-filter var(--wui-duration-toast-enter,.28s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1)), backdrop-filter var(--wui-duration-toast-enter,.28s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1)), transform var(--wui-duration-toast-enter,.28s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1));display:flex;position:relative}:host([visible]) .toast{opacity:1;-webkit-backdrop-filter:blur(var(--wui-glass-blur,4px)) saturate(var(--wui-glass-saturation,160%)) brightness(var(--wui-glass-brightness,1.06));backdrop-filter:blur(var(--wui-glass-blur,4px)) saturate(var(--wui-glass-saturation,160%)) brightness(var(--wui-glass-brightness,1.06));transform:translate(0)scale(1)}:host(:not([visible])) .toast{transition-duration:var(--wui-duration-toast-exit,.2s)}web-ui-button.toast-close-btn{pointer-events:none;cursor:default;opacity:0;transition:opacity var(--wui-duration-trigger,.16s) ease;position:absolute;top:-8px;right:-8px}web-ui-button.toast-close-btn:focus-within{pointer-events:auto;opacity:1}@media (hover:none),(pointer:coarse){web-ui-button.toast-close-btn{pointer-events:auto;cursor:pointer;opacity:1}}@media (hover:hover) and (pointer:fine){web-ui-button.toast-close-btn:hover,.toast:hover web-ui-button.toast-close-btn{pointer-events:auto;opacity:1}}.toast web-ui-button[icon]{--wui-button-color:var(--wui-color-text-secondary,#6a6a6a)}.toast-icon{border-radius:var(--wui-radius-control,calc(infinity * 1px));flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;margin-bottom:auto;display:flex}.toast.success .toast-icon{color:var(--wui-color-success,#16a34a);background-color:color-mix(in srgb, var(--wui-color-success,#16a34a) 10%, transparent)}.toast.info .toast-icon{color:var(--wui-color-info,#2563eb);background-color:color-mix(in srgb, var(--wui-color-info,#2563eb) 10%, transparent)}.toast.warning .toast-icon{color:var(--wui-color-warning,#d97706);background-color:color-mix(in srgb, var(--wui-color-warning,#d97706) 10%, transparent)}.toast.error .toast-icon{color:var(--wui-color-danger,#dc2626);background-color:color-mix(in srgb, var(--wui-color-danger,#dc2626) 10%, transparent)}.toast-body{flex:1;min-width:0}.toast-heading{font-size:var(--wui-font-size,14px);font-weight:var(--wui-font-weight-semibold,600);line-height:var(--wui-line-height-snug,1.4);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.toast-message{-webkit-line-clamp:3;font-size:calc(var(--wui-font-size,14px) - 1px);line-height:var(--wui-line-height-snug,1.4);color:color-mix(in srgb, var(--wui-color-text,#1b1b1b) 55%, transparent);word-break:break-all;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.toast-time{font-size:var(--wui-font-size-caption,12px);color:color-mix(in srgb, var(--wui-color-text,#1b1b1b) 30%, transparent);white-space:nowrap}@media (prefers-reduced-motion:reduce){.toast,:host([visible]) .toast{transition-duration:var(--wui-duration-feedback,.1s);transform:none}}\n";
|
|
3
|
+
export { style_default as default };
|
|
5
4
|
|
|
6
5
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/toast/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n/* 单层玻璃:.toast 自身承担背景/阴影/backdrop-filter。blur(0px) ↔ blur(4px) 平滑\n 插值(none↔blur
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/toast/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n/* 单层玻璃:.toast 自身承担背景/阴影/backdrop-filter。blur(0px) ↔ blur(4px) 平滑\n 插值(none↔blur 不可插值,直接切换会跳变),own opacity 过渡不禁用自身\n blur,因此 toast 直接 opacity + backdrop-filter + transform 同步过渡,无需双层。 */\n.toast {\n --wui-internal-glass-shadow: var(--wui-shadow-panel, 0 3px 9px rgb(0 0 0 / 0.27));\n --wui-glass-corner-radius: var(--wui-radius-menu, 18px);\n position: relative;\n transform: translate(var(--toast-slide-x, 0), var(--toast-slide-y, -8px)) scale(var(--wui-scale-enter, 0.9));\n\n display: flex;\n gap: var(--wui-space-2, 8px);\n\n width: min(320px, calc(100dvw - 2 * var(--wui-toast-viewport-gap, 16px)));\n min-height: 36px;\n padding: var(--wui-space-2, 8px);\n border-radius: var(--wui-radius-menu, 18px);\n\n font-size: var(--wui-font-size, 14px);\n line-height: var(--wui-line-height-normal, 1.5);\n color: var(--wui-color-text, #1b1b1b);\n\n opacity: 0;\n background-color: var(--wui-color-surface-overlay, rgb(248 248 248 / 0.92));\n backdrop-filter: blur(0) saturate(var(--wui-glass-saturation, 160%)) brightness(var(--wui-glass-brightness, 1.06));\n\n /* transition 列表需手写 -webkit-backdrop-filter:lightningcss 不会在 transition\n value 内追加 -webkit 项,iOS 16.4 上 blur 过渡依赖它(属性前缀会自动生成)。 */\n transition:\n opacity var(--wui-duration-toast-enter, 280ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1)),\n -webkit-backdrop-filter var(--wui-duration-toast-enter, 280ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1)),\n backdrop-filter var(--wui-duration-toast-enter, 280ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1)),\n transform var(--wui-duration-toast-enter, 280ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1));\n}\n\n:host([visible]) .toast {\n transform: translate(0, 0) scale(1);\n opacity: 1;\n backdrop-filter: blur(var(--wui-glass-blur, 4px)) saturate(var(--wui-glass-saturation, 160%))\n brightness(var(--wui-glass-brightness, 1.06));\n}\n\n:host(:not([visible])) .toast {\n transition-duration: var(--wui-duration-toast-exit, 200ms);\n}\n\n/* ===== 关闭 button(放在 hover 规则之前,避免 specificity 降序) ===== */\n\nweb-ui-button.toast-close-btn {\n pointer-events: none;\n cursor: default;\n\n position: absolute;\n top: -8px;\n right: -8px;\n\n opacity: 0;\n\n transition: opacity var(--wui-duration-trigger, 160ms) ease;\n\n /* 内层原生 button 获得键盘焦点时宿主同样可见 */\n &:focus-within {\n pointer-events: auto;\n opacity: 1;\n }\n}\n\n@media (hover: none), (pointer: coarse) {\n web-ui-button.toast-close-btn {\n pointer-events: auto;\n cursor: pointer;\n opacity: 1;\n }\n}\n\n@media (hover: hover) and (pointer: fine) {\n web-ui-button.toast-close-btn:hover,\n .toast:hover web-ui-button.toast-close-btn {\n pointer-events: auto;\n opacity: 1;\n }\n}\n\n/* secondary 变体默认用文本色,让关闭 button 呈现 muted 观感 */\n.toast web-ui-button[icon] {\n --wui-button-color: var(--wui-color-text-secondary, #6a6a6a);\n}\n\n.toast-icon {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 20px;\n height: 20px;\n margin-bottom: auto;\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n}\n\n.toast.success .toast-icon {\n color: var(--wui-color-success, #16a34a);\n background-color: color-mix(in srgb, var(--wui-color-success, #16a34a) 10%, transparent);\n}\n\n.toast.info .toast-icon {\n color: var(--wui-color-info, #2563eb);\n background-color: color-mix(in srgb, var(--wui-color-info, #2563eb) 10%, transparent);\n}\n\n.toast.warning .toast-icon {\n color: var(--wui-color-warning, #d97706);\n background-color: color-mix(in srgb, var(--wui-color-warning, #d97706) 10%, transparent);\n}\n\n.toast.error .toast-icon {\n color: var(--wui-color-danger, #dc2626);\n background-color: color-mix(in srgb, var(--wui-color-danger, #dc2626) 10%, transparent);\n}\n\n.toast-body {\n flex: 1;\n min-width: 0;\n}\n\n.toast-heading {\n overflow: hidden;\n\n font-size: var(--wui-font-size, 14px);\n font-weight: var(--wui-font-weight-semibold, 600);\n line-height: var(--wui-line-height-snug, 1.4);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.toast-message {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n\n font-size: calc(var(--wui-font-size, 14px) - 1px);\n line-height: var(--wui-line-height-snug, 1.4);\n color: color-mix(in srgb, var(--wui-color-text, #1b1b1b) 55%, transparent);\n word-break: break-all;\n}\n\n.toast-time {\n font-size: var(--wui-font-size-caption, 12px);\n color: color-mix(in srgb, var(--wui-color-text, #1b1b1b) 30%, transparent);\n white-space: nowrap;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .toast,\n :host([visible]) .toast {\n transform: none;\n transition-duration: var(--wui-duration-feedback, 100ms);\n }\n}\n"],"mappings":";AAAA,IAAA,gBAAA"}
|