@spectrum-web-components/slider 0.14.4 → 0.15.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.
@@ -1140,7 +1140,7 @@
1140
1140
  "type": {
1141
1141
  "text": "number"
1142
1142
  },
1143
- "default": "10",
1143
+ "description": "By default, the value of a Slider Handle will be halfway between its\n`min` and `max` values, or the `min` value when `max` is less than `min`.",
1144
1144
  "attribute": "value",
1145
1145
  "inheritedFrom": {
1146
1146
  "name": "SliderHandle",
@@ -1416,7 +1416,7 @@
1416
1416
  "type": {
1417
1417
  "text": "number"
1418
1418
  },
1419
- "default": "10",
1419
+ "description": "By default, the value of a Slider Handle will be halfway between its\n`min` and `max` values, or the `min` value when `max` is less than `min`.",
1420
1420
  "fieldName": "value",
1421
1421
  "inheritedFrom": {
1422
1422
  "name": "SliderHandle",
@@ -1599,7 +1599,7 @@
1599
1599
  "type": {
1600
1600
  "text": "number"
1601
1601
  },
1602
- "default": "10",
1602
+ "description": "By default, the value of a Slider Handle will be halfway between its\n`min` and `max` values, or the `min` value when `max` is less than `min`.",
1603
1603
  "attribute": "value"
1604
1604
  },
1605
1605
  {
@@ -1764,7 +1764,7 @@
1764
1764
  "type": {
1765
1765
  "text": "number"
1766
1766
  },
1767
- "default": "10",
1767
+ "description": "By default, the value of a Slider Handle will be halfway between its\n`min` and `max` values, or the `min` value when `max` is less than `min`.",
1768
1768
  "fieldName": "value"
1769
1769
  },
1770
1770
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/slider",
3
- "version": "0.14.4",
3
+ "version": "0.15.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -76,10 +76,10 @@
76
76
  "@internationalized/number": "^3.1.0",
77
77
  "@lit-labs/observers": "^1.0.1",
78
78
  "@spectrum-web-components/base": "^0.7.0",
79
- "@spectrum-web-components/field-label": "^0.9.1",
80
- "@spectrum-web-components/number-field": "^0.5.4",
79
+ "@spectrum-web-components/field-label": "^0.10.0",
80
+ "@spectrum-web-components/number-field": "^0.5.5",
81
81
  "@spectrum-web-components/shared": "^0.15.1",
82
- "@spectrum-web-components/theme": "^0.14.4",
82
+ "@spectrum-web-components/theme": "^0.14.5",
83
83
  "tslib": "^2.0.0"
84
84
  },
85
85
  "devDependencies": {
@@ -92,5 +92,5 @@
92
92
  "./**/*.dev.js",
93
93
  "./sync/sp-*.js"
94
94
  ],
95
- "gitHead": "96da2eef637c5d50dd04a75d40a46353116787b4"
95
+ "gitHead": "31d083d1eb61a1382335030c190c85d85f41e15d"
96
96
  }
@@ -29,6 +29,10 @@ export declare class SliderHandle extends Focusable {
29
29
  get handleName(): string;
30
30
  get focusElement(): HTMLElement;
31
31
  _forcedUnit: string;
32
+ /**
33
+ * By default, the value of a Slider Handle will be halfway between its
34
+ * `min` and `max` values, or the `min` value when `max` is less than `min`.
35
+ */
32
36
  value: number;
33
37
  dragging: boolean;
34
38
  highlight: boolean;
@@ -48,7 +48,6 @@ export class SliderHandle extends Focusable {
48
48
  constructor() {
49
49
  super(...arguments);
50
50
  this._forcedUnit = "";
51
- this.value = 10;
52
51
  this.dragging = false;
53
52
  this.highlight = false;
54
53
  this.name = "";
@@ -68,6 +67,14 @@ export class SliderHandle extends Focusable {
68
67
  }
69
68
  update(changes) {
70
69
  var _a;
70
+ if (!this.hasUpdated) {
71
+ const { max, min } = this;
72
+ if (this.value == null) {
73
+ if (!isNaN(max) && !isNaN(min)) {
74
+ this.value = max < min ? min : min + (max - min) / 2;
75
+ }
76
+ }
77
+ }
71
78
  if (changes.has("formatOptions") || changes.has("resolvedLanguage")) {
72
79
  delete this._numberFormatCache;
73
80
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["SliderHandle.ts"],
4
- "sourcesContent": ["/*\nCopyright 2021 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 { PropertyValues } from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { LanguageResolutionController } from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport {\n NumberFormatOptions,\n NumberFormatter,\n} from '@internationalized/number';\n\nexport type HandleMin = number | 'previous';\nexport type HandleMax = number | 'next';\n\nexport type HandleValues = {\n name: string;\n value: number;\n}[];\n\nexport interface Controller {\n inputForHandle(handle: SliderHandle): HTMLInputElement | undefined;\n requestUpdate(): void;\n setValueFromHandle(handle: SliderHandle): void;\n handleHasChanged(handle: SliderHandle): void;\n}\n\nexport type SliderNormalization = {\n toNormalized: (value: number, min: number, max: number) => number;\n fromNormalized: (value: number, min: number, max: number) => number;\n};\n\nexport const defaultNormalization: SliderNormalization = {\n toNormalized(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n },\n fromNormalized(value: number, min: number, max: number) {\n return value * (max - min) + min;\n },\n};\n\nconst MinConverter = {\n fromAttribute: (value: string): number | 'previous' => {\n if (value === 'previous') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'previous' | number): string => {\n return value.toString();\n },\n};\n\nconst MaxConverter = {\n fromAttribute: (value: string): number | 'next' => {\n if (value === 'next') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'next' | number): string => {\n return value.toString();\n },\n};\n\n/**\n * @element sp-slider-handle\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 SliderHandle extends Focusable {\n public handleController?: Controller;\n\n public get handleName(): string {\n return this.name;\n }\n\n public override get focusElement(): HTMLElement {\n /* c8 ignore next */\n return this.handleController?.inputForHandle(this) ?? this;\n }\n\n _forcedUnit = '';\n\n @property({ type: Number })\n value = 10;\n\n @property({ type: Boolean, reflect: true })\n public dragging = false;\n\n @property({ type: Boolean })\n public highlight = false;\n\n @property({ type: String })\n public name = '';\n\n @property({ reflect: true, converter: MinConverter })\n public min?: number | 'previous';\n\n @property({ reflect: true, converter: MaxConverter })\n public max?: number | 'next';\n\n @property({ type: Number, reflect: true })\n public step?: number;\n\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions?: NumberFormatOptions;\n\n @property({ type: String })\n public label = '';\n\n @property({ attribute: false })\n public getAriaHandleText: (\n value: number,\n numberFormat: NumberFormatter\n ) => string = (value, numberFormat) => {\n return numberFormat.format(value);\n };\n\n private languageResolver = new LanguageResolutionController(this);\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n delete this._numberFormatCache;\n }\n if (changes.has('value')) {\n const oldValue = changes.get('value');\n if (oldValue != null) {\n this.updateComplete.then(() => {\n this.handleController?.setValueFromHandle(this);\n });\n }\n }\n this.handleController?.handleHasChanged(this);\n super.update(changes);\n }\n\n protected override firstUpdated(\n changedProperties: PropertyValues<this>\n ): void {\n super.firstUpdated(changedProperties);\n this.dispatchEvent(new CustomEvent('sp-slider-handle-ready'));\n }\n\n @property({ attribute: false })\n public normalization: SliderNormalization = defaultNormalization;\n\n public dispatchInputEvent(): void {\n const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n\n this.dispatchEvent(inputEvent);\n }\n\n protected _numberFormatCache:\n | { numberFormat: NumberFormatter; language: string }\n | undefined;\n protected getNumberFormat(): NumberFormatter {\n /* c8 ignore next */\n if (\n !this._numberFormatCache ||\n this.languageResolver.language !== this._numberFormatCache.language\n ) {\n let numberFormatter: NumberFormatter;\n try {\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n // numberFormatter.format(1);\n } catch (error) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions || {};\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n }\n this._numberFormatCache = {\n language: this.languageResolver.language,\n numberFormat: numberFormatter,\n };\n }\n /* c8 ignore next */\n return this._numberFormatCache?.numberFormat;\n }\n\n public get numberFormat(): NumberFormatter | undefined {\n if (!this.formatOptions) return;\n return this.getNumberFormat();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2021 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 { PropertyValues } from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { LanguageResolutionController } from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport {\n NumberFormatOptions,\n NumberFormatter,\n} from '@internationalized/number';\n\nexport type HandleMin = number | 'previous';\nexport type HandleMax = number | 'next';\n\nexport type HandleValues = {\n name: string;\n value: number;\n}[];\n\nexport interface Controller {\n inputForHandle(handle: SliderHandle): HTMLInputElement | undefined;\n requestUpdate(): void;\n setValueFromHandle(handle: SliderHandle): void;\n handleHasChanged(handle: SliderHandle): void;\n}\n\nexport type SliderNormalization = {\n toNormalized: (value: number, min: number, max: number) => number;\n fromNormalized: (value: number, min: number, max: number) => number;\n};\n\nexport const defaultNormalization: SliderNormalization = {\n toNormalized(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n },\n fromNormalized(value: number, min: number, max: number) {\n return value * (max - min) + min;\n },\n};\n\nconst MinConverter = {\n fromAttribute: (value: string): number | 'previous' => {\n if (value === 'previous') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'previous' | number): string => {\n return value.toString();\n },\n};\n\nconst MaxConverter = {\n fromAttribute: (value: string): number | 'next' => {\n if (value === 'next') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'next' | number): string => {\n return value.toString();\n },\n};\n\n/**\n * @element sp-slider-handle\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 SliderHandle extends Focusable {\n public handleController?: Controller;\n\n public get handleName(): string {\n return this.name;\n }\n\n public override get focusElement(): HTMLElement {\n /* c8 ignore next */\n return this.handleController?.inputForHandle(this) ?? this;\n }\n\n _forcedUnit = '';\n\n /**\n * By default, the value of a Slider Handle will be halfway between its\n * `min` and `max` values, or the `min` value when `max` is less than `min`.\n */\n @property({ type: Number })\n value!: number;\n\n @property({ type: Boolean, reflect: true })\n public dragging = false;\n\n @property({ type: Boolean })\n public highlight = false;\n\n @property({ type: String })\n public override name = '';\n\n @property({ reflect: true, converter: MinConverter })\n public min?: number | 'previous';\n\n @property({ reflect: true, converter: MaxConverter })\n public max?: number | 'next';\n\n @property({ type: Number, reflect: true })\n public step?: number;\n\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions?: NumberFormatOptions;\n\n @property({ type: String })\n public label = '';\n\n @property({ attribute: false })\n public getAriaHandleText: (\n value: number,\n numberFormat: NumberFormatter\n ) => string = (value, numberFormat) => {\n return numberFormat.format(value);\n };\n\n private languageResolver = new LanguageResolutionController(this);\n\n protected override update(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const { max, min } = this as { max: number; min: number };\n if (this.value == null) {\n if (!isNaN(max) && !isNaN(min)) {\n this.value = max < min ? min : min + (max - min) / 2;\n }\n }\n }\n \n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n delete this._numberFormatCache;\n }\n if (changes.has('value')) {\n const oldValue = changes.get('value');\n if (oldValue != null) {\n this.updateComplete.then(() => {\n this.handleController?.setValueFromHandle(this);\n });\n }\n }\n this.handleController?.handleHasChanged(this);\n super.update(changes);\n }\n\n protected override firstUpdated(changedProperties: PropertyValues<this>): void {\n super.firstUpdated(changedProperties);\n this.dispatchEvent(new CustomEvent('sp-slider-handle-ready'));\n }\n\n @property({ attribute: false })\n public normalization: SliderNormalization = defaultNormalization;\n\n public dispatchInputEvent(): void {\n const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n\n this.dispatchEvent(inputEvent);\n }\n\n protected _numberFormatCache:\n | { numberFormat: NumberFormatter; language: string }\n | undefined;\n protected getNumberFormat(): NumberFormatter {\n /* c8 ignore next */\n if (\n !this._numberFormatCache ||\n this.languageResolver.language !== this._numberFormatCache.language\n ) {\n let numberFormatter: NumberFormatter;\n try {\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n // numberFormatter.format(1);\n } catch (error) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions || {};\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n }\n this._numberFormatCache = {\n language: this.languageResolver.language,\n numberFormat: numberFormatter,\n };\n }\n /* c8 ignore next */\n return this._numberFormatCache?.numberFormat;\n }\n\n public get numberFormat(): NumberFormatter | undefined {\n if (!this.formatOptions) return;\n return this.getNumberFormat();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var n=(t,o,e,r)=>{for(var u=r>1?void 0:r?b(o,e):o,i=t.length-1,m;i>=0;i--)(m=t[i])&&(u=(r?m(o,e,u):m(u))||u);return r&&u&&p(o,e,u),u};import{property as a}from"@spectrum-web-components/base/src/decorators.js";import{Focusable as d}from"@spectrum-web-components/shared/src/focusable.js";import{LanguageResolutionController as h}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{NumberFormatter as l}from"@internationalized/number";export const defaultNormalization={toNormalized(t,o,e){return(t-o)/(e-o)},fromNormalized(t,o,e){return t*(e-o)+o}};const g={fromAttribute:t=>t==="previous"?t:parseFloat(t),toAttribute:t=>t.toString()},c={fromAttribute:t=>t==="next"?t:parseFloat(t),toAttribute:t=>t.toString()};export class SliderHandle extends d{constructor(){super(...arguments);this._forcedUnit="";this.value=10;this.dragging=!1;this.highlight=!1;this.name="";this.label="";this.getAriaHandleText=(e,r)=>r.format(e);this.languageResolver=new h(this);this.normalization=defaultNormalization}get handleName(){return this.name}get focusElement(){var e,r;return(r=(e=this.handleController)==null?void 0:e.inputForHandle(this))!=null?r:this}update(e){var r;(e.has("formatOptions")||e.has("resolvedLanguage"))&&delete this._numberFormatCache,e.has("value")&&e.get("value")!=null&&this.updateComplete.then(()=>{var i;(i=this.handleController)==null||i.setValueFromHandle(this)}),(r=this.handleController)==null||r.handleHasChanged(this),super.update(e)}firstUpdated(e){super.firstUpdated(e),this.dispatchEvent(new CustomEvent("sp-slider-handle-ready"))}dispatchInputEvent(){const e=new Event("input",{bubbles:!0,composed:!0});this.dispatchEvent(e)}getNumberFormat(){var e;if(!this._numberFormatCache||this.languageResolver.language!==this._numberFormatCache.language){let r;try{r=new l(this.languageResolver.language,this.formatOptions),this._forcedUnit=""}catch(u){const{style:i,unit:m,unitDisplay:f,...s}=this.formatOptions||{};i==="unit"&&(this._forcedUnit=m),r=new l(this.languageResolver.language,s)}this._numberFormatCache={language:this.languageResolver.language,numberFormat:r}}return(e=this._numberFormatCache)==null?void 0:e.numberFormat}get numberFormat(){if(!!this.formatOptions)return this.getNumberFormat()}}n([a({type:Number})],SliderHandle.prototype,"value",2),n([a({type:Boolean,reflect:!0})],SliderHandle.prototype,"dragging",2),n([a({type:Boolean})],SliderHandle.prototype,"highlight",2),n([a({type:String})],SliderHandle.prototype,"name",2),n([a({reflect:!0,converter:g})],SliderHandle.prototype,"min",2),n([a({reflect:!0,converter:c})],SliderHandle.prototype,"max",2),n([a({type:Number,reflect:!0})],SliderHandle.prototype,"step",2),n([a({type:Object,attribute:"format-options"})],SliderHandle.prototype,"formatOptions",2),n([a({type:String})],SliderHandle.prototype,"label",2),n([a({attribute:!1})],SliderHandle.prototype,"getAriaHandleText",2),n([a({attribute:!1})],SliderHandle.prototype,"normalization",2);
1
+ "use strict";var p=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var a=(t,i,e,r)=>{for(var o=r>1?void 0:r?b(i,e):i,n=t.length-1,m;n>=0;n--)(m=t[n])&&(o=(r?m(i,e,o):m(o))||o);return r&&o&&p(i,e,o),o};import{property as u}from"@spectrum-web-components/base/src/decorators.js";import{Focusable as d}from"@spectrum-web-components/shared/src/focusable.js";import{LanguageResolutionController as h}from"@spectrum-web-components/reactive-controllers/src/LanguageResolution.js";import{NumberFormatter as l}from"@internationalized/number";export const defaultNormalization={toNormalized(t,i,e){return(t-i)/(e-i)},fromNormalized(t,i,e){return t*(e-i)+i}};const g={fromAttribute:t=>t==="previous"?t:parseFloat(t),toAttribute:t=>t.toString()},c={fromAttribute:t=>t==="next"?t:parseFloat(t),toAttribute:t=>t.toString()};export class SliderHandle extends d{constructor(){super(...arguments);this._forcedUnit="";this.dragging=!1;this.highlight=!1;this.name="";this.label="";this.getAriaHandleText=(e,r)=>r.format(e);this.languageResolver=new h(this);this.normalization=defaultNormalization}get handleName(){return this.name}get focusElement(){var e,r;return(r=(e=this.handleController)==null?void 0:e.inputForHandle(this))!=null?r:this}update(e){var r;if(!this.hasUpdated){const{max:o,min:n}=this;this.value==null&&!isNaN(o)&&!isNaN(n)&&(this.value=o<n?n:n+(o-n)/2)}(e.has("formatOptions")||e.has("resolvedLanguage"))&&delete this._numberFormatCache,e.has("value")&&e.get("value")!=null&&this.updateComplete.then(()=>{var n;(n=this.handleController)==null||n.setValueFromHandle(this)}),(r=this.handleController)==null||r.handleHasChanged(this),super.update(e)}firstUpdated(e){super.firstUpdated(e),this.dispatchEvent(new CustomEvent("sp-slider-handle-ready"))}dispatchInputEvent(){const e=new Event("input",{bubbles:!0,composed:!0});this.dispatchEvent(e)}getNumberFormat(){var e;if(!this._numberFormatCache||this.languageResolver.language!==this._numberFormatCache.language){let r;try{r=new l(this.languageResolver.language,this.formatOptions),this._forcedUnit=""}catch(o){const{style:n,unit:m,unitDisplay:f,...s}=this.formatOptions||{};n==="unit"&&(this._forcedUnit=m),r=new l(this.languageResolver.language,s)}this._numberFormatCache={language:this.languageResolver.language,numberFormat:r}}return(e=this._numberFormatCache)==null?void 0:e.numberFormat}get numberFormat(){if(!!this.formatOptions)return this.getNumberFormat()}}a([u({type:Number})],SliderHandle.prototype,"value",2),a([u({type:Boolean,reflect:!0})],SliderHandle.prototype,"dragging",2),a([u({type:Boolean})],SliderHandle.prototype,"highlight",2),a([u({type:String})],SliderHandle.prototype,"name",2),a([u({reflect:!0,converter:g})],SliderHandle.prototype,"min",2),a([u({reflect:!0,converter:c})],SliderHandle.prototype,"max",2),a([u({type:Number,reflect:!0})],SliderHandle.prototype,"step",2),a([u({type:Object,attribute:"format-options"})],SliderHandle.prototype,"formatOptions",2),a([u({type:String})],SliderHandle.prototype,"label",2),a([u({attribute:!1})],SliderHandle.prototype,"getAriaHandleText",2),a([u({attribute:!1})],SliderHandle.prototype,"normalization",2);
2
2
  //# sourceMappingURL=SliderHandle.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["SliderHandle.ts"],
4
- "sourcesContent": ["/*\nCopyright 2021 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 { PropertyValues } from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { LanguageResolutionController } from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport {\n NumberFormatOptions,\n NumberFormatter,\n} from '@internationalized/number';\n\nexport type HandleMin = number | 'previous';\nexport type HandleMax = number | 'next';\n\nexport type HandleValues = {\n name: string;\n value: number;\n}[];\n\nexport interface Controller {\n inputForHandle(handle: SliderHandle): HTMLInputElement | undefined;\n requestUpdate(): void;\n setValueFromHandle(handle: SliderHandle): void;\n handleHasChanged(handle: SliderHandle): void;\n}\n\nexport type SliderNormalization = {\n toNormalized: (value: number, min: number, max: number) => number;\n fromNormalized: (value: number, min: number, max: number) => number;\n};\n\nexport const defaultNormalization: SliderNormalization = {\n toNormalized(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n },\n fromNormalized(value: number, min: number, max: number) {\n return value * (max - min) + min;\n },\n};\n\nconst MinConverter = {\n fromAttribute: (value: string): number | 'previous' => {\n if (value === 'previous') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'previous' | number): string => {\n return value.toString();\n },\n};\n\nconst MaxConverter = {\n fromAttribute: (value: string): number | 'next' => {\n if (value === 'next') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'next' | number): string => {\n return value.toString();\n },\n};\n\n/**\n * @element sp-slider-handle\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 SliderHandle extends Focusable {\n public handleController?: Controller;\n\n public get handleName(): string {\n return this.name;\n }\n\n public override get focusElement(): HTMLElement {\n /* c8 ignore next */\n return this.handleController?.inputForHandle(this) ?? this;\n }\n\n _forcedUnit = '';\n\n @property({ type: Number })\n value = 10;\n\n @property({ type: Boolean, reflect: true })\n public dragging = false;\n\n @property({ type: Boolean })\n public highlight = false;\n\n @property({ type: String })\n public name = '';\n\n @property({ reflect: true, converter: MinConverter })\n public min?: number | 'previous';\n\n @property({ reflect: true, converter: MaxConverter })\n public max?: number | 'next';\n\n @property({ type: Number, reflect: true })\n public step?: number;\n\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions?: NumberFormatOptions;\n\n @property({ type: String })\n public label = '';\n\n @property({ attribute: false })\n public getAriaHandleText: (\n value: number,\n numberFormat: NumberFormatter\n ) => string = (value, numberFormat) => {\n return numberFormat.format(value);\n };\n\n private languageResolver = new LanguageResolutionController(this);\n\n protected override update(changes: PropertyValues): void {\n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n delete this._numberFormatCache;\n }\n if (changes.has('value')) {\n const oldValue = changes.get('value');\n if (oldValue != null) {\n this.updateComplete.then(() => {\n this.handleController?.setValueFromHandle(this);\n });\n }\n }\n this.handleController?.handleHasChanged(this);\n super.update(changes);\n }\n\n protected override firstUpdated(\n changedProperties: PropertyValues<this>\n ): void {\n super.firstUpdated(changedProperties);\n this.dispatchEvent(new CustomEvent('sp-slider-handle-ready'));\n }\n\n @property({ attribute: false })\n public normalization: SliderNormalization = defaultNormalization;\n\n public dispatchInputEvent(): void {\n const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n\n this.dispatchEvent(inputEvent);\n }\n\n protected _numberFormatCache:\n | { numberFormat: NumberFormatter; language: string }\n | undefined;\n protected getNumberFormat(): NumberFormatter {\n /* c8 ignore next */\n if (\n !this._numberFormatCache ||\n this.languageResolver.language !== this._numberFormatCache.language\n ) {\n let numberFormatter: NumberFormatter;\n try {\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n // numberFormatter.format(1);\n } catch (error) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions || {};\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n }\n this._numberFormatCache = {\n language: this.languageResolver.language,\n numberFormat: numberFormatter,\n };\n }\n /* c8 ignore next */\n return this._numberFormatCache?.numberFormat;\n }\n\n public get numberFormat(): NumberFormatter | undefined {\n if (!this.formatOptions) return;\n return this.getNumberFormat();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2021 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 { PropertyValues } from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { LanguageResolutionController } from '@spectrum-web-components/reactive-controllers/src/LanguageResolution.js';\nimport {\n NumberFormatOptions,\n NumberFormatter,\n} from '@internationalized/number';\n\nexport type HandleMin = number | 'previous';\nexport type HandleMax = number | 'next';\n\nexport type HandleValues = {\n name: string;\n value: number;\n}[];\n\nexport interface Controller {\n inputForHandle(handle: SliderHandle): HTMLInputElement | undefined;\n requestUpdate(): void;\n setValueFromHandle(handle: SliderHandle): void;\n handleHasChanged(handle: SliderHandle): void;\n}\n\nexport type SliderNormalization = {\n toNormalized: (value: number, min: number, max: number) => number;\n fromNormalized: (value: number, min: number, max: number) => number;\n};\n\nexport const defaultNormalization: SliderNormalization = {\n toNormalized(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n },\n fromNormalized(value: number, min: number, max: number) {\n return value * (max - min) + min;\n },\n};\n\nconst MinConverter = {\n fromAttribute: (value: string): number | 'previous' => {\n if (value === 'previous') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'previous' | number): string => {\n return value.toString();\n },\n};\n\nconst MaxConverter = {\n fromAttribute: (value: string): number | 'next' => {\n if (value === 'next') return value;\n return parseFloat(value);\n },\n toAttribute: (value: 'next' | number): string => {\n return value.toString();\n },\n};\n\n/**\n * @element sp-slider-handle\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 SliderHandle extends Focusable {\n public handleController?: Controller;\n\n public get handleName(): string {\n return this.name;\n }\n\n public override get focusElement(): HTMLElement {\n /* c8 ignore next */\n return this.handleController?.inputForHandle(this) ?? this;\n }\n\n _forcedUnit = '';\n\n /**\n * By default, the value of a Slider Handle will be halfway between its\n * `min` and `max` values, or the `min` value when `max` is less than `min`.\n */\n @property({ type: Number })\n value!: number;\n\n @property({ type: Boolean, reflect: true })\n public dragging = false;\n\n @property({ type: Boolean })\n public highlight = false;\n\n @property({ type: String })\n public override name = '';\n\n @property({ reflect: true, converter: MinConverter })\n public min?: number | 'previous';\n\n @property({ reflect: true, converter: MaxConverter })\n public max?: number | 'next';\n\n @property({ type: Number, reflect: true })\n public step?: number;\n\n @property({ type: Object, attribute: 'format-options' })\n public formatOptions?: NumberFormatOptions;\n\n @property({ type: String })\n public label = '';\n\n @property({ attribute: false })\n public getAriaHandleText: (\n value: number,\n numberFormat: NumberFormatter\n ) => string = (value, numberFormat) => {\n return numberFormat.format(value);\n };\n\n private languageResolver = new LanguageResolutionController(this);\n\n protected override update(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const { max, min } = this as { max: number; min: number };\n if (this.value == null) {\n if (!isNaN(max) && !isNaN(min)) {\n this.value = max < min ? min : min + (max - min) / 2;\n }\n }\n }\n \n if (changes.has('formatOptions') || changes.has('resolvedLanguage')) {\n delete this._numberFormatCache;\n }\n if (changes.has('value')) {\n const oldValue = changes.get('value');\n if (oldValue != null) {\n this.updateComplete.then(() => {\n this.handleController?.setValueFromHandle(this);\n });\n }\n }\n this.handleController?.handleHasChanged(this);\n super.update(changes);\n }\n\n protected override firstUpdated(changedProperties: PropertyValues<this>): void {\n super.firstUpdated(changedProperties);\n this.dispatchEvent(new CustomEvent('sp-slider-handle-ready'));\n }\n\n @property({ attribute: false })\n public normalization: SliderNormalization = defaultNormalization;\n\n public dispatchInputEvent(): void {\n const inputEvent = new Event('input', {\n bubbles: true,\n composed: true,\n });\n\n this.dispatchEvent(inputEvent);\n }\n\n protected _numberFormatCache:\n | { numberFormat: NumberFormatter; language: string }\n | undefined;\n protected getNumberFormat(): NumberFormatter {\n /* c8 ignore next */\n if (\n !this._numberFormatCache ||\n this.languageResolver.language !== this._numberFormatCache.language\n ) {\n let numberFormatter: NumberFormatter;\n try {\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n this.formatOptions\n );\n this._forcedUnit = '';\n // numberFormatter.format(1);\n } catch (error) {\n const {\n style,\n unit,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n unitDisplay,\n ...formatOptionsNoUnit\n } = this.formatOptions || {};\n if (style === 'unit') {\n this._forcedUnit = unit as string;\n }\n numberFormatter = new NumberFormatter(\n this.languageResolver.language,\n formatOptionsNoUnit\n );\n }\n this._numberFormatCache = {\n language: this.languageResolver.language,\n numberFormat: numberFormatter,\n };\n }\n /* c8 ignore next */\n return this._numberFormatCache?.numberFormat;\n }\n\n public get numberFormat(): NumberFormatter | undefined {\n if (!this.formatOptions) return;\n return this.getNumberFormat();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["property", "Focusable", "LanguageResolutionController", "NumberFormatter", "value", "min", "max", "MinConverter", "MaxConverter", "numberFormat", "_a", "_b", "changes", "changedProperties", "inputEvent", "numberFormatter", "error", "style", "unit", "unitDisplay", "formatOptionsNoUnit", "__decorateClass"]
7
7
  }
@@ -81,20 +81,20 @@ describe("Slider", () => {
81
81
  })
82
82
  );
83
83
  await elementUpdated(el);
84
- expect(el.value).to.equal(10);
84
+ expect(el.value).to.equal(46);
85
85
  expect(el.highlight).to.be.false;
86
86
  el.focus();
87
87
  await sendKeys({
88
88
  press: "ArrowDown"
89
89
  });
90
90
  await elementUpdated(el);
91
- expect(el.value).to.equal(9);
91
+ expect(el.value).to.equal(45);
92
92
  expect(el.highlight).to.be.true;
93
93
  await sendKeys({
94
94
  press: "ArrowUp"
95
95
  });
96
96
  await elementUpdated(el);
97
- expect(el.value).to.equal(10);
97
+ expect(el.value).to.equal(46);
98
98
  expect(el.highlight).to.be.true;
99
99
  });
100
100
  it("accepts pointer events", async () => {
@@ -179,7 +179,7 @@ describe("Slider", () => {
179
179
  `
180
180
  );
181
181
  await elementUpdated(el);
182
- expect(el.value).to.equal(10);
182
+ expect(el.value).to.equal(35);
183
183
  const controls = el.shadowRoot.querySelector(
184
184
  "#controls"
185
185
  );
@@ -197,7 +197,7 @@ describe("Slider", () => {
197
197
  );
198
198
  await elementUpdated(el);
199
199
  expect(pointerId).to.equal(-1);
200
- expect(el.value).to.equal(10);
200
+ expect(el.value).to.equal(35);
201
201
  expect(el.dragging, "handle is not yet being dragged").to.be.false;
202
202
  controls.dispatchEvent(
203
203
  new PointerEvent("pointerdown", {
@@ -249,7 +249,7 @@ describe("Slider", () => {
249
249
  await elementUpdated(el);
250
250
  expect(el.dragging).to.be.false;
251
251
  expect(pointerId).to.equal(-1);
252
- expect(el.value).to.equal(10);
252
+ expect(el.value).to.equal(50);
253
253
  const handle = el.shadowRoot.querySelector(".handle");
254
254
  handle.setPointerCapture = (id) => pointerId = id;
255
255
  handle.dispatchEvent(
@@ -275,7 +275,7 @@ describe("Slider", () => {
275
275
  );
276
276
  await elementUpdated(el);
277
277
  expect(pointerId).to.equal(-1);
278
- expect(el.value).to.equal(10);
278
+ expect(el.value).to.equal(50);
279
279
  });
280
280
  it("accepts pointermove events", async () => {
281
281
  const el = await fixture(
@@ -284,7 +284,7 @@ describe("Slider", () => {
284
284
  `
285
285
  );
286
286
  await elementUpdated(el);
287
- expect(el.value).to.equal(10);
287
+ expect(el.value).to.equal(50);
288
288
  const handle = el.shadowRoot.querySelector(".handle");
289
289
  await sendMouse({
290
290
  steps: [
@@ -318,7 +318,7 @@ describe("Slider", () => {
318
318
  `
319
319
  );
320
320
  await elementUpdated(el);
321
- expect(el.value).to.equal(10);
321
+ expect(el.value).to.equal(6);
322
322
  const handle = el.shadowRoot.querySelector(".handle");
323
323
  await sendMouse({
324
324
  steps: [
@@ -352,7 +352,7 @@ describe("Slider", () => {
352
352
  `
353
353
  );
354
354
  await elementUpdated(el);
355
- expect(el.value).to.equal(10);
355
+ expect(el.value).to.equal(50);
356
356
  const handle = el.shadowRoot.querySelector(".handle");
357
357
  const handleBoundingRect = handle.getBoundingClientRect();
358
358
  await sendMouse({
@@ -372,7 +372,7 @@ describe("Slider", () => {
372
372
  await elementUpdated(el);
373
373
  expect(el.dragging, "is dragging").to.be.true;
374
374
  expect(el.highlight, "not highlighted").to.be.false;
375
- expect(el.value).to.equal(10);
375
+ expect(el.value).to.equal(50);
376
376
  const inputEvent = oneEvent(el, "input");
377
377
  await sendMouse({
378
378
  steps: [
@@ -412,7 +412,7 @@ describe("Slider", () => {
412
412
  `
413
413
  );
414
414
  await elementUpdated(el);
415
- expect(el.value, "initial").to.equal(10);
415
+ expect(el.value, "initial").to.equal(50);
416
416
  const handle = el.shadowRoot.querySelector(".handle");
417
417
  el.track.setPointerCapture = (id) => pointerId = id;
418
418
  el.track.releasePointerCapture = (id) => pointerId = id;
@@ -570,7 +570,7 @@ describe("Slider", () => {
570
570
  `
571
571
  );
572
572
  await elementUpdated(el);
573
- expect(el.value).to.equal(10);
573
+ expect(el.value).to.equal(50);
574
574
  expect(el.dragging).to.be.false;
575
575
  const handle = el.shadowRoot.querySelector(".handle");
576
576
  handle.dispatchEvent(
@@ -580,7 +580,7 @@ describe("Slider", () => {
580
580
  })
581
581
  );
582
582
  await nextFrame();
583
- expect(el.value).to.equal(10);
583
+ expect(el.value).to.equal(50);
584
584
  });
585
585
  it("responds to input events on the <input/> element", async () => {
586
586
  const el = await fixture(
@@ -589,7 +589,7 @@ describe("Slider", () => {
589
589
  `
590
590
  );
591
591
  await elementUpdated(el);
592
- expect(el.value).to.equal(10);
592
+ expect(el.value).to.equal(50);
593
593
  const input = el.shadowRoot.querySelector(".input");
594
594
  input.value = "0";
595
595
  input.dispatchEvent(new Event("change"));
@@ -758,7 +758,7 @@ describe("Slider", () => {
758
758
  `
759
759
  );
760
760
  await elementUpdated(el);
761
- expect(el.value).to.equal(10);
761
+ expect(el.value).to.equal(50);
762
762
  el.min = 0;
763
763
  el.max = 200;
764
764
  el.value = 200;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["slider.test.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 '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/slider/sp-slider-handle.js';\nimport { Slider, SliderHandle } from '@spectrum-web-components/slider';\nimport { tick } from '../stories/slider.stories.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { stub } from 'sinon';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Slider', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n )\n );\n it('loads', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n label=\"Ticked Slider\"\n min=\"-100\"\n max=\"100\"\n value=\"0\"\n tick-labels\n variant=\"tick\"\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"] irregularly', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('receives value from the outside', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider max=\"20\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 10;\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 50;\n await elementUpdated(el);\n\n expect(el.value).to.equal(20);\n });\n it('accepts keyboard events', async () => {\n const el = await fixture<Slider>(\n tick({\n variant: 'tick',\n tickStep: 5,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n expect(el.highlight).to.be.false;\n\n el.focus();\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(9);\n expect(el.highlight).to.be.true;\n await sendKeys({\n press: 'ArrowUp',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n expect(el.highlight).to.be.true;\n });\n it('accepts pointer events', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '1').to.equal(-1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 1').to.be.true;\n expect(pointerId, '2').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n pointerId: 2,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId, '3').to.equal(2);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 2').to.be.true;\n expect(pointerId, '4').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointercancel', {\n pointerId: 3,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '5').to.equal(3);\n });\n it('will `trackPointerDown` on `#controls`', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 500px\" max=\"70\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(10);\n expect(el.dragging, 'handle is not yet being dragged').to.be.false;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(0);\n expect(el.dragging, 'handle is being dragged').to.be.true;\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 508,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'handle is still being dragged').to.be.true;\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n expect(el.dragging, 'handle is no longer being dragged').to.be.false;\n });\n it('can be disabled', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider disabled></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n handle.setPointerCapture = (id: number) => (pointerId = id);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n clientX: 50,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(10);\n });\n it('accepts pointermove events', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(0);\n });\n\n it('manages RTL when min != 0', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"1\" max=\"11\" dir=\"rtl\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(11);\n });\n\n it('goes [disabled] while dragging', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n expect(el.value).to.equal(10);\n\n const inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x +\n handleBoundingRect.width / 2 +\n 100,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(13);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.false;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 0,\n handleBoundingRect.top + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n\n expect(el.value).to.equal(13);\n });\n it('accepts pointermove events in separate interactions', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 100px\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value, 'initial').to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n pointerId: 100,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n expect(pointerId).to.equal(100);\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n });\n it('accepts pointermove events - [step=0]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"0\" max=\"20\" style=\"width: 500px; float: left;\">\n Step = 0\n </sp-slider>\n `\n );\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n const position: [number, number] = [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position,\n },\n {\n type: 'down',\n },\n ],\n });\n\n await nextFrame();\n\n expect(el.highlight, 'with no highlight').to.be.false;\n expect(el.dragging, 'dragging').to.be.true;\n\n let inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 200,\n handleBoundingRect.y + handleBoundingRect.height + 100,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(8);\n\n inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [125, position[1]],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(5);\n });\n it('will not pointermove unless `pointerdown`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n expect(el.dragging).to.be.false;\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n })\n );\n await nextFrame();\n\n expect(el.value).to.equal(10);\n });\n it('responds to input events on the <input/> element', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n const input = el.shadowRoot.querySelector('.input') as HTMLInputElement;\n\n input.value = '0';\n input.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(0);\n });\n it('accepts variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"tick\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'ramp';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('ramp');\n expect(el.getAttribute('variant')).to.equal('ramp');\n\n el.setAttribute('variant', 'filled');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('filled');\n expect(el.getAttribute('variant')).to.equal('filled');\n\n el.removeAttribute('variant');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n });\n it('validates variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"other\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n });\n it('has a `focusElement`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input).to.not.be.undefined;\n expect(input.type).to.equal('range');\n });\n it('displays result of getAriaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"50\"\n min=\"0\"\n max=\"100\"\n .getAriaHandleText=${(value: number) => `${value}%`}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('displays Intl.formatNumber results', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\".5\"\n min=\"0\"\n max=\"1\"\n .formatOptions=${{ style: 'percent' }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('obeys language property', async () => {\n const [languageContext, updateLanguage] = createLanguageContext('de');\n let el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"2.44\"\n min=\"0\"\n max=\"10\"\n step=\"0.01\"\n @sp-language-context=${languageContext}\n .formatOptions=${{ maximumFractionDigits: 2 }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n let input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'First German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'First English number'\n ).to.equal('2.44');\n\n updateLanguage('de');\n el = await fixture<Slider>(\n html`\n <sp-slider\n min=\"0\"\n max=\"10\"\n @sp-language-context=${languageContext}\n >\n <sp-slider-handle\n slot=\"handle\"\n step=\"0.01\"\n value=\"2.44\"\n .formatOptions=${{ maximumFractionDigits: 2 }}\n @sp-language-context=${languageContext}\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second English number'\n ).to.equal('2.44');\n });\n it('uses fallback ariaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider value=\"50\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n (\n el as unknown as {\n getAriaValueText: boolean;\n }\n ).getAriaValueText = false;\n\n const input = el.focusElement as HTMLInputElement;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('50');\n });\n it('accepts min/max/value in the same timing', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.min = 0;\n el.max = 200;\n el.value = 200;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(200);\n\n el.value = 500;\n el.min = 0;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(500);\n\n el.value = -100;\n el.min = -100;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(-100);\n });\n it('returns values for handles', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n slot=\"handle\"\n name=\"a\"\n min=\"0\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n max=\"100\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n middleHandle.value = 22;\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 22, c: 30 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider value=\"10\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ value: 10 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n slot=\"handle\"\n value=\"10\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ handle1: 10 });\n });\n it('clamps values for multi-handle slider', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const firstHandle = el.querySelector('#first-handle') as SliderHandle;\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.value = 25;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 20, b: 20, c: 30 });\n\n firstHandle.value = 10;\n await elementUpdated(el);\n middleHandle.value = 5;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 30 });\n\n lastHandle.value = 11;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 11 });\n\n lastHandle.value = 7;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 10 });\n });\n it('warns in Dev Mode when `min=\"previous\"` is leveraged on first handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('previous'),\n 'confirm \"previous\" in message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('warns in Dev Mode when `max=\"next\"` is leveraged on last handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(spyCall.args.at(0).includes('next'), 'confirm \"next\" in message')\n .to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('builds both handles from a <template>', async () => {\n const template = document.createElement('template');\n template.innerHTML = `\n <sp-slider variant=\"range\" step=\"1\" id=\"price\" name=\"price\" label=\"Max Price\" min=\"35425\" max=\"86610\">\n <sp-slider-handle slot=\"handle\" name=\"min\" label=\"Minimum\" max=\"next\" value=\"35425\"></sp-slider-handle>\n <sp-slider-handle slot=\"handle\" name=\"max\" label=\"Maximum\" min=\"previous\" value=\"86610\"></sp-slider-handle>\n </sp-slider>\n `;\n const el = await fixture<HTMLDivElement>(\n html`\n <div></div>\n `\n );\n\n el.appendChild(template.content.cloneNode(true));\n await waitUntil(() => {\n return el.querySelector('sp-slider')?.shadowRoot != null;\n });\n // Sliders take several frames to fully upgrade\n await nextFrame();\n\n const createdHandles =\n el\n .querySelector('sp-slider')\n ?.shadowRoot.querySelectorAll('.handle') || [];\n expect(createdHandles).to.have.lengthOf(2);\n });\n it('enforces next/previous max/min', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n let firstHandle = el.querySelector('#first-handle') as SliderHandle;\n let lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n let firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n let middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n let lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle.value = 15;\n lastHandle.value = 85;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('15');\n expect(middleInput.max).to.equal('85');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n id=\"first-handle\"\n min=\"0\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"100\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle = el.querySelector('#first-handle') as SliderHandle;\n lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.min = 5;\n lastHandle.max = 95;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('5');\n expect(firstInput.max).to.equal('20');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('95');\n });\n it('sends keyboard events to active handle', async () => {\n // let pointerId = -1;\n\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"1\" min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n lastHandle.focus();\n\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 29 });\n });\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 '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/slider/sp-slider-handle.js';\nimport { Slider, SliderHandle } from '@spectrum-web-components/slider';\nimport { tick } from '../stories/slider.stories.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { stub } from 'sinon';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Slider', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n )\n );\n it('loads', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n label=\"Ticked Slider\"\n min=\"-100\"\n max=\"100\"\n value=\"0\"\n tick-labels\n variant=\"tick\"\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"] irregularly', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('receives value from the outside', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider max=\"20\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 10;\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 50;\n await elementUpdated(el);\n\n expect(el.value).to.equal(20);\n });\n it('accepts keyboard events', async () => {\n const el = await fixture<Slider>(\n tick({\n variant: 'tick',\n tickStep: 5,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.false;\n\n el.focus();\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(45);\n expect(el.highlight).to.be.true;\n await sendKeys({\n press: 'ArrowUp',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.true;\n });\n it('accepts pointer events', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '1').to.equal(-1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 1').to.be.true;\n expect(pointerId, '2').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n pointerId: 2,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId, '3').to.equal(2);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 2').to.be.true;\n expect(pointerId, '4').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointercancel', {\n pointerId: 3,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '5').to.equal(3);\n });\n it('will `trackPointerDown` on `#controls`', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 500px\" max=\"70\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(35);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(35);\n expect(el.dragging, 'handle is not yet being dragged').to.be.false;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(0);\n expect(el.dragging, 'handle is being dragged').to.be.true;\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 508,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'handle is still being dragged').to.be.true;\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n expect(el.dragging, 'handle is no longer being dragged').to.be.false;\n });\n it('can be disabled', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider disabled></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n handle.setPointerCapture = (id: number) => (pointerId = id);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n clientX: 50,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n });\n it('accepts pointermove events', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(0);\n });\n\n it('manages RTL when min != 0', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"1\" max=\"11\" dir=\"rtl\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(6);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(11);\n });\n\n it('goes [disabled] while dragging', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n expect(el.value).to.equal(50);\n\n const inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x +\n handleBoundingRect.width / 2 +\n 100,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(13);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.false;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 0,\n handleBoundingRect.top + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n\n expect(el.value).to.equal(13);\n });\n it('accepts pointermove events in separate interactions', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 100px\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value, 'initial').to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n pointerId: 100,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n expect(pointerId).to.equal(100);\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n });\n it('accepts pointermove events - [step=0]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"0\" max=\"20\" style=\"width: 500px; float: left;\">\n Step = 0\n </sp-slider>\n `\n );\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n const position: [number, number] = [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position,\n },\n {\n type: 'down',\n },\n ],\n });\n\n await nextFrame();\n\n expect(el.highlight, 'with no highlight').to.be.false;\n expect(el.dragging, 'dragging').to.be.true;\n\n let inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 200,\n handleBoundingRect.y + handleBoundingRect.height + 100,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(8);\n\n inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [125, position[1]],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(5);\n });\n it('will not pointermove unless `pointerdown`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n expect(el.dragging).to.be.false;\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n })\n );\n await nextFrame();\n\n expect(el.value).to.equal(50);\n });\n it('responds to input events on the <input/> element', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const input = el.shadowRoot.querySelector('.input') as HTMLInputElement;\n\n input.value = '0';\n input.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(0);\n });\n it('accepts variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"tick\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'ramp';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('ramp');\n expect(el.getAttribute('variant')).to.equal('ramp');\n\n el.setAttribute('variant', 'filled');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('filled');\n expect(el.getAttribute('variant')).to.equal('filled');\n\n el.removeAttribute('variant');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n });\n it('validates variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"other\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n });\n it('has a `focusElement`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input).to.not.be.undefined;\n expect(input.type).to.equal('range');\n });\n it('displays result of getAriaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"50\"\n min=\"0\"\n max=\"100\"\n .getAriaHandleText=${(value: number) => `${value}%`}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('displays Intl.formatNumber results', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\".5\"\n min=\"0\"\n max=\"1\"\n .formatOptions=${{ style: 'percent' }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('obeys language property', async () => {\n const [languageContext, updateLanguage] = createLanguageContext('de');\n let el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"2.44\"\n min=\"0\"\n max=\"10\"\n step=\"0.01\"\n @sp-language-context=${languageContext}\n .formatOptions=${{ maximumFractionDigits: 2 }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n let input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'First German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'First English number'\n ).to.equal('2.44');\n\n updateLanguage('de');\n el = await fixture<Slider>(\n html`\n <sp-slider\n min=\"0\"\n max=\"10\"\n @sp-language-context=${languageContext}\n >\n <sp-slider-handle\n slot=\"handle\"\n step=\"0.01\"\n value=\"2.44\"\n .formatOptions=${{ maximumFractionDigits: 2 }}\n @sp-language-context=${languageContext}\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second English number'\n ).to.equal('2.44');\n });\n it('uses fallback ariaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider value=\"50\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n (\n el as unknown as {\n getAriaValueText: boolean;\n }\n ).getAriaValueText = false;\n\n const input = el.focusElement as HTMLInputElement;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('50');\n });\n it('accepts min/max/value in the same timing', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n el.min = 0;\n el.max = 200;\n el.value = 200;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(200);\n\n el.value = 500;\n el.min = 0;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(500);\n\n el.value = -100;\n el.min = -100;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(-100);\n });\n it('returns values for handles', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n slot=\"handle\"\n name=\"a\"\n min=\"0\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n max=\"100\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n middleHandle.value = 22;\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 22, c: 30 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider value=\"10\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ value: 10 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n slot=\"handle\"\n value=\"10\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ handle1: 10 });\n });\n it('clamps values for multi-handle slider', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const firstHandle = el.querySelector('#first-handle') as SliderHandle;\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.value = 25;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 20, b: 20, c: 30 });\n\n firstHandle.value = 10;\n await elementUpdated(el);\n middleHandle.value = 5;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 30 });\n\n lastHandle.value = 11;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 11 });\n\n lastHandle.value = 7;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 10 });\n });\n it('warns in Dev Mode when `min=\"previous\"` is leveraged on first handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('previous'),\n 'confirm \"previous\" in message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('warns in Dev Mode when `max=\"next\"` is leveraged on last handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(spyCall.args.at(0).includes('next'), 'confirm \"next\" in message')\n .to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('builds both handles from a <template>', async () => {\n const template = document.createElement('template');\n template.innerHTML = `\n <sp-slider variant=\"range\" step=\"1\" id=\"price\" name=\"price\" label=\"Max Price\" min=\"35425\" max=\"86610\">\n <sp-slider-handle slot=\"handle\" name=\"min\" label=\"Minimum\" max=\"next\" value=\"35425\"></sp-slider-handle>\n <sp-slider-handle slot=\"handle\" name=\"max\" label=\"Maximum\" min=\"previous\" value=\"86610\"></sp-slider-handle>\n </sp-slider>\n `;\n const el = await fixture<HTMLDivElement>(\n html`\n <div></div>\n `\n );\n\n el.appendChild(template.content.cloneNode(true));\n await waitUntil(() => {\n return el.querySelector('sp-slider')?.shadowRoot != null;\n });\n // Sliders take several frames to fully upgrade\n await nextFrame();\n\n const createdHandles =\n el\n .querySelector('sp-slider')\n ?.shadowRoot.querySelectorAll('.handle') || [];\n expect(createdHandles).to.have.lengthOf(2);\n });\n it('enforces next/previous max/min', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n let firstHandle = el.querySelector('#first-handle') as SliderHandle;\n let lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n let firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n let middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n let lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle.value = 15;\n lastHandle.value = 85;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('15');\n expect(middleInput.max).to.equal('85');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n id=\"first-handle\"\n min=\"0\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"100\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle = el.querySelector('#first-handle') as SliderHandle;\n lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.min = 5;\n lastHandle.max = 95;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('5');\n expect(firstInput.max).to.equal('20');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('95');\n });\n it('sends keyboard events to active handle', async () => {\n // let pointerId = -1;\n\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"1\" min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n lastHandle.focus();\n\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 29 });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a"]
7
7
  }