@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,467 +1,695 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { normalizeLiteral
|
|
3
|
-
import { dispatchOpenChangeEvent
|
|
4
|
-
import { defineOverlay
|
|
5
|
-
import { hideOverlayPresence
|
|
6
|
-
import { defineOpenOverlay
|
|
7
|
-
import { defineScrollLockLease
|
|
8
|
-
import { UserChangeController
|
|
9
|
-
import { captureFrameworkAnchors
|
|
10
|
-
import { createClosingSubmenuStack
|
|
11
|
-
import { createMenuPortalOverlay
|
|
12
|
-
import { FLOATING_PLACEMENTS
|
|
13
|
-
import
|
|
14
|
-
import { LitElement
|
|
15
|
-
import { customElement
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
2
|
+
import { normalizeLiteral, normalizeNumber } from "../../shared/normalize/index.js";
|
|
3
|
+
import { dispatchOpenChangeEvent } from "../../shared/open-state/index.js";
|
|
4
|
+
import { defineOverlay } from "../../shared/overlay/overlay.js";
|
|
5
|
+
import { hideOverlayPresence, showOverlayPresence } from "../../shared/overlay/presence.js";
|
|
6
|
+
import { defineOpenOverlay } from "../../shared/overlay/open-overlay.js";
|
|
7
|
+
import { defineScrollLockLease } from "../../shared/scroll-lock/scroll-lock.js";
|
|
8
|
+
import { UserChangeController } from "../../shared/events/user-change.js";
|
|
9
|
+
import { captureFrameworkAnchors, focusMenuItem, getMenuChildren, getMenuItemFromEvent, hideNestedMenuChildren, moveMenuChildren, orderManagedMenuItems, reconcileManagedMenuItems, restoreFrameworkAnchors, returnManagedMenuItemsToSlot } from "../../shared/menu-portal/menu-tree.js";
|
|
10
|
+
import { createClosingSubmenuStack, createMenuHoverBinder, createMenuOutsideClickGuard, getEnabledMenuLevelItems, getFocusedMenuItemFromPanels, handleMenuKeyboard } from "../../shared/menu-behavior/index.js";
|
|
11
|
+
import { createMenuPortalOverlay } from "../../shared/menu-portal/menu-portal.js";
|
|
12
|
+
import { FLOATING_PLACEMENTS } from "../../shared/overlay/placement-props.js";
|
|
13
|
+
import style_default from "./style.js";
|
|
14
|
+
import { LitElement, html, unsafeCSS } from "lit";
|
|
15
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
16
|
+
// src/components/dropdown/index.ts
|
|
17
|
+
const SLOT_PREFIX = "web-ui-menu-level-";
|
|
18
|
+
const MENU_ITEM_MARKER = "wui-dropdown-menu-item";
|
|
19
|
+
function getComposedParent(node) {
|
|
20
|
+
if (node instanceof Element && node.assignedSlot) return node.assignedSlot;
|
|
21
|
+
return node.parentNode instanceof ShadowRoot ? node.parentNode.host : node.parentNode;
|
|
20
22
|
}
|
|
21
|
-
function
|
|
22
|
-
let
|
|
23
|
-
|
|
24
|
-
if (
|
|
25
|
-
|
|
23
|
+
function isComposedDescendant(node, ancestor) {
|
|
24
|
+
let current = node;
|
|
25
|
+
while (current) {
|
|
26
|
+
if (current === ancestor) return true;
|
|
27
|
+
current = getComposedParent(current);
|
|
26
28
|
}
|
|
27
|
-
return
|
|
29
|
+
return false;
|
|
28
30
|
}
|
|
29
|
-
function
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
|
|
31
|
+
function hasNativeModalAncestor(node) {
|
|
32
|
+
let current = node;
|
|
33
|
+
while (current) {
|
|
34
|
+
if (current instanceof HTMLDialogElement && current.open && current.matches(":modal")) return true;
|
|
35
|
+
current = getComposedParent(current);
|
|
34
36
|
}
|
|
35
|
-
return
|
|
37
|
+
return false;
|
|
36
38
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
let dropdownIdCounter = 0;
|
|
40
|
+
let WebUiDropdown = class WebUiDropdown extends LitElement {
|
|
41
|
+
constructor(..._args) {
|
|
42
|
+
super(..._args);
|
|
43
|
+
this.open = false;
|
|
44
|
+
this.disabled = false;
|
|
45
|
+
this.matchWidth = false;
|
|
46
|
+
this.noScrollLock = false;
|
|
47
|
+
this._placement = "bottom-start";
|
|
48
|
+
this._offset = 4;
|
|
49
|
+
this._activePath = [];
|
|
50
|
+
this._overlays = /* @__PURE__ */ new Map();
|
|
51
|
+
this._overlay = defineOpenOverlay().make({
|
|
40
52
|
requestClose: () => this._keyboardDelegate.closeDeepestOrAll(),
|
|
41
53
|
isConnected: () => this.isConnected
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
});
|
|
55
|
+
this._scrollLock = defineScrollLockLease().make();
|
|
56
|
+
this._handle = null;
|
|
57
|
+
this._outsideClickGuard = createMenuOutsideClickGuard(this, (node) => this._handle?.contains(node) ?? false);
|
|
58
|
+
this._closingSubmenus = createClosingSubmenuStack({
|
|
59
|
+
getPanel: (container) => container.overlay,
|
|
60
|
+
restoreItems: (container, parentItem) => moveMenuChildren(container.content, parentItem),
|
|
61
|
+
dispose: (container) => {
|
|
62
|
+
container.handle?.release();
|
|
63
|
+
container.overlay.remove();
|
|
64
|
+
container.api.dispose();
|
|
47
65
|
}
|
|
48
|
-
})
|
|
66
|
+
});
|
|
67
|
+
this._hoverDelegate = {
|
|
49
68
|
getOpenDepth: () => this._activePath.length,
|
|
50
|
-
getLevelItems: (
|
|
51
|
-
getActiveItem: (
|
|
52
|
-
isSubmenuItem: (
|
|
53
|
-
openSubmenu: (
|
|
54
|
-
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
69
|
+
getLevelItems: (level) => this._getLevelItems(level),
|
|
70
|
+
getActiveItem: (level) => this._getLevelItems(level)[this._activePath[level]],
|
|
71
|
+
isSubmenuItem: (item) => item.hasAttribute("submenu"),
|
|
72
|
+
openSubmenu: (item) => {
|
|
73
|
+
const level = this._getFocusedLevel(item);
|
|
74
|
+
if (level === void 0) return;
|
|
75
|
+
const itemIndex = this._getLevelItems(level).indexOf(item);
|
|
76
|
+
if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex);
|
|
58
77
|
},
|
|
59
|
-
closeFrom: (
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
closeFrom: (level) => this._closeSubmenuFrom(level + 1)
|
|
79
|
+
};
|
|
80
|
+
this._hoverBinder = createMenuHoverBinder(this._hoverDelegate, "web-ui-dropdown-item");
|
|
81
|
+
this._keyboardDelegate = {
|
|
82
|
+
getFocusedItem: (event) => getFocusedMenuItemFromPanels(event, [...this._overlays.values()].map(({ overlay }) => overlay), "web-ui-dropdown-item"),
|
|
83
|
+
getLevelOf: (item) => this._getFocusedLevel(item),
|
|
84
|
+
getEnabledItems: (level) => getEnabledMenuLevelItems(this._overlays.get(level)?.content),
|
|
85
|
+
isSubmenuItem: (item) => item.hasAttribute("submenu"),
|
|
86
|
+
openSubmenuInstant: (item) => {
|
|
87
|
+
const level = this._getFocusedLevel(item);
|
|
88
|
+
if (level === void 0) return;
|
|
89
|
+
const itemIndex = this._getLevelItems(level).indexOf(item);
|
|
90
|
+
if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex, true);
|
|
70
91
|
},
|
|
71
|
-
closeToParent: (
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
closeToParent: (level) => {
|
|
93
|
+
const parentItem = this._getLevelItems(level - 1)[this._activePath[level - 1]];
|
|
94
|
+
this._closeSubmenuFrom(level);
|
|
95
|
+
return parentItem;
|
|
74
96
|
},
|
|
75
97
|
closeDeepestOrAll: () => {
|
|
76
|
-
this._activePath.length > 0
|
|
98
|
+
if (this._activePath.length > 0) this._closeSubmenuFrom(this._activePath.length);
|
|
99
|
+
else this._closeAll(true);
|
|
77
100
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
101
|
+
};
|
|
102
|
+
this._userOpenChange = new UserChangeController();
|
|
103
|
+
this._skipFocusRestoreOnClose = false;
|
|
104
|
+
this._shouldOpenInstantly = true;
|
|
105
|
+
this._suppressInitialFocusVisible = true;
|
|
106
|
+
this._menuSyncScheduled = false;
|
|
107
|
+
this._level0ItemAnchors = /* @__PURE__ */ new Map();
|
|
108
|
+
this._menuContentObserver = new MutationObserver(() => {
|
|
109
|
+
if (this.open) this._scheduleMenuSync();
|
|
110
|
+
});
|
|
111
|
+
this._onTriggerClick = (event) => {
|
|
112
|
+
if (this.disabled) return;
|
|
113
|
+
if (this.open) this._closeAll(true);
|
|
114
|
+
else {
|
|
115
|
+
const fromKeyboard = event.detail === 0;
|
|
116
|
+
this._openMenu(fromKeyboard, true, !fromKeyboard);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
this._onClickOutside = (e) => {
|
|
120
|
+
if (this._pointerInteraction) {
|
|
121
|
+
this._pointerInteraction.completed = true;
|
|
122
|
+
this._pointerInteraction.clickInsideMenu = this._outsideClickGuard.isInside(e);
|
|
123
|
+
this._pointerInteraction = void 0;
|
|
124
|
+
this._resumePendingFocusOutCheck();
|
|
87
125
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
126
|
+
if (!this.isOpen || this._outsideClickGuard.isArmed()) return;
|
|
127
|
+
if (this._outsideClickGuard.isInside(e)) return;
|
|
128
|
+
this._closeAll(true);
|
|
129
|
+
};
|
|
130
|
+
this._onPointerDown = (event) => {
|
|
131
|
+
const startedInsideMenu = Boolean(this.open && this._handle?.containsEvent(event));
|
|
92
132
|
this._pointerInteraction = {
|
|
93
|
-
startedInsideMenu
|
|
94
|
-
startedWithinDropdown:
|
|
95
|
-
completed:
|
|
133
|
+
startedInsideMenu,
|
|
134
|
+
startedWithinDropdown: Boolean(this.open && (startedInsideMenu || event.composedPath().includes(this))),
|
|
135
|
+
completed: false
|
|
96
136
|
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
137
|
+
};
|
|
138
|
+
this._onPointerUp = (event) => {
|
|
139
|
+
const interaction = this._pointerInteraction;
|
|
140
|
+
if (!interaction) return;
|
|
141
|
+
interaction.completed = true;
|
|
142
|
+
interaction.clickInsideMenu = Boolean(this._handle?.containsEvent(event));
|
|
143
|
+
this._pointerInteraction = void 0;
|
|
144
|
+
this._resumePendingFocusOutCheck();
|
|
145
|
+
};
|
|
146
|
+
this._onPointerCancel = () => {
|
|
147
|
+
const interaction = this._pointerInteraction;
|
|
148
|
+
if (!interaction) return;
|
|
149
|
+
interaction.completed = true;
|
|
150
|
+
interaction.clickInsideMenu = interaction.startedInsideMenu;
|
|
151
|
+
this._pointerInteraction = void 0;
|
|
152
|
+
this._resumePendingFocusOutCheck();
|
|
153
|
+
};
|
|
154
|
+
this._onFocusOut = (event) => {
|
|
155
|
+
const handle = this._handle;
|
|
156
|
+
if (!this.open || !handle?.containsEvent(event)) return;
|
|
157
|
+
const pointerInteraction = this._pointerInteraction;
|
|
158
|
+
const source = event.composedPath()[0];
|
|
159
|
+
if (source instanceof Node && !source.isConnected) return;
|
|
160
|
+
const next = event.relatedTarget;
|
|
161
|
+
if (next instanceof Node && [...this._overlays.values()].some(({ overlay }) => isComposedDescendant(next, overlay))) return;
|
|
162
|
+
const movedToKnownOutsideTarget = next instanceof Node;
|
|
163
|
+
if (movedToKnownOutsideTarget) this._skipFocusRestoreOnClose = true;
|
|
164
|
+
const checkFocus = () => {
|
|
165
|
+
if (!this.open || this._handle !== handle) return;
|
|
166
|
+
if (this._pendingTabNavigation) {
|
|
167
|
+
this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(checkFocus);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (pointerInteraction?.startedWithinDropdown) {
|
|
171
|
+
if (!pointerInteraction.completed) {
|
|
172
|
+
this._pendingFocusOutCheck = () => this._overlay.scheduleFrame(checkFocus);
|
|
127
173
|
return;
|
|
128
174
|
}
|
|
129
|
-
|
|
175
|
+
if (pointerInteraction.clickInsideMenu) return;
|
|
130
176
|
}
|
|
177
|
+
if (handle.hasFocusWithin()) {
|
|
178
|
+
if (movedToKnownOutsideTarget) this._skipFocusRestoreOnClose = false;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
this._skipFocusRestoreOnClose = true;
|
|
182
|
+
this._closeAll(true);
|
|
131
183
|
};
|
|
132
|
-
this._overlay.scheduleFrame(
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (!
|
|
137
|
-
|
|
138
|
-
|
|
184
|
+
this._overlay.scheduleFrame(checkFocus);
|
|
185
|
+
};
|
|
186
|
+
this._onFocusIn = (event) => {
|
|
187
|
+
const handle = this._handle;
|
|
188
|
+
if (!this.open || !handle) return;
|
|
189
|
+
if (!handle.containsEvent(event)) {
|
|
190
|
+
if (this._pendingTabNavigation) return;
|
|
191
|
+
if (this._pointerInteraction?.startedWithinDropdown && !this._pointerInteraction.completed) return;
|
|
192
|
+
this._skipFocusRestoreOnClose = true;
|
|
193
|
+
this._closeAll(true);
|
|
139
194
|
return;
|
|
140
195
|
}
|
|
141
|
-
this._skipFocusRestoreOnClose =
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
196
|
+
this._skipFocusRestoreOnClose = false;
|
|
197
|
+
const focusedItem = getMenuItemFromEvent(event);
|
|
198
|
+
if (!focusedItem) return;
|
|
199
|
+
this._setMenuTabStop(focusedItem);
|
|
200
|
+
};
|
|
201
|
+
this._onMenuClick = (e) => {
|
|
202
|
+
const item = getMenuItemFromEvent(e);
|
|
203
|
+
if (!item || item.hasAttribute("disabled") || !item.hasAttribute("submenu")) return;
|
|
204
|
+
const level = this._getFocusedLevel(item);
|
|
205
|
+
if (level === void 0) return;
|
|
206
|
+
const itemIndex = this._getLevelItems(level).indexOf(item);
|
|
207
|
+
if (itemIndex >= 0) this._toggleSubmenu(level, itemIndex, e.detail === 0);
|
|
208
|
+
};
|
|
209
|
+
this._onKeydown = (e) => {
|
|
210
|
+
if (!this.open) return;
|
|
211
|
+
if (e.key === "Tab") return;
|
|
212
|
+
if (this.disabled) return;
|
|
213
|
+
handleMenuKeyboard(this._keyboardDelegate, e);
|
|
214
|
+
};
|
|
215
|
+
this._onTabKeydown = (e) => {
|
|
154
216
|
if (e.key !== "Tab" || !this.open || e.defaultPrevented) return;
|
|
155
|
-
|
|
156
|
-
if (!
|
|
157
|
-
|
|
217
|
+
const focusedItem = getMenuItemFromEvent(e);
|
|
218
|
+
if (!focusedItem || this._getFocusedLevel(focusedItem) === void 0) return;
|
|
219
|
+
const isInsideNativeModal = [...this._overlays.values()].some(({ overlay }) => hasNativeModalAncestor(overlay));
|
|
220
|
+
const navigation = {
|
|
158
221
|
event: e,
|
|
159
|
-
focusedItem
|
|
160
|
-
previousFocus:
|
|
161
|
-
focusTrigger: !
|
|
222
|
+
focusedItem,
|
|
223
|
+
previousFocus: focusedItem.shadowRoot?.activeElement instanceof HTMLElement ? focusedItem.shadowRoot.activeElement : this._getDeepActiveElement(),
|
|
224
|
+
focusTrigger: !isInsideNativeModal || !e.shiftKey
|
|
162
225
|
};
|
|
163
|
-
this._pendingTabNavigation =
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
226
|
+
this._pendingTabNavigation = navigation;
|
|
227
|
+
this._setMenuTabStop();
|
|
228
|
+
if (navigation.focusTrigger) this._focusTriggerForTab();
|
|
229
|
+
setTimeout(() => {
|
|
230
|
+
if (this._pendingTabNavigation !== navigation) return;
|
|
231
|
+
this._pendingTabNavigation = void 0;
|
|
232
|
+
if (e.defaultPrevented) {
|
|
233
|
+
this._setMenuTabStop(focusedItem);
|
|
234
|
+
if (navigation.previousFocus?.isConnected && this._getDeepActiveElement() !== navigation.previousFocus) navigation.previousFocus.focus();
|
|
235
|
+
return;
|
|
170
236
|
}
|
|
237
|
+
if (navigation.focusTrigger || !this._handle?.hasFocusWithin()) {
|
|
238
|
+
this._skipFocusRestoreOnClose = true;
|
|
239
|
+
this._closeAll(true);
|
|
240
|
+
} else this._setMenuTabStop(focusedItem);
|
|
171
241
|
}, 0);
|
|
172
242
|
};
|
|
173
243
|
}
|
|
174
244
|
static {
|
|
175
|
-
this.styles =
|
|
245
|
+
this.styles = unsafeCSS(style_default);
|
|
176
246
|
}
|
|
177
247
|
get placement() {
|
|
178
248
|
return this._placement;
|
|
179
249
|
}
|
|
180
|
-
set placement(
|
|
181
|
-
this._placement =
|
|
250
|
+
set placement(v) {
|
|
251
|
+
this._placement = normalizeLiteral(v, FLOATING_PLACEMENTS, "bottom-start");
|
|
182
252
|
}
|
|
183
253
|
get offset() {
|
|
184
254
|
return this._offset;
|
|
185
255
|
}
|
|
186
|
-
set offset(
|
|
187
|
-
this._offset =
|
|
256
|
+
set offset(v) {
|
|
257
|
+
this._offset = normalizeNumber(v, 0, 100, 4);
|
|
188
258
|
}
|
|
189
259
|
get isOpen() {
|
|
190
260
|
return this.open || this._activePath.length > 0;
|
|
191
261
|
}
|
|
192
262
|
connectedCallback() {
|
|
193
|
-
super.connectedCallback()
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
263
|
+
super.connectedCallback();
|
|
264
|
+
this._overlay.resume();
|
|
265
|
+
this.addEventListener("keydown", this._onKeydown);
|
|
266
|
+
window.addEventListener("keydown", this._onTabKeydown);
|
|
267
|
+
document.addEventListener("pointerdown", this._onPointerDown, true);
|
|
268
|
+
document.addEventListener("pointerup", this._onPointerUp, true);
|
|
269
|
+
document.addEventListener("pointercancel", this._onPointerCancel, true);
|
|
270
|
+
document.addEventListener("click", this._onClickOutside);
|
|
271
|
+
document.addEventListener("focusin", this._onFocusIn, true);
|
|
272
|
+
document.addEventListener("focusout", this._onFocusOut, true);
|
|
273
|
+
this._menuContentObserver.observe(this, {
|
|
274
|
+
childList: true,
|
|
275
|
+
subtree: true
|
|
276
|
+
});
|
|
277
|
+
if (this.open && this.hasUpdated) this._syncOpenOverlay(this._isFocusOrphaned());
|
|
197
278
|
}
|
|
198
279
|
firstUpdated() {
|
|
199
280
|
this.shadowRoot?.querySelector("slot[name=\"trigger\"]")?.addEventListener("slotchange", () => this.requestUpdate());
|
|
200
281
|
}
|
|
201
282
|
disconnectedCallback() {
|
|
202
|
-
super.disconnectedCallback()
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
this.
|
|
283
|
+
super.disconnectedCallback();
|
|
284
|
+
this._menuContentObserver.disconnect();
|
|
285
|
+
this._pointerInteraction = void 0;
|
|
286
|
+
this._pendingFocusOutCheck = void 0;
|
|
287
|
+
this._pendingTabNavigation = void 0;
|
|
288
|
+
this.removeEventListener("keydown", this._onKeydown);
|
|
289
|
+
window.removeEventListener("keydown", this._onTabKeydown);
|
|
290
|
+
document.removeEventListener("pointerdown", this._onPointerDown, true);
|
|
291
|
+
document.removeEventListener("pointerup", this._onPointerUp, true);
|
|
292
|
+
document.removeEventListener("pointercancel", this._onPointerCancel, true);
|
|
293
|
+
document.removeEventListener("click", this._onClickOutside);
|
|
294
|
+
document.removeEventListener("focusin", this._onFocusIn, true);
|
|
295
|
+
document.removeEventListener("focusout", this._onFocusOut, true);
|
|
296
|
+
this._outsideClickGuard.dispose();
|
|
297
|
+
this._hoverBinder.dispose();
|
|
298
|
+
this._overlay.suspend();
|
|
299
|
+
this._scrollLock.release();
|
|
300
|
+
this._cleanupClosedMenu();
|
|
301
|
+
}
|
|
302
|
+
updated(changed) {
|
|
303
|
+
this._syncTriggerAria();
|
|
304
|
+
if (changed.has("open")) {
|
|
305
|
+
if (this.open) {
|
|
306
|
+
this._skipFocusRestoreOnClose = false;
|
|
307
|
+
this._syncOpenOverlay(true);
|
|
308
|
+
} else {
|
|
309
|
+
this._overlay.invalidate();
|
|
310
|
+
this._syncScrollLock();
|
|
311
|
+
this._suppressInitialFocusVisible = true;
|
|
312
|
+
this._handle?.release();
|
|
313
|
+
this._handle = null;
|
|
314
|
+
this._closeRootAfterPresence();
|
|
315
|
+
}
|
|
316
|
+
if (this._userOpenChange.consume()) dispatchOpenChangeEvent(this, this.open);
|
|
317
|
+
}
|
|
318
|
+
if (changed.has("noScrollLock")) this._syncScrollLock();
|
|
319
|
+
if (changed.has("placement") || changed.has("offset") || changed.has("matchWidth")) this._overlays.get(0)?.api.update({
|
|
206
320
|
placement: this.placement,
|
|
207
321
|
offset: this.offset,
|
|
208
322
|
matchWidth: this.matchWidth
|
|
209
|
-
})
|
|
323
|
+
});
|
|
324
|
+
this._hoverBinder.bind();
|
|
210
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* 焦点是否已无归属:被 detach 打掉的焦点会落回 `body`,用户主动点到别处时不会。
|
|
328
|
+
* 重挂载对账只在前者才把焦点夺回 menu,否则等于从消费者手里抢焦点。
|
|
329
|
+
*/
|
|
211
330
|
_isFocusOrphaned() {
|
|
212
|
-
|
|
213
|
-
return
|
|
331
|
+
const active = document.activeElement;
|
|
332
|
+
return active === null || active === document.body || active === document.documentElement;
|
|
214
333
|
}
|
|
334
|
+
/** Resolve the actual focus node through open shadow roots. */
|
|
215
335
|
_getDeepActiveElement() {
|
|
216
|
-
let
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (!(
|
|
220
|
-
|
|
336
|
+
let active = document.activeElement;
|
|
337
|
+
while (active instanceof HTMLElement) {
|
|
338
|
+
const nested = active.shadowRoot?.activeElement;
|
|
339
|
+
if (!(nested instanceof HTMLElement)) return active;
|
|
340
|
+
active = nested;
|
|
221
341
|
}
|
|
222
342
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
343
|
+
/**
|
|
344
|
+
* 打开态的唯一对账入口:panel、滚动锁、outside click、hover 与 menu 焦点都从这里收敛,
|
|
345
|
+
* `updated()` 的打开分支与重连对账共用它,两条路径必须落到同一个状态。
|
|
346
|
+
*/
|
|
347
|
+
_syncOpenOverlay(takeFocus) {
|
|
348
|
+
this._restoreFocusTarget ??= this._getDeepActiveElement();
|
|
349
|
+
this._outsideClickGuard.arm();
|
|
350
|
+
this._syncScrollLock();
|
|
351
|
+
this._hideAllSubmenuChildren();
|
|
352
|
+
this._overlay.invalidate();
|
|
353
|
+
this._overlay.scheduleFrame(() => {
|
|
354
|
+
this._ensureOverlay(0, this._shouldOpenInstantly);
|
|
355
|
+
this._shouldOpenInstantly = true;
|
|
356
|
+
if (takeFocus) focusMenuItem(getEnabledMenuLevelItems(this._overlays.get(0)?.content)[0], { suppressFocusVisible: this._suppressInitialFocusVisible });
|
|
357
|
+
this._syncTriggerAria();
|
|
358
|
+
});
|
|
359
|
+
this._bindHoversAfterUpdate();
|
|
227
360
|
}
|
|
228
361
|
openMenu() {
|
|
229
|
-
this._openMenu(
|
|
362
|
+
this._openMenu(true, false, true);
|
|
230
363
|
}
|
|
231
|
-
_openMenu(
|
|
232
|
-
this.disabled || this.open
|
|
364
|
+
_openMenu(isInstant, fromUser, suppressFocusVisible) {
|
|
365
|
+
if (this.disabled || this.open) return;
|
|
366
|
+
this._outsideClickGuard.arm();
|
|
367
|
+
this._shouldOpenInstantly = isInstant;
|
|
368
|
+
this._suppressInitialFocusVisible = suppressFocusVisible;
|
|
369
|
+
if (fromUser) this._userOpenChange.mark();
|
|
370
|
+
this._claimRoot(this._overlays.get(0)?.overlay ?? this);
|
|
371
|
+
this.open = true;
|
|
233
372
|
}
|
|
234
373
|
closeAll() {
|
|
235
|
-
this._closeAll(
|
|
374
|
+
this._closeAll(false);
|
|
236
375
|
}
|
|
237
|
-
_closeAll(
|
|
238
|
-
|
|
376
|
+
_closeAll(fromUser) {
|
|
377
|
+
if (!this.open) return;
|
|
378
|
+
if (fromUser) this._userOpenChange.mark();
|
|
379
|
+
this.open = false;
|
|
239
380
|
}
|
|
240
381
|
_closeAllSubmenus() {
|
|
241
|
-
this._closeSubmenuFrom(1,
|
|
382
|
+
this._closeSubmenuFrom(1, true);
|
|
383
|
+
this._closingSubmenus.restoreAll();
|
|
384
|
+
this._syncActiveAttrs();
|
|
242
385
|
}
|
|
243
386
|
_cleanupClosedMenu() {
|
|
244
|
-
this._closeAllSubmenus()
|
|
387
|
+
this._closeAllSubmenus();
|
|
388
|
+
this._returnLevel0Items();
|
|
389
|
+
this._resetMenuTabStops();
|
|
390
|
+
this._disposeAll();
|
|
391
|
+
this._syncTriggerAria();
|
|
245
392
|
}
|
|
246
393
|
_resetMenuTabStops() {
|
|
247
|
-
this.querySelectorAll("web-ui-dropdown-item").forEach((
|
|
248
|
-
|
|
249
|
-
|
|
394
|
+
this.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
|
|
395
|
+
const control = item.shadowRoot?.querySelector("[role=\"menuitem\"]");
|
|
396
|
+
if (control) control.tabIndex = item.hasAttribute("disabled") ? -1 : 0;
|
|
250
397
|
});
|
|
251
398
|
}
|
|
252
399
|
async _closeRootAfterPresence() {
|
|
253
|
-
|
|
254
|
-
if (
|
|
255
|
-
|
|
256
|
-
|
|
400
|
+
const overlay = this._overlays.get(0)?.overlay;
|
|
401
|
+
if (overlay && !await hideOverlayPresence(overlay)) return;
|
|
402
|
+
if (this.open || !this.isConnected) return;
|
|
403
|
+
const shouldRestoreFocus = [...this._overlays.values(), ...this._closingSubmenus.closing()].some((menuOverlay) => menuOverlay.overlay.matches(":focus-within"));
|
|
404
|
+
this._cleanupClosedMenu();
|
|
405
|
+
if (shouldRestoreFocus && !this._skipFocusRestoreOnClose) this._restoreFocusTarget?.focus();
|
|
406
|
+
this._skipFocusRestoreOnClose = false;
|
|
407
|
+
this._restoreFocusTarget = void 0;
|
|
257
408
|
}
|
|
258
409
|
_hideAllSubmenuChildren() {
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
_toggleSubmenu(
|
|
262
|
-
if (this._activePath[
|
|
263
|
-
this._closeSubmenuFrom(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
410
|
+
hideNestedMenuChildren(this, `${SLOT_PREFIX}-hidden`);
|
|
411
|
+
}
|
|
412
|
+
_toggleSubmenu(level, itemIndex, isInstant = false) {
|
|
413
|
+
if (this._activePath[level] === itemIndex) return;
|
|
414
|
+
this._closeSubmenuFrom(level + 1);
|
|
415
|
+
this._activePath = [...this._activePath.slice(0, level), itemIndex];
|
|
416
|
+
this._syncActiveAttrs();
|
|
417
|
+
const item = this._getLevelItems(level)[itemIndex];
|
|
418
|
+
if (item?.hasAttribute("submenu")) this._overlay.scheduleFrame(() => {
|
|
419
|
+
if (!this.open || this._activePath[level] !== itemIndex) return;
|
|
420
|
+
if (!this._ensureOverlay(level + 1, isInstant, item)) this._populateOverlay(level + 1, item);
|
|
421
|
+
});
|
|
422
|
+
this._bindHoversAfterUpdate();
|
|
423
|
+
}
|
|
424
|
+
_closeSubmenuFrom(level, isInstant = false) {
|
|
425
|
+
for (let lv = this._activePath.length; lv >= level; lv--) {
|
|
426
|
+
const overlay = this._overlays.get(lv);
|
|
427
|
+
const parentItem = this._getLevelItems(lv - 1)[this._activePath[lv - 1]];
|
|
428
|
+
if (!overlay) continue;
|
|
429
|
+
if (!parentItem || isInstant) {
|
|
430
|
+
this._depopulateOverlay(lv, parentItem);
|
|
431
|
+
this._disposeOverlay(lv);
|
|
432
|
+
} else {
|
|
433
|
+
this._overlays.delete(lv);
|
|
434
|
+
this._closingSubmenus.closeAsync(parentItem, overlay);
|
|
435
|
+
}
|
|
273
436
|
}
|
|
274
|
-
|
|
275
|
-
|
|
437
|
+
const nextActivePath = this._activePath.slice(0, level - 1);
|
|
438
|
+
if (nextActivePath.length !== this._activePath.length) this._activePath = nextActivePath;
|
|
439
|
+
this._syncActiveAttrs();
|
|
276
440
|
}
|
|
277
441
|
_syncActiveAttrs() {
|
|
278
|
-
this.querySelectorAll("web-ui-dropdown-item").forEach((
|
|
279
|
-
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
442
|
+
this.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
|
|
443
|
+
item.removeAttribute("active");
|
|
444
|
+
});
|
|
445
|
+
this._overlays.forEach((_, level) => {
|
|
446
|
+
this._getLevelItems(level).forEach((item) => item.removeAttribute("active"));
|
|
447
|
+
});
|
|
448
|
+
this._activePath.forEach((itemIndex, level) => {
|
|
449
|
+
const item = this._getLevelItems(level)[itemIndex];
|
|
450
|
+
if (item?.matches("web-ui-dropdown-item")) item.setAttribute("active", "");
|
|
285
451
|
});
|
|
286
452
|
}
|
|
287
|
-
_getLevelItems(
|
|
288
|
-
|
|
289
|
-
return
|
|
453
|
+
_getLevelItems(level) {
|
|
454
|
+
const content = this._overlays.get(level)?.content;
|
|
455
|
+
return content ? getMenuChildren(content) : [];
|
|
290
456
|
}
|
|
291
457
|
_populateLevel0() {
|
|
292
|
-
|
|
293
|
-
|
|
458
|
+
const content = this._overlays.get(0)?.content;
|
|
459
|
+
if (!content) return;
|
|
460
|
+
reconcileManagedMenuItems(this, content, this._level0ItemAnchors, MENU_ITEM_MARKER);
|
|
461
|
+
orderManagedMenuItems(this, content, this._level0ItemAnchors, MENU_ITEM_MARKER);
|
|
294
462
|
}
|
|
295
463
|
_scheduleMenuSync() {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
464
|
+
if (this._menuSyncScheduled) return;
|
|
465
|
+
this._menuSyncScheduled = true;
|
|
466
|
+
requestAnimationFrame(() => {
|
|
467
|
+
this._menuSyncScheduled = false;
|
|
468
|
+
if (!this.open) return;
|
|
469
|
+
this._syncOpenMenuContent();
|
|
470
|
+
});
|
|
299
471
|
}
|
|
300
472
|
_syncOpenMenuContent() {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
473
|
+
const level0Content = this._overlays.get(0)?.content;
|
|
474
|
+
this._hideAllSubmenuChildren();
|
|
475
|
+
if (level0Content) {
|
|
476
|
+
reconcileManagedMenuItems(this, level0Content, this._level0ItemAnchors, MENU_ITEM_MARKER);
|
|
477
|
+
hideNestedMenuChildren(level0Content, `${SLOT_PREFIX}-hidden`);
|
|
478
|
+
const frameworkAnchors = captureFrameworkAnchors(level0Content, MENU_ITEM_MARKER);
|
|
479
|
+
orderManagedMenuItems(this, level0Content, this._level0ItemAnchors, MENU_ITEM_MARKER);
|
|
480
|
+
restoreFrameworkAnchors(level0Content, frameworkAnchors);
|
|
306
481
|
}
|
|
307
|
-
for (
|
|
308
|
-
if (
|
|
309
|
-
|
|
310
|
-
|
|
482
|
+
for (const [level, overlay] of this._overlays) {
|
|
483
|
+
if (level === 0) continue;
|
|
484
|
+
const parentItem = this._getLevelItems(level - 1)[this._activePath[level - 1]];
|
|
485
|
+
if (parentItem) moveMenuChildren(parentItem, overlay.content);
|
|
486
|
+
hideNestedMenuChildren(overlay.content, `${SLOT_PREFIX}-hidden`);
|
|
311
487
|
}
|
|
312
488
|
this._hoverBinder.bind();
|
|
313
489
|
}
|
|
314
490
|
_returnLevel0Items() {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
_populateOverlay(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
_depopulateOverlay(
|
|
323
|
-
|
|
324
|
-
if (!
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
491
|
+
const content = this._overlays.get(0)?.content;
|
|
492
|
+
if (content) returnManagedMenuItemsToSlot(this, content, this._level0ItemAnchors);
|
|
493
|
+
}
|
|
494
|
+
_populateOverlay(level, submenuItem) {
|
|
495
|
+
const content = this._overlays.get(level)?.content;
|
|
496
|
+
if (content) moveMenuChildren(submenuItem, content);
|
|
497
|
+
}
|
|
498
|
+
_depopulateOverlay(level, parentItem) {
|
|
499
|
+
const content = this._overlays.get(level)?.content;
|
|
500
|
+
if (!content) return;
|
|
501
|
+
const targetLevel = level - 1;
|
|
502
|
+
const submenuItem = parentItem ?? this._getLevelItems(targetLevel)[this._activePath[targetLevel]];
|
|
503
|
+
if (submenuItem) moveMenuChildren(content, submenuItem);
|
|
504
|
+
}
|
|
505
|
+
_claimRoot(panel) {
|
|
506
|
+
this._handle?.release();
|
|
507
|
+
this._handle = this._overlay.claim(panel);
|
|
508
|
+
for (const [level, sub] of this._overlays) {
|
|
509
|
+
if (level === 0) continue;
|
|
510
|
+
sub.handle = this._handle.adopt(sub.overlay);
|
|
511
|
+
}
|
|
512
|
+
for (const container of this._closingSubmenus.closing()) container.handle = this._handle.adopt(container.overlay);
|
|
332
513
|
return this._handle;
|
|
333
514
|
}
|
|
515
|
+
/** handle 缺失时补登记;panel 还没建好时以宿主代填,与 `_openMenu` 的占位会话同一口径。 */
|
|
334
516
|
_ensureRootHandle() {
|
|
335
517
|
return this._handle ?? this._claimRoot(this._overlays.get(0)?.overlay ?? this);
|
|
336
518
|
}
|
|
337
|
-
_ensureOverlay(
|
|
338
|
-
|
|
339
|
-
if (
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
if (
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
519
|
+
_ensureOverlay(level, isInstant = false, submenuItem) {
|
|
520
|
+
const closingOverlay = submenuItem ? this._closingSubmenus.take(submenuItem) : void 0;
|
|
521
|
+
if (closingOverlay) {
|
|
522
|
+
closingOverlay.handle = this._ensureRootHandle().adopt(closingOverlay.overlay);
|
|
523
|
+
this._overlays.set(level, closingOverlay);
|
|
524
|
+
closingOverlay.api.open();
|
|
525
|
+
showOverlayPresence(closingOverlay.overlay, { isInstant });
|
|
526
|
+
return true;
|
|
527
|
+
}
|
|
528
|
+
const existing = this._overlays.get(level);
|
|
529
|
+
if (existing) {
|
|
530
|
+
this._ensureRootHandle();
|
|
531
|
+
existing.api.open();
|
|
532
|
+
showOverlayPresence(existing.overlay, { isInstant });
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
this._buildOverlay(level, isInstant);
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
_buildOverlay(level, isInstant = false) {
|
|
539
|
+
const { panel: overlay, content } = createMenuPortalOverlay("dropdown-overlay", this);
|
|
540
|
+
overlay.setAttribute("role", "menu");
|
|
541
|
+
if (level === 0) overlay.id = `wui-dropdown-menu-${++dropdownIdCounter}`;
|
|
542
|
+
overlay.dataset.level = String(level);
|
|
543
|
+
overlay.addEventListener("click", this._onMenuClick);
|
|
544
|
+
overlay.addEventListener("keydown", this._onKeydown);
|
|
545
|
+
const anchor = level === 0 ? this._queryTriggerAnchor() : this._getSubmenuTriggerAnchor(level - 1);
|
|
546
|
+
if (anchor) {
|
|
547
|
+
const ctrl = defineOverlay().make({
|
|
548
|
+
anchor,
|
|
549
|
+
overlay,
|
|
550
|
+
placement: level === 0 ? this.placement : "right-start",
|
|
551
|
+
offset: level === 0 ? this.offset : 0,
|
|
552
|
+
minAnchorWidth: true,
|
|
553
|
+
matchWidth: level === 0 ? this.matchWidth : false,
|
|
355
554
|
strategy: "fixed"
|
|
356
555
|
});
|
|
357
|
-
if (
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
this.
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
556
|
+
if (level === 0) {
|
|
557
|
+
this._claimRoot(overlay);
|
|
558
|
+
this._overlays.set(level, {
|
|
559
|
+
api: ctrl,
|
|
560
|
+
overlay,
|
|
561
|
+
content
|
|
562
|
+
});
|
|
563
|
+
this._populateLevel0();
|
|
564
|
+
} else {
|
|
565
|
+
const handle = this._ensureRootHandle().adopt(overlay);
|
|
566
|
+
this._overlays.set(level, {
|
|
567
|
+
api: ctrl,
|
|
568
|
+
overlay,
|
|
569
|
+
content,
|
|
570
|
+
handle
|
|
369
571
|
});
|
|
370
572
|
}
|
|
371
|
-
this._menuContentObserver.observe(
|
|
372
|
-
childList:
|
|
373
|
-
subtree:
|
|
374
|
-
})
|
|
573
|
+
this._menuContentObserver.observe(content, {
|
|
574
|
+
childList: true,
|
|
575
|
+
subtree: true
|
|
576
|
+
});
|
|
577
|
+
ctrl.open();
|
|
578
|
+
showOverlayPresence(overlay, { isInstant });
|
|
375
579
|
}
|
|
376
580
|
}
|
|
377
|
-
_disposeOverlay(
|
|
378
|
-
|
|
379
|
-
|
|
581
|
+
_disposeOverlay(level) {
|
|
582
|
+
const overlay = this._overlays.get(level);
|
|
583
|
+
if (level === 0) {
|
|
584
|
+
this._handle?.release();
|
|
585
|
+
this._handle = null;
|
|
586
|
+
}
|
|
587
|
+
overlay?.handle?.release();
|
|
588
|
+
overlay?.overlay.removeEventListener("click", this._onMenuClick);
|
|
589
|
+
overlay?.overlay.removeEventListener("keydown", this._onKeydown);
|
|
590
|
+
overlay?.overlay.remove();
|
|
591
|
+
overlay?.api.dispose();
|
|
592
|
+
this._overlays.delete(level);
|
|
593
|
+
this._rebindMenuContentObservers();
|
|
380
594
|
}
|
|
381
595
|
_rebindMenuContentObservers() {
|
|
382
|
-
this._menuContentObserver.disconnect()
|
|
383
|
-
|
|
384
|
-
|
|
596
|
+
this._menuContentObserver.disconnect();
|
|
597
|
+
this._menuContentObserver.observe(this, {
|
|
598
|
+
childList: true,
|
|
599
|
+
subtree: true
|
|
385
600
|
});
|
|
386
|
-
for (
|
|
387
|
-
childList:
|
|
388
|
-
subtree:
|
|
601
|
+
for (const overlay of this._overlays.values()) this._menuContentObserver.observe(overlay.content, {
|
|
602
|
+
childList: true,
|
|
603
|
+
subtree: true
|
|
389
604
|
});
|
|
390
605
|
}
|
|
391
606
|
_disposeAll() {
|
|
392
|
-
this._handle?.release()
|
|
393
|
-
|
|
607
|
+
this._handle?.release();
|
|
608
|
+
this._handle = null;
|
|
609
|
+
for (const level of this._overlays.keys()) this._disposeOverlay(level);
|
|
394
610
|
}
|
|
395
|
-
_syncScrollLock(
|
|
396
|
-
this._scrollLock.sync(
|
|
611
|
+
_syncScrollLock(isOpen = this.open) {
|
|
612
|
+
this._scrollLock.sync(isOpen && !this.noScrollLock);
|
|
397
613
|
}
|
|
398
614
|
_queryTriggerAnchor() {
|
|
399
|
-
|
|
400
|
-
return
|
|
615
|
+
const el = (this.shadowRoot?.querySelector("slot[name=\"trigger\"]"))?.assignedElements()[0];
|
|
616
|
+
return el instanceof HTMLElement ? el : null;
|
|
401
617
|
}
|
|
402
618
|
_focusTriggerForTab() {
|
|
403
|
-
|
|
404
|
-
if (!
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
619
|
+
const trigger = this._queryTriggerAnchor();
|
|
620
|
+
if (!trigger) return;
|
|
621
|
+
trigger.focus();
|
|
622
|
+
const active = this._getDeepActiveElement();
|
|
623
|
+
if (active && isComposedDescendant(active, trigger)) return;
|
|
624
|
+
(trigger.shadowRoot?.querySelector("button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), a[href], [tabindex]:not([tabindex=\"-1\"])"))?.focus();
|
|
408
625
|
}
|
|
409
626
|
_syncTriggerAria() {
|
|
410
|
-
|
|
411
|
-
if (!
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
627
|
+
const trigger = this._queryTriggerAnchor();
|
|
628
|
+
if (!trigger) return;
|
|
629
|
+
trigger.setAttribute("aria-haspopup", "menu");
|
|
630
|
+
trigger.setAttribute("aria-expanded", String(this.open));
|
|
631
|
+
const rootOverlay = this._overlays.get(0)?.overlay;
|
|
632
|
+
if (rootOverlay?.id) trigger.setAttribute("aria-controls", rootOverlay.id);
|
|
633
|
+
else trigger.removeAttribute("aria-controls");
|
|
634
|
+
}
|
|
635
|
+
_getSubmenuTriggerAnchor(level) {
|
|
636
|
+
const idx = this._activePath[level];
|
|
637
|
+
if (idx === void 0) return null;
|
|
638
|
+
const item = this._getLevelItems(level)[idx];
|
|
639
|
+
if (!item) return null;
|
|
640
|
+
return item.shadowRoot?.querySelector(".item-inner") ?? item;
|
|
421
641
|
}
|
|
422
642
|
_resumePendingFocusOutCheck() {
|
|
423
|
-
|
|
424
|
-
this._pendingFocusOutCheck = void 0
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
643
|
+
const check = this._pendingFocusOutCheck;
|
|
644
|
+
this._pendingFocusOutCheck = void 0;
|
|
645
|
+
check?.();
|
|
646
|
+
}
|
|
647
|
+
_setMenuTabStop(focusedItem) {
|
|
648
|
+
for (const { content } of this._overlays.values()) content.querySelectorAll("web-ui-dropdown-item").forEach((item) => {
|
|
649
|
+
const control = item.shadowRoot?.querySelector("[role=\"menuitem\"]");
|
|
650
|
+
if (control) control.tabIndex = item === focusedItem && !item.hasAttribute("disabled") ? 0 : -1;
|
|
430
651
|
});
|
|
431
652
|
}
|
|
432
|
-
_getFocusedLevel(
|
|
433
|
-
if (
|
|
653
|
+
_getFocusedLevel(item) {
|
|
654
|
+
if (!item) return void 0;
|
|
655
|
+
return [...this._overlays.entries()].find(([, value]) => value.overlay.contains(item))?.[0];
|
|
434
656
|
}
|
|
435
657
|
_bindHoversAfterUpdate() {
|
|
436
658
|
requestAnimationFrame(() => this._hoverBinder.bind());
|
|
437
659
|
}
|
|
438
660
|
render() {
|
|
439
|
-
return
|
|
661
|
+
return html`
|
|
440
662
|
<div class="dropdown-trigger" @click=${this._onTriggerClick}>
|
|
441
663
|
<slot name="trigger"></slot>
|
|
442
664
|
</div>
|
|
443
665
|
`;
|
|
444
666
|
}
|
|
445
667
|
};
|
|
446
|
-
|
|
668
|
+
__decorate([property({
|
|
447
669
|
type: Boolean,
|
|
448
|
-
reflect:
|
|
449
|
-
})],
|
|
670
|
+
reflect: true
|
|
671
|
+
})], WebUiDropdown.prototype, "open", void 0);
|
|
672
|
+
__decorate([property({
|
|
450
673
|
type: Boolean,
|
|
451
|
-
reflect:
|
|
452
|
-
})],
|
|
674
|
+
reflect: true
|
|
675
|
+
})], WebUiDropdown.prototype, "disabled", void 0);
|
|
676
|
+
__decorate([property({
|
|
453
677
|
type: Boolean,
|
|
454
|
-
reflect:
|
|
678
|
+
reflect: true,
|
|
455
679
|
attribute: "match-width"
|
|
456
|
-
})],
|
|
680
|
+
})], WebUiDropdown.prototype, "matchWidth", void 0);
|
|
681
|
+
__decorate([property({
|
|
457
682
|
type: Boolean,
|
|
458
|
-
reflect:
|
|
683
|
+
reflect: true,
|
|
459
684
|
attribute: "no-scroll-lock"
|
|
460
|
-
})],
|
|
685
|
+
})], WebUiDropdown.prototype, "noScrollLock", void 0);
|
|
686
|
+
__decorate([property({
|
|
461
687
|
type: String,
|
|
462
|
-
reflect:
|
|
463
|
-
})],
|
|
464
|
-
|
|
465
|
-
|
|
688
|
+
reflect: true
|
|
689
|
+
})], WebUiDropdown.prototype, "placement", null);
|
|
690
|
+
__decorate([property({ type: Number })], WebUiDropdown.prototype, "offset", null);
|
|
691
|
+
__decorate([state()], WebUiDropdown.prototype, "_activePath", void 0);
|
|
692
|
+
WebUiDropdown = __decorate([customElement("web-ui-dropdown")], WebUiDropdown);
|
|
693
|
+
export { WebUiDropdown };
|
|
466
694
|
|
|
467
695
|
//# sourceMappingURL=index.js.map
|