@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,178 @@
|
|
|
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-plus.js";
|
|
5
|
+
import r from "../../icons/generated/lucide-minus.js";
|
|
6
|
+
import { normalizeNumber as i } from "../../shared/normalize/index.js";
|
|
7
|
+
import a from "./style.js";
|
|
8
|
+
import { LitElement as o, html as s, unsafeCSS as c } from "lit";
|
|
9
|
+
import { customElement as l, property as u, state as d } from "lit/decorators.js";
|
|
10
|
+
//#region src/components/input-number/index.ts
|
|
11
|
+
var f = class extends o {
|
|
12
|
+
constructor(...e) {
|
|
13
|
+
super(...e), this.placeholder = "", this.name = "", this.disabled = !1, this.required = !1, this._value = 0, this._min = 0, this._max = Infinity, this._step = 1, this._formDisabled = !1, this._precision = 0;
|
|
14
|
+
}
|
|
15
|
+
static {
|
|
16
|
+
this.formAssociated = !0;
|
|
17
|
+
}
|
|
18
|
+
static {
|
|
19
|
+
this.styles = [c(t), c(a)];
|
|
20
|
+
}
|
|
21
|
+
get precision() {
|
|
22
|
+
return this._precision;
|
|
23
|
+
}
|
|
24
|
+
set precision(e) {
|
|
25
|
+
let t = this._precision;
|
|
26
|
+
this._precision = e;
|
|
27
|
+
let n = this.clamp(this.round(this._value));
|
|
28
|
+
n !== this._value && (this._value = n, this._internals?.setFormValue?.(String(n))), this.requestUpdate("precision", t);
|
|
29
|
+
}
|
|
30
|
+
get value() {
|
|
31
|
+
return this._value;
|
|
32
|
+
}
|
|
33
|
+
set value(e) {
|
|
34
|
+
let t = this.clamp(this.round(e)), n = this._value;
|
|
35
|
+
this._value = t, this._internals?.setFormValue?.(String(t)), this.requestUpdate("value", n);
|
|
36
|
+
}
|
|
37
|
+
get _isDisabled() {
|
|
38
|
+
return this.disabled || this._formDisabled;
|
|
39
|
+
}
|
|
40
|
+
get min() {
|
|
41
|
+
return this._min;
|
|
42
|
+
}
|
|
43
|
+
set min(e) {
|
|
44
|
+
this._min = i(e, -Infinity, Infinity, 0);
|
|
45
|
+
}
|
|
46
|
+
get max() {
|
|
47
|
+
return this._max;
|
|
48
|
+
}
|
|
49
|
+
set max(e) {
|
|
50
|
+
this._max = i(e, -Infinity, Infinity, Infinity);
|
|
51
|
+
}
|
|
52
|
+
get step() {
|
|
53
|
+
return this._step;
|
|
54
|
+
}
|
|
55
|
+
set step(e) {
|
|
56
|
+
this._step = i(e, 0, Infinity, 1);
|
|
57
|
+
}
|
|
58
|
+
get _effectiveStep() {
|
|
59
|
+
return this._step;
|
|
60
|
+
}
|
|
61
|
+
get atMin() {
|
|
62
|
+
return this._value <= this._min;
|
|
63
|
+
}
|
|
64
|
+
get atMax() {
|
|
65
|
+
return this._value >= this._max;
|
|
66
|
+
}
|
|
67
|
+
connectedCallback() {
|
|
68
|
+
super.connectedCallback(), this._internals ||= this.attachInternals(), this._internals.setFormValue?.(String(this._value));
|
|
69
|
+
}
|
|
70
|
+
formResetCallback() {
|
|
71
|
+
let e = this.getAttribute("value");
|
|
72
|
+
this.value = e === null ? 0 : Number(e);
|
|
73
|
+
}
|
|
74
|
+
formDisabledCallback(e) {
|
|
75
|
+
this._formDisabled = e;
|
|
76
|
+
}
|
|
77
|
+
formStateRestoreCallback(e) {
|
|
78
|
+
typeof e == "string" && (this.value = Number(e));
|
|
79
|
+
}
|
|
80
|
+
updated() {
|
|
81
|
+
this._syncValidity();
|
|
82
|
+
}
|
|
83
|
+
_syncValidity() {
|
|
84
|
+
let e = this.shadowRoot?.querySelector("input");
|
|
85
|
+
if (!this._internals || !e || typeof this._internals.setValidity != "function") return;
|
|
86
|
+
if (this._isDisabled || e.validity.valid) {
|
|
87
|
+
this._internals.setValidity({});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
let t = {};
|
|
91
|
+
e.validity.valueMissing && (t.valueMissing = !0), e.validity.rangeUnderflow && (t.rangeUnderflow = !0), e.validity.rangeOverflow && (t.rangeOverflow = !0), e.validity.stepMismatch && (t.stepMismatch = !0), this._internals.setValidity(t, e.validationMessage, e);
|
|
92
|
+
}
|
|
93
|
+
clamp(e) {
|
|
94
|
+
return Math.min(this._max, Math.max(this._min, e));
|
|
95
|
+
}
|
|
96
|
+
round(e) {
|
|
97
|
+
let t = 10 ** this.precision;
|
|
98
|
+
return Math.round(e * t) / t;
|
|
99
|
+
}
|
|
100
|
+
setValueAndNotify(e) {
|
|
101
|
+
this.value = this.clamp(this.round(e)), this.dispatchEvent(new Event("input", {
|
|
102
|
+
bubbles: !0,
|
|
103
|
+
composed: !0
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
handleStep(e) {
|
|
107
|
+
this._isDisabled || this.setValueAndNotify(this._value + e * this._effectiveStep);
|
|
108
|
+
}
|
|
109
|
+
handleInput(e) {
|
|
110
|
+
if (!(e.target instanceof HTMLInputElement)) return;
|
|
111
|
+
let t = e.target.value;
|
|
112
|
+
t !== "" && t !== "-" && (this._value = this.clamp(this.round(Number(t))), this._internals?.setFormValue?.(String(this._value)), this._syncValidity());
|
|
113
|
+
}
|
|
114
|
+
handleKeydown(e) {
|
|
115
|
+
this._isDisabled || (e.key === "ArrowUp" ? (e.preventDefault(), this.setValueAndNotify(this._value + this._effectiveStep), this.dispatchEvent(new Event("change", {
|
|
116
|
+
bubbles: !0,
|
|
117
|
+
composed: !0
|
|
118
|
+
}))) : e.key === "ArrowDown" && (e.preventDefault(), this.setValueAndNotify(this._value - this._effectiveStep), this.dispatchEvent(new Event("change", {
|
|
119
|
+
bubbles: !0,
|
|
120
|
+
composed: !0
|
|
121
|
+
}))));
|
|
122
|
+
}
|
|
123
|
+
render() {
|
|
124
|
+
return s`
|
|
125
|
+
<div class="wui-glass wui-input-inner">
|
|
126
|
+
<button
|
|
127
|
+
class="num-btn"
|
|
128
|
+
aria-label="Decrease"
|
|
129
|
+
?disabled=${this._isDisabled || this.atMin}
|
|
130
|
+
@click=${() => this.handleStep(-1)}
|
|
131
|
+
>
|
|
132
|
+
<web-ui-icon .icon=${r}></web-ui-icon>
|
|
133
|
+
</button>
|
|
134
|
+
<input
|
|
135
|
+
type="number"
|
|
136
|
+
placeholder=${this.placeholder}
|
|
137
|
+
name=${this.name}
|
|
138
|
+
.value=${String(this._value)}
|
|
139
|
+
?disabled=${this._isDisabled}
|
|
140
|
+
?required=${this.required}
|
|
141
|
+
@input=${this.handleInput}
|
|
142
|
+
@keydown=${this.handleKeydown}
|
|
143
|
+
/>
|
|
144
|
+
<button
|
|
145
|
+
class="num-btn"
|
|
146
|
+
aria-label="Increase"
|
|
147
|
+
?disabled=${this._isDisabled || this.atMax}
|
|
148
|
+
@click=${() => this.handleStep(1)}
|
|
149
|
+
>
|
|
150
|
+
<web-ui-icon .icon=${n}></web-ui-icon>
|
|
151
|
+
</button>
|
|
152
|
+
</div>
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
e([u({
|
|
157
|
+
type: String,
|
|
158
|
+
reflect: !0
|
|
159
|
+
})], f.prototype, "placeholder", void 0), e([u({
|
|
160
|
+
type: String,
|
|
161
|
+
reflect: !0
|
|
162
|
+
})], f.prototype, "name", void 0), e([u({
|
|
163
|
+
type: Boolean,
|
|
164
|
+
reflect: !0
|
|
165
|
+
})], f.prototype, "disabled", void 0), e([u({
|
|
166
|
+
type: Boolean,
|
|
167
|
+
reflect: !0
|
|
168
|
+
})], f.prototype, "required", void 0), e([u({
|
|
169
|
+
type: Number,
|
|
170
|
+
reflect: !0
|
|
171
|
+
})], f.prototype, "precision", null), e([d()], f.prototype, "_value", void 0), e([d()], f.prototype, "_min", void 0), e([d()], f.prototype, "_max", void 0), e([d()], f.prototype, "_step", void 0), e([d()], f.prototype, "_formDisabled", void 0), e([u({
|
|
172
|
+
type: Number,
|
|
173
|
+
reflect: !0
|
|
174
|
+
})], f.prototype, "value", null), e([u({ type: Number })], f.prototype, "min", null), e([u({ type: Number })], f.prototype, "max", null), e([u({ type: Number })], f.prototype, "step", null), f = e([l("web-ui-input-number")], f);
|
|
175
|
+
//#endregion
|
|
176
|
+
export { f as WebUiInputNumber };
|
|
177
|
+
|
|
178
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/input-number/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\n// web-ui-icon 必须注册(Rolldown tree-shake 副作用 import,引用类名阻止删除)\nimport '@/components/icon'\nimport glass from '@/assets/glass.css?inline'\nimport { lucideMinus, lucidePlus } from '@/icons'\nimport { normalizeNumber } from '@/shared/normalize'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-input-number')\nexport class WebUiInputNumber extends LitElement {\n static formAssociated = true\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: String, reflect: true }) placeholder = ''\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n @property({ type: Number, reflect: true })\n get precision(): number {\n return this._precision\n }\n // 精度变化时重算现有值,避免浮点累积误差\n set precision(v: number) {\n const old = this._precision\n this._precision = v\n const current = this.clamp(this.round(this._value))\n if (current !== this._value) {\n this._value = current\n this._internals?.setFormValue?.(String(current))\n }\n this.requestUpdate('precision', old)\n }\n\n @state() private _value = 0\n @state() private _min = 0\n @state() private _max = Infinity\n @state() private _step = 1\n @state() private _formDisabled = false\n private _precision = 0\n\n private _internals?: ElementInternals\n\n @property({ type: Number, reflect: true })\n get value(): number {\n return this._value\n }\n\n set value(v: number) {\n const clamped = this.clamp(this.round(v))\n const old = this._value\n this._value = clamped\n this._internals?.setFormValue?.(String(clamped))\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled\n }\n\n @property({ type: Number })\n get min(): number {\n return this._min\n }\n\n set min(v: unknown) {\n this._min = normalizeNumber(v, -Infinity, Infinity, 0)\n }\n\n @property({ type: Number })\n get max(): number {\n return this._max\n }\n\n set max(v: unknown) {\n this._max = normalizeNumber(v, -Infinity, Infinity, Infinity)\n }\n\n @property({ type: Number })\n get step(): number {\n return this._step\n }\n\n // 步进值,默认 1;若声明了 precision 则以 precision 退化步进\n set step(v: unknown) {\n this._step = normalizeNumber(v, 0, Infinity, 1)\n }\n\n private get _effectiveStep(): number {\n return this._step\n }\n\n private get atMin(): boolean {\n return this._value <= this._min\n }\n\n private get atMax(): boolean {\n return this._value >= this._max\n }\n\n override connectedCallback() {\n super.connectedCallback()\n if (!this._internals) {\n this._internals = this.attachInternals()\n }\n this._internals.setFormValue?.(String(this._value))\n }\n\n formResetCallback() {\n const attr = this.getAttribute('value')\n this.value = attr !== null ? Number(attr) : 0\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n if (typeof state === 'string') this.value = Number(state)\n }\n\n override updated() {\n this._syncValidity()\n }\n\n private _syncValidity() {\n const input = this.shadowRoot?.querySelector('input')\n if (!this._internals || !input || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || input.validity.valid) {\n this._internals.setValidity({})\n return\n }\n const flags: ValidityStateFlags = {}\n if (input.validity.valueMissing) flags.valueMissing = true\n if (input.validity.rangeUnderflow) flags.rangeUnderflow = true\n if (input.validity.rangeOverflow) flags.rangeOverflow = true\n if (input.validity.stepMismatch) flags.stepMismatch = true\n this._internals.setValidity(flags, input.validationMessage, input)\n }\n\n private clamp(v: number): number {\n return Math.min(this._max, Math.max(this._min, v))\n }\n\n private round(v: number): number {\n const f = 10 ** this.precision\n return Math.round(v * f) / f\n }\n\n private setValueAndNotify(v: number) {\n this.value = this.clamp(this.round(v))\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n }\n\n private handleStep(direction: 1 | -1) {\n if (this._isDisabled) return\n this.setValueAndNotify(this._value + direction * this._effectiveStep)\n }\n\n private handleInput(e: Event) {\n if (!(e.target instanceof HTMLInputElement)) return\n const raw = e.target.value\n if (raw === '' || raw === '-') return\n this._value = this.clamp(this.round(Number(raw)))\n this._internals?.setFormValue?.(String(this._value))\n this._syncValidity()\n }\n\n private handleKeydown(e: KeyboardEvent) {\n if (this._isDisabled) return\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n this.setValueAndNotify(this._value + this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n this.setValueAndNotify(this._value - this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n }\n\n override render() {\n return html`\n <div class=\"wui-glass wui-input-inner\">\n <button\n class=\"num-btn\"\n aria-label=\"Decrease\"\n ?disabled=${this._isDisabled || this.atMin}\n @click=${() => this.handleStep(-1)}\n >\n <web-ui-icon .icon=${lucideMinus}></web-ui-icon>\n </button>\n <input\n type=\"number\"\n placeholder=${this.placeholder}\n name=${this.name}\n .value=${String(this._value)}\n ?disabled=${this._isDisabled}\n ?required=${this.required}\n @input=${this.handleInput}\n @keydown=${this.handleKeydown}\n />\n <button\n class=\"num-btn\"\n aria-label=\"Increase\"\n ?disabled=${this._isDisabled || this.atMax}\n @click=${() => this.handleStep(1)}\n >\n <web-ui-icon .icon=${lucidePlus}></web-ui-icon>\n </button>\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-input-number': WebUiInputNumber\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/input-number/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.wui-input-inner{box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-button-size,40px);height:var(--wui-button-size,40px);border-radius:2147483647px;align-items:center;gap:4px;padding:0 4px;display:flex;position:relative}.wui-input-inner:focus-within{border-color:var(--wui-color-border-strong,#006ee680);box-shadow:0 0 0 3px #08f3,inset -1px -1px .5px -.5px #ffffffe6,inset 1px 1px .5px -.5px #ffffffe6,inset -3px -3px .5px -3px #ffffff8c,inset 3px 3px .5px -3px #ffffff8c,inset 0 0 1px #000c,0 2px 16px #0000000f}input{min-width:48px;height:100%;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-align:center;background:0 0;border:none;outline:none;flex:1}input::-webkit-inner-spin-button{appearance:none;margin:0}input::-webkit-outer-spin-button{appearance:none;margin:0}input[type=number]{appearance:textfield}input:disabled{cursor:not-allowed;opacity:.4}.num-btn{cursor:pointer;width:32px;height:32px;color:var(--wui-color-text-muted,#6a6a6a);transition:transform var(--wui-duration-press,.12s) var(--wui-ease-out,cubic-bezier(.23, 1, .32, 1)), background-color var(--wui-duration-fast,.16s) ease;background:0 0;border:none;border-radius:2147483647px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.num-btn:disabled{cursor:not-allowed;opacity:.4}.num-btn:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px}.num-btn:active:not(:disabled){transform:scale(var(--wui-scale-press,.97));background:var(--wui-color-border,#0000001a)}@media (hover:hover) and (pointer:fine){.num-btn:hover:not(:disabled){background:color-mix(in srgb, var(--wui-color-text,#1b1b1b) 6%, transparent)}}@media (prefers-reduced-motion:reduce){.num-btn{transition:background-color var(--wui-duration-fast,.16s) ease}.num-btn:active:not(:disabled){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/input-number/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-input-inner {\n position: relative;\n\n display: flex;\n gap: 4px;\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-button-size, 40px);\n height: var(--wui-button-size, 40px);\n padding: 0 4px;\n border-radius: calc(infinity * 1px);\n\n &:focus-within {\n border-color: var(--wui-color-border-strong, rgb(0 110 230 / 0.5));\n box-shadow:\n 0 0 0 3px rgb(0 136 255 / 0.2),\n inset -1px -1px 0.5px -0.5px rgb(255 255 255 / 0.9),\n inset 1px 1px 0.5px -0.5px rgb(255 255 255 / 0.9),\n inset -3px -3px 0.5px -3px rgb(255 255 255 / 0.55),\n inset 3px 3px 0.5px -3px rgb(255 255 255 / 0.55),\n inset 0 0 1px rgb(0 0 0 / 0.8),\n 0 2px 16px rgb(0 0 0 / 0.06);\n }\n}\n\ninput {\n flex: 1;\n\n min-width: 48px;\n height: 100%;\n border: none;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-align: center;\n\n background: transparent;\n outline: none;\n\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n margin: 0;\n appearance: none;\n }\n\n &[type='number'] {\n appearance: textfield;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.num-btn {\n cursor: pointer;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n border: none;\n border-radius: calc(infinity * 1px);\n\n color: var(--wui-color-text-muted, #6a6a6a);\n\n background: transparent;\n\n transition:\n transform var(--wui-duration-press, 120ms) var(--wui-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),\n background-color var(--wui-duration-fast, 160ms) ease;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\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 &:active:not(:disabled) {\n transform: scale(var(--wui-scale-press, 0.97));\n background: var(--wui-color-border, rgb(0 0 0 / 0.1));\n }\n}\n\n@media (hover: hover) and (pointer: fine) {\n .num-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--wui-color-text, #1b1b1b) 6%, transparent);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .num-btn {\n transition: background-color var(--wui-duration-fast, 160ms) ease;\n }\n\n .num-btn:active:not(:disabled) {\n transform: none;\n }\n}\n"],"mappings":""}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
export declare class WebUiLayout extends LitElement {
|
|
3
|
-
static styles: import('lit').CSSResult;
|
|
3
|
+
static styles: import('lit').CSSResult[];
|
|
4
|
+
private _sidebarOpen;
|
|
5
|
+
private _toggleSidebar;
|
|
6
|
+
private _closeSidebar;
|
|
7
|
+
private _onSidebarClick;
|
|
4
8
|
render(): import('lit').TemplateResult<1>;
|
|
9
|
+
readonly $events: Record<string, never>;
|
|
10
|
+
}
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
'web-ui-layout': WebUiLayout;
|
|
14
|
+
}
|
|
5
15
|
}
|
|
@@ -1,31 +1,65 @@
|
|
|
1
|
-
import e from "../../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
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/radix-icons-panel-left-minimized.js";
|
|
5
|
+
import "../button/index.js";
|
|
6
|
+
import r from "./style.js";
|
|
7
|
+
import { LitElement as i, html as a, unsafeCSS as o } from "lit";
|
|
8
|
+
import { customElement as s, state as c } from "lit/decorators.js";
|
|
9
|
+
import { classMap as l } from "lit/directives/class-map.js";
|
|
5
10
|
//#region src/components/layout/index.ts
|
|
6
|
-
var
|
|
11
|
+
var u = class extends i {
|
|
12
|
+
constructor(...e) {
|
|
13
|
+
super(...e), this._sidebarOpen = !1;
|
|
14
|
+
}
|
|
7
15
|
static {
|
|
8
|
-
this.styles =
|
|
16
|
+
this.styles = [o(t), o(r)];
|
|
17
|
+
}
|
|
18
|
+
_toggleSidebar() {
|
|
19
|
+
this._sidebarOpen = !this._sidebarOpen;
|
|
20
|
+
}
|
|
21
|
+
_closeSidebar() {
|
|
22
|
+
this._sidebarOpen = !1;
|
|
23
|
+
}
|
|
24
|
+
_onSidebarClick(e) {
|
|
25
|
+
e.target.closest("a, button, [role=\"button\"]") && this._closeSidebar();
|
|
9
26
|
}
|
|
10
27
|
render() {
|
|
11
|
-
return
|
|
12
|
-
<
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
<
|
|
23
|
-
|
|
28
|
+
return a`
|
|
29
|
+
<div class="layout-grid">
|
|
30
|
+
<header>
|
|
31
|
+
<slot name="header"></slot>
|
|
32
|
+
</header>
|
|
33
|
+
<main>
|
|
34
|
+
<slot></slot>
|
|
35
|
+
</main>
|
|
36
|
+
<aside class="${l({ open: this._sidebarOpen })}" @click="${this._onSidebarClick}">
|
|
37
|
+
<div class="menu wui-glass"><slot name="sidebar"></slot></div>
|
|
38
|
+
</aside>
|
|
39
|
+
<footer>
|
|
40
|
+
<slot name="tabbar"></slot>
|
|
41
|
+
</footer>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="${l({
|
|
45
|
+
backdrop: !0,
|
|
46
|
+
open: this._sidebarOpen
|
|
47
|
+
})}" @click="${this._closeSidebar}"></div>
|
|
48
|
+
|
|
49
|
+
<web-ui-button
|
|
50
|
+
class="mobile-toggle"
|
|
51
|
+
icon
|
|
52
|
+
variant="glass"
|
|
53
|
+
@click="${this._toggleSidebar}"
|
|
54
|
+
aria-label="打开导航菜单"
|
|
55
|
+
>
|
|
56
|
+
<web-ui-icon .icon=${n}></web-ui-icon>
|
|
57
|
+
</web-ui-button>
|
|
24
58
|
`;
|
|
25
59
|
}
|
|
26
60
|
};
|
|
27
|
-
|
|
61
|
+
e([c()], u.prototype, "_sidebarOpen", void 0), u = e([s("web-ui-layout")], u);
|
|
28
62
|
//#endregion
|
|
29
|
-
export {
|
|
63
|
+
export { u as WebUiLayout };
|
|
30
64
|
|
|
31
65
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/layout/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-layout')\nexport class WebUiLayout extends LitElement {\n static override styles = unsafeCSS(style)\n\n override render() {\n return html`\n <
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/layout/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport glass from '@/assets/glass.css?inline'\nimport '@/components/icon'\nimport '@/components/button'\nimport { radixIconsPanelLeftMinimized } from '@/icons'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-layout')\nexport class WebUiLayout extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @state() private _sidebarOpen = false\n\n private _toggleSidebar() {\n this._sidebarOpen = !this._sidebarOpen\n }\n\n private _closeSidebar() {\n this._sidebarOpen = false\n }\n\n private _onSidebarClick(e: MouseEvent) {\n const target = e.target as HTMLElement\n if (target.closest('a, button, [role=\"button\"]')) {\n this._closeSidebar()\n }\n }\n\n override render() {\n return html`\n <div class=\"layout-grid\">\n <header>\n <slot name=\"header\"></slot>\n </header>\n <main>\n <slot></slot>\n </main>\n <aside class=\"${classMap({ open: this._sidebarOpen })}\" @click=\"${this._onSidebarClick}\">\n <div class=\"menu wui-glass\"><slot name=\"sidebar\"></slot></div>\n </aside>\n <footer>\n <slot name=\"tabbar\"></slot>\n </footer>\n </div>\n\n <div class=\"${classMap({ backdrop: true, open: this._sidebarOpen })}\" @click=\"${this._closeSidebar}\"></div>\n\n <web-ui-button\n class=\"mobile-toggle\"\n icon\n variant=\"glass\"\n @click=\"${this._toggleSidebar}\"\n aria-label=\"打开导航菜单\"\n >\n <web-ui-icon .icon=${radixIconsPanelLeftMinimized}></web-ui-icon>\n </web-ui-button>\n `\n }\n\n declare readonly $events: Record<string, never>\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-layout': WebUiLayout\n }\n}\n"],"mappings":";;;;;;;;;;AAYO,IAAM,IAAN,cAA0B,EAAW;;EAGV,aAAA,KAAA,eAAA;;;EAFP,KAAA,SAAA,CAAC,EAAU,CAAK,GAAG,EAAU,CAAK,CAAC;;CAI5D,iBAAyB;EACvB,KAAK,eAAe,CAAC,KAAK;CAC5B;CAEA,gBAAwB;EACtB,KAAK,eAAe;CACtB;CAEA,gBAAwB,GAAe;EAErC,AADe,EAAE,OACN,QAAQ,8BAA4B,KAC7C,KAAK,cAAc;CAEvB;CAEA,SAAkB;EAChB,OAAO,CAAI;;;;;;;;wBAQS,EAAS,EAAE,MAAM,KAAK,aAAa,CAAC,EAAE,YAAY,KAAK,gBAAgB;;;;;;;;oBAQ3E,EAAS;GAAE,UAAU;GAAM,MAAM,KAAK;EAAa,CAAC,EAAE,YAAY,KAAK,cAAc;;;;;;kBAMvF,KAAK,eAAe;;;6BAGT,EAA6B;;;CAGxD;AAGF;AAjDG,EAAA,CAAA,EAAM,CAAA,GAAA,EAAA,WAAA,gBAAA,KAAA,CAAA,GAJR,IAAA,EAAA,CAAA,EAAc,eAAe,CAAA,GAAA,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/layout/style.css?inline
|
|
2
|
-
var e = ":host{grid-template-areas:\"sidebar header\"\"sidebar content\";grid-template-columns:var(--web-ui-base-layout-sidebar-width,240px) 1fr;grid-template-rows:var(--web-ui-base-layout-header-height,64px) 1fr;box-sizing:border-box;min-height:100vh;display:grid}
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:block}.layout-grid{grid-template-areas:\"sidebar header\"\"sidebar content\";grid-template-columns:var(--web-ui-base-layout-sidebar-width,240px) 1fr;grid-template-rows:var(--web-ui-base-layout-header-height,64px) 1fr;box-sizing:border-box;min-height:100vh;display:grid}.layout-grid *{box-sizing:inherit}header{z-index:var(--wui-layer-header,10);grid-area:header;position:sticky;top:0;right:0}main{grid-area:content}aside{grid-area:sidebar;height:100vh;padding:8px;position:sticky;top:0;left:0}aside .menu{background-color:var(--wui-color-surface-overlay,#f6f6f6e0);border-radius:20px;height:100%}footer{grid-area:footer}.backdrop{display:none}.mobile-toggle{z-index:var(--wui-layer-header,20);visibility:hidden;position:fixed;top:12px;left:12px}@media (width<=640px){.layout-grid{grid-template-columns:1fr;grid-template-areas:\"header\"\"content\"}aside{z-index:var(--wui-layer-drawer,100);width:var(--web-ui-base-layout-sidebar-width,240px);height:100dvh;padding:8px;transition:transform .25s;position:fixed;top:0;left:0;transform:translate(-100%)}aside.open{transform:translate(0)}.backdrop{z-index:var(--wui-layer-backdrop,90);background:#0000004d;display:none;position:fixed;inset:0}.backdrop.open{display:block}.mobile-toggle{visibility:visible}}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/layout/style.css?inline"],"sourcesContent":[":host {\n display: grid;\n grid-template-areas:\n 'sidebar header'\n 'sidebar content';\n grid-template-columns: var(--web-ui-base-layout-sidebar-width, 240px) 1fr;\n grid-template-rows: var(--web-ui-base-layout-header-height, 64px) 1fr;\n\n box-sizing: border-box;\n min-height: 100dvh;\n min-height: 100vh;\n\n * {\n box-sizing: inherit;\n }\n}\n\nheader {\n position: sticky;\n top: 0;\n right: 0;\n grid-area: header;\n}\n\nmain {\n grid-area: content;\n}\n\naside {\n position: sticky;\n top: 0;\n left: 0;\n\n grid-area: sidebar;\n\n height: 100dvh;\n height: 100vh;\n padding: 8px;\n\n .menu {\n height: 100%;\n border-radius:
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/layout/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n.layout-grid {\n display: grid;\n grid-template-areas:\n 'sidebar header'\n 'sidebar content';\n grid-template-columns: var(--web-ui-base-layout-sidebar-width, 240px) 1fr;\n grid-template-rows: var(--web-ui-base-layout-header-height, 64px) 1fr;\n\n box-sizing: border-box;\n min-height: 100dvh;\n min-height: 100vh;\n\n * {\n box-sizing: inherit;\n }\n}\n\nheader {\n position: sticky;\n z-index: var(--wui-layer-header, 10);\n top: 0;\n right: 0;\n\n grid-area: header;\n}\n\nmain {\n grid-area: content;\n}\n\naside {\n position: sticky;\n top: 0;\n left: 0;\n\n grid-area: sidebar;\n\n height: 100dvh;\n height: 100vh;\n padding: 8px;\n\n .menu {\n height: 100%;\n border-radius: 20px;\n background-color: var(--wui-color-surface-overlay, rgb(246 246 246 / 0.88));\n }\n}\n\nfooter {\n grid-area: footer;\n}\n\n.backdrop {\n display: none;\n}\n\n.mobile-toggle {\n position: fixed;\n z-index: var(--wui-layer-header, 20);\n top: 12px;\n left: 12px;\n\n visibility: hidden;\n}\n\n@media (width <= 640px) {\n .layout-grid {\n grid-template-areas:\n 'header'\n 'content';\n grid-template-columns: 1fr;\n }\n\n aside {\n position: fixed;\n z-index: var(--wui-layer-drawer, 100);\n top: 0;\n left: 0;\n transform: translateX(-100%);\n\n width: var(--web-ui-base-layout-sidebar-width, 240px);\n height: 100dvh;\n padding: 8px;\n\n transition: transform 0.25s ease;\n }\n\n aside.open {\n transform: translateX(0);\n }\n\n .backdrop {\n position: fixed;\n z-index: var(--wui-layer-backdrop, 90);\n inset: 0;\n\n display: none;\n\n background: rgb(0 0 0 / 0.3);\n }\n\n .backdrop.open {\n display: block;\n }\n\n .mobile-toggle {\n visibility: visible;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
export declare class WebUiOption extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult;
|
|
4
|
+
value: string;
|
|
5
|
+
get label(): string;
|
|
6
|
+
set label(value: string);
|
|
7
|
+
private _label;
|
|
8
|
+
private _slottedLabel;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
selected: boolean;
|
|
11
|
+
connectedCallback(): void;
|
|
12
|
+
disconnectedCallback(): void;
|
|
13
|
+
updated(changed: PropertyValues): void;
|
|
14
|
+
private _onLabelSlotChange;
|
|
15
|
+
private _getSlottedLabel;
|
|
16
|
+
render(): import('lit').TemplateResult<1>;
|
|
17
|
+
readonly $events: {
|
|
18
|
+
'option-register': CustomEvent<{
|
|
19
|
+
value: string;
|
|
20
|
+
label: string;
|
|
21
|
+
disabled: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
'option-unregister': CustomEvent<{
|
|
24
|
+
value: string;
|
|
25
|
+
}>;
|
|
26
|
+
'option-update': CustomEvent<void>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
'web-ui-option': WebUiOption;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import "../icon/index.js";
|
|
3
|
+
import t from "../../icons/generated/heroicons-check-16-solid.js";
|
|
4
|
+
import n from "./style.js";
|
|
5
|
+
import { LitElement as r, html as i, unsafeCSS as a } from "lit";
|
|
6
|
+
import { customElement as o, property as s } from "lit/decorators.js";
|
|
7
|
+
//#region src/components/option/index.ts
|
|
8
|
+
var c = class extends r {
|
|
9
|
+
constructor(...e) {
|
|
10
|
+
super(...e), this.value = "", this._label = "", this._slottedLabel = "", this.disabled = !1, this.selected = !1, this._onLabelSlotChange = () => {
|
|
11
|
+
let e = this._getSlottedLabel();
|
|
12
|
+
if (e === this._slottedLabel) return;
|
|
13
|
+
let t = this._label || this._slottedLabel;
|
|
14
|
+
this._slottedLabel = e, this.requestUpdate("label", t);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.styles = a(n);
|
|
19
|
+
}
|
|
20
|
+
get label() {
|
|
21
|
+
return this._label || this._getSlottedLabel();
|
|
22
|
+
}
|
|
23
|
+
set label(e) {
|
|
24
|
+
let t = this.label;
|
|
25
|
+
this._label = e, this.requestUpdate("label", t);
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
super.connectedCallback(), this.dispatchEvent(new CustomEvent("option-register", {
|
|
29
|
+
bubbles: !0,
|
|
30
|
+
composed: !0,
|
|
31
|
+
detail: {
|
|
32
|
+
value: this.value,
|
|
33
|
+
label: this.label,
|
|
34
|
+
disabled: this.disabled
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
disconnectedCallback() {
|
|
39
|
+
super.disconnectedCallback(), this.dispatchEvent(new CustomEvent("option-unregister", {
|
|
40
|
+
bubbles: !0,
|
|
41
|
+
composed: !0,
|
|
42
|
+
detail: { value: this.value }
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
updated(e) {
|
|
46
|
+
(e.has("value") || e.has("label") || e.has("disabled")) && this.dispatchEvent(new CustomEvent("option-update", {
|
|
47
|
+
bubbles: !0,
|
|
48
|
+
composed: !0
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
_getSlottedLabel() {
|
|
52
|
+
return [...this.childNodes].filter((e) => !(e instanceof HTMLElement && e.slot)).map((e) => e.textContent).join("").trim();
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
return i`
|
|
56
|
+
<div class="option-label">
|
|
57
|
+
<web-ui-icon class="check" .size=${16} .icon=${t}></web-ui-icon>
|
|
58
|
+
<slot name="prefix"></slot>
|
|
59
|
+
<span class="content-wrap">${this._label || i`<slot @slotchange=${this._onLabelSlotChange}></slot>`}</span>
|
|
60
|
+
<slot name="suffix"></slot>
|
|
61
|
+
</div>
|
|
62
|
+
`;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
e([s({
|
|
66
|
+
type: String,
|
|
67
|
+
reflect: !0
|
|
68
|
+
})], c.prototype, "value", void 0), e([s({ type: String })], c.prototype, "label", null), e([s({
|
|
69
|
+
type: Boolean,
|
|
70
|
+
reflect: !0
|
|
71
|
+
})], c.prototype, "disabled", void 0), e([s({
|
|
72
|
+
type: Boolean,
|
|
73
|
+
reflect: !0
|
|
74
|
+
})], c.prototype, "selected", void 0), c = e([o("web-ui-option")], c);
|
|
75
|
+
//#endregion
|
|
76
|
+
export { c as WebUiOption };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/option/index.ts"],"sourcesContent":["import { html, LitElement, type PropertyValues, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport '@/components/icon'\nimport { heroiconsCheck16Solid } from '@/icons'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-option')\nexport class WebUiOption extends LitElement {\n static override styles = unsafeCSS(style)\n\n @property({ type: String, reflect: true }) value = ''\n @property({ type: String })\n get label(): string {\n return this._label || this._getSlottedLabel()\n }\n set label(value: string) {\n const old = this.label\n this._label = value\n this.requestUpdate('label', old)\n }\n private _label = ''\n private _slottedLabel = ''\n\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) selected = false\n\n override connectedCallback() {\n super.connectedCallback()\n this.dispatchEvent(\n new CustomEvent('option-register', {\n bubbles: true,\n composed: true,\n detail: { value: this.value, label: this.label, disabled: this.disabled }\n })\n )\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.dispatchEvent(\n new CustomEvent('option-unregister', {\n bubbles: true,\n composed: true,\n detail: { value: this.value }\n })\n )\n }\n\n override updated(changed: PropertyValues) {\n if (changed.has('value') || changed.has('label') || changed.has('disabled')) {\n this.dispatchEvent(\n new CustomEvent('option-update', {\n bubbles: true,\n composed: true\n })\n )\n }\n }\n\n private _onLabelSlotChange = () => {\n const label = this._getSlottedLabel()\n if (label === this._slottedLabel) return\n\n const old = this._label || this._slottedLabel\n this._slottedLabel = label\n this.requestUpdate('label', old)\n }\n\n private _getSlottedLabel(): string {\n return [...this.childNodes]\n .filter(node => !(node instanceof HTMLElement && node.slot))\n .map(node => node.textContent)\n .join('')\n .trim()\n }\n\n override render() {\n return html`\n <div class=\"option-label\">\n <web-ui-icon class=\"check\" .size=${16} .icon=${heroiconsCheck16Solid}></web-ui-icon>\n <slot name=\"prefix\"></slot>\n <span class=\"content-wrap\">${this._label || html`<slot @slotchange=${this._onLabelSlotChange}></slot>`}</span>\n <slot name=\"suffix\"></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n 'option-register': CustomEvent<{ value: string; label: string; disabled: boolean }>\n 'option-unregister': CustomEvent<{ value: string }>\n 'option-update': CustomEvent<void>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-option': WebUiOption\n }\n}\n"],"mappings":";;;;;;;AASO,IAAM,IAAN,cAA0B,EAAW;;EAoDP,aAjDgB,KAAA,QAAA,IAUlC,KAAA,SAAA,IACO,KAAA,gBAAA,IAE+B,KAAA,WAAA,IACA,KAAA,WAAA,IAmCpB,KAAA,2BAAA;GACjC,IAAM,IAAQ,KAAK,iBAAiB;GACpC,IAAI,MAAU,KAAK,eAAe;GAElC,IAAM,IAAM,KAAK,UAAU,KAAK;GAEhC,AADA,KAAK,gBAAgB,GACrB,KAAK,cAAc,SAAS,CAAG;EACjC;;;EA1DyB,KAAA,SAAA,EAAU,CAAK;;CAGxC,IACI,QAAgB;EAClB,OAAO,KAAK,UAAU,KAAK,iBAAiB;CAC9C;CACA,IAAI,MAAM,GAAe;EACvB,IAAM,IAAM,KAAK;EAEjB,AADA,KAAK,SAAS,GACd,KAAK,cAAc,SAAS,CAAG;CACjC;CAOA,oBAA6B;EAE3B,AADA,MAAM,kBAAkB,GACxB,KAAK,cACH,IAAI,YAAY,mBAAmB;GACjC,SAAS;GACT,UAAU;GACV,QAAQ;IAAE,OAAO,KAAK;IAAO,OAAO,KAAK;IAAO,UAAU,KAAK;GAAS;EAC1E,CAAC,CACH;CACF;CAEA,uBAAgC;EAE9B,AADA,MAAM,qBAAqB,GAC3B,KAAK,cACH,IAAI,YAAY,qBAAqB;GACnC,SAAS;GACT,UAAU;GACV,QAAQ,EAAE,OAAO,KAAK,MAAM;EAC9B,CAAC,CACH;CACF;CAEA,QAAiB,GAAyB;EACxC,CAAI,EAAQ,IAAI,OAAO,KAAK,EAAQ,IAAI,OAAO,KAAK,EAAQ,IAAI,UAAU,MACxE,KAAK,cACH,IAAI,YAAY,iBAAiB;GAC/B,SAAS;GACT,UAAU;EACZ,CAAC,CACH;CAEJ;CAWA,mBAAmC;EACjC,OAAO,CAAC,GAAG,KAAK,UAAU,CAAC,CACxB,QAAO,MAAQ,EAAE,aAAgB,eAAe,EAAK,KAAK,CAAC,CAC3D,KAAI,MAAQ,EAAK,WAAW,CAAC,CAC7B,KAAK,EAAE,CAAC,CACR,KAAK;CACV;CAEA,SAAkB;EAChB,OAAO,CAAI;;2CAE4B,GAAG,SAAS,EAAsB;;qCAExC,KAAK,UAAU,CAAI,qBAAqB,KAAK,mBAAmB,UAAU;;;;CAI7G;AAOF;AAlFG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GACxC,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,IAAA,GAYzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GACzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAlB3C,IAAA,EAAA,CAAA,EAAc,eAAe,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/option/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:block}:host([disabled]){cursor:not-allowed;opacity:.4}.option-label{cursor:pointer;-webkit-user-select:none;user-select:none;box-sizing:border-box;height:32px;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;transition:color var(--wui-duration-fast,.16s) ease, background-color var(--wui-duration-fast,.16s) ease;border-radius:2147483647px;align-items:center;gap:8px;padding:0 12px;display:flex;overflow:hidden}.check{flex-shrink:0}.content-wrap{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:host(:not([selected])) .check{visibility:hidden}::slotted([slot=prefix]),::slotted([slot=suffix]){flex-shrink:0}.option-label:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px}:host([active]) .option-label{color:var(--wui-color-on-accent,#fff);background:var(--wui-color-accent,#08f)}@media (hover:hover) and (pointer:fine){.option-label:hover{color:var(--wui-color-on-accent,#fff);background:var(--wui-color-accent,#08f)}}:host([disabled]) .option-label{cursor:not-allowed}";
|
|
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/option/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.option-label {\n cursor: pointer;\n user-select: none;\n\n overflow: hidden;\n display: flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n height: 32px;\n padding: 0 12px;\n border-radius: calc(infinity * 1px);\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n\n transition:\n color var(--wui-duration-fast, 160ms) ease,\n background-color var(--wui-duration-fast, 160ms) ease;\n}\n\n.check {\n flex-shrink: 0;\n}\n\n.content-wrap {\n overflow: hidden;\n flex: 1;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host(:not([selected])) .check {\n visibility: hidden;\n}\n\n::slotted([slot='prefix']),\n::slotted([slot='suffix']) {\n flex-shrink: 0;\n}\n\n.option-label:focus-visible {\n outline: 3px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n}\n\n:host([active]) .option-label {\n color: var(--wui-color-on-accent, #fff);\n background: var(--wui-color-accent, #08f);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option-label:hover {\n color: var(--wui-color-on-accent, #fff);\n background: var(--wui-color-accent, #08f);\n }\n}\n\n:host([disabled]) .option-label {\n cursor: not-allowed;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Placement } from '@floating-ui/dom';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import { OverlayContainer } from '../../shared/overlay/portal';
|
|
4
|
+
export declare class WebUiPopover extends LitElement {
|
|
5
|
+
static styles: import('lit').CSSResult[];
|
|
6
|
+
open: boolean;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
get placement(): Placement;
|
|
9
|
+
set placement(v: string);
|
|
10
|
+
private _placement;
|
|
11
|
+
get offset(): number;
|
|
12
|
+
set offset(v: number);
|
|
13
|
+
private _offset;
|
|
14
|
+
get trigger(): 'click' | 'hover' | 'manual';
|
|
15
|
+
set trigger(v: string);
|
|
16
|
+
private _trigger;
|
|
17
|
+
portal: boolean;
|
|
18
|
+
overlayContainer?: OverlayContainer;
|
|
19
|
+
private _overlay?;
|
|
20
|
+
private _showTimer?;
|
|
21
|
+
private _hideTimer?;
|
|
22
|
+
private _suppressEvent;
|
|
23
|
+
private _portal?;
|
|
24
|
+
private _shouldOpenInstantly;
|
|
25
|
+
private _panelId;
|
|
26
|
+
/** 当前是否打开 */
|
|
27
|
+
get isOpen(): boolean;
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
disconnectedCallback(): void;
|
|
30
|
+
firstUpdated(): void;
|
|
31
|
+
protected updated(changed: Map<string, unknown>): void;
|
|
32
|
+
/** 打开 popover */
|
|
33
|
+
show(): void;
|
|
34
|
+
/** 关闭 popover */
|
|
35
|
+
close(): void;
|
|
36
|
+
/** 切换 popover */
|
|
37
|
+
toggle(): void;
|
|
38
|
+
private _isInsideShadowRoot;
|
|
39
|
+
private _syncTriggerListeners;
|
|
40
|
+
private _initLocalOverlay;
|
|
41
|
+
private _openOverlay;
|
|
42
|
+
private _openPortal;
|
|
43
|
+
private _closeOverlay;
|
|
44
|
+
private _disposeOverlay;
|
|
45
|
+
private _reconfigureOverlay;
|
|
46
|
+
private _dispatchChange;
|
|
47
|
+
private _focusPanel;
|
|
48
|
+
private _returnFocus;
|
|
49
|
+
private _queryTrigger;
|
|
50
|
+
private _onTriggerClick;
|
|
51
|
+
private _onClickOutside;
|
|
52
|
+
private _onFocusOut;
|
|
53
|
+
private _onKeydown;
|
|
54
|
+
private _onPointerEnter;
|
|
55
|
+
private _onPointerLeave;
|
|
56
|
+
private _onPanelPointerEnter;
|
|
57
|
+
private _onPanelPointerLeave;
|
|
58
|
+
render(): import('lit').TemplateResult<1>;
|
|
59
|
+
readonly $events: {
|
|
60
|
+
'open-change': CustomEvent<{
|
|
61
|
+
open: boolean;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
declare global {
|
|
66
|
+
interface HTMLElementTagNameMap {
|
|
67
|
+
'web-ui-popover': WebUiPopover;
|
|
68
|
+
}
|
|
69
|
+
}
|