@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,231 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import t from "../../assets/glass.js";
|
|
3
|
+
import { normalizeLiteral as n, normalizeNumber as r } from "../../shared/normalize/index.js";
|
|
4
|
+
import i from "../../assets/overlay-motion.js";
|
|
5
|
+
import { hideOverlayPresence as a, showOverlayPresence as o } from "../../shared/overlay/presence.js";
|
|
6
|
+
import { withOverlay as s } from "../../shared/overlay/overlay.js";
|
|
7
|
+
import { createOverlayPortal as c } from "../../shared/overlay/portal.js";
|
|
8
|
+
import l from "./style.js";
|
|
9
|
+
import { LitElement as u, html as d, unsafeCSS as f } from "lit";
|
|
10
|
+
import { customElement as p, property as m } from "lit/decorators.js";
|
|
11
|
+
//#region src/components/popover/index.ts
|
|
12
|
+
var h = [
|
|
13
|
+
"top",
|
|
14
|
+
"top-start",
|
|
15
|
+
"top-end",
|
|
16
|
+
"bottom",
|
|
17
|
+
"bottom-start",
|
|
18
|
+
"bottom-end",
|
|
19
|
+
"left",
|
|
20
|
+
"left-start",
|
|
21
|
+
"left-end",
|
|
22
|
+
"right",
|
|
23
|
+
"right-start",
|
|
24
|
+
"right-end"
|
|
25
|
+
], g = [
|
|
26
|
+
"click",
|
|
27
|
+
"hover",
|
|
28
|
+
"manual"
|
|
29
|
+
], _ = 0, v = class extends u {
|
|
30
|
+
constructor(...e) {
|
|
31
|
+
super(...e), this.open = !1, this.disabled = !1, this._placement = "bottom", this._offset = 8, this._trigger = "click", this.portal = !1, this._suppressEvent = !1, this._shouldOpenInstantly = !0, this._panelId = `wui-popover-panel-${++_}`, this._onTriggerClick = (e) => {
|
|
32
|
+
this.disabled || (clearTimeout(this._showTimer), clearTimeout(this._hideTimer), this.trigger !== "hover" && (this.open || (this._shouldOpenInstantly = e.detail === 0), this.toggle()));
|
|
33
|
+
}, this._onClickOutside = (e) => {
|
|
34
|
+
this.open && this.trigger !== "manual" && this.trigger !== "hover" && (e.target instanceof Node && this._portal?.panel.contains(e.target) || this._isInsideShadowRoot(e) || (this.open = !1));
|
|
35
|
+
}, this._onFocusOut = () => {
|
|
36
|
+
this.trigger !== "manual" && this.trigger !== "hover" && requestAnimationFrame(() => {
|
|
37
|
+
this.open && !this.matches(":focus-within") && !this._portal?.panel.matches(":focus-within") && (this.open = !1);
|
|
38
|
+
});
|
|
39
|
+
}, this._onKeydown = (e) => {
|
|
40
|
+
this.open && this.trigger !== "manual" && e.key === "Escape" && (this.open = !1, e.preventDefault());
|
|
41
|
+
}, this._onPointerEnter = (e) => {
|
|
42
|
+
e.pointerType !== "touch" && (this.disabled || this.trigger !== "hover" || (clearTimeout(this._hideTimer), this._showTimer = setTimeout(() => {
|
|
43
|
+
this._shouldOpenInstantly = !1, this.show();
|
|
44
|
+
}, 100)));
|
|
45
|
+
}, this._onPointerLeave = (e) => {
|
|
46
|
+
e.pointerType !== "touch" && (this.disabled || this.trigger !== "hover" || (clearTimeout(this._showTimer), this._hideTimer = setTimeout(() => this.close(), 100)));
|
|
47
|
+
}, this._onPanelPointerEnter = (e) => {
|
|
48
|
+
e.pointerType !== "touch" && this.trigger === "hover" && clearTimeout(this._hideTimer);
|
|
49
|
+
}, this._onPanelPointerLeave = (e) => {
|
|
50
|
+
e.pointerType !== "touch" && this.trigger === "hover" && (this._hideTimer = setTimeout(() => this.close(), 100));
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
static {
|
|
54
|
+
this.styles = [
|
|
55
|
+
f(t),
|
|
56
|
+
f(i),
|
|
57
|
+
f(l)
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
get placement() {
|
|
61
|
+
return this._placement;
|
|
62
|
+
}
|
|
63
|
+
set placement(e) {
|
|
64
|
+
let t = this._placement;
|
|
65
|
+
this._placement = n(e, h, "bottom"), this.requestUpdate("placement", t);
|
|
66
|
+
}
|
|
67
|
+
get offset() {
|
|
68
|
+
return this._offset;
|
|
69
|
+
}
|
|
70
|
+
set offset(e) {
|
|
71
|
+
let t = this._offset;
|
|
72
|
+
this._offset = r(e, 0, 100, 8), this.requestUpdate("offset", t);
|
|
73
|
+
}
|
|
74
|
+
get trigger() {
|
|
75
|
+
return this._trigger;
|
|
76
|
+
}
|
|
77
|
+
set trigger(e) {
|
|
78
|
+
let t = this._trigger;
|
|
79
|
+
this._trigger = n(e, g, "click"), this.requestUpdate("trigger", t);
|
|
80
|
+
}
|
|
81
|
+
get isOpen() {
|
|
82
|
+
return this.open;
|
|
83
|
+
}
|
|
84
|
+
connectedCallback() {
|
|
85
|
+
super.connectedCallback(), document.addEventListener("click", this._onClickOutside), document.addEventListener("keydown", this._onKeydown), this.addEventListener("focusout", this._onFocusOut), this._syncTriggerListeners();
|
|
86
|
+
}
|
|
87
|
+
disconnectedCallback() {
|
|
88
|
+
super.disconnectedCallback(), document.removeEventListener("click", this._onClickOutside), document.removeEventListener("keydown", this._onKeydown), this.removeEventListener("focusout", this._onFocusOut), this.removeEventListener("pointerenter", this._onPointerEnter), this.removeEventListener("pointerleave", this._onPointerLeave), clearTimeout(this._showTimer), clearTimeout(this._hideTimer), this._disposeOverlay();
|
|
89
|
+
}
|
|
90
|
+
firstUpdated() {
|
|
91
|
+
this._initLocalOverlay(), this.open && (requestAnimationFrame(() => this._openOverlay(this._shouldOpenInstantly)), this._shouldOpenInstantly = !0);
|
|
92
|
+
}
|
|
93
|
+
updated(e) {
|
|
94
|
+
if ((e.has("placement") || e.has("portal") || e.has("overlayContainer")) && requestAnimationFrame(() => this._reconfigureOverlay()), e.has("open")) if (this.open) {
|
|
95
|
+
let e = this._shouldOpenInstantly;
|
|
96
|
+
this._shouldOpenInstantly = !0, requestAnimationFrame(() => this._openOverlay(e)), this._dispatchChange(!0), this._focusPanel();
|
|
97
|
+
} else this._returnFocus(), this._closeOverlay(), this._suppressEvent || this._dispatchChange(!1);
|
|
98
|
+
e.has("trigger") && (this.removeEventListener("pointerenter", this._onPointerEnter), this.removeEventListener("pointerleave", this._onPointerLeave), clearTimeout(this._showTimer), clearTimeout(this._hideTimer), this._syncTriggerListeners());
|
|
99
|
+
}
|
|
100
|
+
show() {
|
|
101
|
+
this.disabled || this.open || (this._suppressEvent = !0, this.open = !0, this._suppressEvent = !1);
|
|
102
|
+
}
|
|
103
|
+
close() {
|
|
104
|
+
this.open && (this._suppressEvent = !0, this.open = !1, this._suppressEvent = !1);
|
|
105
|
+
}
|
|
106
|
+
toggle() {
|
|
107
|
+
this.open ? this.close() : this.show();
|
|
108
|
+
}
|
|
109
|
+
_isInsideShadowRoot(e) {
|
|
110
|
+
for (let t of e.composedPath()) if (t instanceof Node && t.getRootNode() === this.shadowRoot) return !0;
|
|
111
|
+
return !1;
|
|
112
|
+
}
|
|
113
|
+
_syncTriggerListeners() {
|
|
114
|
+
this.trigger === "hover" && (this.addEventListener("pointerenter", this._onPointerEnter), this.addEventListener("pointerleave", this._onPointerLeave));
|
|
115
|
+
}
|
|
116
|
+
_initLocalOverlay() {
|
|
117
|
+
let e = this.shadowRoot?.querySelector(".popover-trigger"), t = this.shadowRoot?.querySelector(".popover-panel");
|
|
118
|
+
!e || !t || (this._overlay = s.make({
|
|
119
|
+
anchor: e,
|
|
120
|
+
overlay: t,
|
|
121
|
+
placement: this.placement,
|
|
122
|
+
offset: this.offset
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
_openOverlay(e = !1) {
|
|
126
|
+
if (this.portal) this._openPortal(e);
|
|
127
|
+
else {
|
|
128
|
+
this._overlay?.open();
|
|
129
|
+
let t = this.shadowRoot?.querySelector(".popover-panel");
|
|
130
|
+
t && o(t, { isInstant: e });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
_openPortal(e = !1) {
|
|
134
|
+
if (this._portal) {
|
|
135
|
+
this._overlay?.open(), o(this._portal.panel, { isInstant: e });
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let n = this.shadowRoot?.querySelector(".popover-trigger");
|
|
139
|
+
if (!n) return;
|
|
140
|
+
let r = c({
|
|
141
|
+
container: this.overlayContainer,
|
|
142
|
+
target: this,
|
|
143
|
+
style: `${t}\n${i}\n${l}`,
|
|
144
|
+
className: "popover-panel portal wui-glass wui-floating-panel"
|
|
145
|
+
});
|
|
146
|
+
r.panel.id = this._panelId, r.panel.setAttribute("role", "dialog"), r.panel.tabIndex = -1, r.panel.addEventListener("pointerenter", this._onPanelPointerEnter), r.panel.addEventListener("pointerleave", this._onPanelPointerLeave), r.moveContent(Array.from(this.childNodes).filter((e) => !(e instanceof HTMLElement && e.slot === "trigger"))), this._portal = r, this._overlay = s.make({
|
|
147
|
+
anchor: n,
|
|
148
|
+
overlay: r.panel,
|
|
149
|
+
placement: this.placement,
|
|
150
|
+
offset: this.offset,
|
|
151
|
+
strategy: "fixed"
|
|
152
|
+
}), this._overlay.open(), o(r.panel, { isInstant: e });
|
|
153
|
+
}
|
|
154
|
+
async _closeOverlay() {
|
|
155
|
+
this._overlay?.close();
|
|
156
|
+
let e = this._portal?.panel ?? this.shadowRoot?.querySelector(".popover-panel");
|
|
157
|
+
e && !await a(e) || !this._portal || this.open || (this._portal.restoreContent(), this._portal.remove(), this._portal = void 0, this._overlay = void 0);
|
|
158
|
+
}
|
|
159
|
+
_disposeOverlay() {
|
|
160
|
+
this._overlay?.dispose(), this._overlay = void 0, this._portal?.restoreContent(), this._portal?.remove(), this._portal = void 0;
|
|
161
|
+
}
|
|
162
|
+
_reconfigureOverlay() {
|
|
163
|
+
let e = (this._portal?.panel ?? this.shadowRoot?.querySelector(".popover-panel"))?.dataset.wuiPresence === "entering";
|
|
164
|
+
this._disposeOverlay(), this.portal || this._initLocalOverlay(), this.open && this._openOverlay(!e);
|
|
165
|
+
}
|
|
166
|
+
_dispatchChange(e) {
|
|
167
|
+
this.dispatchEvent(new CustomEvent("open-change", {
|
|
168
|
+
detail: { open: e },
|
|
169
|
+
bubbles: !0,
|
|
170
|
+
composed: !0
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
_focusPanel() {
|
|
174
|
+
requestAnimationFrame(() => {
|
|
175
|
+
let e = (this._portal?.panel ?? this.shadowRoot?.querySelector(".popover-panel"))?.querySelector("[autofocus]");
|
|
176
|
+
e && !e.matches(":disabled, [disabled]") && e.focus();
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
_returnFocus() {
|
|
180
|
+
(this._portal?.panel ?? this.shadowRoot?.querySelector(".popover-panel"))?.matches(":focus-within") && this._queryTrigger()?.focus();
|
|
181
|
+
}
|
|
182
|
+
_queryTrigger() {
|
|
183
|
+
let e = (this.shadowRoot?.querySelector("slot[name=\"trigger\"]"))?.assignedElements()[0];
|
|
184
|
+
return e instanceof HTMLElement ? e : null;
|
|
185
|
+
}
|
|
186
|
+
render() {
|
|
187
|
+
return d`
|
|
188
|
+
<div class="popover-anchor">
|
|
189
|
+
<div
|
|
190
|
+
class="popover-trigger"
|
|
191
|
+
aria-expanded=${String(this.open)}
|
|
192
|
+
aria-controls=${this._panelId}
|
|
193
|
+
@click=${this._onTriggerClick}
|
|
194
|
+
>
|
|
195
|
+
<slot name="trigger"></slot>
|
|
196
|
+
</div>
|
|
197
|
+
<div
|
|
198
|
+
id=${this._panelId}
|
|
199
|
+
class="popover-panel wui-glass wui-floating-panel"
|
|
200
|
+
hidden
|
|
201
|
+
role="dialog"
|
|
202
|
+
tabindex="-1"
|
|
203
|
+
@pointerenter=${this._onPanelPointerEnter}
|
|
204
|
+
@pointerleave=${this._onPanelPointerLeave}
|
|
205
|
+
>
|
|
206
|
+
<slot></slot>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
`;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
e([m({
|
|
213
|
+
type: Boolean,
|
|
214
|
+
reflect: !0
|
|
215
|
+
})], v.prototype, "open", void 0), e([m({
|
|
216
|
+
type: Boolean,
|
|
217
|
+
reflect: !0
|
|
218
|
+
})], v.prototype, "disabled", void 0), e([m({
|
|
219
|
+
type: String,
|
|
220
|
+
reflect: !0
|
|
221
|
+
})], v.prototype, "placement", null), e([m({ type: Number })], v.prototype, "offset", null), e([m({
|
|
222
|
+
type: String,
|
|
223
|
+
reflect: !0
|
|
224
|
+
})], v.prototype, "trigger", null), e([m({
|
|
225
|
+
type: Boolean,
|
|
226
|
+
reflect: !0
|
|
227
|
+
})], v.prototype, "portal", void 0), e([m({ attribute: !1 })], v.prototype, "overlayContainer", void 0), v = e([p("web-ui-popover")], v);
|
|
228
|
+
//#endregion
|
|
229
|
+
export { v as WebUiPopover };
|
|
230
|
+
|
|
231
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/popover/index.ts"],"sourcesContent":["import type { Placement } from '@floating-ui/dom'\nimport { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport glass from '@/assets/glass.css?inline'\nimport overlayMotion from '@/assets/overlay-motion.css?inline'\nimport { normalizeLiteral, normalizeNumber } from '@/shared/normalize'\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'\n\nimport style from './style.css?inline'\n\nconst ALLOWED_PLACEMENTS = [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end'\n] as const\n\nconst ALLOWED_TRIGGERS = ['click', 'hover', 'manual'] as const\n\nlet popoverIdCounter = 0\n\n@customElement('web-ui-popover')\nexport class WebUiPopover extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(overlayMotion), unsafeCSS(style)]\n\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: Boolean, reflect: true }) disabled = false\n\n @property({ type: String, reflect: true })\n get placement(): Placement {\n return this._placement\n }\n set placement(v: string) {\n const old = this._placement\n this._placement = normalizeLiteral(v, ALLOWED_PLACEMENTS, 'bottom')\n this.requestUpdate('placement', old)\n }\n private _placement: Placement = 'bottom'\n\n @property({ type: Number })\n get offset(): number {\n return this._offset\n }\n set offset(v: number) {\n const old = this._offset\n this._offset = normalizeNumber(v, 0, 100, 8)\n this.requestUpdate('offset', old)\n }\n private _offset = 8\n\n @property({ type: String, reflect: true })\n get trigger(): 'click' | 'hover' | 'manual' {\n return this._trigger\n }\n set trigger(v: string) {\n const old = this._trigger\n this._trigger = normalizeLiteral(v, ALLOWED_TRIGGERS, 'click')\n this.requestUpdate('trigger', old)\n }\n private _trigger: 'click' | 'hover' | 'manual' = 'click'\n\n @property({ type: Boolean, reflect: true }) portal = false\n @property({ attribute: false }) overlayContainer?: OverlayContainer\n\n private _overlay?: OverlayApi & { anchor: HTMLElement; overlay: HTMLElement }\n private _showTimer?: ReturnType<typeof setTimeout>\n private _hideTimer?: ReturnType<typeof setTimeout>\n private _suppressEvent = false\n private _portal?: OverlayPortal\n private _shouldOpenInstantly = true\n\n private _panelId = `wui-popover-panel-${++popoverIdCounter}`\n\n /** 当前是否打开 */\n get isOpen(): boolean {\n return this.open\n }\n\n override connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._onClickOutside)\n document.addEventListener('keydown', this._onKeydown)\n this.addEventListener('focusout', this._onFocusOut)\n this._syncTriggerListeners()\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('click', this._onClickOutside)\n document.removeEventListener('keydown', this._onKeydown)\n this.removeEventListener('focusout', this._onFocusOut)\n this.removeEventListener('pointerenter', this._onPointerEnter)\n this.removeEventListener('pointerleave', this._onPointerLeave)\n clearTimeout(this._showTimer)\n clearTimeout(this._hideTimer)\n this._disposeOverlay()\n }\n\n override firstUpdated() {\n this._initLocalOverlay()\n if (this.open) {\n requestAnimationFrame(() => this._openOverlay(this._shouldOpenInstantly))\n this._shouldOpenInstantly = true\n }\n }\n\n protected override updated(changed: Map<string, unknown>) {\n if (changed.has('placement') || changed.has('portal') || changed.has('overlayContainer'))\n requestAnimationFrame(() => this._reconfigureOverlay())\n\n if (changed.has('open')) {\n if (this.open) {\n const isInstant = this._shouldOpenInstantly\n this._shouldOpenInstantly = true\n requestAnimationFrame(() => this._openOverlay(isInstant))\n this._dispatchChange(true)\n this._focusPanel()\n } else {\n this._returnFocus()\n void this._closeOverlay()\n if (!this._suppressEvent) this._dispatchChange(false)\n }\n }\n\n if (changed.has('trigger')) {\n this.removeEventListener('pointerenter', this._onPointerEnter)\n this.removeEventListener('pointerleave', this._onPointerLeave)\n clearTimeout(this._showTimer)\n clearTimeout(this._hideTimer)\n this._syncTriggerListeners()\n }\n }\n\n /** 打开 popover */\n show() {\n if (this.disabled || this.open) return\n this._suppressEvent = true\n this.open = true\n this._suppressEvent = false\n }\n\n /** 关闭 popover */\n close() {\n if (!this.open) return\n this._suppressEvent = true\n this.open = false\n this._suppressEvent = false\n }\n\n /** 切换 popover */\n toggle() {\n if (this.open) this.close()\n else this.show()\n }\n\n private _isInsideShadowRoot(e: MouseEvent): boolean {\n for (const node of e.composedPath()) {\n if (node instanceof Node && node.getRootNode() === this.shadowRoot) return true\n }\n return false\n }\n\n private _syncTriggerListeners() {\n if (this.trigger === 'hover') {\n this.addEventListener('pointerenter', this._onPointerEnter)\n this.addEventListener('pointerleave', this._onPointerLeave)\n }\n }\n\n private _initLocalOverlay() {\n const anchor = this.shadowRoot?.querySelector<HTMLElement>('.popover-trigger')\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n if (!anchor || !panel) return\n this._overlay = withOverlay.make({\n anchor,\n overlay: panel,\n placement: this.placement,\n offset: this.offset\n })\n }\n\n private _openOverlay(isInstant = false) {\n if (this.portal) this._openPortal(isInstant)\n else {\n this._overlay?.open()\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n if (panel) showOverlayPresence(panel, { isInstant })\n }\n }\n\n private _openPortal(isInstant = false) {\n if (this._portal) {\n this._overlay?.open()\n showOverlayPresence(this._portal.panel, { isInstant })\n return\n }\n const anchor = this.shadowRoot?.querySelector('.popover-trigger') as HTMLElement | null\n if (!anchor) return\n const portal = createOverlayPortal({\n container: this.overlayContainer,\n target: this,\n style: `${glass}\\n${overlayMotion}\\n${style}`,\n className: 'popover-panel portal wui-glass wui-floating-panel'\n })\n portal.panel.id = this._panelId\n portal.panel.setAttribute('role', 'dialog')\n portal.panel.tabIndex = -1\n portal.panel.addEventListener('pointerenter', this._onPanelPointerEnter)\n portal.panel.addEventListener('pointerleave', this._onPanelPointerLeave)\n portal.moveContent(\n Array.from(this.childNodes).filter(node => !(node instanceof HTMLElement && node.slot === 'trigger'))\n )\n this._portal = portal\n this._overlay = withOverlay.make({\n anchor,\n overlay: portal.panel,\n placement: this.placement,\n offset: this.offset,\n strategy: 'fixed'\n })\n this._overlay.open()\n showOverlayPresence(portal.panel, { isInstant })\n }\n\n private async _closeOverlay() {\n this._overlay?.close()\n const panel = this._portal?.panel ?? this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n if (panel && !(await hideOverlayPresence(panel))) return\n if (!this._portal || this.open) 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 const panel = this._portal?.panel ?? this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n const shouldAnimate = panel?.dataset.wuiPresence === 'entering'\n this._disposeOverlay()\n if (!this.portal) this._initLocalOverlay()\n // 已稳定显示的面板重新定位不应重播动效;正在入场的指针交互则保持原有动效。\n if (this.open) this._openOverlay(!shouldAnimate)\n }\n\n private _dispatchChange(open: boolean) {\n this.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n })\n )\n }\n\n private _focusPanel() {\n requestAnimationFrame(() => {\n const panel = this._portal?.panel ?? this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n const autofocus = panel?.querySelector<HTMLElement>('[autofocus]')\n if (autofocus && !autofocus.matches(':disabled, [disabled]')) autofocus.focus()\n })\n }\n\n private _returnFocus() {\n const panel = this._portal?.panel ?? this.shadowRoot?.querySelector<HTMLElement>('.popover-panel')\n if (!panel?.matches(':focus-within')) return\n const trigger = this._queryTrigger()\n trigger?.focus()\n }\n\n private _queryTrigger(): HTMLElement | null {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"trigger\"]')\n const el = slot?.assignedElements()[0]\n return el instanceof HTMLElement ? el : null\n }\n\n private _onTriggerClick = (event: MouseEvent) => {\n if (this.disabled) return\n clearTimeout(this._showTimer)\n clearTimeout(this._hideTimer)\n if (this.trigger === 'hover') return\n if (!this.open) this._shouldOpenInstantly = event.detail === 0\n this.toggle()\n }\n\n private _onClickOutside = (e: MouseEvent) => {\n if (!this.open) return\n if (this.trigger === 'manual' || this.trigger === 'hover') return\n if (e.target instanceof Node && this._portal?.panel.contains(e.target)) return\n if (this._isInsideShadowRoot(e)) return\n this.open = false\n }\n\n private _onFocusOut = () => {\n if (this.trigger === 'manual' || this.trigger === 'hover') return\n\n requestAnimationFrame(() => {\n if (this.open && !this.matches(':focus-within') && !this._portal?.panel.matches(':focus-within')) {\n this.open = false\n }\n })\n }\n\n private _onKeydown = (e: KeyboardEvent) => {\n if (!this.open) return\n if (this.trigger === 'manual') return\n if (e.key === 'Escape') {\n this.open = false\n e.preventDefault()\n }\n }\n\n private _onPointerEnter = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return\n if (this.disabled || this.trigger !== 'hover') return\n clearTimeout(this._hideTimer)\n this._showTimer = setTimeout(() => {\n this._shouldOpenInstantly = false\n this.show()\n }, 100)\n }\n\n private _onPointerLeave = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return\n if (this.disabled || this.trigger !== 'hover') return\n clearTimeout(this._showTimer)\n this._hideTimer = setTimeout(() => this.close(), 100)\n }\n\n private _onPanelPointerEnter = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return\n if (this.trigger !== 'hover') return\n clearTimeout(this._hideTimer)\n }\n\n private _onPanelPointerLeave = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return\n if (this.trigger !== 'hover') return\n this._hideTimer = setTimeout(() => this.close(), 100)\n }\n\n override render() {\n return html`\n <div class=\"popover-anchor\">\n <div\n class=\"popover-trigger\"\n aria-expanded=${String(this.open)}\n aria-controls=${this._panelId}\n @click=${this._onTriggerClick}\n >\n <slot name=\"trigger\"></slot>\n </div>\n <div\n id=${this._panelId}\n class=\"popover-panel wui-glass wui-floating-panel\"\n hidden\n role=\"dialog\"\n tabindex=\"-1\"\n @pointerenter=${this._onPanelPointerEnter}\n @pointerleave=${this._onPanelPointerLeave}\n >\n <slot></slot>\n </div>\n </div>\n `\n }\n\n declare readonly $events: {\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-popover': WebUiPopover\n }\n}\n"],"mappings":";;;;;;;;;;;AAeA,IAAM,IAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEM,IAAmB;CAAC;CAAS;CAAS;AAAQ,GAEhD,IAAmB,GAGV,IAAN,cAA2B,EAAW;;EAgUX,aA7TmB,KAAA,OAAA,IACI,KAAA,WAAA,IAWvB,KAAA,aAAA,UAWd,KAAA,UAAA,GAW+B,KAAA,WAAA,SAEI,KAAA,SAAA,IAM5B,KAAA,iBAAA,IAEM,KAAA,uBAAA,IAEZ,KAAA,WAAA,qBAAqB,EAAE,KAoNf,KAAA,mBAAA,MAAsB;GAC3C,KAAK,aACT,aAAa,KAAK,UAAU,GAC5B,aAAa,KAAK,UAAU,GACxB,KAAK,YAAY,YAChB,KAAK,SAAM,KAAK,uBAAuB,EAAM,WAAW,IAC7D,KAAK,OAAO;EACd,GAE2B,KAAA,mBAAA,MAAkB;GACtC,KAAK,QACN,KAAK,YAAY,YAAY,KAAK,YAAY,YAC9C,EAAE,kBAAkB,QAAQ,KAAK,SAAS,MAAM,SAAS,EAAE,MAAM,KACjE,KAAK,oBAAoB,CAAC,MAC9B,KAAK,OAAO;EACd,GAE4B,KAAA,oBAAA;GACtB,KAAK,YAAY,YAAY,KAAK,YAAY,WAElD,4BAA4B;IAC1B,AAAI,KAAK,QAAQ,CAAC,KAAK,QAAQ,eAAe,KAAK,CAAC,KAAK,SAAS,MAAM,QAAQ,eAAe,MAC7F,KAAK,OAAO;GAEhB,CAAC;EACH,GAEsB,KAAA,cAAA,MAAqB;GACpC,KAAK,QACN,KAAK,YAAY,YACjB,EAAE,QAAQ,aACZ,KAAK,OAAO,IACZ,EAAE,eAAe;EAErB,GAE2B,KAAA,mBAAA,MAAoB;GACzC,EAAE,gBAAgB,YAClB,KAAK,YAAY,KAAK,YAAY,YACtC,aAAa,KAAK,UAAU,GAC5B,KAAK,aAAa,iBAAiB;IAEjC,AADA,KAAK,uBAAuB,IAC5B,KAAK,KAAK;GACZ,GAAG,GAAG;EACR,GAE2B,KAAA,mBAAA,MAAoB;GACzC,EAAE,gBAAgB,YAClB,KAAK,YAAY,KAAK,YAAY,YACtC,aAAa,KAAK,UAAU,GAC5B,KAAK,aAAa,iBAAiB,KAAK,MAAM,GAAG,GAAG;EACtD,GAEgC,KAAA,wBAAA,MAAoB;GAC9C,EAAE,gBAAgB,WAClB,KAAK,YAAY,WACrB,aAAa,KAAK,UAAU;EAC9B,GAEgC,KAAA,wBAAA,MAAoB;GAC9C,EAAE,gBAAgB,WAClB,KAAK,YAAY,YACrB,KAAK,aAAa,iBAAiB,KAAK,MAAM,GAAG,GAAG;EACtD;;;EAnUyB,KAAA,SAAA;GAAC,EAAU,CAAK;GAAG,EAAU,CAAa;GAAG,EAAU,CAAK;EAAC;;CAKtF,IACI,YAAuB;EACzB,OAAO,KAAK;CACd;CACA,IAAI,UAAU,GAAW;EACvB,IAAM,IAAM,KAAK;EAEjB,AADA,KAAK,aAAa,EAAiB,GAAG,GAAoB,QAAQ,GAClE,KAAK,cAAc,aAAa,CAAG;CACrC;CAGA,IACI,SAAiB;EACnB,OAAO,KAAK;CACd;CACA,IAAI,OAAO,GAAW;EACpB,IAAM,IAAM,KAAK;EAEjB,AADA,KAAK,UAAU,EAAgB,GAAG,GAAG,KAAK,CAAC,GAC3C,KAAK,cAAc,UAAU,CAAG;CAClC;CAGA,IACI,UAAwC;EAC1C,OAAO,KAAK;CACd;CACA,IAAI,QAAQ,GAAW;EACrB,IAAM,IAAM,KAAK;EAEjB,AADA,KAAK,WAAW,EAAiB,GAAG,GAAkB,OAAO,GAC7D,KAAK,cAAc,WAAW,CAAG;CACnC;CAgBA,IAAI,SAAkB;EACpB,OAAO,KAAK;CACd;CAEA,oBAA6B;EAK3B,AAJA,MAAM,kBAAkB,GACxB,SAAS,iBAAiB,SAAS,KAAK,eAAe,GACvD,SAAS,iBAAiB,WAAW,KAAK,UAAU,GACpD,KAAK,iBAAiB,YAAY,KAAK,WAAW,GAClD,KAAK,sBAAsB;CAC7B;CAEA,uBAAgC;EAS9B,AARA,MAAM,qBAAqB,GAC3B,SAAS,oBAAoB,SAAS,KAAK,eAAe,GAC1D,SAAS,oBAAoB,WAAW,KAAK,UAAU,GACvD,KAAK,oBAAoB,YAAY,KAAK,WAAW,GACrD,KAAK,oBAAoB,gBAAgB,KAAK,eAAe,GAC7D,KAAK,oBAAoB,gBAAgB,KAAK,eAAe,GAC7D,aAAa,KAAK,UAAU,GAC5B,aAAa,KAAK,UAAU,GAC5B,KAAK,gBAAgB;CACvB;CAEA,eAAwB;EAEtB,AADA,KAAK,kBAAkB,GACnB,KAAK,SACP,4BAA4B,KAAK,aAAa,KAAK,oBAAoB,CAAC,GACxE,KAAK,uBAAuB;CAEhC;CAEA,QAA2B,GAA+B;EAIxD,KAHI,EAAQ,IAAI,WAAW,KAAK,EAAQ,IAAI,QAAQ,KAAK,EAAQ,IAAI,kBAAkB,MACrF,4BAA4B,KAAK,oBAAoB,CAAC,GAEpD,EAAQ,IAAI,MAAM,GACpB,IAAI,KAAK,MAAM;GACb,IAAM,IAAY,KAAK;GAIvB,AAHA,KAAK,uBAAuB,IAC5B,4BAA4B,KAAK,aAAa,CAAS,CAAC,GACxD,KAAK,gBAAgB,EAAI,GACzB,KAAK,YAAY;EACnB,OAGE,AAFA,KAAK,aAAa,GAClB,KAAU,cAAc,GACnB,KAAK,kBAAgB,KAAK,gBAAgB,EAAK;EAIxD,AAAI,EAAQ,IAAI,SAAS,MACvB,KAAK,oBAAoB,gBAAgB,KAAK,eAAe,GAC7D,KAAK,oBAAoB,gBAAgB,KAAK,eAAe,GAC7D,aAAa,KAAK,UAAU,GAC5B,aAAa,KAAK,UAAU,GAC5B,KAAK,sBAAsB;CAE/B;CAGA,OAAO;EACD,KAAK,YAAY,KAAK,SAC1B,KAAK,iBAAiB,IACtB,KAAK,OAAO,IACZ,KAAK,iBAAiB;CACxB;CAGA,QAAQ;EACD,KAAK,SACV,KAAK,iBAAiB,IACtB,KAAK,OAAO,IACZ,KAAK,iBAAiB;CACxB;CAGA,SAAS;EACP,AAAI,KAAK,OAAM,KAAK,MAAM,IACrB,KAAK,KAAK;CACjB;CAEA,oBAA4B,GAAwB;EAClD,KAAK,IAAM,KAAQ,EAAE,aAAa,GAChC,IAAI,aAAgB,QAAQ,EAAK,YAAY,MAAM,KAAK,YAAY,OAAO;EAE7E,OAAO;CACT;CAEA,wBAAgC;EAC9B,AAAI,KAAK,YAAY,YACnB,KAAK,iBAAiB,gBAAgB,KAAK,eAAe,GAC1D,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;CAE9D;CAEA,oBAA4B;EAC1B,IAAM,IAAS,KAAK,YAAY,cAA2B,kBAAkB,GACvE,IAAQ,KAAK,YAAY,cAA2B,gBAAgB;EACtE,CAAC,KAAU,CAAC,MAChB,KAAK,WAAW,EAAY,KAAK;GAC/B;GACA,SAAS;GACT,WAAW,KAAK;GAChB,QAAQ,KAAK;EACf,CAAC;CACH;CAEA,aAAqB,IAAY,IAAO;EACtC,IAAI,KAAK,QAAQ,KAAK,YAAY,CAAS;OACtC;GACH,KAAK,UAAU,KAAK;GACpB,IAAM,IAAQ,KAAK,YAAY,cAA2B,gBAAgB;GAC1E,AAAI,KAAO,EAAoB,GAAO,EAAE,aAAU,CAAC;EACrD;CACF;CAEA,YAAoB,IAAY,IAAO;EACrC,IAAI,KAAK,SAAS;GAEhB,AADA,KAAK,UAAU,KAAK,GACpB,EAAoB,KAAK,QAAQ,OAAO,EAAE,aAAU,CAAC;GACrD;EACF;EACA,IAAM,IAAS,KAAK,YAAY,cAAc,kBAAkB;EAChE,IAAI,CAAC,GAAQ;EACb,IAAM,IAAS,EAAoB;GACjC,WAAW,KAAK;GAChB,QAAQ;GACR,OAAO,GAAG,EAAM,IAAI,EAAc,IAAI;GACtC,WAAW;EACb,CAAC;EAkBD,AAjBA,EAAO,MAAM,KAAK,KAAK,UACvB,EAAO,MAAM,aAAa,QAAQ,QAAQ,GAC1C,EAAO,MAAM,WAAW,IACxB,EAAO,MAAM,iBAAiB,gBAAgB,KAAK,oBAAoB,GACvE,EAAO,MAAM,iBAAiB,gBAAgB,KAAK,oBAAoB,GACvE,EAAO,YACL,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC,QAAO,MAAQ,EAAE,aAAgB,eAAe,EAAK,SAAS,UAAU,CACtG,GACA,KAAK,UAAU,GACf,KAAK,WAAW,EAAY,KAAK;GAC/B;GACA,SAAS,EAAO;GAChB,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,UAAU;EACZ,CAAC,GACD,KAAK,SAAS,KAAK,GACnB,EAAoB,EAAO,OAAO,EAAE,aAAU,CAAC;CACjD;CAEA,MAAc,gBAAgB;EAC5B,KAAK,UAAU,MAAM;EACrB,IAAM,IAAQ,KAAK,SAAS,SAAS,KAAK,YAAY,cAA2B,gBAAgB;EAC7F,KAAS,CAAE,MAAM,EAAoB,CAAK,KAC1C,CAAC,KAAK,WAAW,KAAK,SAC1B,KAAK,QAAQ,eAAe,GAC5B,KAAK,QAAQ,OAAO,GACpB,KAAK,UAAU,KAAA,GACf,KAAK,WAAW,KAAA;CAClB;CAEA,kBAA0B;EAKxB,AAJA,KAAK,UAAU,QAAQ,GACvB,KAAK,WAAW,KAAA,GAChB,KAAK,SAAS,eAAe,GAC7B,KAAK,SAAS,OAAO,GACrB,KAAK,UAAU,KAAA;CACjB;CAEA,sBAA8B;EAE5B,IAAM,KADQ,KAAK,SAAS,SAAS,KAAK,YAAY,cAA2B,gBAAgB,EAAA,EACpE,QAAQ,gBAAgB;EAIrD,AAHA,KAAK,gBAAgB,GAChB,KAAK,UAAQ,KAAK,kBAAkB,GAErC,KAAK,QAAM,KAAK,aAAa,CAAC,CAAa;CACjD;CAEA,gBAAwB,GAAe;EACrC,KAAK,cACH,IAAI,YAAY,eAAe;GAC7B,QAAQ,EAAE,QAAK;GACf,SAAS;GACT,UAAU;EACZ,CAAC,CACH;CACF;CAEA,cAAsB;EACpB,4BAA4B;GAE1B,IAAM,KADQ,KAAK,SAAS,SAAS,KAAK,YAAY,cAA2B,gBAAgB,EAAA,EACxE,cAA2B,aAAa;GACjE,AAAI,KAAa,CAAC,EAAU,QAAQ,uBAAuB,KAAG,EAAU,MAAM;EAChF,CAAC;CACH;CAEA,eAAuB;EAEjB,CADU,KAAK,SAAS,SAAS,KAAK,YAAY,cAA2B,gBAAgB,EAAA,EACrF,QAAQ,eAAe,KAEnC,KADqB,cACrB,CAAA,EAAS,MAAM;CACjB;CAEA,gBAA4C;EAE1C,IAAM,KADO,KAAK,YAAY,cAA+B,wBAAsB,EAAA,EAClE,iBAAiB,CAAC,CAAC;EACpC,OAAO,aAAc,cAAc,IAAK;CAC1C;CAmEA,SAAkB;EAChB,OAAO,CAAI;;;;0BAIW,OAAO,KAAK,IAAI,EAAE;0BAClB,KAAK,SAAS;mBACrB,KAAK,gBAAgB;;;;;eAKzB,KAAK,SAAS;;;;;0BAKH,KAAK,qBAAqB;0BAC1B,KAAK,qBAAqB;;;;;;CAMlD;AAKF;AAhWG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,GACzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAEzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,IAAA,GAWxC,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,IAAA,GAWzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,IAAA,GAWxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GACzC,EAAA,CAAA,EAAS,EAAE,WAAW,GAAM,CAAC,CAAA,GAAA,EAAA,WAAA,oBAAA,KAAA,CAAA,GAzC/B,IAAA,EAAA,CAAA,EAAc,gBAAgB,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/popover/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-flex}:host([disabled]){cursor:not-allowed}.popover-trigger{display:inline-flex}.popover-anchor{display:inline-flex;position:relative}.popover-panel{--wui-glass-shadow:var(--wui-shadow-pop,0 3px 9px #00000045);z-index:var(--wui-layer-local-overlay,1);box-sizing:border-box;width:max-content;max-width:min(90vw,400px);font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);background-color:var(--wui-color-surface-overlay,#f6f6f6e0);border-radius:20px;padding:8px 12px;line-height:1.5;position:absolute;top:-9999px;left:-9999px}.popover-panel:where([hidden]){display:none}.popover-panel:focus-visible{outline:2px solid var(--wui-focus-ring,#08f6);outline-offset:2px}.popover-panel.portal{z-index:var(--wui-layer-menu,100);position:fixed}:host([portal]) .popover-panel{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/popover/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-flex;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.popover-trigger {\n display: inline-flex;\n}\n\n.popover-anchor {\n position: relative;\n display: inline-flex;\n}\n\n.popover-panel {\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 top: -9999px;\n left: -9999px;\n\n box-sizing: border-box;\n width: max-content;\n max-width: min(90vw, 400px);\n padding: 8px 12px;\n border-radius: 20px;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1.5;\n color: var(--wui-color-text, #1b1b1b);\n\n background-color: var(--wui-color-surface-overlay, rgb(246 246 246 / 0.88));\n\n &:where([hidden]) {\n display: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n.popover-panel.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n}\n\n:host([portal]) .popover-panel {\n display: none;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiRadio extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult;
|
|
4
|
+
static formAssociated: boolean;
|
|
5
|
+
/** 内部表单关联实例(connectedCallback 中初始化) */
|
|
6
|
+
private _internals?;
|
|
7
|
+
private _formDisabled;
|
|
8
|
+
private _groupDisabled;
|
|
9
|
+
/** 内部 checked 状态,通过 getter/setter 暴露为公共 API */
|
|
10
|
+
private _checked;
|
|
11
|
+
get checked(): boolean;
|
|
12
|
+
set checked(v: boolean);
|
|
13
|
+
value: string;
|
|
14
|
+
name: string;
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
required: boolean;
|
|
17
|
+
private get _isDisabled();
|
|
18
|
+
private get _isManagedByGroup();
|
|
19
|
+
setGroupDisabled(disabled: boolean): void;
|
|
20
|
+
connectedCallback(): void;
|
|
21
|
+
formResetCallback(): void;
|
|
22
|
+
formDisabledCallback(disabled: boolean): void;
|
|
23
|
+
updated(): void;
|
|
24
|
+
private _syncFormValue;
|
|
25
|
+
private _syncValidity;
|
|
26
|
+
/** 用户点击选中(已选中时不重复触发) */
|
|
27
|
+
private handleClick;
|
|
28
|
+
private handleKeyDown;
|
|
29
|
+
render(): import('lit').TemplateResult<1>;
|
|
30
|
+
readonly $events: {
|
|
31
|
+
input: Event;
|
|
32
|
+
change: Event;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
declare global {
|
|
36
|
+
interface HTMLElementTagNameMap {
|
|
37
|
+
'web-ui-radio': WebUiRadio;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
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, state as s } from "lit/decorators.js";
|
|
5
|
+
import { classMap as c } from "lit/directives/class-map.js";
|
|
6
|
+
//#region src/components/radio/index.ts
|
|
7
|
+
var l = class extends n {
|
|
8
|
+
constructor(...e) {
|
|
9
|
+
super(...e), this._formDisabled = !1, this._groupDisabled = !1, this._checked = !1, this.value = "", this.name = "", this.disabled = !1, this.required = !1;
|
|
10
|
+
}
|
|
11
|
+
static {
|
|
12
|
+
this.styles = i(t);
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.formAssociated = !0;
|
|
16
|
+
}
|
|
17
|
+
get checked() {
|
|
18
|
+
return this._checked;
|
|
19
|
+
}
|
|
20
|
+
set checked(e) {
|
|
21
|
+
let t = this._checked;
|
|
22
|
+
this._checked = e, this._syncFormValue(), this.requestUpdate("checked", t);
|
|
23
|
+
}
|
|
24
|
+
get _isDisabled() {
|
|
25
|
+
return this.disabled || this._formDisabled || this._groupDisabled;
|
|
26
|
+
}
|
|
27
|
+
get _isManagedByGroup() {
|
|
28
|
+
return this.closest("web-ui-radio-group") !== null;
|
|
29
|
+
}
|
|
30
|
+
setGroupDisabled(e) {
|
|
31
|
+
this._groupDisabled = e;
|
|
32
|
+
}
|
|
33
|
+
connectedCallback() {
|
|
34
|
+
super.connectedCallback(), !this._internals && (this._internals = this.attachInternals(), this.hasAttribute("checked") && (this._checked = !0), this._syncFormValue());
|
|
35
|
+
}
|
|
36
|
+
formResetCallback() {
|
|
37
|
+
this.checked = this.hasAttribute("checked");
|
|
38
|
+
}
|
|
39
|
+
formDisabledCallback(e) {
|
|
40
|
+
this._formDisabled = e;
|
|
41
|
+
}
|
|
42
|
+
updated() {
|
|
43
|
+
this._syncFormValue(), this._syncValidity();
|
|
44
|
+
}
|
|
45
|
+
_syncFormValue() {
|
|
46
|
+
this._internals?.setFormValue?.(!this._isManagedByGroup && this._checked ? this.value || "on" : null);
|
|
47
|
+
}
|
|
48
|
+
_syncValidity() {
|
|
49
|
+
if (!(!this._internals || typeof this._internals.setValidity != "function")) {
|
|
50
|
+
if (this._isDisabled || this._isManagedByGroup || !this.required || this._checked) {
|
|
51
|
+
this._internals.setValidity({});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this._internals.setValidity({ valueMissing: !0 }, "请选择一项");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
handleClick() {
|
|
58
|
+
this._isDisabled || this._checked || (this._checked = !0, this._syncFormValue(), this.requestUpdate("checked", !1), this.dispatchEvent(new Event("input", {
|
|
59
|
+
bubbles: !0,
|
|
60
|
+
composed: !0
|
|
61
|
+
})), this.dispatchEvent(new Event("change", {
|
|
62
|
+
bubbles: !0,
|
|
63
|
+
composed: !0
|
|
64
|
+
})));
|
|
65
|
+
}
|
|
66
|
+
handleKeyDown(e) {
|
|
67
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), this.handleClick());
|
|
68
|
+
}
|
|
69
|
+
render() {
|
|
70
|
+
return r`
|
|
71
|
+
<label
|
|
72
|
+
class=${c({
|
|
73
|
+
"wui-radio": !0,
|
|
74
|
+
"is-checked": this._checked,
|
|
75
|
+
"is-disabled": this._isDisabled
|
|
76
|
+
})}
|
|
77
|
+
tabindex="0"
|
|
78
|
+
role="radio"
|
|
79
|
+
aria-checked=${String(this._checked)}
|
|
80
|
+
aria-disabled=${String(this._isDisabled)}
|
|
81
|
+
@click=${this.handleClick}
|
|
82
|
+
@keydown=${this.handleKeyDown}
|
|
83
|
+
>
|
|
84
|
+
<span class="wui-radio-circle">
|
|
85
|
+
<span class="wui-radio-dot"></span>
|
|
86
|
+
</span>
|
|
87
|
+
<span class="wui-radio-label"><slot></slot></span>
|
|
88
|
+
</label>
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
e([s()], l.prototype, "_formDisabled", void 0), e([s()], l.prototype, "_groupDisabled", void 0), e([s()], l.prototype, "_checked", void 0), e([o({ type: String })], l.prototype, "value", void 0), e([o({
|
|
93
|
+
type: String,
|
|
94
|
+
reflect: !0
|
|
95
|
+
})], l.prototype, "name", void 0), e([o({
|
|
96
|
+
type: Boolean,
|
|
97
|
+
reflect: !0
|
|
98
|
+
})], l.prototype, "disabled", void 0), e([o({
|
|
99
|
+
type: Boolean,
|
|
100
|
+
reflect: !0
|
|
101
|
+
})], l.prototype, "required", void 0), l = e([a("web-ui-radio")], l);
|
|
102
|
+
//#endregion
|
|
103
|
+
export { l as WebUiRadio };
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio')\nexport class WebUiRadio extends LitElement {\n static override styles = unsafeCSS(style)\n static formAssociated = true\n\n /** 内部表单关联实例(connectedCallback 中初始化) */\n private _internals?: ElementInternals\n @state() private _formDisabled = false\n @state() private _groupDisabled = false\n\n /** 内部 checked 状态,通过 getter/setter 暴露为公共 API */\n @state() private _checked = false\n\n get checked(): boolean {\n return this._checked\n }\n\n set checked(v: boolean) {\n const old = this._checked\n this._checked = v\n this._syncFormValue()\n this.requestUpdate('checked', old)\n }\n\n @property({ type: String }) value = ''\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 get _isDisabled(): boolean {\n return this.disabled || this._formDisabled || this._groupDisabled\n }\n\n private get _isManagedByGroup(): boolean {\n return this.closest('web-ui-radio-group') !== null\n }\n\n setGroupDisabled(disabled: boolean) {\n this._groupDisabled = disabled\n }\n\n override connectedCallback() {\n super.connectedCallback()\n if (this._internals) return\n this._internals = this.attachInternals()\n if (this.hasAttribute('checked')) {\n this._checked = true\n }\n this._syncFormValue()\n }\n\n formResetCallback() {\n this.checked = this.hasAttribute('checked')\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n override updated() {\n this._syncFormValue()\n this._syncValidity()\n }\n\n private _syncFormValue() {\n this._internals?.setFormValue?.(!this._isManagedByGroup && this._checked ? this.value || 'on' : null)\n }\n\n private _syncValidity() {\n if (!this._internals || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || this._isManagedByGroup || !this.required || this._checked) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n /** 用户点击选中(已选中时不重复触发) */\n private handleClick() {\n if (this._isDisabled || this._checked) return\n this._checked = true\n this._syncFormValue()\n this.requestUpdate('checked', false)\n this.dispatchEvent(new Event('input', { bubbles: true, composed: 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-radio': true,\n 'is-checked': this._checked,\n 'is-disabled': this._isDisabled\n }\n\n return html`\n <label\n class=${classMap(cls)}\n tabindex=\"0\"\n role=\"radio\"\n aria-checked=${String(this._checked)}\n aria-disabled=${String(this._isDisabled)}\n @click=${this.handleClick}\n @keydown=${this.handleKeyDown}\n >\n <span class=\"wui-radio-circle\">\n <span class=\"wui-radio-dot\"></span>\n </span>\n <span class=\"wui-radio-label\"><slot></slot></span>\n </label>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio': WebUiRadio\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/radio/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{cursor:pointer;display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.wui-radio{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);align-items:center;gap:10px;line-height:1;display:inline-flex}.wui-radio:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px;border-radius:2147483647px}:host([disabled]) .wui-radio{cursor:not-allowed;color:var(--wui-color-text-muted,#6a6a6a)}.wui-radio-circle{background-color:var(--wui-color-surface-raised,#f2f2f7);border-radius:2147483647px;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;transition:background-color .2s,border-color .2s;display:flex}.is-checked .wui-radio-circle{background-color:var(--wui-color-accent,#08f)}.wui-radio-dot{opacity:0;background-color:var(--wui-color-surface,#fff);width:8px;height:8px;transition:opacity var(--wui-duration-fast,.16s) ease, transform var(--wui-duration-fast,.16s) var(--wui-ease-out,cubic-bezier(.23, 1, .32, 1));border-radius:2147483647px;transform:scale(.85);box-shadow:inset 0 -1px 2px #0000001f,inset 0 1px 2px #ffffff80,0 0 4px #0088ff4d}.is-checked .wui-radio-dot{opacity:1;transform:scale(1)}.wui-radio-label{pointer-events:none}@media (prefers-reduced-motion:reduce){.wui-radio-dot,.is-checked .wui-radio-dot{transform: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/radio/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n cursor: pointer;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-radio {\n cursor: pointer;\n user-select: none;\n\n display: inline-flex;\n gap: 10px;\n align-items: center;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1;\n color: var(--wui-color-text, #1b1b1b);\n\n &:focus-visible {\n border-radius: calc(infinity * 1px);\n outline: 3px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n:host([disabled]) .wui-radio {\n cursor: not-allowed;\n color: var(--wui-color-text-muted, #6a6a6a);\n}\n\n.wui-radio-circle {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 18px;\n height: 18px;\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-raised, #f2f2f7);\n\n transition:\n background-color 0.2s ease,\n border-color 0.2s ease;\n}\n\n.is-checked .wui-radio-circle {\n background-color: var(--wui-color-accent, #08f);\n}\n\n.wui-radio-dot {\n transform: scale(0.85);\n\n width: 8px;\n height: 8px;\n border-radius: calc(infinity * 1px);\n\n opacity: 0;\n background-color: var(--wui-color-surface, #fff);\n box-shadow:\n inset 0 -1px 2px rgb(0 0 0 / 0.12),\n inset 0 1px 2px rgb(255 255 255 / 0.5),\n 0 0 4px rgb(0 136 255 / 0.3);\n\n transition:\n opacity var(--wui-duration-fast, 160ms) ease,\n transform var(--wui-duration-fast, 160ms) var(--wui-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n\n.is-checked .wui-radio-dot {\n transform: scale(1);\n opacity: 1;\n}\n\n.wui-radio-label {\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wui-radio-dot,\n .is-checked .wui-radio-dot {\n transform: none;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiRadioGroup extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult;
|
|
4
|
+
static formAssociated: boolean;
|
|
5
|
+
name: string;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
required: boolean;
|
|
8
|
+
private _internals?;
|
|
9
|
+
private _value;
|
|
10
|
+
private _formDisabled;
|
|
11
|
+
private _initialValue;
|
|
12
|
+
get value(): string;
|
|
13
|
+
set value(v: string);
|
|
14
|
+
private get _isDisabled();
|
|
15
|
+
connectedCallback(): void;
|
|
16
|
+
disconnectedCallback(): void;
|
|
17
|
+
updated(changed: Map<string, unknown>): void;
|
|
18
|
+
formResetCallback(): void;
|
|
19
|
+
formDisabledCallback(disabled: boolean): void;
|
|
20
|
+
private _syncFormValue;
|
|
21
|
+
private _syncValidity;
|
|
22
|
+
private _syncValueToChildren;
|
|
23
|
+
private _handleChildChange;
|
|
24
|
+
private _handleSlotChange;
|
|
25
|
+
render(): import('lit').TemplateResult<1>;
|
|
26
|
+
readonly $events: {
|
|
27
|
+
input: Event;
|
|
28
|
+
change: Event;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
declare global {
|
|
32
|
+
interface HTMLElementTagNameMap {
|
|
33
|
+
'web-ui-radio-group': WebUiRadioGroup;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
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, state as s } from "lit/decorators.js";
|
|
5
|
+
//#region src/components/radio-group/index.ts
|
|
6
|
+
var c = class extends n {
|
|
7
|
+
constructor(...e) {
|
|
8
|
+
super(...e), this.name = "", this.disabled = !1, this.required = !1, this._value = "", this._formDisabled = !1, this._initialValue = "";
|
|
9
|
+
}
|
|
10
|
+
static {
|
|
11
|
+
this.styles = i(t);
|
|
12
|
+
}
|
|
13
|
+
static {
|
|
14
|
+
this.formAssociated = !0;
|
|
15
|
+
}
|
|
16
|
+
get value() {
|
|
17
|
+
return this._value;
|
|
18
|
+
}
|
|
19
|
+
set value(e) {
|
|
20
|
+
let t = this._value;
|
|
21
|
+
this._value = e, this._syncFormValue(), this.requestUpdate("value", t);
|
|
22
|
+
}
|
|
23
|
+
get _isDisabled() {
|
|
24
|
+
return this.disabled || this._formDisabled;
|
|
25
|
+
}
|
|
26
|
+
connectedCallback() {
|
|
27
|
+
super.connectedCallback(), this._internals ||= this.attachInternals();
|
|
28
|
+
let e = this.getAttribute("value");
|
|
29
|
+
e !== null && (this.value = e), this._initialValue = this._value, this.addEventListener("change", this._handleChildChange);
|
|
30
|
+
}
|
|
31
|
+
disconnectedCallback() {
|
|
32
|
+
super.disconnectedCallback(), this.removeEventListener("change", this._handleChildChange);
|
|
33
|
+
}
|
|
34
|
+
updated(e) {
|
|
35
|
+
(e.has("value") || e.has("disabled") || e.has("_formDisabled")) && this._syncValueToChildren(), this._syncFormValue(), this._syncValidity();
|
|
36
|
+
}
|
|
37
|
+
formResetCallback() {
|
|
38
|
+
this.value = this._initialValue;
|
|
39
|
+
}
|
|
40
|
+
formDisabledCallback(e) {
|
|
41
|
+
this._formDisabled = e;
|
|
42
|
+
}
|
|
43
|
+
_syncFormValue() {
|
|
44
|
+
this._internals?.setFormValue?.(this.name && this._value ? this._value : null);
|
|
45
|
+
}
|
|
46
|
+
_syncValidity() {
|
|
47
|
+
!this._internals || typeof this._internals.setValidity != "function" || (this._isDisabled || !this.required || this._value ? this._internals.setValidity({}) : this._internals.setValidity({ valueMissing: !0 }, "请选择一项"));
|
|
48
|
+
}
|
|
49
|
+
_syncValueToChildren() {
|
|
50
|
+
this.querySelectorAll("web-ui-radio").forEach((e) => {
|
|
51
|
+
e.checked = e.value === this._value, e.setGroupDisabled(this._isDisabled);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
_handleChildChange(e) {
|
|
55
|
+
if (this._isDisabled) return;
|
|
56
|
+
let t = e.target;
|
|
57
|
+
if (!t.matches?.("web-ui-radio")) return;
|
|
58
|
+
let n = t;
|
|
59
|
+
!n.checked || 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
|
+
_handleSlotChange() {
|
|
68
|
+
this._syncValueToChildren();
|
|
69
|
+
}
|
|
70
|
+
render() {
|
|
71
|
+
return r`<div class="wui-radio-group"><slot @slotchange=${this._handleSlotChange}></slot></div>`;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
e([o({
|
|
75
|
+
type: String,
|
|
76
|
+
reflect: !0
|
|
77
|
+
})], c.prototype, "name", void 0), e([o({
|
|
78
|
+
type: Boolean,
|
|
79
|
+
reflect: !0
|
|
80
|
+
})], c.prototype, "disabled", void 0), e([o({
|
|
81
|
+
type: Boolean,
|
|
82
|
+
reflect: !0
|
|
83
|
+
})], c.prototype, "required", void 0), e([s()], c.prototype, "_value", void 0), e([s()], c.prototype, "_formDisabled", void 0), c = e([a("web-ui-radio-group")], c);
|
|
84
|
+
//#endregion
|
|
85
|
+
export { c as WebUiRadioGroup };
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio-group/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport type { WebUiRadio } from '../radio'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio-group')\nexport class WebUiRadioGroup extends LitElement {\n static override styles = 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 @state() private _formDisabled = false\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._syncFormValue()\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled\n }\n\n override connectedCallback() {\n super.connectedCallback()\n if (!this._internals) this._internals = this.attachInternals()\n const attributeValue = this.getAttribute('value')\n if (attributeValue !== null) this.value = attributeValue\n this._initialValue = this._value\n this.addEventListener('change', this._handleChildChange)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('change', this._handleChildChange)\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') || changed.has('disabled') || changed.has('_formDisabled')) this._syncValueToChildren()\n this._syncFormValue()\n this._syncValidity()\n }\n\n formResetCallback() {\n this.value = this._initialValue\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n private _syncFormValue() {\n this._internals?.setFormValue?.(this.name && this._value ? this._value : null)\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 _syncValueToChildren() {\n this.querySelectorAll<WebUiRadio>('web-ui-radio').forEach(radio => {\n radio.checked = radio.value === this._value\n radio.setGroupDisabled(this._isDisabled)\n })\n }\n\n private _handleChildChange(e: Event) {\n if (this._isDisabled) return\n const target = e.target as HTMLElement\n if (!target.matches?.('web-ui-radio')) return\n\n const radio = target as WebUiRadio\n if (!radio.checked || radio.value === this._value) return\n\n this.value = radio.value\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private _handleSlotChange() {\n this._syncValueToChildren()\n }\n\n override render() {\n return html`<div class=\"wui-radio-group\"><slot @slotchange=${this._handleSlotChange}></slot></div>`\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio-group': WebUiRadioGroup\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/radio-group/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{-webkit-user-select:none;user-select:none;flex-direction:column;gap:8px;display:inline-flex}.wui-radio-group{gap:inherit;flex-direction:column;display:flex}";
|
|
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/radio-group/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n user-select: none;\n display: inline-flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.wui-radio-group {\n display: flex;\n flex-direction: column;\n gap: inherit;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
export declare class WebUiSegmented extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult[];
|
|
4
|
+
static formAssociated: boolean;
|
|
5
|
+
name: string;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
required: boolean;
|
|
8
|
+
private _internals?;
|
|
9
|
+
private _value;
|
|
10
|
+
private _initialValue;
|
|
11
|
+
get value(): string;
|
|
12
|
+
set value(v: string);
|
|
13
|
+
private readonly childObserver;
|
|
14
|
+
private _syncPropsToChildren;
|
|
15
|
+
private _updateIndicator;
|
|
16
|
+
updated(props: PropertyValues): void;
|
|
17
|
+
connectedCallback(): void;
|
|
18
|
+
firstUpdated(): void;
|
|
19
|
+
disconnectedCallback(): void;
|
|
20
|
+
private _handleChildChange;
|
|
21
|
+
formResetCallback(): void;
|
|
22
|
+
formDisabledCallback(disabled: boolean): void;
|
|
23
|
+
render(): import('lit').TemplateResult<1>;
|
|
24
|
+
readonly $events: {
|
|
25
|
+
input: Event;
|
|
26
|
+
change: Event;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
'web-ui-segmented': WebUiSegmented;
|
|
32
|
+
}
|
|
33
|
+
}
|