@greypan/web-ui 1.4.2 → 2.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 +674 -232
- package/README.md +683 -237
- package/dist/_virtual/{_@oxc-project_runtime@0.138.0 → _@oxc-project_runtime@0.140.0}/helpers/esm/decorate.js +1 -1
- package/dist/assets/glass.js +6 -0
- package/dist/assets/glass.js.map +1 -0
- package/dist/assets/menu-portal.js +6 -0
- package/dist/assets/menu-portal.js.map +1 -0
- package/dist/assets/overlay-motion.js +6 -0
- package/dist/assets/overlay-motion.js.map +1 -0
- package/dist/assets/toast-containers.js +6 -0
- package/dist/assets/toast-containers.js.map +1 -0
- package/dist/components/avatar/index.d.ts +30 -0
- package/dist/components/avatar/index.js +112 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/avatar/style.js +6 -0
- package/dist/components/avatar/style.js.map +1 -0
- package/dist/components/back-top/index.d.ts +8 -7
- package/dist/components/back-top/index.js +37 -32
- package/dist/components/back-top/index.js.map +1 -1
- package/dist/components/back-top/style.js +1 -1
- package/dist/components/back-top/style.js.map +1 -1
- package/dist/components/badge/index.d.ts +27 -0
- package/dist/components/badge/index.js +121 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/badge/style.js +6 -0
- package/dist/components/badge/style.js.map +1 -0
- package/dist/components/button/index.d.ts +16 -3
- package/dist/components/button/index.js +56 -17
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/button/style.js +1 -1
- package/dist/components/button/style.js.map +1 -1
- package/dist/components/button-group/index.d.ts +16 -0
- package/dist/components/button-group/index.js +49 -0
- package/dist/components/button-group/index.js.map +1 -0
- package/dist/components/button-group/style.js +6 -0
- package/dist/components/button-group/style.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +39 -0
- package/dist/components/checkbox/index.js +111 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/checkbox/style.js +6 -0
- package/dist/components/checkbox/style.js.map +1 -0
- package/dist/components/checkbox-group/index.d.ts +35 -0
- package/dist/components/checkbox-group/index.js +99 -0
- package/dist/components/checkbox-group/index.js.map +1 -0
- package/dist/components/checkbox-group/style.js +6 -0
- package/dist/components/checkbox-group/style.js.map +1 -0
- package/dist/components/context-menu/index.d.ts +84 -0
- package/dist/components/context-menu/index.js +294 -0
- package/dist/components/context-menu/index.js.map +1 -0
- package/dist/components/context-menu/style.js +6 -0
- package/dist/components/context-menu/style.js.map +1 -0
- package/dist/components/dialog/index.d.ts +41 -0
- package/dist/components/dialog/index.js +118 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/dialog/style.js +6 -0
- package/dist/components/dialog/style.js.map +1 -0
- package/dist/components/drawer/index.d.ts +57 -0
- package/dist/components/drawer/index.js +172 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/drawer/style.js +6 -0
- package/dist/components/drawer/style.js.map +1 -0
- package/dist/components/dropdown-divider/index.d.ts +11 -0
- package/dist/components/dropdown-divider/index.js +18 -0
- package/dist/components/dropdown-divider/index.js.map +1 -0
- package/dist/components/dropdown-divider/style.js +6 -0
- package/dist/components/dropdown-divider/style.js.map +1 -0
- package/dist/components/dropdown-header/index.d.ts +11 -0
- package/dist/components/dropdown-header/index.js +18 -0
- package/dist/components/dropdown-header/index.js.map +1 -0
- package/dist/components/dropdown-header/style.js +6 -0
- package/dist/components/dropdown-header/style.js.map +1 -0
- package/dist/components/dropdown-item/index.d.ts +17 -0
- package/dist/components/dropdown-item/index.js +44 -0
- package/dist/components/dropdown-item/index.js.map +1 -0
- package/dist/components/dropdown-item/style.js +6 -0
- package/dist/components/dropdown-item/style.js.map +1 -0
- package/dist/components/dropdown-menu/index.d.ts +87 -0
- package/dist/components/dropdown-menu/index.js +324 -0
- package/dist/components/dropdown-menu/index.js.map +1 -0
- package/dist/components/dropdown-menu/style.js +6 -0
- package/dist/components/dropdown-menu/style.js.map +1 -0
- package/dist/components/empty/index.d.ts +23 -0
- package/dist/components/empty/index.js +83 -0
- package/dist/components/empty/index.js.map +1 -0
- package/dist/components/empty/style.js +6 -0
- package/dist/components/empty/style.js.map +1 -0
- package/dist/components/icon/index.d.ts +16 -0
- package/dist/components/icon/index.js +45 -0
- package/dist/components/icon/index.js.map +1 -0
- package/dist/components/icon/style.js +6 -0
- package/dist/components/icon/style.js.map +1 -0
- package/dist/components/index.d.ts +34 -0
- package/dist/components/index.js +37 -0
- package/dist/components/input/index.d.ts +47 -0
- package/dist/components/input/index.js +140 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/style.js +6 -0
- package/dist/components/input/style.js.map +1 -0
- package/dist/components/input-number/index.d.ts +52 -0
- package/dist/components/input-number/index.js +178 -0
- package/dist/components/input-number/index.js.map +1 -0
- package/dist/components/input-number/style.js +6 -0
- package/dist/components/input-number/style.js.map +1 -0
- package/dist/components/layout/index.d.ts +7 -1
- package/dist/components/layout/index.js +24 -21
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/style.js +1 -1
- package/dist/components/layout/style.js.map +1 -1
- package/dist/components/option/index.d.ts +33 -0
- package/dist/components/option/index.js +78 -0
- package/dist/components/option/index.js.map +1 -0
- package/dist/components/option/style.js +6 -0
- package/dist/components/option/style.js.map +1 -0
- package/dist/components/popover/index.d.ts +69 -0
- package/dist/components/popover/index.js +231 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/popover/style.js +6 -0
- package/dist/components/popover/style.js.map +1 -0
- package/dist/components/radio/index.d.ts +39 -0
- package/dist/components/radio/index.js +105 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/style.js +6 -0
- package/dist/components/radio/style.js.map +1 -0
- package/dist/components/radio-group/index.d.ts +35 -0
- package/dist/components/radio-group/index.js +87 -0
- package/dist/components/radio-group/index.js.map +1 -0
- package/dist/components/radio-group/style.js +6 -0
- package/dist/components/radio-group/style.js.map +1 -0
- package/dist/components/segmented/index.d.ts +33 -0
- package/dist/components/segmented/index.js +95 -0
- package/dist/components/segmented/index.js.map +1 -0
- package/dist/components/segmented/style.js +6 -0
- package/dist/components/segmented/style.js.map +1 -0
- package/dist/components/segmented-trigger/index.d.ts +18 -0
- package/dist/components/segmented-trigger/index.js +52 -0
- package/dist/components/segmented-trigger/index.js.map +1 -0
- package/dist/components/segmented-trigger/style.js +6 -0
- package/dist/components/segmented-trigger/style.js.map +1 -0
- package/dist/components/select/index.d.ts +80 -0
- package/dist/components/select/index.js +291 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/style.js +6 -0
- package/dist/components/select/style.js.map +1 -0
- package/dist/components/slider/index.d.ts +61 -0
- package/dist/components/slider/index.js +219 -0
- package/dist/components/slider/index.js.map +1 -0
- package/dist/components/slider/style.js +6 -0
- package/dist/components/slider/style.js.map +1 -0
- package/dist/components/spinner/index.d.ts +32 -0
- package/dist/components/spinner/index.js +52 -0
- package/dist/components/spinner/index.js.map +1 -0
- package/dist/components/spinner/style.js +6 -0
- package/dist/components/spinner/style.js.map +1 -0
- package/dist/components/svg-draw-lines/index.d.ts +30 -9
- package/dist/components/svg-draw-lines/index.js +87 -62
- package/dist/components/svg-draw-lines/index.js.map +1 -1
- package/dist/components/svg-draw-lines/style.js +1 -1
- package/dist/components/svg-draw-lines/style.js.map +1 -1
- package/dist/components/switch/index.d.ts +37 -0
- package/dist/components/switch/index.js +117 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/style.js +6 -0
- package/dist/components/switch/style.js.map +1 -0
- package/dist/components/textarea/index.d.ts +65 -0
- package/dist/components/textarea/index.js +204 -0
- package/dist/components/textarea/index.js.map +1 -0
- package/dist/components/textarea/style.js +6 -0
- package/dist/components/textarea/style.js.map +1 -0
- package/dist/components/theme/index.d.ts +29 -0
- package/dist/components/theme/index.js +78 -0
- package/dist/components/theme/index.js.map +1 -0
- package/dist/components/theme/style.js +6 -0
- package/dist/components/theme/style.js.map +1 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.js +3 -0
- package/dist/components/toast/manager.d.ts +15 -0
- package/dist/components/toast/manager.js +98 -0
- package/dist/components/toast/manager.js.map +1 -0
- package/dist/components/toast/style.js +6 -0
- package/dist/components/toast/style.js.map +1 -0
- package/dist/components/toast/toast.d.ts +42 -0
- package/dist/components/toast/toast.js +122 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/types.d.ts +23 -0
- package/dist/components/tooltip/index.d.ts +59 -0
- package/dist/components/tooltip/index.js +190 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/tooltip/style.js +6 -0
- package/dist/components/tooltip/style.js.map +1 -0
- package/dist/icons/generated/heroicons-check-16-solid.d.ts +6 -0
- package/dist/icons/generated/heroicons-check-16-solid.js +10 -0
- package/dist/icons/generated/heroicons-check-16-solid.js.map +1 -0
- package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts +6 -0
- package/dist/icons/generated/heroicons-x-mark-16-solid.js +10 -0
- package/dist/icons/generated/heroicons-x-mark-16-solid.js.map +1 -0
- package/dist/icons/generated/jam-close-circle-f.d.ts +8 -0
- package/dist/icons/generated/jam-close-circle-f.js +12 -0
- package/dist/icons/generated/jam-close-circle-f.js.map +1 -0
- package/dist/icons/generated/jam-volume.d.ts +8 -0
- package/dist/icons/generated/jam-watch-f.d.ts +8 -0
- package/dist/icons/generated/lucide-arrow-down-to-line.d.ts +6 -0
- package/dist/icons/generated/lucide-arrow-down-to-line.js +10 -0
- package/dist/icons/generated/lucide-arrow-down-to-line.js.map +1 -0
- package/dist/icons/generated/lucide-arrow-up-to-line.d.ts +6 -0
- package/dist/icons/generated/lucide-arrow-up-to-line.js +10 -0
- package/dist/icons/generated/lucide-arrow-up-to-line.js.map +1 -0
- package/dist/icons/generated/lucide-bell.d.ts +6 -0
- package/dist/icons/generated/lucide-bell.js +10 -0
- package/dist/icons/generated/lucide-bell.js.map +1 -0
- package/dist/icons/generated/lucide-check.d.ts +6 -0
- package/dist/icons/generated/lucide-check.js +10 -0
- package/dist/icons/generated/lucide-check.js.map +1 -0
- package/dist/icons/generated/lucide-chevron-down.d.ts +6 -0
- package/dist/icons/generated/lucide-chevron-down.js +10 -0
- package/dist/icons/generated/lucide-chevron-down.js.map +1 -0
- package/dist/icons/generated/lucide-chevron-left.d.ts +6 -0
- package/dist/icons/generated/lucide-chevron-left.js +10 -0
- package/dist/icons/generated/lucide-chevron-left.js.map +1 -0
- package/dist/icons/generated/lucide-chevron-right.d.ts +6 -0
- package/dist/icons/generated/lucide-chevron-right.js +10 -0
- package/dist/icons/generated/lucide-chevron-right.js.map +1 -0
- package/dist/icons/generated/lucide-chevron-up.d.ts +6 -0
- package/dist/icons/generated/lucide-chevron-up.js +10 -0
- package/dist/icons/generated/lucide-chevron-up.js.map +1 -0
- package/dist/icons/generated/lucide-circle-alert.d.ts +6 -0
- package/dist/icons/generated/lucide-circle-alert.js +10 -0
- package/dist/icons/generated/lucide-circle-alert.js.map +1 -0
- package/dist/icons/generated/lucide-clipboard-paste.d.ts +6 -0
- package/dist/icons/generated/lucide-clipboard-paste.js +10 -0
- package/dist/icons/generated/lucide-clipboard-paste.js.map +1 -0
- package/dist/icons/generated/lucide-copy.d.ts +6 -0
- package/dist/icons/generated/lucide-copy.js +10 -0
- package/dist/icons/generated/lucide-copy.js.map +1 -0
- package/dist/icons/generated/lucide-download.d.ts +6 -0
- package/dist/icons/generated/lucide-download.js +10 -0
- package/dist/icons/generated/lucide-download.js.map +1 -0
- package/dist/icons/generated/lucide-file.d.ts +6 -0
- package/dist/icons/generated/lucide-file.js +10 -0
- package/dist/icons/generated/lucide-file.js.map +1 -0
- package/dist/icons/generated/lucide-folder.d.ts +6 -0
- package/dist/icons/generated/lucide-folder.js +10 -0
- package/dist/icons/generated/lucide-folder.js.map +1 -0
- package/dist/icons/generated/lucide-globe.d.ts +6 -0
- package/dist/icons/generated/lucide-globe.js +10 -0
- package/dist/icons/generated/lucide-globe.js.map +1 -0
- package/dist/icons/generated/lucide-heart.d.ts +6 -0
- package/dist/icons/generated/lucide-heart.js +10 -0
- package/dist/icons/generated/lucide-heart.js.map +1 -0
- package/dist/icons/generated/lucide-image.d.ts +6 -0
- package/dist/icons/generated/lucide-image.js +10 -0
- package/dist/icons/generated/lucide-image.js.map +1 -0
- package/dist/icons/generated/lucide-inbox.d.ts +6 -0
- package/dist/icons/generated/lucide-inbox.js +10 -0
- package/dist/icons/generated/lucide-inbox.js.map +1 -0
- package/dist/icons/generated/lucide-info.d.ts +6 -0
- package/dist/icons/generated/lucide-info.js +10 -0
- package/dist/icons/generated/lucide-info.js.map +1 -0
- package/dist/icons/generated/lucide-loader-circle.d.ts +6 -0
- package/dist/icons/generated/lucide-loader-circle.js +10 -0
- package/dist/icons/generated/lucide-loader-circle.js.map +1 -0
- package/dist/icons/generated/lucide-mail.d.ts +6 -0
- package/dist/icons/generated/lucide-mail.js +10 -0
- package/dist/icons/generated/lucide-mail.js.map +1 -0
- package/dist/icons/generated/lucide-minus.d.ts +6 -0
- package/dist/icons/generated/lucide-minus.js +10 -0
- package/dist/icons/generated/lucide-minus.js.map +1 -0
- package/dist/icons/generated/lucide-plus.d.ts +6 -0
- package/dist/icons/generated/lucide-plus.js +10 -0
- package/dist/icons/generated/lucide-plus.js.map +1 -0
- package/dist/icons/generated/lucide-printer.d.ts +6 -0
- package/dist/icons/generated/lucide-printer.js +10 -0
- package/dist/icons/generated/lucide-printer.js.map +1 -0
- package/dist/icons/generated/lucide-redo-2.d.ts +6 -0
- package/dist/icons/generated/lucide-redo-2.js +10 -0
- package/dist/icons/generated/lucide-redo-2.js.map +1 -0
- package/dist/icons/generated/lucide-scissors.d.ts +6 -0
- package/dist/icons/generated/lucide-scissors.js +10 -0
- package/dist/icons/generated/lucide-scissors.js.map +1 -0
- package/dist/icons/generated/lucide-search.d.ts +6 -0
- package/dist/icons/generated/lucide-search.js +10 -0
- package/dist/icons/generated/lucide-search.js.map +1 -0
- package/dist/icons/generated/lucide-settings.d.ts +6 -0
- package/dist/icons/generated/lucide-settings.js +10 -0
- package/dist/icons/generated/lucide-settings.js.map +1 -0
- package/dist/icons/generated/lucide-star.d.ts +6 -0
- package/dist/icons/generated/lucide-star.js +10 -0
- package/dist/icons/generated/lucide-star.js.map +1 -0
- package/dist/icons/generated/lucide-trash-2.d.ts +6 -0
- package/dist/icons/generated/lucide-trash-2.js +10 -0
- package/dist/icons/generated/lucide-trash-2.js.map +1 -0
- package/dist/icons/generated/lucide-triangle-alert.d.ts +6 -0
- package/dist/icons/generated/lucide-triangle-alert.js +10 -0
- package/dist/icons/generated/lucide-triangle-alert.js.map +1 -0
- package/dist/icons/generated/lucide-undo-2.d.ts +6 -0
- package/dist/icons/generated/lucide-undo-2.js +10 -0
- package/dist/icons/generated/lucide-undo-2.js.map +1 -0
- package/dist/icons/generated/lucide-upload.d.ts +6 -0
- package/dist/icons/generated/lucide-upload.js +10 -0
- package/dist/icons/generated/lucide-upload.js.map +1 -0
- package/dist/icons/generated/lucide-user.d.ts +6 -0
- package/dist/icons/generated/lucide-user.js +10 -0
- package/dist/icons/generated/lucide-user.js.map +1 -0
- package/dist/icons/generated/lucide-x.d.ts +6 -0
- package/dist/icons/generated/lucide-x.js +10 -0
- package/dist/icons/generated/lucide-x.js.map +1 -0
- package/dist/icons/generated/ooui-check.d.ts +6 -0
- package/dist/icons/generated/radix-icons-check.d.ts +6 -0
- package/dist/icons/generated/si-check-alt-fill.d.ts +6 -0
- package/dist/icons/index.d.ts +38 -0
- package/dist/icons/index.js +39 -0
- package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js +248 -0
- package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -0
- package/dist/node_modules/.pnpm/@floating-ui_dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +324 -0
- package/dist/node_modules/.pnpm/@floating-ui_dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
- package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +99 -0
- package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
- package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +102 -0
- package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
- package/dist/shared/menu-portal/menu-portal.js +11 -0
- package/dist/shared/menu-portal/menu-portal.js.map +1 -0
- package/dist/shared/normalize/index.js +11 -0
- package/dist/shared/normalize/index.js.map +1 -0
- package/dist/shared/overlay/overlay.js +68 -0
- package/dist/shared/overlay/overlay.js.map +1 -0
- package/dist/shared/overlay/portal.js +29 -0
- package/dist/shared/overlay/portal.js.map +1 -0
- package/dist/shared/overlay/presence.js +34 -0
- package/dist/shared/overlay/presence.js.map +1 -0
- package/dist/shared/property-converters/boolean-with-false-string.js +9 -0
- package/dist/shared/property-converters/boolean-with-false-string.js.map +1 -0
- package/dist/shared/scroll-lock/scroll-lock.js +12 -0
- package/dist/shared/scroll-lock/scroll-lock.js.map +1 -0
- package/dist/shared/theme/overlay-root.js +28 -0
- package/dist/shared/theme/overlay-root.js.map +1 -0
- package/dist/shared/theme/theme-scope.js +27 -0
- package/dist/shared/theme/theme-scope.js.map +1 -0
- package/dist/types/iconify.d.ts +1 -0
- package/dist/types/react.d.ts +35 -9
- package/dist/types/utils.d.ts +14 -0
- package/dist/types/vue.d.ts +47 -7
- package/package.json +27 -11
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -5
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import "../icon/index.js";
|
|
3
|
+
import t from "../../assets/glass.js";
|
|
4
|
+
import n from "../../icons/generated/lucide-chevron-down.js";
|
|
5
|
+
import { booleanWithFalseString as r } from "../../shared/property-converters/boolean-with-false-string.js";
|
|
6
|
+
import i from "../../assets/overlay-motion.js";
|
|
7
|
+
import { hideOverlayPresence as a, showOverlayPresence as o } from "../../shared/overlay/presence.js";
|
|
8
|
+
import { lockScroll as s, unlockScroll as c } from "../../shared/scroll-lock/scroll-lock.js";
|
|
9
|
+
import { withOverlay as l } from "../../shared/overlay/overlay.js";
|
|
10
|
+
import "../option/index.js";
|
|
11
|
+
import { createOverlayPortal as u } from "../../shared/overlay/portal.js";
|
|
12
|
+
import d from "./style.js";
|
|
13
|
+
import { LitElement as f, html as p, nothing as m, unsafeCSS as h } from "lit";
|
|
14
|
+
import { customElement as g, property as _, state as v } from "lit/decorators.js";
|
|
15
|
+
//#region src/components/select/index.ts
|
|
16
|
+
var y = class extends f {
|
|
17
|
+
constructor(...e) {
|
|
18
|
+
super(...e), this._formDisabled = !1, this.placeholder = "", this.disabled = !1, this.required = !1, this.portal = !1, this.lockScroll = !0, this.name = "", this._value = "", this._isOpen = !1, this._activeIndex = -1, this._selectedLabel = "", this._hasTriggerSlot = !1, this._options = [], this._hasScrollLock = !1, this._onClickOutside = (e) => {
|
|
19
|
+
this._isOpen && e.target instanceof Node && !this.contains(e.target) && !this._portal?.panel.contains(e.target) && this._close();
|
|
20
|
+
}, this._onFocusOut = () => {
|
|
21
|
+
requestAnimationFrame(() => {
|
|
22
|
+
this._isOpen && !this.matches(":focus-within") && !this._portal?.panel.matches(":focus-within") && this._close();
|
|
23
|
+
});
|
|
24
|
+
}, this._onTriggerSlotChange = (e) => {
|
|
25
|
+
let t = e.target.assignedElements().length > 0;
|
|
26
|
+
this._hasTriggerSlot !== t && (this._hasTriggerSlot = t, this._reconfigureOverlay());
|
|
27
|
+
}, this._onOptionRegister = (e) => {
|
|
28
|
+
if (!(e.target instanceof HTMLElement)) return;
|
|
29
|
+
let t = e.target;
|
|
30
|
+
t.addEventListener("click", this._handleOptionClick), t.addEventListener("pointerover", this._handleOptionPointerOver), t.addEventListener("pointerdown", this._handleOptionPointerDown), t.addEventListener("option-update", this._onOptionUpdate), this._options.push(t), this._ensureOptionIds(), this._syncSelected();
|
|
31
|
+
}, this._onOptionUnregister = (e) => {
|
|
32
|
+
if (!(e.target instanceof HTMLElement)) return;
|
|
33
|
+
let t = e.target;
|
|
34
|
+
t.removeEventListener("click", this._handleOptionClick), t.removeEventListener("pointerover", this._handleOptionPointerOver), t.removeEventListener("pointerdown", this._handleOptionPointerDown), t.removeEventListener("option-update", this._onOptionUpdate), this._options = this._options.filter((e) => e !== t);
|
|
35
|
+
}, this._onSlotChange = () => {
|
|
36
|
+
let e = this._portal ? [...this._portal.panel.querySelectorAll("web-ui-option")] : [...this.querySelectorAll("web-ui-option")];
|
|
37
|
+
this._options = e, this._ensureOptionIds(), this._syncSelected();
|
|
38
|
+
}, this._handleOptionClick = (e) => {
|
|
39
|
+
if (!(e.currentTarget instanceof HTMLElement)) return;
|
|
40
|
+
let t = e.currentTarget;
|
|
41
|
+
t.disabled || (this.value = t.value, this._close(), this._notifyValueChange());
|
|
42
|
+
}, this._onOptionUpdate = () => {
|
|
43
|
+
this._syncSelected(), this._syncActiveOption();
|
|
44
|
+
}, this._handleOptionPointerOver = (e) => {
|
|
45
|
+
e.pointerType !== "touch" && (!this._isOpen || this._activeIndex < 0 || !(e.currentTarget instanceof HTMLElement) || (this._activeIndex = -1, this._syncActiveOption()));
|
|
46
|
+
}, this._handleOptionPointerDown = (e) => {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
}, this._onKeydown = (e) => {
|
|
49
|
+
if (!this._isDisabled) switch (e.key) {
|
|
50
|
+
case "Escape":
|
|
51
|
+
this._isOpen && (this._close(), e.preventDefault());
|
|
52
|
+
break;
|
|
53
|
+
case "ArrowDown":
|
|
54
|
+
e.preventDefault(), this._isOpen ? this._navigateActive(1) : this._open(!0);
|
|
55
|
+
break;
|
|
56
|
+
case "ArrowUp":
|
|
57
|
+
e.preventDefault(), this._isOpen ? this._navigateActive(-1) : this._open(!0);
|
|
58
|
+
break;
|
|
59
|
+
case "Enter":
|
|
60
|
+
if (this._isOpen && this._activeIndex >= 0) {
|
|
61
|
+
let t = this._options[this._activeIndex];
|
|
62
|
+
t && !t.disabled && (this.value = t.value, this._notifyValueChange()), this._close(), e.preventDefault();
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
static {
|
|
69
|
+
this.styles = [
|
|
70
|
+
h(t),
|
|
71
|
+
h(i),
|
|
72
|
+
h(d)
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
static {
|
|
76
|
+
this.formAssociated = !0;
|
|
77
|
+
}
|
|
78
|
+
get value() {
|
|
79
|
+
return this._value;
|
|
80
|
+
}
|
|
81
|
+
set value(e) {
|
|
82
|
+
let t = this._value;
|
|
83
|
+
this._value = e, this._internals?.setFormValue?.(e), this.toggleAttribute("data-has-value", !!e), this.requestUpdate("value", t);
|
|
84
|
+
}
|
|
85
|
+
get _isDisabled() {
|
|
86
|
+
return this.disabled || this._formDisabled;
|
|
87
|
+
}
|
|
88
|
+
get isOpen() {
|
|
89
|
+
return this._isOpen;
|
|
90
|
+
}
|
|
91
|
+
get open() {
|
|
92
|
+
return this._isOpen;
|
|
93
|
+
}
|
|
94
|
+
connectedCallback() {
|
|
95
|
+
super.connectedCallback(), this._internals = this.attachInternals();
|
|
96
|
+
let e = this.getAttribute("value");
|
|
97
|
+
e !== null && (this._value = e, this.toggleAttribute("data-has-value", !!e)), this._internals?.setFormValue?.(this._value), this.addEventListener("option-register", this._onOptionRegister), this.addEventListener("option-unregister", this._onOptionUnregister), this.addEventListener("keydown", this._onKeydown), this.addEventListener("focusout", this._onFocusOut), document.addEventListener("click", this._onClickOutside);
|
|
98
|
+
}
|
|
99
|
+
disconnectedCallback() {
|
|
100
|
+
super.disconnectedCallback(), this.removeEventListener("option-register", this._onOptionRegister), this.removeEventListener("option-unregister", this._onOptionUnregister), this.removeEventListener("keydown", this._onKeydown), this.removeEventListener("focusout", this._onFocusOut), document.removeEventListener("click", this._onClickOutside), this._options.forEach((e) => {
|
|
101
|
+
e.removeEventListener("click", this._handleOptionClick), e.removeEventListener("pointerover", this._handleOptionPointerOver), e.removeEventListener("pointerdown", this._handleOptionPointerDown), e.removeEventListener("option-update", this._onOptionUpdate);
|
|
102
|
+
}), this._close(), this._disposeOverlay();
|
|
103
|
+
}
|
|
104
|
+
firstUpdated() {
|
|
105
|
+
this._initLocalOverlay(), requestAnimationFrame(() => {
|
|
106
|
+
this.isConnected && this._onSlotChange();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
willUpdate() {
|
|
110
|
+
this._options = this._portal ? [...this._portal.panel.querySelectorAll("web-ui-option")] : [...this.querySelectorAll("web-ui-option")], this._ensureOptionIds(), this._syncSelected();
|
|
111
|
+
}
|
|
112
|
+
updated(e) {
|
|
113
|
+
(e.has("portal") || e.has("overlayContainer")) && requestAnimationFrame(() => this._reconfigureOverlay()), e.has("lockScroll") && this._syncScrollLock(), this._syncOpenAttribute(), this._syncValidity();
|
|
114
|
+
}
|
|
115
|
+
formResetCallback() {
|
|
116
|
+
this.value = this.getAttribute("value") || "";
|
|
117
|
+
}
|
|
118
|
+
formDisabledCallback(e) {
|
|
119
|
+
this._formDisabled = e;
|
|
120
|
+
}
|
|
121
|
+
_syncValidity() {
|
|
122
|
+
!this._internals || typeof this._internals.setValidity != "function" || (this._isDisabled || !this.required || this.value ? this._internals.setValidity({}) : this._internals.setValidity({ valueMissing: !0 }, "请选择一项"));
|
|
123
|
+
}
|
|
124
|
+
_syncOpenAttribute() {
|
|
125
|
+
this.toggleAttribute("open", this._isOpen);
|
|
126
|
+
}
|
|
127
|
+
_syncSelected() {
|
|
128
|
+
if (this._options.forEach((e) => {
|
|
129
|
+
e.selected = e.value === this.value;
|
|
130
|
+
}), !this.value) {
|
|
131
|
+
this._selectedLabel = this.placeholder;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
let e = this._options.find((e) => e.value === this.value);
|
|
135
|
+
this._selectedLabel = e?.label || this.placeholder;
|
|
136
|
+
}
|
|
137
|
+
_ensureOptionIds() {
|
|
138
|
+
this._options.forEach((e, t) => {
|
|
139
|
+
e.id ||= `${this.localName}-option-${t}`;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
_navigateActive(e) {
|
|
143
|
+
let t = this._options.filter((e) => !e.disabled);
|
|
144
|
+
if (!t.length) return;
|
|
145
|
+
let n = this._options.find((e) => e.value === this.value && !e.disabled), r = (this._activeIndex >= 0 ? t.indexOf(this._options[this._activeIndex]) : n ? t.indexOf(n) : e > 0 ? -1 : 0) + e;
|
|
146
|
+
r < 0 && (r = t.length - 1), r >= t.length && (r = 0);
|
|
147
|
+
let i = t[r];
|
|
148
|
+
this._activeIndex = this._options.indexOf(i), this._syncActiveOption();
|
|
149
|
+
}
|
|
150
|
+
_open(e = !1) {
|
|
151
|
+
this._isDisabled || this._isOpen || (this._isOpen = !0, this._dispatchOpenChange(), this._syncSelected(), e ? this._setInitialActiveOption() : this._syncActiveOption(), this._syncScrollLock(), this.portal ? requestAnimationFrame(() => {
|
|
152
|
+
this._isOpen && this._openOverlay(e);
|
|
153
|
+
}) : this._openOverlay(e));
|
|
154
|
+
}
|
|
155
|
+
_close() {
|
|
156
|
+
this._isOpen && (this._isOpen = !1, this._dispatchOpenChange(), this._activeIndex = -1, this._options.forEach((e) => e.removeAttribute("active")), this._syncScrollLock(!1), this._closeOverlay());
|
|
157
|
+
}
|
|
158
|
+
_dispatchOpenChange() {
|
|
159
|
+
this.dispatchEvent(new CustomEvent("open-change", {
|
|
160
|
+
detail: { open: this._isOpen },
|
|
161
|
+
bubbles: !0,
|
|
162
|
+
composed: !0
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
_setInitialActiveOption() {
|
|
166
|
+
let e = this._options.findIndex((e) => e.value === this.value && !e.disabled), t = this._options.findIndex((e) => !e.disabled);
|
|
167
|
+
this._activeIndex = e >= 0 ? e : t, this._syncActiveOption();
|
|
168
|
+
}
|
|
169
|
+
_syncActiveOption() {
|
|
170
|
+
this._options.forEach((e, t) => e.toggleAttribute("active", t === this._activeIndex));
|
|
171
|
+
}
|
|
172
|
+
_notifyValueChange() {
|
|
173
|
+
this.dispatchEvent(new Event("input", {
|
|
174
|
+
bubbles: !0,
|
|
175
|
+
composed: !0
|
|
176
|
+
})), this.dispatchEvent(new Event("change", {
|
|
177
|
+
bubbles: !0,
|
|
178
|
+
composed: !0
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
_syncScrollLock(e = this._isOpen) {
|
|
182
|
+
let t = e && this.lockScroll;
|
|
183
|
+
t !== this._hasScrollLock && (t ? s() : c(), this._hasScrollLock = t);
|
|
184
|
+
}
|
|
185
|
+
_togglePopup() {
|
|
186
|
+
this._isDisabled || (this._isOpen ? this._close() : this._open());
|
|
187
|
+
}
|
|
188
|
+
_initLocalOverlay() {
|
|
189
|
+
let e = this.shadowRoot?.querySelector(".select-trigger"), t = this.shadowRoot?.querySelector(".select-overlay");
|
|
190
|
+
!e || !t || (this._overlay = l.make({
|
|
191
|
+
anchor: e,
|
|
192
|
+
overlay: t,
|
|
193
|
+
placement: "bottom-start",
|
|
194
|
+
offset: 4
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
_openOverlay(e = !1) {
|
|
198
|
+
if (this.portal) this._openPortal(e);
|
|
199
|
+
else {
|
|
200
|
+
let t = this.shadowRoot?.querySelector(".select-overlay");
|
|
201
|
+
t && (t.style.width = `${this._getDesiredWidth()}px`), this._overlay?.open(), t && o(t, { isInstant: e });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
_getDesiredWidth() {
|
|
205
|
+
let e = this.shadowRoot?.querySelector(".select-trigger")?.offsetWidth || 0, t = [...this.querySelectorAll("web-ui-option")], n = 0;
|
|
206
|
+
return t.forEach((e) => {
|
|
207
|
+
let t = e.shadowRoot?.querySelector(".option-label")?.scrollWidth || e.scrollWidth || 0;
|
|
208
|
+
t > n && (n = t);
|
|
209
|
+
}), Math.max(120, e, n);
|
|
210
|
+
}
|
|
211
|
+
_openPortal(e = !1) {
|
|
212
|
+
if (this._portal) {
|
|
213
|
+
this._overlay?.open(), o(this._portal.panel, { isInstant: e });
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
let n = this.shadowRoot?.querySelector(".select-trigger");
|
|
217
|
+
if (!n) return;
|
|
218
|
+
let r = this._getDesiredWidth(), a = u({
|
|
219
|
+
container: this.overlayContainer,
|
|
220
|
+
target: this,
|
|
221
|
+
style: `${t}\n${i}\n${d}`,
|
|
222
|
+
className: "wui-glass select-overlay portal wui-floating-panel"
|
|
223
|
+
});
|
|
224
|
+
a.panel.style.width = `${r}px`, a.panel.setAttribute("role", "listbox"), a.moveContent(Array.from(this.children)), this._portal = a, this._overlay = l.make({
|
|
225
|
+
anchor: n,
|
|
226
|
+
overlay: a.panel,
|
|
227
|
+
placement: "bottom-start",
|
|
228
|
+
offset: 4,
|
|
229
|
+
strategy: "fixed"
|
|
230
|
+
}), this._overlay.open(), o(a.panel, { isInstant: e });
|
|
231
|
+
}
|
|
232
|
+
async _closeOverlay() {
|
|
233
|
+
this._overlay?.close();
|
|
234
|
+
let e = this._portal?.panel ?? this.shadowRoot?.querySelector(".select-overlay");
|
|
235
|
+
e && !await a(e) || !this._portal || this._isOpen || (this._portal.restoreContent(), this._portal.remove(), this._portal = void 0, this._overlay = void 0);
|
|
236
|
+
}
|
|
237
|
+
_disposeOverlay() {
|
|
238
|
+
this._overlay?.dispose(), this._overlay = void 0, this._portal?.restoreContent(), this._portal?.remove(), this._portal = void 0;
|
|
239
|
+
}
|
|
240
|
+
_reconfigureOverlay() {
|
|
241
|
+
this._disposeOverlay(), this.portal || this._initLocalOverlay(), this._isOpen && this._openOverlay();
|
|
242
|
+
}
|
|
243
|
+
render() {
|
|
244
|
+
return p`
|
|
245
|
+
<div class="wui-select-inner">
|
|
246
|
+
<div
|
|
247
|
+
class="wui-glass select-trigger"
|
|
248
|
+
?data-custom-trigger=${this._hasTriggerSlot}
|
|
249
|
+
@click=${this._togglePopup}
|
|
250
|
+
tabindex=${this._isDisabled ? -1 : 0}
|
|
251
|
+
role="combobox"
|
|
252
|
+
aria-expanded=${this._isOpen}
|
|
253
|
+
aria-haspopup="listbox"
|
|
254
|
+
aria-disabled=${String(this._isDisabled)}
|
|
255
|
+
aria-activedescendant=${this._isOpen && this._activeIndex >= 0 ? this._options[this._activeIndex]?.id : m}
|
|
256
|
+
>
|
|
257
|
+
<slot name="trigger" @slotchange=${this._onTriggerSlotChange}></slot>
|
|
258
|
+
${this._hasTriggerSlot ? m : p`<span class="label">${this._selectedLabel}</span>`}
|
|
259
|
+
<web-ui-icon class="arrow" .icon=${n}></web-ui-icon>
|
|
260
|
+
</div>
|
|
261
|
+
<div class="wui-glass select-overlay wui-floating-panel" hidden role="listbox">
|
|
262
|
+
<slot @slotchange=${this._onSlotChange}></slot>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
`;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
e([v()], y.prototype, "_formDisabled", void 0), e([_({
|
|
269
|
+
type: String,
|
|
270
|
+
reflect: !0
|
|
271
|
+
})], y.prototype, "placeholder", void 0), e([_({
|
|
272
|
+
type: Boolean,
|
|
273
|
+
reflect: !0
|
|
274
|
+
})], y.prototype, "disabled", void 0), e([_({
|
|
275
|
+
type: Boolean,
|
|
276
|
+
reflect: !0
|
|
277
|
+
})], y.prototype, "required", void 0), e([_({
|
|
278
|
+
type: Boolean,
|
|
279
|
+
reflect: !0
|
|
280
|
+
})], y.prototype, "portal", void 0), e([_({
|
|
281
|
+
reflect: !0,
|
|
282
|
+
attribute: "lock-scroll",
|
|
283
|
+
converter: r
|
|
284
|
+
})], y.prototype, "lockScroll", void 0), e([_({ attribute: !1 })], y.prototype, "overlayContainer", void 0), e([_({
|
|
285
|
+
type: String,
|
|
286
|
+
reflect: !0
|
|
287
|
+
})], y.prototype, "name", void 0), e([v()], y.prototype, "_value", void 0), e([v()], y.prototype, "_isOpen", void 0), e([v()], y.prototype, "_activeIndex", void 0), e([v()], y.prototype, "_selectedLabel", void 0), e([v()], y.prototype, "_hasTriggerSlot", void 0), y = e([g("web-ui-select")], y);
|
|
288
|
+
//#endregion
|
|
289
|
+
export { y as WebUiSelect };
|
|
290
|
+
|
|
291
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/select/index.ts"],"sourcesContent":["import { html, LitElement, nothing, type PropertyValues, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/icon'\nimport '@/components/option'\nimport glass from '@/assets/glass.css?inline'\nimport overlayMotion from '@/assets/overlay-motion.css?inline'\nimport type { WebUiOption } from '@/components/option'\nimport { lucideChevronDown } from '@/icons'\nimport { withOverlay } from '@/shared/overlay/overlay'\nimport type { OverlayApi } from '@/shared/overlay/overlay'\nimport { createOverlayPortal } from '@/shared/overlay/portal'\nimport type { OverlayContainer, OverlayPortal } from '@/shared/overlay/portal'\nimport { hideOverlayPresence, showOverlayPresence } from '@/shared/overlay/presence'\nimport { booleanWithFalseString } from '@/shared/property-converters/boolean-with-false-string'\nimport { lockScroll, unlockScroll } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-select')\nexport class WebUiSelect extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(overlayMotion), unsafeCSS(style)]\n\n static formAssociated = true\n\n // ElementInternals 实例,在 connectedCallback 中初始化\n private _internals?: ElementInternals\n @state() private _formDisabled = false\n\n @property({ type: String, reflect: true }) placeholder = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n @property({ type: Boolean, reflect: true }) portal = false\n @property({ reflect: true, attribute: 'lock-scroll', converter: booleanWithFalseString }) lockScroll = true\n @property({ attribute: false }) overlayContainer?: OverlayContainer\n @property({ type: String, reflect: true }) name = ''\n\n // value 使用内部状态 + 访问器模式,在变更时同步 ElementInternals\n @state() private _value = ''\n get value(): string {\n return this._value\n }\n set value(v: string) {\n const old = this._value\n this._value = v\n this._internals?.setFormValue?.(v)\n this.toggleAttribute('data-has-value', !!v)\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled\n }\n\n @state() private _isOpen = false\n @state() private _activeIndex = -1\n @state() private _selectedLabel = ''\n @state() private _hasTriggerSlot = false\n\n private _options: WebUiOption[] = []\n private _overlay?: OverlayApi\n private _portal?: OverlayPortal\n private _hasScrollLock = false\n\n get isOpen(): boolean {\n return this._isOpen\n }\n\n get open(): boolean {\n return this._isOpen\n }\n\n private _onClickOutside = (e: MouseEvent) => {\n if (\n this._isOpen &&\n e.target instanceof Node &&\n !this.contains(e.target) &&\n !this._portal?.panel.contains(e.target)\n ) {\n this._close()\n }\n }\n\n private _onFocusOut = () => {\n requestAnimationFrame(() => {\n if (this._isOpen && !this.matches(':focus-within') && !this._portal?.panel.matches(':focus-within')) {\n this._close()\n }\n })\n }\n\n override connectedCallback() {\n super.connectedCallback()\n this._internals = this.attachInternals()\n // 同步 HTML 属性中预设的 value,补全访问器模式不处理 attribute 反射\n const attrValue = this.getAttribute('value')\n if (attrValue !== null) {\n this._value = attrValue\n this.toggleAttribute('data-has-value', !!attrValue)\n }\n this._internals?.setFormValue?.(this._value)\n this.addEventListener('option-register', this._onOptionRegister)\n this.addEventListener('option-unregister', this._onOptionUnregister)\n this.addEventListener('keydown', this._onKeydown)\n this.addEventListener('focusout', this._onFocusOut)\n document.addEventListener('click', this._onClickOutside)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('option-register', this._onOptionRegister)\n this.removeEventListener('option-unregister', this._onOptionUnregister)\n this.removeEventListener('keydown', this._onKeydown)\n this.removeEventListener('focusout', this._onFocusOut)\n document.removeEventListener('click', this._onClickOutside)\n this._options.forEach(o => {\n o.removeEventListener('click', this._handleOptionClick)\n o.removeEventListener('pointerover', this._handleOptionPointerOver)\n o.removeEventListener('pointerdown', this._handleOptionPointerDown)\n o.removeEventListener('option-update', this._onOptionUpdate)\n })\n this._close()\n this._disposeOverlay()\n }\n\n override firstUpdated() {\n this._initLocalOverlay()\n requestAnimationFrame(() => {\n if (this.isConnected) this._onSlotChange()\n })\n }\n\n override willUpdate() {\n this._options = this._portal\n ? [...this._portal.panel.querySelectorAll<WebUiOption>('web-ui-option')]\n : [...this.querySelectorAll<WebUiOption>('web-ui-option')]\n this._ensureOptionIds()\n this._syncSelected()\n }\n\n override updated(changed: PropertyValues) {\n if (changed.has('portal') || changed.has('overlayContainer'))\n requestAnimationFrame(() => this._reconfigureOverlay())\n if (changed.has('lockScroll')) this._syncScrollLock()\n this._syncOpenAttribute()\n this._syncValidity()\n }\n\n formResetCallback() {\n this.value = this.getAttribute('value') || ''\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n private _syncValidity() {\n if (!this._internals || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || !this.required || this.value) this._internals.setValidity({})\n else this._internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n private _syncOpenAttribute() {\n this.toggleAttribute('open', this._isOpen)\n }\n\n private _onTriggerSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement\n const hasContent = slot.assignedElements().length > 0\n if (this._hasTriggerSlot === hasContent) return\n this._hasTriggerSlot = hasContent\n this._reconfigureOverlay()\n }\n\n private _syncSelected() {\n this._options.forEach(o => {\n o.selected = o.value === this.value\n })\n if (!this.value) {\n this._selectedLabel = this.placeholder\n return\n }\n const option = this._options.find(o => o.value === this.value)\n this._selectedLabel = option?.label || this.placeholder\n }\n\n private _ensureOptionIds() {\n this._options.forEach((option, index) => {\n if (!option.id) option.id = `${this.localName}-option-${index}`\n })\n }\n\n private _onOptionRegister = (e: Event) => {\n if (!(e.target instanceof HTMLElement)) return\n const target = e.target as WebUiOption\n target.addEventListener('click', this._handleOptionClick)\n target.addEventListener('pointerover', this._handleOptionPointerOver)\n target.addEventListener('pointerdown', this._handleOptionPointerDown)\n target.addEventListener('option-update', this._onOptionUpdate)\n this._options.push(target)\n this._ensureOptionIds()\n this._syncSelected()\n }\n\n private _onOptionUnregister = (e: Event) => {\n if (!(e.target instanceof HTMLElement)) return\n const target = e.target as WebUiOption\n target.removeEventListener('click', this._handleOptionClick)\n target.removeEventListener('pointerover', this._handleOptionPointerOver)\n target.removeEventListener('pointerdown', this._handleOptionPointerDown)\n target.removeEventListener('option-update', this._onOptionUpdate)\n this._options = this._options.filter(o => o !== target)\n }\n\n private _onSlotChange = () => {\n const options = this._portal\n ? [...this._portal.panel.querySelectorAll<WebUiOption>('web-ui-option')]\n : [...this.querySelectorAll<WebUiOption>('web-ui-option')]\n this._options = options\n this._ensureOptionIds()\n this._syncSelected()\n }\n\n private _handleOptionClick = (e: Event) => {\n if (!(e.currentTarget instanceof HTMLElement)) return\n const option = e.currentTarget as WebUiOption\n if (option.disabled) return\n this.value = option.value\n this._close()\n this._notifyValueChange()\n }\n\n private _onOptionUpdate = () => {\n this._syncSelected()\n this._syncActiveOption()\n }\n\n private _handleOptionPointerOver = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return\n if (!this._isOpen || this._activeIndex < 0 || !(e.currentTarget instanceof HTMLElement)) return\n\n // 指针接管后只保留 :hover,避免键盘激活项与悬停项同时高亮。\n this._activeIndex = -1\n this._syncActiveOption()\n }\n\n private _handleOptionPointerDown = (e: PointerEvent) => {\n // 保持 trigger 焦点,避免 focusout 在 click 前关闭浮层。\n e.preventDefault()\n }\n\n private _onKeydown = (e: KeyboardEvent) => {\n if (this._isDisabled) return\n\n switch (e.key) {\n case 'Escape':\n if (this._isOpen) {\n this._close()\n e.preventDefault()\n }\n break\n case 'ArrowDown':\n e.preventDefault()\n if (!this._isOpen) {\n this._open(true)\n } else {\n this._navigateActive(1)\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (!this._isOpen) this._open(true)\n else this._navigateActive(-1)\n break\n case 'Enter':\n if (this._isOpen && this._activeIndex >= 0) {\n const option = this._options[this._activeIndex]\n if (option && !option.disabled) {\n this.value = option.value\n this._notifyValueChange()\n }\n this._close()\n e.preventDefault()\n }\n break\n }\n }\n\n private _navigateActive(delta: number) {\n const enabled = this._options.filter(o => !o.disabled)\n if (!enabled.length) return\n\n const selectedOption = this._options.find(option => option.value === this.value && !option.disabled)\n const currentIdx =\n this._activeIndex >= 0\n ? enabled.indexOf(this._options[this._activeIndex])\n : selectedOption\n ? enabled.indexOf(selectedOption)\n : delta > 0\n ? -1\n : 0\n let nextIdx = currentIdx + delta\n if (nextIdx < 0) nextIdx = enabled.length - 1\n if (nextIdx >= enabled.length) nextIdx = 0\n\n const nextOption = enabled[nextIdx]\n this._activeIndex = this._options.indexOf(nextOption)\n\n this._syncActiveOption()\n }\n\n private _open(isKeyboardNavigation = false) {\n if (this._isDisabled || this._isOpen) return\n this._isOpen = true\n this._dispatchOpenChange()\n this._syncSelected()\n if (isKeyboardNavigation) this._setInitialActiveOption()\n else this._syncActiveOption()\n this._syncScrollLock()\n if (this.portal) {\n requestAnimationFrame(() => {\n if (this._isOpen) this._openOverlay(isKeyboardNavigation)\n })\n } else {\n this._openOverlay(isKeyboardNavigation)\n }\n }\n\n private _close() {\n if (!this._isOpen) return\n this._isOpen = false\n this._dispatchOpenChange()\n this._activeIndex = -1\n this._options.forEach(o => o.removeAttribute('active'))\n this._syncScrollLock(false)\n void this._closeOverlay()\n }\n\n private _dispatchOpenChange() {\n this.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open: this._isOpen },\n bubbles: true,\n composed: true\n })\n )\n }\n\n private _setInitialActiveOption() {\n const selectedIndex = this._options.findIndex(option => option.value === this.value && !option.disabled)\n const firstEnabledIndex = this._options.findIndex(option => !option.disabled)\n this._activeIndex = selectedIndex >= 0 ? selectedIndex : firstEnabledIndex\n this._syncActiveOption()\n }\n\n private _syncActiveOption() {\n this._options.forEach((option, index) => option.toggleAttribute('active', index === this._activeIndex))\n }\n\n private _notifyValueChange() {\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private _syncScrollLock(isOpen = this._isOpen) {\n const shouldLock = isOpen && this.lockScroll\n if (shouldLock === this._hasScrollLock) return\n\n if (shouldLock) lockScroll()\n else unlockScroll()\n this._hasScrollLock = shouldLock\n }\n\n private _togglePopup() {\n if (this._isDisabled) return\n if (this._isOpen) this._close()\n else this._open()\n }\n\n private _initLocalOverlay() {\n const anchor = this.shadowRoot?.querySelector<HTMLElement>('.select-trigger')\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.select-overlay')\n if (!anchor || !panel) return\n this._overlay = withOverlay.make({\n anchor,\n overlay: panel,\n placement: 'bottom-start',\n offset: 4\n })\n }\n\n private _openOverlay(isKeyboardNavigation = false) {\n if (this.portal) {\n this._openPortal(isKeyboardNavigation)\n } else {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.select-overlay')\n if (panel) panel.style.width = `${this._getDesiredWidth()}px`\n this._overlay?.open()\n if (panel) showOverlayPresence(panel, { isInstant: isKeyboardNavigation })\n }\n }\n\n private _getDesiredWidth(): number {\n const trigger = this.shadowRoot?.querySelector<HTMLElement>('.select-trigger')\n const triggerWidth = trigger?.offsetWidth || 0\n\n const options = [...this.querySelectorAll<WebUiOption>('web-ui-option')]\n let maxOptionWidth = 0\n options.forEach(opt => {\n const label = opt.shadowRoot?.querySelector<HTMLElement>('.option-label')\n const w = label?.scrollWidth || opt.scrollWidth || 0\n if (w > maxOptionWidth) maxOptionWidth = w\n })\n\n return Math.max(120, triggerWidth, maxOptionWidth)\n }\n\n private _openPortal(isKeyboardNavigation = false) {\n if (this._portal) {\n this._overlay?.open()\n showOverlayPresence(this._portal.panel, { isInstant: isKeyboardNavigation })\n return\n }\n const anchor = this.shadowRoot?.querySelector<HTMLElement>('.select-trigger')\n if (!anchor) return\n\n const desiredWidth = this._getDesiredWidth()\n\n const portal = createOverlayPortal({\n container: this.overlayContainer,\n target: this,\n style: `${glass}\\n${overlayMotion}\\n${style}`,\n className: 'wui-glass select-overlay portal wui-floating-panel'\n })\n portal.panel.style.width = `${desiredWidth}px`\n portal.panel.setAttribute('role', 'listbox')\n portal.moveContent(Array.from(this.children))\n this._portal = portal\n this._overlay = withOverlay.make({\n anchor,\n overlay: portal.panel,\n placement: 'bottom-start',\n offset: 4,\n strategy: 'fixed'\n })\n this._overlay.open()\n showOverlayPresence(portal.panel, { isInstant: isKeyboardNavigation })\n }\n\n private async _closeOverlay() {\n this._overlay?.close()\n const panel = this._portal?.panel ?? this.shadowRoot?.querySelector<HTMLElement>('.select-overlay')\n if (panel && !(await hideOverlayPresence(panel))) return\n if (!this._portal || this._isOpen) return\n this._portal.restoreContent()\n this._portal.remove()\n this._portal = undefined\n this._overlay = undefined\n }\n\n private _disposeOverlay() {\n this._overlay?.dispose()\n this._overlay = undefined\n this._portal?.restoreContent()\n this._portal?.remove()\n this._portal = undefined\n }\n\n private _reconfigureOverlay() {\n this._disposeOverlay()\n if (!this.portal) this._initLocalOverlay()\n if (this._isOpen) this._openOverlay()\n }\n\n override render() {\n return html`\n <div class=\"wui-select-inner\">\n <div\n class=\"wui-glass select-trigger\"\n ?data-custom-trigger=${this._hasTriggerSlot}\n @click=${this._togglePopup}\n tabindex=${this._isDisabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded=${this._isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled=${String(this._isDisabled)}\n aria-activedescendant=${this._isOpen && this._activeIndex >= 0\n ? this._options[this._activeIndex]?.id\n : nothing}\n >\n <slot name=\"trigger\" @slotchange=${this._onTriggerSlotChange}></slot>\n ${!this._hasTriggerSlot ? html`<span class=\"label\">${this._selectedLabel}</span>` : nothing}\n <web-ui-icon class=\"arrow\" .icon=${lucideChevronDown}></web-ui-icon>\n </div>\n <div class=\"wui-glass select-overlay wui-floating-panel\" hidden role=\"listbox\">\n <slot @slotchange=${this._onSlotChange}></slot>\n </div>\n </div>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-select': WebUiSelect\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/select/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.wui-select-inner{flex-direction:column;display:flex;position:relative}.select-trigger{cursor:pointer;box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-button-size,40px);height:var(--wui-button-size,40px);border-radius:2147483647px;align-items:center;gap:8px;padding:0 16px;display:flex}.select-trigger:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px}.select-trigger[data-custom-trigger]{width:auto}:host([disabled]) .select-trigger{cursor:not-allowed}.label{font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:host(:not([data-has-value])) .label{color:var(--wui-color-text-muted,#6a6a6a)}::slotted([slot=trigger]){font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.arrow{color:var(--wui-color-text-muted,#6a6a6a);flex-shrink:0}:host([open]) .arrow{transform:rotate(180deg)}.select-overlay{--wui-glass-shadow:var(--wui-shadow-pop,0 3px 9px #00000045);z-index:var(--wui-layer-local-overlay,1);box-sizing:border-box;min-width:200px;max-width:var(--wui-select-max-width,500px);background-color:var(--wui-color-surface-overlay,#f5f5f5d9);border-radius:20px;max-height:320px;padding:4px;position:absolute;overflow-y:auto}:host([portal]) .select-overlay{display:none}.select-overlay.portal{z-index:var(--wui-layer-menu,100);position:fixed}.select-overlay.hidden{display:none}";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/select/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-select-inner {\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n.select-trigger {\n cursor: pointer;\n\n display: flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-button-size, 40px);\n height: var(--wui-button-size, 40px);\n padding: 0 16px;\n border-radius: calc(infinity * 1px);\n\n &:focus-visible {\n outline: 3px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n.select-trigger[data-custom-trigger] {\n width: auto;\n}\n\n:host([disabled]) .select-trigger {\n cursor: not-allowed;\n}\n\n.label {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host(:not([data-has-value])) .label {\n color: var(--wui-color-text-muted, #6a6a6a);\n}\n\n::slotted([slot='trigger']) {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.arrow {\n flex-shrink: 0;\n color: var(--wui-color-text-muted, #6a6a6a);\n}\n\n:host([open]) .arrow {\n transform: rotate(180deg);\n}\n\n/* ===== 浮层(glass 样式参考 dialog) ===== */\n\n.select-overlay {\n --wui-glass-shadow: var(--wui-shadow-pop, 0 3px 9px rgb(0 0 0 / 0.27));\n position: absolute;\n z-index: var(--wui-layer-local-overlay, 1);\n\n overflow-y: auto;\n\n box-sizing: border-box;\n min-width: 200px;\n max-width: var(--wui-select-max-width, 500px);\n max-height: 320px;\n padding: 4px;\n border-radius: 20px;\n\n background-color: var(--wui-color-surface-overlay, rgb(245 245 245 / 0.85));\n}\n\n:host([portal]) .select-overlay {\n display: none;\n}\n\n.select-overlay.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n}\n\n.select-overlay.hidden {\n display: none;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiSlider extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult[];
|
|
4
|
+
static formAssociated: boolean;
|
|
5
|
+
private _internals?;
|
|
6
|
+
private _formDisabled;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
marks: boolean;
|
|
9
|
+
vertical: boolean;
|
|
10
|
+
name: string;
|
|
11
|
+
required: boolean;
|
|
12
|
+
private _value;
|
|
13
|
+
private _initialValue;
|
|
14
|
+
get value(): number;
|
|
15
|
+
set value(v: number);
|
|
16
|
+
private _min;
|
|
17
|
+
get min(): number;
|
|
18
|
+
set min(v: number);
|
|
19
|
+
private _max;
|
|
20
|
+
get max(): number;
|
|
21
|
+
set max(v: number);
|
|
22
|
+
private _step;
|
|
23
|
+
get step(): number;
|
|
24
|
+
set step(v: number);
|
|
25
|
+
private _dragging;
|
|
26
|
+
private _interactionStartValue;
|
|
27
|
+
private get _isDisabled();
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
willUpdate(changed: Map<string, unknown>): void;
|
|
30
|
+
formResetCallback(): void;
|
|
31
|
+
formDisabledCallback(disabled: boolean): void;
|
|
32
|
+
updated(): void;
|
|
33
|
+
/** 将焦点移至滑块,供表单或外部控制使用 */
|
|
34
|
+
focus(options?: FocusOptions): void;
|
|
35
|
+
/** 移除滑块焦点 */
|
|
36
|
+
blur(): void;
|
|
37
|
+
private get _slider();
|
|
38
|
+
private get _range();
|
|
39
|
+
private get _percent();
|
|
40
|
+
private get _markValues();
|
|
41
|
+
private get _safeStep();
|
|
42
|
+
private _normalizeValue;
|
|
43
|
+
private get _precision();
|
|
44
|
+
private _decimalPlaces;
|
|
45
|
+
private _setValue;
|
|
46
|
+
private _setValueFromPointer;
|
|
47
|
+
private _handlePointerDown;
|
|
48
|
+
private _handlePointerMove;
|
|
49
|
+
private _handlePointerUp;
|
|
50
|
+
private _handleKeyDown;
|
|
51
|
+
render(): import('lit').TemplateResult<1>;
|
|
52
|
+
readonly $events: {
|
|
53
|
+
input: Event;
|
|
54
|
+
change: Event;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
declare global {
|
|
58
|
+
interface HTMLElementTagNameMap {
|
|
59
|
+
'web-ui-slider': WebUiSlider;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import t from "../../assets/glass.js";
|
|
3
|
+
import { normalizeNumber as n } from "../../shared/normalize/index.js";
|
|
4
|
+
import r from "./style.js";
|
|
5
|
+
import { LitElement as i, html as a, unsafeCSS as o } from "lit";
|
|
6
|
+
import { customElement as s, property as c, state as l } from "lit/decorators.js";
|
|
7
|
+
import { classMap as u } from "lit/directives/class-map.js";
|
|
8
|
+
import { styleMap as d } from "lit/directives/style-map.js";
|
|
9
|
+
//#region src/components/slider/index.ts
|
|
10
|
+
var f = class extends i {
|
|
11
|
+
constructor(...e) {
|
|
12
|
+
super(...e), this._formDisabled = !1, this.disabled = !1, this.marks = !1, this.vertical = !1, this.name = "", this.required = !1, this._value = 0, this._initialValue = 0, this._min = 0, this._max = 100, this._step = 1, this._dragging = !1;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.styles = [o(t), o(r)];
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.formAssociated = !0;
|
|
19
|
+
}
|
|
20
|
+
get value() {
|
|
21
|
+
return this._value;
|
|
22
|
+
}
|
|
23
|
+
set value(e) {
|
|
24
|
+
let t = n(e, -Infinity, Infinity, 0), r = this._value;
|
|
25
|
+
this._value = t, this._internals?.setFormValue?.(String(t)), this.requestUpdate("value", r);
|
|
26
|
+
}
|
|
27
|
+
get min() {
|
|
28
|
+
return this._min;
|
|
29
|
+
}
|
|
30
|
+
set min(e) {
|
|
31
|
+
this._min = n(e, -Infinity, Infinity, 0);
|
|
32
|
+
}
|
|
33
|
+
get max() {
|
|
34
|
+
return this._max;
|
|
35
|
+
}
|
|
36
|
+
set max(e) {
|
|
37
|
+
this._max = n(e, -Infinity, Infinity, 100);
|
|
38
|
+
}
|
|
39
|
+
get step() {
|
|
40
|
+
return this._step;
|
|
41
|
+
}
|
|
42
|
+
set step(e) {
|
|
43
|
+
this._step = n(e, -Infinity, Infinity, 1);
|
|
44
|
+
}
|
|
45
|
+
get _isDisabled() {
|
|
46
|
+
return this.disabled || this._formDisabled;
|
|
47
|
+
}
|
|
48
|
+
connectedCallback() {
|
|
49
|
+
super.connectedCallback(), this._internals = this.attachInternals(), this._initialValue = Number(this.getAttribute("value")) || 0, this._internals?.setFormValue?.(String(this._value));
|
|
50
|
+
}
|
|
51
|
+
willUpdate(e) {
|
|
52
|
+
if (e.has("value") || e.has("min") || e.has("max") || e.has("step")) {
|
|
53
|
+
let e = this._normalizeValue(this.value);
|
|
54
|
+
e !== this.value && (this.value = e);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
formResetCallback() {
|
|
58
|
+
this.value = this._initialValue;
|
|
59
|
+
}
|
|
60
|
+
formDisabledCallback(e) {
|
|
61
|
+
this._formDisabled = e;
|
|
62
|
+
}
|
|
63
|
+
updated() {
|
|
64
|
+
!this._internals || typeof this._internals.setValidity != "function" || (this._isDisabled || this.required, this._internals.setValidity({}));
|
|
65
|
+
}
|
|
66
|
+
focus(e) {
|
|
67
|
+
this._slider?.focus(e);
|
|
68
|
+
}
|
|
69
|
+
blur() {
|
|
70
|
+
this._slider?.blur();
|
|
71
|
+
}
|
|
72
|
+
get _slider() {
|
|
73
|
+
return this.renderRoot.querySelector("[role=\"slider\"]");
|
|
74
|
+
}
|
|
75
|
+
get _range() {
|
|
76
|
+
return Math.max(0, this.max - this.min);
|
|
77
|
+
}
|
|
78
|
+
get _percent() {
|
|
79
|
+
return this._range === 0 ? 0 : (this.value - this.min) / this._range * 100;
|
|
80
|
+
}
|
|
81
|
+
get _markValues() {
|
|
82
|
+
if (!this.marks || this._range === 0) return [];
|
|
83
|
+
let e = Math.min(100, Math.floor(this._range / this._safeStep));
|
|
84
|
+
return Array.from({ length: e + 1 }, (e, t) => this.min + t * this._safeStep);
|
|
85
|
+
}
|
|
86
|
+
get _safeStep() {
|
|
87
|
+
return Number.isFinite(this.step) && this.step > 0 ? this.step : 1;
|
|
88
|
+
}
|
|
89
|
+
_normalizeValue(e) {
|
|
90
|
+
if (!Number.isFinite(e)) return this.min;
|
|
91
|
+
let t = Math.min(this.min, this.max), n = Math.max(this.min, this.max), r = Math.round((Math.min(n, Math.max(t, e)) - t) / this._safeStep);
|
|
92
|
+
return Number((t + r * this._safeStep).toFixed(this._precision));
|
|
93
|
+
}
|
|
94
|
+
get _precision() {
|
|
95
|
+
return Math.max(this._decimalPlaces(this.min), this._decimalPlaces(this.max), this._decimalPlaces(this._safeStep));
|
|
96
|
+
}
|
|
97
|
+
_decimalPlaces(e) {
|
|
98
|
+
let [, t = ""] = String(e).split(".");
|
|
99
|
+
return t.length;
|
|
100
|
+
}
|
|
101
|
+
_setValue(e) {
|
|
102
|
+
if (this._isDisabled) return !1;
|
|
103
|
+
let t = this._normalizeValue(e);
|
|
104
|
+
return t === this.value ? !1 : (this.value = t, this.dispatchEvent(new Event("input", {
|
|
105
|
+
bubbles: !0,
|
|
106
|
+
composed: !0
|
|
107
|
+
})), !0);
|
|
108
|
+
}
|
|
109
|
+
_setValueFromPointer(e) {
|
|
110
|
+
let t = e.currentTarget.getBoundingClientRect();
|
|
111
|
+
if (this.vertical) {
|
|
112
|
+
if (t.height <= 0) return !1;
|
|
113
|
+
let n = Math.min(1, Math.max(0, 1 - (e.clientY - t.top) / t.height));
|
|
114
|
+
return this._setValue(this.min + n * this._range);
|
|
115
|
+
}
|
|
116
|
+
if (t.width <= 0) return !1;
|
|
117
|
+
let n = Math.min(1, Math.max(0, (e.clientX - t.left) / t.width));
|
|
118
|
+
return this._setValue(this.min + n * this._range);
|
|
119
|
+
}
|
|
120
|
+
_handlePointerDown(e) {
|
|
121
|
+
this._isDisabled || (e.currentTarget.setPointerCapture?.(e.pointerId), this._interactionStartValue = this.value, this._dragging = !0, this._setValueFromPointer(e));
|
|
122
|
+
}
|
|
123
|
+
_handlePointerMove(e) {
|
|
124
|
+
this._dragging && this._setValueFromPointer(e);
|
|
125
|
+
}
|
|
126
|
+
_handlePointerUp(e) {
|
|
127
|
+
this._dragging && (this._setValueFromPointer(e), this._dragging = !1, this._interactionStartValue !== this.value && this.dispatchEvent(new Event("change", {
|
|
128
|
+
bubbles: !0,
|
|
129
|
+
composed: !0
|
|
130
|
+
})), this._interactionStartValue = void 0);
|
|
131
|
+
}
|
|
132
|
+
_handleKeyDown(e) {
|
|
133
|
+
if (this._isDisabled) return;
|
|
134
|
+
let t = this._safeStep * 10, n = {
|
|
135
|
+
ArrowDown: this.value - this._safeStep,
|
|
136
|
+
ArrowLeft: this.value - this._safeStep,
|
|
137
|
+
ArrowUp: this.value + this._safeStep,
|
|
138
|
+
ArrowRight: this.value + this._safeStep,
|
|
139
|
+
PageDown: this.value - t,
|
|
140
|
+
PageUp: this.value + t,
|
|
141
|
+
Home: this.min,
|
|
142
|
+
End: this.max
|
|
143
|
+
}[e.key];
|
|
144
|
+
n !== void 0 && (e.preventDefault(), this._setValue(n) && this.dispatchEvent(new Event("change", {
|
|
145
|
+
bubbles: !0,
|
|
146
|
+
composed: !0
|
|
147
|
+
})));
|
|
148
|
+
}
|
|
149
|
+
render() {
|
|
150
|
+
let e = u({
|
|
151
|
+
"wui-slider-track": !0,
|
|
152
|
+
"is-disabled": this._isDisabled
|
|
153
|
+
}), t = u({
|
|
154
|
+
"wui-slider-thumb": !0,
|
|
155
|
+
"wui-glass": !0,
|
|
156
|
+
"is-dragging": this._dragging
|
|
157
|
+
});
|
|
158
|
+
return a`
|
|
159
|
+
<div
|
|
160
|
+
class=${e}
|
|
161
|
+
style=${d({ "--percent": `${this._percent}%` })}
|
|
162
|
+
role="slider"
|
|
163
|
+
tabindex=${this._isDisabled ? -1 : 0}
|
|
164
|
+
aria-label="滑块"
|
|
165
|
+
aria-orientation=${this.vertical ? "vertical" : "horizontal"}
|
|
166
|
+
aria-valuemin=${this.min}
|
|
167
|
+
aria-valuemax=${this.max}
|
|
168
|
+
aria-valuenow=${this.value}
|
|
169
|
+
aria-disabled=${String(this._isDisabled)}
|
|
170
|
+
@keydown=${this._handleKeyDown}
|
|
171
|
+
@pointerdown=${this._handlePointerDown}
|
|
172
|
+
@pointermove=${this._handlePointerMove}
|
|
173
|
+
@pointerup=${this._handlePointerUp}
|
|
174
|
+
@pointercancel=${this._handlePointerUp}
|
|
175
|
+
>
|
|
176
|
+
<div class="wui-slider-progress"></div>
|
|
177
|
+
<div class="wui-slider-marks">
|
|
178
|
+
${this._markValues.map((e) => a`<span
|
|
179
|
+
class="wui-slider-mark"
|
|
180
|
+
style=${d({ "--percent": `${(e - this.min) / this._range * 100}%` })}
|
|
181
|
+
></span>`)}
|
|
182
|
+
</div>
|
|
183
|
+
<div class=${t}></div>
|
|
184
|
+
</div>
|
|
185
|
+
`;
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
e([l()], f.prototype, "_formDisabled", void 0), e([c({
|
|
189
|
+
type: Boolean,
|
|
190
|
+
reflect: !0
|
|
191
|
+
})], f.prototype, "disabled", void 0), e([c({
|
|
192
|
+
type: Boolean,
|
|
193
|
+
reflect: !0
|
|
194
|
+
})], f.prototype, "marks", void 0), e([c({
|
|
195
|
+
type: Boolean,
|
|
196
|
+
reflect: !0
|
|
197
|
+
})], f.prototype, "vertical", void 0), e([c({
|
|
198
|
+
type: String,
|
|
199
|
+
reflect: !0
|
|
200
|
+
})], f.prototype, "name", void 0), e([c({
|
|
201
|
+
type: Boolean,
|
|
202
|
+
reflect: !0
|
|
203
|
+
})], f.prototype, "required", void 0), e([c({
|
|
204
|
+
type: Number,
|
|
205
|
+
reflect: !0
|
|
206
|
+
})], f.prototype, "value", null), e([c({
|
|
207
|
+
type: Number,
|
|
208
|
+
reflect: !0
|
|
209
|
+
})], f.prototype, "min", null), e([c({
|
|
210
|
+
type: Number,
|
|
211
|
+
reflect: !0
|
|
212
|
+
})], f.prototype, "max", null), e([c({
|
|
213
|
+
type: Number,
|
|
214
|
+
reflect: !0
|
|
215
|
+
})], f.prototype, "step", null), e([l()], f.prototype, "_dragging", void 0), f = e([s("web-ui-slider")], f);
|
|
216
|
+
//#endregion
|
|
217
|
+
export { f as WebUiSlider };
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=index.js.map
|