@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
|
@@ -1,86 +1,111 @@
|
|
|
1
|
-
import e from "../../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
+
import { normalizeNumber as t } from "../../shared/normalize/index.js";
|
|
3
|
+
import { findNearestTheme as n } from "../../shared/theme/theme-scope.js";
|
|
4
|
+
import r from "./style.js";
|
|
5
|
+
import { LitElement as i, html as a, unsafeCSS as o } from "lit";
|
|
6
|
+
import { customElement as s, property as c } from "lit/decorators.js";
|
|
5
7
|
//#region src/components/svg-draw-lines/index.ts
|
|
6
|
-
var l = class extends
|
|
8
|
+
var l = "path, rect, circle, line, polyline, polygon, ellipse", u = class extends i {
|
|
7
9
|
constructor(...e) {
|
|
8
|
-
super(...e), this.
|
|
10
|
+
super(...e), this._duration = 1e3, this.easing = "linear", this._hasAutoPlayed = !1;
|
|
9
11
|
}
|
|
10
12
|
static {
|
|
11
|
-
this.styles =
|
|
13
|
+
this.styles = o(r);
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
get duration() {
|
|
16
|
+
return this._duration;
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
let
|
|
18
|
-
|
|
19
|
-
let t = e.cloneNode(!0);
|
|
20
|
-
t.classList.add("svg-clone"), this.svgClone = t;
|
|
18
|
+
set duration(e) {
|
|
19
|
+
let n = this._duration;
|
|
20
|
+
this._duration = t(e, 0, 3e4, 1e3), this.requestUpdate("duration", n);
|
|
21
21
|
}
|
|
22
|
-
async
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
async replay() {
|
|
23
|
+
if (this.cancelAll(), this._isReducedMotion()) return;
|
|
24
|
+
let e = this.collectGeometryElements();
|
|
25
|
+
if (e.length === 0) return;
|
|
26
|
+
let t = {
|
|
27
|
+
animations: [],
|
|
28
|
+
restoreQueue: /* @__PURE__ */ new Map(),
|
|
29
|
+
patchedD: /* @__PURE__ */ new Map()
|
|
28
30
|
};
|
|
29
|
-
|
|
30
|
-
if (e instanceof SVGPathElement) {
|
|
31
|
-
let r = (e.getAttribute("d") || "").split(/(?=[Mm])/).filter((e) => e.trim());
|
|
32
|
-
r.forEach((i) => {
|
|
33
|
-
let a = r.length > 1 ? e.cloneNode() : e, o = i.startsWith("m") ? `M${n.x} ${n.y}${i}` : i;
|
|
34
|
-
o = this.fixPathGap(a, o), a.setAttribute("d", o), r.length > 1 && e.parentNode?.insertBefore(a, e), t.push(a);
|
|
35
|
-
let s = a.getPointAtLength(a.getTotalLength());
|
|
36
|
-
n = {
|
|
37
|
-
x: s.x,
|
|
38
|
-
y: s.y
|
|
39
|
-
};
|
|
40
|
-
}), r.length > 1 && e.remove();
|
|
41
|
-
} else t.push(e);
|
|
42
|
-
}), t.length === 0) return this.stopAnimation();
|
|
43
|
-
let r = t.map((e, t) => new Promise((n) => {
|
|
44
|
-
this.drawLine(e, t, n);
|
|
45
|
-
}));
|
|
46
|
-
await Promise.all(r), this.stopAnimation();
|
|
31
|
+
this._activeRun = t, await Promise.all(e.map((e) => this.animateElement(e, t))), this._activeRun === t && this.finishRun(t);
|
|
47
32
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
33
|
+
cancelAll() {
|
|
34
|
+
this._activeRun && this.finishRun(this._activeRun);
|
|
35
|
+
}
|
|
36
|
+
_isReducedMotion() {
|
|
37
|
+
let e = n(this);
|
|
38
|
+
if (e) return e.isReducedMotion();
|
|
39
|
+
try {
|
|
40
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
41
|
+
} catch {
|
|
42
|
+
return !1;
|
|
53
43
|
}
|
|
54
|
-
return t;
|
|
55
44
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
e.style.strokeDasharray =
|
|
59
|
-
let
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
finishRun(e) {
|
|
46
|
+
e.animations.forEach((e) => e.cancel());
|
|
47
|
+
for (let [t, n] of e.restoreQueue) t.style.strokeDasharray = n.dasharray ?? "", t.style.strokeDashoffset = n.dashoffset ?? "";
|
|
48
|
+
for (let [t, n] of e.patchedD) t.setAttribute("d", n);
|
|
49
|
+
this._activeRun === e && (this._activeRun = void 0);
|
|
50
|
+
}
|
|
51
|
+
collectGeometryElements() {
|
|
52
|
+
let e = [], t = /* @__PURE__ */ new Set(), n = (r) => {
|
|
53
|
+
if ((r instanceof Element || r instanceof DocumentFragment) && r.querySelectorAll(l).forEach((n) => {
|
|
54
|
+
typeof n.getTotalLength == "function" && !t.has(n) && (t.add(n), e.push(n));
|
|
55
|
+
}), r instanceof Element) {
|
|
56
|
+
for (let e of r.children) n(e);
|
|
57
|
+
r.shadowRoot && n(r.shadowRoot);
|
|
58
|
+
} else if (r instanceof ShadowRoot) for (let e of r.children) n(e);
|
|
59
|
+
};
|
|
60
|
+
for (let e of this.children) n(e);
|
|
61
|
+
return e;
|
|
62
|
+
}
|
|
63
|
+
animateElement(e, t) {
|
|
64
|
+
return new Promise((n) => {
|
|
65
|
+
if (t.restoreQueue.has(e) || t.restoreQueue.set(e, {
|
|
66
|
+
dasharray: e.style.strokeDasharray,
|
|
67
|
+
dashoffset: e.style.strokeDashoffset
|
|
68
|
+
}), e.tagName === "path") {
|
|
69
|
+
let n = e.getAttribute("d");
|
|
70
|
+
n && /[Zz]\s*$/.test(n) && !t.patchedD.has(e) && (t.patchedD.set(e, n), e.setAttribute("d", this.fixPathGap(e, n)));
|
|
71
|
+
}
|
|
72
|
+
let r = parseFloat(getComputedStyle(e).strokeWidth) || 0, i = e.getTotalLength() + r;
|
|
73
|
+
e.style.strokeDasharray = `${i}`, e.style.strokeDashoffset = `${i}`;
|
|
74
|
+
let a = e.animate([{ strokeDashoffset: `${i}` }, { strokeDashoffset: "0" }], {
|
|
75
|
+
duration: this.duration,
|
|
76
|
+
easing: this.easing,
|
|
77
|
+
fill: "forwards"
|
|
78
|
+
});
|
|
79
|
+
t.animations.push(a), a.onfinish = () => {
|
|
80
|
+
n();
|
|
81
|
+
}, a.oncancel = () => {
|
|
82
|
+
n();
|
|
83
|
+
};
|
|
63
84
|
});
|
|
64
|
-
a.onfinish = n;
|
|
65
85
|
}
|
|
66
|
-
|
|
67
|
-
|
|
86
|
+
fixPathGap(e, t) {
|
|
87
|
+
e.setAttribute("d", t);
|
|
88
|
+
let n = e.getPointAtLength(0), r = e.getPointAtLength(.1);
|
|
89
|
+
return t.replace(/[Zz]\s*$/, `L${n.x.toFixed(3)} ${n.y.toFixed(3)} L${r.x.toFixed(3)} ${r.y.toFixed(3)}`);
|
|
90
|
+
}
|
|
91
|
+
handleSlotChange() {
|
|
92
|
+
this._hasAutoPlayed || (this._hasAutoPlayed = !0, this.replay());
|
|
93
|
+
}
|
|
94
|
+
disconnectedCallback() {
|
|
95
|
+
this.cancelAll(), super.disconnectedCallback();
|
|
68
96
|
}
|
|
69
97
|
render() {
|
|
70
|
-
return
|
|
71
|
-
<slot ?hidden="${this.isAnimating}" @slotchange="${this.handleSlotChange}"></slot>
|
|
72
|
-
${this.isAnimating ? this.svgClone : ""}
|
|
73
|
-
`;
|
|
98
|
+
return a`<slot @slotchange=${this.handleSlotChange}></slot>`;
|
|
74
99
|
}
|
|
75
100
|
};
|
|
76
|
-
e([
|
|
101
|
+
e([c({
|
|
77
102
|
type: Number,
|
|
78
103
|
reflect: !0
|
|
79
|
-
})],
|
|
104
|
+
})], u.prototype, "duration", null), e([c({
|
|
80
105
|
type: String,
|
|
81
106
|
reflect: !0
|
|
82
|
-
})],
|
|
107
|
+
})], u.prototype, "easing", void 0), u = e([s("web-ui-svg-draw-lines")], u);
|
|
83
108
|
//#endregion
|
|
84
|
-
export {
|
|
109
|
+
export { u as WebUiSvgDrawLines };
|
|
85
110
|
|
|
86
111
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/svg-draw-lines/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/svg-draw-lines/index.ts"],"sourcesContent":["import { html, LitElement, nothing, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { normalizeNumber } from '@/shared/normalize'\nimport { findNearestTheme } from '@/shared/theme/theme-scope'\n\nimport style from './style.css?inline'\n\nconst GEOMETRY_SELECTOR = 'path, rect, circle, line, polyline, polygon, ellipse'\n\ninterface AnimationRun {\n animations: Animation[]\n restoreQueue: Map<SVGGeometryElement, { dasharray: string | null; dashoffset: string | null }>\n patchedD: Map<SVGGeometryElement, string>\n}\n\n@customElement('web-ui-svg-draw-lines')\nexport class WebUiSvgDrawLines extends LitElement {\n static override styles = unsafeCSS(style)\n\n @property({ type: Number, reflect: true })\n get duration(): number {\n return this._duration\n }\n set duration(v: number) {\n const old = this._duration\n this._duration = normalizeNumber(v, 0, 30000, 1000)\n this.requestUpdate('duration', old)\n }\n private _duration = 1000\n\n @property({ type: String, reflect: true }) easing = 'linear'\n\n private _activeRun: AnimationRun | undefined\n private _hasAutoPlayed = false\n /**\n * 停止当前播放并重新开始。每次调用重新收集子树中的几何元素。\n * 所有元素同时开始并行的 stroke-dashoffset 动画。\n * 无目标或当前主题范围启用 reduced motion 时立即 resolve。\n */\n async replay(): Promise<void> {\n this.cancelAll()\n\n if (this._isReducedMotion()) return\n\n const targets = this.collectGeometryElements()\n if (targets.length === 0) return\n\n const run: AnimationRun = {\n animations: [],\n restoreQueue: new Map(),\n patchedD: new Map()\n }\n this._activeRun = run\n\n await Promise.all(targets.map(el => this.animateElement(el, run)))\n\n // A later replay owns the current DOM state and must not be cleaned up here.\n if (this._activeRun === run) this.finishRun(run)\n }\n\n private cancelAll() {\n if (this._activeRun) this.finishRun(this._activeRun)\n }\n\n private _isReducedMotion(): boolean {\n const theme = findNearestTheme(this)\n if (theme) return theme.isReducedMotion()\n\n try {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n } catch {\n return false\n }\n }\n\n private finishRun(run: AnimationRun) {\n run.animations.forEach(anim => anim.cancel())\n\n // The animation temporarily mutates consumer-owned SVG nodes, so always restore them.\n for (const [el, cached] of run.restoreQueue) {\n el.style.strokeDasharray = cached.dasharray ?? ''\n el.style.strokeDashoffset = cached.dashoffset ?? ''\n }\n\n for (const [el, d] of run.patchedD) {\n el.setAttribute('d', d)\n }\n\n if (this._activeRun === run) this._activeRun = undefined\n }\n\n /**\n * 深度遍历组件的 light DOM 子节点与开放 Shadow Root,\n * 收集所有 SVGGeometryElement。closed shadow root 跳过。\n */\n private collectGeometryElements(): SVGGeometryElement[] {\n const elements: SVGGeometryElement[] = []\n const seen = new Set<SVGGeometryElement>()\n\n const walk = (root: Node) => {\n // Collect SVG geometry from this subtree\n if (root instanceof Element || root instanceof DocumentFragment) {\n root.querySelectorAll(GEOMETRY_SELECTOR).forEach(el => {\n // instanceof SVGGeometryElement 在 jsdom 中未定义,使用 duck-type 检查\n if (\n typeof (el as unknown as Record<string, unknown>).getTotalLength === 'function' &&\n !seen.has(el as unknown as SVGGeometryElement)\n ) {\n seen.add(el as unknown as SVGGeometryElement)\n elements.push(el as unknown as SVGGeometryElement)\n }\n })\n }\n\n // Recurse into children and open shadow roots\n if (root instanceof Element) {\n for (const child of root.children) walk(child)\n if (root.shadowRoot) walk(root.shadowRoot)\n } else if (root instanceof ShadowRoot) {\n for (const child of root.children) walk(child)\n }\n }\n\n for (const child of this.children) walk(child)\n return elements\n }\n\n private animateElement(el: SVGGeometryElement, run: AnimationRun): Promise<void> {\n return new Promise(resolve => {\n // Save inline styles once per animation cycle\n if (!run.restoreQueue.has(el)) {\n run.restoreQueue.set(el, {\n dasharray: el.style.strokeDasharray,\n dashoffset: el.style.strokeDashoffset\n })\n }\n\n // Gap fix for paths ending with Z/z\n if (el.tagName === 'path') {\n const d = el.getAttribute('d')\n if (d && /[Zz]\\s*$/.test(d) && !run.patchedD.has(el)) {\n run.patchedD.set(el, d)\n el.setAttribute('d', this.fixPathGap(el, d))\n }\n }\n\n const strokeWidth = parseFloat(getComputedStyle(el).strokeWidth) || 0\n const len = el.getTotalLength() + strokeWidth\n\n el.style.strokeDasharray = `${len}`\n el.style.strokeDashoffset = `${len}`\n\n const anim = el.animate([{ strokeDashoffset: `${len}` }, { strokeDashoffset: '0' }], {\n duration: this.duration,\n easing: this.easing,\n fill: 'forwards'\n })\n\n run.animations.push(anim)\n\n anim.onfinish = () => {\n resolve()\n }\n\n anim.oncancel = () => {\n resolve()\n }\n })\n }\n\n /** Z → explicit line back to start + 0.1px extra, forcing render of the closing segment */\n private fixPathGap(pathEl: SVGPathElement, d: string): string {\n pathEl.setAttribute('d', d)\n const p0 = pathEl.getPointAtLength(0)\n const p1 = pathEl.getPointAtLength(0.1)\n return d.replace(/[Zz]\\s*$/, `L${p0.x.toFixed(3)} ${p0.y.toFixed(3)} L${p1.x.toFixed(3)} ${p1.y.toFixed(3)}`)\n }\n\n /** 首次 slot 内容稳定后自动播放一次 */\n private handleSlotChange() {\n if (this._hasAutoPlayed) return\n this._hasAutoPlayed = true\n void this.replay()\n }\n\n override disconnectedCallback() {\n this.cancelAll()\n super.disconnectedCallback()\n }\n\n override render() {\n return html`<slot @slotchange=${this.handleSlotChange}></slot>`\n }\n\n declare readonly $events: Record<string, never>\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-svg-draw-lines': WebUiSvgDrawLines\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/svg-draw-lines/style.css?inline
|
|
2
|
-
var e = "
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{-webkit-user-select:none;user-select:none;display:inline-block}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/svg-draw-lines/style.css?inline"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/svg-draw-lines/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n user-select: none;\n display: inline-block;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiSwitch extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult[];
|
|
4
|
+
static formAssociated: boolean;
|
|
5
|
+
private _internals?;
|
|
6
|
+
private _formDisabled;
|
|
7
|
+
private _checked;
|
|
8
|
+
get checked(): boolean;
|
|
9
|
+
set checked(v: boolean);
|
|
10
|
+
name: string;
|
|
11
|
+
value: string;
|
|
12
|
+
disabled: boolean;
|
|
13
|
+
required: boolean;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
private pressed;
|
|
16
|
+
private get _isDisabled();
|
|
17
|
+
connectedCallback(): void;
|
|
18
|
+
formResetCallback(): void;
|
|
19
|
+
formDisabledCallback(disabled: boolean): void;
|
|
20
|
+
updated(): void;
|
|
21
|
+
private _syncFormValue;
|
|
22
|
+
/** 用户点击切换开关状态,阻止 label 默认行为避免原生 checkbox 重复触发 */
|
|
23
|
+
private handleClick;
|
|
24
|
+
private handlePointerDown;
|
|
25
|
+
private handlePointerUp;
|
|
26
|
+
private handlePointerLeave;
|
|
27
|
+
render(): import('lit').TemplateResult<1>;
|
|
28
|
+
readonly $events: {
|
|
29
|
+
input: Event;
|
|
30
|
+
change: Event;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
declare global {
|
|
34
|
+
interface HTMLElementTagNameMap {
|
|
35
|
+
'web-ui-switch': WebUiSwitch;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
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-loader-circle.js";
|
|
5
|
+
import r from "./style.js";
|
|
6
|
+
import { LitElement as i, html as a, unsafeCSS as o } from "lit";
|
|
7
|
+
import { customElement as s, property as c, state as l } from "lit/decorators.js";
|
|
8
|
+
import { classMap as u } from "lit/directives/class-map.js";
|
|
9
|
+
//#region src/components/switch/index.ts
|
|
10
|
+
var d = class extends i {
|
|
11
|
+
constructor(...e) {
|
|
12
|
+
super(...e), this._formDisabled = !1, this._checked = !1, this.name = "", this.value = "", this.disabled = !1, this.required = !1, this.loading = !1, this.pressed = !1;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.styles = [o(t), o(r)];
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.formAssociated = !0;
|
|
19
|
+
}
|
|
20
|
+
get checked() {
|
|
21
|
+
return this._checked;
|
|
22
|
+
}
|
|
23
|
+
set checked(e) {
|
|
24
|
+
let t = this._checked;
|
|
25
|
+
this._checked = e, this._syncFormValue(), this.requestUpdate("checked", t);
|
|
26
|
+
}
|
|
27
|
+
get _isDisabled() {
|
|
28
|
+
return this.disabled || this._formDisabled;
|
|
29
|
+
}
|
|
30
|
+
connectedCallback() {
|
|
31
|
+
super.connectedCallback(), !this._internals && (this._internals = this.attachInternals(), this.hasAttribute("checked") && (this._checked = !0), this._syncFormValue());
|
|
32
|
+
}
|
|
33
|
+
formResetCallback() {
|
|
34
|
+
this.checked = this.hasAttribute("checked");
|
|
35
|
+
}
|
|
36
|
+
formDisabledCallback(e) {
|
|
37
|
+
this._formDisabled = e;
|
|
38
|
+
}
|
|
39
|
+
updated() {
|
|
40
|
+
this._syncFormValue(), !(!this._internals || typeof this._internals.setValidity != "function") && (this._isDisabled || !this.required || this._checked ? this._internals.setValidity({}) : this._internals.setValidity({ valueMissing: !0 }, "请启用此项"));
|
|
41
|
+
}
|
|
42
|
+
_syncFormValue() {
|
|
43
|
+
this._internals?.setFormValue?.(this._checked ? this.value || "on" : null);
|
|
44
|
+
}
|
|
45
|
+
handleClick(e) {
|
|
46
|
+
if (e.preventDefault(), this._isDisabled || this.loading) return;
|
|
47
|
+
let t = this._checked;
|
|
48
|
+
this._checked = !t, this._syncFormValue(), this.requestUpdate("checked", t), this.dispatchEvent(new Event("input", {
|
|
49
|
+
bubbles: !0,
|
|
50
|
+
composed: !0
|
|
51
|
+
})), this.dispatchEvent(new Event("change", {
|
|
52
|
+
bubbles: !0,
|
|
53
|
+
composed: !0
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
handlePointerDown() {
|
|
57
|
+
this._isDisabled || this.loading || (this.pressed = !0);
|
|
58
|
+
}
|
|
59
|
+
handlePointerUp() {
|
|
60
|
+
this.pressed = !1;
|
|
61
|
+
}
|
|
62
|
+
handlePointerLeave() {
|
|
63
|
+
this.pressed = !1;
|
|
64
|
+
}
|
|
65
|
+
render() {
|
|
66
|
+
let e = {
|
|
67
|
+
"wui-switch-track": !0,
|
|
68
|
+
"is-open": this._checked,
|
|
69
|
+
"is-disabled": this._isDisabled || this.loading
|
|
70
|
+
}, t = {
|
|
71
|
+
"wui-switch-thumb": !0,
|
|
72
|
+
"wui-glass": this.pressed,
|
|
73
|
+
"is-pressed": this.pressed
|
|
74
|
+
};
|
|
75
|
+
return a`
|
|
76
|
+
<label
|
|
77
|
+
class=${u(e)}
|
|
78
|
+
role="switch"
|
|
79
|
+
aria-checked=${String(this._checked)}
|
|
80
|
+
@click=${this.handleClick}
|
|
81
|
+
@pointerdown=${this.handlePointerDown}
|
|
82
|
+
@pointerup=${this.handlePointerUp}
|
|
83
|
+
@pointercancel=${this.handlePointerUp}
|
|
84
|
+
@pointerleave=${this.handlePointerLeave}
|
|
85
|
+
>
|
|
86
|
+
<input
|
|
87
|
+
type="checkbox"
|
|
88
|
+
.checked=${this._checked}
|
|
89
|
+
?disabled=${this._isDisabled || this.loading}
|
|
90
|
+
class="sr-only"
|
|
91
|
+
/>
|
|
92
|
+
<div class=${u(t)}>
|
|
93
|
+
${this.loading ? a`<div class="wui-switch-loading">
|
|
94
|
+
<web-ui-icon .icon=${n} size="14" color="#08f" spin></web-ui-icon>
|
|
95
|
+
</div>` : ""}
|
|
96
|
+
</div>
|
|
97
|
+
</label>
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
e([l()], d.prototype, "_formDisabled", void 0), e([l()], d.prototype, "_checked", void 0), e([c({
|
|
102
|
+
type: String,
|
|
103
|
+
reflect: !0
|
|
104
|
+
})], d.prototype, "name", void 0), e([c({ type: String })], d.prototype, "value", void 0), e([c({
|
|
105
|
+
type: Boolean,
|
|
106
|
+
reflect: !0
|
|
107
|
+
})], d.prototype, "disabled", void 0), e([c({
|
|
108
|
+
type: Boolean,
|
|
109
|
+
reflect: !0
|
|
110
|
+
})], d.prototype, "required", void 0), e([c({
|
|
111
|
+
type: Boolean,
|
|
112
|
+
reflect: !0
|
|
113
|
+
})], d.prototype, "loading", void 0), e([l()], d.prototype, "pressed", void 0), d = e([s("web-ui-switch")], d);
|
|
114
|
+
//#endregion
|
|
115
|
+
export { d as WebUiSwitch };
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/switch/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 '@/components/icon'\nimport glass from '@/assets/glass.css?inline'\nimport { lucideLoaderCircle } from '@/icons'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-switch')\nexport class WebUiSwitch extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n static formAssociated = true\n\n private _internals?: ElementInternals\n @state() private _formDisabled = false\n\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, reflect: true }) name = ''\n @property({ type: String }) value = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n @property({ type: Boolean, reflect: true }) loading = false\n @state() private pressed = false\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled\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 if (!this._internals || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || !this.required || this._checked) this._internals.setValidity({})\n else this._internals.setValidity({ valueMissing: true }, '请启用此项')\n }\n\n private _syncFormValue() {\n this._internals?.setFormValue?.(this._checked ? this.value || 'on' : null)\n }\n\n /** 用户点击切换开关状态,阻止 label 默认行为避免原生 checkbox 重复触发 */\n private handleClick(e: Event) {\n e.preventDefault()\n if (this._isDisabled || this.loading) return\n const old = this._checked\n this._checked = !old\n this._syncFormValue()\n this.requestUpdate('checked', old)\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private handlePointerDown() {\n if (this._isDisabled || this.loading) return\n this.pressed = true\n }\n\n private handlePointerUp() {\n this.pressed = false\n }\n\n private handlePointerLeave() {\n this.pressed = false\n }\n\n override render() {\n const trackCls = {\n 'wui-switch-track': true,\n 'is-open': this._checked,\n 'is-disabled': this._isDisabled || this.loading\n }\n const thumbCls = {\n 'wui-switch-thumb': true,\n 'wui-glass': this.pressed,\n 'is-pressed': this.pressed\n }\n\n return html`\n <label\n class=${classMap(trackCls)}\n role=\"switch\"\n aria-checked=${String(this._checked)}\n @click=${this.handleClick}\n @pointerdown=${this.handlePointerDown}\n @pointerup=${this.handlePointerUp}\n @pointercancel=${this.handlePointerUp}\n @pointerleave=${this.handlePointerLeave}\n >\n <input\n type=\"checkbox\"\n .checked=${this._checked}\n ?disabled=${this._isDisabled || this.loading}\n class=\"sr-only\"\n />\n <div class=${classMap(thumbCls)}>\n ${this.loading\n ? html`<div class=\"wui-switch-loading\">\n <web-ui-icon .icon=${lucideLoaderCircle} size=\"14\" color=\"#08f\" spin></web-ui-icon>\n </div>`\n : ''}\n </div>\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-switch': WebUiSwitch\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/components/switch/style.css?inline
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed}.sr-only{white-space:nowrap;clip-path:inset(50%);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.wui-switch-track{cursor:pointer;-webkit-user-select:none;user-select:none;background-color:var(--wui-color-surface-raised-deep,#e5e5ea);outline-offset:2px;border-radius:2147483647px;outline:3px solid #0000;justify-content:space-between;align-items:center;width:48px;height:24px;transition:background-color .25s;display:flex;position:relative}.wui-switch-track:focus-visible{outline-color:var(--wui-focus-ring,#08f6)}.wui-switch-track.is-open{background-color:var(--wui-color-accent,#08f)}.wui-switch-track.is-disabled{cursor:not-allowed;opacity:.4}.wui-switch-thumb{border-radius:2147483647px;width:20px;height:20px;transition:width .15s cubic-bezier(.4,0,.2,1),transform .25s cubic-bezier(.4,0,.2,1),border-radius .15s cubic-bezier(.4,0,.2,1),background-color .15s;position:absolute;top:2px;left:2px;overflow:hidden}.wui-switch-thumb.is-pressed{background-color:#0000;border-radius:2147483647px;width:32px}.wui-switch-thumb:not(.is-pressed){background-color:var(--wui-color-surface,#fff);box-shadow:1px 2px 6px #0003}.wui-switch-track.is-open .wui-switch-thumb{transform:translate(24px)}.wui-switch-track.is-open .wui-switch-thumb.is-pressed{transform:translate(12px)}.wui-switch-loading{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}";
|
|
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/switch/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n/*\n标准视觉隐藏技术(sr-only):\n业内标准的“屏幕阅读器专用”隐藏方案。\n把复选框缩放到 1x1 像素,但保留在 dom 中,\n既让肉眼看不见,又能让读屏软件识别,并允许键盘用户通过空格键切换状态。\n*/\n.sr-only {\n position: absolute;\n\n overflow: hidden;\n\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n\n white-space: nowrap;\n\n clip-path: inset(50%);\n}\n\n.wui-switch-track {\n cursor: pointer;\n user-select: none;\n\n position: relative;\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n width: 48px;\n height: 24px;\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-raised-deep, #e5e5ea);\n outline: 3px solid transparent;\n outline-offset: 2px;\n\n transition: background-color 0.25s ease;\n\n &:focus-visible {\n outline-color: var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n }\n\n &.is-open {\n background-color: var(--wui-color-accent, #08f);\n }\n\n &.is-disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.wui-switch-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n\n overflow: hidden;\n\n width: 20px;\n height: 20px;\n border-radius: calc(infinity * 1px);\n\n transition:\n width 0.15s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n border-radius 0.15s cubic-bezier(0.4, 0, 0.2, 1),\n background-color 0.15s ease;\n\n &.is-pressed {\n width: 32px;\n border-radius: calc(infinity * 1px);\n background-color: transparent;\n }\n\n &:not(.is-pressed) {\n background-color: var(--wui-color-surface, #fff);\n box-shadow: 1px 2px 6px rgb(0 0 0 / 0.2);\n }\n}\n\n.wui-switch-track.is-open .wui-switch-thumb {\n transform: translateX(24px);\n\n &.is-pressed {\n transform: translateX(12px);\n }\n}\n\n.wui-switch-loading {\n pointer-events: none;\n\n position: absolute;\n inset: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class WebUiTextarea extends LitElement {
|
|
3
|
+
static formAssociated: boolean;
|
|
4
|
+
static styles: import('lit').CSSResult[];
|
|
5
|
+
placeholder: string;
|
|
6
|
+
name: string;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
readonly: boolean;
|
|
9
|
+
required: boolean;
|
|
10
|
+
full: boolean;
|
|
11
|
+
clearable: boolean;
|
|
12
|
+
borderless: boolean;
|
|
13
|
+
rows: number;
|
|
14
|
+
minlength: number | undefined;
|
|
15
|
+
maxlength: number | undefined;
|
|
16
|
+
autosize: boolean;
|
|
17
|
+
ariaLabel: string | null;
|
|
18
|
+
ariaLabelledby: string | undefined;
|
|
19
|
+
private _value;
|
|
20
|
+
private _focused;
|
|
21
|
+
private _formDisabled;
|
|
22
|
+
private _hasPrefix;
|
|
23
|
+
private _hasSuffix;
|
|
24
|
+
private _textarea;
|
|
25
|
+
private _resizeObserver;
|
|
26
|
+
private _internals?;
|
|
27
|
+
get value(): string;
|
|
28
|
+
set value(v: string);
|
|
29
|
+
private get _isDisabled();
|
|
30
|
+
connectedCallback(): void;
|
|
31
|
+
disconnectedCallback(): void;
|
|
32
|
+
firstUpdated(): void;
|
|
33
|
+
updated(changed: Map<string, unknown>): void;
|
|
34
|
+
formDisabledCallback(disabled: boolean): void;
|
|
35
|
+
formResetCallback(): void;
|
|
36
|
+
formStateRestoreCallback(state: string | File | FormData | null): void;
|
|
37
|
+
private _getTextarea;
|
|
38
|
+
private _syncValidity;
|
|
39
|
+
private _setupAutosize;
|
|
40
|
+
private _teardownAutosize;
|
|
41
|
+
private _autosize;
|
|
42
|
+
private handleInput;
|
|
43
|
+
private handleFocus;
|
|
44
|
+
private handleBlur;
|
|
45
|
+
private handleNativeChange;
|
|
46
|
+
focus(): void;
|
|
47
|
+
blur(): void;
|
|
48
|
+
select(): void;
|
|
49
|
+
private focusTextarea;
|
|
50
|
+
private _onSlotChange;
|
|
51
|
+
private handleClear;
|
|
52
|
+
private preventMouseDownBlur;
|
|
53
|
+
render(): import('lit').TemplateResult<1>;
|
|
54
|
+
readonly $events: {
|
|
55
|
+
input: Event;
|
|
56
|
+
change: Event;
|
|
57
|
+
focus: FocusEvent;
|
|
58
|
+
blur: FocusEvent;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
declare global {
|
|
62
|
+
interface HTMLElementTagNameMap {
|
|
63
|
+
'web-ui-textarea': WebUiTextarea;
|
|
64
|
+
}
|
|
65
|
+
}
|