@greypan/web-ui 3.0.1 → 4.0.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 (184) hide show
  1. package/README.CN.md +292 -31
  2. package/README.md +294 -31
  3. package/dist/_virtual/{_@oxc-project_runtime@0.140.0 → _@oxc-project_runtime@0.146.0}/helpers/esm/decorate.js +1 -1
  4. package/dist/assets/glass.js +1 -1
  5. package/dist/assets/glass.js.map +1 -1
  6. package/dist/assets/menu-portal.js +1 -1
  7. package/dist/assets/menu-portal.js.map +1 -1
  8. package/dist/assets/overlay-motion.js +1 -1
  9. package/dist/assets/overlay-motion.js.map +1 -1
  10. package/dist/assets/toast-containers.js +1 -1
  11. package/dist/assets/toast-containers.js.map +1 -1
  12. package/dist/components/autocomplete/index.d.ts +4 -12
  13. package/dist/components/autocomplete/index.js +95 -102
  14. package/dist/components/autocomplete/index.js.map +1 -1
  15. package/dist/components/autocomplete/style.js +1 -1
  16. package/dist/components/autocomplete/style.js.map +1 -1
  17. package/dist/components/avatar/index.d.ts +0 -1
  18. package/dist/components/avatar/index.js +8 -13
  19. package/dist/components/avatar/index.js.map +1 -1
  20. package/dist/components/back-top/index.js +1 -1
  21. package/dist/components/back-top/style.js +1 -1
  22. package/dist/components/back-top/style.js.map +1 -1
  23. package/dist/components/badge/index.d.ts +1 -0
  24. package/dist/components/badge/index.js +12 -14
  25. package/dist/components/badge/index.js.map +1 -1
  26. package/dist/components/button/index.d.ts +2 -0
  27. package/dist/components/button/index.js +51 -38
  28. package/dist/components/button/index.js.map +1 -1
  29. package/dist/components/button/style.js +1 -1
  30. package/dist/components/button/style.js.map +1 -1
  31. package/dist/components/button-group/index.d.ts +1 -2
  32. package/dist/components/button-group/index.js +19 -23
  33. package/dist/components/button-group/index.js.map +1 -1
  34. package/dist/components/checkbox/index.d.ts +4 -7
  35. package/dist/components/checkbox/index.js +48 -37
  36. package/dist/components/checkbox/index.js.map +1 -1
  37. package/dist/components/checkbox/style.js +1 -1
  38. package/dist/components/checkbox/style.js.map +1 -1
  39. package/dist/components/checkbox-group/index.d.ts +4 -10
  40. package/dist/components/checkbox-group/index.js +74 -60
  41. package/dist/components/checkbox-group/index.js.map +1 -1
  42. package/dist/components/context-menu/index.js +7 -8
  43. package/dist/components/context-menu/index.js.map +1 -1
  44. package/dist/components/dialog/index.js +6 -6
  45. package/dist/components/dialog/index.js.map +1 -1
  46. package/dist/components/dialog/style.js +1 -1
  47. package/dist/components/dialog/style.js.map +1 -1
  48. package/dist/components/drawer/index.d.ts +15 -0
  49. package/dist/components/drawer/index.js +58 -34
  50. package/dist/components/drawer/index.js.map +1 -1
  51. package/dist/components/drawer/style.js +1 -1
  52. package/dist/components/drawer/style.js.map +1 -1
  53. package/dist/components/dropdown/index.js +1 -1
  54. package/dist/components/dropdown-divider/index.js +1 -1
  55. package/dist/components/dropdown-header/index.js +1 -1
  56. package/dist/components/dropdown-header/style.js +1 -1
  57. package/dist/components/dropdown-header/style.js.map +1 -1
  58. package/dist/components/dropdown-item/index.js +3 -2
  59. package/dist/components/dropdown-item/index.js.map +1 -1
  60. package/dist/components/empty/index.js +1 -1
  61. package/dist/components/empty/style.js +1 -1
  62. package/dist/components/empty/style.js.map +1 -1
  63. package/dist/components/icon/index.js +1 -1
  64. package/dist/components/index.js +9 -9
  65. package/dist/components/input/index.d.ts +2 -3
  66. package/dist/components/input/index.js +62 -52
  67. package/dist/components/input/index.js.map +1 -1
  68. package/dist/components/input/style.js +1 -1
  69. package/dist/components/input/style.js.map +1 -1
  70. package/dist/components/input-number/index.d.ts +2 -3
  71. package/dist/components/input-number/index.js +58 -38
  72. package/dist/components/input-number/index.js.map +1 -1
  73. package/dist/components/input-number/style.js +1 -1
  74. package/dist/components/input-number/style.js.map +1 -1
  75. package/dist/components/layout/index.d.ts +53 -3
  76. package/dist/components/layout/index.js +146 -39
  77. package/dist/components/layout/index.js.map +1 -1
  78. package/dist/components/layout/style.js +1 -1
  79. package/dist/components/layout/style.js.map +1 -1
  80. package/dist/components/option/index.js +1 -1
  81. package/dist/components/option/style.js +1 -1
  82. package/dist/components/option/style.js.map +1 -1
  83. package/dist/components/popover/index.js +7 -5
  84. package/dist/components/popover/index.js.map +1 -1
  85. package/dist/components/popover/style.js +1 -1
  86. package/dist/components/popover/style.js.map +1 -1
  87. package/dist/components/radio/index.d.ts +4 -7
  88. package/dist/components/radio/index.js +48 -37
  89. package/dist/components/radio/index.js.map +1 -1
  90. package/dist/components/radio/style.js +1 -1
  91. package/dist/components/radio/style.js.map +1 -1
  92. package/dist/components/radio-group/index.d.ts +4 -10
  93. package/dist/components/radio-group/index.js +70 -52
  94. package/dist/components/radio-group/index.js.map +1 -1
  95. package/dist/components/segmented/index.d.ts +6 -11
  96. package/dist/components/segmented/index.js +67 -55
  97. package/dist/components/segmented/index.js.map +1 -1
  98. package/dist/components/segmented/style.js +1 -1
  99. package/dist/components/segmented/style.js.map +1 -1
  100. package/dist/components/segmented-trigger/index.d.ts +1 -2
  101. package/dist/components/segmented-trigger/index.js +18 -19
  102. package/dist/components/segmented-trigger/index.js.map +1 -1
  103. package/dist/components/segmented-trigger/style.js +1 -1
  104. package/dist/components/segmented-trigger/style.js.map +1 -1
  105. package/dist/components/select/index.d.ts +13 -8
  106. package/dist/components/select/index.js +110 -75
  107. package/dist/components/select/index.js.map +1 -1
  108. package/dist/components/select/style.js +1 -1
  109. package/dist/components/select/style.js.map +1 -1
  110. package/dist/components/slider/index.d.ts +3 -5
  111. package/dist/components/slider/index.js +59 -42
  112. package/dist/components/slider/index.js.map +1 -1
  113. package/dist/components/slider/style.js +1 -1
  114. package/dist/components/slider/style.js.map +1 -1
  115. package/dist/components/spinner/index.d.ts +0 -2
  116. package/dist/components/spinner/index.js +14 -13
  117. package/dist/components/spinner/index.js.map +1 -1
  118. package/dist/components/spinner/style.js +1 -1
  119. package/dist/components/spinner/style.js.map +1 -1
  120. package/dist/components/svg-draw-lines/index.js +1 -1
  121. package/dist/components/switch/index.d.ts +5 -6
  122. package/dist/components/switch/index.js +51 -37
  123. package/dist/components/switch/index.js.map +1 -1
  124. package/dist/components/switch/style.js +1 -1
  125. package/dist/components/switch/style.js.map +1 -1
  126. package/dist/components/textarea/index.d.ts +5 -6
  127. package/dist/components/textarea/index.js +73 -63
  128. package/dist/components/textarea/index.js.map +1 -1
  129. package/dist/components/textarea/style.js +1 -1
  130. package/dist/components/textarea/style.js.map +1 -1
  131. package/dist/components/theme/index.js +1 -1
  132. package/dist/components/theme/style.js +1 -1
  133. package/dist/components/theme/style.js.map +1 -1
  134. package/dist/components/toast/style.js +1 -1
  135. package/dist/components/toast/style.js.map +1 -1
  136. package/dist/components/toast/toast.js +12 -12
  137. package/dist/components/toast/toast.js.map +1 -1
  138. package/dist/components/tooltip/index.js +1 -1
  139. package/dist/components/tooltip/style.js +1 -1
  140. package/dist/components/tooltip/style.js.map +1 -1
  141. package/dist/icons/generated/lucide-clapperboard.d.ts +6 -0
  142. package/dist/icons/generated/lucide-clapperboard.js +10 -0
  143. package/dist/icons/generated/lucide-clapperboard.js.map +1 -0
  144. package/dist/icons/generated/lucide-eye.d.ts +6 -0
  145. package/dist/icons/generated/lucide-eye.js +10 -0
  146. package/dist/icons/generated/lucide-eye.js.map +1 -0
  147. package/dist/icons/generated/lucide-headphones.d.ts +6 -0
  148. package/dist/icons/generated/lucide-headphones.js +10 -0
  149. package/dist/icons/generated/lucide-headphones.js.map +1 -0
  150. package/dist/icons/generated/lucide-link.d.ts +6 -0
  151. package/dist/icons/generated/lucide-link.js +10 -0
  152. package/dist/icons/generated/lucide-link.js.map +1 -0
  153. package/dist/icons/generated/lucide-pen-line.d.ts +6 -0
  154. package/dist/icons/generated/lucide-pen-line.js +10 -0
  155. package/dist/icons/generated/lucide-pen-line.js.map +1 -0
  156. package/dist/icons/generated/lucide-play.d.ts +6 -0
  157. package/dist/icons/generated/lucide-play.js +10 -0
  158. package/dist/icons/generated/lucide-play.js.map +1 -0
  159. package/dist/icons/generated/lucide-sliders-horizontal.d.ts +6 -0
  160. package/dist/icons/generated/lucide-sliders-horizontal.js +10 -0
  161. package/dist/icons/generated/lucide-sliders-horizontal.js.map +1 -0
  162. package/dist/icons/index.d.ts +7 -0
  163. package/dist/icons/index.js +8 -1
  164. package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js +1 -3
  165. package/dist/node_modules/.pnpm/@floating-ui_core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
  166. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +2 -1
  167. package/dist/node_modules/.pnpm/@floating-ui_utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -1
  168. package/dist/shared/events/user-change.js.map +1 -1
  169. package/dist/shared/form-association/index.js +41 -0
  170. package/dist/shared/form-association/index.js.map +1 -0
  171. package/dist/shared/group-management/index.js +109 -0
  172. package/dist/shared/group-management/index.js.map +1 -0
  173. package/dist/shared/menu-portal/menu-tree.js +20 -7
  174. package/dist/shared/menu-portal/menu-tree.js.map +1 -1
  175. package/dist/shared/option-portal/index.js +65 -0
  176. package/dist/shared/option-portal/index.js.map +1 -0
  177. package/dist/shared/overlay/overlay.js +1 -1
  178. package/dist/shared/overlay/overlay.js.map +1 -1
  179. package/dist/shared/overlay/portal.js +9 -6
  180. package/dist/shared/overlay/portal.js.map +1 -1
  181. package/dist/shared/overlay/presence.js.map +1 -1
  182. package/dist/shared/visible-area/index.js +69 -0
  183. package/dist/shared/visible-area/index.js.map +1 -0
  184. package/package.json +6 -4
@@ -1,5 +1,5 @@
1
1
  //#region src/components/popover/style.css?inline
2
- var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-flex}:host([disabled]){cursor:not-allowed}.popover-trigger{display:inline-flex}.popover-anchor{display:inline-flex;position:relative}.popover-panel{--wui-glass-shadow:var(--wui-shadow-pop,0 3px 9px #00000045);z-index:var(--wui-layer-local-overlay,1);box-sizing:border-box;width:max-content;max-width:min(90vw,400px);font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);background-color:var(--wui-color-surface-overlay,#f6f6f6e0);border-radius:20px;padding:8px 12px;line-height:1.5;position:absolute;top:-9999px;left:-9999px}.popover-panel:where([hidden]){display:none}.popover-panel:focus-visible{outline:2px solid var(--wui-focus-ring,#08f6);outline-offset:2px}.popover-panel.portal{z-index:var(--wui-layer-menu,100);position:fixed}:host([portal]) .popover-panel{display:none}";
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-flex}:host([disabled]){cursor:not-allowed}.popover-trigger{display:inline-flex}.popover-anchor{display:inline-flex;position:relative}.popover-panel{--wui-internal-glass-shadow:var(--wui-shadow-panel,0 3px 9px #00000045);z-index:var(--wui-layer-inline-overlay,1);box-sizing:border-box;width:max-content;max-width:min(90vw,400px);font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);background-color:var(--wui-color-surface-overlay,#f6f6f6d1);border-radius:20px;padding:8px 12px;line-height:1.5;position:absolute;top:-9999px;left:-9999px}.popover-panel:where([hidden]){display:none}.popover-panel:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,#08f6);outline-offset:2px}.popover-panel.portal{z-index:var(--wui-layer-menu,100);position:fixed}:host([portal]) .popover-panel{display:none}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/popover/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-flex;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.popover-trigger {\n display: inline-flex;\n}\n\n.popover-anchor {\n position: relative;\n display: inline-flex;\n}\n\n.popover-panel {\n --wui-glass-shadow: var(--wui-shadow-pop, 0 3px 9px rgb(0 0 0 / 0.27));\n position: absolute;\n z-index: var(--wui-layer-local-overlay, 1);\n top: -9999px;\n left: -9999px;\n\n box-sizing: border-box;\n width: max-content;\n max-width: min(90vw, 400px);\n padding: 8px 12px;\n border-radius: 20px;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1.5;\n color: var(--wui-color-text, #1b1b1b);\n\n background-color: var(--wui-color-surface-overlay, rgb(246 246 246 / 0.88));\n\n &:where([hidden]) {\n display: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n.popover-panel.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n}\n\n:host([portal]) .popover-panel {\n display: none;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/popover/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-flex;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.popover-trigger {\n display: inline-flex;\n}\n\n.popover-anchor {\n position: relative;\n display: inline-flex;\n}\n\n.popover-panel {\n --wui-internal-glass-shadow: var(--wui-shadow-panel, 0 3px 9px rgb(0 0 0 / 0.27));\n position: absolute;\n z-index: var(--wui-layer-inline-overlay, 1);\n top: -9999px;\n left: -9999px;\n\n box-sizing: border-box;\n width: max-content;\n max-width: min(90vw, 400px);\n padding: 8px 12px;\n border-radius: 20px;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1.5;\n color: var(--wui-color-text, #1b1b1b);\n\n background-color: var(--wui-color-surface-overlay, rgb(246 246 246 / 0.82));\n\n &:where([hidden]) {\n display: none;\n }\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.popover-panel.portal {\n position: fixed;\n z-index: var(--wui-layer-menu, 100);\n}\n\n:host([portal]) .popover-panel {\n display: none;\n}\n"],"mappings":""}
@@ -2,9 +2,7 @@ import { LitElement } from 'lit';
2
2
  export declare class WebUiRadio extends LitElement {
3
3
  static styles: import('lit').CSSResult;
4
4
  static formAssociated: boolean;
5
- private _internals?;
6
- private _formDisabled;
7
- private _groupDisabled;
5
+ private readonly _groupManagement;
8
6
  private _checked;
9
7
  get checked(): boolean;
10
8
  set checked(v: boolean);
@@ -14,12 +12,11 @@ export declare class WebUiRadio extends LitElement {
14
12
  required: boolean;
15
13
  private get _isDisabled();
16
14
  private get _isManagedByGroup();
17
- setGroupDisabled(disabled: boolean): void;
18
- connectedCallback(): void;
15
+ private readonly _formAssociation;
16
+ private readonly _formAssociationController;
19
17
  formResetCallback(): void;
20
18
  formDisabledCallback(disabled: boolean): void;
21
- updated(): void;
22
- private _syncFormValue;
19
+ formStateRestoreCallback(state: string | File | FormData | null): void;
23
20
  private _syncValidity;
24
21
  private handleClick;
25
22
  private handleKeyDown;
@@ -1,15 +1,33 @@
1
- import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
- import t from "./style.js";
3
- import { LitElement as n, html as r, unsafeCSS as i } from "lit";
4
- import { customElement as a, property as o, state as s } from "lit/decorators.js";
5
- import { classMap as c } from "lit/directives/class-map.js";
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
2
+ import { FormAssociationController as t, defineFormAssociation as n } from "../../shared/form-association/index.js";
3
+ import { defineGroupManaged as r } from "../../shared/group-management/index.js";
4
+ import i from "./style.js";
5
+ import { LitElement as a, html as o, unsafeCSS as s } from "lit";
6
+ import { customElement as c, property as l, state as u } from "lit/decorators.js";
7
+ import { classMap as d } from "lit/directives/class-map.js";
6
8
  //#region src/components/radio/index.ts
7
- var l = class extends n {
9
+ var f = class extends a {
8
10
  constructor(...e) {
9
- super(...e), this._formDisabled = !1, this._groupDisabled = !1, this._checked = !1, this.value = "", this.name = "", this.disabled = !1, this.required = !1;
11
+ super(...e), this._groupManagement = r(this, { requestUpdate: () => this.requestUpdate() }).make(), this._checked = !1, this.value = "", this.name = "", this.disabled = !1, this.required = !1, this._formAssociation = n({
12
+ host: this,
13
+ initialize: () => {
14
+ this.hasAttribute("checked") && (this._checked = !0);
15
+ },
16
+ getState: () => this._checked,
17
+ setState: (e) => {
18
+ this.checked = e;
19
+ },
20
+ getFormValue: () => !this._isManagedByGroup && this._checked ? this.value || "on" : null,
21
+ getFormState: () => String(this._checked),
22
+ restoreState: (e) => {
23
+ typeof e == "string" && (this.checked = e === "true");
24
+ },
25
+ isStateManaged: () => this._isManagedByGroup,
26
+ syncValidity: () => this._syncValidity()
27
+ }).make(), this._formAssociationController = new t(this, this._formAssociation);
10
28
  }
11
29
  static {
12
- this.styles = i(t);
30
+ this.styles = s(i);
13
31
  }
14
32
  static {
15
33
  this.formAssociated = !0;
@@ -19,44 +37,36 @@ var l = class extends n {
19
37
  }
20
38
  set checked(e) {
21
39
  let t = this._checked;
22
- this._checked = e, this._syncFormValue(), this.requestUpdate("checked", t);
40
+ this._checked = e, this._formAssociation.sync(), this.requestUpdate("checked", t);
23
41
  }
24
42
  get _isDisabled() {
25
- return this.disabled || this._formDisabled || this._groupDisabled;
43
+ return this.disabled || this._formAssociation.isFormDisabled() || this._groupManagement.getContext()?.disabled === !0;
26
44
  }
27
45
  get _isManagedByGroup() {
28
- return this.closest("web-ui-radio-group") !== null;
29
- }
30
- setGroupDisabled(e) {
31
- this._groupDisabled = e;
32
- }
33
- connectedCallback() {
34
- super.connectedCallback(), !this._internals && (this._internals = this.attachInternals(), this.hasAttribute("checked") && (this._checked = !0), this._syncFormValue());
46
+ return this._groupManagement.getContext() !== void 0;
35
47
  }
36
48
  formResetCallback() {
37
- this.checked = this.hasAttribute("checked");
49
+ this._formAssociation.reset();
38
50
  }
39
51
  formDisabledCallback(e) {
40
- this._formDisabled = e;
41
- }
42
- updated() {
43
- this._syncFormValue(), this._syncValidity();
52
+ this._formAssociation.setDisabled(e);
44
53
  }
45
- _syncFormValue() {
46
- this._internals?.setFormValue?.(!this._isManagedByGroup && this._checked ? this.value || "on" : null);
54
+ formStateRestoreCallback(e) {
55
+ this._formAssociation.restore(e);
47
56
  }
48
57
  _syncValidity() {
49
- if (!(!this._internals || typeof this._internals.setValidity != "function")) {
58
+ let e = this._formAssociation.getInternals();
59
+ if (!(!e || typeof e.setValidity != "function")) {
50
60
  if (this._isDisabled || this._isManagedByGroup || !this.required || this._checked) {
51
- this._internals.setValidity({});
61
+ e.setValidity({});
52
62
  return;
53
63
  }
54
- this._internals.setValidity({ valueMissing: !0 }, "请选择一项");
64
+ e.setValidity({ valueMissing: !0 }, "请选择一项");
55
65
  }
56
66
  }
57
67
  handleClick() {
58
68
  if (this._isDisabled || this._checked) return;
59
- this._checked = !0, this._syncFormValue(), this.requestUpdate("checked", !1);
69
+ this._checked = !0, this._formAssociation.sync(), this.requestUpdate("checked", !1);
60
70
  let e = this._isManagedByGroup ? {
61
71
  bubbles: !1,
62
72
  composed: !1
@@ -70,13 +80,14 @@ var l = class extends n {
70
80
  (e.key === "Enter" || e.key === " ") && (e.preventDefault(), this.handleClick());
71
81
  }
72
82
  render() {
73
- return r`
74
- <label
75
- class=${c({
83
+ let e = {
76
84
  "wui-radio": !0,
77
85
  "is-checked": this._checked,
78
86
  "is-disabled": this._isDisabled
79
- })}
87
+ };
88
+ return o`
89
+ <label
90
+ class=${d(e)}
80
91
  tabindex=${this._isDisabled ? "-1" : "0"}
81
92
  role="radio"
82
93
  aria-checked=${String(this._checked)}
@@ -92,17 +103,17 @@ var l = class extends n {
92
103
  `;
93
104
  }
94
105
  };
95
- e([s()], l.prototype, "_formDisabled", void 0), e([s()], l.prototype, "_groupDisabled", void 0), e([s()], l.prototype, "_checked", void 0), e([o({ type: String })], l.prototype, "value", void 0), e([o({
106
+ e([u()], f.prototype, "_checked", void 0), e([l({ type: String })], f.prototype, "value", void 0), e([l({
96
107
  type: String,
97
108
  reflect: !0
98
- })], l.prototype, "name", void 0), e([o({
109
+ })], f.prototype, "name", void 0), e([l({
99
110
  type: Boolean,
100
111
  reflect: !0
101
- })], l.prototype, "disabled", void 0), e([o({
112
+ })], f.prototype, "disabled", void 0), e([l({
102
113
  type: Boolean,
103
114
  reflect: !0
104
- })], l.prototype, "required", void 0), l = e([a("web-ui-radio")], l);
115
+ })], f.prototype, "required", void 0), f = e([c("web-ui-radio")], f);
105
116
  //#endregion
106
- export { l as WebUiRadio };
117
+ export { f as WebUiRadio };
107
118
 
108
119
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio')\nexport class WebUiRadio extends LitElement {\n static override styles = unsafeCSS(style)\n static formAssociated = true\n\n // 内部表单关联实例(connectedCallback 中初始化)\n private _internals?: ElementInternals\n @state() private _formDisabled = false\n @state() private _groupDisabled = false\n\n // 内部 checked 状态,通过 getter/setter 暴露为公共 API\n @state() private _checked = false\n\n get checked(): boolean {\n return this._checked\n }\n\n set checked(v: boolean) {\n const old = this._checked\n this._checked = v\n this._syncFormValue()\n this.requestUpdate('checked', old)\n }\n\n @property({ type: String }) value = ''\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled || this._groupDisabled\n }\n\n private get _isManagedByGroup(): boolean {\n return this.closest('web-ui-radio-group') !== null\n }\n\n setGroupDisabled(disabled: boolean) {\n this._groupDisabled = disabled\n }\n\n override connectedCallback() {\n super.connectedCallback()\n if (this._internals) return\n this._internals = this.attachInternals()\n if (this.hasAttribute('checked')) {\n this._checked = true\n }\n this._syncFormValue()\n }\n\n formResetCallback() {\n this.checked = this.hasAttribute('checked')\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n override updated() {\n this._syncFormValue()\n this._syncValidity()\n }\n\n private _syncFormValue() {\n this._internals?.setFormValue?.(!this._isManagedByGroup && this._checked ? this.value || 'on' : null)\n }\n\n private _syncValidity() {\n if (!this._internals || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || this._isManagedByGroup || !this.required || this._checked) {\n this._internals.setValidity({})\n return\n }\n this._internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n // 用户点击选中(已选中时不重复触发)\n private handleClick() {\n if (this._isDisabled || this._checked) return\n this._checked = true\n this._syncFormValue()\n this.requestUpdate('checked', false)\n // group-managed 时事件不冒泡/不组合,由 group 统一派发一次 host 事件\n const opts: EventInit = this._isManagedByGroup\n ? { bubbles: false, composed: false }\n : { bubbles: true, composed: true }\n this.dispatchEvent(new Event('input', opts))\n this.dispatchEvent(new Event('change', opts))\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.handleClick()\n }\n }\n\n override render() {\n const cls = {\n 'wui-radio': true,\n 'is-checked': this._checked,\n 'is-disabled': this._isDisabled\n }\n\n return html`\n <label\n class=${classMap(cls)}\n tabindex=${this._isDisabled ? '-1' : '0'}\n role=\"radio\"\n aria-checked=${String(this._checked)}\n aria-disabled=${String(this._isDisabled)}\n @click=${this.handleClick}\n @keydown=${this.handleKeyDown}\n >\n <span class=\"wui-radio-circle\">\n <span class=\"wui-radio-dot\"></span>\n </span>\n <span class=\"wui-radio-label\"><slot></slot></span>\n </label>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio': WebUiRadio\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nimport { defineFormAssociation, FormAssociationController } from '@/shared/form-association'\nimport { defineGroupManaged, type SelectionGroupContext } from '@/shared/group-management'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio')\nexport class WebUiRadio extends LitElement {\n static override styles = unsafeCSS(style)\n static formAssociated = true\n\n private readonly _groupManagement = defineGroupManaged<SelectionGroupContext>(this, {\n requestUpdate: () => this.requestUpdate()\n }).make()\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._formAssociation.sync()\n this.requestUpdate('checked', old)\n }\n\n @property({ type: String }) value = ''\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n\n private get _isDisabled(): boolean {\n return (\n this.disabled || this._formAssociation.isFormDisabled() || this._groupManagement.getContext()?.disabled === true\n )\n }\n\n private get _isManagedByGroup(): boolean {\n return this._groupManagement.getContext() !== undefined\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._isManagedByGroup && 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 isStateManaged: () => this._isManagedByGroup,\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n formResetCallback() {\n this._formAssociation.reset()\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formAssociation.setDisabled(disabled)\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this._formAssociation.restore(state)\n }\n\n private _syncValidity() {\n const internals = this._formAssociation.getInternals()\n if (!internals || typeof internals.setValidity !== 'function') return\n if (this._isDisabled || this._isManagedByGroup || !this.required || this._checked) {\n internals.setValidity({})\n return\n }\n internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n private handleClick() {\n if (this._isDisabled || this._checked) return\n this._checked = true\n this._formAssociation.sync()\n this.requestUpdate('checked', false)\n // group-managed 时事件不冒泡/不组合,由 group 统一派发一次 host 事件\n const opts: EventInit = this._isManagedByGroup\n ? { bubbles: false, composed: false }\n : { bubbles: true, composed: true }\n this.dispatchEvent(new Event('input', opts))\n this.dispatchEvent(new Event('change', opts))\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.handleClick()\n }\n }\n\n override render() {\n const cls = {\n 'wui-radio': true,\n 'is-checked': this._checked,\n 'is-disabled': this._isDisabled\n }\n\n return html`\n <label\n class=${classMap(cls)}\n tabindex=${this._isDisabled ? '-1' : '0'}\n role=\"radio\"\n aria-checked=${String(this._checked)}\n aria-disabled=${String(this._isDisabled)}\n @click=${this.handleClick}\n @keydown=${this.handleKeyDown}\n >\n <span class=\"wui-radio-circle\">\n <span class=\"wui-radio-dot\"></span>\n </span>\n <span class=\"wui-radio-label\"><slot></slot></span>\n </label>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio': WebUiRadio\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  //#region src/components/radio/style.css?inline
2
- var e = "*,:before,:after{box-sizing:border-box}:host{cursor:pointer;display:inline-block}:host([disabled]){cursor:not-allowed}.wui-radio{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);align-items:center;gap:10px;line-height:1;display:inline-flex}.wui-radio:focus-visible{outline:3px solid var(--wui-focus-ring,#08f6);outline-offset:2px;border-radius:2147483647px}.wui-radio.is-disabled{cursor:not-allowed;color:var(--wui-color-text-muted,#6a6a6a);opacity:.4}.wui-radio-circle{background-color:var(--wui-color-surface-raised,#f2f2f7);border-radius:2147483647px;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;transition:background-color .2s,border-color .2s;display:flex}.is-checked .wui-radio-circle{background-color:var(--wui-color-accent,#08f)}.wui-radio-dot{opacity:0;background-color:var(--wui-color-surface,#fff);width:8px;height:8px;transition:opacity var(--wui-duration-trigger,.16s) ease, transform var(--wui-duration-trigger,.16s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1));border-radius:2147483647px;transform:scale(.85);box-shadow:inset 0 -1px 2px #0000001f,inset 0 1px 2px #ffffff80,0 0 4px #0088ff4d}.is-checked .wui-radio-dot{opacity:1;transform:scale(1)}.wui-radio-label{pointer-events:none}@media (prefers-reduced-motion:reduce){.wui-radio-dot,.is-checked .wui-radio-dot{transform:none}}";
2
+ var e = "*,:before,:after{box-sizing:border-box}:host{cursor:pointer;display:inline-block}:host([disabled]){cursor:not-allowed}.wui-radio{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);align-items:center;gap:10px;line-height:1;display:inline-flex}.wui-radio:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,#08f6);outline-offset:2px;border-radius:2147483647px}.wui-radio.is-disabled{cursor:not-allowed;color:var(--wui-color-text-secondary,#6a6a6a);opacity:.4}.wui-radio-circle{background-color:var(--wui-color-surface-raised,#f2f2f7);border-radius:2147483647px;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;transition:background-color .2s,border-color .2s;display:flex}.is-checked .wui-radio-circle{background-color:var(--wui-color-accent,#08f)}.wui-radio-dot{opacity:0;background-color:var(--wui-color-surface,#fff);width:8px;height:8px;transition:opacity var(--wui-duration-trigger,.16s) ease, transform var(--wui-duration-trigger,.16s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1));border-radius:2147483647px;transform:scale(.85);box-shadow:inset 0 -1px 2px #0000001f,inset 0 1px 2px #ffffff80,0 0 4px #0088ff4d}.is-checked .wui-radio-dot{opacity:1;transform:scale(1)}.wui-radio-label{pointer-events:none}@media (prefers-reduced-motion:reduce){.wui-radio-dot,.is-checked .wui-radio-dot{transform:none}}";
3
3
  //#endregion
4
4
  export { e as default };
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/radio/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n cursor: pointer;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.wui-radio {\n cursor: pointer;\n user-select: none;\n\n display: inline-flex;\n gap: 10px;\n align-items: center;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1;\n color: var(--wui-color-text, #1b1b1b);\n\n &:focus-visible {\n border-radius: calc(infinity * 1px);\n outline: 3px solid var(--wui-focus-ring, rgb(0 136 255 / 0.4));\n outline-offset: 2px;\n }\n}\n\n.wui-radio.is-disabled {\n cursor: not-allowed;\n color: var(--wui-color-text-muted, #6a6a6a);\n opacity: 0.4;\n}\n\n.wui-radio-circle {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 18px;\n height: 18px;\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-raised, #f2f2f7);\n\n transition:\n background-color 0.2s ease,\n border-color 0.2s ease;\n}\n\n.is-checked .wui-radio-circle {\n background-color: var(--wui-color-accent, #08f);\n}\n\n.wui-radio-dot {\n transform: scale(0.85);\n\n width: 8px;\n height: 8px;\n border-radius: calc(infinity * 1px);\n\n opacity: 0;\n background-color: var(--wui-color-surface, #fff);\n box-shadow:\n inset 0 -1px 2px rgb(0 0 0 / 0.12),\n inset 0 1px 2px rgb(255 255 255 / 0.5),\n 0 0 4px rgb(0 136 255 / 0.3);\n\n transition:\n opacity var(--wui-duration-trigger, 160ms) ease,\n transform var(--wui-duration-trigger, 160ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1));\n}\n\n.is-checked .wui-radio-dot {\n transform: scale(1);\n opacity: 1;\n}\n\n.wui-radio-label {\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wui-radio-dot,\n .is-checked .wui-radio-dot {\n transform: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/radio/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n cursor: pointer;\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.wui-radio {\n cursor: pointer;\n user-select: none;\n\n display: inline-flex;\n gap: 10px;\n align-items: center;\n\n font-size: var(--wui-font-size, 14px);\n line-height: 1;\n color: var(--wui-color-text, #1b1b1b);\n\n &:focus-visible {\n border-radius: calc(infinity * 1px);\n outline: 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.wui-radio.is-disabled {\n cursor: not-allowed;\n color: var(--wui-color-text-secondary, #6a6a6a);\n opacity: 0.4;\n}\n\n.wui-radio-circle {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 18px;\n height: 18px;\n border-radius: calc(infinity * 1px);\n\n background-color: var(--wui-color-surface-raised, #f2f2f7);\n\n transition:\n background-color 0.2s ease,\n border-color 0.2s ease;\n}\n\n.is-checked .wui-radio-circle {\n background-color: var(--wui-color-accent, #08f);\n}\n\n.wui-radio-dot {\n transform: scale(0.85);\n\n width: 8px;\n height: 8px;\n border-radius: calc(infinity * 1px);\n\n opacity: 0;\n background-color: var(--wui-color-surface, #fff);\n box-shadow:\n inset 0 -1px 2px rgb(0 0 0 / 0.12),\n inset 0 1px 2px rgb(255 255 255 / 0.5),\n 0 0 4px rgb(0 136 255 / 0.3);\n\n transition:\n opacity var(--wui-duration-trigger, 160ms) ease,\n transform var(--wui-duration-trigger, 160ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1));\n}\n\n.is-checked .wui-radio-dot {\n transform: scale(1);\n opacity: 1;\n}\n\n.wui-radio-label {\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .wui-radio-dot,\n .is-checked .wui-radio-dot {\n transform: none;\n }\n}\n"],"mappings":""}
@@ -5,23 +5,17 @@ export declare class WebUiRadioGroup extends LitElement {
5
5
  name: string;
6
6
  disabled: boolean;
7
7
  required: boolean;
8
- private _internals?;
9
8
  private _value;
10
- private _formDisabled;
11
- private _initialValue;
9
+ private readonly _groupController;
12
10
  get value(): string;
13
11
  set value(v: string);
14
12
  private get _isDisabled();
15
- connectedCallback(): void;
16
- disconnectedCallback(): void;
17
- updated(changed: Map<string, unknown>): void;
13
+ private readonly _formAssociation;
14
+ private readonly _formAssociationController;
18
15
  formResetCallback(): void;
19
16
  formDisabledCallback(disabled: boolean): void;
20
- private _syncFormValue;
17
+ formStateRestoreCallback(state: string | File | FormData | null): void;
21
18
  private _syncValidity;
22
- private _syncValueToChildren;
23
- private _handleChildChange;
24
- private _handleSlotChange;
25
19
  render(): import('lit').TemplateResult<1>;
26
20
  readonly $events: {
27
21
  input: Event;
@@ -1,14 +1,57 @@
1
- import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
2
- import t from "./style.js";
3
- import { LitElement as n, html as r, unsafeCSS as i } from "lit";
4
- import { customElement as a, property as o, state as s } from "lit/decorators.js";
1
+ import e from "../../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
2
+ import { FormAssociationController as t, defineFormAssociation as n } from "../../shared/form-association/index.js";
3
+ import { GroupController as r, defineGroupCoordinator as i } from "../../shared/group-management/index.js";
4
+ import a from "./style.js";
5
+ import { LitElement as o, html as s, unsafeCSS as c } from "lit";
6
+ import { customElement as l, property as u, state as d } from "lit/decorators.js";
5
7
  //#region src/components/radio-group/index.ts
6
- var c = class extends n {
8
+ var f = class extends o {
7
9
  constructor(...e) {
8
- super(...e), this.name = "", this.disabled = !1, this.required = !1, this._value = "", this._formDisabled = !1, this._initialValue = "";
10
+ super(...e), this.name = "", this.disabled = !1, this.required = !1, this._value = "", this._groupController = new r(this, i({
11
+ host: this,
12
+ getItems: () => [...this.querySelectorAll("web-ui-radio")],
13
+ getValue: () => this._value,
14
+ setValue: (e) => {
15
+ this.value = e;
16
+ },
17
+ getDisabled: () => this._isDisabled,
18
+ isItem: (e) => e instanceof HTMLElement && e.matches("web-ui-radio"),
19
+ isItemSelected: (e, t) => e.value === t,
20
+ getNextValue: (e, t) => e.checked ? e.value : t,
21
+ valuesEqual: (e, t) => e === t,
22
+ copyValue: (e) => e,
23
+ setItemSelected: (e, t) => {
24
+ e.checked = t;
25
+ },
26
+ dispatchValueChange: () => {
27
+ this.dispatchEvent(new Event("input", {
28
+ bubbles: !0,
29
+ composed: !0
30
+ })), this.dispatchEvent(new Event("change", {
31
+ bubbles: !0,
32
+ composed: !0
33
+ }));
34
+ }
35
+ }).make()), this._formAssociation = n({
36
+ host: this,
37
+ initialize: () => {
38
+ let e = this.getAttribute("value");
39
+ e !== null && (this.value = e);
40
+ },
41
+ getState: () => this._value,
42
+ setState: (e) => {
43
+ this.value = e;
44
+ },
45
+ getFormValue: () => this.name && this._value ? this._value : null,
46
+ getFormState: () => this._value,
47
+ restoreState: (e) => {
48
+ typeof e == "string" && (this.value = e);
49
+ },
50
+ syncValidity: () => this._syncValidity()
51
+ }).make(), this._formAssociationController = new t(this, this._formAssociation);
9
52
  }
10
53
  static {
11
- this.styles = i(t);
54
+ this.styles = c(a);
12
55
  }
13
56
  static {
14
57
  this.formAssociated = !0;
@@ -18,70 +61,45 @@ var c = class extends n {
18
61
  }
19
62
  set value(e) {
20
63
  let t = this._value;
21
- this._value = e, this._syncFormValue(), this.requestUpdate("value", t);
64
+ this._value = e, this._formAssociation.sync(), this.requestUpdate("value", t);
22
65
  }
23
66
  get _isDisabled() {
24
- return this.disabled || this._formDisabled;
25
- }
26
- connectedCallback() {
27
- super.connectedCallback(), this._internals ||= this.attachInternals();
28
- let e = this.getAttribute("value");
29
- e !== null && (this.value = e), this._initialValue = this._value, this.addEventListener("change", this._handleChildChange, !0);
30
- }
31
- disconnectedCallback() {
32
- super.disconnectedCallback(), this.removeEventListener("change", this._handleChildChange, !0);
33
- }
34
- updated(e) {
35
- (e.has("value") || e.has("disabled") || e.has("_formDisabled")) && this._syncValueToChildren(), this._syncFormValue(), this._syncValidity();
67
+ return this.disabled || this._formAssociation.isFormDisabled();
36
68
  }
37
69
  formResetCallback() {
38
- this.value = this._initialValue;
70
+ this._formAssociation.reset();
39
71
  }
40
72
  formDisabledCallback(e) {
41
- this._formDisabled = e;
73
+ this._formAssociation.setDisabled(e), this._groupController.sync();
42
74
  }
43
- _syncFormValue() {
44
- this._internals?.setFormValue?.(this.name && this._value ? this._value : null);
75
+ formStateRestoreCallback(e) {
76
+ this._formAssociation.restore(e);
45
77
  }
46
78
  _syncValidity() {
47
- !this._internals || typeof this._internals.setValidity != "function" || (this._isDisabled || !this.required || this._value ? this._internals.setValidity({}) : this._internals.setValidity({ valueMissing: !0 }, "请选择一项"));
48
- }
49
- _syncValueToChildren() {
50
- this.querySelectorAll("web-ui-radio").forEach((e) => {
51
- e.checked = e.value === this._value, e.setGroupDisabled(this._isDisabled);
52
- });
53
- }
54
- _handleChildChange(e) {
55
- if (this._isDisabled) return;
56
- let t = e.target;
57
- if (!t.matches?.("web-ui-radio")) return;
58
- let n = t;
59
- !n.checked || n.value === this._value || (this.value = n.value, this.dispatchEvent(new Event("input", {
60
- bubbles: !0,
61
- composed: !0
62
- })), this.dispatchEvent(new Event("change", {
63
- bubbles: !0,
64
- composed: !0
65
- })));
66
- }
67
- _handleSlotChange() {
68
- this._syncValueToChildren();
79
+ let e = this._formAssociation.getInternals();
80
+ if (!(!e || typeof e.setValidity != "function")) {
81
+ if (this._isDisabled || !this.required || this._value) {
82
+ e.setValidity({});
83
+ return;
84
+ }
85
+ e.setValidity({ valueMissing: !0 }, "请选择一项");
86
+ }
69
87
  }
70
88
  render() {
71
- return r`<div class="wui-radio-group"><slot @slotchange=${this._handleSlotChange}></slot></div>`;
89
+ return s`<div class="wui-radio-group"><slot></slot></div>`;
72
90
  }
73
91
  };
74
- e([o({
92
+ e([u({
75
93
  type: String,
76
94
  reflect: !0
77
- })], c.prototype, "name", void 0), e([o({
95
+ })], f.prototype, "name", void 0), e([u({
78
96
  type: Boolean,
79
97
  reflect: !0
80
- })], c.prototype, "disabled", void 0), e([o({
98
+ })], f.prototype, "disabled", void 0), e([u({
81
99
  type: Boolean,
82
100
  reflect: !0
83
- })], c.prototype, "required", void 0), e([s()], c.prototype, "_value", void 0), e([s()], c.prototype, "_formDisabled", void 0), c = e([a("web-ui-radio-group")], c);
101
+ })], f.prototype, "required", void 0), e([d()], f.prototype, "_value", void 0), f = e([l("web-ui-radio-group")], f);
84
102
  //#endregion
85
- export { c as WebUiRadioGroup };
103
+ export { f as WebUiRadioGroup };
86
104
 
87
105
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio-group/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport type { WebUiRadio } from '../radio'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio-group')\nexport class WebUiRadioGroup extends LitElement {\n static override styles = unsafeCSS(style)\n static formAssociated = true\n\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n\n private _internals?: ElementInternals\n @state() private _value = ''\n @state() private _formDisabled = false\n private _initialValue = ''\n\n get value(): string {\n return this._value\n }\n\n set value(v: string) {\n const old = this._value\n this._value = v\n this._syncFormValue()\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formDisabled\n }\n\n override connectedCallback() {\n super.connectedCallback()\n if (!this._internals) this._internals = this.attachInternals()\n const attributeValue = this.getAttribute('value')\n if (attributeValue !== null) this.value = attributeValue\n this._initialValue = this._value\n // group-managed 子项以 bubbles:false 派发 change,须用 capture 相位才能观察到子项事件,\n // 同时该事件不会冒泡到 group 外部的同名监听器\n this.addEventListener('change', this._handleChildChange, true)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('change', this._handleChildChange, true)\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') || changed.has('disabled') || changed.has('_formDisabled')) this._syncValueToChildren()\n this._syncFormValue()\n this._syncValidity()\n }\n\n formResetCallback() {\n this.value = this._initialValue\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formDisabled = disabled\n }\n\n private _syncFormValue() {\n this._internals?.setFormValue?.(this.name && this._value ? this._value : null)\n }\n\n private _syncValidity() {\n if (!this._internals || typeof this._internals.setValidity !== 'function') return\n if (this._isDisabled || !this.required || this._value) this._internals.setValidity({})\n else this._internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n private _syncValueToChildren() {\n this.querySelectorAll<WebUiRadio>('web-ui-radio').forEach(radio => {\n radio.checked = radio.value === this._value\n radio.setGroupDisabled(this._isDisabled)\n })\n }\n\n private _handleChildChange(e: Event) {\n if (this._isDisabled) return\n const target = e.target as HTMLElement\n if (!target.matches?.('web-ui-radio')) return\n\n const radio = target as WebUiRadio\n if (!radio.checked || radio.value === this._value) return\n\n this.value = radio.value\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private _handleSlotChange() {\n this._syncValueToChildren()\n }\n\n override render() {\n return html`<div class=\"wui-radio-group\"><slot @slotchange=${this._handleSlotChange}></slot></div>`\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio-group': WebUiRadioGroup\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/radio-group/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { defineFormAssociation, FormAssociationController } from '@/shared/form-association'\nimport { defineGroupCoordinator, GroupController } from '@/shared/group-management'\n\nimport type { WebUiRadio } from '../radio'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-radio-group')\nexport class WebUiRadioGroup extends LitElement {\n static override styles = unsafeCSS(style)\n static formAssociated = true\n\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) required = false\n\n @state() private _value = ''\n\n private readonly _groupController = new GroupController(\n this,\n defineGroupCoordinator<WebUiRadio, string>({\n host: this,\n getItems: () => [...this.querySelectorAll<WebUiRadio>('web-ui-radio')],\n getValue: () => this._value,\n setValue: value => {\n this.value = value\n },\n getDisabled: () => this._isDisabled,\n isItem: (target): target is WebUiRadio => target instanceof HTMLElement && target.matches('web-ui-radio'),\n isItemSelected: (radio, value) => radio.value === value,\n getNextValue: (radio, value) => (radio.checked ? radio.value : value),\n valuesEqual: (a, b) => a === b,\n copyValue: value => value,\n setItemSelected: (radio, selected) => {\n radio.checked = selected\n },\n dispatchValueChange: () => {\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n }).make()\n )\n\n get value(): string {\n return this._value\n }\n\n set value(v: string) {\n const old = this._value\n this._value = v\n this._formAssociation.sync()\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formAssociation.isFormDisabled()\n }\n\n private readonly _formAssociation = defineFormAssociation<string>({\n host: this,\n initialize: () => {\n const attributeValue = this.getAttribute('value')\n if (attributeValue !== null) this.value = attributeValue\n },\n getState: () => this._value,\n setState: value => {\n this.value = value\n },\n getFormValue: () => (this.name && this._value ? this._value : null),\n getFormState: () => this._value,\n restoreState: state => {\n if (typeof state === 'string') this.value = state\n },\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n formResetCallback() {\n this._formAssociation.reset()\n }\n\n formDisabledCallback(disabled: boolean) {\n this._formAssociation.setDisabled(disabled)\n this._groupController.sync()\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this._formAssociation.restore(state)\n }\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._value) {\n internals.setValidity({})\n return\n }\n internals.setValidity({ valueMissing: true }, '请选择一项')\n }\n\n override render() {\n return html`<div class=\"wui-radio-group\"><slot></slot></div>`\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-radio-group': WebUiRadioGroup\n }\n}\n"],"mappings":"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"}
@@ -1,27 +1,22 @@
1
- import { LitElement, PropertyValues } from 'lit';
1
+ import { LitElement } from 'lit';
2
2
  export declare class WebUiSegmented extends LitElement {
3
3
  static styles: import('lit').CSSResult[];
4
4
  static formAssociated: boolean;
5
5
  name: string;
6
6
  disabled: boolean;
7
7
  required: boolean;
8
- private _internals?;
9
8
  private _value;
10
- private _formDisabled;
11
- private _initialValue;
9
+ private _indicatorReady;
10
+ private readonly _groupController;
12
11
  get value(): string;
13
12
  set value(v: string);
14
- private readonly childObserver;
15
- private _syncPropsToChildren;
16
13
  private get _isDisabled();
17
14
  private _updateIndicator;
18
- updated(props: PropertyValues): void;
19
- connectedCallback(): void;
20
- firstUpdated(): void;
21
- disconnectedCallback(): void;
22
- private _handleChildChange;
15
+ private readonly _formAssociation;
16
+ private readonly _formAssociationController;
23
17
  formResetCallback(): void;
24
18
  formDisabledCallback(disabled: boolean): void;
19
+ formStateRestoreCallback(state: string | File | FormData | null): void;
25
20
  render(): import('lit').TemplateResult<1>;
26
21
  readonly $events: {
27
22
  input: Event;