@ember-eui/core 16.0.1 → 16.0.3
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.
- package/declarations/-private/associate-form-row-label.d.ts +9 -0
- package/declarations/-private/associate-form-row-label.d.ts.map +1 -0
- package/declarations/-private/vis-colors.d.ts +8 -0
- package/declarations/-private/vis-colors.d.ts.map +1 -0
- package/declarations/components/eui-aspect-ratio.d.ts +5 -0
- package/declarations/components/eui-aspect-ratio.d.ts.map +1 -1
- package/declarations/components/eui-avatar.d.ts +6 -0
- package/declarations/components/eui-avatar.d.ts.map +1 -1
- package/declarations/components/eui-basic-table.d.ts.map +1 -1
- package/declarations/components/eui-color-picker.d.ts +3 -0
- package/declarations/components/eui-color-picker.d.ts.map +1 -1
- package/declarations/components/eui-color-stops/thumb.d.ts +3 -1
- package/declarations/components/eui-color-stops/thumb.d.ts.map +1 -1
- package/declarations/components/eui-combo-box/trigger/input.d.ts +9 -0
- package/declarations/components/eui-combo-box/trigger/input.d.ts.map +1 -1
- package/declarations/components/eui-combo-box/trigger.d.ts +13 -0
- package/declarations/components/eui-combo-box/trigger.d.ts.map +1 -1
- package/declarations/components/eui-combo-box.d.ts +26 -0
- package/declarations/components/eui-combo-box.d.ts.map +1 -1
- package/declarations/components/eui-data-grid/body.d.ts +2 -0
- package/declarations/components/eui-data-grid/body.d.ts.map +1 -1
- package/declarations/components/eui-data-grid.d.ts.map +1 -1
- package/declarations/components/eui-dual-range.d.ts +2 -0
- package/declarations/components/eui-dual-range.d.ts.map +1 -1
- package/declarations/components/eui-focus-trap.d.ts +1 -0
- package/declarations/components/eui-focus-trap.d.ts.map +1 -1
- package/declarations/components/eui-global-toast-list.d.ts +8 -1
- package/declarations/components/eui-global-toast-list.d.ts.map +1 -1
- package/declarations/components/eui-markdown-editor-drop-zone.d.ts.map +1 -1
- package/declarations/components/eui-markdown-editor.d.ts.map +1 -1
- package/declarations/components/eui-markdown-format.d.ts +2 -0
- package/declarations/components/eui-markdown-format.d.ts.map +1 -1
- package/declarations/components/eui-overlay-mask.d.ts +5 -2
- package/declarations/components/eui-overlay-mask.d.ts.map +1 -1
- package/declarations/components/eui-popover.d.ts +5 -1
- package/declarations/components/eui-popover.d.ts.map +1 -1
- package/declarations/components/eui-range.d.ts +3 -0
- package/declarations/components/eui-range.d.ts.map +1 -1
- package/declarations/components/eui-saturation.d.ts +3 -1
- package/declarations/components/eui-saturation.d.ts.map +1 -1
- package/declarations/components/eui-search-bar/field-value-selection-filter.d.ts.map +1 -1
- package/declarations/components/eui-text-color.d.ts +6 -0
- package/declarations/components/eui-text-color.d.ts.map +1 -1
- package/declarations/components/eui-text.d.ts.map +1 -1
- package/declarations/components/eui-token.d.ts +11 -0
- package/declarations/components/eui-token.d.ts.map +1 -1
- package/declarations/components/eui-tool-tip.d.ts +1 -2
- package/declarations/components/eui-tool-tip.d.ts.map +1 -1
- package/declarations/modifiers/outside-click-detector.d.ts +3 -0
- package/declarations/modifiers/outside-click-detector.d.ts.map +1 -1
- package/declarations/modifiers/resize-observer.d.ts +3 -0
- package/declarations/modifiers/resize-observer.d.ts.map +1 -1
- package/declarations/services/eui-config.d.ts +5 -0
- package/declarations/services/eui-config.d.ts.map +1 -1
- package/declarations/utils/common.d.ts +42 -0
- package/declarations/utils/common.d.ts.map +1 -0
- package/declarations/utils/css-mappings/eui-avatar.d.ts +1 -1
- package/declarations/utils/css-mappings/eui-text.d.ts +1 -0
- package/declarations/utils/css-mappings/eui-text.d.ts.map +1 -1
- package/declarations/utils/eui/combo-box.d.ts +1 -1
- package/declarations/utils/eui/combo-box.d.ts.map +1 -1
- package/declarations/utils/eui/content-blocks.d.ts +14 -0
- package/declarations/utils/eui/content-blocks.d.ts.map +1 -0
- package/declarations/utils/eui/flyout-manager/reducer.d.ts.map +1 -1
- package/declarations/utils/eui/styles.d.ts +5 -0
- package/declarations/utils/eui/styles.d.ts.map +1 -1
- package/declarations/utils/retain-document-listener.d.ts +8 -0
- package/declarations/utils/retain-document-listener.d.ts.map +1 -0
- package/declarations/utils/token-map.d.ts +11 -0
- package/declarations/utils/token-map.d.ts.map +1 -0
- package/declarations/utils/transition.d.ts +1 -1
- package/declarations/utils/transition.d.ts.map +1 -1
- package/dist/components/eui-aspect-ratio.js +20 -5
- package/dist/components/eui-aspect-ratio.js.map +1 -1
- package/dist/components/eui-avatar.js +16 -4
- package/dist/components/eui-avatar.js.map +1 -1
- package/dist/components/eui-basic-table.js +4 -2
- package/dist/components/eui-basic-table.js.map +1 -1
- package/dist/components/eui-color-picker.js +8 -2
- package/dist/components/eui-color-picker.js.map +1 -1
- package/dist/components/eui-color-stops/thumb.js +17 -5
- package/dist/components/eui-color-stops/thumb.js.map +1 -1
- package/dist/components/eui-combo-box/trigger/input.js +23 -2
- package/dist/components/eui-combo-box/trigger/input.js.map +1 -1
- package/dist/components/eui-combo-box/trigger.js +32 -2
- package/dist/components/eui-combo-box/trigger.js.map +1 -1
- package/dist/components/eui-combo-box.js +40 -5
- package/dist/components/eui-combo-box.js.map +1 -1
- package/dist/components/eui-data-grid/body.js +21 -1
- package/dist/components/eui-data-grid/body.js.map +1 -1
- package/dist/components/eui-data-grid.js +6 -4
- package/dist/components/eui-data-grid.js.map +1 -1
- package/dist/components/eui-dual-range.js +5 -2
- package/dist/components/eui-dual-range.js.map +1 -1
- package/dist/components/eui-focus-trap.js +4 -1
- package/dist/components/eui-focus-trap.js.map +1 -1
- package/dist/components/eui-global-toast-list.js +33 -5
- package/dist/components/eui-global-toast-list.js.map +1 -1
- package/dist/components/eui-markdown-editor-drop-zone.js +2 -0
- package/dist/components/eui-markdown-editor-drop-zone.js.map +1 -1
- package/dist/components/eui-markdown-editor.js +3 -1
- package/dist/components/eui-markdown-editor.js.map +1 -1
- package/dist/components/eui-markdown-format.js +9 -3
- package/dist/components/eui-markdown-format.js.map +1 -1
- package/dist/components/eui-overlay-mask.js +2 -0
- package/dist/components/eui-overlay-mask.js.map +1 -1
- package/dist/components/eui-popover.js +22 -2
- package/dist/components/eui-popover.js.map +1 -1
- package/dist/components/eui-range.js +10 -3
- package/dist/components/eui-range.js.map +1 -1
- package/dist/components/eui-saturation.js +16 -4
- package/dist/components/eui-saturation.js.map +1 -1
- package/dist/components/eui-search-bar/field-value-selection-filter.js +8 -3
- package/dist/components/eui-search-bar/field-value-selection-filter.js.map +1 -1
- package/dist/components/eui-text-color.js +20 -6
- package/dist/components/eui-text-color.js.map +1 -1
- package/dist/components/eui-text.js +6 -3
- package/dist/components/eui-text.js.map +1 -1
- package/dist/components/eui-token.js +31 -17
- package/dist/components/eui-token.js.map +1 -1
- package/dist/components/eui-tool-tip.js +9 -17
- package/dist/components/eui-tool-tip.js.map +1 -1
- package/dist/icons-DCTZo11a.js.map +1 -1
- package/dist/modifiers/outside-click-detector.js +12 -2
- package/dist/modifiers/outside-click-detector.js.map +1 -1
- package/dist/modifiers/resize-observer.js +19 -4
- package/dist/modifiers/resize-observer.js.map +1 -1
- package/dist/services/eui-config.js.map +1 -1
- package/dist/utils/eui/combo-box.js +6 -2
- package/dist/utils/eui/combo-box.js.map +1 -1
- package/dist/utils/eui/flyout-manager/reducer.js +7 -1
- package/dist/utils/eui/flyout-manager/reducer.js.map +1 -1
- package/dist/utils/eui/styles.js +5 -0
- package/dist/utils/eui/styles.js.map +1 -1
- package/dist/utils/retain-document-listener.js +30 -0
- package/dist/utils/retain-document-listener.js.map +1 -0
- package/dist/utils/transition.js +8 -3
- package/dist/utils/transition.js.map +1 -1
- package/package.json +2 -2
- package/declarations/modifiers/open-collapsible-nav.d.ts +0 -9
- package/declarations/modifiers/open-collapsible-nav.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-dual-range.js","sources":["../../src/components/eui-dual-range.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { later } from '@ember/runloop';\nimport { service } from '@ember/service';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport { modifier } from 'ember-modifier';\nimport { and, eq, not } from 'ember-truth-helpers';\n\nimport argOrDefault, {\n argOrDefaultDecorator\n} from '../helpers/arg-or-default.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport { calculateThumbPosition, logicalStyle } from '../utils/eui/range.ts';\nimport {\n euiDualRangeStyles,\n euiRangeDraggableInnerStyles,\n euiRangeDraggableStyles,\n euiRangeLevelColor,\n euiRangeStyles,\n getLevelColor\n} from '../utils/eui/styles.generated.ts';\nimport { euiClass, useEuiBorealisStyles } from '../utils/eui/styles.ts';\nimport { keys } from '../utils/keys.ts';\nimport { isWithinRange } from '../utils/number/index.ts';\nimport EuiFormControlLayoutDelimited from './eui-form-control-layout-delimited.gts';\nimport EuiInputPopover from './eui-input-popover.gts';\nimport EuiRangeHighlight from './eui-range-highlight.gts';\nimport EuiRangeInput from './eui-range-input.gts';\nimport EuiRangeLabel from './eui-range-label.gts';\nimport EuiRangeSlider from './eui-range-slider.gts';\nimport EuiRangeThumb from './eui-range-thumb.gts';\nimport EuiRangeTrack from './eui-range-track.gts';\nimport EuiRangeWrapper from './eui-range-wrapper.gts';\n\nimport type EuiI18n from '../services/eui-i18n';\nimport type { EuiFormControlLayoutSignature } from './eui-form-control-layout';\nimport type { EuiRangeArgs, EuiRangeInputPopoverProps } from './eui-range';\nimport type {\n EuiRangeInputArgs,\n EuiRangeInputSignature\n} from './eui-range-input';\nimport type { EuiRangeLevel } from './eui-range-levels';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { EuiRangeTick } from './eui-range-ticks';\n\nexport type ValueMember = number | string;\n\nexport interface EuiDualRangeArgs {\n /**\n * Props of the EuiInputPopover used with `@showInput=\"inputWithPopover\"`\n * (upstream `inputPopoverProps`): EuiInputPopover args except `isOpen`,\n * `closePopover`, `disableFocusTrap`, `ownFocus`,\n * `popoverScreenReaderText` and `fullWidth`, which the range controls.\n * Its `className` is added to the popover root.\n */\n inputPopoverProps?: EuiRangeInputPopoverProps;\n /** The selected range, `[lower, upper]`. Update it in `@onChange`. */\n value: [ValueMember, ValueMember];\n /** Called when a thumb or input loses focus. */\n onBlur?: (event: FocusEvent) => void;\n /** Called when a thumb or input gets focus. */\n onFocus?: (event: FocusEvent) => void;\n /**\n * Called with the new `[lower, upper]` values, whether they are valid\n * (within `@min`/`@max` and lower ≤ upper) and the event.\n */\n onChange: (\n values: [ValueMember, ValueMember],\n isValid: boolean,\n event: Event | MouseEvent | KeyboardEvent\n ) => void;\n /** Stretches the slider to its container's width. */\n fullWidth?: boolean;\n /** Shows the invalid state. */\n isInvalid?: boolean;\n /**\n * Create colored indicators for certain intervals:\n * `[{ min: 0, max: 20, color: 'danger' }, …]`.\n */\n levels?: EuiRangeLevel[];\n /**\n * Shows static min/max labels on the sides of the range slider.\n * Defaults to `false`.\n */\n showLabels?: boolean;\n /**\n * Pass `true` to displays an extra input control for direct manipulation.\n * Pass `'inputWithPopover'` to only show the input but show the range in a dropdown.\n */\n showInput?: EuiRangeArgs['showInput'];\n /**\n * Modifies the number of tick marks and at what interval\n */\n tickInterval?: number;\n /**\n * Specified ticks at specified values: `[{ label: '20kb', value: 20 }]`.\n */\n ticks?: EuiRangeTick[];\n /**\n * @deprecated Has no effect, use the `<:prepend>` block (shown with\n * `@showInput=\"inputWithPopover\"`).\n */\n prepend?: EuiFormControlLayoutSignature['Blocks']['prepend'];\n /**\n * @deprecated Has no effect, use the `<:append>` block (shown with\n * `@showInput=\"inputWithPopover\"`).\n */\n append?: EuiFormControlLayoutSignature['Blocks']['append'];\n /** @deprecated Has no effect. */\n minInputProps?: Partial<EuiRangeInputArgs>;\n /** @deprecated Has no effect. */\n maxInputProps?: Partial<EuiRangeInputArgs>;\n /** Makes the inputs read-only. */\n readOnly?: boolean;\n /** Disables the slider and inputs. */\n disabled?: boolean;\n /** @private Show the `<:prepend>` block. Defaults to `true`. */\n isPrependProvided?: boolean;\n /** @private Show the `<:append>` block. Defaults to `true`. */\n isAppendProvided?: boolean;\n /** @private Ignore the `<:max>` block. */\n isFakeMaxBlock?: boolean;\n /** @private Ignore the `<:min>` block. */\n isFakeMinBlock?: boolean;\n /** Disables the number inputs. */\n disable?: boolean;\n /** Id of the element(s) describing the slider thumbs. */\n ariaDescribedby?: string;\n /** Accessible label of the slider thumbs. */\n ariaLabel?: string;\n /** `name` of the inputs; the number inputs get `-minValue` / `-maxValue` suffixes. */\n name?: string;\n /** Id of the slider. Defaults to a generated id. */\n id?: string;\n /** Smaller slider, for dense forms. Defaults to `false`. */\n compressed?: boolean;\n /**\n * Makes the highlighted range draggable (moves both values at once), with\n * its own `role=\"slider\"` for the keyboard. Defaults to `false`.\n */\n isDraggable?: boolean;\n /**\n * Shows a spinner in the delimited input (`@showInput=\"inputWithPopover\"`).\n */\n isLoading?: boolean;\n /** Highlights the selected range on the track. Defaults to `true`. */\n showRange?: boolean;\n /** Shows tick marks, every `@step` (or `@tickInterval`). Defaults to `false`. */\n showTicks?: boolean;\n /** Increment between values. Defaults to `1`. */\n step?: number;\n /** Lowest selectable value. Defaults to `0`. */\n min?: number;\n /** Highest selectable value. Defaults to `100`. */\n max?: number;\n}\n\n/**\n * A slider with two thumbs to pick a range, e.g. a price range. For one\n * value use EuiRange.\n */\nexport interface EuiDualRangeSignature {\n Element: EuiRangeInputSignature['Element'];\n Args: EuiDualRangeArgs;\n Blocks: {\n /** Content before the inputs (`@showInput=\"inputWithPopover\"`). */\n prepend: EuiRangeInputSignature['Blocks']['prepend'];\n /** Content after the inputs (`@showInput=\"inputWithPopover\"`). */\n append: EuiRangeInputSignature['Blocks']['append'];\n /** Custom min label (`@showLabels`); yields `@min`. */\n min: [number?];\n /** Custom max label (`@showLabels`); yields `@max`. */\n max: [number?];\n };\n}\n\n/**\n * One number input of EuiDualRange (`@side` min or max), wired to the\n * range's handlers. `@class` is the delimited layout's input class.\n */\nconst DualRangeInput: TemplateOnlyComponent<{\n Element: HTMLInputElement;\n Args: {\n range: EuiDualRangeComponent;\n side: 'min' | 'max';\n class?: string;\n };\n}> = <template>\n {{#let (eq @side \"min\") as |isMin|}}\n <EuiRangeInput\n class={{@class}}\n @side={{@side}}\n @min={{if isMin @range.min @range.upperMin}}\n @max={{if isMin @range.lowerMax @range.max}}\n @step={{@range.step}}\n @value={{if isMin @range.lowerValue @range.upperValue}}\n @disabled={{@range.args.disabled}}\n @compressed={{@range.compressed}}\n @name={{concat @range.args.name (if isMin \"-minValue\" \"-maxValue\")}}\n @readOnly={{@range.args.readOnly}}\n @autoSize={{not @range.showInputOnly}}\n @fullWidth={{and @range.showInputOnly @range.fullWidth}}\n @isInvalid={{@range.args.isInvalid}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @controlOnly={{@range.showInputOnly}}\n aria-label={{@range.args.ariaLabel}}\n aria-describedby={{@range.args.ariaDescribedby}}\n ...attributes\n {{on\n \"mousedown\"\n (if\n @range.showInputOnly (fn @range.setPreventPopoverClose true) (optional)\n )\n }}\n {{on \"keydown\" @range.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n @range.canShowDropdown\n @range.onInputFocus\n (optional @range.args.onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n @range.canShowDropdown @range.onInputBlur (optional @range.args.onBlur)\n )\n }}\n {{on\n \"input\"\n (if\n isMin @range.handleLowerInputChange @range.handleUpperInputChange\n )\n }}\n />\n {{/let}}\n</template>;\n\nconst borderBox = { boxSizing: 'border-box' } as const;\n\n/** Mouse drag on the draggable range: calls `onChange(x, isFirstInteraction)`. */\nconst mouseMove = modifier(\n (\n element: HTMLElement,\n _: unknown[],\n { onChange }: { onChange: (x: number, isFirst: boolean) => void }\n ) => {\n let cleanup: (() => void) | undefined;\n const onMouseDown = (event: MouseEvent) => {\n onChange(event.clientX, true);\n const onMove = (e: MouseEvent) => onChange(e.clientX, false);\n const onUp = () => cleanup?.();\n cleanup = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n cleanup = undefined;\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n };\n const onTouch = (event: TouchEvent) => {\n const touch = event.touches[0];\n if (touch) onChange(touch.clientX, event.type === 'touchstart');\n };\n element.addEventListener('mousedown', onMouseDown);\n element.addEventListener('touchstart', onTouch);\n element.addEventListener('touchmove', onTouch);\n return () => {\n cleanup?.();\n element.removeEventListener('mousedown', onMouseDown);\n element.removeEventListener('touchstart', onTouch);\n element.removeEventListener('touchmove', onTouch);\n };\n }\n);\n\nexport default class EuiDualRangeComponent extends Component<EuiDualRangeSignature> {\n // Defaults\n @argOrDefaultDecorator(0) min!: number;\n @argOrDefaultDecorator(100) max!: number;\n @argOrDefaultDecorator(1) step!: number;\n @argOrDefaultDecorator(false) fullWidth!: boolean;\n @argOrDefaultDecorator(false) compressed!: boolean;\n @argOrDefaultDecorator(false) showLabels!: boolean;\n @argOrDefaultDecorator(false) showInput!: boolean | string;\n @argOrDefaultDecorator(true) showRange!: boolean;\n @argOrDefaultDecorator(false) showTicks!: boolean;\n @argOrDefaultDecorator([]) levels!: EuiRangeLevel[];\n\n @service declare euiI18n: EuiI18n;\n\n //State\n @tracked id: string = this.args.id || guidFor({});\n @tracked isPopoverOpen = false;\n ///\n\n preventPopoverClose = false;\n rangeSliderRef: HTMLInputElement | null = null;\n leftPosition = 0;\n dragAcc = 0;\n\n @action\n didInsertRangeSlider(ref: HTMLInputElement | null): void {\n this.rangeSliderRef = ref;\n }\n\n get context() {\n return getEuiThemeContext(this);\n }\n\n get lowerValue(): ValueMember {\n return this.args.value ? this.args.value[0] : this.min;\n }\n\n get upperValue(): ValueMember {\n return this.args.value ? this.args.value[1] : this.max;\n }\n\n get lowerValueIsValid(): boolean {\n return isWithinRange(this.min, this.upperValue, this.lowerValue);\n }\n\n get upperValueIsValid(): boolean {\n return isWithinRange(this.lowerValue, this.max, this.upperValue);\n }\n\n get isValid(): boolean {\n return this.lowerValueIsValid && this.upperValueIsValid;\n }\n\n get lowerNumber(): number {\n return Number(this.lowerValue);\n }\n\n get upperNumber(): number {\n return Number(this.upperValue);\n }\n\n /** Upper bound of the lower thumb/input (`@max` while the upper value is empty). */\n get lowerMax(): number {\n return this.upperValue === '' ? this.max : Number(this.upperValue);\n }\n\n /** Lower bound of the upper thumb/input (`@min` while the lower value is empty). */\n get upperMin(): number {\n return this.lowerValue === '' ? this.min : Number(this.lowerValue);\n }\n\n @action\n _determineInvalidThumbMovement(\n newVal: ValueMember,\n lower: ValueMember,\n upper: ValueMember,\n e: Event\n ): void {\n // If the values are invalid, find whether the new value is in the upper\n // or lower half and move the appropriate handle to the new value,\n // while the other handle gets moved to the opposite bound (if invalid)\n const lowerHalf = Math.abs(this.max - this.min) / 2 + this.min;\n const newValIsLow = isWithinRange(this.min, lowerHalf, newVal);\n\n if (newValIsLow) {\n lower = newVal;\n upper = !this.upperValueIsValid ? this.max : upper;\n } else {\n lower = !this.lowerValueIsValid ? this.min : lower;\n upper = newVal;\n }\n\n this._handleOnChange(lower, upper, e);\n }\n\n @action\n _determineValidThumbMovement(\n newVal: ValueMember,\n lower: ValueMember,\n upper: ValueMember,\n e: Event\n ): void {\n // Lower thumb targeted or right-moving swap has occurred\n if (\n Math.abs((lower as number) - (newVal as number)) <\n Math.abs((upper as number) - (newVal as number))\n ) {\n lower = newVal;\n }\n // Upper thumb targeted or left-moving swap has occurred\n else {\n upper = newVal;\n }\n\n this._handleOnChange(lower, upper, e);\n }\n\n @action\n _determineThumbMovement(newVal: number, e: Event): void {\n // Determine thumb movement based on slider interaction\n if (!this.isValid) {\n // Non-standard positioning follows\n this._determineInvalidThumbMovement(\n newVal,\n this.lowerValue,\n this.upperValue,\n e\n );\n } else {\n // Standard positioning based on click event proximity to thumb locations\n this._determineValidThumbMovement(\n newVal,\n this.lowerValue,\n this.upperValue,\n e\n );\n }\n }\n\n @action\n _handleOnChange(lower: ValueMember, upper: ValueMember, e: Event): void {\n const isValid =\n isWithinRange(this.min, upper, lower) &&\n isWithinRange(lower, this.max, upper);\n\n this.args.onChange([lower, upper], isValid, e);\n }\n\n @action\n handleSliderChange(e: Event): void {\n this._determineThumbMovement(\n Number((e.currentTarget as HTMLInputElement).value),\n e\n );\n }\n\n @action\n _resetToRangeEnds(e: KeyboardEvent): void {\n // Arbitrary decision to pass `min` instead of `max`. Result is the same.\n this._determineInvalidThumbMovement(\n this.min,\n this.lowerValue,\n this.upperValue,\n e\n );\n }\n\n @action\n _isDirectionalKeyPress(event: KeyboardEvent): boolean {\n return (\n [\n keys.ARROW_UP,\n keys.ARROW_RIGHT,\n keys.ARROW_DOWN,\n keys.ARROW_LEFT\n ].indexOf(event.key as keys) > -1\n );\n }\n\n @action\n handleInputKeyDown(e: KeyboardEvent): void {\n // Relevant only when initial values are both `''` and `showInput` is set\n if (this._isDirectionalKeyPress(e) && !this.isValid) {\n e.preventDefault();\n this._resetToRangeEnds(e);\n }\n }\n\n @action\n handleLowerInputChange(e: Event): void {\n this._handleOnChange(\n (e.target as HTMLInputElement).value,\n this.upperValue,\n e\n );\n }\n\n @action\n handleUpperInputChange(e: Event): void {\n this._handleOnChange(\n this.lowerValue,\n (e.target as HTMLInputElement).value,\n e\n );\n }\n\n @action\n _handleKeyDown(value: ValueMember, event: KeyboardEvent): number {\n let newVal = Number(value);\n let stepRemainder = 0;\n const step = this.args.step || 1;\n\n switch (event.key) {\n case keys.ARROW_UP:\n case keys.ARROW_RIGHT:\n event.preventDefault();\n newVal += step;\n stepRemainder = (newVal - this.min) % step;\n\n if (step !== 1 && stepRemainder > 0) {\n newVal = newVal - stepRemainder;\n }\n\n break;\n case keys.ARROW_DOWN:\n case keys.ARROW_LEFT:\n event.preventDefault();\n newVal -= step;\n stepRemainder = (newVal - this.min) % step;\n\n if (step !== 1 && stepRemainder > 0) {\n newVal = newVal + (step - stepRemainder);\n }\n\n break;\n }\n\n return newVal;\n }\n\n @action\n handleLowerKeyDown(event: KeyboardEvent): void {\n let lower = this.lowerValue;\n\n switch (event.key) {\n case keys.TAB:\n return;\n default:\n if (!this.lowerValueIsValid) {\n // Relevant only when initial value is `''` and `showInput` is not set\n event.preventDefault();\n this._resetToRangeEnds(event);\n\n return;\n }\n\n lower = this._handleKeyDown(lower, event);\n }\n\n if (lower >= (this.upperValue as number) || lower < this.min) return;\n this._handleOnChange(lower, this.upperValue, event);\n }\n\n @action\n handleUpperKeyDown(event: KeyboardEvent): void {\n let upper = this.upperValue;\n\n switch (event.key) {\n case keys.TAB:\n return;\n default:\n if (!this.upperValueIsValid) {\n // Relevant only when initial value is `''` and `showInput` is not set\n event.preventDefault();\n this._resetToRangeEnds(event);\n\n return;\n }\n\n upper = this._handleKeyDown(upper, event);\n }\n\n if (upper <= (this.lowerValue as number) || upper > this.max) return;\n this._handleOnChange(this.lowerValue, upper, event);\n }\n\n /** Arrow keys on the draggable range move both values by a step. */\n @action\n handleDraggableKeyDown(event: KeyboardEvent): void {\n if (event.key === keys.TAB) return;\n const lower = this._handleKeyDown(this.lowerValue, event);\n const upper = this._handleKeyDown(this.upperValue, event);\n\n if (lower >= Number(this.upperValue) || lower < this.min) return;\n if (upper <= Number(this.lowerValue) || upper > this.max) return;\n this._handleOnChange(lower, upper, event);\n }\n\n getNearestStep(value: number): number {\n const { min, max, step } = this;\n const steps = (max - min) / step;\n const approx = Math.round(((value - min) * steps) / (max - min)) / steps;\n const bound = Math.min(Math.max(approx, 0), 1);\n const nearest = bound * (max - min) + min;\n return (Number(nearest.toPrecision(10)) * 100) / 100;\n }\n\n /** Upstream `handleDrag`: moves both values by the dragged distance. */\n @action\n handleDrag(x: number, isFirstInteraction: boolean): void {\n if (this.args.disabled) return;\n if (isFirstInteraction) {\n this.leftPosition = x;\n this.dragAcc = 0;\n }\n const { min, max } = this;\n const lowerValue = Number(this.lowerValue);\n const upperValue = Number(this.upperValue);\n const delta = this.leftPosition - x;\n this.leftPosition = x;\n this.dragAcc = this.dragAcc + delta;\n const rangeWidth = this.rangeSliderRef?.clientWidth ?? 0;\n if (!rangeWidth) return;\n const percentageOfArea = this.dragAcc / rangeWidth;\n const percentageOfRange = percentageOfArea * (max - min);\n const newLower = this.getNearestStep(lowerValue - percentageOfRange);\n const newUpper = this.getNearestStep(upperValue - percentageOfRange);\n const noMovement = newLower === lowerValue;\n const isMin = min === lowerValue && min === newLower;\n const isMax = max === upperValue && max === newUpper;\n const isOutOfRange = newLower < min || newUpper > max;\n if (noMovement || isMin || isMax || isOutOfRange) return;\n this._handleOnChange(newLower, newUpper, new Event('drag'));\n this.dragAcc = 0;\n }\n\n /** Thumb start position in % of the track (`0` until the track is measured). */\n thumbPosition = (value: number, trackWidth: number): string =>\n trackWidth\n ? `${calculateThumbPosition(value, this.min, this.max, trackWidth)}%`\n : '0';\n\n thumbColor(value: ValueMember): string | undefined {\n const color = getLevelColor(this.levels ?? [], Number(value));\n return color ? euiRangeLevelColor(color, this.context.upstream) : undefined;\n }\n\n lowerThumbStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.lowerNumber || this.min, trackWidth),\n '--euiRangeThumbColor': this.thumbColor(this.lowerValue)\n });\n\n upperThumbStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.upperNumber || this.max, trackWidth),\n '--euiRangeThumbColor': this.thumbColor(this.upperValue)\n });\n\n draggableStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.lowerNumber || this.min, trackWidth),\n right: `calc(100% - ${this.thumbPosition(\n this.upperNumber || this.max,\n trackWidth\n )} - ${this.context.upstream.euiTheme.size.base})`\n });\n\n @cached\n get styles() {\n const context = this.context;\n const dual = useEuiBorealisStyles(context, euiDualRangeStyles);\n const range = useEuiBorealisStyles(context, euiRangeStyles);\n const draggable = useEuiBorealisStyles(context, euiRangeDraggableStyles);\n const inner = useEuiBorealisStyles(context, euiRangeDraggableInnerStyles);\n const { disabled } = this.args;\n const slim = this.showTicks || !!this.args.ticks;\n return {\n rootCss: dual.euiDualRange,\n sliderCss: dual.euiDualRange__slider,\n spacer: slim\n ? `euiRange__slimHorizontalSpacer ${euiClass(context, range.euiRange__slimHorizontalSpacer)}`\n : `euiRange__horizontalSpacer ${euiClass(context, range.euiRange__horizontalSpacer)}`,\n draggable: `euiRangeDraggable ${euiClass(\n context,\n borderBox,\n draggable.euiRangeDraggable,\n this.showTicks && draggable.hasTicks,\n disabled && draggable.disabled\n )}`,\n draggableInner: `euiRangeDraggable__inner ${euiClass(\n context,\n inner.euiRangeDraggable__inner,\n disabled ? draggable.disabled : inner.enabled\n )}`\n };\n }\n\n get draggableValueText(): string {\n return `${this.lowerValue}, ${this.upperValue}`;\n }\n\n get screenReaderInstructions(): string {\n return this.euiI18n.lookupToken(\n 'euiDualRange.sliderScreenReaderInstructions',\n 'You are in a custom range slider. Use the Up and Down arrow keys to change the minimum value. Press Tab to interact with the maximum value.'\n );\n }\n\n @action\n setPreventPopoverClose(value: boolean): void {\n this.preventPopoverClose = value;\n }\n\n @action\n onThumbFocus(e: FocusEvent): void {\n this.args.onFocus?.(e);\n }\n\n @action\n onThumbBlur(e: FocusEvent): void {\n this.args.onBlur?.(e);\n }\n\n @action\n onInputFocus(e: FocusEvent): void {\n if (this.args.onFocus) {\n this.args.onFocus(e);\n }\n\n this.preventPopoverClose = true;\n this.isPopoverOpen = true;\n }\n\n @action\n onInputBlur(e: FocusEvent): void {\n later(\n this,\n () => {\n // Safari does not recognize any focus-related eventing for input[type=range]\n // making it impossible to capture its state using active/focus/relatedTarget\n // Instead, a prevention flag is set on mousedown, with a waiting period here.\n // Mousedown is viable because in the popover case, it is inaccessible via keyboard (intentionally)\n if (this.preventPopoverClose) {\n this.preventPopoverClose = false;\n\n return;\n }\n\n if (this.args.onBlur) {\n this.args.onBlur(e);\n }\n\n this.closePopover();\n },\n 200\n );\n }\n\n @action\n closePopover(): void {\n this.preventPopoverClose = false;\n this.isPopoverOpen = false;\n }\n\n /** @deprecated The track measures itself; kept for callers. */\n @action\n onResize(): void {}\n\n get digitTolerance(): number {\n return Math.max(String(this.min).length, String(this.max).length);\n }\n\n get showInputOnly(): boolean {\n return this.showInput === 'inputWithPopover';\n }\n\n get canShowDropdown(): boolean {\n return this.showInputOnly && !this.args.readOnly && !this.args.disabled;\n }\n\n /** Thumb `aria-label`/`aria-describedby` (the inputs carry them in a popover). */\n get thumbAriaLabel(): string | undefined {\n return this.showInputOnly ? undefined : this.args.ariaLabel;\n }\n\n get thumbAriaDescribedby(): string | undefined {\n return this.showInputOnly ? undefined : this.args.ariaDescribedby;\n }\n\n willDestroy() {\n super.willDestroy();\n\n this.rangeSliderRef = null;\n }\n\n <template>\n {{#let\n (and (argOrDefault @isPrependProvided true) (has-block \"prepend\"))\n (and (argOrDefault @isAppendProvided true) (has-block \"append\"))\n (and (not (argOrDefault @isFakeMaxBlock false)) (has-block \"max\"))\n (and (not (argOrDefault @isFakeMinBlock false)) (has-block \"min\"))\n as |hasPrepend hasAppend hasMaxBlock hasMinBlock|\n }}\n {{#if this.showInputOnly}}\n <EuiInputPopover\n class=\"euiDualRange__popover {{@inputPopoverProps.className}}\"\n @panelPaddingSize={{@inputPopoverProps.panelPaddingSize}}\n @anchorPosition={{@inputPopoverProps.anchorPosition}}\n @attachToAnchor={{@inputPopoverProps.attachToAnchor}}\n @display={{@inputPopoverProps.display}}\n @offset={{@inputPopoverProps.offset}}\n @repositionToCrossAxis={{@inputPopoverProps.repositionToCrossAxis}}\n @closeOnScroll={{@inputPopoverProps.closeOnScroll}}\n @panelMinWidth={{@inputPopoverProps.panelMinWidth}}\n @onPanelResize={{@inputPopoverProps.onPanelResize}}\n @css={{@inputPopoverProps.css}}\n @panelCss={{@inputPopoverProps.panelCss}}\n @repositionOnScroll={{@inputPopoverProps.repositionOnScroll}}\n @panelClassName={{@inputPopoverProps.panelClassName}}\n @panelStyle={{@inputPopoverProps.panelStyle}}\n @anchorClassName={{@inputPopoverProps.anchorClassName}}\n @zIndex={{@inputPopoverProps.zIndex}}\n @container={{@inputPopoverProps.container}}\n @buffer={{@inputPopoverProps.buffer}}\n @insert={{@inputPopoverProps.insert}}\n @hasArrow={{@inputPopoverProps.hasArrow}}\n @initialFocus={{@inputPopoverProps.initialFocus}}\n @ariaLabel={{@inputPopoverProps.ariaLabel}}\n @ariaLabelledBy={{@inputPopoverProps.ariaLabelledBy}}\n @popoverRef={{@inputPopoverProps.popoverRef}}\n @portalRef={{@inputPopoverProps.portalRef}}\n @onTrapDeactivation={{@inputPopoverProps.onTrapDeactivation}}\n @shouldAccountForOtherPopovers={{@inputPopoverProps.shouldAccountForOtherPopovers}}\n @fullWidth={{this.fullWidth}}\n @isOpen={{this.isPopoverOpen}}\n @closePopover={{this.closePopover}}\n @disableFocusTrap={{true}}\n @popoverScreenReaderText={{this.screenReaderInstructions}}\n >\n <:input>\n {{! Delimited renders a side wrapper for every block it is given }}\n {{#if (and hasPrepend hasAppend)}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n {{else if hasPrepend}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n </EuiFormControlLayoutDelimited>\n {{else if hasAppend}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n {{else}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n </EuiFormControlLayoutDelimited>\n {{/if}}\n </:input>\n <:content>\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @css={{this.styles.rootCss}}\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if (and this.showInput (not this.showInputOnly))}}\n <DualRangeInput @range={{this}} @side=\"min\" ...attributes />\n <div class={{this.styles.spacer}}></div>\n {{/if}}\n {{#if this.showLabels}}\n <EuiRangeLabel @side=\"min\" @disabled={{@disabled}}>\n {{#if hasMinBlock}}\n {{yield this.min to=\"min\"}}\n {{else}}\n {{this.min}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n <EuiRangeTrack\n aria-hidden={{if (eq this.showInput true) \"true\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n as |trackWidth|\n >\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @css={{this.styles.sliderCss}}\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n ...attributes\n {{didInsert this.didInsertRangeSlider}}\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleSliderChange}}\n />\n {{#if (and @isDraggable this.isValid)}}\n <div\n class={{this.styles.draggable}}\n role=\"slider\"\n aria-valuemin={{this.min}}\n aria-valuemax={{this.max}}\n aria-valuenow={{this.lowerNumber}}\n aria-valuetext={{this.draggableValueText}}\n aria-disabled={{if @disabled \"true\" \"false\"}}\n aria-label={{this.thumbAriaLabel}}\n aria-describedby={{this.thumbAriaDescribedby}}\n tabindex={{if @disabled \"-1\" \"0\"}}\n style={{this.draggableStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleDraggableKeyDown}}\n >\n <div\n class={{this.styles.draggableInner}}\n {{mouseMove onChange=this.handleDrag}}\n ></div>\n </div>\n {{/if}}\n <EuiRangeThumb\n @min={{this.min}}\n @max={{this.upperNumber}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.lowerThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n @min={{this.lowerNumber}}\n @max={{this.max}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.upperThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\n />\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @showTicks={{this.showTicks}}\n @min={{this.min}}\n @max={{this.max}}\n @lowerValue={{this.lowerNumber}}\n @upperValue={{this.upperNumber}}\n @levels={{this.levels}}\n @trackWidth={{trackWidth}}\n />\n {{/if}}\n </EuiRangeTrack>\n {{#if this.showLabels}}\n <EuiRangeLabel @disabled={{@disabled}}>\n {{#if hasMaxBlock}}\n {{yield this.max to=\"max\"}}\n {{else}}\n {{this.max}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n {{#if (and this.showInput (not this.showInputOnly))}}\n <div class={{this.styles.spacer}}></div>\n <DualRangeInput @range={{this}} @side=\"max\" ...attributes />\n {{/if}}\n </EuiRangeWrapper>\n </:content>\n </EuiInputPopover>\n {{else}}\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @css={{this.styles.rootCss}}\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if (and this.showInput (not this.showInputOnly))}}\n <DualRangeInput @range={{this}} @side=\"min\" ...attributes />\n <div class={{this.styles.spacer}}></div>\n {{/if}}\n {{#if this.showLabels}}\n <EuiRangeLabel @side=\"min\" @disabled={{@disabled}}>\n {{#if hasMinBlock}}\n {{yield this.min to=\"min\"}}\n {{else}}\n {{this.min}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n <EuiRangeTrack\n aria-hidden={{if (eq this.showInput true) \"true\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n as |trackWidth|\n >\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @css={{this.styles.sliderCss}}\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n ...attributes\n {{didInsert this.didInsertRangeSlider}}\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleSliderChange}}\n />\n {{#if (and @isDraggable this.isValid)}}\n <div\n class={{this.styles.draggable}}\n role=\"slider\"\n aria-valuemin={{this.min}}\n aria-valuemax={{this.max}}\n aria-valuenow={{this.lowerNumber}}\n aria-valuetext={{this.draggableValueText}}\n aria-disabled={{if @disabled \"true\" \"false\"}}\n aria-label={{this.thumbAriaLabel}}\n aria-describedby={{this.thumbAriaDescribedby}}\n tabindex={{if @disabled \"-1\" \"0\"}}\n style={{this.draggableStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleDraggableKeyDown}}\n >\n <div\n class={{this.styles.draggableInner}}\n {{mouseMove onChange=this.handleDrag}}\n ></div>\n </div>\n {{/if}}\n <EuiRangeThumb\n @min={{this.min}}\n @max={{this.upperNumber}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.lowerThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n @min={{this.lowerNumber}}\n @max={{this.max}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.upperThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\n />\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @showTicks={{this.showTicks}}\n @min={{this.min}}\n @max={{this.max}}\n @lowerValue={{this.lowerNumber}}\n @upperValue={{this.upperNumber}}\n @levels={{this.levels}}\n @trackWidth={{trackWidth}}\n />\n {{/if}}\n </EuiRangeTrack>\n {{#if this.showLabels}}\n <EuiRangeLabel @disabled={{@disabled}}>\n {{#if hasMaxBlock}}\n {{yield this.max to=\"max\"}}\n {{else}}\n {{this.max}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n {{#if (and this.showInput (not this.showInputOnly))}}\n <div class={{this.styles.spacer}}></div>\n <DualRangeInput @range={{this}} @side=\"max\" ...attributes />\n {{/if}}\n </EuiRangeWrapper>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["DualRangeInput","setComponentTemplate","precompileTemplate","strictMode","scope","eq","EuiRangeInput","concat","not","and","on","fn","optional","templateOnly","borderBox","boxSizing","mouseMove","modifier","element","_","onChange","cleanup","onMouseDown","event","clientX","onMove","e","onUp","document","removeEventListener","undefined","addEventListener","onTouch","touch","touches","type","EuiDualRangeComponent","Component","g","prototype","argOrDefaultDecorator","i","service","tracked","args","id","guidFor","preventPopoverClose","rangeSliderRef","leftPosition","dragAcc","didInsertRangeSlider","ref","n","action","context","getEuiThemeContext","lowerValue","value","min","upperValue","max","lowerValueIsValid","isWithinRange","upperValueIsValid","isValid","lowerNumber","Number","upperNumber","lowerMax","upperMin","_determineInvalidThumbMovement","newVal","lower","upper","lowerHalf","Math","abs","newValIsLow","_handleOnChange","_determineValidThumbMovement","_determineThumbMovement","handleSliderChange","currentTarget","_resetToRangeEnds","_isDirectionalKeyPress","keys","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","ARROW_LEFT","indexOf","key","handleInputKeyDown","preventDefault","handleLowerInputChange","target","handleUpperInputChange","_handleKeyDown","stepRemainder","step","handleLowerKeyDown","TAB","handleUpperKeyDown","handleDraggableKeyDown","getNearestStep","steps","approx","round","bound","nearest","toPrecision","handleDrag","x","isFirstInteraction","disabled","delta","rangeWidth","clientWidth","percentageOfArea","percentageOfRange","newLower","newUpper","noMovement","isMin","isMax","isOutOfRange","Event","thumbPosition","trackWidth","calculateThumbPosition","thumbColor","color","getLevelColor","levels","euiRangeLevelColor","upstream","lowerThumbStyle","logicalStyle","left","upperThumbStyle","draggableStyle","right","euiTheme","size","base","styles","dual","useEuiBorealisStyles","euiDualRangeStyles","range","euiRangeStyles","draggable","euiRangeDraggableStyles","inner","euiRangeDraggableInnerStyles","slim","showTicks","ticks","rootCss","euiDualRange","sliderCss","euiDualRange__slider","spacer","euiClass","euiRange__slimHorizontalSpacer","euiRange__horizontalSpacer","euiRangeDraggable","hasTicks","draggableInner","euiRangeDraggable__inner","enabled","cached","draggableValueText","screenReaderInstructions","euiI18n","lookupToken","setPreventPopoverClose","onThumbFocus","onFocus","onThumbBlur","onBlur","onInputFocus","isPopoverOpen","onInputBlur","later","closePopover","onResize","digitTolerance","String","length","showInputOnly","showInput","canShowDropdown","readOnly","thumbAriaLabel","ariaLabel","thumbAriaDescribedby","ariaDescribedby","willDestroy","argOrDefault","EuiInputPopover","EuiFormControlLayoutDelimited","EuiRangeWrapper","EuiRangeLabel","EuiRangeTrack","EuiRangeSlider","didInsert","EuiRangeThumb","EuiRangeHighlight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsLA;;;AAGC;AACD,MAAMA,cAOD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,6qCAAA,EAmDL;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;IAAAC,aAAA;IAAAC,MAAA;IAAAC,GAAA;IAAAC,GAAA;IAAAC,EAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAEV,MAAMC,SAAA,GAAY;AAAEC,EAAAA,SAAA,EAAW;AAAa,CAAA;AAE5C;AACA,MAAMC,SAAA,GAAYC,QAAA,CAChB,CACEC,OAAS,EACTC,CAAU,EACV;AAAEC,EAAAA;AAA+D,CAAA,KAAA;AAEjE,EAAA,IAAIC,OAAiC;EACrC,MAAMC,WAAA,GAAeC,KAAO,IAAA;AAC1BH,IAAAA,QAAA,CAASG,KAAA,CAAMC,OAAO,EAAE,IAAA,CAAA;IACxB,MAAMC,SAAUC,KAAkBN,QAAA,CAASM,CAAA,CAAEF,OAAO,EAAE,KAAA,CAAA;AACtD,IAAA,MAAMG,OAAOA,MAAMN,OAAA,IAAA;IACnBA,OAAA,GAAUA,MAAA;AACRO,MAAAA,QAAA,CAASC,mBAAmB,CAAC,WAAA,EAAaJ,MAAA,CAAA;AAC1CG,MAAAA,QAAA,CAASC,mBAAmB,CAAC,SAAA,EAAWF,IAAA,CAAA;AACxCN,MAAAA,OAAA,GAAUS,SAAA;IACZ,CAAA;AACAF,IAAAA,QAAA,CAASG,gBAAgB,CAAC,WAAA,EAAaN,MAAA,CAAA;AACvCG,IAAAA,QAAA,CAASG,gBAAgB,CAAC,SAAA,EAAWJ,IAAA,CAAA;EACvC,CAAA;EACA,MAAMK,OAAA,GAAWT,KAAO,IAAA;AACtB,IAAA,MAAMU,KAAA,GAAQV,KAAA,CAAMW,OAAO,CAAC,CAAA,CAAE;AAC9B,IAAA,IAAID,OAAOb,QAAA,CAASa,KAAA,CAAMT,OAAO,EAAED,KAAA,CAAMY,IAAI,KAAK,YAAA,CAAA;EACpD,CAAA;AACAjB,EAAAA,OAAA,CAAQa,gBAAgB,CAAC,WAAA,EAAaT,WAAA,CAAA;AACtCJ,EAAAA,OAAA,CAAQa,gBAAgB,CAAC,YAAA,EAAcC,OAAA,CAAA;AACvCd,EAAAA,OAAA,CAAQa,gBAAgB,CAAC,WAAA,EAAaC,OAAA,CAAA;AACtC,EAAA,OAAO,MAAA;AACLX,IAAAA,OAAA,IAAA;AACAH,IAAAA,OAAA,CAAQW,mBAAmB,CAAC,WAAA,EAAaP,WAAA,CAAA;AACzCJ,IAAAA,OAAA,CAAQW,mBAAmB,CAAC,YAAA,EAAcG,OAAA,CAAA;AAC1Cd,IAAAA,OAAA,CAAQW,mBAAmB,CAAC,WAAA,EAAaG,OAAA,CAAA;EAC3C,CAAA;AACF,CAAA,CAAA;AAGa,MAAMI,8BAA8BC,SAAA,CAAU;AAAA,EAAA;AAAAC,IAAAA,CAAA,MAAAC,SAAA,EAAA,KAAA,EAAA,CAE1DC,qBAAA,CAAsB,CAAA,CAAA,CAAA,CAAA;AAAA;EAAA,IAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,MAAA,EAAA;AADvB,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,KAAA,EAAA,CAECC,qBAAA,CAAsB,GAAA,CAAA,CAAA,CAAA;AAAA;EAAA,IAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,MAAA,EAAA,CACtBC,qBAAA,CAAsB,CAAA,CAAA,CAAA,CAAA;AAAA;EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,WAAA,EAAA,CACtBC,qBAAA,CAAsB,KAAA,CAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,YAAA,EAAA,CACtBC,qBAAA,CAAsB,KAAA,CAAA,CAAA,CAAA;AAAA;EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,YAAA,EAAA,CACtBC,qBAAA,CAAsB,KAAA,CAAA,CAAA,CAAA;AAAA;EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,WAAA,EAAA,CACtBC,qBAAA,CAAsB,KAAA,CAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,WAAA,EAAA,CACtBC,qBAAA,CAAsB,IAAA,CAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,WAAA,EAAA,CACtBC,qBAAA,CAAsB,KAAA,CAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,MAAAC,SAAA,EAAA,QAAA,EAAA,CACtBC,sBAAsB,EAAE,CAAA,CAAA,CAAA;AAAA;EAAA,OAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,QAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAExBG,OAAA,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAD,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,IAAA,EAAA,CAGAI,OAAA,CAAA,EAAA,YAAA;MAAA,OAAqB,IAAI,CAACC,IAAI,CAACC,EAAE,IAAIC,OAAA,CAAQ,EAAC,CAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,GAAA,IAAAL,CAAA,CAAA,IAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA;AAD/C,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAECI,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,cAAA,IAAAF,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,EAAA,MAAA;AACzB;AAEAM,EAAAA,mBAAA,GAAsB,KAAA;AACtBC,EAAAA,cAAA,GAA0C,IAAA;AAC1CC,EAAAA,YAAA,GAAe,CAAA;AACfC,EAAAA,OAAA,GAAU,CAAA;EAGVC,oBAAAA,CAAqBC,GAA4B,EAAQ;IACvD,IAAI,CAACJ,cAAc,GAAGI,GAAA;AACxB,EAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,sBAAA,EAAA,CAHCe,MAAA,CAAA,CAAA;AAAA;EAKD,IAAIC,OAAAA,GAAU;IACZ,OAAOC,mBAAmB,IAAI,CAAA;AAChC,EAAA;EAEA,IAAIC,aAA0B;AAC5B,IAAA,OAAO,IAAI,CAACb,IAAI,CAACc,KAAK,GAAG,IAAI,CAACd,IAAI,CAACc,KAAK,CAAC,CAAA,CAAE,GAAG,IAAI,CAACC,GAAG;AACxD,EAAA;EAEA,IAAIC,aAA0B;AAC5B,IAAA,OAAO,IAAI,CAAChB,IAAI,CAACc,KAAK,GAAG,IAAI,CAACd,IAAI,CAACc,KAAK,CAAC,CAAA,CAAE,GAAG,IAAI,CAACG,GAAG;AACxD,EAAA;EAEA,IAAIC,iBAAAA,GAA6B;AAC/B,IAAA,OAAOC,aAAA,CAAc,IAAI,CAACJ,GAAG,EAAE,IAAI,CAACC,UAAU,EAAE,IAAI,CAACH,UAAU,CAAA;AACjE,EAAA;EAEA,IAAIO,iBAAAA,GAA6B;AAC/B,IAAA,OAAOD,aAAA,CAAc,IAAI,CAACN,UAAU,EAAE,IAAI,CAACI,GAAG,EAAE,IAAI,CAACD,UAAU,CAAA;AACjE,EAAA;EAEA,IAAIK,OAAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,CAACH,iBAAiB,IAAI,IAAI,CAACE,iBAAiB;AACzD,EAAA;EAEA,IAAIE,WAAAA,GAAsB;AACxB,IAAA,OAAOC,MAAA,CAAO,IAAI,CAACV,UAAU,CAAA;AAC/B,EAAA;EAEA,IAAIW,WAAAA,GAAsB;AACxB,IAAA,OAAOD,MAAA,CAAO,IAAI,CAACP,UAAU,CAAA;AAC/B,EAAA;AAEA;EACA,IAAIS,QAAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,CAACT,UAAU,KAAK,EAAA,GAAK,IAAI,CAACC,GAAG,GAAGM,MAAA,CAAO,IAAI,CAACP,UAAU,CAAA;AACnE,EAAA;AAEA;EACA,IAAIU,QAAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,CAACb,UAAU,KAAK,EAAA,GAAK,IAAI,CAACE,GAAG,GAAGQ,MAAA,CAAO,IAAI,CAACV,UAAU,CAAA;AACnE,EAAA;EAGAc,8BAAAA,CACEC,MAAmB,EACnBC,KAAkB,EAClBC,KAAkB,EAClBhD,CAAQ,EACF;AACN;AACA;AACA;AACA,IAAA,MAAMiD,SAAA,GAAYC,IAAA,CAAKC,GAAG,CAAC,IAAI,CAAChB,GAAG,GAAG,IAAI,CAACF,GAAG,CAAA,GAAI,CAAA,GAAI,IAAI,CAACA,GAAG;IAC9D,MAAMmB,cAAcf,aAAA,CAAc,IAAI,CAACJ,GAAG,EAAEgB,SAAA,EAAWH,MAAA,CAAA;AAEvD,IAAA,IAAIM,WAAA,EAAa;AACfL,MAAAA,KAAA,GAAQD,MAAA;MACRE,KAAA,GAAQ,CAAC,IAAI,CAACV,iBAAiB,GAAG,IAAI,CAACH,GAAG,GAAGa,KAAA;AAC/C,IAAA,CAAA,MAAO;MACLD,KAAA,GAAQ,CAAC,IAAI,CAACX,iBAAiB,GAAG,IAAI,CAACH,GAAG,GAAGc,KAAA;AAC7CC,MAAAA,KAAA,GAAQF,MAAA;AACV,IAAA;IAEA,IAAI,CAACO,eAAe,CAACN,KAAA,EAAOC,KAAA,EAAOhD,CAAA,CAAA;AACrC,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,gCAAA,EAAA,CAtBCe,MAAA,CAAA,CAAA;AAAA;EAyBD0B,4BAAAA,CACER,MAAmB,EACnBC,KAAkB,EAClBC,KAAkB,EAClBhD,CAAQ,EACF;AACN;AACA,IAAA,IACEkD,IAAA,CAAKC,GAAG,CAAEJ,QAAoBD,UAC9BI,IAAA,CAAKC,GAAG,CAAEH,KAAA,GAAoBF,MAAgB,CAAA,EAC9C;AACAC,MAAAA,KAAA,GAAQD,MAAA;AACV,IAAA,CAAA,MAEK;AACHE,MAAAA,KAAA,GAAQF,MAAA;AACV,IAAA;IAEA,IAAI,CAACO,eAAe,CAACN,KAAA,EAAOC,KAAA,EAAOhD,CAAA,CAAA;AACrC,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,8BAAA,EAAA,CApBCe,MAAA,CAAA,CAAA;AAAA;AAuBD2B,EAAAA,uBAAAA,CAAwBT,MAAc,EAAE9C,CAAQ,EAAQ;AACtD;AACA,IAAA,IAAI,CAAC,IAAI,CAACuC,OAAO,EAAE;AACjB;AACA,MAAA,IAAI,CAACM,8BAA8B,CACjCC,MAAA,EACA,IAAI,CAACf,UAAU,EACf,IAAI,CAACG,UAAU,EACflC,CAAA,CAAA;AAEJ,IAAA,CAAA,MAAO;AACL;AACA,MAAA,IAAI,CAACsD,4BAA4B,CAC/BR,MAAA,EACA,IAAI,CAACf,UAAU,EACf,IAAI,CAACG,UAAU,EACflC,CAAA,CAAA;AAEJ,IAAA;AACF,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,yBAAA,EAAA,CApBCe,MAAA,CAAA,CAAA;AAAA;AAuBDyB,EAAAA,eAAAA,CAAgBN,KAAkB,EAAEC,KAAkB,EAAEhD,CAAQ,EAAQ;IACtE,MAAMuC,OAAA,GACJF,aAAA,CAAc,IAAI,CAACJ,GAAG,EAAEe,KAAA,EAAOD,KAAA,CAAA,IAC/BV,aAAA,CAAcU,KAAA,EAAO,IAAI,CAACZ,GAAG,EAAEa,KAAA,CAAA;AAEjC,IAAA,IAAI,CAAC9B,IAAI,CAACxB,QAAQ,CAAC,CAACqD,KAAA,EAAOC,KAAA,CAAM,EAAET,OAAA,EAASvC,CAAA,CAAA;AAC9C,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,iBAAA,EAAA,CAPCe,MAAA,CAAA,CAAA;AAAA;EAUD4B,kBAAAA,CAAmBxD,CAAQ,EAAQ;AACjC,IAAA,IAAI,CAACuD,uBAAuB,CAC1Bd,MAAA,CAAQzC,CAAA,CAAEyD,aAAa,CAAsBzB,KAAK,CAAA,EAClDhC,CAAA,CAAA;AAEJ,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,oBAAA,EAAA,CANCe,MAAA,CAAA,CAAA;AAAA;EASD8B,iBAAAA,CAAkB1D,CAAgB,EAAQ;AACxC;AACA,IAAA,IAAI,CAAC6C,8BAA8B,CACjC,IAAI,CAACZ,GAAG,EACR,IAAI,CAACF,UAAU,EACf,IAAI,CAACG,UAAU,EACflC,CAAA,CAAA;AAEJ,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,mBAAA,EAAA,CATCe,MAAA,CAAA,CAAA;AAAA;EAYD+B,sBAAAA,CAAuB9D,KAAoB,EAAW;IACpD,OACE,CACE+D,IAAA,CAAKC,QAAQ,EACbD,IAAA,CAAKE,WAAW,EAChBF,IAAA,CAAKG,UAAU,EACfH,IAAA,CAAKI,UAAU,CAChB,CAACC,OAAO,CAACpE,KAAA,CAAMqE,GAAO,CAAA,GAAQ,EACjC;AACF,EAAA;AAAA,EAAA;IAAAvC,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,wBAAA,EAAA,CAVCe,MAAA,CAAA,CAAA;AAAA;EAaDuC,kBAAAA,CAAmBnE,CAAgB,EAAQ;AACzC;IACA,IAAI,IAAI,CAAC2D,sBAAsB,CAAC3D,MAAM,CAAC,IAAI,CAACuC,OAAO,EAAE;MACnDvC,CAAA,CAAEoE,cAAc,EAAA;AAChB,MAAA,IAAI,CAACV,iBAAiB,CAAC1D,CAAA,CAAA;AACzB,IAAA;AACF,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,oBAAA,EAAA,CAPCe,MAAA,CAAA,CAAA;AAAA;EAUDyC,sBAAAA,CAAuBrE,CAAQ,EAAQ;AACrC,IAAA,IAAI,CAACqD,eAAe,CACjBrD,EAAEsE,MAAM,CAAsBtC,KAAK,EACpC,IAAI,CAACE,UAAU,EACflC,CAAA,CAAA;AAEJ,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,wBAAA,EAAA,CAPCe,MAAA,CAAA,CAAA;AAAA;EAUD2C,sBAAAA,CAAuBvE,CAAQ,EAAQ;AACrC,IAAA,IAAI,CAACqD,eAAe,CAClB,IAAI,CAACtB,UAAU,EACd/B,CAAA,CAAEsE,MAAM,CAAsBtC,KAAK,EACpChC,CAAA,CAAA;AAEJ,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,wBAAA,EAAA,CAPCe,MAAA,CAAA,CAAA;AAAA;AAUD4C,EAAAA,cAAAA,CAAexC,KAAkB,EAAEnC,KAAoB,EAAU;AAC/D,IAAA,IAAIiD,SAASL,MAAA,CAAOT,KAAA,CAAA;IACpB,IAAIyC,aAAA,GAAgB,CAAA;IACpB,MAAMC,OAAO,IAAI,CAACxD,IAAI,CAACwD,IAAI,IAAI,CAAA;IAE/B,QAAQ7E,MAAMqE,GAAG;MACf,KAAKN,KAAKC,QAAQ;MAClB,KAAKD,KAAKE,WAAW;QACnBjE,KAAA,CAAMuE,cAAc,EAAA;AACpBtB,QAAAA,MAAA,IAAU4B,IAAA;QACVD,aAAA,GAAgB,CAAC3B,MAAA,GAAS,IAAI,CAACb,GAAG,IAAIyC,IAAA;AAEtC,QAAA,IAAIA,IAAA,KAAS,CAAA,IAAKD,aAAA,GAAgB,CAAA,EAAG;UACnC3B,MAAA,GAASA,MAAA,GAAS2B,aAAA;AACpB,QAAA;AAEA,QAAA;MACF,KAAKb,KAAKG,UAAU;MACpB,KAAKH,KAAKI,UAAU;QAClBnE,KAAA,CAAMuE,cAAc,EAAA;AACpBtB,QAAAA,MAAA,IAAU4B,IAAA;QACVD,aAAA,GAAgB,CAAC3B,MAAA,GAAS,IAAI,CAACb,GAAG,IAAIyC,IAAA;AAEtC,QAAA,IAAIA,IAAA,KAAS,CAAA,IAAKD,aAAA,GAAgB,CAAA,EAAG;AACnC3B,UAAAA,MAAA,GAASA,MAAA,IAAU4B,IAAA,GAAOD,aAAa,CAAA;AACzC,QAAA;AAEA,QAAA;AACJ;AAEA,IAAA,OAAO3B,MAAA;AACT,EAAA;AAAA,EAAA;IAAAnB,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,gBAAA,EAAA,CAhCCe,MAAA,CAAA,CAAA;AAAA;EAmCD+C,kBAAAA,CAAmB9E,KAAoB,EAAQ;AAC7C,IAAA,IAAIkD,KAAA,GAAQ,IAAI,CAAChB,UAAU;IAE3B,QAAQlC,MAAMqE,GAAG;MACf,KAAKN,KAAKgB,GAAG;AACX,QAAA;AACF,MAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAACxC,iBAAiB,EAAE;AAC3B;UACAvC,KAAA,CAAMuE,cAAc,EAAA;AACpB,UAAA,IAAI,CAACV,iBAAiB,CAAC7D,KAAA,CAAA;AAEvB,UAAA;AACF,QAAA;QAEAkD,KAAA,GAAQ,IAAI,CAACyB,cAAc,CAACzB,KAAA,EAAOlD,KAAA,CAAA;AACvC;IAEA,IAAIkD,KAAA,IAAU,IAAI,CAACb,UAAoB,IAAKa,KAAA,GAAQ,IAAI,CAACd,GAAG,EAAE;IAC9D,IAAI,CAACoB,eAAe,CAACN,OAAO,IAAI,CAACb,UAAU,EAAErC,KAAA,CAAA;AAC/C,EAAA;AAAA,EAAA;IAAA8B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,oBAAA,EAAA,CArBCe,MAAA,CAAA,CAAA;AAAA;EAwBDiD,kBAAAA,CAAmBhF,KAAoB,EAAQ;AAC7C,IAAA,IAAImD,KAAA,GAAQ,IAAI,CAACd,UAAU;IAE3B,QAAQrC,MAAMqE,GAAG;MACf,KAAKN,KAAKgB,GAAG;AACX,QAAA;AACF,MAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAACtC,iBAAiB,EAAE;AAC3B;UACAzC,KAAA,CAAMuE,cAAc,EAAA;AACpB,UAAA,IAAI,CAACV,iBAAiB,CAAC7D,KAAA,CAAA;AAEvB,UAAA;AACF,QAAA;QAEAmD,KAAA,GAAQ,IAAI,CAACwB,cAAc,CAACxB,KAAA,EAAOnD,KAAA,CAAA;AACvC;IAEA,IAAImD,KAAA,IAAU,IAAI,CAACjB,UAAoB,IAAKiB,KAAA,GAAQ,IAAI,CAACb,GAAG,EAAE;IAC9D,IAAI,CAACkB,eAAe,CAAC,IAAI,CAACtB,UAAU,EAAEiB,KAAA,EAAOnD,KAAA,CAAA;AAC/C,EAAA;AAEA;AAAA,EAAA;IAAA8B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,oBAAA,EAAA,CAvBCe,MAAA,CAAA,CAAA;AAAA;EAyBDkD,sBAAAA,CAAuBjF,KAAoB,EAAQ;AACjD,IAAA,IAAIA,KAAA,CAAMqE,GAAG,KAAKN,IAAA,CAAKgB,GAAG,EAAE;IAC5B,MAAM7B,KAAA,GAAQ,IAAI,CAACyB,cAAc,CAAC,IAAI,CAACzC,UAAU,EAAElC,KAAA,CAAA;IACnD,MAAMmD,KAAA,GAAQ,IAAI,CAACwB,cAAc,CAAC,IAAI,CAACtC,UAAU,EAAErC,KAAA,CAAA;AAEnD,IAAA,IAAIkD,KAAA,IAASN,MAAA,CAAO,IAAI,CAACP,UAAU,KAAKa,KAAA,GAAQ,IAAI,CAACd,GAAG,EAAE;AAC1D,IAAA,IAAIe,KAAA,IAASP,MAAA,CAAO,IAAI,CAACV,UAAU,KAAKiB,KAAA,GAAQ,IAAI,CAACb,GAAG,EAAE;IAC1D,IAAI,CAACkB,eAAe,CAACN,KAAA,EAAOC,KAAA,EAAOnD,KAAA,CAAA;AACrC,EAAA;AAAA,EAAA;IAAA8B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,wBAAA,EAAA,CATCe,MAAA,CAAA,CAAA;AAAA;EAWDmD,cAAAA,CAAe/C,KAAa,EAAU;IACpC,MAAM;MAAEC,GAAG;MAAEE,GAAG;AAAEuC,MAAAA;AAAI,KAAE,GAAG,IAAI;AAC/B,IAAA,MAAMM,KAAA,GAAQ,CAAC7C,GAAA,GAAMF,GAAG,IAAIyC,IAAA;AAC5B,IAAA,MAAMO,MAAA,GAAS/B,IAAA,CAAKgC,KAAK,CAAE,CAAClD,KAAA,GAAQC,GAAG,IAAI+C,KAAK,IAAK7C,GAAA,GAAMF,GAAG,CAAA,CAAA,GAAK+C,KAAA;AACnE,IAAA,MAAMG,KAAA,GAAQjC,KAAKjB,GAAG,CAACiB,KAAKf,GAAG,CAAC8C,QAAQ,CAAA,CAAA,EAAI,CAAA,CAAA;IAC5C,MAAMG,OAAA,GAAUD,KAAA,IAAShD,GAAA,GAAMF,GAAG,CAAA,GAAIA,GAAA;AACtC,IAAA,OAAQQ,MAAA,CAAO2C,OAAA,CAAQC,WAAW,CAAC,EAAA,CAAA,CAAA,GAAO,GAAG,GAAI,GAAA;AACnD,EAAA;AAEA;AAEAC,EAAAA,UAAAA,CAAWC,CAAS,EAAEC,kBAA2B,EAAQ;AACvD,IAAA,IAAI,IAAI,CAACtE,IAAI,CAACuE,QAAQ,EAAE;AACxB,IAAA,IAAID,kBAAA,EAAoB;MACtB,IAAI,CAACjE,YAAY,GAAGgE,CAAA;MACpB,IAAI,CAAC/D,OAAO,GAAG,CAAA;AACjB,IAAA;IACA,MAAM;MAAES,GAAG;AAAEE,MAAAA;AAAG,KAAE,GAAG,IAAI;AACzB,IAAA,MAAMJ,UAAA,GAAaU,MAAA,CAAO,IAAI,CAACV,UAAU,CAAA;AACzC,IAAA,MAAMG,UAAA,GAAaO,MAAA,CAAO,IAAI,CAACP,UAAU,CAAA;AACzC,IAAA,MAAMwD,KAAA,GAAQ,IAAI,CAACnE,YAAY,GAAGgE,CAAA;IAClC,IAAI,CAAChE,YAAY,GAAGgE,CAAA;AACpB,IAAA,IAAI,CAAC/D,OAAO,GAAG,IAAI,CAACA,OAAO,GAAGkE,KAAA;IAC9B,MAAMC,UAAA,GAAa,IAAI,CAACrE,cAAc,EAAEsE,WAAA,IAAe,CAAA;IACvD,IAAI,CAACD,UAAA,EAAY;AACjB,IAAA,MAAME,gBAAA,GAAmB,IAAI,CAACrE,OAAO,GAAGmE,UAAA;AACxC,IAAA,MAAMG,iBAAA,GAAoBD,gBAAA,IAAoB1D,GAAA,GAAMF,GAAG,CAAA;IACvD,MAAM8D,QAAA,GAAW,IAAI,CAAChB,cAAc,CAAChD,UAAA,GAAa+D,iBAAA,CAAA;IAClD,MAAME,QAAA,GAAW,IAAI,CAACjB,cAAc,CAAC7C,UAAA,GAAa4D,iBAAA,CAAA;AAClD,IAAA,MAAMG,aAAaF,QAAA,KAAahE,UAAA;IAChC,MAAMmE,KAAA,GAAQjE,GAAA,KAAQF,UAAA,IAAcE,GAAA,KAAQ8D,QAAA;IAC5C,MAAMI,KAAA,GAAQhE,GAAA,KAAQD,UAAA,IAAcC,GAAA,KAAQ6D,QAAA;IAC5C,MAAMI,YAAA,GAAeL,QAAA,GAAW9D,GAAA,IAAO+D,QAAA,GAAW7D,GAAA;AAClD,IAAA,IAAI8D,UAAA,IAAcC,KAAA,IAASC,KAAA,IAASC,YAAA,EAAc;AAClD,IAAA,IAAI,CAAC/C,eAAe,CAAC0C,QAAA,EAAUC,QAAA,EAAU,IAAIK,KAAA,CAAM,MAAA,CAAA,CAAA;IACnD,IAAI,CAAC7E,OAAO,GAAG,CAAA;AACjB,EAAA;AAEA;AAAA,EAAA;IAAAG,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,YAAA,EAAA,CA5BCe,MAAA,CAAA,CAAA;AAAA;EA6BD0E,aAAA,GAAgBA,CAACtE,KAAa,EAAEuE,UAAkB,KAChDA,UAAA,GACI,CAAA,EAAGC,sBAAA,CAAuBxE,KAAA,EAAO,IAAI,CAACC,GAAG,EAAE,IAAI,CAACE,GAAG,EAAEoE,UAAA,CAAA,CAAA,CAAA,CAAc,GACnE,GAAA;EAENE,UAAAA,CAAWzE,KAAkB,EAAsB;AACjD,IAAA,MAAM0E,KAAA,GAAQC,cAAc,IAAI,CAACC,MAAM,IAAI,EAAE,EAAEnE,MAAA,CAAOT,KAAA,CAAA,CAAA;AACtD,IAAA,OAAO0E,KAAA,GAAQG,mBAAmBH,KAAA,EAAO,IAAI,CAAC7E,OAAO,CAACiF,QAAQ,CAAA,GAAI1G,SAAA;AACpE,EAAA;AAEA2G,EAAAA,eAAA,GAAmBR,UAAkB,IACnCS,YAAA,CAAa;AACXC,IAAAA,IAAA,EAAM,IAAI,CAACX,aAAa,CAAC,IAAI,CAAC9D,WAAW,IAAI,IAAI,CAACP,GAAG,EAAEsE,UAAA,CAAA;AACvD,IAAA,sBAAA,EAAwB,IAAI,CAACE,UAAU,CAAC,IAAI,CAAC1E,UAAU;AACzD,GAAA,CAAA;AAEFmF,EAAAA,eAAA,GAAmBX,UAAkB,IACnCS,YAAA,CAAa;AACXC,IAAAA,IAAA,EAAM,IAAI,CAACX,aAAa,CAAC,IAAI,CAAC5D,WAAW,IAAI,IAAI,CAACP,GAAG,EAAEoE,UAAA,CAAA;AACvD,IAAA,sBAAA,EAAwB,IAAI,CAACE,UAAU,CAAC,IAAI,CAACvE,UAAU;AACzD,GAAA,CAAA;AAEFiF,EAAAA,cAAA,GAAkBZ,UAAkB,IAClCS,YAAA,CAAa;AACXC,IAAAA,IAAA,EAAM,IAAI,CAACX,aAAa,CAAC,IAAI,CAAC9D,WAAW,IAAI,IAAI,CAACP,GAAG,EAAEsE,UAAA,CAAA;IACvDa,KAAA,EAAO,CAAA,YAAA,EAAe,IAAI,CAACd,aAAa,CACtC,IAAI,CAAC5D,WAAW,IAAI,IAAI,CAACP,GAAG,EAC5BoE,UAAA,CAAA,CAAA,GAAA,EACK,IAAI,CAAC1E,OAAO,CAACiF,QAAQ,CAACO,QAAQ,CAACC,IAAI,CAACC,IAAI,CAAA,CAAA;AACjD,GAAA,CAAA;EAEF,IACIC,MAAAA,GAAS;AACX,IAAA,MAAM3F,OAAA,GAAU,IAAI,CAACA,OAAO;AAC5B,IAAA,MAAM4F,IAAA,GAAOC,qBAAqB7F,OAAA,EAAS8F,kBAAA,CAAA;AAC3C,IAAA,MAAMC,KAAA,GAAQF,qBAAqB7F,OAAA,EAASgG,cAAA,CAAA;AAC5C,IAAA,MAAMC,SAAA,GAAYJ,qBAAqB7F,OAAA,EAASkG,uBAAA,CAAA;AAChD,IAAA,MAAMC,KAAA,GAAQN,qBAAqB7F,OAAA,EAASoG,4BAAA,CAAA;IAC5C,MAAM;AAAExC,MAAAA;KAAU,GAAG,IAAI,CAACvE,IAAI;AAC9B,IAAA,MAAMgH,IAAA,GAAO,IAAI,CAACC,SAAS,IAAI,CAAC,CAAC,IAAI,CAACjH,IAAI,CAACkH,KAAK;IAChD,OAAO;MACLC,OAAA,EAASZ,KAAKa,YAAY;MAC1BC,SAAA,EAAWd,KAAKe,oBAAoB;MACpCC,MAAA,EAAQP,OACJ,CAAA,+BAAA,EAAkCQ,QAAA,CAAS7G,SAAS+F,KAAA,CAAMe,8BAA8B,CAAA,CAAA,CAAG,GAC3F,CAAA,2BAAA,EAA8BD,SAAS7G,OAAA,EAAS+F,KAAA,CAAMgB,0BAA0B,CAAA,CAAA,CAAG;MACvFd,SAAA,EAAW,CAAA,kBAAA,EAAqBY,SAC9B7G,OAAA,EACAzC,SAAA,EACA0I,UAAUe,iBAAiB,EAC3B,IAAI,CAACV,SAAS,IAAIL,SAAA,CAAUgB,QAAQ,EACpCrD,QAAA,IAAYqC,SAAA,CAAUrC,QAAQ,CAAA,CAAA,CAC7B;AACHsD,MAAAA,cAAA,EAAgB,CAAA,yBAAA,EAA4BL,QAAA,CAC1C7G,SACAmG,KAAA,CAAMgB,wBAAwB,EAC9BvD,QAAA,GAAWqC,SAAA,CAAUrC,QAAQ,GAAGuC,KAAA,CAAMiB,OAAO,CAAA,CAAA;KAEjD;AACF,EAAA;AAAA,EAAA;IAAAtH,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,QAAA,EAAA,CA5BCqI,MAAA,CAAA,CAAA;AAAA;EA8BD,IAAIC,kBAAAA,GAA6B;IAC/B,OAAO,CAAA,EAAG,IAAI,CAACpH,UAAU,KAAK,IAAI,CAACG,UAAU,CAAA,CAAE;AACjD,EAAA;EAEA,IAAIkH,wBAAAA,GAAmC;IACrC,OAAO,IAAI,CAACC,OAAO,CAACC,WAAW,CAC7B,6CAAA,EACA,6IAAA,CAAA;AAEJ,EAAA;EAGAC,sBAAAA,CAAuBvH,KAAc,EAAQ;IAC3C,IAAI,CAACX,mBAAmB,GAAGW,KAAA;AAC7B,EAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,wBAAA,EAAA,CAHCe,MAAA,CAAA,CAAA;AAAA;EAMD4H,YAAAA,CAAaxJ,CAAa,EAAQ;AAChC,IAAA,IAAI,CAACkB,IAAI,CAACuI,OAAO,GAAGzJ,CAAA,CAAA;AACtB,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,cAAA,EAAA,CAHCe,MAAA,CAAA,CAAA;AAAA;EAMD8H,WAAAA,CAAY1J,CAAa,EAAQ;AAC/B,IAAA,IAAI,CAACkB,IAAI,CAACyI,MAAM,GAAG3J,CAAA,CAAA;AACrB,EAAA;AAAA,EAAA;IAAA2B,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,aAAA,EAAA,CAHCe,MAAA,CAAA,CAAA;AAAA;EAMDgI,YAAAA,CAAa5J,CAAa,EAAQ;AAChC,IAAA,IAAI,IAAI,CAACkB,IAAI,CAACuI,OAAO,EAAE;AACrB,MAAA,IAAI,CAACvI,IAAI,CAACuI,OAAO,CAACzJ,CAAA,CAAA;AACpB,IAAA;IAEA,IAAI,CAACqB,mBAAmB,GAAG,IAAA;IAC3B,IAAI,CAACwI,aAAa,GAAG,IAAA;AACvB,EAAA;AAAA,EAAA;IAAAlI,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,cAAA,EAAA,CARCe,MAAA,CAAA,CAAA;AAAA;EAWDkI,WAAAA,CAAY9J,CAAa,EAAQ;IAC/B+J,KAAA,CACE,IAAI,EACJ,MAAA;AACE;AACA;AACA;AACA;MACA,IAAI,IAAI,CAAC1I,mBAAmB,EAAE;QAC5B,IAAI,CAACA,mBAAmB,GAAG,KAAA;AAE3B,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,IAAI,CAACH,IAAI,CAACyI,MAAM,EAAE;AACpB,QAAA,IAAI,CAACzI,IAAI,CAACyI,MAAM,CAAC3J,CAAA,CAAA;AACnB,MAAA;MAEA,IAAI,CAACgK,YAAY,EAAA;IACnB,CAAA,EACA,GAAA,CAAA;AAEJ,EAAA;AAAA,EAAA;IAAArI,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,aAAA,EAAA,CAvBCe,MAAA,CAAA,CAAA;AAAA;AA0BDoI,EAAAA,YAAAA,GAAqB;IACnB,IAAI,CAAC3I,mBAAmB,GAAG,KAAA;IAC3B,IAAI,CAACwI,aAAa,GAAG,KAAA;AACvB,EAAA;AAEA;AAAA,EAAA;IAAAlI,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,cAAA,EAAA,CANCe,MAAA,CAAA,CAAA;AAAA;EAQDqI,QAAAA,GAAiB,CAAC;AAAA,EAAA;IAAAtI,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,UAAA,EAAA,CADjBe,MAAA,CAAA,CAAA;AAAA;EAGD,IAAIsI,cAAAA,GAAyB;IAC3B,OAAOhH,IAAA,CAAKf,GAAG,CAACgI,MAAA,CAAO,IAAI,CAAClI,GAAG,CAAA,CAAEmI,MAAM,EAAED,MAAA,CAAO,IAAI,CAAChI,GAAG,EAAEiI,MAAM,CAAA;AAClE,EAAA;EAEA,IAAIC,aAAAA,GAAyB;AAC3B,IAAA,OAAO,IAAI,CAACC,SAAS,KAAK,kBAAA;AAC5B,EAAA;EAEA,IAAIC,eAAAA,GAA2B;AAC7B,IAAA,OAAO,IAAI,CAACF,aAAa,IAAI,CAAC,IAAI,CAACnJ,IAAI,CAACsJ,QAAQ,IAAI,CAAC,IAAI,CAACtJ,IAAI,CAACuE,QAAQ;AACzE,EAAA;AAEA;EACA,IAAIgF,cAAAA,GAAqC;IACvC,OAAO,IAAI,CAACJ,aAAa,GAAGjK,YAAY,IAAI,CAACc,IAAI,CAACwJ,SAAS;AAC7D,EAAA;EAEA,IAAIC,oBAAAA,GAA2C;IAC7C,OAAO,IAAI,CAACN,aAAa,GAAGjK,YAAY,IAAI,CAACc,IAAI,CAAC0J,eAAe;AACnE,EAAA;AAEAC,EAAAA,WAAAA,GAAc;IACZ,KAAK,CAACA,WAAA,EAAA;IAEN,IAAI,CAACvJ,cAAc,GAAG,IAAA;AACxB,EAAA;AAEA,EAAA;IAAA/C,oBAAA,CAAAC,kBAAA,CAAA,iyZAAA,EA0YA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAK,GAAA;QAAA+L,YAAA;QAAAhM,GAAA;yBAAAiM,wBAAA;QAAAC,6BAAA;QAAA1M,cAAA;QAAA2M,eAAA;QAAAC,aAAA;QAAAC,aAAA;QAAAxM,EAAA;QAAAyM,cAAA;QAAAC,SAAA;QAAArM,EAAA;QAAAC,EAAA;QAAAC,QAAA;QAAAI,SAAA;QAAAgM,aAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;"}
|
|
1
|
+
{"version":3,"file":"eui-dual-range.js","sources":["../../src/components/eui-dual-range.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { cancel, later } from '@ember/runloop';\nimport { service } from '@ember/service';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport { modifier } from 'ember-modifier';\nimport { and, eq, not } from 'ember-truth-helpers';\n\nimport argOrDefault, {\n argOrDefaultDecorator\n} from '../helpers/arg-or-default.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport { calculateThumbPosition, logicalStyle } from '../utils/eui/range.ts';\nimport {\n euiDualRangeStyles,\n euiRangeDraggableInnerStyles,\n euiRangeDraggableStyles,\n euiRangeLevelColor,\n euiRangeStyles,\n getLevelColor\n} from '../utils/eui/styles.generated.ts';\nimport { euiClass, useEuiBorealisStyles } from '../utils/eui/styles.ts';\nimport { keys } from '../utils/keys.ts';\nimport { isWithinRange } from '../utils/number/index.ts';\nimport EuiFormControlLayoutDelimited from './eui-form-control-layout-delimited.gts';\nimport EuiInputPopover from './eui-input-popover.gts';\nimport EuiRangeHighlight from './eui-range-highlight.gts';\nimport EuiRangeInput from './eui-range-input.gts';\nimport EuiRangeLabel from './eui-range-label.gts';\nimport EuiRangeSlider from './eui-range-slider.gts';\nimport EuiRangeThumb from './eui-range-thumb.gts';\nimport EuiRangeTrack from './eui-range-track.gts';\nimport EuiRangeWrapper from './eui-range-wrapper.gts';\n\nimport type EuiI18n from '../services/eui-i18n';\nimport type { EuiFormControlLayoutSignature } from './eui-form-control-layout';\nimport type { EuiRangeArgs, EuiRangeInputPopoverProps } from './eui-range';\nimport type {\n EuiRangeInputArgs,\n EuiRangeInputSignature\n} from './eui-range-input';\nimport type { EuiRangeLevel } from './eui-range-levels';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { EuiRangeTick } from './eui-range-ticks';\n\nexport type ValueMember = number | string;\n\nexport interface EuiDualRangeArgs {\n /**\n * Props of the EuiInputPopover used with `@showInput=\"inputWithPopover\"`\n * (upstream `inputPopoverProps`): EuiInputPopover args except `isOpen`,\n * `closePopover`, `disableFocusTrap`, `ownFocus`,\n * `popoverScreenReaderText` and `fullWidth`, which the range controls.\n * Its `className` is added to the popover root.\n */\n inputPopoverProps?: EuiRangeInputPopoverProps;\n /** The selected range, `[lower, upper]`. Update it in `@onChange`. */\n value: [ValueMember, ValueMember];\n /** Called when a thumb or input loses focus. */\n onBlur?: (event: FocusEvent) => void;\n /** Called when a thumb or input gets focus. */\n onFocus?: (event: FocusEvent) => void;\n /**\n * Called with the new `[lower, upper]` values, whether they are valid\n * (within `@min`/`@max` and lower ≤ upper) and the event.\n */\n onChange: (\n values: [ValueMember, ValueMember],\n isValid: boolean,\n event: Event | MouseEvent | KeyboardEvent\n ) => void;\n /** Stretches the slider to its container's width. */\n fullWidth?: boolean;\n /** Shows the invalid state. */\n isInvalid?: boolean;\n /**\n * Create colored indicators for certain intervals:\n * `[{ min: 0, max: 20, color: 'danger' }, …]`.\n */\n levels?: EuiRangeLevel[];\n /**\n * Shows static min/max labels on the sides of the range slider.\n * Defaults to `false`.\n */\n showLabels?: boolean;\n /**\n * Pass `true` to displays an extra input control for direct manipulation.\n * Pass `'inputWithPopover'` to only show the input but show the range in a dropdown.\n */\n showInput?: EuiRangeArgs['showInput'];\n /**\n * Modifies the number of tick marks and at what interval\n */\n tickInterval?: number;\n /**\n * Specified ticks at specified values: `[{ label: '20kb', value: 20 }]`.\n */\n ticks?: EuiRangeTick[];\n /**\n * @deprecated Has no effect, use the `<:prepend>` block (shown with\n * `@showInput=\"inputWithPopover\"`).\n */\n prepend?: EuiFormControlLayoutSignature['Blocks']['prepend'];\n /**\n * @deprecated Has no effect, use the `<:append>` block (shown with\n * `@showInput=\"inputWithPopover\"`).\n */\n append?: EuiFormControlLayoutSignature['Blocks']['append'];\n /** @deprecated Has no effect. */\n minInputProps?: Partial<EuiRangeInputArgs>;\n /** @deprecated Has no effect. */\n maxInputProps?: Partial<EuiRangeInputArgs>;\n /** Makes the inputs read-only. */\n readOnly?: boolean;\n /** Disables the slider and inputs. */\n disabled?: boolean;\n /** @private Show the `<:prepend>` block. Defaults to `true`. */\n isPrependProvided?: boolean;\n /** @private Show the `<:append>` block. Defaults to `true`. */\n isAppendProvided?: boolean;\n /** @private Ignore the `<:max>` block. */\n isFakeMaxBlock?: boolean;\n /** @private Ignore the `<:min>` block. */\n isFakeMinBlock?: boolean;\n /** Disables the number inputs. */\n disable?: boolean;\n /** Id of the element(s) describing the slider thumbs. */\n ariaDescribedby?: string;\n /** Accessible label of the slider thumbs. */\n ariaLabel?: string;\n /** `name` of the inputs; the number inputs get `-minValue` / `-maxValue` suffixes. */\n name?: string;\n /** Id of the slider. Defaults to a generated id. */\n id?: string;\n /** Smaller slider, for dense forms. Defaults to `false`. */\n compressed?: boolean;\n /**\n * Makes the highlighted range draggable (moves both values at once), with\n * its own `role=\"slider\"` for the keyboard. Defaults to `false`.\n */\n isDraggable?: boolean;\n /**\n * Shows a spinner in the delimited input (`@showInput=\"inputWithPopover\"`).\n */\n isLoading?: boolean;\n /** Highlights the selected range on the track. Defaults to `true`. */\n showRange?: boolean;\n /** Shows tick marks, every `@step` (or `@tickInterval`). Defaults to `false`. */\n showTicks?: boolean;\n /** Increment between values. Defaults to `1`. */\n step?: number;\n /** Lowest selectable value. Defaults to `0`. */\n min?: number;\n /** Highest selectable value. Defaults to `100`. */\n max?: number;\n}\n\n/**\n * A slider with two thumbs to pick a range, e.g. a price range. For one\n * value use EuiRange.\n */\nexport interface EuiDualRangeSignature {\n Element: EuiRangeInputSignature['Element'];\n Args: EuiDualRangeArgs;\n Blocks: {\n /** Content before the inputs (`@showInput=\"inputWithPopover\"`). */\n prepend: EuiRangeInputSignature['Blocks']['prepend'];\n /** Content after the inputs (`@showInput=\"inputWithPopover\"`). */\n append: EuiRangeInputSignature['Blocks']['append'];\n /** Custom min label (`@showLabels`); yields `@min`. */\n min: [number?];\n /** Custom max label (`@showLabels`); yields `@max`. */\n max: [number?];\n };\n}\n\n/**\n * One number input of EuiDualRange (`@side` min or max), wired to the\n * range's handlers. `@class` is the delimited layout's input class.\n */\nconst DualRangeInput: TemplateOnlyComponent<{\n Element: HTMLInputElement;\n Args: {\n range: EuiDualRangeComponent;\n side: 'min' | 'max';\n class?: string;\n };\n}> = <template>\n {{#let (eq @side \"min\") as |isMin|}}\n <EuiRangeInput\n class={{@class}}\n @side={{@side}}\n @min={{if isMin @range.min @range.upperMin}}\n @max={{if isMin @range.lowerMax @range.max}}\n @step={{@range.step}}\n @value={{if isMin @range.lowerValue @range.upperValue}}\n @disabled={{@range.args.disabled}}\n @compressed={{@range.compressed}}\n @name={{concat @range.args.name (if isMin \"-minValue\" \"-maxValue\")}}\n @readOnly={{@range.args.readOnly}}\n @autoSize={{not @range.showInputOnly}}\n @fullWidth={{and @range.showInputOnly @range.fullWidth}}\n @isInvalid={{@range.args.isInvalid}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @controlOnly={{@range.showInputOnly}}\n aria-label={{@range.args.ariaLabel}}\n aria-describedby={{@range.args.ariaDescribedby}}\n ...attributes\n {{on\n \"mousedown\"\n (if\n @range.showInputOnly (fn @range.setPreventPopoverClose true) (optional)\n )\n }}\n {{on \"keydown\" @range.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n @range.canShowDropdown\n @range.onInputFocus\n (optional @range.args.onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n @range.canShowDropdown @range.onInputBlur (optional @range.args.onBlur)\n )\n }}\n {{on\n \"input\"\n (if\n isMin @range.handleLowerInputChange @range.handleUpperInputChange\n )\n }}\n />\n {{/let}}\n</template>;\n\nconst borderBox = { boxSizing: 'border-box' } as const;\n\n/** Mouse drag on the draggable range: calls `onChange(x, isFirstInteraction)`. */\nconst mouseMove = modifier(\n (\n element: HTMLElement,\n _: unknown[],\n { onChange }: { onChange: (x: number, isFirst: boolean) => void }\n ) => {\n let cleanup: (() => void) | undefined;\n const onMouseDown = (event: MouseEvent) => {\n onChange(event.clientX, true);\n const onMove = (e: MouseEvent) => onChange(e.clientX, false);\n const onUp = () => cleanup?.();\n cleanup = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n cleanup = undefined;\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n };\n const onTouch = (event: TouchEvent) => {\n const touch = event.touches[0];\n if (touch) onChange(touch.clientX, event.type === 'touchstart');\n };\n element.addEventListener('mousedown', onMouseDown);\n element.addEventListener('touchstart', onTouch);\n element.addEventListener('touchmove', onTouch);\n return () => {\n cleanup?.();\n element.removeEventListener('mousedown', onMouseDown);\n element.removeEventListener('touchstart', onTouch);\n element.removeEventListener('touchmove', onTouch);\n };\n }\n);\n\nexport default class EuiDualRangeComponent extends Component<EuiDualRangeSignature> {\n // Defaults\n @argOrDefaultDecorator(0) min!: number;\n @argOrDefaultDecorator(100) max!: number;\n @argOrDefaultDecorator(1) step!: number;\n @argOrDefaultDecorator(false) fullWidth!: boolean;\n @argOrDefaultDecorator(false) compressed!: boolean;\n @argOrDefaultDecorator(false) showLabels!: boolean;\n @argOrDefaultDecorator(false) showInput!: boolean | string;\n @argOrDefaultDecorator(true) showRange!: boolean;\n @argOrDefaultDecorator(false) showTicks!: boolean;\n @argOrDefaultDecorator([]) levels!: EuiRangeLevel[];\n\n @service declare euiI18n: EuiI18n;\n\n //State\n @tracked id: string = this.args.id || guidFor({});\n @tracked isPopoverOpen = false;\n ///\n\n preventPopoverClose = false;\n rangeSliderRef: HTMLInputElement | null = null;\n leftPosition = 0;\n dragAcc = 0;\n\n @action\n didInsertRangeSlider(ref: HTMLInputElement | null): void {\n this.rangeSliderRef = ref;\n }\n\n get context() {\n return getEuiThemeContext(this);\n }\n\n get lowerValue(): ValueMember {\n return this.args.value ? this.args.value[0] : this.min;\n }\n\n get upperValue(): ValueMember {\n return this.args.value ? this.args.value[1] : this.max;\n }\n\n get lowerValueIsValid(): boolean {\n return isWithinRange(this.min, this.upperValue, this.lowerValue);\n }\n\n get upperValueIsValid(): boolean {\n return isWithinRange(this.lowerValue, this.max, this.upperValue);\n }\n\n get isValid(): boolean {\n return this.lowerValueIsValid && this.upperValueIsValid;\n }\n\n get lowerNumber(): number {\n return Number(this.lowerValue);\n }\n\n get upperNumber(): number {\n return Number(this.upperValue);\n }\n\n /** Upper bound of the lower thumb/input (`@max` while the upper value is empty). */\n get lowerMax(): number {\n return this.upperValue === '' ? this.max : Number(this.upperValue);\n }\n\n /** Lower bound of the upper thumb/input (`@min` while the lower value is empty). */\n get upperMin(): number {\n return this.lowerValue === '' ? this.min : Number(this.lowerValue);\n }\n\n @action\n _determineInvalidThumbMovement(\n newVal: ValueMember,\n lower: ValueMember,\n upper: ValueMember,\n e: Event\n ): void {\n // If the values are invalid, find whether the new value is in the upper\n // or lower half and move the appropriate handle to the new value,\n // while the other handle gets moved to the opposite bound (if invalid)\n const lowerHalf = Math.abs(this.max - this.min) / 2 + this.min;\n const newValIsLow = isWithinRange(this.min, lowerHalf, newVal);\n\n if (newValIsLow) {\n lower = newVal;\n upper = !this.upperValueIsValid ? this.max : upper;\n } else {\n lower = !this.lowerValueIsValid ? this.min : lower;\n upper = newVal;\n }\n\n this._handleOnChange(lower, upper, e);\n }\n\n @action\n _determineValidThumbMovement(\n newVal: ValueMember,\n lower: ValueMember,\n upper: ValueMember,\n e: Event\n ): void {\n // Lower thumb targeted or right-moving swap has occurred\n if (\n Math.abs((lower as number) - (newVal as number)) <\n Math.abs((upper as number) - (newVal as number))\n ) {\n lower = newVal;\n }\n // Upper thumb targeted or left-moving swap has occurred\n else {\n upper = newVal;\n }\n\n this._handleOnChange(lower, upper, e);\n }\n\n @action\n _determineThumbMovement(newVal: number, e: Event): void {\n // Determine thumb movement based on slider interaction\n if (!this.isValid) {\n // Non-standard positioning follows\n this._determineInvalidThumbMovement(\n newVal,\n this.lowerValue,\n this.upperValue,\n e\n );\n } else {\n // Standard positioning based on click event proximity to thumb locations\n this._determineValidThumbMovement(\n newVal,\n this.lowerValue,\n this.upperValue,\n e\n );\n }\n }\n\n @action\n _handleOnChange(lower: ValueMember, upper: ValueMember, e: Event): void {\n const isValid =\n isWithinRange(this.min, upper, lower) &&\n isWithinRange(lower, this.max, upper);\n\n this.args.onChange([lower, upper], isValid, e);\n }\n\n @action\n handleSliderChange(e: Event): void {\n this._determineThumbMovement(\n Number((e.currentTarget as HTMLInputElement).value),\n e\n );\n }\n\n @action\n _resetToRangeEnds(e: KeyboardEvent): void {\n // Arbitrary decision to pass `min` instead of `max`. Result is the same.\n this._determineInvalidThumbMovement(\n this.min,\n this.lowerValue,\n this.upperValue,\n e\n );\n }\n\n @action\n _isDirectionalKeyPress(event: KeyboardEvent): boolean {\n return (\n [\n keys.ARROW_UP,\n keys.ARROW_RIGHT,\n keys.ARROW_DOWN,\n keys.ARROW_LEFT\n ].indexOf(event.key as keys) > -1\n );\n }\n\n @action\n handleInputKeyDown(e: KeyboardEvent): void {\n // Relevant only when initial values are both `''` and `showInput` is set\n if (this._isDirectionalKeyPress(e) && !this.isValid) {\n e.preventDefault();\n this._resetToRangeEnds(e);\n }\n }\n\n @action\n handleLowerInputChange(e: Event): void {\n this._handleOnChange(\n (e.target as HTMLInputElement).value,\n this.upperValue,\n e\n );\n }\n\n @action\n handleUpperInputChange(e: Event): void {\n this._handleOnChange(\n this.lowerValue,\n (e.target as HTMLInputElement).value,\n e\n );\n }\n\n @action\n _handleKeyDown(value: ValueMember, event: KeyboardEvent): number {\n let newVal = Number(value);\n let stepRemainder = 0;\n const step = this.args.step || 1;\n\n switch (event.key) {\n case keys.ARROW_UP:\n case keys.ARROW_RIGHT:\n event.preventDefault();\n newVal += step;\n stepRemainder = (newVal - this.min) % step;\n\n if (step !== 1 && stepRemainder > 0) {\n newVal = newVal - stepRemainder;\n }\n\n break;\n case keys.ARROW_DOWN:\n case keys.ARROW_LEFT:\n event.preventDefault();\n newVal -= step;\n stepRemainder = (newVal - this.min) % step;\n\n if (step !== 1 && stepRemainder > 0) {\n newVal = newVal + (step - stepRemainder);\n }\n\n break;\n }\n\n return newVal;\n }\n\n @action\n handleLowerKeyDown(event: KeyboardEvent): void {\n let lower = this.lowerValue;\n\n switch (event.key) {\n case keys.TAB:\n return;\n default:\n if (!this.lowerValueIsValid) {\n // Relevant only when initial value is `''` and `showInput` is not set\n event.preventDefault();\n this._resetToRangeEnds(event);\n\n return;\n }\n\n lower = this._handleKeyDown(lower, event);\n }\n\n if (lower >= (this.upperValue as number) || lower < this.min) return;\n this._handleOnChange(lower, this.upperValue, event);\n }\n\n @action\n handleUpperKeyDown(event: KeyboardEvent): void {\n let upper = this.upperValue;\n\n switch (event.key) {\n case keys.TAB:\n return;\n default:\n if (!this.upperValueIsValid) {\n // Relevant only when initial value is `''` and `showInput` is not set\n event.preventDefault();\n this._resetToRangeEnds(event);\n\n return;\n }\n\n upper = this._handleKeyDown(upper, event);\n }\n\n if (upper <= (this.lowerValue as number) || upper > this.max) return;\n this._handleOnChange(this.lowerValue, upper, event);\n }\n\n /** Arrow keys on the draggable range move both values by a step. */\n @action\n handleDraggableKeyDown(event: KeyboardEvent): void {\n if (event.key === keys.TAB) return;\n const lower = this._handleKeyDown(this.lowerValue, event);\n const upper = this._handleKeyDown(this.upperValue, event);\n\n if (lower >= Number(this.upperValue) || lower < this.min) return;\n if (upper <= Number(this.lowerValue) || upper > this.max) return;\n this._handleOnChange(lower, upper, event);\n }\n\n getNearestStep(value: number): number {\n const { min, max, step } = this;\n const steps = (max - min) / step;\n const approx = Math.round(((value - min) * steps) / (max - min)) / steps;\n const bound = Math.min(Math.max(approx, 0), 1);\n const nearest = bound * (max - min) + min;\n return (Number(nearest.toPrecision(10)) * 100) / 100;\n }\n\n /** Upstream `handleDrag`: moves both values by the dragged distance. */\n @action\n handleDrag(x: number, isFirstInteraction: boolean): void {\n if (this.args.disabled) return;\n if (isFirstInteraction) {\n this.leftPosition = x;\n this.dragAcc = 0;\n }\n const { min, max } = this;\n const lowerValue = Number(this.lowerValue);\n const upperValue = Number(this.upperValue);\n const delta = this.leftPosition - x;\n this.leftPosition = x;\n this.dragAcc = this.dragAcc + delta;\n const rangeWidth = this.rangeSliderRef?.clientWidth ?? 0;\n if (!rangeWidth) return;\n const percentageOfArea = this.dragAcc / rangeWidth;\n const percentageOfRange = percentageOfArea * (max - min);\n const newLower = this.getNearestStep(lowerValue - percentageOfRange);\n const newUpper = this.getNearestStep(upperValue - percentageOfRange);\n const noMovement = newLower === lowerValue;\n const isMin = min === lowerValue && min === newLower;\n const isMax = max === upperValue && max === newUpper;\n const isOutOfRange = newLower < min || newUpper > max;\n if (noMovement || isMin || isMax || isOutOfRange) return;\n this._handleOnChange(newLower, newUpper, new Event('drag'));\n this.dragAcc = 0;\n }\n\n /** Thumb start position in % of the track (`0` until the track is measured). */\n thumbPosition = (value: number, trackWidth: number): string =>\n trackWidth\n ? `${calculateThumbPosition(value, this.min, this.max, trackWidth)}%`\n : '0';\n\n thumbColor(value: ValueMember): string | undefined {\n const color = getLevelColor(this.levels ?? [], Number(value));\n return color ? euiRangeLevelColor(color, this.context.upstream) : undefined;\n }\n\n lowerThumbStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.lowerNumber || this.min, trackWidth),\n '--euiRangeThumbColor': this.thumbColor(this.lowerValue)\n });\n\n upperThumbStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.upperNumber || this.max, trackWidth),\n '--euiRangeThumbColor': this.thumbColor(this.upperValue)\n });\n\n draggableStyle = (trackWidth: number) =>\n logicalStyle({\n left: this.thumbPosition(this.lowerNumber || this.min, trackWidth),\n right: `calc(100% - ${this.thumbPosition(\n this.upperNumber || this.max,\n trackWidth\n )} - ${this.context.upstream.euiTheme.size.base})`\n });\n\n @cached\n get styles() {\n const context = this.context;\n const dual = useEuiBorealisStyles(context, euiDualRangeStyles);\n const range = useEuiBorealisStyles(context, euiRangeStyles);\n const draggable = useEuiBorealisStyles(context, euiRangeDraggableStyles);\n const inner = useEuiBorealisStyles(context, euiRangeDraggableInnerStyles);\n const { disabled } = this.args;\n const slim = this.showTicks || !!this.args.ticks;\n return {\n rootCss: dual.euiDualRange,\n sliderCss: dual.euiDualRange__slider,\n spacer: slim\n ? `euiRange__slimHorizontalSpacer ${euiClass(context, range.euiRange__slimHorizontalSpacer)}`\n : `euiRange__horizontalSpacer ${euiClass(context, range.euiRange__horizontalSpacer)}`,\n draggable: `euiRangeDraggable ${euiClass(\n context,\n borderBox,\n draggable.euiRangeDraggable,\n this.showTicks && draggable.hasTicks,\n disabled && draggable.disabled\n )}`,\n draggableInner: `euiRangeDraggable__inner ${euiClass(\n context,\n inner.euiRangeDraggable__inner,\n disabled ? draggable.disabled : inner.enabled\n )}`\n };\n }\n\n get draggableValueText(): string {\n return `${this.lowerValue}, ${this.upperValue}`;\n }\n\n get screenReaderInstructions(): string {\n return this.euiI18n.lookupToken(\n 'euiDualRange.sliderScreenReaderInstructions',\n 'You are in a custom range slider. Use the Up and Down arrow keys to change the minimum value. Press Tab to interact with the maximum value.'\n );\n }\n\n @action\n setPreventPopoverClose(value: boolean): void {\n this.preventPopoverClose = value;\n }\n\n @action\n onThumbFocus(e: FocusEvent): void {\n this.args.onFocus?.(e);\n }\n\n @action\n onThumbBlur(e: FocusEvent): void {\n this.args.onBlur?.(e);\n }\n\n @action\n onInputFocus(e: FocusEvent): void {\n if (this.args.onFocus) {\n this.args.onFocus(e);\n }\n\n this.preventPopoverClose = true;\n this.isPopoverOpen = true;\n }\n\n @action\n onInputBlur(e: FocusEvent): void {\n cancel(this.blurTimer);\n this.blurTimer = later(\n this,\n () => {\n // Safari does not recognize any focus-related eventing for input[type=range]\n // making it impossible to capture its state using active/focus/relatedTarget\n // Instead, a prevention flag is set on mousedown, with a waiting period here.\n // Mousedown is viable because in the popover case, it is inaccessible via keyboard (intentionally)\n if (this.preventPopoverClose) {\n this.preventPopoverClose = false;\n\n return;\n }\n\n if (this.args.onBlur) {\n this.args.onBlur(e);\n }\n\n this.closePopover();\n },\n 200\n );\n }\n\n @action\n closePopover(): void {\n this.preventPopoverClose = false;\n this.isPopoverOpen = false;\n }\n\n /** @deprecated The track measures itself; kept for callers. */\n @action\n onResize(): void {}\n\n get digitTolerance(): number {\n return Math.max(String(this.min).length, String(this.max).length);\n }\n\n get showInputOnly(): boolean {\n return this.showInput === 'inputWithPopover';\n }\n\n get canShowDropdown(): boolean {\n return this.showInputOnly && !this.args.readOnly && !this.args.disabled;\n }\n\n /** Thumb `aria-label`/`aria-describedby` (the inputs carry them in a popover). */\n get thumbAriaLabel(): string | undefined {\n return this.showInputOnly ? undefined : this.args.ariaLabel;\n }\n\n get thumbAriaDescribedby(): string | undefined {\n return this.showInputOnly ? undefined : this.args.ariaDescribedby;\n }\n\n blurTimer: ReturnType<typeof later> | undefined;\n\n willDestroy() {\n super.willDestroy();\n cancel(this.blurTimer);\n\n this.rangeSliderRef = null;\n }\n\n <template>\n {{#let\n (and (argOrDefault @isPrependProvided true) (has-block \"prepend\"))\n (and (argOrDefault @isAppendProvided true) (has-block \"append\"))\n (and (not (argOrDefault @isFakeMaxBlock false)) (has-block \"max\"))\n (and (not (argOrDefault @isFakeMinBlock false)) (has-block \"min\"))\n as |hasPrepend hasAppend hasMaxBlock hasMinBlock|\n }}\n {{#if this.showInputOnly}}\n <EuiInputPopover\n class=\"euiDualRange__popover {{@inputPopoverProps.className}}\"\n @panelPaddingSize={{@inputPopoverProps.panelPaddingSize}}\n @anchorPosition={{@inputPopoverProps.anchorPosition}}\n @attachToAnchor={{@inputPopoverProps.attachToAnchor}}\n @display={{@inputPopoverProps.display}}\n @offset={{@inputPopoverProps.offset}}\n @repositionToCrossAxis={{@inputPopoverProps.repositionToCrossAxis}}\n @closeOnScroll={{@inputPopoverProps.closeOnScroll}}\n @panelMinWidth={{@inputPopoverProps.panelMinWidth}}\n @onPanelResize={{@inputPopoverProps.onPanelResize}}\n @css={{@inputPopoverProps.css}}\n @panelCss={{@inputPopoverProps.panelCss}}\n @repositionOnScroll={{@inputPopoverProps.repositionOnScroll}}\n @panelClassName={{@inputPopoverProps.panelClassName}}\n @panelStyle={{@inputPopoverProps.panelStyle}}\n @anchorClassName={{@inputPopoverProps.anchorClassName}}\n @zIndex={{@inputPopoverProps.zIndex}}\n @container={{@inputPopoverProps.container}}\n @buffer={{@inputPopoverProps.buffer}}\n @insert={{@inputPopoverProps.insert}}\n @hasArrow={{@inputPopoverProps.hasArrow}}\n @initialFocus={{@inputPopoverProps.initialFocus}}\n @ariaLabel={{@inputPopoverProps.ariaLabel}}\n @ariaLabelledBy={{@inputPopoverProps.ariaLabelledBy}}\n @popoverRef={{@inputPopoverProps.popoverRef}}\n @portalRef={{@inputPopoverProps.portalRef}}\n @onTrapDeactivation={{@inputPopoverProps.onTrapDeactivation}}\n @shouldAccountForOtherPopovers={{@inputPopoverProps.shouldAccountForOtherPopovers}}\n @fullWidth={{this.fullWidth}}\n @isOpen={{this.isPopoverOpen}}\n @closePopover={{this.closePopover}}\n @disableFocusTrap={{true}}\n @popoverScreenReaderText={{this.screenReaderInstructions}}\n >\n <:input>\n {{! Delimited renders a side wrapper for every block it is given }}\n {{#if (and hasPrepend hasAppend)}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n {{else if hasPrepend}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n </EuiFormControlLayoutDelimited>\n {{else if hasAppend}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n {{else}}\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @isLoading={{@isLoading}}\n @isInvalid={{@isInvalid}}\n >\n <:startControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"min\" @class={{classes}} ...attributes />\n </:startControl>\n <:endControl as |classes|>\n <DualRangeInput @range={{this}} @side=\"max\" @class={{classes}} ...attributes />\n </:endControl>\n </EuiFormControlLayoutDelimited>\n {{/if}}\n </:input>\n <:content>\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @css={{this.styles.rootCss}}\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if (and this.showInput (not this.showInputOnly))}}\n <DualRangeInput @range={{this}} @side=\"min\" ...attributes />\n <div class={{this.styles.spacer}}></div>\n {{/if}}\n {{#if this.showLabels}}\n <EuiRangeLabel @side=\"min\" @disabled={{@disabled}}>\n {{#if hasMinBlock}}\n {{yield this.min to=\"min\"}}\n {{else}}\n {{this.min}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n <EuiRangeTrack\n aria-hidden={{if (eq this.showInput true) \"true\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n as |trackWidth|\n >\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @css={{this.styles.sliderCss}}\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n ...attributes\n {{didInsert this.didInsertRangeSlider}}\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleSliderChange}}\n />\n {{#if (and @isDraggable this.isValid)}}\n <div\n class={{this.styles.draggable}}\n role=\"slider\"\n aria-valuemin={{this.min}}\n aria-valuemax={{this.max}}\n aria-valuenow={{this.lowerNumber}}\n aria-valuetext={{this.draggableValueText}}\n aria-disabled={{if @disabled \"true\" \"false\"}}\n aria-label={{this.thumbAriaLabel}}\n aria-describedby={{this.thumbAriaDescribedby}}\n tabindex={{if @disabled \"-1\" \"0\"}}\n style={{this.draggableStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleDraggableKeyDown}}\n >\n <div\n class={{this.styles.draggableInner}}\n {{mouseMove onChange=this.handleDrag}}\n ></div>\n </div>\n {{/if}}\n <EuiRangeThumb\n @min={{this.min}}\n @max={{this.upperNumber}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.lowerThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n @min={{this.lowerNumber}}\n @max={{this.max}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.upperThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\n />\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @showTicks={{this.showTicks}}\n @min={{this.min}}\n @max={{this.max}}\n @lowerValue={{this.lowerNumber}}\n @upperValue={{this.upperNumber}}\n @levels={{this.levels}}\n @trackWidth={{trackWidth}}\n />\n {{/if}}\n </EuiRangeTrack>\n {{#if this.showLabels}}\n <EuiRangeLabel @disabled={{@disabled}}>\n {{#if hasMaxBlock}}\n {{yield this.max to=\"max\"}}\n {{else}}\n {{this.max}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n {{#if (and this.showInput (not this.showInputOnly))}}\n <div class={{this.styles.spacer}}></div>\n <DualRangeInput @range={{this}} @side=\"max\" ...attributes />\n {{/if}}\n </EuiRangeWrapper>\n </:content>\n </EuiInputPopover>\n {{else}}\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @css={{this.styles.rootCss}}\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if (and this.showInput (not this.showInputOnly))}}\n <DualRangeInput @range={{this}} @side=\"min\" ...attributes />\n <div class={{this.styles.spacer}}></div>\n {{/if}}\n {{#if this.showLabels}}\n <EuiRangeLabel @side=\"min\" @disabled={{@disabled}}>\n {{#if hasMinBlock}}\n {{yield this.min to=\"min\"}}\n {{else}}\n {{this.min}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n <EuiRangeTrack\n aria-hidden={{if (eq this.showInput true) \"true\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n as |trackWidth|\n >\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @css={{this.styles.sliderCss}}\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showRange={{this.showRange}}\n ...attributes\n {{didInsert this.didInsertRangeSlider}}\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleSliderChange}}\n />\n {{#if (and @isDraggable this.isValid)}}\n <div\n class={{this.styles.draggable}}\n role=\"slider\"\n aria-valuemin={{this.min}}\n aria-valuemax={{this.max}}\n aria-valuenow={{this.lowerNumber}}\n aria-valuetext={{this.draggableValueText}}\n aria-disabled={{if @disabled \"true\" \"false\"}}\n aria-label={{this.thumbAriaLabel}}\n aria-describedby={{this.thumbAriaDescribedby}}\n tabindex={{if @disabled \"-1\" \"0\"}}\n style={{this.draggableStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleDraggableKeyDown}}\n >\n <div\n class={{this.styles.draggableInner}}\n {{mouseMove onChange=this.handleDrag}}\n ></div>\n </div>\n {{/if}}\n <EuiRangeThumb\n @min={{this.min}}\n @max={{this.upperNumber}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.lowerThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n @min={{this.lowerNumber}}\n @max={{this.max}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{if this.showInput true false}}\n aria-describedby={{this.thumbAriaDescribedby}}\n aria-label={{this.thumbAriaLabel}}\n style={{this.upperThumbStyle trackWidth}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\n />\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @showTicks={{this.showTicks}}\n @min={{this.min}}\n @max={{this.max}}\n @lowerValue={{this.lowerNumber}}\n @upperValue={{this.upperNumber}}\n @levels={{this.levels}}\n @trackWidth={{trackWidth}}\n />\n {{/if}}\n </EuiRangeTrack>\n {{#if this.showLabels}}\n <EuiRangeLabel @disabled={{@disabled}}>\n {{#if hasMaxBlock}}\n {{yield this.max to=\"max\"}}\n {{else}}\n {{this.max}}\n {{/if}}\n </EuiRangeLabel>\n {{/if}}\n {{#if (and this.showInput (not this.showInputOnly))}}\n <div class={{this.styles.spacer}}></div>\n <DualRangeInput @range={{this}} @side=\"max\" ...attributes />\n {{/if}}\n </EuiRangeWrapper>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["DualRangeInput","setComponentTemplate","precompileTemplate","strictMode","scope","eq","EuiRangeInput","concat","not","and","on","fn","optional","templateOnly","borderBox","boxSizing","mouseMove","modifier","element","_","onChange","cleanup","onMouseDown","event","clientX","onMove","e","onUp","document","removeEventListener","undefined","addEventListener","onTouch","touch","touches","type","EuiDualRangeComponent","Component","g","prototype","argOrDefaultDecorator","i","service","tracked","args","id","guidFor","preventPopoverClose","rangeSliderRef","leftPosition","dragAcc","didInsertRangeSlider","ref","n","action","context","getEuiThemeContext","lowerValue","value","min","upperValue","max","lowerValueIsValid","isWithinRange","upperValueIsValid","isValid","lowerNumber","Number","upperNumber","lowerMax","upperMin","_determineInvalidThumbMovement","newVal","lower","upper","lowerHalf","Math","abs","newValIsLow","_handleOnChange","_determineValidThumbMovement","_determineThumbMovement","handleSliderChange","currentTarget","_resetToRangeEnds","_isDirectionalKeyPress","keys","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","ARROW_LEFT","indexOf","key","handleInputKeyDown","preventDefault","handleLowerInputChange","target","handleUpperInputChange","_handleKeyDown","stepRemainder","step","handleLowerKeyDown","TAB","handleUpperKeyDown","handleDraggableKeyDown","getNearestStep","steps","approx","round","bound","nearest","toPrecision","handleDrag","x","isFirstInteraction","disabled","delta","rangeWidth","clientWidth","percentageOfArea","percentageOfRange","newLower","newUpper","noMovement","isMin","isMax","isOutOfRange","Event","thumbPosition","trackWidth","calculateThumbPosition","thumbColor","color","getLevelColor","levels","euiRangeLevelColor","upstream","lowerThumbStyle","logicalStyle","left","upperThumbStyle","draggableStyle","right","euiTheme","size","base","styles","dual","useEuiBorealisStyles","euiDualRangeStyles","range","euiRangeStyles","draggable","euiRangeDraggableStyles","inner","euiRangeDraggableInnerStyles","slim","showTicks","ticks","rootCss","euiDualRange","sliderCss","euiDualRange__slider","spacer","euiClass","euiRange__slimHorizontalSpacer","euiRange__horizontalSpacer","euiRangeDraggable","hasTicks","draggableInner","euiRangeDraggable__inner","enabled","cached","draggableValueText","screenReaderInstructions","euiI18n","lookupToken","setPreventPopoverClose","onThumbFocus","onFocus","onThumbBlur","onBlur","onInputFocus","isPopoverOpen","onInputBlur","cancel","blurTimer","later","closePopover","onResize","digitTolerance","String","length","showInputOnly","showInput","canShowDropdown","readOnly","thumbAriaLabel","ariaLabel","thumbAriaDescribedby","ariaDescribedby","willDestroy","argOrDefault","EuiInputPopover","EuiFormControlLayoutDelimited","EuiRangeWrapper","EuiRangeLabel","EuiRangeTrack","EuiRangeSlider","didInsert","EuiRangeThumb","EuiRangeHighlight"],"mappings":"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"}
|
|
@@ -117,9 +117,11 @@ class EuiFocusTrapComponent extends Component {
|
|
|
117
117
|
trap;
|
|
118
118
|
lastDisabled = false;
|
|
119
119
|
mouseupCleanup;
|
|
120
|
+
outsideClickTimer;
|
|
120
121
|
willDestroy() {
|
|
121
122
|
super.willDestroy();
|
|
122
123
|
this.mouseupCleanup?.();
|
|
124
|
+
clearTimeout(this.outsideClickTimer);
|
|
123
125
|
}
|
|
124
126
|
get enabled() {
|
|
125
127
|
return !this.args.disabled && !this.disabledByClick;
|
|
@@ -153,7 +155,8 @@ class EuiFocusTrapComponent extends Component {
|
|
|
153
155
|
const release = e => {
|
|
154
156
|
this.mouseupCleanup?.();
|
|
155
157
|
// Gives a toggling consumer precedence, like upstream.
|
|
156
|
-
|
|
158
|
+
clearTimeout(this.outsideClickTimer);
|
|
159
|
+
this.outsideClickTimer = setTimeout(() => this.args.onClickOutside?.(e));
|
|
157
160
|
};
|
|
158
161
|
document.addEventListener('mouseup', release);
|
|
159
162
|
document.addEventListener('touchend', release);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-focus-trap.js","sources":["../../src/components/eui-focus-trap.gts"],"sourcesContent":["/*\n * Ported from @elastic/eui 123.1.0 `components/focus_trap/focus_trap.tsx`.\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under\n * one or more contributor license agreements. Licensed under the Elastic\n * License 2.0 or the Server Side Public License, v 1; see vendor/eui-latest.\n */\nimport Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\n\nimport { focusTrap } from 'ember-focus-trap';\nimport { modifier } from 'ember-modifier';\n\nimport {\n createRegisteredFocusTrap,\n focusTrapContains,\n setFocusTrapContainers\n} from '../-private/focus-trap-registry.ts';\nimport {\n isolateOutside,\n lockBodyScroll\n} from '../-private/focus-trap-effects.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport { euiClass } from '../utils/eui/styles.ts';\n\nimport type { FocusTrap } from 'focus-trap';\nimport type { EuiCss } from '../utils/eui/styles.ts';\n\n/** An element, a selector, or a function returning an element. */\nexport type EuiFocusTarget =\n | string\n | HTMLElement\n | SVGElement\n | (() => HTMLElement | SVGElement | null | undefined);\n\nexport interface EuiFocusTrapSignature {\n Element: HTMLDivElement;\n Args: {\n /** Turns the trap off. Defaults to `false`. */\n disabled?: boolean;\n /**\n * Where focus goes when the trap is deactivated: `true` returns it to the\n * element focused before activation, `false` leaves it, `FocusOptions`\n * return it with those options and a function receives that element and\n * returns any of these. Defaults to `true`.\n */\n returnFocus?:\n | boolean\n | FocusOptions\n | ((returnTo: Element) => boolean | FocusOptions);\n /**\n * The element focused when the trap activates (selector, element or a\n * function). Otherwise the first `[data-autofocus]` element, then the\n * first tabbable one.\n */\n initialFocus?: EuiFocusTarget;\n /** Set to `false` to not move focus into the trap on activation. */\n autoFocus?: boolean;\n /**\n * Called on a mouse or touch press outside the trap (and its shards and\n * portalled surfaces).\n */\n onClickOutside?: (event: MouseEvent | TouchEvent) => void;\n /** Call `@onClickOutside` on mouseup/touchend instead of on press. */\n closeOnMouseup?: boolean;\n /** The first outside click disables the trap until `@disabled` changes. */\n clickOutsideDisables?: boolean;\n /** Called when Escape is pressed while focus is inside the trap. */\n onEscapeKey?: (event: KeyboardEvent) => void;\n /** Called with the trap element after activation. */\n onActivation?: (node: HTMLElement) => void;\n /** Called after deactivation. */\n onDeactivation?: () => void;\n /**\n * Extra containers that count as inside the trap, as elements, selectors\n * or functions returning an element (upstream's ref objects).\n */\n shards?: EuiFocusTarget[];\n /**\n * Keep focus trapped inside iframes too. By default (`false`) focus may\n * move into an iframe outside the trap.\n */\n crossFrame?: boolean;\n /** Locks body scrolling while the trap is active. Defaults to `false`. */\n scrollLock?: boolean;\n /** How the scrollbar width is kept on lock. Defaults to `'padding'`. */\n gapMode?: 'padding' | 'margin';\n /**\n * `false` hides the content outside the trap from assistive technology\n * and disables pointer events on it. Defaults to `true`.\n */\n noIsolation?: boolean;\n /** Extra styles composed into the wrapper's class. */\n css?: EuiCss;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst resolve = (target: EuiFocusTarget | undefined) => {\n if (!target) return null;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target);\n }\n if (typeof target === 'function') return (target() as HTMLElement) ?? null;\n return target as HTMLElement;\n};\n\n/** Everything that happens around the trap itself, as one effect. */\nconst trapEffects = modifier(\n (element: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const { enabled } = owner;\n if (!enabled) return;\n\n const cleanups: Array<() => void> = [];\n const inside = (target: EventTarget | null) => {\n if (!(target instanceof Node)) return false;\n const trap = owner.trap;\n if (trap) return focusTrapContains(trap, target);\n return element.contains(target);\n };\n\n // click outside\n const press = (event: MouseEvent | TouchEvent) => {\n if (inside(event.target)) return;\n owner.handleOutsideClick(event);\n };\n document.addEventListener('mousedown', press);\n document.addEventListener('touchstart', press);\n cleanups.push(() => {\n document.removeEventListener('mousedown', press);\n document.removeEventListener('touchstart', press);\n });\n\n // escape\n const keydown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n if (!inside(event.target) && !inside(document.activeElement)) return;\n owner.args.onEscapeKey?.(event);\n };\n document.addEventListener('keydown', keydown);\n cleanups.push(() => document.removeEventListener('keydown', keydown));\n\n // `crossFrame` false (the default): focus may move into an iframe that\n // is outside the trap, so the trap pauses while that iframe has focus\n // and resumes when focus returns to the page.\n if (!owner.args.crossFrame) {\n let paused = false;\n const focusin = (event: FocusEvent) => {\n const trap = owner.trap;\n if (!trap) return;\n const target = event.target;\n if (\n target instanceof HTMLIFrameElement &&\n !inside(target) &&\n !paused\n ) {\n paused = true;\n trap.pause();\n } else if (paused && !(target instanceof HTMLIFrameElement)) {\n paused = false;\n trap.unpause();\n }\n };\n const refocus = () => {\n if (!paused) return;\n paused = false;\n owner.trap?.unpause();\n };\n window.addEventListener('focusin', focusin, true);\n window.addEventListener('focus', refocus);\n cleanups.push(() => {\n window.removeEventListener('focusin', focusin, true);\n window.removeEventListener('focus', refocus);\n if (paused) owner.trap?.unpause();\n });\n }\n\n if (owner.args.scrollLock) {\n cleanups.push(lockBodyScroll(owner.args.gapMode ?? 'padding'));\n }\n\n if (owner.args.noIsolation === false) {\n cleanups.push(\n isolateOutside([\n element,\n ...(owner.args.shards ?? [])\n .map(resolve)\n .filter((el): el is HTMLElement => Boolean(el))\n ])\n );\n }\n\n return () => cleanups.forEach((fn) => fn());\n }\n);\n\n/** Keeps the trap's containers in sync with `@shards`. */\nconst syncShards = modifier(\n (element: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const shards = owner.resolvedShards;\n if (owner.trap) setFocusTrapContainers(owner.trap, [element, ...shards]);\n }\n);\n\n/** Resets a click-outside disable when `@disabled` goes back to false. */\nconst resetOnEnable = modifier(\n (_el: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const disabled = Boolean(owner.args.disabled);\n const was = owner.lastDisabled;\n owner.lastDisabled = disabled;\n if (was && !disabled) {\n queueMicrotask(() => (owner.disabledByClick = false));\n }\n }\n);\n\n/**\n * Keeps keyboard focus inside its content (focus-trap, through\n * ember-focus-trap). Portalled surfaces opened from inside the trap, such as\n * popovers and combo box lists, stay usable.\n */\nexport default class EuiFocusTrapComponent extends Component<EuiFocusTrapSignature> {\n @tracked disabledByClick = false;\n trap: FocusTrap | undefined;\n lastDisabled = false;\n private mouseupCleanup: (() => void) | undefined;\n\n willDestroy() {\n super.willDestroy();\n this.mouseupCleanup?.();\n }\n\n get enabled() {\n return !this.args.disabled && !this.disabledByClick;\n }\n\n get resolvedShards() {\n return (this.args.shards ?? [])\n .map(resolve)\n .filter((el): el is HTMLElement => Boolean(el));\n }\n\n @cached\n get classes() {\n return this.args.css\n ? euiClass(getEuiThemeContext(this), this.args.css)\n : undefined;\n }\n\n createTrap = (elements: HTMLElement | HTMLElement[], options = {}) => {\n const base = Array.isArray(elements) ? elements : [elements];\n const trap = createRegisteredFocusTrap(\n [...base, ...this.resolvedShards],\n options\n );\n this.trap = trap;\n return trap;\n };\n\n get createTrapFactory() {\n return this.createTrap as unknown as () => void;\n }\n\n handleOutsideClick = (event: MouseEvent | TouchEvent) => {\n if (this.args.clickOutsideDisables) this.disabledByClick = true;\n if (!this.args.onClickOutside) return;\n if (!this.args.closeOnMouseup) {\n this.args.onClickOutside(event);\n return;\n }\n this.mouseupCleanup?.();\n const release = (e: MouseEvent | TouchEvent) => {\n this.mouseupCleanup?.();\n // Gives a toggling consumer precedence, like upstream.\n setTimeout(() => this.args.onClickOutside?.(e));\n };\n document.addEventListener('mouseup', release);\n document.addEventListener('touchend', release);\n this.mouseupCleanup = () => {\n document.removeEventListener('mouseup', release);\n document.removeEventListener('touchend', release);\n this.mouseupCleanup = undefined;\n };\n };\n\n @cached\n get focusTrapOptions() {\n const { args } = this;\n const returnFocus = args.returnFocus;\n\n const options: Record<string, unknown> = {\n allowOutsideClick: true,\n clickOutsideDeactivates: false,\n escapeDeactivates: false,\n onPostActivate: () => {\n if (this.container) args.onActivation?.(this.container);\n },\n onPostDeactivate: () => args.onDeactivation?.(),\n fallbackFocus: () => {\n const el = this.container as HTMLElement;\n if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '-1');\n return el;\n }\n };\n\n if (args.autoFocus === false) {\n options['initialFocus'] = false;\n } else if (args.initialFocus) {\n options['initialFocus'] = () =>\n resolve(args.initialFocus) ?? this.autofocusTarget();\n } else {\n options['initialFocus'] = () => this.autofocusTarget();\n }\n\n if (returnFocus === false) {\n options['returnFocusOnDeactivate'] = false;\n } else if (typeof returnFocus === 'function') {\n options['setReturnFocus'] = (previous: HTMLElement) =>\n this.applyReturn(returnFocus(previous), previous);\n } else if (returnFocus && typeof returnFocus === 'object') {\n options['setReturnFocus'] = (previous: HTMLElement) =>\n this.applyReturn(returnFocus, previous);\n }\n\n return options;\n }\n\n container: HTMLElement | undefined;\n\n autofocusTarget() {\n // `data-autofocus` is react-focus-on's API; undefined falls back to the\n // first tabbable element.\n return (\n this.container?.querySelector<HTMLElement>('[data-autofocus]') ??\n undefined\n );\n }\n\n applyReturn(\n result: boolean | FocusOptions,\n previous: HTMLElement\n ): HTMLElement | false {\n if (result === false) return false;\n if (result === true) return previous;\n previous.focus(result);\n return false;\n }\n\n capture = modifier((element: HTMLElement) => {\n this.container = element;\n });\n\n <template>\n <div\n class={{this.classes}}\n data-focus-lock-disabled={{if this.enabled \"false\" \"disabled\"}}\n ...attributes\n {{this.capture}}\n {{focusTrap\n _createFocusTrap=this.createTrapFactory\n isActive=this.enabled\n focusTrapOptions=this.focusTrapOptions\n }}\n {{trapEffects this}}\n {{syncShards this}}\n {{resetOnEnable this}}\n >{{yield}}</div>\n </template>\n}\n"],"names":["resolve","target","document","querySelector","trapEffects","modifier","element","owner","enabled","cleanups","inside","Node","trap","focusTrapContains","contains","press","event","handleOutsideClick","addEventListener","push","removeEventListener","keydown","key","defaultPrevented","activeElement","args","onEscapeKey","crossFrame","paused","focusin","HTMLIFrameElement","pause","unpause","refocus","window","scrollLock","lockBodyScroll","gapMode","noIsolation","isolateOutside","shards","map","filter","el","Boolean","forEach","fn","syncShards","resolvedShards","setFocusTrapContainers","resetOnEnable","_el","disabled","was","lastDisabled","queueMicrotask","disabledByClick","EuiFocusTrapComponent","Component","g","prototype","tracked","i","mouseupCleanup","willDestroy","classes","css","euiClass","getEuiThemeContext","undefined","n","cached","createTrap","elements","options","base","Array","isArray","createRegisteredFocusTrap","createTrapFactory","clickOutsideDisables","onClickOutside","closeOnMouseup","release","e","setTimeout","focusTrapOptions","returnFocus","allowOutsideClick","clickOutsideDeactivates","escapeDeactivates","onPostActivate","container","onActivation","onPostDeactivate","onDeactivation","fallbackFocus","hasAttribute","setAttribute","autoFocus","initialFocus","autofocusTarget","previous","applyReturn","result","focus","capture","setComponentTemplate","precompileTemplate","strictMode","scope","focusTrap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-focus-trap.js","sources":["../../src/components/eui-focus-trap.gts"],"sourcesContent":["/*\n * Ported from @elastic/eui 123.1.0 `components/focus_trap/focus_trap.tsx`.\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under\n * one or more contributor license agreements. Licensed under the Elastic\n * License 2.0 or the Server Side Public License, v 1; see vendor/eui-latest.\n */\nimport Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\n\nimport { focusTrap } from 'ember-focus-trap';\nimport { modifier } from 'ember-modifier';\n\nimport {\n createRegisteredFocusTrap,\n focusTrapContains,\n setFocusTrapContainers\n} from '../-private/focus-trap-registry.ts';\nimport {\n isolateOutside,\n lockBodyScroll\n} from '../-private/focus-trap-effects.ts';\nimport { getEuiThemeContext } from '../utils/emotion/consume.ts';\nimport { euiClass } from '../utils/eui/styles.ts';\n\nimport type { FocusTrap } from 'focus-trap';\nimport type { EuiCss } from '../utils/eui/styles.ts';\n\n/** An element, a selector, or a function returning an element. */\nexport type EuiFocusTarget =\n | string\n | HTMLElement\n | SVGElement\n | (() => HTMLElement | SVGElement | null | undefined);\n\nexport interface EuiFocusTrapSignature {\n Element: HTMLDivElement;\n Args: {\n /** Turns the trap off. Defaults to `false`. */\n disabled?: boolean;\n /**\n * Where focus goes when the trap is deactivated: `true` returns it to the\n * element focused before activation, `false` leaves it, `FocusOptions`\n * return it with those options and a function receives that element and\n * returns any of these. Defaults to `true`.\n */\n returnFocus?:\n | boolean\n | FocusOptions\n | ((returnTo: Element) => boolean | FocusOptions);\n /**\n * The element focused when the trap activates (selector, element or a\n * function). Otherwise the first `[data-autofocus]` element, then the\n * first tabbable one.\n */\n initialFocus?: EuiFocusTarget;\n /** Set to `false` to not move focus into the trap on activation. */\n autoFocus?: boolean;\n /**\n * Called on a mouse or touch press outside the trap (and its shards and\n * portalled surfaces).\n */\n onClickOutside?: (event: MouseEvent | TouchEvent) => void;\n /** Call `@onClickOutside` on mouseup/touchend instead of on press. */\n closeOnMouseup?: boolean;\n /** The first outside click disables the trap until `@disabled` changes. */\n clickOutsideDisables?: boolean;\n /** Called when Escape is pressed while focus is inside the trap. */\n onEscapeKey?: (event: KeyboardEvent) => void;\n /** Called with the trap element after activation. */\n onActivation?: (node: HTMLElement) => void;\n /** Called after deactivation. */\n onDeactivation?: () => void;\n /**\n * Extra containers that count as inside the trap, as elements, selectors\n * or functions returning an element (upstream's ref objects).\n */\n shards?: EuiFocusTarget[];\n /**\n * Keep focus trapped inside iframes too. By default (`false`) focus may\n * move into an iframe outside the trap.\n */\n crossFrame?: boolean;\n /** Locks body scrolling while the trap is active. Defaults to `false`. */\n scrollLock?: boolean;\n /** How the scrollbar width is kept on lock. Defaults to `'padding'`. */\n gapMode?: 'padding' | 'margin';\n /**\n * `false` hides the content outside the trap from assistive technology\n * and disables pointer events on it. Defaults to `true`.\n */\n noIsolation?: boolean;\n /** Extra styles composed into the wrapper's class. */\n css?: EuiCss;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst resolve = (target: EuiFocusTarget | undefined) => {\n if (!target) return null;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target);\n }\n if (typeof target === 'function') return (target() as HTMLElement) ?? null;\n return target as HTMLElement;\n};\n\n/** Everything that happens around the trap itself, as one effect. */\nconst trapEffects = modifier(\n (element: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const { enabled } = owner;\n if (!enabled) return;\n\n const cleanups: Array<() => void> = [];\n const inside = (target: EventTarget | null) => {\n if (!(target instanceof Node)) return false;\n const trap = owner.trap;\n if (trap) return focusTrapContains(trap, target);\n return element.contains(target);\n };\n\n // click outside\n const press = (event: MouseEvent | TouchEvent) => {\n if (inside(event.target)) return;\n owner.handleOutsideClick(event);\n };\n document.addEventListener('mousedown', press);\n document.addEventListener('touchstart', press);\n cleanups.push(() => {\n document.removeEventListener('mousedown', press);\n document.removeEventListener('touchstart', press);\n });\n\n // escape\n const keydown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n if (!inside(event.target) && !inside(document.activeElement)) return;\n owner.args.onEscapeKey?.(event);\n };\n document.addEventListener('keydown', keydown);\n cleanups.push(() => document.removeEventListener('keydown', keydown));\n\n // `crossFrame` false (the default): focus may move into an iframe that\n // is outside the trap, so the trap pauses while that iframe has focus\n // and resumes when focus returns to the page.\n if (!owner.args.crossFrame) {\n let paused = false;\n const focusin = (event: FocusEvent) => {\n const trap = owner.trap;\n if (!trap) return;\n const target = event.target;\n if (\n target instanceof HTMLIFrameElement &&\n !inside(target) &&\n !paused\n ) {\n paused = true;\n trap.pause();\n } else if (paused && !(target instanceof HTMLIFrameElement)) {\n paused = false;\n trap.unpause();\n }\n };\n const refocus = () => {\n if (!paused) return;\n paused = false;\n owner.trap?.unpause();\n };\n window.addEventListener('focusin', focusin, true);\n window.addEventListener('focus', refocus);\n cleanups.push(() => {\n window.removeEventListener('focusin', focusin, true);\n window.removeEventListener('focus', refocus);\n if (paused) owner.trap?.unpause();\n });\n }\n\n if (owner.args.scrollLock) {\n cleanups.push(lockBodyScroll(owner.args.gapMode ?? 'padding'));\n }\n\n if (owner.args.noIsolation === false) {\n cleanups.push(\n isolateOutside([\n element,\n ...(owner.args.shards ?? [])\n .map(resolve)\n .filter((el): el is HTMLElement => Boolean(el))\n ])\n );\n }\n\n return () => cleanups.forEach((fn) => fn());\n }\n);\n\n/** Keeps the trap's containers in sync with `@shards`. */\nconst syncShards = modifier(\n (element: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const shards = owner.resolvedShards;\n if (owner.trap) setFocusTrapContainers(owner.trap, [element, ...shards]);\n }\n);\n\n/** Resets a click-outside disable when `@disabled` goes back to false. */\nconst resetOnEnable = modifier(\n (_el: HTMLElement, [owner]: [EuiFocusTrapComponent]) => {\n const disabled = Boolean(owner.args.disabled);\n const was = owner.lastDisabled;\n owner.lastDisabled = disabled;\n if (was && !disabled) {\n queueMicrotask(() => (owner.disabledByClick = false));\n }\n }\n);\n\n/**\n * Keeps keyboard focus inside its content (focus-trap, through\n * ember-focus-trap). Portalled surfaces opened from inside the trap, such as\n * popovers and combo box lists, stay usable.\n */\nexport default class EuiFocusTrapComponent extends Component<EuiFocusTrapSignature> {\n @tracked disabledByClick = false;\n trap: FocusTrap | undefined;\n lastDisabled = false;\n private mouseupCleanup: (() => void) | undefined;\n\n private outsideClickTimer: ReturnType<typeof setTimeout> | undefined;\n\n willDestroy() {\n super.willDestroy();\n this.mouseupCleanup?.();\n clearTimeout(this.outsideClickTimer);\n }\n\n get enabled() {\n return !this.args.disabled && !this.disabledByClick;\n }\n\n get resolvedShards() {\n return (this.args.shards ?? [])\n .map(resolve)\n .filter((el): el is HTMLElement => Boolean(el));\n }\n\n @cached\n get classes() {\n return this.args.css\n ? euiClass(getEuiThemeContext(this), this.args.css)\n : undefined;\n }\n\n createTrap = (elements: HTMLElement | HTMLElement[], options = {}) => {\n const base = Array.isArray(elements) ? elements : [elements];\n const trap = createRegisteredFocusTrap(\n [...base, ...this.resolvedShards],\n options\n );\n this.trap = trap;\n return trap;\n };\n\n get createTrapFactory() {\n return this.createTrap as unknown as () => void;\n }\n\n handleOutsideClick = (event: MouseEvent | TouchEvent) => {\n if (this.args.clickOutsideDisables) this.disabledByClick = true;\n if (!this.args.onClickOutside) return;\n if (!this.args.closeOnMouseup) {\n this.args.onClickOutside(event);\n return;\n }\n this.mouseupCleanup?.();\n const release = (e: MouseEvent | TouchEvent) => {\n this.mouseupCleanup?.();\n // Gives a toggling consumer precedence, like upstream.\n clearTimeout(this.outsideClickTimer);\n this.outsideClickTimer = setTimeout(() => this.args.onClickOutside?.(e));\n };\n document.addEventListener('mouseup', release);\n document.addEventListener('touchend', release);\n this.mouseupCleanup = () => {\n document.removeEventListener('mouseup', release);\n document.removeEventListener('touchend', release);\n this.mouseupCleanup = undefined;\n };\n };\n\n @cached\n get focusTrapOptions() {\n const { args } = this;\n const returnFocus = args.returnFocus;\n\n const options: Record<string, unknown> = {\n allowOutsideClick: true,\n clickOutsideDeactivates: false,\n escapeDeactivates: false,\n onPostActivate: () => {\n if (this.container) args.onActivation?.(this.container);\n },\n onPostDeactivate: () => args.onDeactivation?.(),\n fallbackFocus: () => {\n const el = this.container as HTMLElement;\n if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '-1');\n return el;\n }\n };\n\n if (args.autoFocus === false) {\n options['initialFocus'] = false;\n } else if (args.initialFocus) {\n options['initialFocus'] = () =>\n resolve(args.initialFocus) ?? this.autofocusTarget();\n } else {\n options['initialFocus'] = () => this.autofocusTarget();\n }\n\n if (returnFocus === false) {\n options['returnFocusOnDeactivate'] = false;\n } else if (typeof returnFocus === 'function') {\n options['setReturnFocus'] = (previous: HTMLElement) =>\n this.applyReturn(returnFocus(previous), previous);\n } else if (returnFocus && typeof returnFocus === 'object') {\n options['setReturnFocus'] = (previous: HTMLElement) =>\n this.applyReturn(returnFocus, previous);\n }\n\n return options;\n }\n\n container: HTMLElement | undefined;\n\n autofocusTarget() {\n // `data-autofocus` is react-focus-on's API; undefined falls back to the\n // first tabbable element.\n return (\n this.container?.querySelector<HTMLElement>('[data-autofocus]') ??\n undefined\n );\n }\n\n applyReturn(\n result: boolean | FocusOptions,\n previous: HTMLElement\n ): HTMLElement | false {\n if (result === false) return false;\n if (result === true) return previous;\n previous.focus(result);\n return false;\n }\n\n capture = modifier((element: HTMLElement) => {\n this.container = element;\n });\n\n <template>\n <div\n class={{this.classes}}\n data-focus-lock-disabled={{if this.enabled \"false\" \"disabled\"}}\n ...attributes\n {{this.capture}}\n {{focusTrap\n _createFocusTrap=this.createTrapFactory\n isActive=this.enabled\n focusTrapOptions=this.focusTrapOptions\n }}\n {{trapEffects this}}\n {{syncShards this}}\n {{resetOnEnable this}}\n >{{yield}}</div>\n </template>\n}\n"],"names":["resolve","target","document","querySelector","trapEffects","modifier","element","owner","enabled","cleanups","inside","Node","trap","focusTrapContains","contains","press","event","handleOutsideClick","addEventListener","push","removeEventListener","keydown","key","defaultPrevented","activeElement","args","onEscapeKey","crossFrame","paused","focusin","HTMLIFrameElement","pause","unpause","refocus","window","scrollLock","lockBodyScroll","gapMode","noIsolation","isolateOutside","shards","map","filter","el","Boolean","forEach","fn","syncShards","resolvedShards","setFocusTrapContainers","resetOnEnable","_el","disabled","was","lastDisabled","queueMicrotask","disabledByClick","EuiFocusTrapComponent","Component","g","prototype","tracked","i","mouseupCleanup","outsideClickTimer","willDestroy","clearTimeout","classes","css","euiClass","getEuiThemeContext","undefined","n","cached","createTrap","elements","options","base","Array","isArray","createRegisteredFocusTrap","createTrapFactory","clickOutsideDisables","onClickOutside","closeOnMouseup","release","e","setTimeout","focusTrapOptions","returnFocus","allowOutsideClick","clickOutsideDeactivates","escapeDeactivates","onPostActivate","container","onActivation","onPostDeactivate","onDeactivation","fallbackFocus","hasAttribute","setAttribute","autoFocus","initialFocus","autofocusTarget","previous","applyReturn","result","focus","capture","setComponentTemplate","precompileTemplate","strictMode","scope","focusTrap"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { fn } from '@ember/helper';
|
|
|
4
4
|
import { on } from '@ember/modifier';
|
|
5
5
|
import { action } from '@ember/object';
|
|
6
6
|
import didInsert from '@ember/render-modifiers/modifiers/did-insert';
|
|
7
|
+
import willDestroy from '@ember/render-modifiers/modifiers/will-destroy';
|
|
7
8
|
import { service } from '@ember/service';
|
|
8
9
|
import { getEuiThemeContext } from '../utils/emotion/consume.js';
|
|
9
10
|
import { useEuiBorealisStyles, euiClass } from '../utils/eui/styles.js';
|
|
@@ -34,7 +35,7 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
34
35
|
g(this.prototype, "euiI18n", [service]);
|
|
35
36
|
}
|
|
36
37
|
#euiI18n = (i(this, "euiI18n"), void 0);
|
|
37
|
-
dismissTimeoutIds =
|
|
38
|
+
/** Pending fade-out timeouts, by toast id (pruned when they fire). */dismissTimeoutIds = new Map();
|
|
38
39
|
toastIdToTimerMap = {};
|
|
39
40
|
isScrollingToBottom = false;
|
|
40
41
|
isScrolledToBottom = true;
|
|
@@ -269,7 +270,9 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
269
270
|
}
|
|
270
271
|
dismissToast(toast) {
|
|
271
272
|
// Remove the toast after it's done fading out.
|
|
272
|
-
this.dismissTimeoutIds.
|
|
273
|
+
window.clearTimeout(this.dismissTimeoutIds.get(toast.id));
|
|
274
|
+
this.dismissTimeoutIds.set(toast.id, window.setTimeout(() => {
|
|
275
|
+
this.dismissTimeoutIds.delete(toast.id);
|
|
273
276
|
// It is possible to double-dismiss a toast (e.g. by double-clicking
|
|
274
277
|
// its "x" button): only the first dismissal counts.
|
|
275
278
|
if (Object.prototype.hasOwnProperty.call(this.toastIdToTimerMap, toast.id)) {
|
|
@@ -291,10 +294,33 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
291
294
|
[toast.id]: true
|
|
292
295
|
};
|
|
293
296
|
}
|
|
294
|
-
/**
|
|
297
|
+
/**
|
|
298
|
+
* A toast element is gone. When the app removed it from `@toasts` (rather
|
|
299
|
+
* than this list dismissing it), drop its timers: they would otherwise
|
|
300
|
+
* fire for a toast that no longer exists.
|
|
301
|
+
*/
|
|
295
302
|
static {
|
|
296
303
|
n(this.prototype, "dismissToast", [action]);
|
|
297
304
|
}
|
|
305
|
+
willDestroyToast(toast) {
|
|
306
|
+
if (this.isDestroying || this.isDestroyed) return;
|
|
307
|
+
if (this.toasts.some(t => t.id === toast.id)) return;
|
|
308
|
+
window.clearTimeout(this.dismissTimeoutIds.get(toast.id));
|
|
309
|
+
this.dismissTimeoutIds.delete(toast.id);
|
|
310
|
+
this.toastIdToTimerMap[toast.id]?.clear();
|
|
311
|
+
delete this.toastIdToTimerMap[toast.id];
|
|
312
|
+
if (toast.id in this.toastIdToDismissedMap) {
|
|
313
|
+
const dismissed = {
|
|
314
|
+
...this.toastIdToDismissedMap
|
|
315
|
+
};
|
|
316
|
+
delete dismissed[toast.id];
|
|
317
|
+
this.toastIdToDismissedMap = dismissed;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/** Upstream "Clear all": dismisses every toast at once (no fade out). */
|
|
321
|
+
static {
|
|
322
|
+
n(this.prototype, "willDestroyToast", [action]);
|
|
323
|
+
}
|
|
298
324
|
clearAll() {
|
|
299
325
|
for (const toast of [...this.toasts]) {
|
|
300
326
|
this.args.dismissToast?.apply(this, [toast]);
|
|
@@ -329,7 +355,8 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
329
355
|
if (this.startScrollingAnimationFrame !== 0) {
|
|
330
356
|
window.cancelAnimationFrame(this.startScrollingAnimationFrame);
|
|
331
357
|
}
|
|
332
|
-
this.dismissTimeoutIds.forEach(clearTimeout);
|
|
358
|
+
this.dismissTimeoutIds.forEach(id => window.clearTimeout(id));
|
|
359
|
+
this.dismissTimeoutIds.clear();
|
|
333
360
|
for (const toastId in this.toastIdToTimerMap) {
|
|
334
361
|
if (Object.prototype.hasOwnProperty.call(this.toastIdToTimerMap, toastId)) {
|
|
335
362
|
this.toastIdToTimerMap[toastId]?.clear();
|
|
@@ -340,7 +367,7 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
340
367
|
// No whitespace inside the list: without toasts it must match `:empty`
|
|
341
368
|
// (upstream's padding rules).
|
|
342
369
|
static {
|
|
343
|
-
setComponentTemplate(precompileTemplate("<div aria-live=\"polite\" role=\"log\" class=\"euiGlobalToastList {{this.classes}}\" {{didInsert this.didInsert}} {{on \"scroll\" this.onScroll}} {{on \"mouseenter\" this.onMouseEnter}} {{on \"mouseleave\" this.onMouseLeave}} ...attributes>{{#if this.hasContent~}}\n <div class={{this.contentClass}}>\n {{#if this.showBadge}}\n <EuiNotificationBadge class=\"euiGlobalToastList__countBadge\" data-test-subj=\"euiGlobalToastListNotificationBadge\" @size=\"m\" @color=\"subdued\" @css={{this.badgeCss}}>{{this.toasts.length}}</EuiNotificationBadge>\n {{/if}}\n {{#each this.toasts key=\"id\" as |toast|}}\n <EuiToast class=\"euiGlobalToastListItem\" @css={{this.itemCssFor toast.id}} @animationMs={{this.lifeTimeFor toast}} @title={{toast.title}} @useMarkdownFormat={{toast.useMarkdownFormat}} @body={{toast.body}} @text={{toast.text}} @color={{toast.color}} @iconType={{toast.iconType}} @actionProps={{toast.actionProps}} @onClose={{fn this.closeToast toast}} {{didInsert (fn this.didInsertToast toast)}} {{on \"focusin\" this.onFocusIn}} {{on \"focusout\" this.onFocusOut}} />\n {{/each}}\n {{#if this.showClearAll}}\n <EuiButton class=\"euiGlobalToastListItem\" @fullWidth={{true}} @size=\"s\" @color=\"text\" @css={{this.clearAllCss}} aria-label={{this.clearAllLabel}} data-test-subj=\"euiClearAllToastsButton\" {{on \"click\" this.clearAll}}>{{this.clearAllText}}</EuiButton>\n {{/if}}\n </div>\n {{~/if}}</div>", {
|
|
370
|
+
setComponentTemplate(precompileTemplate("<div aria-live=\"polite\" role=\"log\" class=\"euiGlobalToastList {{this.classes}}\" {{didInsert this.didInsert}} {{on \"scroll\" this.onScroll}} {{on \"mouseenter\" this.onMouseEnter}} {{on \"mouseleave\" this.onMouseLeave}} ...attributes>{{#if this.hasContent~}}\n <div class={{this.contentClass}}>\n {{#if this.showBadge}}\n <EuiNotificationBadge class=\"euiGlobalToastList__countBadge\" data-test-subj=\"euiGlobalToastListNotificationBadge\" @size=\"m\" @color=\"subdued\" @css={{this.badgeCss}}>{{this.toasts.length}}</EuiNotificationBadge>\n {{/if}}\n {{#each this.toasts key=\"id\" as |toast|}}\n <EuiToast class=\"euiGlobalToastListItem\" @css={{this.itemCssFor toast.id}} @animationMs={{this.lifeTimeFor toast}} @title={{toast.title}} @useMarkdownFormat={{toast.useMarkdownFormat}} @body={{toast.body}} @text={{toast.text}} @color={{toast.color}} @iconType={{toast.iconType}} @actionProps={{toast.actionProps}} @onClose={{fn this.closeToast toast}} {{didInsert (fn this.didInsertToast toast)}} {{willDestroy (fn this.willDestroyToast toast)}} {{on \"focusin\" this.onFocusIn}} {{on \"focusout\" this.onFocusOut}} />\n {{/each}}\n {{#if this.showClearAll}}\n <EuiButton class=\"euiGlobalToastListItem\" @fullWidth={{true}} @size=\"s\" @color=\"text\" @css={{this.clearAllCss}} aria-label={{this.clearAllLabel}} data-test-subj=\"euiClearAllToastsButton\" {{on \"click\" this.clearAll}}>{{this.clearAllText}}</EuiButton>\n {{/if}}\n </div>\n {{~/if}}</div>", {
|
|
344
371
|
strictMode: true,
|
|
345
372
|
scope: () => ({
|
|
346
373
|
didInsert,
|
|
@@ -348,6 +375,7 @@ const CLEAR_ALL_TOASTS_THRESHOLD_DEFAULT = 3;
|
|
|
348
375
|
EuiNotificationBadge,
|
|
349
376
|
EuiToast,
|
|
350
377
|
fn,
|
|
378
|
+
willDestroy,
|
|
351
379
|
EuiButton
|
|
352
380
|
})
|
|
353
381
|
}), this);
|