@ember-eui/core 12.0.10 → 12.0.12

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.
Files changed (104) hide show
  1. package/declarations/components/eui-accordion.d.ts +3 -2
  2. package/declarations/components/eui-accordion.d.ts.map +1 -1
  3. package/declarations/components/eui-auto-sizer.d.ts.map +1 -1
  4. package/declarations/components/eui-card.d.ts +1 -0
  5. package/declarations/components/eui-card.d.ts.map +1 -1
  6. package/declarations/components/eui-code-block.d.ts +1 -0
  7. package/declarations/components/eui-code-block.d.ts.map +1 -1
  8. package/declarations/components/eui-code.d.ts +2 -2
  9. package/declarations/components/eui-code.d.ts.map +1 -1
  10. package/declarations/components/eui-context-menu-item.d.ts +1 -0
  11. package/declarations/components/eui-context-menu-item.d.ts.map +1 -1
  12. package/declarations/components/eui-dual-range.d.ts +1 -0
  13. package/declarations/components/eui-dual-range.d.ts.map +1 -1
  14. package/declarations/components/eui-field-search.d.ts +1 -0
  15. package/declarations/components/eui-field-search.d.ts.map +1 -1
  16. package/declarations/components/eui-file-picker.d.ts +1 -0
  17. package/declarations/components/eui-file-picker.d.ts.map +1 -1
  18. package/declarations/components/eui-flyout.d.ts +1 -1
  19. package/declarations/components/eui-flyout.d.ts.map +1 -1
  20. package/declarations/components/eui-header-section-item-button.d.ts +1 -0
  21. package/declarations/components/eui-header-section-item-button.d.ts.map +1 -1
  22. package/declarations/components/eui-inner-text.d.ts.map +1 -1
  23. package/declarations/components/eui-input-popover.d.ts +1 -0
  24. package/declarations/components/eui-input-popover.d.ts.map +1 -1
  25. package/declarations/components/eui-markdown-editor-footer.d.ts.map +1 -1
  26. package/declarations/components/eui-markdown-editor-toolbar.d.ts.map +1 -1
  27. package/declarations/components/eui-markdown-editor.d.ts +1 -0
  28. package/declarations/components/eui-markdown-editor.d.ts.map +1 -1
  29. package/declarations/components/eui-overlay-mask.d.ts +1 -0
  30. package/declarations/components/eui-overlay-mask.d.ts.map +1 -1
  31. package/declarations/components/eui-popover.d.ts.map +1 -1
  32. package/declarations/components/eui-portal.d.ts +1 -1
  33. package/declarations/components/eui-portal.d.ts.map +1 -1
  34. package/declarations/components/eui-range-ticks.d.ts +2 -1
  35. package/declarations/components/eui-range-ticks.d.ts.map +1 -1
  36. package/declarations/components/eui-range-track.d.ts +2 -1
  37. package/declarations/components/eui-range-track.d.ts.map +1 -1
  38. package/declarations/components/eui-range.d.ts +2 -2
  39. package/declarations/components/eui-range.d.ts.map +1 -1
  40. package/declarations/components/eui-tool-tip-popover.d.ts.map +1 -1
  41. package/declarations/components/eui-tool-tip.d.ts +1 -1
  42. package/declarations/components/eui-tool-tip.d.ts.map +1 -1
  43. package/declarations/components/eui-wrapping-popover.d.ts.map +1 -1
  44. package/declarations/modifiers/outside-click-detector.d.ts +3 -3
  45. package/declarations/modifiers/outside-click-detector.d.ts.map +1 -1
  46. package/declarations/modifiers/resize-observer.d.ts +4 -4
  47. package/declarations/modifiers/resize-observer.d.ts.map +1 -1
  48. package/dist/components/eui-accordion.js +13 -10
  49. package/dist/components/eui-accordion.js.map +1 -1
  50. package/dist/components/eui-auto-sizer.js +4 -0
  51. package/dist/components/eui-auto-sizer.js.map +1 -1
  52. package/dist/components/eui-card.js +4 -0
  53. package/dist/components/eui-card.js.map +1 -1
  54. package/dist/components/eui-code-block.js +7 -0
  55. package/dist/components/eui-code-block.js.map +1 -1
  56. package/dist/components/eui-code.js +3 -1
  57. package/dist/components/eui-code.js.map +1 -1
  58. package/dist/components/eui-collapsible-nav-group.js +2 -2
  59. package/dist/components/eui-collapsible-nav-group.js.map +1 -1
  60. package/dist/components/eui-context-menu-item.js +4 -0
  61. package/dist/components/eui-context-menu-item.js.map +1 -1
  62. package/dist/components/eui-dual-range.js +4 -0
  63. package/dist/components/eui-dual-range.js.map +1 -1
  64. package/dist/components/eui-field-search.js +4 -0
  65. package/dist/components/eui-field-search.js.map +1 -1
  66. package/dist/components/eui-file-picker.js +4 -0
  67. package/dist/components/eui-file-picker.js.map +1 -1
  68. package/dist/components/eui-flyout.js.map +1 -1
  69. package/dist/components/eui-header-section-item-button.js +5 -0
  70. package/dist/components/eui-header-section-item-button.js.map +1 -1
  71. package/dist/components/eui-inner-text.js +1 -0
  72. package/dist/components/eui-inner-text.js.map +1 -1
  73. package/dist/components/eui-input-popover.js +5 -0
  74. package/dist/components/eui-input-popover.js.map +1 -1
  75. package/dist/components/eui-markdown-editor-footer.js +14 -5
  76. package/dist/components/eui-markdown-editor-footer.js.map +1 -1
  77. package/dist/components/eui-markdown-editor-toolbar.js +4 -2
  78. package/dist/components/eui-markdown-editor-toolbar.js.map +1 -1
  79. package/dist/components/eui-markdown-editor.js +6 -0
  80. package/dist/components/eui-markdown-editor.js.map +1 -1
  81. package/dist/components/eui-notification-event-messages.js +2 -2
  82. package/dist/components/eui-notification-event-messages.js.map +1 -1
  83. package/dist/components/eui-overlay-mask.js +4 -0
  84. package/dist/components/eui-overlay-mask.js.map +1 -1
  85. package/dist/components/eui-popover.js +3 -0
  86. package/dist/components/eui-popover.js.map +1 -1
  87. package/dist/components/eui-portal.js +2 -1
  88. package/dist/components/eui-portal.js.map +1 -1
  89. package/dist/components/eui-range-ticks.js +4 -1
  90. package/dist/components/eui-range-ticks.js.map +1 -1
  91. package/dist/components/eui-range-track.js +4 -0
  92. package/dist/components/eui-range-track.js.map +1 -1
  93. package/dist/components/eui-range.js.map +1 -1
  94. package/dist/components/eui-tool-tip-popover.js +1 -0
  95. package/dist/components/eui-tool-tip-popover.js.map +1 -1
  96. package/dist/components/eui-tool-tip.js +8 -5
  97. package/dist/components/eui-tool-tip.js.map +1 -1
  98. package/dist/components/eui-wrapping-popover.js +2 -0
  99. package/dist/components/eui-wrapping-popover.js.map +1 -1
  100. package/dist/modifiers/outside-click-detector.js +6 -3
  101. package/dist/modifiers/outside-click-detector.js.map +1 -1
  102. package/dist/modifiers/resize-observer.js +10 -3
  103. package/dist/modifiers/resize-observer.js.map +1 -1
  104. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"eui-context-menu-item.js","sources":["../../src/components/eui-context-menu-item.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport { and, not } from 'ember-truth-helpers';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport EuiIcon from './eui-icon.gts';\nimport EuiLoadingSpinner from './eui-loading-spinner.gts';\n\nimport type { layoutAlignMapping, sizeMapping } from '../utils/css-mappings/eui-context-menu-item.ts';\nimport type { EuiIconSignature } from './eui-icon';\n\nexport interface EuiContextMenuItemSignature {\n Element: HTMLAnchorElement | HTMLButtonElement;\n Args: {\n layoutAlign?: keyof typeof layoutAlignMapping;\n disabled?: boolean;\n size?: keyof typeof sizeMapping;\n href?: string;\n target?: string;\n isLoading?: boolean;\n icon: EuiIconSignature['Args']['type'];\n iconClasses?: string;\n hasPanel?: boolean;\n };\n\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiContextMenuItemComponent extends Component<EuiContextMenuItemSignature> {\n @tracked link: HTMLAnchorElement | HTMLButtonElement | null = null;\n\n @action\n registerLink(e: HTMLAnchorElement | HTMLButtonElement) {\n this.link = e;\n }\n\n <template>\n {{#let\n (classNames\n \"euiContextMenuItem\"\n componentName=\"EuiContextMenuItem\"\n disabled=@disabled\n layoutAlign=(argOrDefault @layoutAlign \"center\")\n size=@size\n )\n as |classes|\n }}\n {{#if (and @href (not @disabled))}}\n <a\n class={{classes}}\n href={{@href}}\n target={{@target}}\n {{didInsert this.registerLink}}\n ...attributes\n />\n\n {{else}}\n <button\n class={{classes}}\n disabled={{@disabled}}\n type=\"button\"\n {{didInsert this.registerLink}}\n ...attributes\n />\n {{/if}}\n {{/let}}\n\n {{! shared code that will be rendered inside the button or anchor }}\n {{#if this.link}}\n {{#in-element this.link}}\n <span\n class={{classNames\n \"euiContextMenu__itemLayout\"\n componentName=\"EuiContextMenuItem\"\n layoutAlign=(argOrDefault @layoutAlign \"center\")\n }}\n >\n {{#if @isLoading}}\n {{! spinner is not part of eui spec }}\n <EuiLoadingSpinner class=\"euiContextMenu__icon\" />\n {{else}}\n <EuiIcon\n @iconClasses={{concat \"euiContextMenu__icon \" @iconClasses}}\n @type={{@icon}}\n @size=\"m\"\n @color=\"inherit\"\n />\n {{/if}}\n <span class=\"euiContextMenuItem__text\">\n {{yield}}\n </span>\n {{#if @hasPanel}}\n <EuiIcon\n @type=\"arrowRight\"\n @size=\"m\"\n class=\"euiContextMenu__arrow\"\n />\n {{/if}}\n </span>\n {{/in-element}}\n {{/if}}\n </template>\n}\n"],"names":["EuiContextMenuItemComponent","Component","g","prototype","tracked","i","void 0","registerLink","e","link","n","action","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","and","not","didInsert","EuiLoadingSpinner","EuiIcon","concat"],"mappings":";;;;;;;;;;;;;;AAmCe,MAAMA,oCAAoCC,SAAU,CAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,MAAA,EAAA,CAChEC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6D,IAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAAC,MAAA;EAGnEC,YAAaA,CAAAC,CAAwC,EAAE;IACrD,IAAI,CAACC,IAAI,GAAGD,CAAA;AACd;AAAA,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAP,SAAA,EAAA,cAAA,EAAA,CAHCQ,MAAA,CAAA,CAAA;AAAA;AAKD,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAiEA,y4CAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,UAAA;QAAAC,YAAA;QAAAC,GAAA;QAAAC,GAAA;QAAAC,SAAA;QAAAC,iBAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"eui-context-menu-item.js","sources":["../../src/components/eui-context-menu-item.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport { and, not } from 'ember-truth-helpers';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport EuiIcon from './eui-icon.gts';\nimport EuiLoadingSpinner from './eui-loading-spinner.gts';\n\nimport type { layoutAlignMapping, sizeMapping } from '../utils/css-mappings/eui-context-menu-item.ts';\nimport type { EuiIconSignature } from './eui-icon';\n\nexport interface EuiContextMenuItemSignature {\n Element: HTMLAnchorElement | HTMLButtonElement;\n Args: {\n layoutAlign?: keyof typeof layoutAlignMapping;\n disabled?: boolean;\n size?: keyof typeof sizeMapping;\n href?: string;\n target?: string;\n isLoading?: boolean;\n icon: EuiIconSignature['Args']['type'];\n iconClasses?: string;\n hasPanel?: boolean;\n };\n\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiContextMenuItemComponent extends Component<EuiContextMenuItemSignature> {\n @tracked link: HTMLAnchorElement | HTMLButtonElement | null = null;\n\n @action\n registerLink(e: HTMLAnchorElement | HTMLButtonElement) {\n this.link = e;\n }\n\n willDestroy() {\n super.willDestroy();\n \n this.link = null;\n }\n\n <template>\n {{#let\n (classNames\n \"euiContextMenuItem\"\n componentName=\"EuiContextMenuItem\"\n disabled=@disabled\n layoutAlign=(argOrDefault @layoutAlign \"center\")\n size=@size\n )\n as |classes|\n }}\n {{#if (and @href (not @disabled))}}\n <a\n class={{classes}}\n href={{@href}}\n target={{@target}}\n {{didInsert this.registerLink}}\n ...attributes\n />\n\n {{else}}\n <button\n class={{classes}}\n disabled={{@disabled}}\n type=\"button\"\n {{didInsert this.registerLink}}\n ...attributes\n />\n {{/if}}\n {{/let}}\n\n {{! shared code that will be rendered inside the button or anchor }}\n {{#if this.link}}\n {{#in-element this.link}}\n <span\n class={{classNames\n \"euiContextMenu__itemLayout\"\n componentName=\"EuiContextMenuItem\"\n layoutAlign=(argOrDefault @layoutAlign \"center\")\n }}\n >\n {{#if @isLoading}}\n {{! spinner is not part of eui spec }}\n <EuiLoadingSpinner class=\"euiContextMenu__icon\" />\n {{else}}\n <EuiIcon\n @iconClasses={{concat \"euiContextMenu__icon \" @iconClasses}}\n @type={{@icon}}\n @size=\"m\"\n @color=\"inherit\"\n />\n {{/if}}\n <span class=\"euiContextMenuItem__text\">\n {{yield}}\n </span>\n {{#if @hasPanel}}\n <EuiIcon\n @type=\"arrowRight\"\n @size=\"m\"\n class=\"euiContextMenu__arrow\"\n />\n {{/if}}\n </span>\n {{/in-element}}\n {{/if}}\n </template>\n}\n"],"names":["EuiContextMenuItemComponent","Component","g","prototype","tracked","i","void 0","registerLink","e","link","n","action","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","and","not","didInsert","EuiLoadingSpinner","EuiIcon","concat"],"mappings":";;;;;;;;;;;;;;AAmCe,MAAMA,oCAAoCC,SAAU,CAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,MAAA,EAAA,CAChEC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6D,IAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAAC,MAAA;EAGnEC,YAAaA,CAAAC,CAAwC,EAAE;IACrD,IAAI,CAACC,IAAI,GAAGD,CAAA;AACd;AAAA,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAP,SAAA,EAAA,cAAA,EAAA,CAHCQ,MAAA,CAAA,CAAA;AAAA;AAKDC,EAAAA,WAAcA,GAAA;IACZ,KAAK,CAACA,WAAA,EAAA;IAEN,IAAI,CAACH,IAAI,GAAG,IAAA;AACd;AAEA,EAAA;IAAAI,oBAAA,CAAAC,kBAAA,CAiEA,y4CAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,UAAA;QAAAC,YAAA;QAAAC,GAAA;QAAAC,GAAA;QAAAC,SAAA;QAAAC,iBAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -400,6 +400,10 @@ class EuiDualRangeComponent extends Component {
400
400
  get canShowDropdown() {
401
401
  return this.showInputOnly && !this.args.readOnly && !this.args.disabled;
402
402
  }
403
+ willDestroy() {
404
+ super.willDestroy();
405
+ this.rangeSliderRef = null;
406
+ }
403
407
  static {
404
408
  setComponentTemplate(precompileTemplate("\n {{#let (and (argOrDefault @isPrependProvided true) (has-block \"prepend\")) (and (argOrDefault @isAppendProvided true) (has-block \"append\")) (and (not (argOrDefault @isFakeMaxBlock false)) (has-block \"max\")) (and (not (argOrDefault @isFakeMinBlock false)) (has-block \"min\")) as |hasPrepend hasAppend hasMaxBlock hasMinBlock|}}\n {{#if this.showInputOnly}}\n <EuiInputPopover class=\"euiRange__popover\" @fullWidth={{this.fullWidth}} @isOpen={{this.isPopoverOpen}} @closePopover={{this.closePopover}} @disableFocusTrap={{true}} @onPanelResize={{this.onResize}}>\n <:input>\n <EuiFormControlLayoutDelimited @fullWidth={{this.fullWidth}} @compressed={{this.compressed}} @readOnly={{@readOnly}} @disabled={{@disabled}} @useGroup={{or hasPrepend hasAppend}}>\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <EuiRangeInput class={{classes}} @digitTolerance={{this.digitTolerance}} @side=\"min\" @min={{this.min}} {{!--@glint-expect-error--}} @max={{castTo this.upperValue to=\"number\"}} @step={{this.step}} @value={{this.lowerValue}} @disabled={{@disabled}} @compressed={{this.compressed}} @onChange={{this.handleLowerInputChange}} @name=\"{{@name}}-minValue\" @readOnly={{@readOnly}} @autoSize={{false}} @fullWidth={{this.fullWidth}} @isInvalid={{@isInvalid}} @isPrependProvided={{hasAppend}} @isAppendProvided={{hasPrepend}} @controlOnly={{true}} @disable={{@disable}} ...attributes {{on \"mousedown\" (fn this.setPreventPopoverClose true)}} {{onKey \"_all\" this.handleInputKeyDown}} {{on \"focus\" (if this.canShowDropdown this.onInputFocus (optional @onFocus))}} {{on \"blur\" (if this.canShowDropdown this.onInputBlur (optional @onBlur))}} {{on \"input\" this.handleLowerInputChange}}>\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:startControl>\n <:endControl as |classes|>\n <EuiRangeInput class={{classes}} @digitTolerance={{this.digitTolerance}} @side=\"max\" {{!--@glint-expect-error--}} @min={{castTo this.lowerValue to=\"number\"}} @max={{this.max}} @step={{this.step}} @value={{this.upperValue}} @disabled={{@disabled}} @compressed={{this.compressed}} @name=\"{{@name}}-maxValue\" @readOnly={{@readOnly}} @autoSize={{false}} @fullWidth={{this.fullWidth}} @isInvalid={{@isInvalid}} @isPrependProvided={{hasAppend}} @isAppendProvided={{hasPrepend}} @controlOnly={{true}} @disable={{@disable}} ...attributes {{on \"mousedown\" (fn this.setPreventPopoverClose true)}} {{onKey \"_all\" this.handleInputKeyDown}} {{on \"focus\" (if this.canShowDropdown this.onInputFocus (optional @onFocus))}} {{on \"blur\" (if this.canShowDropdown this.onInputBlur (optional @onBlur))}} {{on \"input\" this.handleUpperInputChange}}>\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n </:input>\n <:content>\n <EuiRangeWrapper class=\"euiDualRange\" @fullWidth={{this.fullWidth}} @compressed={{this.compressed}}>\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 aria-hidden={{if (eq this.showInput true) \"true\" \"false\"}} @compressed={{this.compressed}} @disabled={{@disabled}} @max={{this.max}} @min={{this.min}} @step={{this.step}} @showTicks={{this.showTicks}} @tickInterval={{@tickInterval}} @ticks={{@ticks}} @levels={{this.levels}} @onChange={{this.handleSliderChange}} @value={{@value}}>\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight @compressed={{this.compressed}} @hasFocus={{this.hasFocus}} @showTicks={{this.showTicks}} {{!--@glint-expect-error--}} @min={{castTo this.min to=\"number\"}} {{!--@glint-expect-error--}} @max={{castTo this.max to=\"number\"}} {{!--@glint-expect-error--}} @lowerValue={{castTo this.lowerValue to=\"number\"}} {{!--@glint-expect-error--}} @upperValue={{castTo this.upperValue to=\"number\"}} />\n {{/if}}\n <EuiRangeSlider class=\"euiDualRange__slider\" aria-hidden=\"true\" @id={{this.id}} @name={{@name}} @min={{this.min}} @max={{this.max}} @step={{this.step}} @disabled={{@disabled}} @compressed={{this.compressed}} @onChange={{this.handleSliderChange}} @showTicks={{this.showTicks}} @hasFocus={{this.hasFocus}} tabindex=\"-1\" @showRange={{this.showRange}} ...attributes {{didInsert this.didInsertRangeSlider}} {{on \"mousedown\" (fn this.setPreventPopoverClose true)}} {{on \"focus\" (optional @onFocus)}} {{on \"blur\" (optional @onBlur)}} {{on \"input\" this.handleSliderChange}} />\n {{#if this.rangeSliderRefAvailable}}\n <EuiRangeThumb @min={{this.min}} {{!--@glint-expect-error--}} @max={{castTo this.upperValue to=\"number\"}} {{!--@glint-expect-error--}} @value={{this.lowerValue}} @disabled={{@disabled}} @showTicks={{this.showTicks}} @showInput={{not this.showInput}} aria-describedby={{@ariaDescribedby}} aria-label={{@ariaLabel}} {{simpleStyle this.calculateLowerValueThumbPositionStyle}} {{on \"focus\" this.onThumbFocus}} {{on \"blur\" this.onThumbBlur}} {{onKey \"_all\" this.handleLowerKeyDown}} />\n <EuiRangeThumb {{!--@glint-expect-error--}} @min={{castTo this.lowerValue to=\"number\"}} @max={{this.max}} {{!--@glint-expect-error--}} @value={{this.upperValue}} @disabled={{@disabled}} @showTicks={{this.showTicks}} @showInput={{not this.showInput}} aria-describedby={{@ariaDescribedby}} aria-label={{@ariaLabel}} {{simpleStyle this.calculateUpperValueThumbPositionStyle}} {{on \"focus\" this.onThumbFocus}} {{on \"blur\" this.onThumbBlur}} {{onKey \"_all\" this.handleUpperKeyDown}} />\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 </EuiRangeWrapper>\n </:content>\n </EuiInputPopover>\n {{else}}\n <EuiRangeWrapper class=\"euiDualRange\" @fullWidth={{this.fullWidth}} @compressed={{this.compressed}}>\n {{#if this.showInput}}\n <EuiRangeInput @digitTolerance={{this.digitTolerance}} @side=\"min\" @min={{this.min}} {{!--@glint-expect-error--}} @max={{castTo this.upperValue to=\"number\"}} @step={{this.step}} @value={{this.lowerValue}} @disabled={{@disabled}} @compressed={{this.compressed}} @onChange={{this.handleLowerInputChange}} @name=\"{{@name}}-minValue\" @readOnly={{@readOnly}} @fullWidth={{this.fullWidth}} @isInvalid={{@isInvalid}} @isPrependProvided={{false}} @isAppendProvided={{false}} @controlOnly={{true}} @disable={{@disable}} ...attributes {{onKey \"_all\" this.handleInputKeyDown}} {{on \"focus\" (optional @onFocus)}} {{on \"blur\" (optional @onBlur)}} {{on \"input\" this.handleLowerInputChange}} />\n <div class=\"euiRange__horizontalSpacer\"></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 aria-hidden={{if (eq this.showInput true) \"true\" \"false\"}} @compressed={{this.compressed}} @disabled={{@disabled}} @max={{this.max}} @min={{this.min}} @step={{this.step}} @showTicks={{this.showTicks}} @tickInterval={{@tickInterval}} @ticks={{@ticks}} @levels={{this.levels}} @onChange={{this.handleSliderChange}} @value={{@value}}>\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight @compressed={{this.compressed}} @hasFocus={{this.hasFocus}} @showTicks={{this.showTicks}} {{!--@glint-expect-error--}} @min={{castTo this.min to=\"number\"}} {{!--@glint-expect-error--}} @max={{castTo this.max to=\"number\"}} {{!--@glint-expect-error--}} @lowerValue={{castTo this.lowerValue to=\"number\"}} {{!--@glint-expect-error--}} @upperValue={{castTo this.upperValue to=\"number\"}} />\n {{/if}}\n <EuiRangeSlider class=\"euiDualRange__slider\" aria-hidden=\"true\" @id={{this.id}} @name={{@name}} @min={{this.min}} @max={{this.max}} @step={{this.step}} @disabled={{@disabled}} @compressed={{this.compressed}} @onChange={{this.handleSliderChange}} @showTicks={{this.showTicks}} @hasFocus={{this.hasFocus}} tabindex=\"-1\" @showRange={{this.showRange}} ...attributes {{didInsert this.didInsertRangeSlider}} {{on \"mousedown\" (fn this.setPreventPopoverClose true)}} {{on \"focus\" (optional @onFocus)}} {{on \"blur\" (optional @onBlur)}} {{on \"input\" this.handleSliderChange}} />\n {{#if this.rangeSliderRefAvailable}}\n <EuiRangeThumb @min={{this.min}} {{!--@glint-expect-error--}} @max={{castTo this.upperValue to=\"number\"}} {{!--@glint-expect-error--}} @value={{this.lowerValue}} @disabled={{@disabled}} @showTicks={{this.showTicks}} @showInput={{not this.showInput}} aria-describedby={{@ariaDescribedby}} aria-label={{@ariaLabel}} {{simpleStyle this.calculateLowerValueThumbPositionStyle}} {{on \"focus\" this.onThumbFocus}} {{on \"blur\" this.onThumbBlur}} {{!--@glint-expect-error--}} {{on \"click\" this.handleLowerKeyDown}} />\n <EuiRangeThumb {{!--@glint-expect-error--}} @min={{castTo this.lowerValue to=\"number\"}} @max={{this.max}} {{!--@glint-expect-error--}} @value={{this.upperValue}} @disabled={{@disabled}} @showTicks={{this.showTicks}} @showInput={{not this.showInput}} aria-describedby={{@ariaDescribedby}} aria-label={{@ariaLabel}} {{simpleStyle this.calculateUpperValueThumbPositionStyle}} {{on \"focus\" this.onThumbFocus}} {{on \"blur\" this.onThumbBlur}} {{on \"keydown\" this.handleUpperKeyDown}} />\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 this.showInput}}\n <div class=\"euiRange__horizontalSpacer\"></div>\n {{!-- maxinput --}}\n <EuiRangeInput @digitTolerance={{this.digitTolerance}} @side=\"max\" {{!--@glint-expect-error--}} @min={{castTo this.lowerValue to=\"number\"}} @max={{this.max}} @step={{this.step}} @value={{this.upperValue}} @disabled={{@disabled}} @compressed={{this.compressed}} @name=\"{{@name}}-maxValue\" @readOnly={{@readOnly}} @fullWidth={{this.fullWidth}} @isInvalid={{@isInvalid}} @controlOnly={{this.showInputOnly}} @isPrependProvided={{false}} @isAppendProvided={{false}} @disable={{@disable}} ...attributes {{onKey \"_all\" this.handleInputKeyDown}} {{on \"focus\" (optional @onFocus)}} {{on \"blur\" (optional @onBlur)}} {{on \"input\" this.handleUpperInputChange}} />\n {{/if}}\n </EuiRangeWrapper>\n {{/if}}\n {{/let}}\n ", {
405
409
  strictMode: true,
@@ -1 +1 @@
1
- {"version":3,"file":"eui-dual-range.js","sources":["../../src/components/eui-dual-range.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { 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';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport onKey from 'ember-keyboard/modifiers/on-key';\nimport { and, eq, not, or } from 'ember-truth-helpers';\n\nimport argOrDefault, {\n argOrDefaultDecorator\n} from '../helpers/arg-or-default.ts';\nimport castTo from '../helpers/cast-to.ts';\nimport simpleStyle from '../modifiers/simple-style.ts';\nimport { keys } from '../utils/keys.ts';\nimport { isWithinRange } from '../utils/number/index.ts';\nimport { EUI_THUMB_SIZE } from '../utils/range/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 { EuiFormControlLayoutSignature } from './eui-form-control-layout';\nimport type { EuiRangeArgs } from './eui-range';\nimport type {\n EuiRangeInputArgs,\n EuiRangeInputSignature\n} from './eui-range-input';\nimport type { EuiRangeLevel } from './eui-range-levels';\nimport type { EuiRangeTick } from './eui-range-ticks';\n\nexport type ValueMember = number | string;\n\nexport interface EuiDualRangeArgs {\n value: [ValueMember, ValueMember];\n onBlur?: (event: FocusEvent) => void;\n onFocus?: (event: FocusEvent) => void;\n onChange: (\n values: [ValueMember, ValueMember],\n isValid: boolean,\n event: Event | MouseEvent | KeyboardEvent\n ) => void;\n fullWidth?: boolean;\n isInvalid?: boolean;\n /**\n * Create colored indicators for certain intervals\n */\n levels?: EuiRangeLevel[];\n /**\n * Shows static min/max labels on the sides of the range slider\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\n */\n ticks?: EuiRangeTick[];\n /**\n * Creates an input group with element(s) coming before input. Will only show if `showInput = inputWithPopover`.\n * `string` | `Component` or an array of these\n */\n prepend?: EuiFormControlLayoutSignature['Blocks']['prepend'];\n /**\n * Creates an input group with element(s) coming after input. Will only show if `showInput = inputWithPopover`.\n * `string` | `Component` or an array of these\n */\n append?: EuiFormControlLayoutSignature['Blocks']['append'];\n /**\n * Intended to be uses with aria attributes. Some attributes may be overwritten.\n */\n minInputProps?: Partial<EuiRangeInputArgs>;\n\n /**\n * Intended to be uses with aria attributes. Some attributes may be overwritten.\n */\n maxInputProps?: Partial<EuiRangeInputArgs>;\n\n readOnly?: boolean;\n\n disabled?: boolean;\n\n isPrependProvided?: boolean;\n\n isAppendProvided?: boolean;\n\n isFakeMaxBlock?: boolean;\n\n isFakeMinBlock?: boolean;\n\n disable?: boolean;\n\n ariaDescribedby?: string;\n\n ariaLabel?: string;\n\n name?: string;\n\n id?: string;\n\n compressed?: boolean;\n\n showRange?: boolean;\n\n showTicks?: boolean;\n\n step?: number;\n\n min?: number;\n\n max?: number;\n}\n\nexport interface EuiDualRangeSignature {\n Element: EuiRangeInputSignature['Element'];\n Args: EuiDualRangeArgs;\n Blocks: {\n prepend: EuiRangeInputSignature['Blocks']['prepend'];\n append: EuiRangeInputSignature['Blocks']['append'];\n min: [number?];\n max: [number?];\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 //State\n @tracked id: string = this.args.id || guidFor({});\n @tracked hasFocus = false;\n @tracked rangeSliderRefAvailable = false;\n @tracked isPopoverOpen = false;\n @tracked rangeWidth: number | undefined;\n @tracked isVisible = true;\n ///\n\n preventPopoverClose = false;\n rangeSliderRef: HTMLInputElement | null = null;\n\n @action\n didInsertRangeSlider(ref: HTMLInputElement | null): void {\n this.rangeSliderRef = ref;\n\n this.rangeSliderRefAvailable = !!ref;\n this.rangeWidth = ref ? ref.clientWidth : undefined;\n\n if (this.rangeSliderRef?.clientWidth && !this.isVisible) {\n this.isVisible = true;\n }\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 @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 @action\n calculateThumbPositionStyle(value: number, width?: number): { left: string } {\n // Calculate the left position based on value\n const decimal = (value - this.min) / (this.max - this.min);\n // Must be between 0-100%\n let valuePosition = decimal <= 1 ? decimal : 1;\n\n valuePosition = valuePosition >= 0 ? valuePosition : 0;\n\n const trackWidth =\n this.args.showInput === 'inputWithPopover' && !!width\n ? width\n : this.rangeSliderRef?.clientWidth;\n\n let thumbToTrackRatio = 0;\n\n if (trackWidth) {\n thumbToTrackRatio = EUI_THUMB_SIZE / trackWidth;\n } else {\n thumbToTrackRatio = EUI_THUMB_SIZE / 1;\n }\n\n const trackPositionScale = (1 - thumbToTrackRatio) * 100;\n\n return { left: `${valuePosition * trackPositionScale}%` };\n }\n\n @action\n setPreventPopoverClose(value: boolean): void {\n this.preventPopoverClose = value;\n }\n\n get calculateLowerValueThumbPositionStyle(): { left: string } {\n return this.calculateThumbPositionStyle(\n Number(this.lowerValue) || this.min,\n this.rangeWidth\n );\n }\n\n get calculateUpperValueThumbPositionStyle(): { left: string } {\n return this.calculateThumbPositionStyle(\n Number(this.upperValue) || this.max,\n this.rangeWidth\n );\n }\n\n @action\n toggleHasFocus(): void {\n this.hasFocus = !this.hasFocus;\n }\n\n @action\n onThumbFocus(e: FocusEvent): void {\n if (this.args.onFocus) {\n this.args.onFocus(e);\n }\n\n this.hasFocus = true;\n }\n\n @action\n onThumbBlur(e: FocusEvent): void {\n if (this.args.onBlur) {\n this.args.onBlur(e);\n }\n\n this.hasFocus = false;\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 @action\n onResize(width?: number): void {\n this.rangeWidth = width;\n }\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 <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=\"euiRange__popover\"\n @fullWidth={{this.fullWidth}}\n @isOpen={{this.isPopoverOpen}}\n @closePopover={{this.closePopover}}\n @disableFocusTrap={{true}}\n @onPanelResize={{this.onResize}}\n >\n <:input>\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @useGroup={{or hasPrepend hasAppend}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <EuiRangeInput\n class={{classes}}\n @digitTolerance={{this.digitTolerance}}\n @side=\"min\"\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n @step={{this.step}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleLowerInputChange}}\n @name=\"{{@name}}-minValue\"\n @readOnly={{@readOnly}}\n @autoSize={{false}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{hasAppend}}\n @isAppendProvided={{hasPrepend}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n this.canShowDropdown this.onInputFocus (optional @onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n this.canShowDropdown this.onInputBlur (optional @onBlur)\n )\n }}\n {{on \"input\" this.handleLowerInputChange}}\n >\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:startControl>\n <:endControl as |classes|>\n <EuiRangeInput\n class={{classes}}\n @digitTolerance={{this.digitTolerance}}\n @side=\"max\"\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n @step={{this.step}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @name=\"{{@name}}-maxValue\"\n @readOnly={{@readOnly}}\n @autoSize={{false}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{hasAppend}}\n @isAppendProvided={{hasPrepend}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n this.canShowDropdown this.onInputFocus (optional @onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n this.canShowDropdown this.onInputBlur (optional @onBlur)\n )\n }}\n {{on \"input\" this.handleUpperInputChange}}\n >\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n </:input>\n <:content>\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\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\" \"false\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n >\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @compressed={{this.compressed}}\n @hasFocus={{this.hasFocus}}\n @showTicks={{this.showTicks}}\n {{!@glint-expect-error}}\n @min={{castTo this.min to=\"number\"}}\n {{!@glint-expect-error}}\n @max={{castTo this.max to=\"number\"}}\n {{!@glint-expect-error}}\n @lowerValue={{castTo this.lowerValue to=\"number\"}}\n {{!@glint-expect-error}}\n @upperValue={{castTo this.upperValue to=\"number\"}}\n />\n {{/if}}\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleSliderChange}}\n @showTicks={{this.showTicks}}\n @hasFocus={{this.hasFocus}}\n tabindex=\"-1\"\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 this.rangeSliderRefAvailable}}\n <EuiRangeThumb\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n {{!@glint-expect-error}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateLowerValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{onKey \"_all\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n {{!@glint-expect-error}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateUpperValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{onKey \"_all\" this.handleUpperKeyDown}}\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 </EuiRangeWrapper>\n </:content>\n </EuiInputPopover>\n {{else}}\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if this.showInput}}\n <EuiRangeInput\n @digitTolerance={{this.digitTolerance}}\n @side=\"min\"\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n @step={{this.step}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleLowerInputChange}}\n @name=\"{{@name}}-minValue\"\n @readOnly={{@readOnly}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleLowerInputChange}}\n />\n <div class=\"euiRange__horizontalSpacer\"></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\" \"false\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n >\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @compressed={{this.compressed}}\n @hasFocus={{this.hasFocus}}\n @showTicks={{this.showTicks}}\n {{!@glint-expect-error}}\n @min={{castTo this.min to=\"number\"}}\n {{!@glint-expect-error}}\n @max={{castTo this.max to=\"number\"}}\n {{!@glint-expect-error}}\n @lowerValue={{castTo this.lowerValue to=\"number\"}}\n {{!@glint-expect-error}}\n @upperValue={{castTo this.upperValue to=\"number\"}}\n />\n {{/if}}\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleSliderChange}}\n @showTicks={{this.showTicks}}\n @hasFocus={{this.hasFocus}}\n tabindex=\"-1\"\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 this.rangeSliderRefAvailable}}\n <EuiRangeThumb\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n {{!@glint-expect-error}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateLowerValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{!@glint-expect-error}}\n {{on \"click\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n {{!@glint-expect-error}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateUpperValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\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 this.showInput}}\n <div class=\"euiRange__horizontalSpacer\"></div>\n {{! maxinput }}\n <EuiRangeInput\n @digitTolerance={{this.digitTolerance}}\n @side=\"max\"\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n @step={{this.step}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @name=\"{{@name}}-maxValue\"\n @readOnly={{@readOnly}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @controlOnly={{this.showInputOnly}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @disable={{@disable}}\n ...attributes\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleUpperInputChange}}\n />\n {{/if}}\n </EuiRangeWrapper>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["EuiDualRangeComponent","Component","g","prototype","argOrDefaultDecorator","i","void 0","tracked","args","id","guidFor","preventPopoverClose","rangeSliderRef","didInsertRangeSlider","ref","rangeSliderRefAvailable","rangeWidth","clientWidth","undefined","isVisible","n","action","lowerValue","value","min","upperValue","max","lowerValueIsValid","isWithinRange","upperValueIsValid","isValid","_determineInvalidThumbMovement","newVal","lower","upper","e","lowerHalf","Math","abs","newValIsLow","_handleOnChange","_determineValidThumbMovement","_determineThumbMovement","onChange","handleSliderChange","Number","currentTarget","_resetToRangeEnds","_isDirectionalKeyPress","event","keys","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","ARROW_LEFT","indexOf","key","handleInputKeyDown","preventDefault","handleLowerInputChange","target","handleUpperInputChange","_handleKeyDown","stepRemainder","step","handleLowerKeyDown","TAB","handleUpperKeyDown","calculateThumbPositionStyle","width","decimal","valuePosition","trackWidth","showInput","thumbToTrackRatio","EUI_THUMB_SIZE","trackPositionScale","left","setPreventPopoverClose","calculateLowerValueThumbPositionStyle","calculateUpperValueThumbPositionStyle","toggleHasFocus","hasFocus","onThumbFocus","onFocus","onThumbBlur","onBlur","onInputFocus","isPopoverOpen","onInputBlur","later","closePopover","onResize","digitTolerance","String","length","showInputOnly","canShowDropdown","readOnly","disabled","setComponentTemplate","precompileTemplate","strictMode","scope","and","argOrDefault","not","EuiInputPopover","EuiFormControlLayoutDelimited","or","EuiRangeInput","castTo","on","fn","onKey","optional","EuiRangeWrapper","EuiRangeLabel","EuiRangeTrack","eq","EuiRangeHighlight","EuiRangeSlider","didInsert","EuiRangeThumb","simpleStyle"],"mappings":"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"}
1
+ {"version":3,"file":"eui-dual-range.js","sources":["../../src/components/eui-dual-range.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { 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';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport onKey from 'ember-keyboard/modifiers/on-key';\nimport { and, eq, not, or } from 'ember-truth-helpers';\n\nimport argOrDefault, {\n argOrDefaultDecorator\n} from '../helpers/arg-or-default.ts';\nimport castTo from '../helpers/cast-to.ts';\nimport simpleStyle from '../modifiers/simple-style.ts';\nimport { keys } from '../utils/keys.ts';\nimport { isWithinRange } from '../utils/number/index.ts';\nimport { EUI_THUMB_SIZE } from '../utils/range/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 { EuiFormControlLayoutSignature } from './eui-form-control-layout';\nimport type { EuiRangeArgs } from './eui-range';\nimport type {\n EuiRangeInputArgs,\n EuiRangeInputSignature\n} from './eui-range-input';\nimport type { EuiRangeLevel } from './eui-range-levels';\nimport type { EuiRangeTick } from './eui-range-ticks';\n\nexport type ValueMember = number | string;\n\nexport interface EuiDualRangeArgs {\n value: [ValueMember, ValueMember];\n onBlur?: (event: FocusEvent) => void;\n onFocus?: (event: FocusEvent) => void;\n onChange: (\n values: [ValueMember, ValueMember],\n isValid: boolean,\n event: Event | MouseEvent | KeyboardEvent\n ) => void;\n fullWidth?: boolean;\n isInvalid?: boolean;\n /**\n * Create colored indicators for certain intervals\n */\n levels?: EuiRangeLevel[];\n /**\n * Shows static min/max labels on the sides of the range slider\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\n */\n ticks?: EuiRangeTick[];\n /**\n * Creates an input group with element(s) coming before input. Will only show if `showInput = inputWithPopover`.\n * `string` | `Component` or an array of these\n */\n prepend?: EuiFormControlLayoutSignature['Blocks']['prepend'];\n /**\n * Creates an input group with element(s) coming after input. Will only show if `showInput = inputWithPopover`.\n * `string` | `Component` or an array of these\n */\n append?: EuiFormControlLayoutSignature['Blocks']['append'];\n /**\n * Intended to be uses with aria attributes. Some attributes may be overwritten.\n */\n minInputProps?: Partial<EuiRangeInputArgs>;\n\n /**\n * Intended to be uses with aria attributes. Some attributes may be overwritten.\n */\n maxInputProps?: Partial<EuiRangeInputArgs>;\n\n readOnly?: boolean;\n\n disabled?: boolean;\n\n isPrependProvided?: boolean;\n\n isAppendProvided?: boolean;\n\n isFakeMaxBlock?: boolean;\n\n isFakeMinBlock?: boolean;\n\n disable?: boolean;\n\n ariaDescribedby?: string;\n\n ariaLabel?: string;\n\n name?: string;\n\n id?: string;\n\n compressed?: boolean;\n\n showRange?: boolean;\n\n showTicks?: boolean;\n\n step?: number;\n\n min?: number;\n\n max?: number;\n}\n\nexport interface EuiDualRangeSignature {\n Element: EuiRangeInputSignature['Element'];\n Args: EuiDualRangeArgs;\n Blocks: {\n prepend: EuiRangeInputSignature['Blocks']['prepend'];\n append: EuiRangeInputSignature['Blocks']['append'];\n min: [number?];\n max: [number?];\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 //State\n @tracked id: string = this.args.id || guidFor({});\n @tracked hasFocus = false;\n @tracked rangeSliderRefAvailable = false;\n @tracked isPopoverOpen = false;\n @tracked rangeWidth: number | undefined;\n @tracked isVisible = true;\n ///\n\n preventPopoverClose = false;\n rangeSliderRef: HTMLInputElement | null = null;\n\n @action\n didInsertRangeSlider(ref: HTMLInputElement | null): void {\n this.rangeSliderRef = ref;\n\n this.rangeSliderRefAvailable = !!ref;\n this.rangeWidth = ref ? ref.clientWidth : undefined;\n\n if (this.rangeSliderRef?.clientWidth && !this.isVisible) {\n this.isVisible = true;\n }\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 @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 @action\n calculateThumbPositionStyle(value: number, width?: number): { left: string } {\n // Calculate the left position based on value\n const decimal = (value - this.min) / (this.max - this.min);\n // Must be between 0-100%\n let valuePosition = decimal <= 1 ? decimal : 1;\n\n valuePosition = valuePosition >= 0 ? valuePosition : 0;\n\n const trackWidth =\n this.args.showInput === 'inputWithPopover' && !!width\n ? width\n : this.rangeSliderRef?.clientWidth;\n\n let thumbToTrackRatio = 0;\n\n if (trackWidth) {\n thumbToTrackRatio = EUI_THUMB_SIZE / trackWidth;\n } else {\n thumbToTrackRatio = EUI_THUMB_SIZE / 1;\n }\n\n const trackPositionScale = (1 - thumbToTrackRatio) * 100;\n\n return { left: `${valuePosition * trackPositionScale}%` };\n }\n\n @action\n setPreventPopoverClose(value: boolean): void {\n this.preventPopoverClose = value;\n }\n\n get calculateLowerValueThumbPositionStyle(): { left: string } {\n return this.calculateThumbPositionStyle(\n Number(this.lowerValue) || this.min,\n this.rangeWidth\n );\n }\n\n get calculateUpperValueThumbPositionStyle(): { left: string } {\n return this.calculateThumbPositionStyle(\n Number(this.upperValue) || this.max,\n this.rangeWidth\n );\n }\n\n @action\n toggleHasFocus(): void {\n this.hasFocus = !this.hasFocus;\n }\n\n @action\n onThumbFocus(e: FocusEvent): void {\n if (this.args.onFocus) {\n this.args.onFocus(e);\n }\n\n this.hasFocus = true;\n }\n\n @action\n onThumbBlur(e: FocusEvent): void {\n if (this.args.onBlur) {\n this.args.onBlur(e);\n }\n\n this.hasFocus = false;\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 @action\n onResize(width?: number): void {\n this.rangeWidth = width;\n }\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 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=\"euiRange__popover\"\n @fullWidth={{this.fullWidth}}\n @isOpen={{this.isPopoverOpen}}\n @closePopover={{this.closePopover}}\n @disableFocusTrap={{true}}\n @onPanelResize={{this.onResize}}\n >\n <:input>\n <EuiFormControlLayoutDelimited\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n @readOnly={{@readOnly}}\n @disabled={{@disabled}}\n @useGroup={{or hasPrepend hasAppend}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses to=\"prepend\"}}\n </:prepend>\n <:startControl as |classes|>\n <EuiRangeInput\n class={{classes}}\n @digitTolerance={{this.digitTolerance}}\n @side=\"min\"\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n @step={{this.step}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleLowerInputChange}}\n @name=\"{{@name}}-minValue\"\n @readOnly={{@readOnly}}\n @autoSize={{false}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{hasAppend}}\n @isAppendProvided={{hasPrepend}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n this.canShowDropdown this.onInputFocus (optional @onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n this.canShowDropdown this.onInputBlur (optional @onBlur)\n )\n }}\n {{on \"input\" this.handleLowerInputChange}}\n >\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:startControl>\n <:endControl as |classes|>\n <EuiRangeInput\n class={{classes}}\n @digitTolerance={{this.digitTolerance}}\n @side=\"max\"\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n @step={{this.step}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @name=\"{{@name}}-maxValue\"\n @readOnly={{@readOnly}}\n @autoSize={{false}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{hasAppend}}\n @isAppendProvided={{hasPrepend}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{on \"mousedown\" (fn this.setPreventPopoverClose true)}}\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on\n \"focus\"\n (if\n this.canShowDropdown this.onInputFocus (optional @onFocus)\n )\n }}\n {{on\n \"blur\"\n (if\n this.canShowDropdown this.onInputBlur (optional @onBlur)\n )\n }}\n {{on \"input\" this.handleUpperInputChange}}\n >\n <:prepend as |classes|>\n {{yield classes to=\"prepend\"}}\n </:prepend>\n <:append as |classes|>\n {{yield classes to=\"append\"}}\n </:append>\n </EuiRangeInput>\n </:endControl>\n <:append as |appendClasses|>\n {{yield appendClasses to=\"append\"}}\n </:append>\n </EuiFormControlLayoutDelimited>\n </:input>\n <:content>\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\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\" \"false\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n >\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @compressed={{this.compressed}}\n @hasFocus={{this.hasFocus}}\n @showTicks={{this.showTicks}}\n {{!@glint-expect-error}}\n @min={{castTo this.min to=\"number\"}}\n {{!@glint-expect-error}}\n @max={{castTo this.max to=\"number\"}}\n {{!@glint-expect-error}}\n @lowerValue={{castTo this.lowerValue to=\"number\"}}\n {{!@glint-expect-error}}\n @upperValue={{castTo this.upperValue to=\"number\"}}\n />\n {{/if}}\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleSliderChange}}\n @showTicks={{this.showTicks}}\n @hasFocus={{this.hasFocus}}\n tabindex=\"-1\"\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 this.rangeSliderRefAvailable}}\n <EuiRangeThumb\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n {{!@glint-expect-error}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateLowerValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{onKey \"_all\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n {{!@glint-expect-error}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateUpperValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{onKey \"_all\" this.handleUpperKeyDown}}\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 </EuiRangeWrapper>\n </:content>\n </EuiInputPopover>\n {{else}}\n <EuiRangeWrapper\n class=\"euiDualRange\"\n @fullWidth={{this.fullWidth}}\n @compressed={{this.compressed}}\n >\n {{#if this.showInput}}\n <EuiRangeInput\n @digitTolerance={{this.digitTolerance}}\n @side=\"min\"\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n @step={{this.step}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleLowerInputChange}}\n @name=\"{{@name}}-minValue\"\n @readOnly={{@readOnly}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @controlOnly={{true}}\n @disable={{@disable}}\n ...attributes\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleLowerInputChange}}\n />\n <div class=\"euiRange__horizontalSpacer\"></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\" \"false\"}}\n @compressed={{this.compressed}}\n @disabled={{@disabled}}\n @max={{this.max}}\n @min={{this.min}}\n @step={{this.step}}\n @showTicks={{this.showTicks}}\n @tickInterval={{@tickInterval}}\n @ticks={{@ticks}}\n @levels={{this.levels}}\n @onChange={{this.handleSliderChange}}\n @value={{@value}}\n >\n {{#if (and this.showRange this.isValid)}}\n <EuiRangeHighlight\n @compressed={{this.compressed}}\n @hasFocus={{this.hasFocus}}\n @showTicks={{this.showTicks}}\n {{!@glint-expect-error}}\n @min={{castTo this.min to=\"number\"}}\n {{!@glint-expect-error}}\n @max={{castTo this.max to=\"number\"}}\n {{!@glint-expect-error}}\n @lowerValue={{castTo this.lowerValue to=\"number\"}}\n {{!@glint-expect-error}}\n @upperValue={{castTo this.upperValue to=\"number\"}}\n />\n {{/if}}\n <EuiRangeSlider\n class=\"euiDualRange__slider\"\n aria-hidden=\"true\"\n @id={{this.id}}\n @name={{@name}}\n @min={{this.min}}\n @max={{this.max}}\n @step={{this.step}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @onChange={{this.handleSliderChange}}\n @showTicks={{this.showTicks}}\n @hasFocus={{this.hasFocus}}\n tabindex=\"-1\"\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 this.rangeSliderRefAvailable}}\n <EuiRangeThumb\n @min={{this.min}}\n {{!@glint-expect-error}}\n @max={{castTo this.upperValue to=\"number\"}}\n {{!@glint-expect-error}}\n @value={{this.lowerValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateLowerValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{!@glint-expect-error}}\n {{on \"click\" this.handleLowerKeyDown}}\n />\n <EuiRangeThumb\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n {{!@glint-expect-error}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @showTicks={{this.showTicks}}\n @showInput={{not this.showInput}}\n aria-describedby={{@ariaDescribedby}}\n aria-label={{@ariaLabel}}\n {{simpleStyle this.calculateUpperValueThumbPositionStyle}}\n {{on \"focus\" this.onThumbFocus}}\n {{on \"blur\" this.onThumbBlur}}\n {{on \"keydown\" this.handleUpperKeyDown}}\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 this.showInput}}\n <div class=\"euiRange__horizontalSpacer\"></div>\n {{! maxinput }}\n <EuiRangeInput\n @digitTolerance={{this.digitTolerance}}\n @side=\"max\"\n {{!@glint-expect-error}}\n @min={{castTo this.lowerValue to=\"number\"}}\n @max={{this.max}}\n @step={{this.step}}\n @value={{this.upperValue}}\n @disabled={{@disabled}}\n @compressed={{this.compressed}}\n @name=\"{{@name}}-maxValue\"\n @readOnly={{@readOnly}}\n @fullWidth={{this.fullWidth}}\n @isInvalid={{@isInvalid}}\n @controlOnly={{this.showInputOnly}}\n @isPrependProvided={{false}}\n @isAppendProvided={{false}}\n @disable={{@disable}}\n ...attributes\n {{onKey \"_all\" this.handleInputKeyDown}}\n {{on \"focus\" (optional @onFocus)}}\n {{on \"blur\" (optional @onBlur)}}\n {{on \"input\" this.handleUpperInputChange}}\n />\n {{/if}}\n </EuiRangeWrapper>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["EuiDualRangeComponent","Component","g","prototype","argOrDefaultDecorator","i","void 0","tracked","args","id","guidFor","preventPopoverClose","rangeSliderRef","didInsertRangeSlider","ref","rangeSliderRefAvailable","rangeWidth","clientWidth","undefined","isVisible","n","action","lowerValue","value","min","upperValue","max","lowerValueIsValid","isWithinRange","upperValueIsValid","isValid","_determineInvalidThumbMovement","newVal","lower","upper","e","lowerHalf","Math","abs","newValIsLow","_handleOnChange","_determineValidThumbMovement","_determineThumbMovement","onChange","handleSliderChange","Number","currentTarget","_resetToRangeEnds","_isDirectionalKeyPress","event","keys","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","ARROW_LEFT","indexOf","key","handleInputKeyDown","preventDefault","handleLowerInputChange","target","handleUpperInputChange","_handleKeyDown","stepRemainder","step","handleLowerKeyDown","TAB","handleUpperKeyDown","calculateThumbPositionStyle","width","decimal","valuePosition","trackWidth","showInput","thumbToTrackRatio","EUI_THUMB_SIZE","trackPositionScale","left","setPreventPopoverClose","calculateLowerValueThumbPositionStyle","calculateUpperValueThumbPositionStyle","toggleHasFocus","hasFocus","onThumbFocus","onFocus","onThumbBlur","onBlur","onInputFocus","isPopoverOpen","onInputBlur","later","closePopover","onResize","digitTolerance","String","length","showInputOnly","canShowDropdown","readOnly","disabled","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","and","argOrDefault","not","EuiInputPopover","EuiFormControlLayoutDelimited","or","EuiRangeInput","castTo","on","fn","onKey","optional","EuiRangeWrapper","EuiRangeLabel","EuiRangeTrack","eq","EuiRangeHighlight","EuiRangeSlider","didInsert","EuiRangeThumb","simpleStyle"],"mappings":"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"}
@@ -113,6 +113,10 @@ class EuiFieldSearch extends Component {
113
113
  static {
114
114
  n(this.prototype, "didInsertInput", [action]);
115
115
  }
116
+ willDestroy() {
117
+ super.willDestroy();
118
+ this.inputElement = null;
119
+ }
116
120
  static {
117
121
  setComponentTemplate(precompileTemplate("\n {{#let (and (not (argOrDefault @isFakePrependBlock false)) (has-block \"prepend\")) (and (not (argOrDefault @isFakeAppendBlock false)) (has-block \"append\")) (argOrDefault @id (randomId)) as |hasPrepend hasAppend inputId|}}\n {{#let (classNames (if @fullWidth \"euiFieldSearch--fullWidth\") (if @compressed \"euiFieldSearch--compressed\") (if (or hasPrepend hasAppend) \"euiFieldSearch--inGroup\") (if @isLoading \"euiFieldSearch--isLoading\") (if (and (argOrDefault @isClearable true) @value) \"euiFieldSearch--isClearable\") \"euiFieldSearch\") as |classes|}}\n <EuiFormControlLayout @icon=\"search\" @fullWidth={{@fullWidth}} @isLoading={{@isLoading}} @disabled={{@disabled}} @clear={{if (and @isClearable @value (not @readOnly) (and (not @isDisabled) (not @disabled))) this.onClear}} @compressed={{@compressed}} @useGroup={{or hasPrepend hasAppend}}>\n <:prepend as |prependClasses|>\n {{yield prependClasses inputId to=\"prepend\"}}\n </:prepend>\n <:field>\n <input id={{inputId}} class={{classes}} value={{this.value}} disabled={{@disabled}} type=\"text\" placeholder={{@placeholder}} ...attributes {{on \"keyup\" (fn this.onKeyUp this.incremental @onSearch)}} {{on \"search\" this.setValue}} {{on \"change\" this.setValue}} {{didInsert this.didInsertInput}} {{didUpdate this.didUpdateValue @value}} {{validatableControl @isInvalid}} />\n </:field>\n <:append as |appendClasses|>\n {{yield appendClasses inputId to=\"append\"}}\n </:append>\n </EuiFormControlLayout>\n {{/let}}\n {{/let}}\n ", {
118
122
  strictMode: true,
@@ -1 +1 @@
1
- {"version":3,"file":"eui-field-search.js","sources":["../../src/components/eui-field-search.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nimport { and, not, or } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport validatableControl from '../modifiers/validatable-control.ts';\nimport { Browser } from '../utils/browser/index.ts';\nimport { keys } from '../utils/keys.ts';\nimport EuiFormControlLayout from './eui-form-control-layout.gts';\n\nimport type { EuiFormControlLayoutSignature } from './eui-form-control-layout';\n\nlet isSearchSupported = false;\n\n/**\n * You can find more typing on the template\n */\ntype EuiFieldSearchArgs = {\n value?: string;\n defaultValue?: string;\n\n /**\n * When `true` the search will be executed (that is, the `onSearch` will be called) as the\n * user types.\n */\n incremental?: boolean;\n /**\n * Optional callback method called on open and close with a single `isOpen` parameter\n */\n onKeyUp?: (e: KeyboardEvent) => void;\n onSearch: (value: string) => void;\n\n isFakePrependBlock?: boolean;\n isFakeAppendBlock?: boolean;\n fullWidth?: boolean;\n compressed?: boolean;\n isLoading?: boolean;\n isClearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n id?: string;\n isInvalid?: boolean;\n isDisabled?: boolean;\n};\n\nexport interface EuiFieldSearchSignature {\n Element: HTMLInputElement;\n Args: EuiFieldSearchArgs;\n Blocks: {\n prepend: [...EuiFormControlLayoutSignature['Blocks']['prepend'], string];\n field: [];\n append: [...EuiFormControlLayoutSignature['Blocks']['append'], string];\n };\n}\n\nexport default class EuiFieldSearch extends Component<EuiFieldSearchSignature> {\n @tracked inputElement: HTMLInputElement | null = null;\n @tracked value: string | undefined =\n this.args.value ||\n (this.args.defaultValue ? `${this.args.defaultValue}` : '');\n\n @argOrDefaultDecorator(false) incremental = false;\n\n @action\n setValue(e: Event): void {\n const value = (e.target as HTMLInputElement).value;\n\n if (this.value !== value) {\n this.value = value;\n }\n\n this.args.onSearch?.(this.value);\n }\n\n @action\n onKeyUp(\n incremental: boolean,\n onSearch: (value: string) => void,\n e: KeyboardEvent\n ): void {\n this.value = (e.target as HTMLInputElement).value;\n\n if (this.args.onKeyUp) {\n this.args.onKeyUp(e);\n\n if (e.defaultPrevented) {\n return;\n }\n }\n\n if (\n onSearch &&\n ((e.key !== keys.ENTER && incremental) ||\n (e.key === keys.ENTER && !isSearchSupported))\n ) {\n onSearch((e.target as HTMLInputElement).value);\n }\n }\n\n @action\n didUpdateValue() {\n this.value = this.args.value;\n }\n\n @action\n onClear(): void {\n const nativeInputValue = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value'\n );\n const nativeInputValueSetter = nativeInputValue\n ? nativeInputValue.set\n : undefined;\n\n if (nativeInputValueSetter) {\n nativeInputValueSetter.call(this.inputElement, '');\n }\n\n // dispatch input event, with IE11 support/fallback\n let event;\n\n if ('Event' in window && typeof Event === 'function') {\n event = new Event('input', {\n bubbles: true,\n cancelable: false\n });\n } else {\n // IE11\n event = document.createEvent('Event');\n event.initEvent('input', true, false);\n }\n\n if (this.inputElement) {\n if (event) {\n this.inputElement.dispatchEvent(event);\n }\n\n // set focus on the search field\n this.inputElement.focus();\n this.inputElement.dispatchEvent(new Event('change'));\n }\n\n this.value = '';\n\n if (this.args.onSearch && this.incremental) {\n this.args.onSearch('');\n }\n }\n\n @action\n didInsertInput(inputRef: HTMLInputElement): void {\n this.inputElement = inputRef;\n isSearchSupported = Browser.isEventSupported('search', this.inputElement);\n }\n\n <template>\n {{#let\n (and (not (argOrDefault @isFakePrependBlock false)) (has-block \"prepend\"))\n (and (not (argOrDefault @isFakeAppendBlock false)) (has-block \"append\"))\n (argOrDefault @id (randomId))\n as |hasPrepend hasAppend inputId|\n }}\n {{#let\n (classNames\n (if @fullWidth \"euiFieldSearch--fullWidth\")\n (if @compressed \"euiFieldSearch--compressed\")\n (if (or hasPrepend hasAppend) \"euiFieldSearch--inGroup\")\n (if @isLoading \"euiFieldSearch--isLoading\")\n (if\n (and (argOrDefault @isClearable true) @value)\n \"euiFieldSearch--isClearable\"\n )\n \"euiFieldSearch\"\n )\n as |classes|\n }}\n <EuiFormControlLayout\n @icon=\"search\"\n @fullWidth={{@fullWidth}}\n @isLoading={{@isLoading}}\n @disabled={{@disabled}}\n @clear={{if\n (and\n @isClearable\n @value\n (not @readOnly)\n (and (not @isDisabled) (not @disabled))\n )\n this.onClear\n }}\n @compressed={{@compressed}}\n @useGroup={{or hasPrepend hasAppend}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses inputId to=\"prepend\"}}\n </:prepend>\n <:field>\n <input\n id={{inputId}}\n class={{classes}}\n value={{this.value}}\n disabled={{@disabled}}\n type=\"text\"\n placeholder={{@placeholder}}\n ...attributes\n {{on \"keyup\" (fn this.onKeyUp this.incremental @onSearch)}}\n {{on \"search\" this.setValue}}\n {{on \"change\" this.setValue}}\n {{didInsert this.didInsertInput}}\n {{didUpdate this.didUpdateValue @value}}\n {{validatableControl @isInvalid}}\n />\n </:field>\n <:append as |appendClasses|>\n {{yield appendClasses inputId to=\"append\"}}\n </:append>\n </EuiFormControlLayout>\n {{/let}}\n {{/let}}\n </template>\n}\n"],"names":["isSearchSupported","EuiFieldSearch","Component","g","prototype","tracked","i","void 0","args","value","defaultValue","argOrDefaultDecorator","setValue","e","target","onSearch","n","action","onKeyUp","incremental","defaultPrevented","key","keys","ENTER","didUpdateValue","onClear","nativeInputValue","Object","getOwnPropertyDescriptor","HTMLInputElement","nativeInputValueSetter","set","undefined","call","inputElement","event","window","Event","bubbles","cancelable","document","createEvent","initEvent","dispatchEvent","focus","didInsertInput","inputRef","Browser","isEventSupported","setComponentTemplate","precompileTemplate","strictMode","scope","and","not","argOrDefault","randomId","classNames","or","EuiFormControlLayout","on","fn","didInsert","didUpdate","validatableControl"],"mappings":"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"}
1
+ {"version":3,"file":"eui-field-search.js","sources":["../../src/components/eui-field-search.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nimport { and, not, or } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport validatableControl from '../modifiers/validatable-control.ts';\nimport { Browser } from '../utils/browser/index.ts';\nimport { keys } from '../utils/keys.ts';\nimport EuiFormControlLayout from './eui-form-control-layout.gts';\n\nimport type { EuiFormControlLayoutSignature } from './eui-form-control-layout';\n\nlet isSearchSupported = false;\n\n/**\n * You can find more typing on the template\n */\ntype EuiFieldSearchArgs = {\n value?: string;\n defaultValue?: string;\n\n /**\n * When `true` the search will be executed (that is, the `onSearch` will be called) as the\n * user types.\n */\n incremental?: boolean;\n /**\n * Optional callback method called on open and close with a single `isOpen` parameter\n */\n onKeyUp?: (e: KeyboardEvent) => void;\n onSearch: (value: string) => void;\n\n isFakePrependBlock?: boolean;\n isFakeAppendBlock?: boolean;\n fullWidth?: boolean;\n compressed?: boolean;\n isLoading?: boolean;\n isClearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n id?: string;\n isInvalid?: boolean;\n isDisabled?: boolean;\n};\n\nexport interface EuiFieldSearchSignature {\n Element: HTMLInputElement;\n Args: EuiFieldSearchArgs;\n Blocks: {\n prepend: [...EuiFormControlLayoutSignature['Blocks']['prepend'], string];\n field: [];\n append: [...EuiFormControlLayoutSignature['Blocks']['append'], string];\n };\n}\n\nexport default class EuiFieldSearch extends Component<EuiFieldSearchSignature> {\n @tracked inputElement: HTMLInputElement | null = null;\n @tracked value: string | undefined =\n this.args.value ||\n (this.args.defaultValue ? `${this.args.defaultValue}` : '');\n\n @argOrDefaultDecorator(false) incremental = false;\n\n @action\n setValue(e: Event): void {\n const value = (e.target as HTMLInputElement).value;\n\n if (this.value !== value) {\n this.value = value;\n }\n\n this.args.onSearch?.(this.value);\n }\n\n @action\n onKeyUp(\n incremental: boolean,\n onSearch: (value: string) => void,\n e: KeyboardEvent\n ): void {\n this.value = (e.target as HTMLInputElement).value;\n\n if (this.args.onKeyUp) {\n this.args.onKeyUp(e);\n\n if (e.defaultPrevented) {\n return;\n }\n }\n\n if (\n onSearch &&\n ((e.key !== keys.ENTER && incremental) ||\n (e.key === keys.ENTER && !isSearchSupported))\n ) {\n onSearch((e.target as HTMLInputElement).value);\n }\n }\n\n @action\n didUpdateValue() {\n this.value = this.args.value;\n }\n\n @action\n onClear(): void {\n const nativeInputValue = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value'\n );\n const nativeInputValueSetter = nativeInputValue\n ? nativeInputValue.set\n : undefined;\n\n if (nativeInputValueSetter) {\n nativeInputValueSetter.call(this.inputElement, '');\n }\n\n // dispatch input event, with IE11 support/fallback\n let event;\n\n if ('Event' in window && typeof Event === 'function') {\n event = new Event('input', {\n bubbles: true,\n cancelable: false\n });\n } else {\n // IE11\n event = document.createEvent('Event');\n event.initEvent('input', true, false);\n }\n\n if (this.inputElement) {\n if (event) {\n this.inputElement.dispatchEvent(event);\n }\n\n // set focus on the search field\n this.inputElement.focus();\n this.inputElement.dispatchEvent(new Event('change'));\n }\n\n this.value = '';\n\n if (this.args.onSearch && this.incremental) {\n this.args.onSearch('');\n }\n }\n\n @action\n didInsertInput(inputRef: HTMLInputElement): void {\n this.inputElement = inputRef;\n isSearchSupported = Browser.isEventSupported('search', this.inputElement);\n }\n\n willDestroy(): void {\n super.willDestroy();\n\n this.inputElement = null;\n }\n\n <template>\n {{#let\n (and (not (argOrDefault @isFakePrependBlock false)) (has-block \"prepend\"))\n (and (not (argOrDefault @isFakeAppendBlock false)) (has-block \"append\"))\n (argOrDefault @id (randomId))\n as |hasPrepend hasAppend inputId|\n }}\n {{#let\n (classNames\n (if @fullWidth \"euiFieldSearch--fullWidth\")\n (if @compressed \"euiFieldSearch--compressed\")\n (if (or hasPrepend hasAppend) \"euiFieldSearch--inGroup\")\n (if @isLoading \"euiFieldSearch--isLoading\")\n (if\n (and (argOrDefault @isClearable true) @value)\n \"euiFieldSearch--isClearable\"\n )\n \"euiFieldSearch\"\n )\n as |classes|\n }}\n <EuiFormControlLayout\n @icon=\"search\"\n @fullWidth={{@fullWidth}}\n @isLoading={{@isLoading}}\n @disabled={{@disabled}}\n @clear={{if\n (and\n @isClearable\n @value\n (not @readOnly)\n (and (not @isDisabled) (not @disabled))\n )\n this.onClear\n }}\n @compressed={{@compressed}}\n @useGroup={{or hasPrepend hasAppend}}\n >\n <:prepend as |prependClasses|>\n {{yield prependClasses inputId to=\"prepend\"}}\n </:prepend>\n <:field>\n <input\n id={{inputId}}\n class={{classes}}\n value={{this.value}}\n disabled={{@disabled}}\n type=\"text\"\n placeholder={{@placeholder}}\n ...attributes\n {{on \"keyup\" (fn this.onKeyUp this.incremental @onSearch)}}\n {{on \"search\" this.setValue}}\n {{on \"change\" this.setValue}}\n {{didInsert this.didInsertInput}}\n {{didUpdate this.didUpdateValue @value}}\n {{validatableControl @isInvalid}}\n />\n </:field>\n <:append as |appendClasses|>\n {{yield appendClasses inputId to=\"append\"}}\n </:append>\n </EuiFormControlLayout>\n {{/let}}\n {{/let}}\n </template>\n}\n"],"names":["isSearchSupported","EuiFieldSearch","Component","g","prototype","tracked","i","void 0","args","value","defaultValue","argOrDefaultDecorator","setValue","e","target","onSearch","n","action","onKeyUp","incremental","defaultPrevented","key","keys","ENTER","didUpdateValue","onClear","nativeInputValue","Object","getOwnPropertyDescriptor","HTMLInputElement","nativeInputValueSetter","set","undefined","call","inputElement","event","window","Event","bubbles","cancelable","document","createEvent","initEvent","dispatchEvent","focus","didInsertInput","inputRef","Browser","isEventSupported","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","and","not","argOrDefault","randomId","classNames","or","EuiFormControlLayout","on","fn","didInsert","didUpdate","validatableControl"],"mappings":"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"}
@@ -106,6 +106,10 @@ class EuiFilePickerComponent extends Component {
106
106
  static {
107
107
  n(this.prototype, "didInsertInput", [action]);
108
108
  }
109
+ willDestroy() {
110
+ super.willDestroy();
111
+ this.fileInput = null;
112
+ }
109
113
  static {
110
114
  setComponentTemplate(precompileTemplate("\n {{#let (classNames (if @compressed \"euiFilePicker--compressed\") (if @fullWidth \"euiFilePicker--fullWidth\") (if @isInvalid \"euiFilePicker--isInvalid\") (if @isLoading \"euiFilePicker--isLoading\") display=this.display componentName=\"EuiFilePicker\") (argOrDefault @id (randomId)) as |classes inputId|}}\n {{#let (if inputId (concat inputId \"-filePicker__prompt\") (randomId)) (notEq this.promptText null) (eq this.display \"default\") as |promptId isOverridingInitialPrompt normalFormControl|}}\n <div class=\"{{classes}}\n {{if this.isHoveringDrop \"euiFilePicker__showDrop\"}}\n {{if isOverridingInitialPrompt \"euiFilePicker--hasFiles\"}}\">\n <div class=\"euiFilePicker__wrap\">\n <input type=\"file\" id={{inputId}} name={{@name}} class=\"euiFilePicker__input\" disabled={{@disabled}} aria-describedby={{promptId}} multiple={{@multiple}} {{on \"dragover\" this.showDrop}} {{on \"dragleave\" this.hideDrop}} {{on \"drop\" this.hideDrop}} {{on \"change\" this.handleChange}} {{didInsert this.didInsertInput}} {{validatableControl @isInvalid}} ...attributes />\n <div class=\"euiFilePicker__prompt\" id={{promptId}}>\n <EuiIcon @iconClasses=\"euiFilePicker__icon\" @type=\"importAction\" @size={{if true \"m\" \"l\"}} aria-hidden=\"true\" />\n <div class=\"euiFilePicker__promptText\">\n {{if this.promptText this.promptText this.initialPromptText}}\n </div>\n {{#if (and @isLoading normalFormControl)}}\n <EuiLoadingSpinner class=\"euiFilePicker__loadingSpinner\" />\n {{else if isOverridingInitialPrompt}}\n {{#if normalFormControl}}\n <button type=\"button\" aria-label=\"Clear selected files\" class=\"euiFilePicker__clearButton\" {{on \"click\" this.removeFiles}}>\n <EuiIcon @iconClasses=\"euiFilePicker__clearIcon\" @type=\"cross\" />\n </button>\n {{else}}\n <EuiButtonEmpty aria-label=\"Clear selected files\" class=\"euiFilePicker__clearButton\" @size=\"xs\" {{on \"click\" this.removeFiles}}>\n Remove\n </EuiButtonEmpty>\n {{/if}}\n {{/if}}\n {{#if (and (not normalFormControl) @isLoading)}}\n <EuiProgress @size=\"xs\" @color=\"accent\" position=\"absolute\" />\n {{/if}}\n </div>\n </div>\n </div>\n {{/let}}\n {{/let}}\n ", {
111
115
  strictMode: true,
@@ -1 +1 @@
1
- {"version":3,"file":"eui-file-picker.js","sources":["../../src/components/eui-file-picker.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport { and, eq, not, notEq, or } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport validatableControl from '../modifiers/validatable-control.ts';\nimport EuiButtonEmpty from './eui-button-empty.gts';\nimport EuiIcon from './eui-icon.gts';\nimport EuiLoadingSpinner from './eui-loading-spinner.gts';\nimport EuiProgress from './eui-progress.gts';\n\nimport type { displayMapping } from '../utils/css-mappings/eui-file-picker.ts';\n\nexport type EuiFilePickerDisplay = keyof typeof displayMapping;\n\n/**\n * You can find more typing on the template\n */\ntype EuiFilePicker = {\n id?: string;\n name?: string;\n class?: string;\n /**\n * The content that appears in the dropzone if no file is attached\n */\n initialPromptText?: Component | string | null;\n /**\n * Use as a callback to access the HTML FileList API\n */\n onChange?: (files: FileList | null) => void;\n /**\n * Reduces the size to a typical (compressed) input\n */\n compressed?: boolean;\n /**\n * Size or type of display;\n * `default` for normal height, similar to other controls;\n * `large` for taller size\n */\n display?: EuiFilePickerDisplay;\n fullWidth?: boolean;\n isInvalid?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n multiple?: boolean;\n\n /**\n * Optionally pass a fn to get the instance of the component to access it programatically\n */\n ref?: (c: typeof EuiFilePickerComponent) => void;\n};\n\nexport interface EuiFilePickerSignature {\n Element: HTMLInputElement;\n Args: EuiFilePicker;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiFilePickerComponent extends Component<EuiFilePickerSignature> {\n @tracked fileInput: HTMLInputElement | null = null;\n @tracked promptText: string | null | undefined = null;\n @tracked isHoveringDrop = false;\n\n @argOrDefaultDecorator('Select or drag and drop a file') initialPromptText!:\n | Component\n | string\n | null;\n\n @argOrDefaultDecorator(false) compressed!: boolean;\n @argOrDefaultDecorator('') display!: string;\n\n @action\n showDrop(): void {\n if (!this.args.disabled) {\n this.isHoveringDrop = true;\n }\n }\n\n @action\n hideDrop(): void {\n this.isHoveringDrop = false;\n }\n\n @action\n handleChange(): void {\n if (!this.fileInput) return;\n\n if (this.fileInput.files && this.fileInput.files.length > 1) {\n this.promptText = `${this.fileInput.files.length} files selected`;\n // TODO: Change when EuiI18n is available\n // <EuiI18n\n // token=\"euiFilePicker.filesSelected\"\n // default=\"{fileCount} files selected\"\n // values={{ fileCount: this.fileInput.files.length }}\n // />\n } else if (this.fileInput.files && this.fileInput.files.length === 0) {\n this.promptText = null;\n } else {\n this.promptText = this.fileInput.value.split('\\\\').pop();\n }\n\n const { onChange } = this.args;\n\n if (onChange) {\n onChange(this.fileInput.files);\n }\n }\n\n @action\n removeFiles(e?: MouseEvent): void {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n if (!this.fileInput) return;\n\n this.fileInput.value = '';\n this.handleChange();\n }\n\n @action\n didInsertInput(inputRef: HTMLInputElement): void {\n this.fileInput = inputRef;\n this.args.ref?.(this as any as typeof EuiFilePickerComponent);\n }\n\n <template>\n {{#let\n (classNames\n (if @compressed \"euiFilePicker--compressed\")\n (if @fullWidth \"euiFilePicker--fullWidth\")\n (if @isInvalid \"euiFilePicker--isInvalid\")\n (if @isLoading \"euiFilePicker--isLoading\")\n display=this.display\n componentName=\"EuiFilePicker\"\n )\n (argOrDefault @id (randomId))\n as |classes inputId|\n }}\n {{#let\n (if inputId (concat inputId \"-filePicker__prompt\") (randomId))\n (notEq this.promptText null)\n (eq this.display \"default\")\n as |promptId isOverridingInitialPrompt normalFormControl|\n }}\n <div\n class=\"{{classes}}\n {{if this.isHoveringDrop 'euiFilePicker__showDrop'}}\n {{if isOverridingInitialPrompt 'euiFilePicker--hasFiles'}}\"\n >\n <div class=\"euiFilePicker__wrap\">\n <input\n type=\"file\"\n id={{inputId}}\n name={{@name}}\n class=\"euiFilePicker__input\"\n disabled={{@disabled}}\n aria-describedby={{promptId}}\n multiple={{@multiple}}\n {{on \"dragover\" this.showDrop}}\n {{on \"dragleave\" this.hideDrop}}\n {{on \"drop\" this.hideDrop}}\n {{on \"change\" this.handleChange}}\n {{didInsert this.didInsertInput}}\n {{validatableControl @isInvalid}}\n ...attributes\n />\n <div class=\"euiFilePicker__prompt\" id={{promptId}}>\n <EuiIcon\n @iconClasses=\"euiFilePicker__icon\"\n @type=\"importAction\"\n @size={{if true \"m\" \"l\"}}\n aria-hidden=\"true\"\n />\n <div class=\"euiFilePicker__promptText\">\n {{if this.promptText this.promptText this.initialPromptText}}\n </div>\n {{#if (and @isLoading normalFormControl)}}\n <EuiLoadingSpinner class=\"euiFilePicker__loadingSpinner\" />\n {{else if isOverridingInitialPrompt}}\n {{#if normalFormControl}}\n <button\n type=\"button\"\n aria-label=\"Clear selected files\"\n class=\"euiFilePicker__clearButton\"\n {{on \"click\" this.removeFiles}}\n >\n <EuiIcon\n @iconClasses=\"euiFilePicker__clearIcon\"\n @type=\"cross\"\n />\n </button>\n {{else}}\n <EuiButtonEmpty\n aria-label=\"Clear selected files\"\n class=\"euiFilePicker__clearButton\"\n @size=\"xs\"\n {{on \"click\" this.removeFiles}}\n >\n Remove\n </EuiButtonEmpty>\n {{/if}}\n {{/if}}\n {{#if (and (not normalFormControl) @isLoading)}}\n <EuiProgress @size=\"xs\" @color=\"accent\" position=\"absolute\" />\n {{/if}}\n </div>\n </div>\n </div>\n {{/let}}\n {{/let}}\n </template>\n}\n"],"names":["EuiFilePickerComponent","Component","g","prototype","tracked","i","void 0","argOrDefaultDecorator","showDrop","args","disabled","isHoveringDrop","n","action","hideDrop","handleChange","fileInput","files","length","promptText","value","split","pop","onChange","removeFiles","e","stopPropagation","preventDefault","didInsertInput","inputRef","ref","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","randomId","concat","notEq","eq","on","didInsert","validatableControl","EuiIcon","and","EuiLoadingSpinner","EuiButtonEmpty","not","EuiProgress"],"mappings":"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"}
1
+ {"version":3,"file":"eui-file-picker.js","sources":["../../src/components/eui-file-picker.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport { and, eq, not, notEq, or } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport validatableControl from '../modifiers/validatable-control.ts';\nimport EuiButtonEmpty from './eui-button-empty.gts';\nimport EuiIcon from './eui-icon.gts';\nimport EuiLoadingSpinner from './eui-loading-spinner.gts';\nimport EuiProgress from './eui-progress.gts';\n\nimport type { displayMapping } from '../utils/css-mappings/eui-file-picker.ts';\n\nexport type EuiFilePickerDisplay = keyof typeof displayMapping;\n\n/**\n * You can find more typing on the template\n */\ntype EuiFilePicker = {\n id?: string;\n name?: string;\n class?: string;\n /**\n * The content that appears in the dropzone if no file is attached\n */\n initialPromptText?: Component | string | null;\n /**\n * Use as a callback to access the HTML FileList API\n */\n onChange?: (files: FileList | null) => void;\n /**\n * Reduces the size to a typical (compressed) input\n */\n compressed?: boolean;\n /**\n * Size or type of display;\n * `default` for normal height, similar to other controls;\n * `large` for taller size\n */\n display?: EuiFilePickerDisplay;\n fullWidth?: boolean;\n isInvalid?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n multiple?: boolean;\n\n /**\n * Optionally pass a fn to get the instance of the component to access it programatically\n */\n ref?: (c: typeof EuiFilePickerComponent) => void;\n};\n\nexport interface EuiFilePickerSignature {\n Element: HTMLInputElement;\n Args: EuiFilePicker;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiFilePickerComponent extends Component<EuiFilePickerSignature> {\n @tracked fileInput: HTMLInputElement | null = null;\n @tracked promptText: string | null | undefined = null;\n @tracked isHoveringDrop = false;\n\n @argOrDefaultDecorator('Select or drag and drop a file') initialPromptText!:\n | Component\n | string\n | null;\n\n @argOrDefaultDecorator(false) compressed!: boolean;\n @argOrDefaultDecorator('') display!: string;\n\n @action\n showDrop(): void {\n if (!this.args.disabled) {\n this.isHoveringDrop = true;\n }\n }\n\n @action\n hideDrop(): void {\n this.isHoveringDrop = false;\n }\n\n @action\n handleChange(): void {\n if (!this.fileInput) return;\n\n if (this.fileInput.files && this.fileInput.files.length > 1) {\n this.promptText = `${this.fileInput.files.length} files selected`;\n // TODO: Change when EuiI18n is available\n // <EuiI18n\n // token=\"euiFilePicker.filesSelected\"\n // default=\"{fileCount} files selected\"\n // values={{ fileCount: this.fileInput.files.length }}\n // />\n } else if (this.fileInput.files && this.fileInput.files.length === 0) {\n this.promptText = null;\n } else {\n this.promptText = this.fileInput.value.split('\\\\').pop();\n }\n\n const { onChange } = this.args;\n\n if (onChange) {\n onChange(this.fileInput.files);\n }\n }\n\n @action\n removeFiles(e?: MouseEvent): void {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n if (!this.fileInput) return;\n\n this.fileInput.value = '';\n this.handleChange();\n }\n\n @action\n didInsertInput(inputRef: HTMLInputElement): void {\n this.fileInput = inputRef;\n this.args.ref?.(this as any as typeof EuiFilePickerComponent);\n }\n\n willDestroy(): void {\n super.willDestroy();\n\n this.fileInput = null;\n }\n\n <template>\n {{#let\n (classNames\n (if @compressed \"euiFilePicker--compressed\")\n (if @fullWidth \"euiFilePicker--fullWidth\")\n (if @isInvalid \"euiFilePicker--isInvalid\")\n (if @isLoading \"euiFilePicker--isLoading\")\n display=this.display\n componentName=\"EuiFilePicker\"\n )\n (argOrDefault @id (randomId))\n as |classes inputId|\n }}\n {{#let\n (if inputId (concat inputId \"-filePicker__prompt\") (randomId))\n (notEq this.promptText null)\n (eq this.display \"default\")\n as |promptId isOverridingInitialPrompt normalFormControl|\n }}\n <div\n class=\"{{classes}}\n {{if this.isHoveringDrop 'euiFilePicker__showDrop'}}\n {{if isOverridingInitialPrompt 'euiFilePicker--hasFiles'}}\"\n >\n <div class=\"euiFilePicker__wrap\">\n <input\n type=\"file\"\n id={{inputId}}\n name={{@name}}\n class=\"euiFilePicker__input\"\n disabled={{@disabled}}\n aria-describedby={{promptId}}\n multiple={{@multiple}}\n {{on \"dragover\" this.showDrop}}\n {{on \"dragleave\" this.hideDrop}}\n {{on \"drop\" this.hideDrop}}\n {{on \"change\" this.handleChange}}\n {{didInsert this.didInsertInput}}\n {{validatableControl @isInvalid}}\n ...attributes\n />\n <div class=\"euiFilePicker__prompt\" id={{promptId}}>\n <EuiIcon\n @iconClasses=\"euiFilePicker__icon\"\n @type=\"importAction\"\n @size={{if true \"m\" \"l\"}}\n aria-hidden=\"true\"\n />\n <div class=\"euiFilePicker__promptText\">\n {{if this.promptText this.promptText this.initialPromptText}}\n </div>\n {{#if (and @isLoading normalFormControl)}}\n <EuiLoadingSpinner class=\"euiFilePicker__loadingSpinner\" />\n {{else if isOverridingInitialPrompt}}\n {{#if normalFormControl}}\n <button\n type=\"button\"\n aria-label=\"Clear selected files\"\n class=\"euiFilePicker__clearButton\"\n {{on \"click\" this.removeFiles}}\n >\n <EuiIcon\n @iconClasses=\"euiFilePicker__clearIcon\"\n @type=\"cross\"\n />\n </button>\n {{else}}\n <EuiButtonEmpty\n aria-label=\"Clear selected files\"\n class=\"euiFilePicker__clearButton\"\n @size=\"xs\"\n {{on \"click\" this.removeFiles}}\n >\n Remove\n </EuiButtonEmpty>\n {{/if}}\n {{/if}}\n {{#if (and (not normalFormControl) @isLoading)}}\n <EuiProgress @size=\"xs\" @color=\"accent\" position=\"absolute\" />\n {{/if}}\n </div>\n </div>\n </div>\n {{/let}}\n {{/let}}\n </template>\n}\n"],"names":["EuiFilePickerComponent","Component","g","prototype","tracked","i","void 0","argOrDefaultDecorator","showDrop","args","disabled","isHoveringDrop","n","action","hideDrop","handleChange","fileInput","files","length","promptText","value","split","pop","onChange","removeFiles","e","stopPropagation","preventDefault","didInsertInput","inputRef","ref","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","randomId","concat","notEq","eq","on","didInsert","validatableControl","EuiIcon","and","EuiLoadingSpinner","EuiButtonEmpty","not","EuiProgress"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"eui-flyout.js","sources":["../../src/components/eui-flyout.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { throttle } from '@ember/runloop';\n\nimport { element } from 'ember-element-helper';\nimport { focusTrap } from 'ember-focus-trap';\nimport onKey from 'ember-keyboard/modifiers/on-key';\nimport { modifier as modBuilder } from 'ember-modifier';\nimport styleModifier from 'ember-style-modifier/modifiers/style';\nimport { and, eq, not, or } from 'ember-truth-helpers';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport outsideClickDetectorModifier from '../modifiers/outside-click-detector.ts';\nimport resizeObserverModifier from '../modifiers/resize-observer.ts';\nimport { isWithinMinBreakpoint } from '../utils/breakpoint.ts';\nimport { sizeMapping } from '../utils/css-mappings/eui-flyout.ts';\nimport { keysOf } from './common.ts';\nimport EuiButtonIcon from './eui-button-icon.gts';\nimport EuiOverlayMask from './eui-overlay-mask.gts';\nimport EuiPortal from './eui-portal.gts';\n\nimport type { EuiBreakpointSize } from '../utils/breakpoint.ts';\n\nexport type EuiFlyoutArgs = {\n closeAriaLabel?: string;\n /**\n * Shows the navigation flyout\n */\n isOpen?: boolean;\n /**\n * Keeps navigation flyout visible and push `<body>` content via padding\n */\n isDocked?: boolean;\n /**\n * Named breakpoint or pixel value for customizing the minimum window width to enable docking\n */\n dockedBreakpoint?: EuiBreakpointSize | number;\n /**\n * Keeps the display of toggle button when in docked state\n */\n showButtonIfDocked?: boolean;\n\n isFocusTrapActive?: boolean;\n\n as?: string;\n\n size?: number | string;\n\n side?: 'left' | 'right';\n\n role?: null | string;\n\n ownFocus?: boolean;\n\n outsideClickCloses?: boolean;\n\n closeButtonPosition?: 'outside' | 'inside';\n\n paddingSize?: string;\n\n hideCloseButton?: boolean;\n\n closeButtonProps?: {\n className?: string;\n onClick?: (e: MouseEvent) => void;\n classes?: string;\n };\n\n closeButtonAriaLabel?: string;\n\n onClose: () => void;\n\n maxWidth?: boolean | number;\n\n maskProps?: Record<string, unknown>;\n\n type?: string;\n\n pushMinBreakpoint?: number | EuiBreakpointSize;\n\n shouldSelfFocus?: boolean;\n\n focusTrapOptions?: {\n allowOutsideClick?: boolean;\n clickOutsideDeactivates?: boolean;\n initialFocus?: string | HTMLElement | (() => HTMLElement);\n fallbackFocus?: string | HTMLElement | (() => HTMLElement);\n escapeDeactivates?: boolean;\n returnFocusOnDeactivate?: boolean;\n preventScroll?: boolean;\n };\n};\n\nconst classesModifier = modBuilder(\n (\n _element: Element,\n _pos,\n {\n type,\n isPushed,\n side,\n dimensions = {},\n functionToCallOnWindowResize\n }: {\n type: string;\n isPushed: boolean;\n side: string;\n dimensions?: { width?: number };\n functionToCallOnWindowResize: () => void;\n }\n ) => {\n // This class doesn't actually do anything by EUI, but is nice to add for consumers (JIC)\n document.body.classList.add('euiBody--hasFlyout');\n\n /**\n * Accomodate for the `isPushed` state by adding padding to the body equal to the width of the element\n */\n if (type === 'push') {\n // Only add the event listener if we'll need to accommodate with padding\n window.addEventListener('resize', functionToCallOnWindowResize);\n\n if (isPushed && dimensions.width) {\n if (side === 'right') {\n document.body.style.paddingRight = `${dimensions.width}px`;\n } else if (side === 'left') {\n document.body.style.paddingLeft = `${dimensions.width}px`;\n }\n }\n }\n\n return () => {\n document.body.classList.remove('euiBody--hasFlyout');\n\n if (type === 'push') {\n window.removeEventListener('resize', functionToCallOnWindowResize);\n\n if (side === 'right') {\n document.body.style.paddingRight = '';\n } else if (side === 'left') {\n document.body.style.paddingLeft = '';\n }\n }\n };\n }\n);\n\nexport const SIZES = keysOf(sizeMapping);\nexport type EuiFlyoutSize = (typeof SIZES)[number];\n\nfunction isEuiFlyoutSizeNamed(value: any): value is EuiFlyoutSize {\n return SIZES.includes(value);\n}\n\nexport interface EuiFlyoutSignature {\n Element: any;\n Args: EuiFlyoutArgs;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiFlyoutComponent extends Component<EuiFlyoutSignature> {\n @tracked windowIsLargeEnoughToPush = isWithinMinBreakpoint(\n typeof window === 'undefined' ? -Infinity : window.innerWidth,\n this.pushMinBreakpoint\n );\n\n @tracked dimensions?: { width?: number; height?: number };\n\n get as() {\n return this.args.as ?? 'div';\n }\n\n get hideCloseButton() {\n return this.args.hideCloseButton ?? false;\n }\n\n get closeButtonPosition() {\n return this.args.closeButtonPosition ?? 'inside';\n }\n\n get ownFocus() {\n return this.args.ownFocus ?? true;\n }\n\n get side() {\n return this.args.side ?? 'right';\n }\n\n get size() {\n return this.args.size ?? 'm';\n }\n\n get paddingSize() {\n return this.args.paddingSize ?? 'l';\n }\n\n get maxWidth() {\n return this.args.maxWidth ?? false;\n }\n\n get type() {\n return this.args.type ?? 'overlay';\n }\n\n get outsideClickCloses() {\n return this.args.outsideClickCloses ?? false;\n }\n\n get role() {\n return this.args.role ?? 'dialog';\n }\n\n get pushMinBreakpoint() {\n return this.args.pushMinBreakpoint ?? 'l';\n }\n\n get isPushed() {\n return this.type === 'push' && this.windowIsLargeEnoughToPush;\n }\n\n get styles() {\n let newStyle: { [key: string]: unknown } = {};\n\n if (this.maxWidth !== false) {\n const value =\n typeof this.maxWidth === 'number'\n ? `${this.maxWidth}px`\n : this.maxWidth;\n\n newStyle = { maxWidth: value };\n }\n\n if (!isEuiFlyoutSizeNamed(this.size) && newStyle) {\n newStyle['width'] = this.size;\n } else {\n newStyle = { width: this.size };\n }\n\n return newStyle;\n }\n\n @action\n functionToCallOnWindowResize() {\n throttle(() => {\n if (isWithinMinBreakpoint(window.innerWidth, this.pushMinBreakpoint)) {\n this.windowIsLargeEnoughToPush = true;\n } else {\n this.windowIsLargeEnoughToPush = false;\n }\n }, 50);\n }\n\n @action\n onClose() {\n this.args.onClose?.();\n }\n\n @action\n onButtonCloseClicked(e: MouseEvent) {\n this.onClose();\n this.args.closeButtonProps?.onClick?.(e);\n }\n\n @action\n onResize(dimensions: { width: number; height: number }) {\n this.dimensions = dimensions;\n }\n\n <template>\n {{#let\n (classNames\n (if (eq this.maxWidth true) \"euiFlyout--maxWidth-default\")\n componentName=\"EuiFlyout\"\n type=this.type\n side=this.side\n size=this.size\n padding=this.paddingSize\n )\n (classNames\n \"euiFlyout__closeButton\"\n (concat \"euiFlyout__closeButton--\" this.closeButtonPosition)\n (or @closeButtonProps.className @closeButtonProps.classes)\n )\n (modifier\n focusTrap\n isActive=(argOrDefault @isFocusTrapActive true)\n shouldSelfFocus=(argOrDefault @shouldSelfFocus true)\n isPaused=this.isPushed\n focusTrapOptions=(argOrDefault\n @focusTrapOptions\n (hash\n allowOutsideClick=true clickOutsideDeactivates=(not this.ownFocus)\n )\n )\n )\n (modifier\n outsideClickDetectorModifier\n isDisabled=(or this.isPushed (not this.outsideClickCloses))\n onOutsideClick=this.onClose\n )\n (modifier styleModifier this.styles)\n (modifier onKey \"Escape\" this.onClose)\n (modifier\n classesModifier\n type=this.type\n isPushed=this.isPushed\n side=this.side\n dimensions=this.dimensions\n functionToCallOnWindowResize=this.functionToCallOnWindowResize\n )\n (modifier resizeObserverModifier onResize=this.onResize)\n (element this.as)\n as |classes closeButtonClasses focusTrapModifier outsideClickDetector currentStyles onEscape classesModifier resizeObserver TheElement|\n }}\n\n {{#if (and this.ownFocus (not this.isPushed))}}\n <EuiOverlayMask @headerZindexLocation=\"below\" @onClick={{this.onClose}}>\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{!@glint-expect-error}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n </EuiOverlayMask>\n {{else if (not this.isPushed)}}\n <EuiPortal>\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n </EuiPortal>\n {{else}}\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{onEscape}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["classesModifier","modBuilder","_element","_pos","type","isPushed","side","dimensions","functionToCallOnWindowResize","document","body","classList","add","window","addEventListener","width","style","paddingRight","paddingLeft","remove","removeEventListener","SIZES","keysOf","sizeMapping","isEuiFlyoutSizeNamed","value","includes","EuiFlyoutComponent","Component","g","prototype","tracked","isWithinMinBreakpoint","Infinity","innerWidth","pushMinBreakpoint","i","void 0","as","args","hideCloseButton","closeButtonPosition","ownFocus","size","paddingSize","maxWidth","outsideClickCloses","role","windowIsLargeEnoughToPush","styles","newStyle","throttle","n","action","onClose","onButtonCloseClicked","e","closeButtonProps","onClick","onResize","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","eq","concat","or","focusTrap","argOrDefault","hash","not","outsideClickDetectorModifier","styleModifier","onKey","resizeObserverModifier","element","and","EuiOverlayMask","EuiButtonIcon","on","EuiPortal"],"mappings":"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"}
1
+ {"version":3,"file":"eui-flyout.js","sources":["../../src/components/eui-flyout.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { throttle } from '@ember/runloop';\n\nimport { element } from 'ember-element-helper';\nimport { focusTrap } from 'ember-focus-trap';\nimport onKey from 'ember-keyboard/modifiers/on-key';\nimport { modifier as modBuilder } from 'ember-modifier';\nimport styleModifier from 'ember-style-modifier/modifiers/style';\nimport { and, eq, not, or } from 'ember-truth-helpers';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport outsideClickDetectorModifier from '../modifiers/outside-click-detector.ts';\nimport resizeObserverModifier from '../modifiers/resize-observer.ts';\nimport { isWithinMinBreakpoint } from '../utils/breakpoint.ts';\nimport { sizeMapping } from '../utils/css-mappings/eui-flyout.ts';\nimport { keysOf } from './common.ts';\nimport EuiButtonIcon from './eui-button-icon.gts';\nimport EuiOverlayMask from './eui-overlay-mask.gts';\nimport EuiPortal from './eui-portal.gts';\n\nimport type { EuiBreakpointSize } from '../utils/breakpoint.ts';\n\nexport type EuiFlyoutArgs = {\n closeAriaLabel?: string;\n /**\n * Shows the navigation flyout\n */\n isOpen?: boolean;\n /**\n * Keeps navigation flyout visible and push `<body>` content via padding\n */\n isDocked?: boolean;\n /**\n * Named breakpoint or pixel value for customizing the minimum window width to enable docking\n */\n dockedBreakpoint?: EuiBreakpointSize | number;\n /**\n * Keeps the display of toggle button when in docked state\n */\n showButtonIfDocked?: boolean;\n\n isFocusTrapActive?: boolean;\n\n as?: string;\n\n size?: number | string;\n\n side?: 'left' | 'right';\n\n role?: null | string;\n\n ownFocus?: boolean;\n\n outsideClickCloses?: boolean;\n\n closeButtonPosition?: 'outside' | 'inside';\n\n paddingSize?: string;\n\n hideCloseButton?: boolean;\n\n closeButtonProps?: {\n className?: string;\n onClick?: (e: MouseEvent) => void;\n classes?: string;\n };\n\n closeButtonAriaLabel?: string;\n\n onClose?: () => void;\n\n maxWidth?: boolean | number;\n\n maskProps?: Record<string, unknown>;\n\n type?: string;\n\n pushMinBreakpoint?: number | EuiBreakpointSize;\n\n shouldSelfFocus?: boolean;\n\n focusTrapOptions?: {\n allowOutsideClick?: boolean;\n clickOutsideDeactivates?: boolean;\n initialFocus?: string | HTMLElement | (() => HTMLElement);\n fallbackFocus?: string | HTMLElement | (() => HTMLElement);\n escapeDeactivates?: boolean;\n returnFocusOnDeactivate?: boolean;\n preventScroll?: boolean;\n };\n};\n\nconst classesModifier = modBuilder(\n (\n _element: Element,\n _pos,\n {\n type,\n isPushed,\n side,\n dimensions = {},\n functionToCallOnWindowResize\n }: {\n type: string;\n isPushed: boolean;\n side: string;\n dimensions?: { width?: number };\n functionToCallOnWindowResize: () => void;\n }\n ) => {\n // This class doesn't actually do anything by EUI, but is nice to add for consumers (JIC)\n document.body.classList.add('euiBody--hasFlyout');\n\n /**\n * Accomodate for the `isPushed` state by adding padding to the body equal to the width of the element\n */\n if (type === 'push') {\n // Only add the event listener if we'll need to accommodate with padding\n window.addEventListener('resize', functionToCallOnWindowResize);\n\n if (isPushed && dimensions.width) {\n if (side === 'right') {\n document.body.style.paddingRight = `${dimensions.width}px`;\n } else if (side === 'left') {\n document.body.style.paddingLeft = `${dimensions.width}px`;\n }\n }\n }\n\n return () => {\n document.body.classList.remove('euiBody--hasFlyout');\n\n if (type === 'push') {\n window.removeEventListener('resize', functionToCallOnWindowResize);\n\n if (side === 'right') {\n document.body.style.paddingRight = '';\n } else if (side === 'left') {\n document.body.style.paddingLeft = '';\n }\n }\n };\n }\n);\n\nexport const SIZES = keysOf(sizeMapping);\nexport type EuiFlyoutSize = (typeof SIZES)[number];\n\nfunction isEuiFlyoutSizeNamed(value: any): value is EuiFlyoutSize {\n return SIZES.includes(value);\n}\n\nexport interface EuiFlyoutSignature {\n Element: any;\n Args: EuiFlyoutArgs;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiFlyoutComponent extends Component<EuiFlyoutSignature> {\n @tracked windowIsLargeEnoughToPush = isWithinMinBreakpoint(\n typeof window === 'undefined' ? -Infinity : window.innerWidth,\n this.pushMinBreakpoint\n );\n\n @tracked dimensions?: { width?: number; height?: number };\n\n get as() {\n return this.args.as ?? 'div';\n }\n\n get hideCloseButton() {\n return this.args.hideCloseButton ?? false;\n }\n\n get closeButtonPosition() {\n return this.args.closeButtonPosition ?? 'inside';\n }\n\n get ownFocus() {\n return this.args.ownFocus ?? true;\n }\n\n get side() {\n return this.args.side ?? 'right';\n }\n\n get size() {\n return this.args.size ?? 'm';\n }\n\n get paddingSize() {\n return this.args.paddingSize ?? 'l';\n }\n\n get maxWidth() {\n return this.args.maxWidth ?? false;\n }\n\n get type() {\n return this.args.type ?? 'overlay';\n }\n\n get outsideClickCloses() {\n return this.args.outsideClickCloses ?? false;\n }\n\n get role() {\n return this.args.role ?? 'dialog';\n }\n\n get pushMinBreakpoint() {\n return this.args.pushMinBreakpoint ?? 'l';\n }\n\n get isPushed() {\n return this.type === 'push' && this.windowIsLargeEnoughToPush;\n }\n\n get styles() {\n let newStyle: { [key: string]: unknown } = {};\n\n if (this.maxWidth !== false) {\n const value =\n typeof this.maxWidth === 'number'\n ? `${this.maxWidth}px`\n : this.maxWidth;\n\n newStyle = { maxWidth: value };\n }\n\n if (!isEuiFlyoutSizeNamed(this.size) && newStyle) {\n newStyle['width'] = this.size;\n } else {\n newStyle = { width: this.size };\n }\n\n return newStyle;\n }\n\n @action\n functionToCallOnWindowResize() {\n throttle(() => {\n if (isWithinMinBreakpoint(window.innerWidth, this.pushMinBreakpoint)) {\n this.windowIsLargeEnoughToPush = true;\n } else {\n this.windowIsLargeEnoughToPush = false;\n }\n }, 50);\n }\n\n @action\n onClose() {\n this.args.onClose?.();\n }\n\n @action\n onButtonCloseClicked(e: MouseEvent) {\n this.onClose();\n this.args.closeButtonProps?.onClick?.(e);\n }\n\n @action\n onResize(dimensions: { width: number; height: number }) {\n this.dimensions = dimensions;\n }\n\n <template>\n {{#let\n (classNames\n (if (eq this.maxWidth true) \"euiFlyout--maxWidth-default\")\n componentName=\"EuiFlyout\"\n type=this.type\n side=this.side\n size=this.size\n padding=this.paddingSize\n )\n (classNames\n \"euiFlyout__closeButton\"\n (concat \"euiFlyout__closeButton--\" this.closeButtonPosition)\n (or @closeButtonProps.className @closeButtonProps.classes)\n )\n (modifier\n focusTrap\n isActive=(argOrDefault @isFocusTrapActive true)\n shouldSelfFocus=(argOrDefault @shouldSelfFocus true)\n isPaused=this.isPushed\n focusTrapOptions=(argOrDefault\n @focusTrapOptions\n (hash\n allowOutsideClick=true clickOutsideDeactivates=(not this.ownFocus)\n )\n )\n )\n (modifier\n outsideClickDetectorModifier\n isDisabled=(or this.isPushed (not this.outsideClickCloses))\n onOutsideClick=this.onClose\n )\n (modifier styleModifier this.styles)\n (modifier onKey \"Escape\" this.onClose)\n (modifier\n classesModifier\n type=this.type\n isPushed=this.isPushed\n side=this.side\n dimensions=this.dimensions\n functionToCallOnWindowResize=this.functionToCallOnWindowResize\n )\n (modifier resizeObserverModifier onResize=this.onResize)\n (element this.as)\n as |classes closeButtonClasses focusTrapModifier outsideClickDetector currentStyles onEscape classesModifier resizeObserver TheElement|\n }}\n\n {{#if (and this.ownFocus (not this.isPushed))}}\n <EuiOverlayMask @headerZindexLocation=\"below\" @onClick={{this.onClose}}>\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{!@glint-expect-error}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n </EuiOverlayMask>\n {{else if (not this.isPushed)}}\n <EuiPortal>\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n </EuiPortal>\n {{else}}\n <TheElement\n role={{this.role}}\n class={{classes}}\n tabindex={{-1}}\n {{currentStyles}}\n {{!@glint-expect-error}}\n {{focusTrapModifier}}\n {{outsideClickDetector}}\n {{onEscape}}\n {{classesModifier}}\n {{resizeObserver}}\n ...attributes\n >\n {{#if (and @onClose (not @hideCloseButton))}}\n <EuiButtonIcon\n @display={{if\n (eq this.closeButtonPosition \"outside\")\n \"fill\"\n \"empty\"\n }}\n @iconType=\"cross\"\n @color=\"text\"\n aria-label={{or @closeButtonAriaLabel @closeAriaLabel}}\n data-test-subj=\"euiFlyoutCloseButton\"\n class={{closeButtonClasses}}\n {{on \"click\" this.onButtonCloseClicked}}\n />\n {{/if}}\n {{yield}}\n </TheElement>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["classesModifier","modBuilder","_element","_pos","type","isPushed","side","dimensions","functionToCallOnWindowResize","document","body","classList","add","window","addEventListener","width","style","paddingRight","paddingLeft","remove","removeEventListener","SIZES","keysOf","sizeMapping","isEuiFlyoutSizeNamed","value","includes","EuiFlyoutComponent","Component","g","prototype","tracked","isWithinMinBreakpoint","Infinity","innerWidth","pushMinBreakpoint","i","void 0","as","args","hideCloseButton","closeButtonPosition","ownFocus","size","paddingSize","maxWidth","outsideClickCloses","role","windowIsLargeEnoughToPush","styles","newStyle","throttle","n","action","onClose","onButtonCloseClicked","e","closeButtonProps","onClick","onResize","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","eq","concat","or","focusTrap","argOrDefault","hash","not","outsideClickDetectorModifier","styleModifier","onKey","resizeObserverModifier","element","and","EuiOverlayMask","EuiButtonIcon","on","EuiPortal"],"mappings":"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"}
@@ -135,6 +135,11 @@ class EuiHeaderSectionItemButtonComponent extends Component {
135
135
  setButtonRef = ele => {
136
136
  this.buttonRef = ele;
137
137
  };
138
+ willDestroy() {
139
+ super.willDestroy();
140
+ this.buttonRef = undefined;
141
+ this.animationTargetRef = undefined;
142
+ }
138
143
  static {
139
144
  setComponentTemplate(precompileTemplate("\n <EuiButtonEmpty class=\"euiHeaderSectionItemButton\" @isDisabled={{@disabled}} @href={{@href}} @color=\"text\" {{didInsert this.setButtonRef}} {{on \"click\" (optional @onClick)}} ...attributes>\n <span {{didInsert this.setAnimationTargetRef}} class=\"euiHeaderSectionItemButton__content\">\n {{yield}}\n </span>\n {{#if @notification}}\n {{#if (eq @notification true)}}\n <EuiIcon @iconClasses=\"euiHeaderSectionItemButton__notification euiHeaderSectionItemButton__notification--dot\" @color={{argOrDefault @notificationColor \"accent\"}} @type=\"dot\" @size=\"l\" />\n {{else if @notification}}\n <EuiHideFor @sizes={{sizes}}>\n <EuiNotificationBadge class=\"euiHeaderSectionItemButton__notification euiHeaderSectionItemButton__notification--badge\" @color={{argOrDefault @notificationColor \"accent\"}}>\n {{@notification}}\n </EuiNotificationBadge>\n </EuiHideFor>\n <EuiShowFor @sizes={{sizes}}>\n <EuiIcon @iconClasses=\"euiHeaderSectionItemButton__notification euiHeaderSectionItemButton__notification--dot\" @color={{argOrDefault @notificationColor \"accent\"}} @type=\"dot\" @size=\"l\" />\n </EuiShowFor>\n {{/if}}\n {{/if}}\n </EuiButtonEmpty>\n ", {
140
145
  strictMode: true,