@vscode-elements/elements 2.3.0 → 2.3.1-pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/includes/test-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Borrowed from Shoelace\n\nimport {sendMouse} from '@web/test-runner-commands';\n\nfunction determineMousePosition(\n el: Element,\n position: string,\n offsetX: number,\n offsetY: number\n) {\n const {x, y, width, height} = el.getBoundingClientRect();\n const centerX = Math.floor(x + window.scrollX + width / 2);\n const centerY = Math.floor(y + window.scrollY + height / 2);\n let clickX: number;\n let clickY: number;\n\n switch (position) {\n case 'top':\n clickX = centerX;\n clickY = y;\n break;\n case 'right':\n clickX = x + width - 1;\n clickY = centerY;\n break;\n case 'bottom':\n clickX = centerX;\n clickY = y + height - 1;\n break;\n case 'left':\n clickX = x;\n clickY = centerY;\n break;\n default:\n clickX = centerX;\n clickY = centerY;\n }\n\n clickX += offsetX;\n clickY += offsetY;\n return {clickX, clickY};\n}\n\n/** A testing utility that measures an element's position and clicks on it. */\nexport async function clickOnElement(\n /** The element to click */\n el: Element,\n /** The location of the element to click */\n position: 'top' | 'right' | 'bottom' | 'left' | 'center' = 'center',\n /** The horizontal offset to apply to the position when clicking */\n offsetX = 0,\n /** The vertical offset to apply to the position when clicking */\n offsetY = 0\n) {\n const {clickX, clickY} = determineMousePosition(\n el,\n position,\n offsetX,\n offsetY\n );\n\n await sendMouse({type: 'click', position: [clickX, clickY]});\n}\n\n/** A testing utility that moves the mouse onto an element. */\nexport async function moveMouseOnElement(\n /** The element to click */\n el: Element,\n /** The location of the element to click */\n position: 'top' | 'right' | 'bottom' | 'left' | 'center' = 'center',\n /** The horizontal offset to apply to the position when clicking */\n offsetX = 0,\n /** The vertical offset to apply to the position when clicking */\n offsetY = 0\n) {\n const {clickX, clickY} = determineMousePosition(\n el,\n position,\n offsetX,\n offsetY\n );\n\n await sendMouse({type: 'move', position: [clickX, clickY]});\n}\n\n/** A testing utility that drags an element with the mouse. */\nexport async function dragElement(\n /** The element to drag */\n el: Element,\n /** The horizontal distance to drag in pixels */\n deltaX = 0,\n /** The vertical distance to drag in pixels */\n deltaY = 0,\n callbacks: {\n afterMouseDown?: () => void | Promise<void>;\n afterMouseMove?: () => void | Promise<void>;\n } = {}\n): Promise<void> {\n await moveMouseOnElement(el);\n await sendMouse({type: 'down'});\n\n await callbacks.afterMouseDown?.();\n\n const {clickX, clickY} = determineMousePosition(el, 'center', deltaX, deltaY);\n await sendMouse({type: 'move', position: [clickX, clickY]});\n\n await callbacks.afterMouseMove?.();\n\n await sendMouse({type: 'up'});\n}\n\ntype AllTagNames = keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap;\n\ntype TagNameToElement<K extends AllTagNames> =\n K extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[K]\n : K extends keyof SVGElementTagNameMap\n ? SVGElementTagNameMap[K]\n : Element;\n\nexport function $<K extends AllTagNames>(selector: K): TagNameToElement<K>;\nexport function $<K extends AllTagNames>(\n root: Element | ShadowRoot,\n selector: K\n): TagNameToElement<K>;\nexport function $<T extends Element = Element>(selector: string): T;\nexport function $<T extends Element = Element>(\n root: Element | ShadowRoot,\n selector: string\n): T;\nexport function $<T extends Element = Element>(\n arg1: string | Element | ShadowRoot,\n arg2?: string\n): T {\n let result: Element | null;\n\n if (typeof arg1 === 'string') {\n result = document.querySelector(arg1);\n } else if (\n (arg1 instanceof Element || arg1 instanceof ShadowRoot) &&\n typeof arg2 === 'string'\n ) {\n result = arg1.querySelector(arg2);\n } else {\n throw new Error('Invalid arguments passed to $()');\n }\n\n if (!result) {\n const selector = typeof arg1 === 'string' ? arg1 : arg2!;\n const context = typeof arg1 === 'string' ? 'document' : 'root element';\n throw new Error(`No match for selector: ${selector} in ${context}`);\n }\n\n return result as T;\n}\n\nexport function $$<K extends AllTagNames>(\n selector: K\n): NodeListOf<TagNameToElement<K>>;\nexport function $$<K extends AllTagNames>(\n root: Element,\n selector: K\n): NodeListOf<TagNameToElement<K>>;\nexport function $$<T extends Element = Element>(\n selector: string\n): NodeListOf<T>;\nexport function $$<T extends Element = Element>(\n root: Element,\n selector: string\n): NodeListOf<T>;\nexport function $$<T extends Element = Element>(\n arg1: string | Element,\n arg2?: string\n): NodeListOf<T> {\n let result: NodeListOf<Element>;\n\n if (typeof arg1 === 'string') {\n result = document.querySelectorAll(arg1);\n } else if (arg1 instanceof Element && typeof arg2 === 'string') {\n result = arg1.querySelectorAll(arg2);\n } else {\n throw new Error('Invalid arguments passed to $$()');\n }\n\n if (result.length === 0) {\n const selector = typeof arg1 === 'string' ? arg1 : arg2!;\n const context = typeof arg1 === 'string' ? 'document' : 'root element';\n throw new Error(`No matches for selector: ${selector} in ${context}`);\n }\n\n return result as NodeListOf<T>;\n}\n"]}
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/includes/test-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Borrowed from Shoelace\n\nimport {sendMouse} from '@web/test-runner-commands';\n\nfunction determineMousePosition(\n el: Element,\n position: string,\n offsetX: number,\n offsetY: number\n) {\n const {x, y, width, height} = el.getBoundingClientRect();\n const centerX = Math.floor(x + window.scrollX + width / 2);\n const centerY = Math.floor(y + window.scrollY + height / 2);\n let clickX: number;\n let clickY: number;\n\n switch (position) {\n case 'top':\n clickX = centerX;\n clickY = y;\n break;\n case 'right':\n clickX = x + width - 1;\n clickY = centerY;\n break;\n case 'bottom':\n clickX = centerX;\n clickY = y + height - 1;\n break;\n case 'left':\n clickX = x;\n clickY = centerY;\n break;\n default:\n clickX = centerX;\n clickY = centerY;\n }\n\n clickX += offsetX;\n clickY += offsetY;\n return {clickX, clickY};\n}\n\n/** A testing utility that measures an element's position and clicks on it. */\nexport async function clickOnElement(\n /** The element to click */\n el: Element,\n /** The location of the element to click */\n position: 'top' | 'right' | 'bottom' | 'left' | 'center' = 'center',\n /** The horizontal offset to apply to the position when clicking */\n offsetX = 0,\n /** The vertical offset to apply to the position when clicking */\n offsetY = 0\n) {\n const {clickX, clickY} = determineMousePosition(\n el,\n position,\n offsetX,\n offsetY\n );\n\n await sendMouse({type: 'click', position: [clickX, clickY]});\n}\n\n/** A testing utility that moves the mouse onto an element. */\nexport async function moveMouseOnElement(\n /** The element to click */\n el: Element,\n /** The location of the element to click */\n position: 'top' | 'right' | 'bottom' | 'left' | 'center' = 'center',\n /** The horizontal offset to apply to the position when clicking */\n offsetX = 0,\n /** The vertical offset to apply to the position when clicking */\n offsetY = 0\n) {\n const {clickX, clickY} = determineMousePosition(\n el,\n position,\n offsetX,\n offsetY\n );\n\n await sendMouse({type: 'move', position: [clickX, clickY]});\n}\n\n/** A testing utility that drags an element with the mouse. */\nexport async function dragElement(\n /** The element to drag */\n el: Element,\n /** The horizontal distance to drag in pixels */\n deltaX = 0,\n /** The vertical distance to drag in pixels */\n deltaY = 0,\n callbacks: {\n afterMouseDown?: () => void | Promise<void>;\n afterMouseMove?: () => void | Promise<void>;\n } = {}\n): Promise<void> {\n await moveMouseOnElement(el);\n await sendMouse({type: 'down'});\n\n await callbacks.afterMouseDown?.();\n\n const {clickX, clickY} = determineMousePosition(el, 'center', deltaX, deltaY);\n await sendMouse({type: 'move', position: [clickX, clickY]});\n\n await callbacks.afterMouseMove?.();\n\n await sendMouse({type: 'up'});\n}\n\ntype AllTagNames = keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap;\n\ntype TagNameToElement<K extends AllTagNames> =\n K extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[K]\n : K extends keyof SVGElementTagNameMap\n ? SVGElementTagNameMap[K]\n : Element;\n\nexport function $<K extends AllTagNames>(selector: K): TagNameToElement<K>;\nexport function $<K extends AllTagNames>(\n root: Element | ShadowRoot,\n selector: K\n): TagNameToElement<K>;\nexport function $<T extends Element = Element>(selector: string): T;\nexport function $<T extends Element = Element>(\n root: Element | ShadowRoot,\n selector: string\n): T;\nexport function $<T extends Element = Element>(\n arg1: string | Element | ShadowRoot,\n arg2?: string\n): T {\n let result: Element | null;\n\n if (typeof arg1 === 'string') {\n result = document.querySelector(arg1);\n } else if (\n (arg1 instanceof Element || arg1 instanceof ShadowRoot) &&\n typeof arg2 === 'string'\n ) {\n result = arg1.querySelector(arg2);\n } else {\n throw new Error('Invalid arguments passed to $()');\n }\n\n if (!result) {\n const selector = typeof arg1 === 'string' ? arg1 : arg2!;\n const context = typeof arg1 === 'string' ? 'document' : 'root element';\n throw new Error(`No match for selector: ${selector} in ${context}`);\n }\n\n return result as T;\n}\n\nexport function $$<K extends AllTagNames>(\n selector: K\n): NodeListOf<TagNameToElement<K>>;\nexport function $$<K extends AllTagNames>(\n root: Element | ShadowRoot,\n selector: K\n): NodeListOf<TagNameToElement<K>>;\nexport function $$<T extends Element = Element>(\n selector: string\n): NodeListOf<T>;\nexport function $$<T extends Element = Element>(\n root: Element | ShadowRoot,\n selector: string\n): NodeListOf<T>;\nexport function $$<T extends Element = Element>(\n arg1: string | Element | ShadowRoot,\n arg2?: string\n): NodeListOf<T> {\n let result: NodeListOf<Element>;\n\n if (typeof arg1 === 'string') {\n result = document.querySelectorAll(arg1);\n } else if (\n (arg1 instanceof Element || arg1 instanceof ShadowRoot) &&\n typeof arg2 === 'string'\n ) {\n result = arg1.querySelectorAll(arg2);\n } else {\n throw new Error('Invalid arguments passed to $$()');\n }\n\n if (result.length === 0) {\n const selector = typeof arg1 === 'string' ? arg1 : arg2!;\n const context = typeof arg1 === 'string' ? 'document' : 'root element';\n throw new Error(`No matches for selector: ${selector} in ${context}`);\n }\n\n return result as NodeListOf<T>;\n}\n"]}
@@ -42,39 +42,36 @@ export declare class VscodeRadio extends VscodeRadio_base implements AssociatedF
42
42
  * Name which is used as a variable name in the data of the form-container.
43
43
  */
44
44
  name: string;
45
+ /** @internal */
46
+ type: string;
45
47
  value: string;
46
48
  disabled: boolean;
47
49
  required: boolean;
48
50
  /** @internal */
49
- role: string;
50
- /** @internal */
51
51
  tabIndex: number;
52
+ get form(): HTMLFormElement | null;
53
+ get validity(): ValidityState;
54
+ get validationMessage(): string;
55
+ get willValidate(): boolean;
52
56
  private _slottedText;
53
57
  private _inputEl;
54
58
  private _internals;
55
59
  constructor();
56
60
  connectedCallback(): void;
57
- disconnectedCallback(): void;
58
61
  update(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
59
- get form(): HTMLFormElement | null;
60
- /** @internal */
61
- type: string;
62
- get validity(): ValidityState;
63
- get validationMessage(): string;
64
- get willValidate(): boolean;
65
62
  checkValidity(): boolean;
66
63
  reportValidity(): boolean;
67
64
  /** @internal */
68
65
  formResetCallback(): void;
69
66
  /** @internal */
70
67
  formStateRestoreCallback(state: string, _mode: 'restore' | 'autocomplete'): void;
71
- private _getRadios;
72
- private _uncheckOthers;
73
- private _checkButton;
74
68
  /**
75
69
  * @internal
76
70
  */
77
71
  setComponentValidity(isValid: boolean): void;
72
+ private _getRadios;
73
+ private _uncheckOthers;
74
+ private _checkButton;
78
75
  private _setGroupValidity;
79
76
  private _setActualFormValue;
80
77
  private _handleValueChange;
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-radio.d.ts","sourceRoot":"","sources":["../../src/vscode-radio/vscode-radio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,gBAAgB,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAIvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wDAAwD,CAAC;AAG5F,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,WACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAgB,MAAM,+BAAU;IAEhC,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAE7B,gBAAgB;IAChB,OAAgB,iBAAiB,EAAE,cAAc,CAG/C;IAGO,SAAS,UAAS;IAG3B,OAAO,UAAS;IAGhB,cAAc,UAAS;IAGvB,OAAO,UAAS;IAEhB;;OAEG;IAEH,IAAI,SAAM;IAGV,KAAK,SAAM;IAGX,QAAQ,UAAS;IAGjB,QAAQ,UAAS;IAEjB,gBAAgB;IAEP,IAAI,SAAW;IAExB,gBAAgB;IAEP,QAAQ,SAAK;IAGtB,OAAO,CAAC,YAAY,CAAM;IAG1B,OAAO,CAAC,QAAQ,CAAoB;IAEpC,OAAO,CAAC,UAAU,CAAmB;;IAO5B,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAO5B,MAAM,CAEb,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GACnE,IAAI;IAYP,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,gBAAgB;IAEhB,IAAI,SAAW;IAEf,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAIzB,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAYzB,gBAAgB;IAChB,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;IAMP,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAcrC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,YAAY,CAUlB;IAEF,SAAS,CAAC,cAAc,GAAI,IAAI,aAAa,KAAG,IAAI,CAclD;IAEO,MAAM,IAAI,cAAc;CA+BlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
1
+ {"version":3,"file":"vscode-radio.d.ts","sourceRoot":"","sources":["../../src/vscode-radio/vscode-radio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,gBAAgB,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAIvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wDAAwD,CAAC;AAG5F,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,WACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAgB,MAAM,+BAAU;IAEhC,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAE7B,gBAAgB;IAChB,OAAgB,iBAAiB,EAAE,cAAc,CAG/C;IAKO,SAAS,UAAS;IAG3B,OAAO,UAAS;IAGhB,cAAc,UAAS;IAGvB,OAAO,UAAS;IAEhB;;OAEG;IAEH,IAAI,SAAM;IAEV,gBAAgB;IAEhB,IAAI,SAAW;IAGf,KAAK,SAAM;IAGX,QAAQ,UAAS;IAGjB,QAAQ,UAAS;IAEjB,gBAAgB;IAEP,QAAQ,SAAK;IAEtB,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAOD,OAAO,CAAC,YAAY,CAAM;IAG1B,OAAO,CAAC,QAAQ,CAAoB;IAEpC,OAAO,CAAC,UAAU,CAAmB;;IAc5B,iBAAiB,IAAI,IAAI;IAMzB,MAAM,CAEb,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GACnE,IAAI;IAgBP,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAIzB,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAYzB,gBAAgB;IAChB,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;IAMP;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAkBrC,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,YAAY,CAUlB;IAEF,SAAS,CAAC,cAAc,GAAI,IAAI,aAAa,KAAG,IAAI,CAclD;IAIO,MAAM,IAAI,cAAc;CA+BlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
@@ -38,8 +38,23 @@ import styles from './vscode-radio.styles.js';
38
38
  * @cssprop [--vscode-inputValidation-errorBorder=#be1100]
39
39
  */
40
40
  let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormButtonWidgetBase) {
41
+ get form() {
42
+ return this._internals.form;
43
+ }
44
+ get validity() {
45
+ return this._internals.validity;
46
+ }
47
+ get validationMessage() {
48
+ return this._internals.validationMessage;
49
+ }
50
+ get willValidate() {
51
+ return this._internals.willValidate;
52
+ }
53
+ //#endregion
54
+ //#region lifecycle methods
41
55
  constructor() {
42
56
  super();
57
+ //#region properties
43
58
  this.autofocus = false;
44
59
  this.checked = false;
45
60
  this.defaultChecked = false;
@@ -48,16 +63,16 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
48
63
  * Name which is used as a variable name in the data of the form-container.
49
64
  */
50
65
  this.name = '';
66
+ /** @internal */
67
+ this.type = 'radio';
51
68
  this.value = '';
52
69
  this.disabled = false;
53
70
  this.required = false;
54
71
  /** @internal */
55
- this.role = 'radio';
56
- /** @internal */
57
72
  this.tabIndex = 0;
73
+ //#endregion
74
+ //#region private variables
58
75
  this._slottedText = '';
59
- /** @internal */
60
- this.type = 'radio';
61
76
  this._handleClick = () => {
62
77
  if (this.disabled) {
63
78
  return;
@@ -82,18 +97,13 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
82
97
  }
83
98
  };
84
99
  this._internals = this.attachInternals();
100
+ this.addEventListener('keydown', this._handleKeyDown);
101
+ this.addEventListener('click', this._handleClick);
85
102
  }
86
103
  connectedCallback() {
87
104
  super.connectedCallback();
88
- this.addEventListener('keydown', this._handleKeyDown);
89
- this.addEventListener('click', this._handleClick);
90
105
  this._handleValueChange();
91
106
  }
92
- disconnectedCallback() {
93
- super.disconnectedCallback();
94
- this.removeEventListener('keydown', this._handleKeyDown);
95
- this.removeEventListener('click', this._handleClick);
96
- }
97
107
  update(
98
108
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
109
  changedProperties) {
@@ -105,18 +115,8 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
105
115
  this._handleValueChange();
106
116
  }
107
117
  }
108
- get form() {
109
- return this._internals.form;
110
- }
111
- get validity() {
112
- return this._internals.validity;
113
- }
114
- get validationMessage() {
115
- return this._internals.validationMessage;
116
- }
117
- get willValidate() {
118
- return this._internals.willValidate;
119
- }
118
+ //#endregion
119
+ //#region public methods
120
120
  checkValidity() {
121
121
  return this._internals.checkValidity();
122
122
  }
@@ -139,8 +139,23 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
139
139
  this.checked = true;
140
140
  }
141
141
  }
142
+ /**
143
+ * @internal
144
+ */
145
+ setComponentValidity(isValid) {
146
+ if (isValid) {
147
+ this._internals.setValidity({});
148
+ }
149
+ else {
150
+ this._internals.setValidity({
151
+ valueMissing: true,
152
+ }, 'Please select one of these options.', this._inputEl);
153
+ }
154
+ }
155
+ //#endregion
156
+ //#region private methods
142
157
  _getRadios() {
143
- const root = this.getRootNode({ composed: true });
158
+ const root = this.getRootNode({ composed: false });
144
159
  if (!root) {
145
160
  return [];
146
161
  }
@@ -163,19 +178,6 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
163
178
  }
164
179
  });
165
180
  }
166
- /**
167
- * @internal
168
- */
169
- setComponentValidity(isValid) {
170
- if (isValid) {
171
- this._internals.setValidity({});
172
- }
173
- else {
174
- this._internals.setValidity({
175
- valueMissing: true,
176
- }, 'Please select one of these options.', this._inputEl);
177
- }
178
- }
179
181
  _setGroupValidity(radios, isValid) {
180
182
  this.updateComplete.then(() => {
181
183
  radios.forEach((r) => {
@@ -193,6 +195,8 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
193
195
  }
194
196
  this._internals.setFormValue(actualValue);
195
197
  }
198
+ //#endregion
199
+ //#region event handlers
196
200
  _handleValueChange() {
197
201
  const radios = this._getRadios();
198
202
  const anyRequired = radios.some((r) => {
@@ -209,6 +213,7 @@ let VscodeRadio = class VscodeRadio extends LabelledCheckboxOrRadioMixin(FormBut
209
213
  this._setGroupValidity(radios, !isInvalid);
210
214
  }
211
215
  }
216
+ //#endregion
212
217
  render() {
213
218
  const iconClasses = classMap({
214
219
  icon: true,
@@ -263,6 +268,9 @@ __decorate([
263
268
  __decorate([
264
269
  property({ reflect: true })
265
270
  ], VscodeRadio.prototype, "name", void 0);
271
+ __decorate([
272
+ property()
273
+ ], VscodeRadio.prototype, "type", void 0);
266
274
  __decorate([
267
275
  property()
268
276
  ], VscodeRadio.prototype, "value", void 0);
@@ -272,9 +280,6 @@ __decorate([
272
280
  __decorate([
273
281
  property({ type: Boolean, reflect: true })
274
282
  ], VscodeRadio.prototype, "required", void 0);
275
- __decorate([
276
- property({ reflect: true })
277
- ], VscodeRadio.prototype, "role", void 0);
278
283
  __decorate([
279
284
  property({ type: Number, reflect: true })
280
285
  ], VscodeRadio.prototype, "tabIndex", void 0);
@@ -284,9 +289,6 @@ __decorate([
284
289
  __decorate([
285
290
  query('#input')
286
291
  ], VscodeRadio.prototype, "_inputEl", void 0);
287
- __decorate([
288
- property()
289
- ], VscodeRadio.prototype, "type", void 0);
290
292
  VscodeRadio = __decorate([
291
293
  customElement('vscode-radio')
292
294
  ], VscodeRadio);
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-radio.js","sourceRoot":"","sources":["../../src/vscode-radio/vscode-radio.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, LitElement, PropertyValueMap, TemplateResult} from 'lit';\nimport {property, state, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../includes/VscElement.js';\nimport {FormButtonWidgetBase} from '../includes/form-button-widget/FormButtonWidgetBase.js';\nimport {LabelledCheckboxOrRadioMixin} from '../includes/form-button-widget/LabelledCheckboxOrRadio.js';\nimport styles from './vscode-radio.styles.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\n\n/**\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-radio\n *\n * @attr name - Name which is used as a variable name in the data of the form-container.\n * @attr label - Attribute pair of the `label` property.\n *\n * @prop label - Label text. It is only applied if component's innerHTML doesn't contain any text.\n *\n * @fires {Event} change - Dispatched when checked state is changed.\n * @fires {Event} invalid - Dispatched when the element is invalid and `checkValidity()` has been called or the form containing this element is submitted.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event)\n *\n * @cssprop [--vscode-font-family=sans-serif]\n * @cssprop [--vscode-font-size=13px]\n * @cssprop [--vscode-font-weight=normal]\n * @cssprop [--vscode-settings-checkboxBackground=#313131]\n * @cssprop [--vscode-settings-checkboxBorder=#3c3c3c]\n * @cssprop [--vscode-settings-checkboxForeground=#cccccc]\n * @cssprop [--vscode-focusBorder=#0078d4]\n * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]\n * @cssprop [--vscode-inputValidation-errorBorder=#be1100]\n */\n@customElement('vscode-radio')\nexport class VscodeRadio\n extends LabelledCheckboxOrRadioMixin(FormButtonWidgetBase)\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static formAssociated = true;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n @property({type: Boolean, reflect: true})\n override autofocus = false;\n\n @property({type: Boolean, reflect: true})\n checked = false;\n\n @property({type: Boolean, reflect: true, attribute: 'default-checked'})\n defaultChecked = false;\n\n @property({type: Boolean, reflect: true})\n invalid = false;\n\n /**\n * Name which is used as a variable name in the data of the form-container.\n */\n @property({reflect: true})\n name = '';\n\n @property()\n value = '';\n\n @property({type: Boolean, reflect: true})\n disabled = false;\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n /** @internal */\n @property({reflect: true})\n override role = 'radio';\n\n /** @internal */\n @property({type: Number, reflect: true})\n override tabIndex = 0;\n\n @state()\n private _slottedText = '';\n\n @query('#input')\n private _inputEl!: HTMLInputElement;\n\n private _internals: ElementInternals;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.addEventListener('keydown', this._handleKeyDown);\n this.addEventListener('click', this._handleClick);\n\n this._handleValueChange();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.removeEventListener('keydown', this._handleKeyDown);\n this.removeEventListener('click', this._handleClick);\n }\n\n override update(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.update(changedProperties);\n\n if (changedProperties.has('checked')) {\n this._handleValueChange();\n }\n\n if (changedProperties.has('required')) {\n this._handleValueChange();\n }\n }\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /** @internal */\n @property()\n type = 'radio';\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate(): boolean {\n return this._internals.willValidate;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n /** @internal */\n formResetCallback(): void {\n const radios = this._getRadios();\n\n radios.forEach((r) => {\n r.checked = r.defaultChecked;\n });\n\n this.updateComplete.then(() => {\n this._handleValueChange();\n });\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n if (this.value === state && state !== '') {\n this.checked = true;\n }\n }\n\n private _getRadios(): VscodeRadio[] {\n const root = this.getRootNode({composed: true}) as Document | ShadowRoot;\n\n if (!root) {\n return [];\n }\n\n const radios = root.querySelectorAll(\n `vscode-radio[name=\"${this.name}\"]`\n ) as NodeListOf<VscodeRadio>;\n\n return Array.from(radios);\n }\n\n private _uncheckOthers(radios: VscodeRadio[]) {\n radios.forEach((r) => {\n if (r !== this) {\n r.checked = false;\n }\n });\n }\n\n private _checkButton() {\n const radios = this._getRadios();\n this.checked = true;\n\n radios.forEach((r) => {\n if (r !== this) {\n r.checked = false;\n }\n });\n }\n\n /**\n * @internal\n */\n setComponentValidity(isValid: boolean) {\n if (isValid) {\n this._internals.setValidity({});\n } else {\n this._internals.setValidity(\n {\n valueMissing: true,\n },\n 'Please select one of these options.',\n this._inputEl\n );\n }\n }\n\n private _setGroupValidity(radios: VscodeRadio[], isValid: boolean) {\n this.updateComplete.then(() => {\n radios.forEach((r) => {\n r.setComponentValidity(isValid);\n });\n });\n }\n\n private _setActualFormValue() {\n let actualValue: string | null = '';\n\n if (this.checked) {\n actualValue = !this.value ? 'on' : this.value;\n } else {\n actualValue = null;\n }\n\n this._internals.setFormValue(actualValue);\n }\n\n private _handleValueChange() {\n const radios = this._getRadios();\n const anyRequired = radios.some((r) => {\n return r.required;\n });\n\n this._setActualFormValue();\n\n if (this.checked) {\n this._uncheckOthers(radios);\n this._setGroupValidity(radios, true);\n } else {\n const anyChecked = !!radios.find((r) => r.checked);\n const isInvalid = anyRequired && !anyChecked;\n\n this._setGroupValidity(radios, !isInvalid);\n }\n }\n\n private _handleClick = (): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.checked) {\n this._checkButton();\n this._handleValueChange();\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n };\n\n protected _handleKeyDown = (ev: KeyboardEvent): void => {\n if (!this.disabled && (ev.key === 'Enter' || ev.key === ' ')) {\n ev.preventDefault();\n\n if (ev.key === ' ' && !this.checked) {\n this.checked = true;\n this._handleValueChange();\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n\n if (ev.key === 'Enter') {\n this._internals.form?.requestSubmit();\n }\n }\n };\n\n override render(): TemplateResult {\n const iconClasses = classMap({\n icon: true,\n checked: this.checked,\n });\n const labelInnerClasses = classMap({\n 'label-inner': true,\n 'is-slot-empty': this._slottedText === '',\n });\n\n return html`\n <div class=\"wrapper\">\n <input\n ?autofocus=${this.autofocus}\n id=\"input\"\n class=\"radio\"\n type=\"checkbox\"\n ?checked=${this.checked}\n value=${this.value}\n tabindex=${this.tabIndex}\n >\n <div class=${iconClasses}></div>\n <label for=\"input\" class=\"label\" @click=${this._handleClick}>\n <span class=${labelInnerClasses}>\n ${this._renderLabelAttribute()}\n <slot @slotchange=${this._handleSlotChange}></slot>\n </span>\n </label>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-radio': VscodeRadio;\n }\n}\n"]}
1
+ {"version":3,"file":"vscode-radio.js","sourceRoot":"","sources":["../../src/vscode-radio/vscode-radio.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, LitElement, PropertyValueMap, TemplateResult} from 'lit';\nimport {property, state, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../includes/VscElement.js';\nimport {FormButtonWidgetBase} from '../includes/form-button-widget/FormButtonWidgetBase.js';\nimport {LabelledCheckboxOrRadioMixin} from '../includes/form-button-widget/LabelledCheckboxOrRadio.js';\nimport styles from './vscode-radio.styles.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\n\n/**\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-radio\n *\n * @attr name - Name which is used as a variable name in the data of the form-container.\n * @attr label - Attribute pair of the `label` property.\n *\n * @prop label - Label text. It is only applied if component's innerHTML doesn't contain any text.\n *\n * @fires {Event} change - Dispatched when checked state is changed.\n * @fires {Event} invalid - Dispatched when the element is invalid and `checkValidity()` has been called or the form containing this element is submitted.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event)\n *\n * @cssprop [--vscode-font-family=sans-serif]\n * @cssprop [--vscode-font-size=13px]\n * @cssprop [--vscode-font-weight=normal]\n * @cssprop [--vscode-settings-checkboxBackground=#313131]\n * @cssprop [--vscode-settings-checkboxBorder=#3c3c3c]\n * @cssprop [--vscode-settings-checkboxForeground=#cccccc]\n * @cssprop [--vscode-focusBorder=#0078d4]\n * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]\n * @cssprop [--vscode-inputValidation-errorBorder=#be1100]\n */\n@customElement('vscode-radio')\nexport class VscodeRadio\n extends LabelledCheckboxOrRadioMixin(FormButtonWidgetBase)\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static formAssociated = true;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n //#region properties\n\n @property({type: Boolean, reflect: true})\n override autofocus = false;\n\n @property({type: Boolean, reflect: true})\n checked = false;\n\n @property({type: Boolean, reflect: true, attribute: 'default-checked'})\n defaultChecked = false;\n\n @property({type: Boolean, reflect: true})\n invalid = false;\n\n /**\n * Name which is used as a variable name in the data of the form-container.\n */\n @property({reflect: true})\n name = '';\n\n /** @internal */\n @property()\n type = 'radio';\n\n @property()\n value = '';\n\n @property({type: Boolean, reflect: true})\n disabled = false;\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n /** @internal */\n @property({type: Number, reflect: true})\n override tabIndex = 0;\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate(): boolean {\n return this._internals.willValidate;\n }\n\n //#endregion\n\n //#region private variables\n\n @state()\n private _slottedText = '';\n\n @query('#input')\n private _inputEl!: HTMLInputElement;\n\n private _internals: ElementInternals;\n\n //#endregion\n\n //#region lifecycle methods\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n\n this.addEventListener('keydown', this._handleKeyDown);\n this.addEventListener('click', this._handleClick);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this._handleValueChange();\n }\n\n override update(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.update(changedProperties);\n\n if (changedProperties.has('checked')) {\n this._handleValueChange();\n }\n\n if (changedProperties.has('required')) {\n this._handleValueChange();\n }\n }\n\n //#endregion\n\n //#region public methods\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n /** @internal */\n formResetCallback(): void {\n const radios = this._getRadios();\n\n radios.forEach((r) => {\n r.checked = r.defaultChecked;\n });\n\n this.updateComplete.then(() => {\n this._handleValueChange();\n });\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n if (this.value === state && state !== '') {\n this.checked = true;\n }\n }\n\n /**\n * @internal\n */\n setComponentValidity(isValid: boolean) {\n if (isValid) {\n this._internals.setValidity({});\n } else {\n this._internals.setValidity(\n {\n valueMissing: true,\n },\n 'Please select one of these options.',\n this._inputEl\n );\n }\n }\n\n //#endregion\n\n //#region private methods\n\n private _getRadios(): VscodeRadio[] {\n const root = this.getRootNode({composed: false}) as Document | ShadowRoot;\n\n if (!root) {\n return [];\n }\n\n const radios = root.querySelectorAll(\n `vscode-radio[name=\"${this.name}\"]`\n ) as NodeListOf<VscodeRadio>;\n\n return Array.from(radios);\n }\n\n private _uncheckOthers(radios: VscodeRadio[]) {\n radios.forEach((r) => {\n if (r !== this) {\n r.checked = false;\n }\n });\n }\n\n private _checkButton() {\n const radios = this._getRadios();\n this.checked = true;\n\n radios.forEach((r) => {\n if (r !== this) {\n r.checked = false;\n }\n });\n }\n\n private _setGroupValidity(radios: VscodeRadio[], isValid: boolean) {\n this.updateComplete.then(() => {\n radios.forEach((r) => {\n r.setComponentValidity(isValid);\n });\n });\n }\n\n private _setActualFormValue() {\n let actualValue: string | null = '';\n\n if (this.checked) {\n actualValue = !this.value ? 'on' : this.value;\n } else {\n actualValue = null;\n }\n\n this._internals.setFormValue(actualValue);\n }\n\n //#endregion\n\n //#region event handlers\n\n private _handleValueChange() {\n const radios = this._getRadios();\n const anyRequired = radios.some((r) => {\n return r.required;\n });\n\n this._setActualFormValue();\n\n if (this.checked) {\n this._uncheckOthers(radios);\n this._setGroupValidity(radios, true);\n } else {\n const anyChecked = !!radios.find((r) => r.checked);\n const isInvalid = anyRequired && !anyChecked;\n\n this._setGroupValidity(radios, !isInvalid);\n }\n }\n\n private _handleClick = (): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.checked) {\n this._checkButton();\n this._handleValueChange();\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n };\n\n protected _handleKeyDown = (ev: KeyboardEvent): void => {\n if (!this.disabled && (ev.key === 'Enter' || ev.key === ' ')) {\n ev.preventDefault();\n\n if (ev.key === ' ' && !this.checked) {\n this.checked = true;\n this._handleValueChange();\n this.dispatchEvent(new Event('change', {bubbles: true}));\n }\n\n if (ev.key === 'Enter') {\n this._internals.form?.requestSubmit();\n }\n }\n };\n\n //#endregion\n\n override render(): TemplateResult {\n const iconClasses = classMap({\n icon: true,\n checked: this.checked,\n });\n const labelInnerClasses = classMap({\n 'label-inner': true,\n 'is-slot-empty': this._slottedText === '',\n });\n\n return html`\n <div class=\"wrapper\">\n <input\n ?autofocus=${this.autofocus}\n id=\"input\"\n class=\"radio\"\n type=\"checkbox\"\n ?checked=${this.checked}\n value=${this.value}\n tabindex=${this.tabIndex}\n >\n <div class=${iconClasses}></div>\n <label for=\"input\" class=\"label\" @click=${this._handleClick}>\n <span class=${labelInnerClasses}>\n ${this._renderLabelAttribute()}\n <slot @slotchange=${this._handleSlotChange}></slot>\n </span>\n </label>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-radio': VscodeRadio;\n }\n}\n"]}
@@ -10,20 +10,18 @@ export declare class VscodeRadioGroup extends VscElement {
10
10
  variant: 'horizontal' | 'vertical';
11
11
  /** @internal */
12
12
  role: string;
13
- connectedCallback(): void;
14
- disconnectedCallback(): void;
15
13
  private _radios;
16
14
  private _focusedRadio;
17
15
  private _checkedRadio;
18
16
  private _firstContentLoaded;
17
+ constructor();
19
18
  private _uncheckPreviousChecked;
20
19
  private _afterCheck;
21
20
  private _checkPrev;
22
21
  private _checkNext;
23
- private _onKeyDown;
24
- private _onKeyDownBound;
25
- private _onChange;
26
- private _onSlotChange;
22
+ private _handleKeyDown;
23
+ private _handleChange;
24
+ private _handleSlotChange;
27
25
  render(): TemplateResult;
28
26
  }
29
27
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-radio-group.d.ts","sourceRoot":"","sources":["../../src/vscode-radio-group/vscode-radio-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAC,MAAM,KAAK,CAAC;AAEzC,OAAO,EAAgB,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAIpE;;;;GAIG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC9C,OAAgB,MAAM,+BAAU;IAGhC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAgB;IAElD,gBAAgB;IAEP,IAAI,SAAgB;IAEpB,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAOrC,OAAO,CAAC,OAAO,CAAiB;IAGhC,OAAO,CAAC,aAAa,CAAM;IAG3B,OAAO,CAAC,aAAa,CAAM;IAE3B,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,aAAa;IAqBZ,MAAM,IAAI,cAAc;CAUlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
1
+ {"version":3,"file":"vscode-radio-group.d.ts","sourceRoot":"","sources":["../../src/vscode-radio-group/vscode-radio-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAC,MAAM,KAAK,CAAC;AAEzC,OAAO,EAAgB,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAIpE;;;;GAIG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC9C,OAAgB,MAAM,+BAAU;IAKhC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAgB;IAElD,gBAAgB;IAEP,IAAI,SAAgB;IAO7B,OAAO,CAAC,OAAO,CAAiB;IAGhC,OAAO,CAAC,aAAa,CAAM;IAG3B,OAAO,CAAC,aAAa,CAAM;IAE3B,OAAO,CAAC,mBAAmB,CAAS;;IAgBpC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,cAAc,CAepB;IAEF,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,iBAAiB;IAqChB,MAAM,IAAI,cAAc;CAUlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
@@ -14,24 +14,36 @@ import styles from './vscode-radio-group.styles.js';
14
14
  * @fires {Event} change - Dispatched when a child radio button is changed.
15
15
  */
16
16
  let VscodeRadioGroup = class VscodeRadioGroup extends VscElement {
17
+ //#endregion
18
+ //#region lifecycle methods
17
19
  constructor() {
18
- super(...arguments);
20
+ super();
21
+ //#region properties
19
22
  this.variant = 'horizontal';
20
23
  /** @internal */
21
24
  this.role = 'radiogroup';
22
25
  this._focusedRadio = -1;
23
26
  this._checkedRadio = -1;
24
27
  this._firstContentLoaded = false;
25
- this._onKeyDownBound = this._onKeyDown.bind(this);
26
- }
27
- connectedCallback() {
28
- super.connectedCallback();
29
- this.addEventListener('keydown', this._onKeyDownBound);
30
- }
31
- disconnectedCallback() {
32
- super.disconnectedCallback();
33
- this.removeEventListener('keydown', this._onKeyDownBound);
28
+ //#endregion
29
+ //#region event handlers
30
+ this._handleKeyDown = (ev) => {
31
+ const { key } = ev;
32
+ const listenedKeys = ['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];
33
+ if (listenedKeys.includes(key)) {
34
+ ev.preventDefault();
35
+ }
36
+ if (key === 'ArrowRight' || key === 'ArrowDown') {
37
+ this._checkNext();
38
+ }
39
+ if (key === 'ArrowLeft' || key === 'ArrowUp') {
40
+ this._checkPrev();
41
+ }
42
+ };
43
+ this.addEventListener('keydown', this._handleKeyDown);
34
44
  }
45
+ //#endregion
46
+ //#region private methods
35
47
  _uncheckPreviousChecked(prevChecked, prevFocused) {
36
48
  if (prevChecked !== -1) {
37
49
  this._radios[prevChecked].checked = false;
@@ -78,20 +90,7 @@ let VscodeRadioGroup = class VscodeRadioGroup extends VscElement {
78
90
  }
79
91
  this._afterCheck();
80
92
  }
81
- _onKeyDown(ev) {
82
- const { key } = ev;
83
- const listenedKeys = ['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];
84
- if (listenedKeys.includes(key)) {
85
- ev.preventDefault();
86
- }
87
- if (key === 'ArrowRight' || key === 'ArrowDown') {
88
- this._checkNext();
89
- }
90
- if (key === 'ArrowLeft' || key === 'ArrowUp') {
91
- this._checkPrev();
92
- }
93
- }
94
- _onChange(ev) {
93
+ _handleChange(ev) {
95
94
  const clickedIndex = this._radios.findIndex((r) => r === ev.target);
96
95
  if (clickedIndex !== -1) {
97
96
  if (this._focusedRadio !== -1) {
@@ -105,7 +104,7 @@ let VscodeRadioGroup = class VscodeRadioGroup extends VscElement {
105
104
  this._radios[clickedIndex].tabIndex = 0;
106
105
  }
107
106
  }
108
- _onSlotChange() {
107
+ _handleSlotChange() {
109
108
  if (!this._firstContentLoaded) {
110
109
  const autoFocusedRadio = this._radios.findIndex((r) => r.autofocus);
111
110
  if (autoFocusedRadio > -1) {
@@ -113,6 +112,7 @@ let VscodeRadioGroup = class VscodeRadioGroup extends VscElement {
113
112
  }
114
113
  this._firstContentLoaded = true;
115
114
  }
115
+ let indexOfDefaultCheckedRadio = -1;
116
116
  this._radios.forEach((r, i) => {
117
117
  // if _focusedRadio is not set, the first radio should be focusable
118
118
  if (this._focusedRadio > -1) {
@@ -121,14 +121,24 @@ let VscodeRadioGroup = class VscodeRadioGroup extends VscElement {
121
121
  else {
122
122
  r.tabIndex = i === 0 ? 0 : -1;
123
123
  }
124
+ if (r.defaultChecked) {
125
+ if (indexOfDefaultCheckedRadio > -1) {
126
+ this._radios[indexOfDefaultCheckedRadio].defaultChecked = false;
127
+ }
128
+ indexOfDefaultCheckedRadio = i;
129
+ }
124
130
  });
131
+ if (indexOfDefaultCheckedRadio > -1) {
132
+ this._radios[indexOfDefaultCheckedRadio].checked = true;
133
+ }
125
134
  }
135
+ //#endregion
126
136
  render() {
127
137
  return html `
128
138
  <div class="wrapper">
129
139
  <slot
130
- @slotchange=${this._onSlotChange}
131
- @vsc-change=${this._onChange}
140
+ @slotchange=${this._handleSlotChange}
141
+ @change=${this._handleChange}
132
142
  ></slot>
133
143
  </div>
134
144
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-radio-group.js","sourceRoot":"","sources":["../../src/vscode-radio-group/vscode-radio-group.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, TemplateResult} from 'lit';\nimport {property, queryAssignedElements, state} from 'lit/decorators.js';\nimport {customElement, VscElement} from '../includes/VscElement.js';\nimport {VscodeRadio} from '../vscode-radio/index.js';\nimport styles from './vscode-radio-group.styles.js';\n\n/**\n * @tag vscode-radio-group\n *\n * @fires {Event} change - Dispatched when a child radio button is changed.\n */\n@customElement('vscode-radio-group')\nexport class VscodeRadioGroup extends VscElement {\n static override styles = styles;\n\n @property({reflect: true})\n variant: 'horizontal' | 'vertical' = 'horizontal';\n\n /** @internal */\n @property({reflect: true})\n override role = 'radiogroup';\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.addEventListener('keydown', this._onKeyDownBound);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.removeEventListener('keydown', this._onKeyDownBound);\n }\n\n @queryAssignedElements({selector: 'vscode-radio'})\n private _radios!: VscodeRadio[];\n\n @state()\n private _focusedRadio = -1;\n\n @state()\n private _checkedRadio = -1;\n\n private _firstContentLoaded = false;\n\n private _uncheckPreviousChecked(prevChecked: number, prevFocused: number) {\n if (prevChecked !== -1) {\n this._radios[prevChecked].checked = false;\n }\n\n if (prevFocused !== -1) {\n this._radios[prevFocused].tabIndex = -1;\n }\n }\n\n private _afterCheck() {\n this._focusedRadio = this._checkedRadio;\n this._radios[this._checkedRadio].checked = true;\n this._radios[this._checkedRadio].tabIndex = 0;\n this._radios[this._checkedRadio].focus();\n }\n\n private _checkPrev() {\n const prevChecked = this._radios.findIndex((r) => r.checked);\n const prevFocused = this._radios.findIndex((r) => r.focused);\n const startPos = prevFocused !== -1 ? prevFocused : prevChecked;\n\n this._uncheckPreviousChecked(prevChecked, prevFocused);\n\n if (startPos === -1) {\n this._checkedRadio = this._radios.length - 1;\n } else if (startPos - 1 >= 0) {\n this._checkedRadio = startPos - 1;\n } else {\n this._checkedRadio = this._radios.length - 1;\n }\n\n this._afterCheck();\n }\n\n private _checkNext() {\n const prevChecked = this._radios.findIndex((r) => r.checked);\n const prevFocused = this._radios.findIndex((r) => r.focused);\n const startPos = prevFocused !== -1 ? prevFocused : prevChecked;\n\n this._uncheckPreviousChecked(prevChecked, prevFocused);\n\n if (startPos === -1) {\n this._checkedRadio = 0;\n } else if (startPos + 1 < this._radios.length) {\n this._checkedRadio = startPos + 1;\n } else {\n this._checkedRadio = 0;\n }\n\n this._afterCheck();\n }\n\n private _onKeyDown(ev: KeyboardEvent) {\n const {key} = ev;\n const listenedKeys = ['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];\n\n if (listenedKeys.includes(key)) {\n ev.preventDefault();\n }\n\n if (key === 'ArrowRight' || key === 'ArrowDown') {\n this._checkNext();\n }\n\n if (key === 'ArrowLeft' || key === 'ArrowUp') {\n this._checkPrev();\n }\n }\n\n private _onKeyDownBound = this._onKeyDown.bind(this);\n\n private _onChange(ev: CustomEvent) {\n const clickedIndex = this._radios.findIndex((r) => r === ev.target);\n\n if (clickedIndex !== -1) {\n if (this._focusedRadio !== -1) {\n this._radios[this._focusedRadio].tabIndex = -1;\n }\n\n if (this._checkedRadio !== -1 && this._checkedRadio !== clickedIndex) {\n this._radios[this._checkedRadio].checked = false;\n }\n\n this._focusedRadio = clickedIndex;\n this._checkedRadio = clickedIndex;\n this._radios[clickedIndex].tabIndex = 0;\n }\n }\n\n private _onSlotChange() {\n if (!this._firstContentLoaded) {\n const autoFocusedRadio = this._radios.findIndex((r) => r.autofocus);\n\n if (autoFocusedRadio > -1) {\n this._focusedRadio = autoFocusedRadio;\n }\n\n this._firstContentLoaded = true;\n }\n\n this._radios.forEach((r, i) => {\n // if _focusedRadio is not set, the first radio should be focusable\n if (this._focusedRadio > -1) {\n r.tabIndex = i === this._focusedRadio ? 0 : -1;\n } else {\n r.tabIndex = i === 0 ? 0 : -1;\n }\n });\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"wrapper\">\n <slot\n @slotchange=${this._onSlotChange}\n @vsc-change=${this._onChange}\n ></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-radio-group': VscodeRadioGroup;\n }\n}\n"]}
1
+ {"version":3,"file":"vscode-radio-group.js","sourceRoot":"","sources":["../../src/vscode-radio-group/vscode-radio-group.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, TemplateResult} from 'lit';\nimport {property, queryAssignedElements, state} from 'lit/decorators.js';\nimport {customElement, VscElement} from '../includes/VscElement.js';\nimport {VscodeRadio} from '../vscode-radio/index.js';\nimport styles from './vscode-radio-group.styles.js';\n\n/**\n * @tag vscode-radio-group\n *\n * @fires {Event} change - Dispatched when a child radio button is changed.\n */\n@customElement('vscode-radio-group')\nexport class VscodeRadioGroup extends VscElement {\n static override styles = styles;\n\n //#region properties\n\n @property({reflect: true})\n variant: 'horizontal' | 'vertical' = 'horizontal';\n\n /** @internal */\n @property({reflect: true})\n override role = 'radiogroup';\n\n //#endregion\n\n //#region private variables\n\n @queryAssignedElements({selector: 'vscode-radio'})\n private _radios!: VscodeRadio[];\n\n @state()\n private _focusedRadio = -1;\n\n @state()\n private _checkedRadio = -1;\n\n private _firstContentLoaded = false;\n\n //#endregion\n\n //#region lifecycle methods\n\n constructor() {\n super();\n\n this.addEventListener('keydown', this._handleKeyDown);\n }\n\n //#endregion\n\n //#region private methods\n\n private _uncheckPreviousChecked(prevChecked: number, prevFocused: number) {\n if (prevChecked !== -1) {\n this._radios[prevChecked].checked = false;\n }\n\n if (prevFocused !== -1) {\n this._radios[prevFocused].tabIndex = -1;\n }\n }\n\n private _afterCheck() {\n this._focusedRadio = this._checkedRadio;\n this._radios[this._checkedRadio].checked = true;\n this._radios[this._checkedRadio].tabIndex = 0;\n this._radios[this._checkedRadio].focus();\n }\n\n private _checkPrev() {\n const prevChecked = this._radios.findIndex((r) => r.checked);\n const prevFocused = this._radios.findIndex((r) => r.focused);\n const startPos = prevFocused !== -1 ? prevFocused : prevChecked;\n\n this._uncheckPreviousChecked(prevChecked, prevFocused);\n\n if (startPos === -1) {\n this._checkedRadio = this._radios.length - 1;\n } else if (startPos - 1 >= 0) {\n this._checkedRadio = startPos - 1;\n } else {\n this._checkedRadio = this._radios.length - 1;\n }\n\n this._afterCheck();\n }\n\n private _checkNext() {\n const prevChecked = this._radios.findIndex((r) => r.checked);\n const prevFocused = this._radios.findIndex((r) => r.focused);\n const startPos = prevFocused !== -1 ? prevFocused : prevChecked;\n\n this._uncheckPreviousChecked(prevChecked, prevFocused);\n\n if (startPos === -1) {\n this._checkedRadio = 0;\n } else if (startPos + 1 < this._radios.length) {\n this._checkedRadio = startPos + 1;\n } else {\n this._checkedRadio = 0;\n }\n\n this._afterCheck();\n }\n\n //#endregion\n\n //#region event handlers\n\n private _handleKeyDown = (ev: KeyboardEvent) => {\n const {key} = ev;\n const listenedKeys = ['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];\n\n if (listenedKeys.includes(key)) {\n ev.preventDefault();\n }\n\n if (key === 'ArrowRight' || key === 'ArrowDown') {\n this._checkNext();\n }\n\n if (key === 'ArrowLeft' || key === 'ArrowUp') {\n this._checkPrev();\n }\n };\n\n private _handleChange(ev: CustomEvent) {\n const clickedIndex = this._radios.findIndex((r) => r === ev.target);\n\n if (clickedIndex !== -1) {\n if (this._focusedRadio !== -1) {\n this._radios[this._focusedRadio].tabIndex = -1;\n }\n\n if (this._checkedRadio !== -1 && this._checkedRadio !== clickedIndex) {\n this._radios[this._checkedRadio].checked = false;\n }\n\n this._focusedRadio = clickedIndex;\n this._checkedRadio = clickedIndex;\n this._radios[clickedIndex].tabIndex = 0;\n }\n }\n\n private _handleSlotChange() {\n if (!this._firstContentLoaded) {\n const autoFocusedRadio = this._radios.findIndex((r) => r.autofocus);\n\n if (autoFocusedRadio > -1) {\n this._focusedRadio = autoFocusedRadio;\n }\n\n this._firstContentLoaded = true;\n }\n\n let indexOfDefaultCheckedRadio = -1;\n\n this._radios.forEach((r, i) => {\n // if _focusedRadio is not set, the first radio should be focusable\n if (this._focusedRadio > -1) {\n r.tabIndex = i === this._focusedRadio ? 0 : -1;\n } else {\n r.tabIndex = i === 0 ? 0 : -1;\n }\n\n if (r.defaultChecked) {\n if (indexOfDefaultCheckedRadio > -1) {\n this._radios[indexOfDefaultCheckedRadio].defaultChecked = false;\n }\n\n indexOfDefaultCheckedRadio = i;\n }\n });\n\n if (indexOfDefaultCheckedRadio > -1) {\n this._radios[indexOfDefaultCheckedRadio].checked = true;\n }\n }\n\n //#endregion\n\n override render(): TemplateResult {\n return html`\n <div class=\"wrapper\">\n <slot\n @slotchange=${this._handleSlotChange}\n @change=${this._handleChange}\n ></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-radio-group': VscodeRadioGroup;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vscode-elements/elements",
3
- "version": "2.3.0",
3
+ "version": "2.3.1-pre.1",
4
4
  "description": "Web components for creating Visual Studio Code extensions",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/main.js",
@@ -2,6 +2,21 @@
2
2
  "$schema": "https://raw.githubusercontent.com/microsoft/vscode-css-languageservice/main/docs/customData.schema.json",
3
3
  "version": 1.1,
4
4
  "properties": [
5
+ { "name": "--vscode-button-background", "values": [] },
6
+ { "name": "--vscode-button-foreground", "values": [] },
7
+ { "name": "--vscode-button-border", "values": [] },
8
+ { "name": "--vscode-button-hoverBackground", "values": [] },
9
+ {
10
+ "name": "--vscode-font-family",
11
+ "description": "A sans-serif font type depends on the host OS.",
12
+ "values": []
13
+ },
14
+ { "name": "--vscode-font-size", "values": [] },
15
+ { "name": "--vscode-font-weight", "values": [] },
16
+ { "name": "--vscode-button-secondaryForeground", "values": [] },
17
+ { "name": "--vscode-button-secondaryBackground", "values": [] },
18
+ { "name": "--vscode-button-secondaryHoverBackground", "values": [] },
19
+ { "name": "--vscode-focusBorder", "values": [] },
5
20
  {
6
21
  "name": "--vscode-font-family",
7
22
  "description": "A sans-serif font type depends on the host OS.",
@@ -43,21 +58,6 @@
43
58
  { "name": "--vscode-button-secondaryBackground", "values": [] },
44
59
  { "name": "--vscode-button-secondaryHoverBackground", "values": [] },
45
60
  { "name": "--vscode-focusBorder", "values": [] },
46
- { "name": "--vscode-button-background", "values": [] },
47
- { "name": "--vscode-button-foreground", "values": [] },
48
- { "name": "--vscode-button-border", "values": [] },
49
- { "name": "--vscode-button-hoverBackground", "values": [] },
50
- {
51
- "name": "--vscode-font-family",
52
- "description": "A sans-serif font type depends on the host OS.",
53
- "values": []
54
- },
55
- { "name": "--vscode-font-size", "values": [] },
56
- { "name": "--vscode-font-weight", "values": [] },
57
- { "name": "--vscode-button-secondaryForeground", "values": [] },
58
- { "name": "--vscode-button-secondaryBackground", "values": [] },
59
- { "name": "--vscode-button-secondaryHoverBackground", "values": [] },
60
- { "name": "--vscode-focusBorder", "values": [] },
61
61
  { "name": "--vscode-font-family", "values": [] },
62
62
  { "name": "--vscode-font-size", "values": [] },
63
63
  { "name": "--vscode-font-weight", "values": [] },