@greypan/web-ui 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.CN.md +36 -18
  2. package/README.md +82 -63
  3. package/dist/assets/menu-portal.js +1 -1
  4. package/dist/assets/menu-portal.js.map +1 -1
  5. package/dist/assets/selection-control.js +1 -1
  6. package/dist/assets/selection-control.js.map +1 -1
  7. package/dist/components/autocomplete/index.js +6 -6
  8. package/dist/components/autocomplete/style.js +1 -1
  9. package/dist/components/autocomplete/style.js.map +1 -1
  10. package/dist/components/badge/style.js.map +1 -1
  11. package/dist/components/button/index.d.ts +368 -1
  12. package/dist/components/button/index.js +56 -36
  13. package/dist/components/button/index.js.map +1 -1
  14. package/dist/components/button/style.js +1 -1
  15. package/dist/components/button/style.js.map +1 -1
  16. package/dist/components/checkbox/index.d.ts +3 -0
  17. package/dist/components/checkbox/index.js +33 -35
  18. package/dist/components/checkbox/index.js.map +1 -1
  19. package/dist/components/checkbox/style.js +1 -1
  20. package/dist/components/checkbox/style.js.map +1 -1
  21. package/dist/components/checkbox-group/index.js +8 -8
  22. package/dist/components/dropdown-item/style.js +1 -1
  23. package/dist/components/dropdown-item/style.js.map +1 -1
  24. package/dist/components/editable-text/index.d.ts +2 -0
  25. package/dist/components/editable-text/index.js +50 -30
  26. package/dist/components/editable-text/index.js.map +1 -1
  27. package/dist/components/icon/index.js +7 -7
  28. package/dist/components/icon/index.js.map +1 -1
  29. package/dist/components/input/index.d.ts +7 -0
  30. package/dist/components/input/index.js +34 -29
  31. package/dist/components/input/index.js.map +1 -1
  32. package/dist/components/input-number/index.d.ts +1 -0
  33. package/dist/components/input-number/index.js +28 -26
  34. package/dist/components/input-number/index.js.map +1 -1
  35. package/dist/components/layout/index.js +1 -1
  36. package/dist/components/layout/index.js.map +1 -1
  37. package/dist/components/layout/style.js +1 -1
  38. package/dist/components/layout/style.js.map +1 -1
  39. package/dist/components/option/style.js +1 -1
  40. package/dist/components/option/style.js.map +1 -1
  41. package/dist/components/popover/style.js +1 -1
  42. package/dist/components/popover/style.js.map +1 -1
  43. package/dist/components/radio/index.d.ts +3 -0
  44. package/dist/components/radio/index.js +23 -19
  45. package/dist/components/radio/index.js.map +1 -1
  46. package/dist/components/radio-group/index.js +8 -8
  47. package/dist/components/segmented/index.js +8 -8
  48. package/dist/components/select/style.js +1 -1
  49. package/dist/components/select/style.js.map +1 -1
  50. package/dist/components/slider/index.js +9 -9
  51. package/dist/components/switch/index.d.ts +1 -0
  52. package/dist/components/switch/index.js +26 -24
  53. package/dist/components/switch/index.js.map +1 -1
  54. package/dist/components/textarea/index.d.ts +7 -1
  55. package/dist/components/textarea/index.js +44 -42
  56. package/dist/components/textarea/index.js.map +1 -1
  57. package/dist/components/textarea/style.js.map +1 -1
  58. package/dist/components/theme/index.d.ts +9 -0
  59. package/dist/components/theme/index.js +128 -85
  60. package/dist/components/theme/index.js.map +1 -1
  61. package/dist/components/theme/style.js +1 -1
  62. package/dist/components/theme/style.js.map +1 -1
  63. package/dist/components/toast/toast.js +8 -8
  64. package/dist/components/toast/toast.js.map +1 -1
  65. package/dist/components/tooltip/style.js +1 -1
  66. package/dist/components/tooltip/style.js.map +1 -1
  67. package/dist/icons/generated/akar-icons-check.d.ts +6 -0
  68. package/dist/icons/generated/akar-icons-check.js +10 -0
  69. package/dist/icons/generated/akar-icons-check.js.map +1 -0
  70. package/dist/icons/generated/bi-check.d.ts +6 -0
  71. package/dist/icons/generated/bi-check.js +10 -0
  72. package/dist/icons/generated/bi-check.js.map +1 -0
  73. package/dist/icons/index.d.ts +2 -0
  74. package/dist/icons/index.js +3 -1
  75. package/dist/shared/form-association/field-id.js +9 -0
  76. package/dist/shared/form-association/field-id.js.map +1 -0
  77. package/dist/shared/form-association/index.js +9 -1
  78. package/dist/shared/form-association/index.js.map +1 -1
  79. package/dist/shared/label-emptiness/index.js +45 -0
  80. package/dist/shared/label-emptiness/index.js.map +1 -0
  81. package/dist/shared/theme/root-sync.js +24 -18
  82. package/dist/shared/theme/root-sync.js.map +1 -1
  83. package/package.json +3 -1
@@ -1,9 +1,9 @@
1
1
  import e from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
2
2
  import t from "../../assets/glass.js";
3
3
  import { installPointerFocusSuppression as n } from "../../shared/focus/pointer-focus.js";
4
- import { GroupController as r, defineGroupCoordinator as i } from "../../shared/group-management/index.js";
5
- import { normalizeLiteral as a } from "../../shared/normalize/index.js";
6
- import { FormAssociated as o, FormAssociationController as s, defineFormAssociation as c } from "../../shared/form-association/index.js";
4
+ import { FormAssociated as r, FormAssociationController as i, defineFormAssociation as a } from "../../shared/form-association/index.js";
5
+ import { GroupController as o, defineGroupCoordinator as s } from "../../shared/group-management/index.js";
6
+ import { normalizeLiteral as c } from "../../shared/normalize/index.js";
7
7
  import { attachDragGesture as l } from "../../shared/gesture/drag-gesture.js";
8
8
  import { clamp as u, snapToNearest as d } from "../../shared/gesture/physics.js";
9
9
  import f from "./style.js";
@@ -12,9 +12,9 @@ import { customElement as g, property as _, state as v } from "lit/decorators.js
12
12
  import { classMap as y } from "lit/directives/class-map.js";
13
13
  //#region src/components/segmented/index.ts
14
14
  n();
15
- var b = ["inset", "raised"], x = class extends o(p) {
15
+ var b = ["inset", "raised"], x = class extends r(p) {
16
16
  constructor(...e) {
17
- super(...e), this.name = "", this._variant = "inset", this.disabled = !1, this.required = !1, this._value = "", this._indicatorReady = !1, this._pressed = !1, this._isDragging = !1, this._dragGestureHandle = null, this._groupController = new r(this, i({
17
+ super(...e), this.name = "", this._variant = "inset", this.disabled = !1, this.required = !1, this._value = "", this._indicatorReady = !1, this._pressed = !1, this._isDragging = !1, this._dragGestureHandle = null, this._groupController = new o(this, s({
18
18
  host: this,
19
19
  getItems: () => [...this.querySelectorAll("web-ui-segmented-trigger")],
20
20
  getValue: () => this._value,
@@ -39,7 +39,7 @@ var b = ["inset", "raised"], x = class extends o(p) {
39
39
  composed: !0
40
40
  }));
41
41
  }
42
- }).make(), { afterSync: () => requestAnimationFrame(() => this._updateIndicator()) }), this._formAssociation = c({
42
+ }).make(), { afterSync: () => requestAnimationFrame(() => this._updateIndicator()) }), this._formAssociation = a({
43
43
  host: this,
44
44
  initialize: () => {
45
45
  let e = this.getAttribute("value");
@@ -54,7 +54,7 @@ var b = ["inset", "raised"], x = class extends o(p) {
54
54
  restoreState: (e) => {
55
55
  typeof e == "string" && (this.value = e);
56
56
  }
57
- }).make(), this._formAssociationController = new s(this, this._formAssociation);
57
+ }).make(), this._formAssociationController = new i(this, this._formAssociation);
58
58
  }
59
59
  static {
60
60
  this.styles = [h(t), h(f)];
@@ -64,7 +64,7 @@ var b = ["inset", "raised"], x = class extends o(p) {
64
64
  }
65
65
  set variant(e) {
66
66
  let t = this._variant;
67
- this._variant = a(e, b, "inset"), this.requestUpdate("variant", t);
67
+ this._variant = c(e, b, "inset"), this.requestUpdate("variant", t);
68
68
  }
69
69
  disconnectedCallback() {
70
70
  super.disconnectedCallback(), this._dragGestureHandle?.destroy(), this._dragGestureHandle = null;
@@ -1,5 +1,5 @@
1
1
  //#region src/components/select/style.css?inline
2
- var e = "*,:before,:after{box-sizing:border-box}:host{--wui-select-bg-hover:var(--wui-color-surface-glass-hover,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 6%, var(--wui-color-surface-glass,#fafafa57)));--wui-select-bg-active:var(--wui-color-surface-glass-active,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 15%, var(--wui-color-surface-glass,#fafafa57)));-webkit-user-select:none;user-select:none;display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.wui-select-inner{flex-direction:column;display:flex;position:relative}.select-trigger{--wui-glass-corner-radius:calc(var(--wui-control-size,36px) / 2);cursor:default;box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-control-size,36px);height:var(--wui-control-size,36px);border-radius:var(--wui-radius-control,calc(infinity * 1px));border:none;align-items:center;gap:8px;padding:0 12px;display:flex;overflow:clip}.select-trigger:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,#08f6);outline-offset:2px}:host([disabled]) .select-trigger{cursor:not-allowed}@media (hover:hover) and (pointer:fine){:host(:not([disabled])) .select-trigger:hover{background-color:var(--wui-select-bg-hover)}}:host(:not([disabled])) .select-trigger:active,:host([open]:not([disabled])) .select-trigger{background-color:var(--wui-select-bg-active)}.select-trigger[data-custom-trigger]{width:auto}.label{font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:host(:not([data-has-value])) .label{color:var(--wui-color-text-secondary,#6a6a6a)}::slotted([slot=trigger]){font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.arrow{color:var(--wui-color-text-secondary,#6a6a6a);flex-shrink:0}:host([open]) .arrow{transform:rotate(180deg)}.select-overlay{--wui-internal-glass-shadow:var(--wui-shadow-panel,0 3px 9px #00000045);--wui-internal-duration-float-enter:var(--wui-duration-float-enter,.24s);--wui-internal-duration-float-exit:var(--wui-duration-float-exit,.16s);--wui-glass-corner-radius:var(--wui-radius-menu,18px);z-index:var(--wui-layer-inline-overlay,1);box-sizing:border-box;min-width:var(--wui-overlay-min-width,200px);max-width:var(--wui-select-max-width,500px);border-radius:var(--wui-radius-menu,18px);background-color:var(--wui-color-surface-menu,#f6f6f6d1);position:absolute;overflow:hidden}.select-overlay.portal{z-index:var(--wui-layer-menu,100);position:fixed}.select-overlay.hidden{display:none}.select-scroll{max-height:var(--wui-select-max-height,200px);overflow-y:auto}.select-content{padding:4px}:host([portal]) .select-overlay{display:none}:host([data-wui-pointer-focus]) .select-trigger:focus-visible{outline-color:#0000}";
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{--wui-select-bg-hover:var(--wui-color-surface-glass-hover,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 6%, var(--wui-color-surface-glass,#fafafa57)));--wui-select-bg-active:var(--wui-color-surface-glass-active,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 15%, var(--wui-color-surface-glass,#fafafa57)));-webkit-user-select:none;user-select:none;display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.wui-select-inner{flex-direction:column;display:flex;position:relative}.select-trigger{--wui-glass-corner-radius:calc(var(--wui-control-size,36px) / 2);cursor:default;box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-control-size,36px);height:var(--wui-control-size,36px);border-radius:var(--wui-radius-control,calc(infinity * 1px));border:none;align-items:center;gap:8px;padding:0 12px;display:flex;overflow:clip}.select-trigger:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,#08f6);outline-offset:2px}:host([disabled]) .select-trigger{cursor:not-allowed}@media (hover:hover) and (pointer:fine){:host(:not([disabled])) .select-trigger:hover{background-color:var(--wui-select-bg-hover)}}:host(:not([disabled])) .select-trigger:active,:host([open]:not([disabled])) .select-trigger{background-color:var(--wui-select-bg-active)}.select-trigger[data-custom-trigger]{width:auto}.label{font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:host(:not([data-has-value])) .label{color:var(--wui-color-text-secondary,#6a6a6a)}::slotted([slot=trigger]){font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.arrow{color:var(--wui-color-text-secondary,#6a6a6a);flex-shrink:0}:host([open]) .arrow{transform:rotate(180deg)}.select-overlay{--wui-internal-glass-shadow:var(--wui-shadow-panel,0 3px 9px #00000045);--wui-internal-duration-float-enter:var(--wui-duration-float-enter,.24s);--wui-internal-duration-float-exit:var(--wui-duration-float-exit,.16s);--wui-glass-corner-radius:var(--wui-radius-menu,18px);z-index:var(--wui-layer-inline-overlay,1);box-sizing:border-box;min-width:var(--wui-overlay-min-width,200px);max-width:var(--wui-select-max-width,500px);border-radius:var(--wui-radius-menu,18px);background-color:var(--wui-color-surface-menu,#fefefec2);position:absolute;overflow:hidden}.select-overlay.portal{z-index:var(--wui-layer-menu,100);position:fixed}.select-overlay.hidden{display:none}.select-scroll{max-height:var(--wui-select-max-height,200px);overflow-y:auto}.select-content{padding:4px}:host([portal]) .select-overlay{display:none}:host([data-wui-pointer-focus]) .select-trigger:focus-visible{outline-color:#0000}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/select/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n --wui-select-bg-hover: var(\n --wui-color-surface-glass-hover,\n color-mix(in srgb, var(--wui-color-text, #1b1b1b) 6%, var(--wui-color-surface-glass, rgb(250 250 250 / 0.34)))\n );\n --wui-select-bg-active: var(\n --wui-color-surface-glass-active,\n color-mix(in srgb, var(--wui-color-text, #1b1b1b) 15%, var(--wui-color-surface-glass, rgb(250 250 250 / 0.34)))\n );\n user-select: none;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-select-inner {\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n.select-trigger {\n --wui-glass-corner-radius: calc(var(--wui-control-size, 36px) / 2);\n\n cursor: default;\n\n overflow: clip;\n display: flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-control-size, 36px);\n height: var(--wui-control-size, 36px);\n padding: 0 12px;\n border: none;\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n\n &:focus-visible {\n outline: var(--wui-focus-ring-width, 3px) solid var(--wui-color-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n:host([disabled]) .select-trigger {\n cursor: not-allowed;\n}\n\n@media (hover: hover) and (pointer: fine) {\n :host(:not([disabled])) .select-trigger:hover {\n background-color: var(--wui-select-bg-hover);\n }\n}\n\n:host(:not([disabled])) .select-trigger:active,\n:host([open]:not([disabled])) .select-trigger {\n background-color: var(--wui-select-bg-active);\n}\n\n.select-trigger[data-custom-trigger] {\n width: auto;\n}\n\n.label {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host(:not([data-has-value])) .label {\n color: var(--wui-color-text-secondary, #6a6a6a);\n}\n\n::slotted([slot='trigger']) {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.arrow {\n flex-shrink: 0;\n color: var(--wui-color-text-secondary, #6a6a6a);\n}\n\n:host([open]) .arrow {\n transform: rotate(180deg);\n}\n\n/* ===== 浮层(glass 样式参考 dialog) ===== */\n\n.select-overlay {\n --wui-internal-glass-shadow: var(--wui-shadow-panel, 0 3px 9px rgb(0 0 0 / 0.27));\n --wui-internal-duration-float-enter: var(--wui-duration-float-enter, 240ms);\n --wui-internal-duration-float-exit: var(--wui-duration-float-exit, 160ms);\n --wui-glass-corner-radius: var(--wui-radius-menu, 18px);\n position: absolute;\n z-index: var(--wui-layer-inline-overlay, 1);\n\n overflow: hidden;\n\n box-sizing: border-box;\n min-width: var(--wui-overlay-min-width, 200px);\n max-width: var(--wui-select-max-width, 500px);\n border-radius: var(--wui-radius-menu, 18px);\n\n /* 玻璃背景:wui-glass 在面板自身,这里覆盖其默认玻璃底为菜单表面色 */\n background-color: var(--wui-color-surface-menu, rgb(246 246 246 / 0.82));\n\n &.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n }\n\n &.hidden {\n display: none;\n }\n}\n\n.select-scroll {\n overflow-y: auto;\n max-height: var(--wui-select-max-height, 200px);\n}\n\n.select-content {\n padding: 4px;\n}\n\n:host([portal]) .select-overlay {\n display: none;\n}\n\n:host([data-wui-pointer-focus]) .select-trigger:focus-visible {\n outline-color: transparent;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/select/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n --wui-select-bg-hover: var(\n --wui-color-surface-glass-hover,\n color-mix(in srgb, var(--wui-color-text, #1b1b1b) 6%, var(--wui-color-surface-glass, rgb(250 250 250 / 0.34)))\n );\n --wui-select-bg-active: var(\n --wui-color-surface-glass-active,\n color-mix(in srgb, var(--wui-color-text, #1b1b1b) 15%, var(--wui-color-surface-glass, rgb(250 250 250 / 0.34)))\n );\n user-select: none;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-select-inner {\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n.select-trigger {\n --wui-glass-corner-radius: calc(var(--wui-control-size, 36px) / 2);\n\n cursor: default;\n\n overflow: clip;\n display: flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-control-size, 36px);\n height: var(--wui-control-size, 36px);\n padding: 0 12px;\n border: none;\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n\n &:focus-visible {\n outline: var(--wui-focus-ring-width, 3px) solid var(--wui-color-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n:host([disabled]) .select-trigger {\n cursor: not-allowed;\n}\n\n@media (hover: hover) and (pointer: fine) {\n :host(:not([disabled])) .select-trigger:hover {\n background-color: var(--wui-select-bg-hover);\n }\n}\n\n:host(:not([disabled])) .select-trigger:active,\n:host([open]:not([disabled])) .select-trigger {\n background-color: var(--wui-select-bg-active);\n}\n\n.select-trigger[data-custom-trigger] {\n width: auto;\n}\n\n.label {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:host(:not([data-has-value])) .label {\n color: var(--wui-color-text-secondary, #6a6a6a);\n}\n\n::slotted([slot='trigger']) {\n overflow: hidden;\n flex: 1;\n\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.arrow {\n flex-shrink: 0;\n color: var(--wui-color-text-secondary, #6a6a6a);\n}\n\n:host([open]) .arrow {\n transform: rotate(180deg);\n}\n\n.select-overlay {\n --wui-internal-glass-shadow: var(--wui-shadow-panel, 0 3px 9px rgb(0 0 0 / 0.27));\n --wui-internal-duration-float-enter: var(--wui-duration-float-enter, 240ms);\n --wui-internal-duration-float-exit: var(--wui-duration-float-exit, 160ms);\n --wui-glass-corner-radius: var(--wui-radius-menu, 18px);\n position: absolute;\n z-index: var(--wui-layer-inline-overlay, 1);\n\n overflow: hidden;\n\n box-sizing: border-box;\n min-width: var(--wui-overlay-min-width, 200px);\n max-width: var(--wui-select-max-width, 500px);\n border-radius: var(--wui-radius-menu, 18px);\n\n /* 玻璃背景:wui-glass 在面板自身,这里覆盖其默认玻璃底为菜单表面色 */\n background-color: var(--wui-color-surface-menu, rgb(254 254 254 / 0.76));\n\n &.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n }\n\n &.hidden {\n display: none;\n }\n}\n\n.select-scroll {\n overflow-y: auto;\n max-height: var(--wui-select-max-height, 200px);\n}\n\n.select-content {\n padding: 4px;\n}\n\n:host([portal]) .select-overlay {\n display: none;\n}\n\n:host([data-wui-pointer-focus]) .select-trigger:focus-visible {\n outline-color: transparent;\n}\n"],"mappings":""}
@@ -1,8 +1,8 @@
1
1
  import e from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
2
2
  import t from "../../assets/glass.js";
3
3
  import { installPointerFocusSuppression as n } from "../../shared/focus/pointer-focus.js";
4
- import { normalizeNumber as r } from "../../shared/normalize/index.js";
5
- import { FormAssociated as i, FormAssociationController as a, defineFormAssociation as o } from "../../shared/form-association/index.js";
4
+ import { FormAssociated as r, FormAssociationController as i, defineFormAssociation as a } from "../../shared/form-association/index.js";
5
+ import { normalizeNumber as o } from "../../shared/normalize/index.js";
6
6
  import { attachDragGesture as s } from "../../shared/gesture/drag-gesture.js";
7
7
  import { clamp as c } from "../../shared/gesture/physics.js";
8
8
  import l from "./style.js";
@@ -12,9 +12,9 @@ import { classMap as g } from "lit/directives/class-map.js";
12
12
  import { styleMap as _ } from "lit/directives/style-map.js";
13
13
  //#region src/components/slider/index.ts
14
14
  n();
15
- var v = class extends i(u) {
15
+ var v = class extends r(u) {
16
16
  constructor(...e) {
17
- super(...e), this.disabled = !1, this.marks = !1, this.vertical = !1, this.name = "", this.required = !1, this._value = 0, this._min = 0, this._max = 100, this._step = 1, this._dragging = !1, this._pressed = !1, this._dragGestureHandle = null, this._formAssociation = o({
17
+ super(...e), this.disabled = !1, this.marks = !1, this.vertical = !1, this.name = "", this.required = !1, this._value = 0, this._min = 0, this._max = 100, this._step = 1, this._dragging = !1, this._pressed = !1, this._dragGestureHandle = null, this._formAssociation = a({
18
18
  host: this,
19
19
  initialize: () => {
20
20
  this._value = this._normalizeValue(this._value);
@@ -33,7 +33,7 @@ var v = class extends i(u) {
33
33
  syncValidity: (e) => {
34
34
  typeof e.setValidity == "function" && e.setValidity({});
35
35
  }
36
- }).make(), this._formAssociationController = new a(this, this._formAssociation);
36
+ }).make(), this._formAssociationController = new i(this, this._formAssociation);
37
37
  }
38
38
  static {
39
39
  this.styles = [f(t), f(l)];
@@ -42,26 +42,26 @@ var v = class extends i(u) {
42
42
  return this._value;
43
43
  }
44
44
  set value(e) {
45
- let t = r(e, -Infinity, Infinity, 0), n = this._value;
45
+ let t = o(e, -Infinity, Infinity, 0), n = this._value;
46
46
  this._value = t, this._formAssociation.sync(), this.requestUpdate("value", n);
47
47
  }
48
48
  get min() {
49
49
  return this._min;
50
50
  }
51
51
  set min(e) {
52
- this._min = r(e, -Infinity, Infinity, 0);
52
+ this._min = o(e, -Infinity, Infinity, 0);
53
53
  }
54
54
  get max() {
55
55
  return this._max;
56
56
  }
57
57
  set max(e) {
58
- this._max = r(e, -Infinity, Infinity, 100);
58
+ this._max = o(e, -Infinity, Infinity, 100);
59
59
  }
60
60
  get step() {
61
61
  return this._step;
62
62
  }
63
63
  set step(e) {
64
- this._step = r(e, -Infinity, Infinity, 1);
64
+ this._step = o(e, -Infinity, Infinity, 1);
65
65
  }
66
66
  disconnectedCallback() {
67
67
  super.disconnectedCallback(), this._dragGestureHandle?.destroy(), this._dragGestureHandle = null;
@@ -381,6 +381,7 @@ export declare class WebUiSwitch extends WebUiSwitch_base {
381
381
  private _maxTravel;
382
382
  private _startOffset;
383
383
  private _dragGestureHandle;
384
+ private readonly _fieldId;
384
385
  disconnectedCallback(): void;
385
386
  private get _isDisabled();
386
387
  private readonly _formAssociation;
@@ -4,18 +4,19 @@ import t from "../../assets/glass.js";
4
4
  import n from "../../icons/generated/lucide-loader-circle.js";
5
5
  import { installPointerFocusSuppression as r } from "../../shared/focus/pointer-focus.js";
6
6
  import { FormAssociated as i, FormAssociationController as a, defineFormAssociation as o } from "../../shared/form-association/index.js";
7
- import { attachDragGesture as s } from "../../shared/gesture/drag-gesture.js";
8
- import { clamp as c, normalizeProgress as l } from "../../shared/gesture/physics.js";
9
- import u from "./style.js";
10
- import { LitElement as d, html as f, unsafeCSS as p } from "lit";
11
- import { customElement as m, property as h, state as g } from "lit/decorators.js";
12
- import { classMap as _ } from "lit/directives/class-map.js";
13
- import { styleMap as v } from "lit/directives/style-map.js";
7
+ import { createFieldId as s } from "../../shared/form-association/field-id.js";
8
+ import { attachDragGesture as c } from "../../shared/gesture/drag-gesture.js";
9
+ import { clamp as l, normalizeProgress as u } from "../../shared/gesture/physics.js";
10
+ import d from "./style.js";
11
+ import { LitElement as f, html as p, unsafeCSS as m } from "lit";
12
+ import { customElement as h, property as g, state as _ } from "lit/decorators.js";
13
+ import { classMap as v } from "lit/directives/class-map.js";
14
+ import { styleMap as y } from "lit/directives/style-map.js";
14
15
  //#region src/components/switch/index.ts
15
16
  r();
16
- var y = class extends i(d) {
17
+ var b = class extends i(f) {
17
18
  constructor(...e) {
18
- super(...e), this._checked = !1, this.name = "", this.value = "", this.disabled = !1, this.required = !1, this.loading = !1, this._pressed = !1, this._isDragging = !1, this._dragOffset = 0, this._dragProgress = 0, this._dragged = !1, this._maxTravel = 20, this._startOffset = 0, this._dragGestureHandle = null, this._formAssociation = o({
19
+ super(...e), this._checked = !1, this.name = "", this.value = "", this.disabled = !1, this.required = !1, this.loading = !1, this._pressed = !1, this._isDragging = !1, this._dragOffset = 0, this._dragProgress = 0, this._dragged = !1, this._maxTravel = 20, this._startOffset = 0, this._dragGestureHandle = null, this._fieldId = s("web-ui-switch"), this._formAssociation = o({
19
20
  host: this,
20
21
  initialize: () => {
21
22
  this.hasAttribute("checked") && (this._checked = !0);
@@ -33,7 +34,7 @@ var y = class extends i(d) {
33
34
  }).make(), this._formAssociationController = new a(this, this._formAssociation);
34
35
  }
35
36
  static {
36
- this.styles = [p(t), p(u)];
37
+ this.styles = [m(t), m(d)];
37
38
  }
38
39
  get checked() {
39
40
  return this._checked;
@@ -75,13 +76,13 @@ var y = class extends i(d) {
75
76
  let e = t.getBoundingClientRect().width || 40;
76
77
  this._maxTravel = Math.max(1, e - 4 - 20);
77
78
  } else this._maxTravel = 16;
78
- this._startOffset = this._checked ? this._maxTravel : 0, this._dragOffset = this._startOffset, this._dragProgress = +!!this._checked, this._dragGestureHandle?.destroy(), this._dragGestureHandle = s(e, {
79
+ this._startOffset = this._checked ? this._maxTravel : 0, this._dragOffset = this._startOffset, this._dragProgress = +!!this._checked, this._dragGestureHandle?.destroy(), this._dragGestureHandle = c(e, {
79
80
  axis: "x",
80
81
  threshold: 6,
81
82
  onMove: (e) => {
82
83
  this._isDragging = !0;
83
- let t = c(this._startOffset + e.deltaX, 0, this._maxTravel);
84
- this._dragOffset = t, this._dragProgress = l(t, 0, this._maxTravel), this.requestUpdate();
84
+ let t = l(this._startOffset + e.deltaX, 0, this._maxTravel);
85
+ this._dragOffset = t, this._dragProgress = u(t, 0, this._maxTravel), this.requestUpdate();
85
86
  },
86
87
  onEnd: (e) => {
87
88
  let t = this._isDragging;
@@ -122,10 +123,10 @@ var y = class extends i(d) {
122
123
  "wui-glass": this._pressed || this._isDragging,
123
124
  "is-pressed": this._pressed || this._isDragging
124
125
  }, r = this._isDragging ? { "--wui-switch-drag-offset": `${this._dragOffset}px` } : {};
125
- return f`
126
+ return p`
126
127
  <label
127
- class=${_(e)}
128
- style=${v(r)}
128
+ class=${v(e)}
129
+ style=${y(r)}
129
130
  role="switch"
130
131
  aria-checked=${String(this._checked)}
131
132
  @click=${this.handleClick}
@@ -135,13 +136,14 @@ var y = class extends i(d) {
135
136
  @pointerleave=${this.handlePointerLeave}
136
137
  >
137
138
  <input
139
+ id=${this._fieldId}
138
140
  type="checkbox"
139
141
  .checked=${this._checked}
140
142
  ?disabled=${this._isDisabled || this.loading}
141
143
  class="sr-only"
142
144
  />
143
- <div class=${_(t)}>
144
- ${this.loading ? f`<div class="wui-switch-loading">
145
+ <div class=${v(t)}>
146
+ ${this.loading ? p`<div class="wui-switch-loading">
145
147
  <web-ui-icon .icon=${n} size="14" color="#08f" spin></web-ui-icon>
146
148
  </div>` : ""}
147
149
  </div>
@@ -149,20 +151,20 @@ var y = class extends i(d) {
149
151
  `;
150
152
  }
151
153
  };
152
- e([g()], y.prototype, "_checked", void 0), e([h({
154
+ e([_()], b.prototype, "_checked", void 0), e([g({
153
155
  type: String,
154
156
  reflect: !0
155
- })], y.prototype, "name", void 0), e([h({ type: String })], y.prototype, "value", void 0), e([h({
157
+ })], b.prototype, "name", void 0), e([g({ type: String })], b.prototype, "value", void 0), e([g({
156
158
  type: Boolean,
157
159
  reflect: !0
158
- })], y.prototype, "disabled", void 0), e([h({
160
+ })], b.prototype, "disabled", void 0), e([g({
159
161
  type: Boolean,
160
162
  reflect: !0
161
- })], y.prototype, "required", void 0), e([h({
163
+ })], b.prototype, "required", void 0), e([g({
162
164
  type: Boolean,
163
165
  reflect: !0
164
- })], y.prototype, "loading", void 0), e([g()], y.prototype, "_pressed", void 0), e([g()], y.prototype, "_isDragging", void 0), e([g()], y.prototype, "_dragOffset", void 0), e([g()], y.prototype, "_dragProgress", void 0), y = e([m("web-ui-switch")], y);
166
+ })], b.prototype, "loading", void 0), e([_()], b.prototype, "_pressed", void 0), e([_()], b.prototype, "_isDragging", void 0), e([_()], b.prototype, "_dragOffset", void 0), e([_()], b.prototype, "_dragProgress", void 0), b = e([h("web-ui-switch")], b);
165
167
  //#endregion
166
- export { y as WebUiSwitch };
168
+ export { b as WebUiSwitch };
167
169
 
168
170
  //# sourceMappingURL=index.js.map
@@ -1 +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'\nimport { styleMap } from 'lit/directives/style-map.js'\n\nimport '@/components/icon'\nimport glass from '@/assets/glass.css?inline'\nimport { lucideLoaderCircle } from '@/icons'\nimport { installPointerFocusSuppression } from '@/shared/focus/pointer-focus'\nimport { FormAssociated, defineFormAssociation, FormAssociationController } from '@/shared/form-association'\nimport { attachDragGesture, type DragGestureHandle } from '@/shared/gesture/drag-gesture'\nimport { clamp, normalizeProgress } from '@/shared/gesture/physics'\n\nimport style from './style.css?inline'\n\ninstallPointerFocusSuppression()\n\n@customElement('web-ui-switch')\nexport class WebUiSwitch extends FormAssociated(LitElement) {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\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._formAssociation.sync()\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 @state() private _isDragging = false\n @state() private _dragOffset = 0\n @state() private _dragProgress = 0\n\n private _dragged = false\n private _maxTravel = 20\n private _startOffset = 0\n private _dragGestureHandle: DragGestureHandle | null = null\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this._dragGestureHandle?.destroy()\n this._dragGestureHandle = null\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formAssociation.isFormDisabled()\n }\n\n private readonly _formAssociation = defineFormAssociation<boolean>({\n host: this,\n initialize: () => {\n if (this.hasAttribute('checked')) this._checked = true\n },\n getState: () => this._checked,\n setState: checked => {\n this.checked = checked\n },\n getFormValue: () => (this._checked ? this.value || 'on' : null),\n getFormState: () => String(this._checked),\n restoreState: state => {\n if (typeof state === 'string') this.checked = state === 'true'\n },\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n private _syncValidity() {\n const internals = this._formAssociation.getInternals()\n if (!internals || typeof internals.setValidity !== 'function') return\n if (this._isDisabled || !this.required || this._checked) internals.setValidity({})\n else internals.setValidity({ valueMissing: true }, '请启用此项')\n }\n\n // 阻止 label 默认行为,避免原生 checkbox 重复触发点击。\n private handleClick(e: Event) {\n e.preventDefault()\n if (this._dragged) {\n this._dragged = false\n return\n }\n if (this._isDisabled || this.loading) return\n const old = this._checked\n this._checked = !old\n this._formAssociation.sync()\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(e: PointerEvent) {\n if (this._isDisabled || this.loading) return\n this._pressed = true\n\n const track = this.renderRoot.querySelector<HTMLElement>('.wui-switch-track')\n if (track) {\n const trackWidth = track.getBoundingClientRect().width || 40\n // 拖拽时 thumb 的 pressed 布局盒为 20px(scale(1.5) 视觉放大),因此行程按 20px 布局盒钳制;\n // 释放后的 checked 静止位移为 20px(16px thumb),两者由 transition 衔接。\n this._maxTravel = Math.max(1, trackWidth - 4 - 20)\n } else {\n this._maxTravel = 16\n }\n\n this._startOffset = this._checked ? this._maxTravel : 0\n this._dragOffset = this._startOffset\n this._dragProgress = this._checked ? 1 : 0\n\n this._dragGestureHandle?.destroy()\n this._dragGestureHandle = attachDragGesture(e, {\n axis: 'x',\n threshold: 6,\n onMove: info => {\n this._isDragging = true\n const current = clamp(this._startOffset + info.deltaX, 0, this._maxTravel)\n this._dragOffset = current\n this._dragProgress = normalizeProgress(current, 0, this._maxTravel)\n this.requestUpdate()\n },\n onEnd: info => {\n const wasDragging = this._isDragging\n this._isDragging = false\n this._pressed = false\n\n if (wasDragging) {\n this._dragged = true\n let targetChecked = this._checked\n if (info.velocityX > 300) {\n targetChecked = true\n } else if (info.velocityX < -300) {\n targetChecked = false\n } else {\n targetChecked = this._dragProgress >= 0.5\n }\n\n if (targetChecked !== this._checked) {\n const old = this._checked\n this._checked = targetChecked\n this._formAssociation.sync()\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 } else {\n this.requestUpdate()\n }\n }\n },\n onCancel: () => {\n this._isDragging = false\n this._pressed = false\n this.requestUpdate()\n }\n })\n }\n\n private handlePointerUp() {\n this._pressed = false\n }\n\n private handlePointerLeave() {\n if (!this._isDragging) {\n this._pressed = false\n }\n }\n\n override render() {\n const isOpen = this._isDragging ? this._dragProgress >= 0.5 : this._checked\n const trackCls = {\n 'wui-switch-track': true,\n 'is-open': isOpen,\n 'is-dragging': this._isDragging,\n 'is-disabled': this._isDisabled || this.loading\n }\n // wui-glass 条件化:静止态实体白 thumb,按压/拖拽时切换为玻璃(backdrop blur +\n // 无填充 + 描边)并放大,回到最初修复不跟手问题时期的视觉结构。\n const thumbCls = {\n 'wui-switch-thumb': true,\n 'wui-glass': this._pressed || this._isDragging,\n 'is-pressed': this._pressed || this._isDragging\n }\n const trackStyle = this._isDragging ? { '--wui-switch-drag-offset': `${this._dragOffset}px` } : {}\n\n return html`\n <label\n class=${classMap(trackCls)}\n style=${styleMap(trackStyle)}\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 ${\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 }\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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"}
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'\nimport { styleMap } from 'lit/directives/style-map.js'\n\nimport '@/components/icon'\nimport glass from '@/assets/glass.css?inline'\nimport { lucideLoaderCircle } from '@/icons'\nimport { installPointerFocusSuppression } from '@/shared/focus/pointer-focus'\nimport { FormAssociated, defineFormAssociation, FormAssociationController } from '@/shared/form-association'\nimport { createFieldId } from '@/shared/form-association/field-id'\nimport { attachDragGesture, type DragGestureHandle } from '@/shared/gesture/drag-gesture'\nimport { clamp, normalizeProgress } from '@/shared/gesture/physics'\n\nimport style from './style.css?inline'\n\ninstallPointerFocusSuppression()\n\n@customElement('web-ui-switch')\nexport class WebUiSwitch extends FormAssociated(LitElement) {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\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._formAssociation.sync()\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 @state() private _isDragging = false\n @state() private _dragOffset = 0\n @state() private _dragProgress = 0\n\n private _dragged = false\n private _maxTravel = 20\n private _startOffset = 0\n private _dragGestureHandle: DragGestureHandle | null = null\n private readonly _fieldId = createFieldId('web-ui-switch')\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this._dragGestureHandle?.destroy()\n this._dragGestureHandle = null\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formAssociation.isFormDisabled()\n }\n\n private readonly _formAssociation = defineFormAssociation<boolean>({\n host: this,\n initialize: () => {\n if (this.hasAttribute('checked')) this._checked = true\n },\n getState: () => this._checked,\n setState: checked => {\n this.checked = checked\n },\n getFormValue: () => (this._checked ? this.value || 'on' : null),\n getFormState: () => String(this._checked),\n restoreState: state => {\n if (typeof state === 'string') this.checked = state === 'true'\n },\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n private _syncValidity() {\n const internals = this._formAssociation.getInternals()\n if (!internals || typeof internals.setValidity !== 'function') return\n if (this._isDisabled || !this.required || this._checked) internals.setValidity({})\n else internals.setValidity({ valueMissing: true }, '请启用此项')\n }\n\n // 阻止 label 默认行为,避免原生 checkbox 重复触发点击。\n private handleClick(e: Event) {\n e.preventDefault()\n if (this._dragged) {\n this._dragged = false\n return\n }\n if (this._isDisabled || this.loading) return\n const old = this._checked\n this._checked = !old\n this._formAssociation.sync()\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(e: PointerEvent) {\n if (this._isDisabled || this.loading) return\n this._pressed = true\n\n const track = this.renderRoot.querySelector<HTMLElement>('.wui-switch-track')\n if (track) {\n const trackWidth = track.getBoundingClientRect().width || 40\n // 拖拽时 thumb 的 pressed 布局盒为 20px(scale(1.5) 视觉放大),因此行程按 20px 布局盒钳制;\n // 释放后的 checked 静止位移为 20px(16px thumb),两者由 transition 衔接。\n this._maxTravel = Math.max(1, trackWidth - 4 - 20)\n } else {\n this._maxTravel = 16\n }\n\n this._startOffset = this._checked ? this._maxTravel : 0\n this._dragOffset = this._startOffset\n this._dragProgress = this._checked ? 1 : 0\n\n this._dragGestureHandle?.destroy()\n this._dragGestureHandle = attachDragGesture(e, {\n axis: 'x',\n threshold: 6,\n onMove: info => {\n this._isDragging = true\n const current = clamp(this._startOffset + info.deltaX, 0, this._maxTravel)\n this._dragOffset = current\n this._dragProgress = normalizeProgress(current, 0, this._maxTravel)\n this.requestUpdate()\n },\n onEnd: info => {\n const wasDragging = this._isDragging\n this._isDragging = false\n this._pressed = false\n\n if (wasDragging) {\n this._dragged = true\n let targetChecked = this._checked\n if (info.velocityX > 300) {\n targetChecked = true\n } else if (info.velocityX < -300) {\n targetChecked = false\n } else {\n targetChecked = this._dragProgress >= 0.5\n }\n\n if (targetChecked !== this._checked) {\n const old = this._checked\n this._checked = targetChecked\n this._formAssociation.sync()\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 } else {\n this.requestUpdate()\n }\n }\n },\n onCancel: () => {\n this._isDragging = false\n this._pressed = false\n this.requestUpdate()\n }\n })\n }\n\n private handlePointerUp() {\n this._pressed = false\n }\n\n private handlePointerLeave() {\n if (!this._isDragging) {\n this._pressed = false\n }\n }\n\n override render() {\n const isOpen = this._isDragging ? this._dragProgress >= 0.5 : this._checked\n const trackCls = {\n 'wui-switch-track': true,\n 'is-open': isOpen,\n 'is-dragging': this._isDragging,\n 'is-disabled': this._isDisabled || this.loading\n }\n // wui-glass 条件化:静止态实体白 thumb,按压/拖拽时切换为玻璃(backdrop blur +\n // 无填充 + 描边)并放大,回到最初修复不跟手问题时期的视觉结构。\n const thumbCls = {\n 'wui-switch-thumb': true,\n 'wui-glass': this._pressed || this._isDragging,\n 'is-pressed': this._pressed || this._isDragging\n }\n const trackStyle = this._isDragging ? { '--wui-switch-drag-offset': `${this._dragOffset}px` } : {}\n\n return html`\n <label\n class=${classMap(trackCls)}\n style=${styleMap(trackStyle)}\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 id=${this._fieldId}\n type=\"checkbox\"\n .checked=${this._checked}\n ?disabled=${this._isDisabled || this.loading}\n class=\"sr-only\"\n />\n <div class=${classMap(thumbCls)}>\n ${\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 }\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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"}
@@ -386,6 +386,7 @@ export declare class WebUiTextarea extends WebUiTextarea_base {
386
386
  private _hasSuffix;
387
387
  private _textarea;
388
388
  private _resizeObserver;
389
+ private readonly _fieldId;
389
390
  get value(): string;
390
391
  set value(v: string);
391
392
  private get _isDisabled();
@@ -403,8 +404,13 @@ export declare class WebUiTextarea extends WebUiTextarea_base {
403
404
  private handleFocus;
404
405
  private handleBlur;
405
406
  private handleNativeChange;
406
- focus(): void;
407
+ focus(options?: FocusOptions): void;
407
408
  blur(): void;
409
+ /**
410
+ * 公共 API:全选当前值。
411
+ *
412
+ * `disabled` 时与 `focus()` 一致不产生效果;原生控件未渲染时安全 no-op。
413
+ */
408
414
  select(): void;
409
415
  private focusTextarea;
410
416
  private _onSlotChange;
@@ -2,18 +2,19 @@ import e from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate
2
2
  import "../icon/index.js";
3
3
  import t from "../../assets/glass.js";
4
4
  import n from "../../icons/generated/jam-close-circle-f.js";
5
- import "../button/index.js";
6
5
  import { FormAssociated as r, FormAssociationController as i, defineFormAssociation as a, forwardInputValidity as o } from "../../shared/form-association/index.js";
7
- import s from "./style.js";
8
- import { LitElement as c, html as l, nothing as u, unsafeCSS as d } from "lit";
9
- import { customElement as f, property as p, state as m } from "lit/decorators.js";
10
- import { ifDefined as h } from "lit/directives/if-defined.js";
11
- import { classMap as g } from "lit/directives/class-map.js";
12
- import { styleMap as _ } from "lit/directives/style-map.js";
6
+ import "../button/index.js";
7
+ import { createFieldId as s } from "../../shared/form-association/field-id.js";
8
+ import c from "./style.js";
9
+ import { LitElement as l, html as u, nothing as d, unsafeCSS as f } from "lit";
10
+ import { customElement as p, property as m, state as h } from "lit/decorators.js";
11
+ import { ifDefined as g } from "lit/directives/if-defined.js";
12
+ import { classMap as _ } from "lit/directives/class-map.js";
13
+ import { styleMap as v } from "lit/directives/style-map.js";
13
14
  //#region src/components/textarea/index.ts
14
- var v = class extends r(c) {
15
+ var y = class extends r(l) {
15
16
  constructor(...e) {
16
- super(...e), this.placeholder = "", this.name = "", this.disabled = !1, this.readonly = !1, this.required = !1, this.full = !1, this.clearable = !1, this.borderless = !1, this.rows = 3, this.autosize = !1, this.maxHeight = 0, this.ariaLabel = null, this._value = "", this._focused = !1, this._hasPrefix = !1, this._hasSuffix = !1, this._textarea = null, this._resizeObserver = null, this._formAssociation = a({
17
+ super(...e), this.placeholder = "", this.name = "", this.disabled = !1, this.readonly = !1, this.required = !1, this.full = !1, this.clearable = !1, this.borderless = !1, this.rows = 3, this.autosize = !1, this.maxHeight = 0, this.ariaLabel = null, this._value = "", this._focused = !1, this._hasPrefix = !1, this._hasSuffix = !1, this._textarea = null, this._resizeObserver = null, this._fieldId = s("web-ui-textarea"), this._formAssociation = a({
17
18
  host: this,
18
19
  getState: () => this._value,
19
20
  setState: (e) => {
@@ -28,7 +29,7 @@ var v = class extends r(c) {
28
29
  }).make(), this._formAssociationController = new i(this, this._formAssociation);
29
30
  }
30
31
  static {
31
- this.styles = [d(t), d(s)];
32
+ this.styles = [f(t), f(c)];
32
33
  }
33
34
  get value() {
34
35
  return this._value;
@@ -80,7 +81,7 @@ var v = class extends r(c) {
80
81
  this._textarea && this.autosize && (this._textarea.style.height = "auto", this._textarea.style.height = `${this._textarea.scrollHeight}px`);
81
82
  }
82
83
  handleInput(e) {
83
- e.target instanceof HTMLTextAreaElement && (this._value = e.target.value, this._formAssociation.sync(), this._syncValidity(), this._autosize());
84
+ this._isDisabled || this.readonly || e.target instanceof HTMLTextAreaElement && (this._value = e.target.value, this._formAssociation.sync(), this._syncValidity(), this._autosize());
84
85
  }
85
86
  handleFocus() {
86
87
  this._isDisabled || (this._focused = !0);
@@ -89,19 +90,19 @@ var v = class extends r(c) {
89
90
  this._focused = !1;
90
91
  }
91
92
  handleNativeChange(e) {
92
- e.target instanceof HTMLTextAreaElement && (this._value = e.target.value, this._formAssociation.sync(), this._syncValidity(), this.dispatchEvent(new Event("change", {
93
+ this._isDisabled || this.readonly || e.target instanceof HTMLTextAreaElement && (this._value = e.target.value, this._formAssociation.sync(), this._syncValidity(), this.dispatchEvent(new Event("change", {
93
94
  bubbles: !0,
94
95
  composed: !0
95
96
  })));
96
97
  }
97
- focus() {
98
- this.shadowRoot?.querySelector("textarea")?.focus();
98
+ focus(e) {
99
+ this._isDisabled || this.shadowRoot?.querySelector("textarea")?.focus(e);
99
100
  }
100
101
  blur() {
101
102
  this.shadowRoot?.querySelector("textarea")?.blur();
102
103
  }
103
104
  select() {
104
- this.shadowRoot?.querySelector("textarea")?.select();
105
+ this._isDisabled || this.shadowRoot?.querySelector("textarea")?.select();
105
106
  }
106
107
  focusTextarea() {
107
108
  this._isDisabled || this.shadowRoot?.querySelector("textarea")?.focus();
@@ -122,28 +123,29 @@ var v = class extends r(c) {
122
123
  }
123
124
  render() {
124
125
  let e = this.clearable && this._value && !this.readonly;
125
- return l`
126
+ return u`
126
127
  <div class="wui-glass wui-textarea-inner" @click=${this.focusTextarea}>
127
- <slot name="prefix" class=${g({ empty: !this._hasPrefix })} @slotchange=${this._onSlotChange}></slot>
128
+ <slot name="prefix" class=${_({ empty: !this._hasPrefix })} @slotchange=${this._onSlotChange}></slot>
128
129
  <textarea
130
+ id=${this._fieldId}
129
131
  placeholder=${this.placeholder}
130
132
  name=${this.name}
131
- aria-label=${h(this.ariaLabel)}
132
- aria-labelledby=${h(this.ariaLabelledby)}
133
+ aria-label=${g(this.ariaLabel)}
134
+ aria-labelledby=${g(this.ariaLabelledby)}
133
135
  .rows=${this.rows}
134
- minlength=${h(this.minlength)}
135
- maxlength=${h(this.maxlength)}
136
+ minlength=${g(this.minlength)}
137
+ maxlength=${g(this.maxlength)}
136
138
  ?disabled=${this._isDisabled}
137
139
  ?readonly=${this.readonly}
138
140
  ?required=${this.required}
139
141
  .value=${this._value}
140
- style=${this.maxHeight > 0 ? _({ "max-height": `${this.maxHeight}px` }) : u}
142
+ style=${this.maxHeight > 0 ? v({ "max-height": `${this.maxHeight}px` }) : d}
141
143
  @input=${this.handleInput}
142
144
  @change=${this.handleNativeChange}
143
145
  @focus=${this.handleFocus}
144
146
  @blur=${this.handleBlur}
145
147
  ></textarea>
146
- ${e ? l`<web-ui-button
148
+ ${e ? u`<web-ui-button
147
149
  icon
148
150
  variant="ghost"
149
151
  size="20"
@@ -153,62 +155,62 @@ var v = class extends r(c) {
153
155
  >
154
156
  <web-ui-icon .icon=${n} size="14"></web-ui-icon>
155
157
  </web-ui-button>` : ""}
156
- <slot name="suffix" class=${g({ empty: !this._hasSuffix })} @slotchange=${this._onSlotChange}></slot>
158
+ <slot name="suffix" class=${_({ empty: !this._hasSuffix })} @slotchange=${this._onSlotChange}></slot>
157
159
  </div>
158
160
  `;
159
161
  }
160
162
  };
161
- e([p({
163
+ e([m({
162
164
  type: String,
163
165
  reflect: !0
164
- })], v.prototype, "placeholder", void 0), e([p({
166
+ })], y.prototype, "placeholder", void 0), e([m({
165
167
  type: String,
166
168
  reflect: !0
167
- })], v.prototype, "name", void 0), e([p({
169
+ })], y.prototype, "name", void 0), e([m({
168
170
  type: Boolean,
169
171
  reflect: !0
170
- })], v.prototype, "disabled", void 0), e([p({
172
+ })], y.prototype, "disabled", void 0), e([m({
171
173
  type: Boolean,
172
174
  reflect: !0
173
- })], v.prototype, "readonly", void 0), e([p({
175
+ })], y.prototype, "readonly", void 0), e([m({
174
176
  type: Boolean,
175
177
  reflect: !0
176
- })], v.prototype, "required", void 0), e([p({
178
+ })], y.prototype, "required", void 0), e([m({
177
179
  type: Boolean,
178
180
  reflect: !0
179
- })], v.prototype, "full", void 0), e([p({
181
+ })], y.prototype, "full", void 0), e([m({
180
182
  type: Boolean,
181
183
  reflect: !0
182
- })], v.prototype, "clearable", void 0), e([p({
184
+ })], y.prototype, "clearable", void 0), e([m({
183
185
  type: Boolean,
184
186
  reflect: !0
185
- })], v.prototype, "borderless", void 0), e([p({
187
+ })], y.prototype, "borderless", void 0), e([m({
186
188
  type: Number,
187
189
  reflect: !0
188
- })], v.prototype, "rows", void 0), e([p({
190
+ })], y.prototype, "rows", void 0), e([m({
189
191
  type: Number,
190
192
  reflect: !0
191
- })], v.prototype, "minlength", void 0), e([p({
193
+ })], y.prototype, "minlength", void 0), e([m({
192
194
  type: Number,
193
195
  reflect: !0
194
- })], v.prototype, "maxlength", void 0), e([p({
196
+ })], y.prototype, "maxlength", void 0), e([m({
195
197
  type: Boolean,
196
198
  reflect: !0
197
- })], v.prototype, "autosize", void 0), e([p({
199
+ })], y.prototype, "autosize", void 0), e([m({
198
200
  type: Number,
199
201
  reflect: !0,
200
202
  attribute: "max-height"
201
- })], v.prototype, "maxHeight", void 0), e([p({
203
+ })], y.prototype, "maxHeight", void 0), e([m({
202
204
  type: String,
203
205
  attribute: "aria-label"
204
- })], v.prototype, "ariaLabel", void 0), e([p({
206
+ })], y.prototype, "ariaLabel", void 0), e([m({
205
207
  type: String,
206
208
  attribute: "aria-labelledby"
207
- })], v.prototype, "ariaLabelledby", void 0), e([m()], v.prototype, "_value", void 0), e([m()], v.prototype, "_focused", void 0), e([m()], v.prototype, "_hasPrefix", void 0), e([m()], v.prototype, "_hasSuffix", void 0), e([p({
209
+ })], y.prototype, "ariaLabelledby", void 0), e([h()], y.prototype, "_value", void 0), e([h()], y.prototype, "_focused", void 0), e([h()], y.prototype, "_hasPrefix", void 0), e([h()], y.prototype, "_hasSuffix", void 0), e([m({
208
210
  type: String,
209
211
  reflect: !0
210
- })], v.prototype, "value", null), v = e([f("web-ui-textarea")], v);
212
+ })], y.prototype, "value", null), y = e([p("web-ui-textarea")], y);
211
213
  //#endregion
212
- export { v as WebUiTextarea };
214
+ export { y as WebUiTextarea };
213
215
 
214
216
  //# sourceMappingURL=index.js.map