@greypan/web-ui 1.4.2 → 2.0.1
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/index.d.ts +87 -0
- package/dist/components/dropdown/index.js +324 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/dropdown/style.js +6 -0
- package/dist/components/dropdown/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/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 +11 -1
- package/dist/components/layout/index.js +55 -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/radix-icons-panel-left-minimized.d.ts +6 -0
- package/dist/icons/generated/radix-icons-panel-left-minimized.js +10 -0
- package/dist/icons/generated/radix-icons-panel-left-minimized.js.map +1 -0
- package/dist/icons/generated/si-check-alt-fill.d.ts +6 -0
- package/dist/icons/index.d.ts +39 -0
- package/dist/icons/index.js +40 -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 +29 -13
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -5
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import t from "../../assets/glass.js";
|
|
3
|
+
import n from "./style.js";
|
|
4
|
+
import { LitElement as r, html as i, unsafeCSS as a } from "lit";
|
|
5
|
+
import { customElement as o, property as s, state as c } from "lit/decorators.js";
|
|
6
|
+
//#region src/components/segmented/index.ts
|
|
7
|
+
var l = class extends r {
|
|
8
|
+
constructor(...e) {
|
|
9
|
+
super(...e), this.name = "", this.disabled = !1, this.required = !1, this._value = "", this._initialValue = "", this.childObserver = new MutationObserver(() => {
|
|
10
|
+
this._syncPropsToChildren(), requestAnimationFrame(() => this._updateIndicator());
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
static {
|
|
14
|
+
this.styles = [a(t), a(n)];
|
|
15
|
+
}
|
|
16
|
+
static {
|
|
17
|
+
this.formAssociated = !0;
|
|
18
|
+
}
|
|
19
|
+
get value() {
|
|
20
|
+
return this._value;
|
|
21
|
+
}
|
|
22
|
+
set value(e) {
|
|
23
|
+
let t = this._value;
|
|
24
|
+
this._value = e, this._internals?.setFormValue?.(e), this.requestUpdate("value", t);
|
|
25
|
+
}
|
|
26
|
+
_syncPropsToChildren() {
|
|
27
|
+
this.querySelectorAll("web-ui-segmented-trigger").forEach((e) => {
|
|
28
|
+
e.checked = e.value === this._value, e.disabled = this.disabled;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
_updateIndicator() {
|
|
32
|
+
let e = this.querySelectorAll("web-ui-segmented-trigger"), t = 0, n = 0;
|
|
33
|
+
e.forEach((e) => {
|
|
34
|
+
if (e.value === this._value) {
|
|
35
|
+
let r = e.getBoundingClientRect(), i = this.getBoundingClientRect();
|
|
36
|
+
t = r.left - i.left, n = r.width;
|
|
37
|
+
}
|
|
38
|
+
}), this.style.setProperty("--indicator-left", `${t}px`), this.style.setProperty("--indicator-width", `${n}px`);
|
|
39
|
+
}
|
|
40
|
+
updated(e) {
|
|
41
|
+
(e.has("value") || e.has("disabled")) && (this._syncPropsToChildren(), requestAnimationFrame(() => this._updateIndicator()));
|
|
42
|
+
}
|
|
43
|
+
connectedCallback() {
|
|
44
|
+
super.connectedCallback(), this._internals = this.attachInternals();
|
|
45
|
+
let e = this.getAttribute("value");
|
|
46
|
+
e !== null && this._value === "" && (this._value = e), this._initialValue = e ?? "", this._internals?.setFormValue?.(this._value), this.childObserver.observe(this, { childList: !0 }), this.addEventListener("change", this._handleChildChange);
|
|
47
|
+
}
|
|
48
|
+
firstUpdated() {
|
|
49
|
+
this._syncPropsToChildren(), requestAnimationFrame(() => this._updateIndicator());
|
|
50
|
+
}
|
|
51
|
+
disconnectedCallback() {
|
|
52
|
+
super.disconnectedCallback(), this.childObserver.disconnect(), this.removeEventListener("change", this._handleChildChange);
|
|
53
|
+
}
|
|
54
|
+
_handleChildChange(e) {
|
|
55
|
+
if (this.disabled) return;
|
|
56
|
+
let t = e.target;
|
|
57
|
+
if (!t.matches?.("web-ui-segmented-trigger")) return;
|
|
58
|
+
let n = t;
|
|
59
|
+
n.value !== this._value && (this.value = n.value, this.dispatchEvent(new Event("input", {
|
|
60
|
+
bubbles: !0,
|
|
61
|
+
composed: !0
|
|
62
|
+
})), this.dispatchEvent(new Event("change", {
|
|
63
|
+
bubbles: !0,
|
|
64
|
+
composed: !0
|
|
65
|
+
})));
|
|
66
|
+
}
|
|
67
|
+
formResetCallback() {
|
|
68
|
+
this.value = this._initialValue;
|
|
69
|
+
}
|
|
70
|
+
formDisabledCallback(e) {
|
|
71
|
+
this.disabled = e;
|
|
72
|
+
}
|
|
73
|
+
render() {
|
|
74
|
+
return i`
|
|
75
|
+
<div class="wui-segmented">
|
|
76
|
+
<span class="wui-segmented-indicator wui-glass"></span>
|
|
77
|
+
<slot></slot>
|
|
78
|
+
</div>
|
|
79
|
+
`;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
e([s({
|
|
83
|
+
type: String,
|
|
84
|
+
reflect: !0
|
|
85
|
+
})], l.prototype, "name", void 0), e([s({
|
|
86
|
+
type: Boolean,
|
|
87
|
+
reflect: !0
|
|
88
|
+
})], l.prototype, "disabled", void 0), e([s({
|
|
89
|
+
type: Boolean,
|
|
90
|
+
reflect: !0
|
|
91
|
+
})], l.prototype, "required", void 0), e([c()], l.prototype, "_value", void 0), l = e([o("web-ui-segmented")], l);
|
|
92
|
+
//#endregion
|
|
93
|
+
export { l as WebUiSegmented };
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/segmented/index.ts"],"sourcesContent":["import { html, LitElement, type PropertyValues, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport glass from '@/assets/glass.css?inline'\n\nimport type { WebUiSegmentedTrigger } from '../segmented-trigger'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-segmented')\nexport class WebUiSegmented extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n static formAssociated = true\n\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n\n private _internals?: ElementInternals\n @state() private _value = ''\n private _initialValue = ''\n\n get value(): string {\n return this._value\n }\n\n set value(v: string) {\n const old = this._value\n this._value = v\n this._internals?.setFormValue?.(v)\n this.requestUpdate('value', old)\n }\n\n private readonly childObserver = new MutationObserver(() => {\n this._syncPropsToChildren()\n requestAnimationFrame(() => this._updateIndicator())\n })\n\n private _syncPropsToChildren() {\n this.querySelectorAll<WebUiSegmentedTrigger>('web-ui-segmented-trigger').forEach(trigger => {\n trigger.checked = trigger.value === this._value\n trigger.disabled = this.disabled\n })\n }\n\n private _updateIndicator() {\n const triggers = this.querySelectorAll<WebUiSegmentedTrigger>('web-ui-segmented-trigger')\n let left = 0\n let width = 0\n\n triggers.forEach(trigger => {\n if (trigger.value === this._value) {\n const triggerRect = trigger.getBoundingClientRect()\n const groupRect = this.getBoundingClientRect()\n left = triggerRect.left - groupRect.left\n width = triggerRect.width\n }\n })\n\n this.style.setProperty('--indicator-left', `${left}px`)\n this.style.setProperty('--indicator-width', `${width}px`)\n }\n\n override updated(props: PropertyValues) {\n if (props.has('value') || props.has('disabled')) {\n this._syncPropsToChildren()\n requestAnimationFrame(() => this._updateIndicator())\n }\n }\n\n override connectedCallback() {\n super.connectedCallback()\n this._internals = this.attachInternals()\n\n // 仅当属性在连接前未被 property setter 设值时,才从 attribute 读取初始值\n const attrValue = this.getAttribute('value')\n if (attrValue !== null && this._value === '') {\n this._value = attrValue\n }\n this._initialValue = attrValue ?? ''\n this._internals?.setFormValue?.(this._value)\n\n this.childObserver.observe(this, { childList: true })\n this.addEventListener('change', this._handleChildChange)\n }\n\n override firstUpdated() {\n this._syncPropsToChildren()\n requestAnimationFrame(() => this._updateIndicator())\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.childObserver.disconnect()\n this.removeEventListener('change', this._handleChildChange)\n }\n\n private _handleChildChange(e: Event) {\n if (this.disabled) return\n const target = e.target as HTMLElement\n if (!target.matches?.('web-ui-segmented-trigger')) return\n const trigger = target as WebUiSegmentedTrigger\n if (trigger.value === this._value) return\n\n this.value = trigger.value\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n formResetCallback() {\n this.value = this._initialValue\n }\n\n formDisabledCallback(disabled: boolean) {\n this.disabled = disabled\n }\n\n override render() {\n return html`\n <div class=\"wui-segmented\">\n <span class=\"wui-segmented-indicator wui-glass\"></span>\n <slot></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-segmented': WebUiSegmented\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/segmented/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{-webkit-user-select:none;user-select:none;display:inline-block}.wui-segmented{background-color:var(--wui-color-surface-raised-mid,#dfdfdf);border-radius:2147483647px;align-items:stretch;padding:4px;display:inline-flex;position:relative}:host([disabled]){cursor:not-allowed}:host([disabled]) .wui-segmented{opacity:.4}.wui-segmented-indicator{z-index:0;top:3px;bottom:3px;left:var(--indicator-left,0);width:var(--indicator-width,0);background-color:var(--wui-color-surface-glass,#fafafa8c);transition:left var(--wui-duration-fast,.16s) var(--wui-ease-standard,cubic-bezier(.77, 0, .175, 1)), width var(--wui-duration-fast,.16s) var(--wui-ease-standard,cubic-bezier(.77, 0, .175, 1));border-radius:2147483647px;position:absolute}";
|
|
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/segmented/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n user-select: none;\n display: inline-block;\n}\n\n.wui-segmented {\n position: relative;\n\n display: inline-flex;\n align-items: stretch;\n\n padding: 4px;\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-raised-mid, #dfdfdf);\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n\n .wui-segmented {\n opacity: 0.4;\n }\n}\n\n.wui-segmented-indicator {\n position: absolute;\n z-index: 0;\n top: 3px;\n bottom: 3px;\n left: var(--indicator-left, 0);\n\n width: var(--indicator-width, 0);\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-glass, rgb(250 250 250 / 0.55));\n\n transition:\n left var(--wui-duration-fast, 160ms) var(--wui-ease-standard, cubic-bezier(0.77, 0, 0.175, 1)),\n width var(--wui-duration-fast, 160ms) var(--wui-ease-standard, cubic-bezier(0.77, 0, 0.175, 1));\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiSegmentedTrigger extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult;
|
|
4
|
+
value: string;
|
|
5
|
+
checked: boolean;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
private handleClick;
|
|
8
|
+
private handleKeyDown;
|
|
9
|
+
render(): import('lit').TemplateResult<1>;
|
|
10
|
+
readonly $events: {
|
|
11
|
+
change: Event;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
'web-ui-segmented-trigger': WebUiSegmentedTrigger;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import t from "./style.js";
|
|
3
|
+
import { LitElement as n, html as r, unsafeCSS as i } from "lit";
|
|
4
|
+
import { customElement as a, property as o } from "lit/decorators.js";
|
|
5
|
+
import { classMap as s } from "lit/directives/class-map.js";
|
|
6
|
+
//#region src/components/segmented-trigger/index.ts
|
|
7
|
+
var c = class extends n {
|
|
8
|
+
constructor(...e) {
|
|
9
|
+
super(...e), this.value = "", this.checked = !1, this.disabled = !1;
|
|
10
|
+
}
|
|
11
|
+
static {
|
|
12
|
+
this.styles = i(t);
|
|
13
|
+
}
|
|
14
|
+
handleClick() {
|
|
15
|
+
this.disabled || this.checked || (this.checked = !0, this.dispatchEvent(new Event("change", {
|
|
16
|
+
bubbles: !0,
|
|
17
|
+
composed: !0
|
|
18
|
+
})));
|
|
19
|
+
}
|
|
20
|
+
handleKeyDown(e) {
|
|
21
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), this.handleClick());
|
|
22
|
+
}
|
|
23
|
+
render() {
|
|
24
|
+
return r`
|
|
25
|
+
<div
|
|
26
|
+
class=${s({
|
|
27
|
+
"wui-segmented-trigger": !0,
|
|
28
|
+
"is-checked": this.checked,
|
|
29
|
+
"is-disabled": this.disabled
|
|
30
|
+
})}
|
|
31
|
+
tabindex="0"
|
|
32
|
+
role="option"
|
|
33
|
+
.ariaSelected=${String(this.checked)}
|
|
34
|
+
@click=${this.handleClick}
|
|
35
|
+
@keydown=${this.handleKeyDown}
|
|
36
|
+
>
|
|
37
|
+
<slot></slot>
|
|
38
|
+
</div>
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
e([o({ type: String })], c.prototype, "value", void 0), e([o({
|
|
43
|
+
type: Boolean,
|
|
44
|
+
reflect: !0
|
|
45
|
+
})], c.prototype, "checked", void 0), e([o({
|
|
46
|
+
type: Boolean,
|
|
47
|
+
reflect: !0
|
|
48
|
+
})], c.prototype, "disabled", void 0), c = e([a("web-ui-segmented-trigger")], c);
|
|
49
|
+
//#endregion
|
|
50
|
+
export { c as WebUiSegmentedTrigger };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/segmented-trigger/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-segmented-trigger')\nexport class WebUiSegmentedTrigger extends LitElement {\n static override styles = unsafeCSS(style)\n\n @property({ type: String }) value = ''\n @property({ type: Boolean, reflect: true }) checked = false\n @property({ type: Boolean, reflect: true }) disabled = false\n\n private handleClick() {\n if (this.disabled || this.checked) return\n this.checked = true\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.handleClick()\n }\n }\n\n override render() {\n const cls = {\n 'wui-segmented-trigger': true,\n 'is-checked': this.checked,\n 'is-disabled': this.disabled\n }\n\n return html`\n <div\n class=${classMap(cls)}\n tabindex=\"0\"\n role=\"option\"\n .ariaSelected=${String(this.checked)}\n @click=${this.handleClick}\n @keydown=${this.handleKeyDown}\n >\n <slot></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-segmented-trigger': WebUiSegmentedTrigger\n }\n}\n"],"mappings":";;;;;;AAOO,IAAM,IAAN,cAAoC,EAAW;;EAKG,aAFnB,KAAA,QAAA,IACkB,KAAA,UAAA,IACC,KAAA,WAAA;;;EAJ9B,KAAA,SAAA,EAAU,CAAK;;CAMxC,cAAsB;EAChB,KAAK,YAAY,KAAK,YAC1B,KAAK,UAAU,IACf,KAAK,cAAc,IAAI,MAAM,UAAU;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CAC3E;CAEA,cAAsB,GAAkB;EACtC,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,eAAe,GACjB,KAAK,YAAY;CAErB;CAEA,SAAkB;EAOhB,OAAO,CAAI;;gBAEC,EAAS;GAPnB,yBAAyB;GACzB,cAAc,KAAK;GACnB,eAAe,KAAK;EAKD,CAAG,EAAE;;;wBAGN,OAAO,KAAK,OAAO,EAAE;iBAC5B,KAAK,YAAY;mBACf,KAAK,cAAc;;;;;CAKpC;AAKF;AAzCG,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GACzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA,GACzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAN3C,IAAA,EAAA,CAAA,EAAc,0BAA0B,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/segmented-trigger/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed}.wui-segmented-trigger{cursor:pointer;-webkit-user-select:none;user-select:none;z-index:1;height:34px;font-size:var(--wui-font-size,14px);color:var(--wui-color-text-muted,#6a6a6a);white-space:nowrap;border-radius:2147483647px;justify-content:center;align-items:center;padding:0 16px;line-height:1;transition:color .2s;display:inline-flex;position:relative}.wui-segmented-trigger:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px}.wui-segmented-trigger.is-checked{color:var(--wui-color-text,#1a1a1a)}:host([disabled]) .wui-segmented-trigger{cursor:not-allowed;opacity:.4}";
|
|
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/segmented-trigger/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}\n\n.wui-segmented-trigger {\n cursor: pointer;\n user-select: none;\n\n position: relative;\n z-index: 1;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n height: 34px;\n padding: 0 16px;\n border-radius: calc(infinity * 1px);\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1;\n color: var(--wui-color-text-muted, #6a6a6a);\n white-space: nowrap;\n\n transition: color 0.2s ease;\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 &.is-checked {\n color: var(--wui-color-text, #1a1a1a);\n }\n}\n\n:host([disabled]) .wui-segmented-trigger {\n cursor: not-allowed;\n opacity: 0.4;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
import { OverlayContainer } from '../../shared/overlay/portal';
|
|
3
|
+
export declare class WebUiSelect extends LitElement {
|
|
4
|
+
static styles: import('lit').CSSResult[];
|
|
5
|
+
static formAssociated: boolean;
|
|
6
|
+
private _internals?;
|
|
7
|
+
private _formDisabled;
|
|
8
|
+
placeholder: string;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
required: boolean;
|
|
11
|
+
portal: boolean;
|
|
12
|
+
lockScroll: boolean;
|
|
13
|
+
overlayContainer?: OverlayContainer;
|
|
14
|
+
name: string;
|
|
15
|
+
private _value;
|
|
16
|
+
get value(): string;
|
|
17
|
+
set value(v: string);
|
|
18
|
+
private get _isDisabled();
|
|
19
|
+
private _isOpen;
|
|
20
|
+
private _activeIndex;
|
|
21
|
+
private _selectedLabel;
|
|
22
|
+
private _hasTriggerSlot;
|
|
23
|
+
private _options;
|
|
24
|
+
private _overlay?;
|
|
25
|
+
private _portal?;
|
|
26
|
+
private _hasScrollLock;
|
|
27
|
+
get isOpen(): boolean;
|
|
28
|
+
get open(): boolean;
|
|
29
|
+
private _onClickOutside;
|
|
30
|
+
private _onFocusOut;
|
|
31
|
+
connectedCallback(): void;
|
|
32
|
+
disconnectedCallback(): void;
|
|
33
|
+
firstUpdated(): void;
|
|
34
|
+
willUpdate(): void;
|
|
35
|
+
updated(changed: PropertyValues): void;
|
|
36
|
+
formResetCallback(): void;
|
|
37
|
+
formDisabledCallback(disabled: boolean): void;
|
|
38
|
+
private _syncValidity;
|
|
39
|
+
private _syncOpenAttribute;
|
|
40
|
+
private _onTriggerSlotChange;
|
|
41
|
+
private _syncSelected;
|
|
42
|
+
private _ensureOptionIds;
|
|
43
|
+
private _onOptionRegister;
|
|
44
|
+
private _onOptionUnregister;
|
|
45
|
+
private _onSlotChange;
|
|
46
|
+
private _handleOptionClick;
|
|
47
|
+
private _onOptionUpdate;
|
|
48
|
+
private _handleOptionPointerOver;
|
|
49
|
+
private _handleOptionPointerDown;
|
|
50
|
+
private _onKeydown;
|
|
51
|
+
private _navigateActive;
|
|
52
|
+
private _open;
|
|
53
|
+
private _close;
|
|
54
|
+
private _dispatchOpenChange;
|
|
55
|
+
private _setInitialActiveOption;
|
|
56
|
+
private _syncActiveOption;
|
|
57
|
+
private _notifyValueChange;
|
|
58
|
+
private _syncScrollLock;
|
|
59
|
+
private _togglePopup;
|
|
60
|
+
private _initLocalOverlay;
|
|
61
|
+
private _openOverlay;
|
|
62
|
+
private _getDesiredWidth;
|
|
63
|
+
private _openPortal;
|
|
64
|
+
private _closeOverlay;
|
|
65
|
+
private _disposeOverlay;
|
|
66
|
+
private _reconfigureOverlay;
|
|
67
|
+
render(): import('lit').TemplateResult<1>;
|
|
68
|
+
readonly $events: {
|
|
69
|
+
input: Event;
|
|
70
|
+
change: Event;
|
|
71
|
+
'open-change': CustomEvent<{
|
|
72
|
+
open: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
declare global {
|
|
77
|
+
interface HTMLElementTagNameMap {
|
|
78
|
+
'web-ui-select': WebUiSelect;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -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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"}
|