@spectrum-web-components/textfield 0.40.4 → 0.41.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.
@@ -17,30 +17,88 @@ declare const TextfieldBase_base: typeof Focusable & {
17
17
  */
18
18
  export declare class TextfieldBase extends TextfieldBase_base {
19
19
  static get styles(): CSSResultArray;
20
- appliedLabel?: string;
20
+ protected appliedLabel?: string;
21
+ /**
22
+ * A regular expression outlining the keys that will be allowed to update the value of the form control.
23
+ */
21
24
  allowedKeys: string;
25
+ /**
26
+ * @private
27
+ */
22
28
  focused: boolean;
23
29
  protected inputElement: HTMLInputElement | HTMLTextAreaElement;
30
+ /**
31
+ * Whether the `value` held by the form control is invalid.
32
+ */
24
33
  invalid: boolean;
34
+ /**
35
+ * A string applied via `aria-label` to the form control when a user visible label is not provided.
36
+ */
25
37
  label: string;
38
+ /**
39
+ * Name of the form control.
40
+ */
26
41
  name: string | undefined;
42
+ /**
43
+ * Text that appears in the form control when it has no value set
44
+ */
27
45
  placeholder: string;
28
- private _type;
29
- get type(): TextfieldType;
30
46
  set type(val: TextfieldType);
47
+ get type(): TextfieldType;
48
+ /**
49
+ * @private
50
+ * This binding allows for invalid value for `type` to still be reflected to the DOM
51
+ */
52
+ private _type;
53
+ /**
54
+ * Pattern the `value` must match to be valid
55
+ */
31
56
  pattern?: string;
57
+ /**
58
+ * Whether a form control delivered with the `multiline` attribute will change size to accomodate longer input
59
+ */
32
60
  grows: boolean;
61
+ /**
62
+ * Defines the maximum string length that the user can enter
63
+ */
33
64
  maxlength: number;
65
+ /**
66
+ * Defines the minimum string length that the user can enter
67
+ */
34
68
  minlength: number;
69
+ /**
70
+ * Whether the form control should accept a value longer than one line
71
+ */
35
72
  multiline: boolean;
73
+ /**
74
+ * Whether a user can interact with the value of the form control
75
+ */
36
76
  readonly: boolean;
77
+ /**
78
+ * The specific number of rows the form control should provide in the user interface
79
+ */
37
80
  rows: number;
81
+ /**
82
+ * Whether the `value` held by the form control is valid.
83
+ */
38
84
  valid: boolean;
85
+ /**
86
+ * The value held by the form control
87
+ */
39
88
  set value(value: string | number);
40
89
  get value(): string | number;
41
90
  protected _value: string | number;
91
+ /**
92
+ * Whether to display the form control with no visible background
93
+ */
42
94
  quiet: boolean;
95
+ /**
96
+ * Whether the form control will be found to be invalid when it holds no `value`
97
+ */
43
98
  required: boolean;
99
+ /**
100
+ * What form of assistance should be provided when attempting to supply a value to the form control
101
+ */
44
102
  autocomplete?: HTMLInputElement['autocomplete'] | HTMLTextAreaElement['autocomplete'];
45
103
  get focusElement(): HTMLInputElement | HTMLTextAreaElement;
46
104
  /**
@@ -61,7 +119,7 @@ export declare class TextfieldBase extends TextfieldBase_base {
61
119
  protected handleInput(_event: Event): void;
62
120
  protected handleChange(): void;
63
121
  protected onFocus(): void;
64
- protected onBlur(): void;
122
+ protected onBlur(_event: FocusEvent): void;
65
123
  protected renderStateIcons(): TemplateResult | typeof nothing;
66
124
  protected get displayValue(): string;
67
125
  private get renderMultiline();
@@ -58,15 +58,15 @@ export class TextfieldBase extends ManageHelpText(
58
58
  static get styles() {
59
59
  return [textfieldStyles, checkmarkStyles];
60
60
  }
61
- get type() {
62
- var _a;
63
- return (_a = textfieldTypes.find((t) => t === this._type)) != null ? _a : "text";
64
- }
65
61
  set type(val) {
66
62
  const prev = this._type;
67
63
  this._type = val;
68
64
  this.requestUpdate("type", prev);
69
65
  }
66
+ get type() {
67
+ var _a;
68
+ return (_a = textfieldTypes.find((t) => t === this._type)) != null ? _a : "text";
69
+ }
70
70
  set value(value) {
71
71
  if (value === this.value) {
72
72
  return;
@@ -131,7 +131,7 @@ export class TextfieldBase extends ManageHelpText(
131
131
  onFocus() {
132
132
  this.focused = !this.readonly && true;
133
133
  }
134
- onBlur() {
134
+ onBlur(_event) {
135
135
  this.focused = !this.readonly && false;
136
136
  }
137
137
  renderStateIcons() {
@@ -279,12 +279,12 @@ __decorateClass([
279
279
  __decorateClass([
280
280
  property()
281
281
  ], TextfieldBase.prototype, "placeholder", 2);
282
- __decorateClass([
283
- property({ attribute: "type", reflect: true })
284
- ], TextfieldBase.prototype, "_type", 2);
285
282
  __decorateClass([
286
283
  state()
287
284
  ], TextfieldBase.prototype, "type", 1);
285
+ __decorateClass([
286
+ property({ attribute: "type", reflect: true })
287
+ ], TextfieldBase.prototype, "_type", 2);
288
288
  __decorateClass([
289
289
  property()
290
290
  ], TextfieldBase.prototype, "pattern", 2);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Textfield.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n ifDefined,\n live,\n} from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { ManageHelpText } from '@spectrum-web-components/help-text/src/manage-help-text.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\n\nimport textfieldStyles from './textfield.css.js';\nimport checkmarkStyles from '@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js';\n\nconst textfieldTypes = ['text', 'url', 'tel', 'email', 'password'] as const;\nexport type TextfieldType = typeof textfieldTypes[number];\n\n/**\n * @fires input - The value of the element has changed.\n * @fires change - An alteration to the value of the element has been committed by the user.\n */\nexport class TextfieldBase extends ManageHelpText(\n SizedMixin(Focusable, {\n noDefaultSize: true,\n })\n) {\n public static override get styles(): CSSResultArray {\n return [textfieldStyles, checkmarkStyles];\n }\n\n @state()\n appliedLabel?: string;\n\n @property({ attribute: 'allowed-keys' })\n allowedKeys = '';\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @query('.input:not(#sizer)')\n protected inputElement!: HTMLInputElement | HTMLTextAreaElement;\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label = '';\n\n @property({ type: String, reflect: true })\n public name: string | undefined;\n\n @property()\n public placeholder = '';\n\n @property({ attribute: 'type', reflect: true })\n private _type: TextfieldType = 'text';\n\n @state()\n get type(): TextfieldType {\n return textfieldTypes.find((t) => t === this._type) ?? 'text';\n }\n\n set type(val: TextfieldType) {\n const prev = this._type;\n this._type = val;\n this.requestUpdate('type', prev);\n }\n\n @property()\n public pattern?: string;\n\n @property({ type: Boolean, reflect: true })\n public grows = false;\n\n @property({ type: Number })\n public maxlength = -1;\n\n @property({ type: Number })\n public minlength = -1;\n\n @property({ type: Boolean, reflect: true })\n public multiline = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n @property({ type: Number })\n public rows = -1;\n\n @property({ type: Boolean, reflect: true })\n public valid = false;\n\n @property({ type: String })\n public set value(value: string | number) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public get value(): string | number {\n return this._value;\n }\n\n protected _value: string | number = '';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: Boolean, reflect: true })\n public required = false;\n\n @property({ type: String, reflect: true })\n public autocomplete?:\n | HTMLInputElement['autocomplete']\n | HTMLTextAreaElement['autocomplete'];\n\n public override get focusElement(): HTMLInputElement | HTMLTextAreaElement {\n return this.inputElement;\n }\n\n /**\n * Sets the start and end positions of the current selection.\n *\n * @param selectionStart The 0-based index of the first selected character. An index greater than the length of the\n * element's value is treated as pointing to the end of the value.\n * @param selectionEnd The 0-based index of the character after the last selected character. An index greater than\n * the length of the element's value is treated as pointing to the end of the value.\n * @param [selectionDirection=\"none\"] A string indicating the direction in which the selection is considered to\n * have been performed.\n */\n public setSelectionRange(\n selectionStart: number,\n selectionEnd: number,\n selectionDirection: 'forward' | 'backward' | 'none' = 'none'\n ): void {\n this.inputElement.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n }\n\n /**\n * Selects all the text.\n */\n public select(): void {\n this.inputElement.select();\n }\n\n protected handleInput(_event: Event): void {\n if (this.allowedKeys && this.inputElement.value) {\n const regExp = new RegExp(`^[${this.allowedKeys}]*$`, 'u');\n if (!regExp.test(this.inputElement.value)) {\n const selectionStart = this.inputElement\n .selectionStart as number;\n const nextSelectStart = selectionStart - 1;\n this.inputElement.value = this.value.toString();\n this.inputElement.setSelectionRange(\n nextSelectStart,\n nextSelectStart\n );\n return;\n }\n }\n this.value = this.inputElement.value;\n }\n\n protected handleChange(): void {\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected onFocus(): void {\n this.focused = !this.readonly && true;\n }\n\n protected onBlur(): void {\n this.focused = !this.readonly && false;\n }\n\n protected renderStateIcons(): TemplateResult | typeof nothing {\n if (this.invalid) {\n return html`\n <sp-icon-alert id=\"invalid\" class=\"icon\"></sp-icon-alert>\n `;\n } else if (this.valid) {\n return html`\n <sp-icon-checkmark100\n id=\"valid\"\n class=\"icon spectrum-UIIcon-Checkmark100\"\n ></sp-icon-checkmark100>\n `;\n }\n return nothing;\n }\n\n protected get displayValue(): string {\n return this.value.toString();\n }\n\n private get renderMultiline(): TemplateResult {\n return html`\n ${this.grows && this.rows === -1\n ? html`\n <div id=\"sizer\" class=\"input\" aria-hidden=\"true\">\n ${this.value}&#8203;\n </div>\n `\n : nothing}\n <!-- @ts-ignore -->\n <textarea\n name=${ifDefined(this.name || undefined)}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n title=${this.invalid ? '' : nothing}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${this.displayValue}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n rows=${ifDefined(this.rows > -1 ? this.rows : undefined)}\n autocomplete=${ifDefined(this.autocomplete)}\n ></textarea>\n `;\n }\n\n private get renderInput(): TemplateResult {\n return html`\n <!-- @ts-ignore -->\n <input\n name=${ifDefined(this.name || undefined)}\n type=${this.type}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n title=${this.invalid ? '' : nothing}\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${live(this.displayValue)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n autocomplete=${ifDefined(this.autocomplete)}\n />\n `;\n }\n\n protected renderField(): TemplateResult {\n return html`\n ${this.renderStateIcons()}\n ${this.multiline ? this.renderMultiline : this.renderInput}\n `;\n }\n\n protected override render(): TemplateResult {\n return html`\n <div id=\"textfield\">${this.renderField()}</div>\n ${this.renderHelpText(this.invalid)}\n `;\n }\n\n protected override update(changedProperties: PropertyValues): void {\n if (\n changedProperties.has('value') ||\n (changedProperties.has('required') && this.required)\n ) {\n this.updateComplete.then(() => {\n this.checkValidity();\n });\n }\n super.update(changedProperties);\n }\n\n public checkValidity(): boolean {\n let validity = this.inputElement.checkValidity();\n if (this.required || (this.value && this.pattern)) {\n if ((this.disabled || this.multiline) && this.pattern) {\n const regex = new RegExp(`^${this.pattern}$`, 'u');\n validity = regex.test(this.value.toString());\n }\n if (typeof this.minlength !== 'undefined') {\n validity =\n validity && this.value.toString().length >= this.minlength;\n }\n this.valid = validity;\n this.invalid = !validity;\n }\n return validity;\n }\n}\n\n/**\n * @element sp-textfield\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class Textfield extends TextfieldBase {\n @property({ type: String })\n public override set value(value: string) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): string {\n return this._value;\n }\n\n protected override _value = '';\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n ifDefined,\n live,\n} from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { ManageHelpText } from '@spectrum-web-components/help-text/src/manage-help-text.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\n\nimport textfieldStyles from './textfield.css.js';\nimport checkmarkStyles from '@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js';\n\nconst textfieldTypes = ['text', 'url', 'tel', 'email', 'password'] as const;\nexport type TextfieldType = typeof textfieldTypes[number];\n\n/**\n * @fires input - The value of the element has changed.\n * @fires change - An alteration to the value of the element has been committed by the user.\n */\nexport class TextfieldBase extends ManageHelpText(\n SizedMixin(Focusable, {\n noDefaultSize: true,\n })\n) {\n public static override get styles(): CSSResultArray {\n return [textfieldStyles, checkmarkStyles];\n }\n\n @state()\n protected appliedLabel?: string;\n\n /**\n * A regular expression outlining the keys that will be allowed to update the value of the form control.\n */\n @property({ attribute: 'allowed-keys' })\n allowedKeys = '';\n\n /**\n * @private\n */\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @query('.input:not(#sizer)')\n protected inputElement!: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * Whether the `value` held by the form control is invalid.\n */\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n /**\n * A string applied via `aria-label` to the form control when a user visible label is not provided.\n */\n @property()\n public label = '';\n\n /**\n * Name of the form control.\n */\n @property({ type: String, reflect: true })\n public name: string | undefined;\n\n /**\n * Text that appears in the form control when it has no value set\n */\n @property()\n public placeholder = '';\n\n @state()\n set type(val: TextfieldType) {\n const prev = this._type;\n this._type = val;\n this.requestUpdate('type', prev);\n }\n\n get type(): TextfieldType {\n return textfieldTypes.find((t) => t === this._type) ?? 'text';\n }\n\n /**\n * @private\n * This binding allows for invalid value for `type` to still be reflected to the DOM\n */\n @property({ attribute: 'type', reflect: true })\n private _type: TextfieldType = 'text';\n\n /**\n * Pattern the `value` must match to be valid\n */\n @property()\n public pattern?: string;\n\n /**\n * Whether a form control delivered with the `multiline` attribute will change size to accomodate longer input\n */\n @property({ type: Boolean, reflect: true })\n public grows = false;\n\n /**\n * Defines the maximum string length that the user can enter\n */\n @property({ type: Number })\n public maxlength = -1;\n\n /**\n * Defines the minimum string length that the user can enter\n */\n @property({ type: Number })\n public minlength = -1;\n\n /**\n * Whether the form control should accept a value longer than one line\n */\n @property({ type: Boolean, reflect: true })\n public multiline = false;\n\n /**\n * Whether a user can interact with the value of the form control\n */\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n /**\n * The specific number of rows the form control should provide in the user interface\n */\n @property({ type: Number })\n public rows = -1;\n\n /**\n * Whether the `value` held by the form control is valid.\n */\n @property({ type: Boolean, reflect: true })\n public valid = false;\n\n /**\n * The value held by the form control\n */\n @property({ type: String })\n public set value(value: string | number) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public get value(): string | number {\n return this._value;\n }\n\n protected _value: string | number = '';\n\n /**\n * Whether to display the form control with no visible background\n */\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n /**\n * Whether the form control will be found to be invalid when it holds no `value`\n */\n @property({ type: Boolean, reflect: true })\n public required = false;\n\n /**\n * What form of assistance should be provided when attempting to supply a value to the form control\n */\n @property({ type: String, reflect: true })\n public autocomplete?:\n | HTMLInputElement['autocomplete']\n | HTMLTextAreaElement['autocomplete'];\n\n public override get focusElement(): HTMLInputElement | HTMLTextAreaElement {\n return this.inputElement;\n }\n\n /**\n * Sets the start and end positions of the current selection.\n *\n * @param selectionStart The 0-based index of the first selected character. An index greater than the length of the\n * element's value is treated as pointing to the end of the value.\n * @param selectionEnd The 0-based index of the character after the last selected character. An index greater than\n * the length of the element's value is treated as pointing to the end of the value.\n * @param [selectionDirection=\"none\"] A string indicating the direction in which the selection is considered to\n * have been performed.\n */\n public setSelectionRange(\n selectionStart: number,\n selectionEnd: number,\n selectionDirection: 'forward' | 'backward' | 'none' = 'none'\n ): void {\n this.inputElement.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n }\n\n /**\n * Selects all the text.\n */\n public select(): void {\n this.inputElement.select();\n }\n\n protected handleInput(_event: Event): void {\n if (this.allowedKeys && this.inputElement.value) {\n const regExp = new RegExp(`^[${this.allowedKeys}]*$`, 'u');\n if (!regExp.test(this.inputElement.value)) {\n const selectionStart = this.inputElement\n .selectionStart as number;\n const nextSelectStart = selectionStart - 1;\n this.inputElement.value = this.value.toString();\n this.inputElement.setSelectionRange(\n nextSelectStart,\n nextSelectStart\n );\n return;\n }\n }\n this.value = this.inputElement.value;\n }\n\n protected handleChange(): void {\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected onFocus(): void {\n this.focused = !this.readonly && true;\n }\n\n protected onBlur(_event: FocusEvent): void {\n this.focused = !this.readonly && false;\n }\n\n protected renderStateIcons(): TemplateResult | typeof nothing {\n if (this.invalid) {\n return html`\n <sp-icon-alert id=\"invalid\" class=\"icon\"></sp-icon-alert>\n `;\n } else if (this.valid) {\n return html`\n <sp-icon-checkmark100\n id=\"valid\"\n class=\"icon spectrum-UIIcon-Checkmark100\"\n ></sp-icon-checkmark100>\n `;\n }\n return nothing;\n }\n\n protected get displayValue(): string {\n return this.value.toString();\n }\n\n private get renderMultiline(): TemplateResult {\n return html`\n ${this.grows && this.rows === -1\n ? html`\n <div id=\"sizer\" class=\"input\" aria-hidden=\"true\">\n ${this.value}&#8203;\n </div>\n `\n : nothing}\n <!-- @ts-ignore -->\n <textarea\n name=${ifDefined(this.name || undefined)}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n title=${this.invalid ? '' : nothing}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${this.displayValue}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n rows=${ifDefined(this.rows > -1 ? this.rows : undefined)}\n autocomplete=${ifDefined(this.autocomplete)}\n ></textarea>\n `;\n }\n\n private get renderInput(): TemplateResult {\n return html`\n <!-- @ts-ignore -->\n <input\n name=${ifDefined(this.name || undefined)}\n type=${this.type}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n title=${this.invalid ? '' : nothing}\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${live(this.displayValue)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n autocomplete=${ifDefined(this.autocomplete)}\n />\n `;\n }\n\n protected renderField(): TemplateResult {\n return html`\n ${this.renderStateIcons()}\n ${this.multiline ? this.renderMultiline : this.renderInput}\n `;\n }\n\n protected override render(): TemplateResult {\n return html`\n <div id=\"textfield\">${this.renderField()}</div>\n ${this.renderHelpText(this.invalid)}\n `;\n }\n\n protected override update(changedProperties: PropertyValues): void {\n if (\n changedProperties.has('value') ||\n (changedProperties.has('required') && this.required)\n ) {\n this.updateComplete.then(() => {\n this.checkValidity();\n });\n }\n super.update(changedProperties);\n }\n\n public checkValidity(): boolean {\n let validity = this.inputElement.checkValidity();\n if (this.required || (this.value && this.pattern)) {\n if ((this.disabled || this.multiline) && this.pattern) {\n const regex = new RegExp(`^${this.pattern}$`, 'u');\n validity = regex.test(this.value.toString());\n }\n if (typeof this.minlength !== 'undefined') {\n validity =\n validity && this.value.toString().length >= this.minlength;\n }\n this.valid = validity;\n this.invalid = !validity;\n }\n return validity;\n }\n}\n\n/**\n * @element sp-textfield\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class Textfield extends TextfieldBase {\n @property({ type: String })\n public override set value(value: string) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): string {\n return this._value;\n }\n\n protected override _value = '';\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/src/Textfield.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var t=(p,a,e,l)=>{for(var r=l>1?void 0:l?m(a,e):a,u=p.length-1,h;u>=0;u--)(h=p[u])&&(r=(l?h(a,e,r):h(r))||r);return l&&r&&c(a,e,r),r};import{html as s,nothing as o,SizedMixin as v}from"@spectrum-web-components/base";import{ifDefined as n,live as y}from"@spectrum-web-components/base/src/directives.js";import{property as i,query as b,state as d}from"@spectrum-web-components/base/src/decorators.js";import{ManageHelpText as g}from"@spectrum-web-components/help-text/src/manage-help-text.js";import{Focusable as f}from"@spectrum-web-components/shared/src/focusable.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js";import $ from"./textfield.css.js";import S from"@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js";const E=["text","url","tel","email","password"];export class TextfieldBase extends g(v(f,{noDefaultSize:!0})){constructor(){super(...arguments);this.allowedKeys="";this.focused=!1;this.invalid=!1;this.label="";this.placeholder="";this._type="text";this.grows=!1;this.maxlength=-1;this.minlength=-1;this.multiline=!1;this.readonly=!1;this.rows=-1;this.valid=!1;this._value="";this.quiet=!1;this.required=!1}static get styles(){return[$,S]}get type(){var e;return(e=E.find(l=>l===this._type))!=null?e:"text"}set type(e){const l=this._type;this._type=e,this.requestUpdate("type",l)}set value(e){if(e===this.value)return;const l=this._value;this._value=e,this.requestUpdate("value",l)}get value(){return this._value}get focusElement(){return this.inputElement}setSelectionRange(e,l,r="none"){this.inputElement.setSelectionRange(e,l,r)}select(){this.inputElement.select()}handleInput(e){if(this.allowedKeys&&this.inputElement.value&&!new RegExp(`^[${this.allowedKeys}]*$`,"u").test(this.inputElement.value)){const u=this.inputElement.selectionStart-1;this.inputElement.value=this.value.toString(),this.inputElement.setSelectionRange(u,u);return}this.value=this.inputElement.value}handleChange(){this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}))}onFocus(){this.focused=!this.readonly&&!0}onBlur(){this.focused=!this.readonly&&!1}renderStateIcons(){return this.invalid?s`
1
+ "use strict";var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var t=(p,a,e,l)=>{for(var r=l>1?void 0:l?m(a,e):a,u=p.length-1,h;u>=0;u--)(h=p[u])&&(r=(l?h(a,e,r):h(r))||r);return l&&r&&c(a,e,r),r};import{html as s,nothing as o,SizedMixin as v}from"@spectrum-web-components/base";import{ifDefined as n,live as y}from"@spectrum-web-components/base/src/directives.js";import{property as i,query as b,state as d}from"@spectrum-web-components/base/src/decorators.js";import{ManageHelpText as g}from"@spectrum-web-components/help-text/src/manage-help-text.js";import{Focusable as f}from"@spectrum-web-components/shared/src/focusable.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js";import $ from"./textfield.css.js";import E from"@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js";const S=["text","url","tel","email","password"];export class TextfieldBase extends g(v(f,{noDefaultSize:!0})){constructor(){super(...arguments);this.allowedKeys="";this.focused=!1;this.invalid=!1;this.label="";this.placeholder="";this._type="text";this.grows=!1;this.maxlength=-1;this.minlength=-1;this.multiline=!1;this.readonly=!1;this.rows=-1;this.valid=!1;this._value="";this.quiet=!1;this.required=!1}static get styles(){return[$,E]}set type(e){const l=this._type;this._type=e,this.requestUpdate("type",l)}get type(){var e;return(e=S.find(l=>l===this._type))!=null?e:"text"}set value(e){if(e===this.value)return;const l=this._value;this._value=e,this.requestUpdate("value",l)}get value(){return this._value}get focusElement(){return this.inputElement}setSelectionRange(e,l,r="none"){this.inputElement.setSelectionRange(e,l,r)}select(){this.inputElement.select()}handleInput(e){if(this.allowedKeys&&this.inputElement.value&&!new RegExp(`^[${this.allowedKeys}]*$`,"u").test(this.inputElement.value)){const u=this.inputElement.selectionStart-1;this.inputElement.value=this.value.toString(),this.inputElement.setSelectionRange(u,u);return}this.value=this.inputElement.value}handleChange(){this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}))}onFocus(){this.focused=!this.readonly&&!0}onBlur(e){this.focused=!this.readonly&&!1}renderStateIcons(){return this.invalid?s`
2
2
  <sp-icon-alert id="invalid" class="icon"></sp-icon-alert>
3
3
  `:this.valid?s`
4
4
  <sp-icon-checkmark100
@@ -64,5 +64,5 @@
64
64
  `}render(){return s`
65
65
  <div id="textfield">${this.renderField()}</div>
66
66
  ${this.renderHelpText(this.invalid)}
67
- `}update(e){(e.has("value")||e.has("required")&&this.required)&&this.updateComplete.then(()=>{this.checkValidity()}),super.update(e)}checkValidity(){let e=this.inputElement.checkValidity();return(this.required||this.value&&this.pattern)&&((this.disabled||this.multiline)&&this.pattern&&(e=new RegExp(`^${this.pattern}$`,"u").test(this.value.toString())),typeof this.minlength!="undefined"&&(e=e&&this.value.toString().length>=this.minlength),this.valid=e,this.invalid=!e),e}}t([d()],TextfieldBase.prototype,"appliedLabel",2),t([i({attribute:"allowed-keys"})],TextfieldBase.prototype,"allowedKeys",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"focused",2),t([b(".input:not(#sizer)")],TextfieldBase.prototype,"inputElement",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"invalid",2),t([i()],TextfieldBase.prototype,"label",2),t([i({type:String,reflect:!0})],TextfieldBase.prototype,"name",2),t([i()],TextfieldBase.prototype,"placeholder",2),t([i({attribute:"type",reflect:!0})],TextfieldBase.prototype,"_type",2),t([d()],TextfieldBase.prototype,"type",1),t([i()],TextfieldBase.prototype,"pattern",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"grows",2),t([i({type:Number})],TextfieldBase.prototype,"maxlength",2),t([i({type:Number})],TextfieldBase.prototype,"minlength",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"multiline",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"readonly",2),t([i({type:Number})],TextfieldBase.prototype,"rows",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"valid",2),t([i({type:String})],TextfieldBase.prototype,"value",1),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"quiet",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"required",2),t([i({type:String,reflect:!0})],TextfieldBase.prototype,"autocomplete",2);export class Textfield extends TextfieldBase{constructor(){super(...arguments);this._value=""}set value(e){if(e===this.value)return;const l=this._value;this._value=e,this.requestUpdate("value",l)}get value(){return this._value}}t([i({type:String})],Textfield.prototype,"value",1);
67
+ `}update(e){(e.has("value")||e.has("required")&&this.required)&&this.updateComplete.then(()=>{this.checkValidity()}),super.update(e)}checkValidity(){let e=this.inputElement.checkValidity();return(this.required||this.value&&this.pattern)&&((this.disabled||this.multiline)&&this.pattern&&(e=new RegExp(`^${this.pattern}$`,"u").test(this.value.toString())),typeof this.minlength!="undefined"&&(e=e&&this.value.toString().length>=this.minlength),this.valid=e,this.invalid=!e),e}}t([d()],TextfieldBase.prototype,"appliedLabel",2),t([i({attribute:"allowed-keys"})],TextfieldBase.prototype,"allowedKeys",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"focused",2),t([b(".input:not(#sizer)")],TextfieldBase.prototype,"inputElement",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"invalid",2),t([i()],TextfieldBase.prototype,"label",2),t([i({type:String,reflect:!0})],TextfieldBase.prototype,"name",2),t([i()],TextfieldBase.prototype,"placeholder",2),t([d()],TextfieldBase.prototype,"type",1),t([i({attribute:"type",reflect:!0})],TextfieldBase.prototype,"_type",2),t([i()],TextfieldBase.prototype,"pattern",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"grows",2),t([i({type:Number})],TextfieldBase.prototype,"maxlength",2),t([i({type:Number})],TextfieldBase.prototype,"minlength",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"multiline",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"readonly",2),t([i({type:Number})],TextfieldBase.prototype,"rows",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"valid",2),t([i({type:String})],TextfieldBase.prototype,"value",1),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"quiet",2),t([i({type:Boolean,reflect:!0})],TextfieldBase.prototype,"required",2),t([i({type:String,reflect:!0})],TextfieldBase.prototype,"autocomplete",2);export class Textfield extends TextfieldBase{constructor(){super(...arguments);this._value=""}set value(e){if(e===this.value)return;const l=this._value;this._value=e,this.requestUpdate("value",l)}get value(){return this._value}}t([i({type:String})],Textfield.prototype,"value",1);
68
68
  //# sourceMappingURL=Textfield.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Textfield.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n ifDefined,\n live,\n} from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { ManageHelpText } from '@spectrum-web-components/help-text/src/manage-help-text.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\n\nimport textfieldStyles from './textfield.css.js';\nimport checkmarkStyles from '@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js';\n\nconst textfieldTypes = ['text', 'url', 'tel', 'email', 'password'] as const;\nexport type TextfieldType = typeof textfieldTypes[number];\n\n/**\n * @fires input - The value of the element has changed.\n * @fires change - An alteration to the value of the element has been committed by the user.\n */\nexport class TextfieldBase extends ManageHelpText(\n SizedMixin(Focusable, {\n noDefaultSize: true,\n })\n) {\n public static override get styles(): CSSResultArray {\n return [textfieldStyles, checkmarkStyles];\n }\n\n @state()\n appliedLabel?: string;\n\n @property({ attribute: 'allowed-keys' })\n allowedKeys = '';\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @query('.input:not(#sizer)')\n protected inputElement!: HTMLInputElement | HTMLTextAreaElement;\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label = '';\n\n @property({ type: String, reflect: true })\n public name: string | undefined;\n\n @property()\n public placeholder = '';\n\n @property({ attribute: 'type', reflect: true })\n private _type: TextfieldType = 'text';\n\n @state()\n get type(): TextfieldType {\n return textfieldTypes.find((t) => t === this._type) ?? 'text';\n }\n\n set type(val: TextfieldType) {\n const prev = this._type;\n this._type = val;\n this.requestUpdate('type', prev);\n }\n\n @property()\n public pattern?: string;\n\n @property({ type: Boolean, reflect: true })\n public grows = false;\n\n @property({ type: Number })\n public maxlength = -1;\n\n @property({ type: Number })\n public minlength = -1;\n\n @property({ type: Boolean, reflect: true })\n public multiline = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n @property({ type: Number })\n public rows = -1;\n\n @property({ type: Boolean, reflect: true })\n public valid = false;\n\n @property({ type: String })\n public set value(value: string | number) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public get value(): string | number {\n return this._value;\n }\n\n protected _value: string | number = '';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: Boolean, reflect: true })\n public required = false;\n\n @property({ type: String, reflect: true })\n public autocomplete?:\n | HTMLInputElement['autocomplete']\n | HTMLTextAreaElement['autocomplete'];\n\n public override get focusElement(): HTMLInputElement | HTMLTextAreaElement {\n return this.inputElement;\n }\n\n /**\n * Sets the start and end positions of the current selection.\n *\n * @param selectionStart The 0-based index of the first selected character. An index greater than the length of the\n * element's value is treated as pointing to the end of the value.\n * @param selectionEnd The 0-based index of the character after the last selected character. An index greater than\n * the length of the element's value is treated as pointing to the end of the value.\n * @param [selectionDirection=\"none\"] A string indicating the direction in which the selection is considered to\n * have been performed.\n */\n public setSelectionRange(\n selectionStart: number,\n selectionEnd: number,\n selectionDirection: 'forward' | 'backward' | 'none' = 'none'\n ): void {\n this.inputElement.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n }\n\n /**\n * Selects all the text.\n */\n public select(): void {\n this.inputElement.select();\n }\n\n protected handleInput(_event: Event): void {\n if (this.allowedKeys && this.inputElement.value) {\n const regExp = new RegExp(`^[${this.allowedKeys}]*$`, 'u');\n if (!regExp.test(this.inputElement.value)) {\n const selectionStart = this.inputElement\n .selectionStart as number;\n const nextSelectStart = selectionStart - 1;\n this.inputElement.value = this.value.toString();\n this.inputElement.setSelectionRange(\n nextSelectStart,\n nextSelectStart\n );\n return;\n }\n }\n this.value = this.inputElement.value;\n }\n\n protected handleChange(): void {\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected onFocus(): void {\n this.focused = !this.readonly && true;\n }\n\n protected onBlur(): void {\n this.focused = !this.readonly && false;\n }\n\n protected renderStateIcons(): TemplateResult | typeof nothing {\n if (this.invalid) {\n return html`\n <sp-icon-alert id=\"invalid\" class=\"icon\"></sp-icon-alert>\n `;\n } else if (this.valid) {\n return html`\n <sp-icon-checkmark100\n id=\"valid\"\n class=\"icon spectrum-UIIcon-Checkmark100\"\n ></sp-icon-checkmark100>\n `;\n }\n return nothing;\n }\n\n protected get displayValue(): string {\n return this.value.toString();\n }\n\n private get renderMultiline(): TemplateResult {\n return html`\n ${this.grows && this.rows === -1\n ? html`\n <div id=\"sizer\" class=\"input\" aria-hidden=\"true\">\n ${this.value}&#8203;\n </div>\n `\n : nothing}\n <!-- @ts-ignore -->\n <textarea\n name=${ifDefined(this.name || undefined)}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n title=${this.invalid ? '' : nothing}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${this.displayValue}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n rows=${ifDefined(this.rows > -1 ? this.rows : undefined)}\n autocomplete=${ifDefined(this.autocomplete)}\n ></textarea>\n `;\n }\n\n private get renderInput(): TemplateResult {\n return html`\n <!-- @ts-ignore -->\n <input\n name=${ifDefined(this.name || undefined)}\n type=${this.type}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n title=${this.invalid ? '' : nothing}\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${live(this.displayValue)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n autocomplete=${ifDefined(this.autocomplete)}\n />\n `;\n }\n\n protected renderField(): TemplateResult {\n return html`\n ${this.renderStateIcons()}\n ${this.multiline ? this.renderMultiline : this.renderInput}\n `;\n }\n\n protected override render(): TemplateResult {\n return html`\n <div id=\"textfield\">${this.renderField()}</div>\n ${this.renderHelpText(this.invalid)}\n `;\n }\n\n protected override update(changedProperties: PropertyValues): void {\n if (\n changedProperties.has('value') ||\n (changedProperties.has('required') && this.required)\n ) {\n this.updateComplete.then(() => {\n this.checkValidity();\n });\n }\n super.update(changedProperties);\n }\n\n public checkValidity(): boolean {\n let validity = this.inputElement.checkValidity();\n if (this.required || (this.value && this.pattern)) {\n if ((this.disabled || this.multiline) && this.pattern) {\n const regex = new RegExp(`^${this.pattern}$`, 'u');\n validity = regex.test(this.value.toString());\n }\n if (typeof this.minlength !== 'undefined') {\n validity =\n validity && this.value.toString().length >= this.minlength;\n }\n this.valid = validity;\n this.invalid = !validity;\n }\n return validity;\n }\n}\n\n/**\n * @element sp-textfield\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class Textfield extends TextfieldBase {\n @property({ type: String })\n public override set value(value: string) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): string {\n return this._value;\n }\n\n protected override _value = '';\n}\n"],
5
- "mappings": "qNAYA,OAEI,QAAAA,EACA,WAAAC,EAEA,cAAAC,MAEG,gCACP,OACI,aAAAC,EACA,QAAAC,MACG,kDACP,OACI,YAAAC,EACA,SAAAC,EACA,SAAAC,MACG,kDAEP,OAAS,kBAAAC,MAAsB,6DAC/B,OAAS,aAAAC,MAAiB,mDAC1B,MAAO,kEACP,MAAO,iEAEP,OAAOC,MAAqB,qBAC5B,OAAOC,MAAqB,mEAE5B,MAAMC,EAAiB,CAAC,OAAQ,MAAO,MAAO,QAAS,UAAU,EAO1D,aAAM,sBAAsBJ,EAC/BN,EAAWO,EAAW,CAClB,cAAe,EACnB,CAAC,CACL,CAAE,CAJK,kCAaH,iBAAc,GAGd,KAAO,QAAU,GAMjB,KAAO,QAAU,GAGjB,KAAO,MAAQ,GAMf,KAAO,YAAc,GAGrB,KAAQ,MAAuB,OAiB/B,KAAO,MAAQ,GAGf,KAAO,UAAY,GAGnB,KAAO,UAAY,GAGnB,KAAO,UAAY,GAGnB,KAAO,SAAW,GAGlB,KAAO,KAAO,GAGd,KAAO,MAAQ,GAgBf,KAAU,OAA0B,GAGpC,KAAO,MAAQ,GAGf,KAAO,SAAW,GAtFlB,WAA2B,QAAyB,CAChD,MAAO,CAACC,EAAiBC,CAAe,CAC5C,CA8BA,IAAI,MAAsB,CAlF9B,IAAAE,EAmFQ,OAAOA,EAAAD,EAAe,KAAME,GAAMA,IAAM,KAAK,KAAK,IAA3C,KAAAD,EAAgD,MAC3D,CAEA,IAAI,KAAKE,EAAoB,CACzB,MAAMC,EAAO,KAAK,MAClB,KAAK,MAAQD,EACb,KAAK,cAAc,OAAQC,CAAI,CACnC,CA2BA,IAAW,MAAMC,EAAwB,CACrC,GAAIA,IAAU,KAAK,MACf,OAEJ,MAAMC,EAAW,KAAK,OACtB,KAAK,OAASD,EACd,KAAK,cAAc,QAASC,CAAQ,CACxC,CAEA,IAAW,OAAyB,CAChC,OAAO,KAAK,MAChB,CAeA,IAAoB,cAAuD,CACvE,OAAO,KAAK,YAChB,CAYO,kBACHC,EACAC,EACAC,EAAsD,OAClD,CACJ,KAAK,aAAa,kBACdF,EACAC,EACAC,CACJ,CACJ,CAKO,QAAe,CAClB,KAAK,aAAa,OAAO,CAC7B,CAEU,YAAYC,EAAqB,CACvC,GAAI,KAAK,aAAe,KAAK,aAAa,OAElC,CADW,IAAI,OAAO,KAAK,KAAK,WAAW,MAAO,GAAG,EAC7C,KAAK,KAAK,aAAa,KAAK,EAAG,CAGvC,MAAMC,EAFiB,KAAK,aACvB,eACoC,EACzC,KAAK,aAAa,MAAQ,KAAK,MAAM,SAAS,EAC9C,KAAK,aAAa,kBACdA,EACAA,CACJ,EACA,MACJ,CAEJ,KAAK,MAAQ,KAAK,aAAa,KACnC,CAEU,cAAqB,CAC3B,KAAK,cACD,IAAI,MAAM,SAAU,CAChB,QAAS,GACT,SAAU,EACd,CAAC,CACL,CACJ,CAEU,SAAgB,CACtB,KAAK,QAAU,CAAC,KAAK,UAAY,EACrC,CAEU,QAAe,CACrB,KAAK,QAAU,CAAC,KAAK,UAAY,EACrC,CAEU,kBAAoD,CAC1D,OAAI,KAAK,QACEvB;AAAA;AAAA,cAGA,KAAK,MACLA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOJC,CACX,CAEA,IAAc,cAAuB,CACjC,OAAO,KAAK,MAAM,SAAS,CAC/B,CAEA,IAAY,iBAAkC,CAC1C,OAAOD;AAAA,cACD,KAAK,OAAS,KAAK,OAAS,GACxBA;AAAA;AAAA,4BAEU,KAAK,KAAK;AAAA;AAAA,oBAGpBC,CAAO;AAAA;AAAA;AAAA,uBAGFE,EAAU,KAAK,MAAQ,MAAS,CAAC;AAAA,mCACrB,KAAK,UAAU;AAAA,6BACrB,KAAK,OAClB,KAAK,cACL,KAAK,WAAW;AAAA,+BACDA,EAAU,KAAK,SAAW,MAAS,CAAC;AAAA;AAAA,4BAEvCA,EACR,KAAK,UAAY,GAAK,KAAK,UAAY,MAC3C,CAAC;AAAA,4BACWA,EACR,KAAK,UAAY,GAAK,KAAK,UAAY,MAC3C,CAAC;AAAA,wBACO,KAAK,QAAU,GAAKF,CAAO;AAAA,0BACzBE,EAAU,KAAK,OAAO,CAAC;AAAA,8BACnB,KAAK,WAAW;AAAA,yBACrB,KAAK,YAAY;AAAA,0BAChB,KAAK,YAAY;AAAA,yBAClB,KAAK,WAAW;AAAA,yBAChB,KAAK,OAAO;AAAA,wBACb,KAAK,MAAM;AAAA,4BACP,KAAK,QAAQ;AAAA,4BACb,KAAK,QAAQ;AAAA,4BACb,KAAK,QAAQ;AAAA,uBAClBA,EAAU,KAAK,KAAO,GAAK,KAAK,KAAO,MAAS,CAAC;AAAA,+BACzCA,EAAU,KAAK,YAAY,CAAC;AAAA;AAAA,SAGvD,CAEA,IAAY,aAA8B,CACtC,OAAOH;AAAA;AAAA;AAAA,uBAGQG,EAAU,KAAK,MAAQ,MAAS,CAAC;AAAA,uBACjC,KAAK,IAAI;AAAA,mCACG,KAAK,UAAU;AAAA,6BACrB,KAAK,OAClB,KAAK,cACL,KAAK,WAAW;AAAA,+BACDA,EAAU,KAAK,SAAW,MAAS,CAAC;AAAA;AAAA,wBAE3C,KAAK,QAAU,GAAKF,CAAO;AAAA,4BACvBE,EACR,KAAK,UAAY,GAAK,KAAK,UAAY,MAC3C,CAAC;AAAA,4BACWA,EACR,KAAK,UAAY,GAAK,KAAK,UAAY,MAC3C,CAAC;AAAA,0BACSA,EAAU,KAAK,OAAO,CAAC;AAAA,8BACnB,KAAK,WAAW;AAAA,yBACrBC,EAAK,KAAK,YAAY,CAAC;AAAA,0BACtB,KAAK,YAAY;AAAA,yBAClB,KAAK,WAAW;AAAA,yBAChB,KAAK,OAAO;AAAA,wBACb,KAAK,MAAM;AAAA,4BACP,KAAK,QAAQ;AAAA,4BACb,KAAK,QAAQ;AAAA,4BACb,KAAK,QAAQ;AAAA,+BACVD,EAAU,KAAK,YAAY,CAAC;AAAA;AAAA,SAGvD,CAEU,aAA8B,CACpC,OAAOH;AAAA,cACD,KAAK,iBAAiB,CAAC;AAAA,cACvB,KAAK,UAAY,KAAK,gBAAkB,KAAK,WAAW;AAAA,SAElE,CAEmB,QAAyB,CACxC,OAAOA;AAAA,kCACmB,KAAK,YAAY,CAAC;AAAA,cACtC,KAAK,eAAe,KAAK,OAAO,CAAC;AAAA,SAE3C,CAEmB,OAAOwB,EAAyC,EAE3DA,EAAkB,IAAI,OAAO,GAC5BA,EAAkB,IAAI,UAAU,GAAK,KAAK,WAE3C,KAAK,eAAe,KAAK,IAAM,CAC3B,KAAK,cAAc,CACvB,CAAC,EAEL,MAAM,OAAOA,CAAiB,CAClC,CAEO,eAAyB,CAC5B,IAAIC,EAAW,KAAK,aAAa,cAAc,EAC/C,OAAI,KAAK,UAAa,KAAK,OAAS,KAAK,YAChC,KAAK,UAAY,KAAK,YAAc,KAAK,UAE1CA,EADc,IAAI,OAAO,IAAI,KAAK,OAAO,IAAK,GAAG,EAChC,KAAK,KAAK,MAAM,SAAS,CAAC,GAE3C,OAAO,KAAK,WAAc,cAC1BA,EACIA,GAAY,KAAK,MAAM,SAAS,EAAE,QAAU,KAAK,WAEzD,KAAK,MAAQA,EACb,KAAK,QAAU,CAACA,GAEbA,CACX,CACJ,CArSIC,EAAA,CADCnB,EAAM,GATE,cAUT,4BAGAmB,EAAA,CADCrB,EAAS,CAAE,UAAW,cAAe,CAAC,GAZ9B,cAaT,2BAGOqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAfjC,cAgBF,uBAGGqB,EAAA,CADTpB,EAAM,oBAAoB,GAlBlB,cAmBC,4BAGHoB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GArBjC,cAsBF,uBAGAqB,EAAA,CADNrB,EAAS,GAxBD,cAyBF,qBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GA3BhC,cA4BF,oBAGAqB,EAAA,CADNrB,EAAS,GA9BD,cA+BF,2BAGCqB,EAAA,CADPrB,EAAS,CAAE,UAAW,OAAQ,QAAS,EAAK,CAAC,GAjCrC,cAkCD,qBAGJqB,EAAA,CADHnB,EAAM,GApCE,cAqCL,oBAWGmB,EAAA,CADNrB,EAAS,GA/CD,cAgDF,uBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAlDjC,cAmDF,qBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,MAAO,CAAC,GArDjB,cAsDF,yBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,MAAO,CAAC,GAxDjB,cAyDF,yBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA3DjC,cA4DF,yBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA9DjC,cA+DF,wBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,MAAO,CAAC,GAjEjB,cAkEF,oBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GApEjC,cAqEF,qBAGIqB,EAAA,CADVrB,EAAS,CAAE,KAAM,MAAO,CAAC,GAvEjB,cAwEE,qBAgBJqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAvFjC,cAwFF,qBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA1FjC,cA2FF,wBAGAqB,EAAA,CADNrB,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GA7FhC,cA8FF,4BAwNJ,aAAM,kBAAkB,aAAc,CAAtC,kCAeH,KAAmB,OAAS,GAb5B,IAAoB,MAAMY,EAAe,CACrC,GAAIA,IAAU,KAAK,MACf,OAEJ,MAAMC,EAAW,KAAK,OACtB,KAAK,OAASD,EACd,KAAK,cAAc,QAASC,CAAQ,CACxC,CAEA,IAAoB,OAAgB,CAChC,OAAO,KAAK,MAChB,CAGJ,CAdwBQ,EAAA,CADnBrB,EAAS,CAAE,KAAM,MAAO,CAAC,GADjB,UAEW",
6
- "names": ["html", "nothing", "SizedMixin", "ifDefined", "live", "property", "query", "state", "ManageHelpText", "Focusable", "textfieldStyles", "checkmarkStyles", "textfieldTypes", "_a", "t", "val", "prev", "value", "oldValue", "selectionStart", "selectionEnd", "selectionDirection", "_event", "nextSelectStart", "changedProperties", "validity", "__decorateClass"]
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n ifDefined,\n live,\n} from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { ManageHelpText } from '@spectrum-web-components/help-text/src/manage-help-text.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-checkmark100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\n\nimport textfieldStyles from './textfield.css.js';\nimport checkmarkStyles from '@spectrum-web-components/icon/src/spectrum-icon-checkmark.css.js';\n\nconst textfieldTypes = ['text', 'url', 'tel', 'email', 'password'] as const;\nexport type TextfieldType = typeof textfieldTypes[number];\n\n/**\n * @fires input - The value of the element has changed.\n * @fires change - An alteration to the value of the element has been committed by the user.\n */\nexport class TextfieldBase extends ManageHelpText(\n SizedMixin(Focusable, {\n noDefaultSize: true,\n })\n) {\n public static override get styles(): CSSResultArray {\n return [textfieldStyles, checkmarkStyles];\n }\n\n @state()\n protected appliedLabel?: string;\n\n /**\n * A regular expression outlining the keys that will be allowed to update the value of the form control.\n */\n @property({ attribute: 'allowed-keys' })\n allowedKeys = '';\n\n /**\n * @private\n */\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @query('.input:not(#sizer)')\n protected inputElement!: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * Whether the `value` held by the form control is invalid.\n */\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n /**\n * A string applied via `aria-label` to the form control when a user visible label is not provided.\n */\n @property()\n public label = '';\n\n /**\n * Name of the form control.\n */\n @property({ type: String, reflect: true })\n public name: string | undefined;\n\n /**\n * Text that appears in the form control when it has no value set\n */\n @property()\n public placeholder = '';\n\n @state()\n set type(val: TextfieldType) {\n const prev = this._type;\n this._type = val;\n this.requestUpdate('type', prev);\n }\n\n get type(): TextfieldType {\n return textfieldTypes.find((t) => t === this._type) ?? 'text';\n }\n\n /**\n * @private\n * This binding allows for invalid value for `type` to still be reflected to the DOM\n */\n @property({ attribute: 'type', reflect: true })\n private _type: TextfieldType = 'text';\n\n /**\n * Pattern the `value` must match to be valid\n */\n @property()\n public pattern?: string;\n\n /**\n * Whether a form control delivered with the `multiline` attribute will change size to accomodate longer input\n */\n @property({ type: Boolean, reflect: true })\n public grows = false;\n\n /**\n * Defines the maximum string length that the user can enter\n */\n @property({ type: Number })\n public maxlength = -1;\n\n /**\n * Defines the minimum string length that the user can enter\n */\n @property({ type: Number })\n public minlength = -1;\n\n /**\n * Whether the form control should accept a value longer than one line\n */\n @property({ type: Boolean, reflect: true })\n public multiline = false;\n\n /**\n * Whether a user can interact with the value of the form control\n */\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n /**\n * The specific number of rows the form control should provide in the user interface\n */\n @property({ type: Number })\n public rows = -1;\n\n /**\n * Whether the `value` held by the form control is valid.\n */\n @property({ type: Boolean, reflect: true })\n public valid = false;\n\n /**\n * The value held by the form control\n */\n @property({ type: String })\n public set value(value: string | number) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public get value(): string | number {\n return this._value;\n }\n\n protected _value: string | number = '';\n\n /**\n * Whether to display the form control with no visible background\n */\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n /**\n * Whether the form control will be found to be invalid when it holds no `value`\n */\n @property({ type: Boolean, reflect: true })\n public required = false;\n\n /**\n * What form of assistance should be provided when attempting to supply a value to the form control\n */\n @property({ type: String, reflect: true })\n public autocomplete?:\n | HTMLInputElement['autocomplete']\n | HTMLTextAreaElement['autocomplete'];\n\n public override get focusElement(): HTMLInputElement | HTMLTextAreaElement {\n return this.inputElement;\n }\n\n /**\n * Sets the start and end positions of the current selection.\n *\n * @param selectionStart The 0-based index of the first selected character. An index greater than the length of the\n * element's value is treated as pointing to the end of the value.\n * @param selectionEnd The 0-based index of the character after the last selected character. An index greater than\n * the length of the element's value is treated as pointing to the end of the value.\n * @param [selectionDirection=\"none\"] A string indicating the direction in which the selection is considered to\n * have been performed.\n */\n public setSelectionRange(\n selectionStart: number,\n selectionEnd: number,\n selectionDirection: 'forward' | 'backward' | 'none' = 'none'\n ): void {\n this.inputElement.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n }\n\n /**\n * Selects all the text.\n */\n public select(): void {\n this.inputElement.select();\n }\n\n protected handleInput(_event: Event): void {\n if (this.allowedKeys && this.inputElement.value) {\n const regExp = new RegExp(`^[${this.allowedKeys}]*$`, 'u');\n if (!regExp.test(this.inputElement.value)) {\n const selectionStart = this.inputElement\n .selectionStart as number;\n const nextSelectStart = selectionStart - 1;\n this.inputElement.value = this.value.toString();\n this.inputElement.setSelectionRange(\n nextSelectStart,\n nextSelectStart\n );\n return;\n }\n }\n this.value = this.inputElement.value;\n }\n\n protected handleChange(): void {\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected onFocus(): void {\n this.focused = !this.readonly && true;\n }\n\n protected onBlur(_event: FocusEvent): void {\n this.focused = !this.readonly && false;\n }\n\n protected renderStateIcons(): TemplateResult | typeof nothing {\n if (this.invalid) {\n return html`\n <sp-icon-alert id=\"invalid\" class=\"icon\"></sp-icon-alert>\n `;\n } else if (this.valid) {\n return html`\n <sp-icon-checkmark100\n id=\"valid\"\n class=\"icon spectrum-UIIcon-Checkmark100\"\n ></sp-icon-checkmark100>\n `;\n }\n return nothing;\n }\n\n protected get displayValue(): string {\n return this.value.toString();\n }\n\n private get renderMultiline(): TemplateResult {\n return html`\n ${this.grows && this.rows === -1\n ? html`\n <div id=\"sizer\" class=\"input\" aria-hidden=\"true\">\n ${this.value}&#8203;\n </div>\n `\n : nothing}\n <!-- @ts-ignore -->\n <textarea\n name=${ifDefined(this.name || undefined)}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n title=${this.invalid ? '' : nothing}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${this.displayValue}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n rows=${ifDefined(this.rows > -1 ? this.rows : undefined)}\n autocomplete=${ifDefined(this.autocomplete)}\n ></textarea>\n `;\n }\n\n private get renderInput(): TemplateResult {\n return html`\n <!-- @ts-ignore -->\n <input\n name=${ifDefined(this.name || undefined)}\n type=${this.type}\n aria-describedby=${this.helpTextId}\n aria-label=${this.label ||\n this.appliedLabel ||\n this.placeholder}\n aria-invalid=${ifDefined(this.invalid || undefined)}\n class=\"input\"\n title=${this.invalid ? '' : nothing}\n maxlength=${ifDefined(\n this.maxlength > -1 ? this.maxlength : undefined\n )}\n minlength=${ifDefined(\n this.minlength > -1 ? this.minlength : undefined\n )}\n pattern=${ifDefined(this.pattern)}\n placeholder=${this.placeholder}\n .value=${live(this.displayValue)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @focus=${this.onFocus}\n @blur=${this.onBlur}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?readonly=${this.readonly}\n autocomplete=${ifDefined(this.autocomplete)}\n />\n `;\n }\n\n protected renderField(): TemplateResult {\n return html`\n ${this.renderStateIcons()}\n ${this.multiline ? this.renderMultiline : this.renderInput}\n `;\n }\n\n protected override render(): TemplateResult {\n return html`\n <div id=\"textfield\">${this.renderField()}</div>\n ${this.renderHelpText(this.invalid)}\n `;\n }\n\n protected override update(changedProperties: PropertyValues): void {\n if (\n changedProperties.has('value') ||\n (changedProperties.has('required') && this.required)\n ) {\n this.updateComplete.then(() => {\n this.checkValidity();\n });\n }\n super.update(changedProperties);\n }\n\n public checkValidity(): boolean {\n let validity = this.inputElement.checkValidity();\n if (this.required || (this.value && this.pattern)) {\n if ((this.disabled || this.multiline) && this.pattern) {\n const regex = new RegExp(`^${this.pattern}$`, 'u');\n validity = regex.test(this.value.toString());\n }\n if (typeof this.minlength !== 'undefined') {\n validity =\n validity && this.value.toString().length >= this.minlength;\n }\n this.valid = validity;\n this.invalid = !validity;\n }\n return validity;\n }\n}\n\n/**\n * @element sp-textfield\n * @slot help-text - default or non-negative help text to associate to your form element\n * @slot negative-help-text - negative help text to associate to your form element when `invalid`\n */\nexport class Textfield extends TextfieldBase {\n @property({ type: String })\n public override set value(value: string) {\n if (value === this.value) {\n return;\n }\n const oldValue = this._value;\n this._value = value;\n this.requestUpdate('value', oldValue);\n }\n\n public override get value(): string {\n return this._value;\n }\n\n protected override _value = '';\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "nothing", "SizedMixin", "ifDefined", "live", "property", "query", "state", "ManageHelpText", "Focusable", "textfieldStyles", "checkmarkStyles", "textfieldTypes", "val", "prev", "_a", "t", "value", "oldValue", "selectionStart", "selectionEnd", "selectionDirection", "_event", "nextSelectStart", "changedProperties", "validity", "__decorateClass"]
7
7
  }
@@ -342,19 +342,7 @@ var(--spectrum-textfield-border-width)
342
342
  --mod-textfield-font-weight,var(--spectrum-textfield-font-weight)
343
343
  );opacity:1;transition:color var(
344
344
  --mod-texfield-animation-duration,var(--spectrum-texfield-animation-duration)
345
- ) ease-in-out}.input:lang(ja)::placeholder,.input:lang(ko)::placeholder,.input:lang(zh)::placeholder{font-style:normal}.input:lang(ja)::-moz-placeholder,.input:lang(ko)::-moz-placeholder,.input:lang(zh)::-moz-placeholder{font-style:normal}#textfield:hover .input,.input:hover{border-color:var(
346
- --highcontrast-textfield-border-color-hover,var(
347
- --mod-textfield-border-color-hover,var(--spectrum-textfield-border-color-hover)
348
- )
349
- );color:var(
350
- --highcontrast-textfield-text-color-hover,var(
351
- --mod-textfield-text-color-hover,var(--spectrum-textfield-text-color-hover)
352
- )
353
- )}#textfield:hover .input::placeholder,.input:hover::placeholder{color:var(
354
- --highcontrast-textfield-text-color-hover,var(
355
- --mod-textfield-text-color-hover,var(--spectrum-textfield-text-color-hover)
356
- )
357
- )}.input:focus,:host([focused]) .input{border-color:var(
345
+ ) ease-in-out}.input:lang(ja)::placeholder,.input:lang(ko)::placeholder,.input:lang(zh)::placeholder{font-style:normal}.input:lang(ja)::-moz-placeholder,.input:lang(ko)::-moz-placeholder,.input:lang(zh)::-moz-placeholder{font-style:normal}.input:focus,:host([focused]) .input{border-color:var(
358
346
  --highcontrast-textfield-border-color-focus,var(
359
347
  --mod-textfield-border-color-focus,var(--spectrum-textfield-border-color-focus)
360
348
  )
@@ -366,18 +354,6 @@ var(--spectrum-textfield-border-width)
366
354
  --highcontrast-textfield-text-color-focus,var(
367
355
  --mod-textfield-text-color-focus,var(--spectrum-textfield-text-color-focus)
368
356
  )
369
- )}.input:focus:hover,:host([focused]) .input:hover{border-color:var(
370
- --highcontrast-textfield-border-color-focus-hover,var(
371
- --mod-textfield-border-color-focus-hover,var(--spectrum-textfield-border-color-focus-hover)
372
- )
373
- );color:var(
374
- --highcontrast-textfield-text-color-focus-hover,var(
375
- --mod-textfield-text-color-focus-hover,var(--spectrum-textfield-text-color-focus-hover)
376
- )
377
- )}.input:focus:hover::placeholder,:host([focused]) .input:hover::placeholder{color:var(
378
- --highcontrast-textfield-text-color-focus-hover,var(
379
- --mod-textfield-text-color-focus-hover,var(--spectrum-textfield-text-color-focus-hover)
380
- )
381
357
  )}:host([focused]) .input{border-color:var(
382
358
  --highcontrast-textfield-border-color-keyboard-focus,var(
383
359
  --mod-textfield-border-color-keyboard-focus,var(--spectrum-textfield-border-color-keyboard-focus)
@@ -386,7 +362,11 @@ var(--spectrum-textfield-border-width)
386
362
  --highcontrast-textfield-text-color-keyboard-focus,var(
387
363
  --mod-textfield-text-color-keyboard-focus,var(--spectrum-textfield-text-color-keyboard-focus)
388
364
  )
389
- );outline:var(
365
+ )}:host([focused]) .input::placeholder{color:var(
366
+ --highcontrast-textfield-text-color-keyboard-focus,var(
367
+ --mod-textfield-text-color-keyboard-focus,var(--spectrum-textfield-text-color-keyboard-focus)
368
+ )
369
+ )}:host([focused]) .input{outline:var(
390
370
  --mod-textfield-focus-indicator-width,var(--spectrum-textfield-focus-indicator-width)
391
371
  ) solid;outline-color:var(
392
372
  --highcontrast-textfield-focus-indicator-color,var(
@@ -394,10 +374,6 @@ var(--spectrum-textfield-border-width)
394
374
  )
395
375
  );outline-offset:var(
396
376
  --mod-textfield-focus-indicator-gap,var(--spectrum-textfield-focus-indicator-gap)
397
- )}:host([focused]) .input::placeholder{color:var(
398
- --highcontrast-textfield-text-color-keyboard-focus,var(
399
- --mod-textfield-text-color-keyboard-focus,var(--spectrum-textfield-text-color-keyboard-focus)
400
- )
401
377
  )}:host([valid]) .input{color:var(
402
378
  --highcontrast-textfield-text-color-valid,var(
403
379
  --mod-textfield-text-color-valid,var(--spectrum-textfield-text-color-valid)
@@ -434,18 +410,10 @@ var(--spectrum-textfield-icon-spacing-inline-end-invalid)
434
410
  ) - var(
435
411
  --mod-textfield-border-width,
436
412
  var(--spectrum-textfield-border-width)
437
- ))}:host([invalid]) .input:hover,:host([invalid]:hover) .input{border-color:var(
438
- --highcontrast-textfield-border-color-invalid-hover,var(
439
- --mod-textfield-border-color-invalid-hover,var(--spectrum-textfield-border-color-invalid-hover)
440
- )
441
- )}:host([invalid]) .input:focus,:host([invalid]:focus) .input,:host([invalid][focused]) .input{border-color:var(
413
+ ))}:host([invalid]) .input:focus,:host([invalid]:focus) .input,:host([invalid][focused]) .input{border-color:var(
442
414
  --highcontrast-textfield-border-color-invalid-focus,var(
443
415
  --mod-textfield-border-color-invalid-focus,var(--spectrum-textfield-border-color-invalid-focus)
444
416
  )
445
- )}:host([invalid]) .input:focus:hover,:host([invalid]:focus) .input:hover,:host([invalid][focused]) .input:hover{border-color:var(
446
- --highcontrast-textfield-border-color-invalid-focus-hover,var(
447
- --mod-textfield-border-color-invalid-focus-hover,var(--spectrum-textfield-border-color-invalid-focus-hover)
448
- )
449
417
  )}:host([invalid]) .input.focus-visible,:host([invalid][focused]) .input{border-color:var(
450
418
  --highcontrast-textfield-border-color-invalid-keyboard-focus,var(
451
419
  --mod-textfield-border-color-invalid-keyboard-focus,var(--spectrum-textfield-border-color-invalid-keyboard-focus)
@@ -454,17 +422,17 @@ var(--spectrum-textfield-border-width)
454
422
  --highcontrast-textfield-border-color-invalid-keyboard-focus,var(
455
423
  --mod-textfield-border-color-invalid-keyboard-focus,var(--spectrum-textfield-border-color-invalid-keyboard-focus)
456
424
  )
457
- )}.input:disabled,:host([disabled]) #textfield .input,:host([disabled]) #textfield:hover .input{-webkit-text-fill-color:var(
425
+ )}.input:disabled,:host([disabled]) #textfield .input{background-color:var(
426
+ --mod-textfield-background-color-disabled,var(--spectrum-textfield-background-color-disabled)
427
+ );color:var(
458
428
  --highcontrast-textfield-text-color-disabled,var(
459
429
  --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
460
430
  )
461
- );background-color:var(
462
- --mod-textfield-background-color-disabled,var(--spectrum-textfield-background-color-disabled)
463
- );border-color:#0000;color:var(
431
+ );-webkit-text-fill-color:var(
464
432
  --highcontrast-textfield-text-color-disabled,var(
465
433
  --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
466
434
  )
467
- );opacity:1;resize:none}.input:disabled::placeholder,:host([disabled]) #textfield .input::placeholder,:host([disabled]) #textfield:hover .input::placeholder{color:var(
435
+ );border-color:#0000;opacity:1;resize:none}.input:disabled::placeholder,:host([disabled]) #textfield .input::placeholder{color:var(
468
436
  --highcontrast-textfield-text-color-disabled,var(
469
437
  --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
470
438
  )
@@ -474,25 +442,89 @@ var(--spectrum-textfield-border-width)
474
442
  --mod-textfield-spacing-block-start,var(--spectrum-textfield-spacing-block-start)
475
443
  );padding-inline:var(
476
444
  --mod-textfield-spacing-inline-quiet,var(--spectrum-textfield-spacing-inline-quiet)
477
- );resize:none}.input:disabled,:host([quiet][disabled]) .input,:host([quiet][disabled]:hover) .input{background-color:#0000;border-color:var(
445
+ );resize:none}.input:disabled,:host([quiet][disabled]) .input{background-color:#0000;border-color:var(
478
446
  --mod-textfield-border-color-disabled,var(--spectrum-textfield-border-color-disabled)
479
447
  );color:var(
480
448
  --highcontrast-textfield-text-color-disabled,var(
481
449
  --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
482
450
  )
483
- )}.input:disabled::placeholder,:host([quiet][disabled]) .input::placeholder,:host([quiet][disabled]:hover) .input::placeholder{color:var(
451
+ )}.input:disabled::placeholder,:host([quiet][disabled]) .input::placeholder{color:var(
452
+ --highcontrast-textfield-text-color-disabled,var(
453
+ --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
454
+ )
455
+ )}.input:read-only,:host([readonly]) #textfield .input{background-color:#0000;border-color:#0000;color:var(
456
+ --highcontrast-textfield-text-color-readonly,var(
457
+ --mod-textfield-text-color-readonly,var(--spectrum-textfield-text-color-readonly)
458
+ )
459
+ );outline:none}.input:read-only::placeholder,:host([readonly]) #textfield .input::placeholder{background-color:#0000;color:var(
460
+ --highcontrast-textfield-text-color-readonly,var(
461
+ --mod-textfield-text-color-readonly,var(--spectrum-textfield-text-color-readonly)
462
+ )
463
+ )}@media (hover:hover){#textfield:hover .input::placeholder,.input:hover::placeholder{color:var(
464
+ --highcontrast-textfield-text-color-hover,var(
465
+ --mod-textfield-text-color-hover,var(--spectrum-textfield-text-color-hover)
466
+ )
467
+ )}.input:focus:hover,:host([focused]) .input:hover{border-color:var(
468
+ --highcontrast-textfield-border-color-focus-hover,var(
469
+ --mod-textfield-border-color-focus-hover,var(--spectrum-textfield-border-color-focus-hover)
470
+ )
471
+ );color:var(
472
+ --highcontrast-textfield-text-color-focus-hover,var(
473
+ --mod-textfield-text-color-focus-hover,var(--spectrum-textfield-text-color-focus-hover)
474
+ )
475
+ )}.input:focus:hover::placeholder,:host([focused]) .input:hover::placeholder{color:var(
476
+ --highcontrast-textfield-text-color-focus-hover,var(
477
+ --mod-textfield-text-color-focus-hover,var(--spectrum-textfield-text-color-focus-hover)
478
+ )
479
+ )}:host([invalid]) .input:focus:hover,:host([invalid]:focus) .input:hover,:host([invalid][focused]) .input:hover{border-color:var(
480
+ --highcontrast-textfield-border-color-invalid-focus-hover,var(
481
+ --mod-textfield-border-color-invalid-focus-hover,var(--spectrum-textfield-border-color-invalid-focus-hover)
482
+ )
483
+ )}:host([disabled]) #textfield:hover .input::placeholder{color:var(
484
+ --highcontrast-textfield-text-color-disabled,var(
485
+ --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
486
+ )
487
+ )}:host([quiet][disabled]:hover) .input::placeholder{color:var(
488
+ --highcontrast-textfield-text-color-disabled,var(
489
+ --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
490
+ )
491
+ )}#textfield:hover .input,.input:hover{border-color:var(
492
+ --highcontrast-textfield-border-color-hover,var(
493
+ --mod-textfield-border-color-hover,var(--spectrum-textfield-border-color-hover)
494
+ )
495
+ );color:var(
496
+ --highcontrast-textfield-text-color-hover,var(
497
+ --mod-textfield-text-color-hover,var(--spectrum-textfield-text-color-hover)
498
+ )
499
+ )}:host([invalid]) .input:hover,:host([invalid]:hover) .input{border-color:var(
500
+ --highcontrast-textfield-border-color-invalid-hover,var(
501
+ --mod-textfield-border-color-invalid-hover,var(--spectrum-textfield-border-color-invalid-hover)
502
+ )
503
+ )}:host([disabled]) #textfield:hover .input{background-color:var(
504
+ --mod-textfield-background-color-disabled,var(--spectrum-textfield-background-color-disabled)
505
+ );color:var(
506
+ --highcontrast-textfield-text-color-disabled,var(
507
+ --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
508
+ )
509
+ );-webkit-text-fill-color:var(
510
+ --highcontrast-textfield-text-color-disabled,var(
511
+ --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
512
+ )
513
+ );border-color:#0000;opacity:1;resize:none}:host([quiet][disabled]:hover) .input{background-color:#0000;border-color:var(
514
+ --mod-textfield-border-color-disabled,var(--spectrum-textfield-border-color-disabled)
515
+ );color:var(
484
516
  --highcontrast-textfield-text-color-disabled,var(
485
517
  --mod-textfield-text-color-disabled,var(--spectrum-textfield-text-color-disabled)
486
518
  )
487
- )}.input:read-only,:host([readonly]) #textfield .input,:host([readonly]) #textfield:hover .input{background-color:#0000;border-color:#0000;color:var(
519
+ )}:host([readonly]) #textfield:hover .input{background-color:#0000;border-color:#0000;color:var(
488
520
  --highcontrast-textfield-text-color-readonly,var(
489
521
  --mod-textfield-text-color-readonly,var(--spectrum-textfield-text-color-readonly)
490
522
  )
491
- );outline:none}.input:read-only::placeholder,:host([readonly]) #textfield .input::placeholder,:host([readonly]) #textfield:hover .input::placeholder{background-color:#0000;color:var(
523
+ );outline:none}:host([readonly]) #textfield:hover .input::placeholder{background-color:#0000;color:var(
492
524
  --highcontrast-textfield-text-color-readonly,var(
493
525
  --mod-textfield-text-color-readonly,var(--spectrum-textfield-text-color-readonly)
494
526
  )
495
- )}.spectrum-Textfield--sideLabel{grid-template-columns:auto auto auto;grid-template-rows:auto auto}.spectrum-Textfield--sideLabel:after{grid-area:1/2/span 1/span 1}.spectrum-Textfield--sideLabel .spectrum-FieldLabel{grid-area:1/1/span 2/span 1;margin-inline-end:var(
527
+ )}}.spectrum-Textfield--sideLabel{grid-template-columns:auto auto auto;grid-template-rows:auto auto}.spectrum-Textfield--sideLabel:after{grid-area:1/2/span 1/span 1}.spectrum-Textfield--sideLabel .spectrum-FieldLabel{grid-area:1/1/span 2/span 1;margin-inline-end:var(
496
528
  --mod-textfield-label-spacing-inline-side-label,var(--spectrum-textfield-label-spacing-inline-side-label)
497
529
  )}.spectrum-Textfield--sideLabel .spectrum-Textfield-characterCount{align-items:flex-start;grid-area:1/3/auto/span 1;margin-block-start:var(
498
530
  --mod-textfield-character-count-spacing-block-side,var(--spectrum-textfield-character-count-spacing-block-side)