@spectrum-web-components/action-button 1.12.1 → 1.12.2

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.
@@ -51,10 +51,19 @@
51
51
  "text": "boolean"
52
52
  },
53
53
  "privacy": "public",
54
- "default": "false",
54
+ "deprecated": "The `emphasized` property is deprecated and will be removed\nin a future release.",
55
55
  "attribute": "emphasized",
56
56
  "reflects": true
57
57
  },
58
+ {
59
+ "kind": "field",
60
+ "name": "_emphasized",
61
+ "type": {
62
+ "text": "boolean"
63
+ },
64
+ "privacy": "private",
65
+ "default": "false"
66
+ },
58
67
  {
59
68
  "kind": "field",
60
69
  "name": "holdAffordance",
@@ -63,6 +72,7 @@
63
72
  },
64
73
  "privacy": "public",
65
74
  "default": "false",
75
+ "description": "Hold affordance is not included in the initial 2nd-gen `swc-action-button`\nrelease. It is planned for a future phase. See the action-button migration\nplan for consumer options in the interim.",
66
76
  "attribute": "hold-affordance",
67
77
  "reflects": true
68
78
  },
@@ -95,11 +105,20 @@
95
105
  "text": "boolean"
96
106
  },
97
107
  "privacy": "public",
98
- "default": "false",
99
108
  "description": "Whether an Action Button with `role='button'`\nshould also be `aria-pressed='true'`",
109
+ "deprecated": "The `selected` property is deprecated and will be removed in\na future release. Use `swc-toggle-button` for selectable button behavior.",
100
110
  "attribute": "selected",
101
111
  "reflects": true
102
112
  },
113
+ {
114
+ "kind": "field",
115
+ "name": "_selected",
116
+ "type": {
117
+ "text": "boolean"
118
+ },
119
+ "privacy": "private",
120
+ "default": "false"
121
+ },
103
122
  {
104
123
  "kind": "field",
105
124
  "name": "toggles",
@@ -107,11 +126,20 @@
107
126
  "text": "boolean"
108
127
  },
109
128
  "privacy": "public",
110
- "default": "false",
111
129
  "description": "Whether to automatically manage the `selected`\nattribute on interaction and whether `aria-pressed=\"false\"`\nshould be used when `selected === false`",
130
+ "deprecated": "The `toggles` property is deprecated and will be removed in\na future release. Use `swc-toggle-button` or `swc-toggle-button-group`\nfor toggle button behavior.",
112
131
  "attribute": "toggles",
113
132
  "reflects": true
114
133
  },
134
+ {
135
+ "kind": "field",
136
+ "name": "_toggles",
137
+ "type": {
138
+ "text": "boolean"
139
+ },
140
+ "privacy": "private",
141
+ "default": "false"
142
+ },
115
143
  {
116
144
  "kind": "field",
117
145
  "name": "staticColor",
@@ -248,7 +276,7 @@
248
276
  "type": {
249
277
  "text": "boolean"
250
278
  },
251
- "default": "false",
279
+ "deprecated": "The `emphasized` property is deprecated and will be removed\nin a future release.",
252
280
  "fieldName": "emphasized"
253
281
  },
254
282
  {
@@ -257,6 +285,7 @@
257
285
  "text": "boolean"
258
286
  },
259
287
  "default": "false",
288
+ "description": "Hold affordance is not included in the initial 2nd-gen `swc-action-button`\nrelease. It is planned for a future phase. See the action-button migration\nplan for consumer options in the interim.",
260
289
  "fieldName": "holdAffordance"
261
290
  },
262
291
  {
@@ -280,8 +309,8 @@
280
309
  "type": {
281
310
  "text": "boolean"
282
311
  },
283
- "default": "false",
284
312
  "description": "Whether an Action Button with `role='button'`\nshould also be `aria-pressed='true'`",
313
+ "deprecated": "The `selected` property is deprecated and will be removed in\na future release. Use `swc-toggle-button` for selectable button behavior.",
285
314
  "fieldName": "selected"
286
315
  },
287
316
  {
@@ -289,8 +318,8 @@
289
318
  "type": {
290
319
  "text": "boolean"
291
320
  },
292
- "default": "false",
293
321
  "description": "Whether to automatically manage the `selected`\nattribute on interaction and whether `aria-pressed=\"false\"`\nshould be used when `selected === false`",
322
+ "deprecated": "The `toggles` property is deprecated and will be removed in\na future release. Use `swc-toggle-button` or `swc-toggle-button-group`\nfor toggle button behavior.",
294
323
  "fieldName": "toggles"
295
324
  },
296
325
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/action-button",
3
- "version": "1.12.1",
3
+ "version": "1.12.2",
4
4
  "description": "",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Adobe",
@@ -54,11 +54,11 @@
54
54
  ],
55
55
  "types": "./src/index.d.ts",
56
56
  "dependencies": {
57
- "@spectrum-web-components/base": "1.12.1",
58
- "@spectrum-web-components/button": "1.12.1",
59
- "@spectrum-web-components/icon": "1.12.1",
60
- "@spectrum-web-components/icons-ui": "1.12.1",
61
- "@spectrum-web-components/shared": "1.12.1"
57
+ "@spectrum-web-components/base": "1.12.2",
58
+ "@spectrum-web-components/button": "1.12.2",
59
+ "@spectrum-web-components/icon": "1.12.2",
60
+ "@spectrum-web-components/icons-ui": "1.12.2",
61
+ "@spectrum-web-components/shared": "1.12.2"
62
62
  },
63
63
  "keywords": [
64
64
  "design-system",
@@ -29,21 +29,43 @@ declare const ActionButton_base: typeof ButtonBase & import("@spectrum-web-compo
29
29
  */
30
30
  export declare class ActionButton extends ActionButton_base {
31
31
  static get styles(): CSSResultArray;
32
- emphasized: boolean;
32
+ /**
33
+ * @deprecated The `emphasized` property is deprecated and will be removed
34
+ * in a future release.
35
+ */
36
+ get emphasized(): boolean;
37
+ set emphasized(value: boolean);
38
+ private _emphasized;
39
+ /**
40
+ * Hold affordance is not included in the initial 2nd-gen `swc-action-button`
41
+ * release. It is planned for a future phase. See the action-button migration
42
+ * plan for consumer options in the interim.
43
+ */
33
44
  holdAffordance: boolean;
34
45
  quiet: boolean;
35
46
  role: string;
36
47
  /**
37
48
  * Whether an Action Button with `role='button'`
38
49
  * should also be `aria-pressed='true'`
50
+ *
51
+ * @deprecated The `selected` property is deprecated and will be removed in
52
+ * a future release. Use `swc-toggle-button` for selectable button behavior.
39
53
  */
40
- selected: boolean;
54
+ get selected(): boolean;
55
+ set selected(value: boolean);
56
+ private _selected;
41
57
  /**
42
58
  * Whether to automatically manage the `selected`
43
59
  * attribute on interaction and whether `aria-pressed="false"`
44
60
  * should be used when `selected === false`
61
+ *
62
+ * @deprecated The `toggles` property is deprecated and will be removed in
63
+ * a future release. Use `swc-toggle-button` or `swc-toggle-button-group`
64
+ * for toggle button behavior.
45
65
  */
46
- toggles: boolean;
66
+ get toggles(): boolean;
67
+ set toggles(value: boolean);
68
+ private _toggles;
47
69
  /**
48
70
  * The static color variant to use for the action button.
49
71
  */
@@ -33,12 +33,12 @@ export class ActionButton extends SizedMixin(ButtonBase, {
33
33
  }) {
34
34
  constructor() {
35
35
  super();
36
- this.emphasized = false;
36
+ this._emphasized = false;
37
37
  this.holdAffordance = false;
38
38
  this.quiet = false;
39
39
  this.role = "button";
40
- this.selected = false;
41
- this.toggles = false;
40
+ this._selected = false;
41
+ this._toggles = false;
42
42
  this._value = "";
43
43
  this.onClick = () => {
44
44
  if (!this.toggles) {
@@ -61,6 +61,54 @@ export class ActionButton extends SizedMixin(ButtonBase, {
61
61
  static get styles() {
62
62
  return [...super.styles, buttonStyles, cornerTriangleStyles];
63
63
  }
64
+ get emphasized() {
65
+ return this._emphasized;
66
+ }
67
+ set emphasized(value) {
68
+ const oldValue = this._emphasized;
69
+ this._emphasized = value;
70
+ this.requestUpdate("emphasized", oldValue);
71
+ if (value && true) {
72
+ window.__swc.warn(
73
+ this,
74
+ `The "emphasized" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,
75
+ "https://opensource.adobe.com/spectrum-web-components/components/action-button/",
76
+ { level: "deprecation" }
77
+ );
78
+ }
79
+ }
80
+ get selected() {
81
+ return this._selected;
82
+ }
83
+ set selected(value) {
84
+ const oldValue = this._selected;
85
+ this._selected = value;
86
+ this.requestUpdate("selected", oldValue);
87
+ if (true) {
88
+ window.__swc.warn(
89
+ this,
90
+ `The "selected" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,
91
+ "https://opensource.adobe.com/spectrum-web-components/components/action-button/",
92
+ { level: "deprecation" }
93
+ );
94
+ }
95
+ }
96
+ get toggles() {
97
+ return this._toggles;
98
+ }
99
+ set toggles(value) {
100
+ const oldValue = this._toggles;
101
+ this._toggles = value;
102
+ this.requestUpdate("toggles", oldValue);
103
+ if (value && true) {
104
+ window.__swc.warn(
105
+ this,
106
+ `The "toggles" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,
107
+ "https://opensource.adobe.com/spectrum-web-components/components/action-button/",
108
+ { level: "deprecation" }
109
+ );
110
+ }
111
+ }
64
112
  get value() {
65
113
  return this._value || this.itemText;
66
114
  }
@@ -187,7 +235,7 @@ export class ActionButton extends SizedMixin(ButtonBase, {
187
235
  }
188
236
  __decorateClass([
189
237
  property({ type: Boolean, reflect: true })
190
- ], ActionButton.prototype, "emphasized", 2);
238
+ ], ActionButton.prototype, "emphasized", 1);
191
239
  __decorateClass([
192
240
  property({ type: Boolean, reflect: true, attribute: "hold-affordance" })
193
241
  ], ActionButton.prototype, "holdAffordance", 2);
@@ -199,10 +247,10 @@ __decorateClass([
199
247
  ], ActionButton.prototype, "role", 2);
200
248
  __decorateClass([
201
249
  property({ type: Boolean, reflect: true })
202
- ], ActionButton.prototype, "selected", 2);
250
+ ], ActionButton.prototype, "selected", 1);
203
251
  __decorateClass([
204
252
  property({ type: Boolean, reflect: true })
205
- ], ActionButton.prototype, "toggles", 2);
253
+ ], ActionButton.prototype, "toggles", 1);
206
254
  __decorateClass([
207
255
  property({ reflect: true, attribute: "static-color" })
208
256
  ], ActionButton.prototype, "staticColor", 2);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ActionButton.ts"],
4
- "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { ButtonBase } from '@spectrum-web-components/button';\nimport cornerTriangleStyles from '@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js';\n\nimport buttonStyles from './action-button.css.js';\n\nconst holdAffordanceClass = {\n xs: 'spectrum-UIIcon-CornerTriangle75',\n s: 'spectrum-UIIcon-CornerTriangle75',\n m: 'spectrum-UIIcon-CornerTriangle100',\n l: 'spectrum-UIIcon-CornerTriangle200',\n xl: 'spectrum-UIIcon-CornerTriangle300',\n};\n\nexport const LONGPRESS_DURATION = 300;\nlet LONGPRESS_TIMEOUT: ReturnType<typeof setTimeout>;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\n/**\n * @element sp-action-button\n *\n * @slot - text label of the Action Button\n * @slot icon - The icon to use for Action Button\n * @fires change - Announces a change in the `selected` property of an action button\n * @fires longpress - Synthesizes a \"longpress\" interaction that signifies a\n * `pointerdown` event that is >=300ms or a keyboard event where code is `Space` or code is `ArrowDown`\n * while `altKey===true`.\n */\nexport class ActionButton extends SizedMixin(ButtonBase, {\n validSizes: ['xs', 's', 'm', 'l', 'xl'],\n noDefaultSize: true,\n}) {\n public static override get styles(): CSSResultArray {\n return [...super.styles, buttonStyles, cornerTriangleStyles];\n }\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'hold-affordance' })\n public holdAffordance = false;\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ reflect: true })\n public override role = 'button';\n\n /**\n * Whether an Action Button with `role='button'`\n * should also be `aria-pressed='true'`\n */\n @property({ type: Boolean, reflect: true })\n public selected = false;\n\n /**\n * Whether to automatically manage the `selected`\n * attribute on interaction and whether `aria-pressed=\"false\"`\n * should be used when `selected === false`\n */\n @property({ type: Boolean, reflect: true })\n public toggles = false;\n\n /**\n * The static color variant to use for the action button.\n */\n @property({ reflect: true, attribute: 'static-color' })\n public staticColor?: 'white' | 'black';\n\n @property({ type: String })\n public get value(): string {\n return this._value || this.itemText;\n }\n public set value(value: string) {\n if (value === this._value) {\n return;\n }\n this._value = value || '';\n if (this._value) {\n this.setAttribute('value', this._value);\n } else {\n this.removeAttribute('value');\n }\n }\n private _value = '';\n\n /**\n * @private\n */\n public get itemText(): string {\n return (this.textContent || /* c8 ignore next */ '').trim();\n }\n\n constructor() {\n super();\n this.addEventListener('click', this.onClick);\n }\n\n private onClick = (): void => {\n if (!this.toggles) {\n return;\n }\n this.selected = !this.selected;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n this.selected = !this.selected;\n }\n };\n\n private handlePointerdownHoldAffordance(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.addEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.addEventListener('pointercancel', this.handlePointerupHoldAffordance);\n LONGPRESS_TIMEOUT = setTimeout(() => {\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n }\n\n private handlePointerupHoldAffordance(): void {\n clearTimeout(LONGPRESS_TIMEOUT);\n this.removeEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.removeEventListener(\n 'pointercancel',\n this.handlePointerupHoldAffordance\n );\n }\n\n /**\n * @private\n */\n protected override handleKeydown(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeydown(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.preventDefault();\n if (code === 'ArrowDown') {\n event.stopImmediatePropagation();\n }\n this.addEventListener('keyup', this.handleKeyup);\n this.active = true;\n }\n }\n\n protected override handleKeyup(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeyup(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n this.active = false;\n }\n }\n\n protected override get buttonContent(): TemplateResult[] {\n const buttonContent = super.buttonContent;\n if (this.holdAffordance) {\n buttonContent.unshift(html`\n <sp-icon-corner-triangle300\n class=\"hold-affordance ${holdAffordanceClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-corner-triangle300>\n `);\n }\n return buttonContent;\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n const isButton = this.role === 'button';\n const canBePressed =\n isButton &&\n (this.selected || this.toggles) &&\n !(\n this.hasAttribute('aria-haspopup') && this.hasAttribute('aria-expanded')\n );\n if (changes.has('selected') || changes.has('role')) {\n // When role !== 'button' then the Action Button is within\n // an Action Group that manages selects which means the\n // Action Button is a \"checkbox\" or \"radio\" and cannot\n // accept the `aria-pressed` attribute.\n if (canBePressed) {\n this.setAttribute('aria-pressed', this.selected ? 'true' : 'false');\n } else {\n // When !this.toggles the lack of \"aria-pressed\" is inconsequential.\n this.removeAttribute('aria-pressed');\n if (isButton && this.toggles && this.hasAttribute('aria-expanded')) {\n this.setAttribute('aria-expanded', this.selected ? 'true' : 'false');\n }\n }\n }\n if (changes.has('holdAffordance')) {\n if (this.holdAffordance) {\n this.addEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n } else {\n this.removeEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n this.handlePointerupHoldAffordance();\n }\n }\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n longpress: CustomEvent<LongpressEvent>;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { ButtonBase } from '@spectrum-web-components/button';\nimport cornerTriangleStyles from '@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js';\n\nimport buttonStyles from './action-button.css.js';\n\nconst holdAffordanceClass = {\n xs: 'spectrum-UIIcon-CornerTriangle75',\n s: 'spectrum-UIIcon-CornerTriangle75',\n m: 'spectrum-UIIcon-CornerTriangle100',\n l: 'spectrum-UIIcon-CornerTriangle200',\n xl: 'spectrum-UIIcon-CornerTriangle300',\n};\n\nexport const LONGPRESS_DURATION = 300;\nlet LONGPRESS_TIMEOUT: ReturnType<typeof setTimeout>;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\n/**\n * @element sp-action-button\n *\n * @slot - text label of the Action Button\n * @slot icon - The icon to use for Action Button\n * @fires change - Announces a change in the `selected` property of an action button\n * @fires longpress - Synthesizes a \"longpress\" interaction that signifies a\n * `pointerdown` event that is >=300ms or a keyboard event where code is `Space` or code is `ArrowDown`\n * while `altKey===true`.\n */\nexport class ActionButton extends SizedMixin(ButtonBase, {\n validSizes: ['xs', 's', 'm', 'l', 'xl'],\n noDefaultSize: true,\n}) {\n public static override get styles(): CSSResultArray {\n return [...super.styles, buttonStyles, cornerTriangleStyles];\n }\n\n /**\n * @deprecated The `emphasized` property is deprecated and will be removed\n * in a future release.\n */\n @property({ type: Boolean, reflect: true })\n public get emphasized(): boolean {\n return this._emphasized;\n }\n public set emphasized(value: boolean) {\n const oldValue = this._emphasized;\n this._emphasized = value;\n this.requestUpdate('emphasized', oldValue);\n if (value && window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"emphasized\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _emphasized = false;\n\n /**\n * Hold affordance is not included in the initial 2nd-gen `swc-action-button`\n * release. It is planned for a future phase. See the action-button migration\n * plan for consumer options in the interim.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hold-affordance' })\n public holdAffordance = false;\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ reflect: true })\n public override role = 'button';\n\n /**\n * Whether an Action Button with `role='button'`\n * should also be `aria-pressed='true'`\n *\n * @deprecated The `selected` property is deprecated and will be removed in\n * a future release. Use `swc-toggle-button` for selectable button behavior.\n */\n @property({ type: Boolean, reflect: true })\n public get selected(): boolean {\n return this._selected;\n }\n public set selected(value: boolean) {\n const oldValue = this._selected;\n this._selected = value;\n this.requestUpdate('selected', oldValue);\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"selected\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _selected = false;\n\n /**\n * Whether to automatically manage the `selected`\n * attribute on interaction and whether `aria-pressed=\"false\"`\n * should be used when `selected === false`\n *\n * @deprecated The `toggles` property is deprecated and will be removed in\n * a future release. Use `swc-toggle-button` or `swc-toggle-button-group`\n * for toggle button behavior.\n */\n @property({ type: Boolean, reflect: true })\n public get toggles(): boolean {\n return this._toggles;\n }\n public set toggles(value: boolean) {\n const oldValue = this._toggles;\n this._toggles = value;\n this.requestUpdate('toggles', oldValue);\n if (value && window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"toggles\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _toggles = false;\n\n /**\n * The static color variant to use for the action button.\n */\n @property({ reflect: true, attribute: 'static-color' })\n public staticColor?: 'white' | 'black';\n\n @property({ type: String })\n public get value(): string {\n return this._value || this.itemText;\n }\n public set value(value: string) {\n if (value === this._value) {\n return;\n }\n this._value = value || '';\n if (this._value) {\n this.setAttribute('value', this._value);\n } else {\n this.removeAttribute('value');\n }\n }\n private _value = '';\n\n /**\n * @private\n */\n public get itemText(): string {\n return (this.textContent || /* c8 ignore next */ '').trim();\n }\n\n constructor() {\n super();\n this.addEventListener('click', this.onClick);\n }\n\n private onClick = (): void => {\n if (!this.toggles) {\n return;\n }\n this.selected = !this.selected;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n this.selected = !this.selected;\n }\n };\n\n private handlePointerdownHoldAffordance(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.addEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.addEventListener('pointercancel', this.handlePointerupHoldAffordance);\n LONGPRESS_TIMEOUT = setTimeout(() => {\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n }\n\n private handlePointerupHoldAffordance(): void {\n clearTimeout(LONGPRESS_TIMEOUT);\n this.removeEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.removeEventListener(\n 'pointercancel',\n this.handlePointerupHoldAffordance\n );\n }\n\n /**\n * @private\n */\n protected override handleKeydown(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeydown(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.preventDefault();\n if (code === 'ArrowDown') {\n event.stopImmediatePropagation();\n }\n this.addEventListener('keyup', this.handleKeyup);\n this.active = true;\n }\n }\n\n protected override handleKeyup(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeyup(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n this.active = false;\n }\n }\n\n protected override get buttonContent(): TemplateResult[] {\n const buttonContent = super.buttonContent;\n if (this.holdAffordance) {\n buttonContent.unshift(html`\n <sp-icon-corner-triangle300\n class=\"hold-affordance ${holdAffordanceClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-corner-triangle300>\n `);\n }\n return buttonContent;\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n const isButton = this.role === 'button';\n const canBePressed =\n isButton &&\n (this.selected || this.toggles) &&\n !(\n this.hasAttribute('aria-haspopup') && this.hasAttribute('aria-expanded')\n );\n if (changes.has('selected') || changes.has('role')) {\n // When role !== 'button' then the Action Button is within\n // an Action Group that manages selects which means the\n // Action Button is a \"checkbox\" or \"radio\" and cannot\n // accept the `aria-pressed` attribute.\n if (canBePressed) {\n this.setAttribute('aria-pressed', this.selected ? 'true' : 'false');\n } else {\n // When !this.toggles the lack of \"aria-pressed\" is inconsequential.\n this.removeAttribute('aria-pressed');\n if (isButton && this.toggles && this.hasAttribute('aria-expanded')) {\n this.setAttribute('aria-expanded', this.selected ? 'true' : 'false');\n }\n }\n }\n if (changes.has('holdAffordance')) {\n if (this.holdAffordance) {\n this.addEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n } else {\n this.removeEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n this.handlePointerupHoldAffordance();\n }\n }\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n longpress: CustomEvent<LongpressEvent>;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
- "use strict";var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var o=(n,i,e,t)=>{for(var r=t>1?void 0:t?p(i,e):i,l=n.length-1,a;l>=0;l--)(a=n[l])&&(r=(t?a(i,e,r):a(r))||r);return t&&r&&u(i,e,r),r};import{html as c,SizedMixin as h}from"@spectrum-web-components/base";import{property as s}from"@spectrum-web-components/base/src/decorators.js";import{ButtonBase as f}from"@spectrum-web-components/button";import v from"@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js";import b from"./action-button.css.js";const m={xs:"spectrum-UIIcon-CornerTriangle75",s:"spectrum-UIIcon-CornerTriangle75",m:"spectrum-UIIcon-CornerTriangle100",l:"spectrum-UIIcon-CornerTriangle200",xl:"spectrum-UIIcon-CornerTriangle300"};export const LONGPRESS_DURATION=300;let d;export class ActionButton extends h(f,{validSizes:["xs","s","m","l","xl"],noDefaultSize:!0}){constructor(){super();this.emphasized=!1;this.holdAffordance=!1;this.quiet=!1;this.role="button";this.selected=!1;this.toggles=!1;this._value="";this.onClick=()=>{if(!this.toggles)return;this.selected=!this.selected,this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0}))||(this.selected=!this.selected)};this.addEventListener("click",this.onClick)}static get styles(){return[...super.styles,b,v]}get value(){return this._value||this.itemText}set value(e){e!==this._value&&(this._value=e||"",this._value?this.setAttribute("value",this._value):this.removeAttribute("value"))}get itemText(){return(this.textContent||"").trim()}handlePointerdownHoldAffordance(e){e.button===0&&(this.addEventListener("pointerup",this.handlePointerupHoldAffordance),this.addEventListener("pointercancel",this.handlePointerupHoldAffordance),d=setTimeout(()=>{this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"pointer"}}))},LONGPRESS_DURATION))}handlePointerupHoldAffordance(){clearTimeout(d),this.removeEventListener("pointerup",this.handlePointerupHoldAffordance),this.removeEventListener("pointercancel",this.handlePointerupHoldAffordance)}handleKeydown(e){if(!this.holdAffordance)return super.handleKeydown(e);const{code:t,altKey:r}=e;(t==="Space"||r&&t==="ArrowDown")&&(e.preventDefault(),t==="ArrowDown"&&e.stopImmediatePropagation(),this.addEventListener("keyup",this.handleKeyup),this.active=!0)}handleKeyup(e){if(!this.holdAffordance)return super.handleKeyup(e);const{code:t,altKey:r}=e;(t==="Space"||r&&t==="ArrowDown")&&(e.stopPropagation(),this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"keyboard"}})),this.active=!1)}get buttonContent(){const e=super.buttonContent;return this.holdAffordance&&e.unshift(c`
1
+ "use strict";var p=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var s=(n,i,e,t)=>{for(var r=t>1?void 0:t?c(i,e):i,a=n.length-1,l;a>=0;a--)(l=n[a])&&(r=(t?l(i,e,r):l(r))||r);return t&&r&&p(i,e,r),r};import{html as u,SizedMixin as h}from"@spectrum-web-components/base";import{property as o}from"@spectrum-web-components/base/src/decorators.js";import{ButtonBase as f}from"@spectrum-web-components/button";import b from"@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js";import m from"./action-button.css.js";const v={xs:"spectrum-UIIcon-CornerTriangle75",s:"spectrum-UIIcon-CornerTriangle75",m:"spectrum-UIIcon-CornerTriangle100",l:"spectrum-UIIcon-CornerTriangle200",xl:"spectrum-UIIcon-CornerTriangle300"};export const LONGPRESS_DURATION=300;let d;export class ActionButton extends h(f,{validSizes:["xs","s","m","l","xl"],noDefaultSize:!0}){constructor(){super();this._emphasized=!1;this.holdAffordance=!1;this.quiet=!1;this.role="button";this._selected=!1;this._toggles=!1;this._value="";this.onClick=()=>{if(!this.toggles)return;this.selected=!this.selected,this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0}))||(this.selected=!this.selected)};this.addEventListener("click",this.onClick)}static get styles(){return[...super.styles,m,b]}get emphasized(){return this._emphasized}set emphasized(e){const t=this._emphasized;this._emphasized=e,this.requestUpdate("emphasized",t)}get selected(){return this._selected}set selected(e){const t=this._selected;this._selected=e,this.requestUpdate("selected",t)}get toggles(){return this._toggles}set toggles(e){const t=this._toggles;this._toggles=e,this.requestUpdate("toggles",t)}get value(){return this._value||this.itemText}set value(e){e!==this._value&&(this._value=e||"",this._value?this.setAttribute("value",this._value):this.removeAttribute("value"))}get itemText(){return(this.textContent||"").trim()}handlePointerdownHoldAffordance(e){e.button===0&&(this.addEventListener("pointerup",this.handlePointerupHoldAffordance),this.addEventListener("pointercancel",this.handlePointerupHoldAffordance),d=setTimeout(()=>{this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"pointer"}}))},LONGPRESS_DURATION))}handlePointerupHoldAffordance(){clearTimeout(d),this.removeEventListener("pointerup",this.handlePointerupHoldAffordance),this.removeEventListener("pointercancel",this.handlePointerupHoldAffordance)}handleKeydown(e){if(!this.holdAffordance)return super.handleKeydown(e);const{code:t,altKey:r}=e;(t==="Space"||r&&t==="ArrowDown")&&(e.preventDefault(),t==="ArrowDown"&&e.stopImmediatePropagation(),this.addEventListener("keyup",this.handleKeyup),this.active=!0)}handleKeyup(e){if(!this.holdAffordance)return super.handleKeyup(e);const{code:t,altKey:r}=e;(t==="Space"||r&&t==="ArrowDown")&&(e.stopPropagation(),this.dispatchEvent(new CustomEvent("longpress",{bubbles:!0,composed:!0,detail:{source:"keyboard"}})),this.active=!1)}get buttonContent(){const e=super.buttonContent;return this.holdAffordance&&e.unshift(u`
2
2
  <sp-icon-corner-triangle300
3
- class="hold-affordance ${m[this.size]}"
3
+ class="hold-affordance ${v[this.size]}"
4
4
  ></sp-icon-corner-triangle300>
5
- `),e}updated(e){super.updated(e);const t=this.role==="button",r=t&&(this.selected||this.toggles)&&!(this.hasAttribute("aria-haspopup")&&this.hasAttribute("aria-expanded"));(e.has("selected")||e.has("role"))&&(r?this.setAttribute("aria-pressed",this.selected?"true":"false"):(this.removeAttribute("aria-pressed"),t&&this.toggles&&this.hasAttribute("aria-expanded")&&this.setAttribute("aria-expanded",this.selected?"true":"false"))),e.has("holdAffordance")&&(this.holdAffordance?this.addEventListener("pointerdown",this.handlePointerdownHoldAffordance):(this.removeEventListener("pointerdown",this.handlePointerdownHoldAffordance),this.handlePointerupHoldAffordance()))}}o([s({type:Boolean,reflect:!0})],ActionButton.prototype,"emphasized",2),o([s({type:Boolean,reflect:!0,attribute:"hold-affordance"})],ActionButton.prototype,"holdAffordance",2),o([s({type:Boolean,reflect:!0})],ActionButton.prototype,"quiet",2),o([s({reflect:!0})],ActionButton.prototype,"role",2),o([s({type:Boolean,reflect:!0})],ActionButton.prototype,"selected",2),o([s({type:Boolean,reflect:!0})],ActionButton.prototype,"toggles",2),o([s({reflect:!0,attribute:"static-color"})],ActionButton.prototype,"staticColor",2),o([s({type:String})],ActionButton.prototype,"value",1);
5
+ `),e}updated(e){super.updated(e);const t=this.role==="button",r=t&&(this.selected||this.toggles)&&!(this.hasAttribute("aria-haspopup")&&this.hasAttribute("aria-expanded"));(e.has("selected")||e.has("role"))&&(r?this.setAttribute("aria-pressed",this.selected?"true":"false"):(this.removeAttribute("aria-pressed"),t&&this.toggles&&this.hasAttribute("aria-expanded")&&this.setAttribute("aria-expanded",this.selected?"true":"false"))),e.has("holdAffordance")&&(this.holdAffordance?this.addEventListener("pointerdown",this.handlePointerdownHoldAffordance):(this.removeEventListener("pointerdown",this.handlePointerdownHoldAffordance),this.handlePointerupHoldAffordance()))}}s([o({type:Boolean,reflect:!0})],ActionButton.prototype,"emphasized",1),s([o({type:Boolean,reflect:!0,attribute:"hold-affordance"})],ActionButton.prototype,"holdAffordance",2),s([o({type:Boolean,reflect:!0})],ActionButton.prototype,"quiet",2),s([o({reflect:!0})],ActionButton.prototype,"role",2),s([o({type:Boolean,reflect:!0})],ActionButton.prototype,"selected",1),s([o({type:Boolean,reflect:!0})],ActionButton.prototype,"toggles",1),s([o({reflect:!0,attribute:"static-color"})],ActionButton.prototype,"staticColor",2),s([o({type:String})],ActionButton.prototype,"value",1);
6
6
  //# sourceMappingURL=ActionButton.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ActionButton.ts"],
4
- "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { ButtonBase } from '@spectrum-web-components/button';\nimport cornerTriangleStyles from '@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js';\n\nimport buttonStyles from './action-button.css.js';\n\nconst holdAffordanceClass = {\n xs: 'spectrum-UIIcon-CornerTriangle75',\n s: 'spectrum-UIIcon-CornerTriangle75',\n m: 'spectrum-UIIcon-CornerTriangle100',\n l: 'spectrum-UIIcon-CornerTriangle200',\n xl: 'spectrum-UIIcon-CornerTriangle300',\n};\n\nexport const LONGPRESS_DURATION = 300;\nlet LONGPRESS_TIMEOUT: ReturnType<typeof setTimeout>;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\n/**\n * @element sp-action-button\n *\n * @slot - text label of the Action Button\n * @slot icon - The icon to use for Action Button\n * @fires change - Announces a change in the `selected` property of an action button\n * @fires longpress - Synthesizes a \"longpress\" interaction that signifies a\n * `pointerdown` event that is >=300ms or a keyboard event where code is `Space` or code is `ArrowDown`\n * while `altKey===true`.\n */\nexport class ActionButton extends SizedMixin(ButtonBase, {\n validSizes: ['xs', 's', 'm', 'l', 'xl'],\n noDefaultSize: true,\n}) {\n public static override get styles(): CSSResultArray {\n return [...super.styles, buttonStyles, cornerTriangleStyles];\n }\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'hold-affordance' })\n public holdAffordance = false;\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ reflect: true })\n public override role = 'button';\n\n /**\n * Whether an Action Button with `role='button'`\n * should also be `aria-pressed='true'`\n */\n @property({ type: Boolean, reflect: true })\n public selected = false;\n\n /**\n * Whether to automatically manage the `selected`\n * attribute on interaction and whether `aria-pressed=\"false\"`\n * should be used when `selected === false`\n */\n @property({ type: Boolean, reflect: true })\n public toggles = false;\n\n /**\n * The static color variant to use for the action button.\n */\n @property({ reflect: true, attribute: 'static-color' })\n public staticColor?: 'white' | 'black';\n\n @property({ type: String })\n public get value(): string {\n return this._value || this.itemText;\n }\n public set value(value: string) {\n if (value === this._value) {\n return;\n }\n this._value = value || '';\n if (this._value) {\n this.setAttribute('value', this._value);\n } else {\n this.removeAttribute('value');\n }\n }\n private _value = '';\n\n /**\n * @private\n */\n public get itemText(): string {\n return (this.textContent || /* c8 ignore next */ '').trim();\n }\n\n constructor() {\n super();\n this.addEventListener('click', this.onClick);\n }\n\n private onClick = (): void => {\n if (!this.toggles) {\n return;\n }\n this.selected = !this.selected;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n this.selected = !this.selected;\n }\n };\n\n private handlePointerdownHoldAffordance(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.addEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.addEventListener('pointercancel', this.handlePointerupHoldAffordance);\n LONGPRESS_TIMEOUT = setTimeout(() => {\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n }\n\n private handlePointerupHoldAffordance(): void {\n clearTimeout(LONGPRESS_TIMEOUT);\n this.removeEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.removeEventListener(\n 'pointercancel',\n this.handlePointerupHoldAffordance\n );\n }\n\n /**\n * @private\n */\n protected override handleKeydown(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeydown(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.preventDefault();\n if (code === 'ArrowDown') {\n event.stopImmediatePropagation();\n }\n this.addEventListener('keyup', this.handleKeyup);\n this.active = true;\n }\n }\n\n protected override handleKeyup(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeyup(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n this.active = false;\n }\n }\n\n protected override get buttonContent(): TemplateResult[] {\n const buttonContent = super.buttonContent;\n if (this.holdAffordance) {\n buttonContent.unshift(html`\n <sp-icon-corner-triangle300\n class=\"hold-affordance ${holdAffordanceClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-corner-triangle300>\n `);\n }\n return buttonContent;\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n const isButton = this.role === 'button';\n const canBePressed =\n isButton &&\n (this.selected || this.toggles) &&\n !(\n this.hasAttribute('aria-haspopup') && this.hasAttribute('aria-expanded')\n );\n if (changes.has('selected') || changes.has('role')) {\n // When role !== 'button' then the Action Button is within\n // an Action Group that manages selects which means the\n // Action Button is a \"checkbox\" or \"radio\" and cannot\n // accept the `aria-pressed` attribute.\n if (canBePressed) {\n this.setAttribute('aria-pressed', this.selected ? 'true' : 'false');\n } else {\n // When !this.toggles the lack of \"aria-pressed\" is inconsequential.\n this.removeAttribute('aria-pressed');\n if (isButton && this.toggles && this.hasAttribute('aria-expanded')) {\n this.setAttribute('aria-expanded', this.selected ? 'true' : 'false');\n }\n }\n }\n if (changes.has('holdAffordance')) {\n if (this.holdAffordance) {\n this.addEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n } else {\n this.removeEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n this.handlePointerupHoldAffordance();\n }\n }\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n longpress: CustomEvent<LongpressEvent>;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["html", "SizedMixin", "property", "ButtonBase", "cornerTriangleStyles", "buttonStyles", "holdAffordanceClass", "LONGPRESS_TIMEOUT", "value", "event", "code", "altKey", "buttonContent", "changes", "isButton", "canBePressed", "__decorateClass"]
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { ButtonBase } from '@spectrum-web-components/button';\nimport cornerTriangleStyles from '@spectrum-web-components/icon/src/spectrum-icon-corner-triangle.css.js';\n\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-corner-triangle300.js';\n\nimport buttonStyles from './action-button.css.js';\n\nconst holdAffordanceClass = {\n xs: 'spectrum-UIIcon-CornerTriangle75',\n s: 'spectrum-UIIcon-CornerTriangle75',\n m: 'spectrum-UIIcon-CornerTriangle100',\n l: 'spectrum-UIIcon-CornerTriangle200',\n xl: 'spectrum-UIIcon-CornerTriangle300',\n};\n\nexport const LONGPRESS_DURATION = 300;\nlet LONGPRESS_TIMEOUT: ReturnType<typeof setTimeout>;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\n/**\n * @element sp-action-button\n *\n * @slot - text label of the Action Button\n * @slot icon - The icon to use for Action Button\n * @fires change - Announces a change in the `selected` property of an action button\n * @fires longpress - Synthesizes a \"longpress\" interaction that signifies a\n * `pointerdown` event that is >=300ms or a keyboard event where code is `Space` or code is `ArrowDown`\n * while `altKey===true`.\n */\nexport class ActionButton extends SizedMixin(ButtonBase, {\n validSizes: ['xs', 's', 'm', 'l', 'xl'],\n noDefaultSize: true,\n}) {\n public static override get styles(): CSSResultArray {\n return [...super.styles, buttonStyles, cornerTriangleStyles];\n }\n\n /**\n * @deprecated The `emphasized` property is deprecated and will be removed\n * in a future release.\n */\n @property({ type: Boolean, reflect: true })\n public get emphasized(): boolean {\n return this._emphasized;\n }\n public set emphasized(value: boolean) {\n const oldValue = this._emphasized;\n this._emphasized = value;\n this.requestUpdate('emphasized', oldValue);\n if (value && window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"emphasized\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _emphasized = false;\n\n /**\n * Hold affordance is not included in the initial 2nd-gen `swc-action-button`\n * release. It is planned for a future phase. See the action-button migration\n * plan for consumer options in the interim.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hold-affordance' })\n public holdAffordance = false;\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ reflect: true })\n public override role = 'button';\n\n /**\n * Whether an Action Button with `role='button'`\n * should also be `aria-pressed='true'`\n *\n * @deprecated The `selected` property is deprecated and will be removed in\n * a future release. Use `swc-toggle-button` for selectable button behavior.\n */\n @property({ type: Boolean, reflect: true })\n public get selected(): boolean {\n return this._selected;\n }\n public set selected(value: boolean) {\n const oldValue = this._selected;\n this._selected = value;\n this.requestUpdate('selected', oldValue);\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"selected\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _selected = false;\n\n /**\n * Whether to automatically manage the `selected`\n * attribute on interaction and whether `aria-pressed=\"false\"`\n * should be used when `selected === false`\n *\n * @deprecated The `toggles` property is deprecated and will be removed in\n * a future release. Use `swc-toggle-button` or `swc-toggle-button-group`\n * for toggle button behavior.\n */\n @property({ type: Boolean, reflect: true })\n public get toggles(): boolean {\n return this._toggles;\n }\n public set toggles(value: boolean) {\n const oldValue = this._toggles;\n this._toggles = value;\n this.requestUpdate('toggles', oldValue);\n if (value && window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `The \"toggles\" attribute on <${this.localName}> is deprecated and will be removed in a future release.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/action-button/',\n { level: 'deprecation' }\n );\n }\n }\n private _toggles = false;\n\n /**\n * The static color variant to use for the action button.\n */\n @property({ reflect: true, attribute: 'static-color' })\n public staticColor?: 'white' | 'black';\n\n @property({ type: String })\n public get value(): string {\n return this._value || this.itemText;\n }\n public set value(value: string) {\n if (value === this._value) {\n return;\n }\n this._value = value || '';\n if (this._value) {\n this.setAttribute('value', this._value);\n } else {\n this.removeAttribute('value');\n }\n }\n private _value = '';\n\n /**\n * @private\n */\n public get itemText(): string {\n return (this.textContent || /* c8 ignore next */ '').trim();\n }\n\n constructor() {\n super();\n this.addEventListener('click', this.onClick);\n }\n\n private onClick = (): void => {\n if (!this.toggles) {\n return;\n }\n this.selected = !this.selected;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n this.selected = !this.selected;\n }\n };\n\n private handlePointerdownHoldAffordance(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.addEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.addEventListener('pointercancel', this.handlePointerupHoldAffordance);\n LONGPRESS_TIMEOUT = setTimeout(() => {\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n }\n\n private handlePointerupHoldAffordance(): void {\n clearTimeout(LONGPRESS_TIMEOUT);\n this.removeEventListener('pointerup', this.handlePointerupHoldAffordance);\n this.removeEventListener(\n 'pointercancel',\n this.handlePointerupHoldAffordance\n );\n }\n\n /**\n * @private\n */\n protected override handleKeydown(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeydown(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.preventDefault();\n if (code === 'ArrowDown') {\n event.stopImmediatePropagation();\n }\n this.addEventListener('keyup', this.handleKeyup);\n this.active = true;\n }\n }\n\n protected override handleKeyup(event: KeyboardEvent): void {\n if (!this.holdAffordance) {\n return super.handleKeyup(event);\n }\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n this.active = false;\n }\n }\n\n protected override get buttonContent(): TemplateResult[] {\n const buttonContent = super.buttonContent;\n if (this.holdAffordance) {\n buttonContent.unshift(html`\n <sp-icon-corner-triangle300\n class=\"hold-affordance ${holdAffordanceClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-corner-triangle300>\n `);\n }\n return buttonContent;\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n const isButton = this.role === 'button';\n const canBePressed =\n isButton &&\n (this.selected || this.toggles) &&\n !(\n this.hasAttribute('aria-haspopup') && this.hasAttribute('aria-expanded')\n );\n if (changes.has('selected') || changes.has('role')) {\n // When role !== 'button' then the Action Button is within\n // an Action Group that manages selects which means the\n // Action Button is a \"checkbox\" or \"radio\" and cannot\n // accept the `aria-pressed` attribute.\n if (canBePressed) {\n this.setAttribute('aria-pressed', this.selected ? 'true' : 'false');\n } else {\n // When !this.toggles the lack of \"aria-pressed\" is inconsequential.\n this.removeAttribute('aria-pressed');\n if (isButton && this.toggles && this.hasAttribute('aria-expanded')) {\n this.setAttribute('aria-expanded', this.selected ? 'true' : 'false');\n }\n }\n }\n if (changes.has('holdAffordance')) {\n if (this.holdAffordance) {\n this.addEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n } else {\n this.removeEventListener(\n 'pointerdown',\n this.handlePointerdownHoldAffordance\n );\n this.handlePointerupHoldAffordance();\n }\n }\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n longpress: CustomEvent<LongpressEvent>;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "SizedMixin", "property", "ButtonBase", "cornerTriangleStyles", "buttonStyles", "holdAffordanceClass", "LONGPRESS_TIMEOUT", "value", "oldValue", "event", "code", "altKey", "buttonContent", "changes", "isButton", "canBePressed", "__decorateClass"]
7
7
  }