@ember-eui/core 12.0.11 → 12.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/components/eui-accordion.d.ts +3 -2
- package/declarations/components/eui-accordion.d.ts.map +1 -1
- package/declarations/components/eui-auto-sizer.d.ts.map +1 -1
- package/declarations/components/eui-card.d.ts +1 -0
- package/declarations/components/eui-card.d.ts.map +1 -1
- package/declarations/components/eui-code-block.d.ts +1 -0
- package/declarations/components/eui-code-block.d.ts.map +1 -1
- package/declarations/components/eui-code.d.ts +2 -2
- package/declarations/components/eui-code.d.ts.map +1 -1
- package/declarations/components/eui-context-menu-item.d.ts +1 -0
- package/declarations/components/eui-context-menu-item.d.ts.map +1 -1
- package/declarations/components/eui-dual-range.d.ts +1 -0
- package/declarations/components/eui-dual-range.d.ts.map +1 -1
- package/declarations/components/eui-field-search.d.ts +1 -0
- package/declarations/components/eui-field-search.d.ts.map +1 -1
- package/declarations/components/eui-file-picker.d.ts +1 -0
- package/declarations/components/eui-file-picker.d.ts.map +1 -1
- package/declarations/components/eui-global-toast-list.d.ts.map +1 -1
- package/declarations/components/eui-header-section-item-button.d.ts +1 -0
- package/declarations/components/eui-header-section-item-button.d.ts.map +1 -1
- package/declarations/components/eui-inner-text.d.ts.map +1 -1
- package/declarations/components/eui-input-popover.d.ts +1 -0
- package/declarations/components/eui-input-popover.d.ts.map +1 -1
- package/declarations/components/eui-markdown-editor.d.ts +1 -0
- package/declarations/components/eui-markdown-editor.d.ts.map +1 -1
- package/declarations/components/eui-overlay-mask.d.ts +1 -0
- package/declarations/components/eui-overlay-mask.d.ts.map +1 -1
- package/declarations/components/eui-popover.d.ts.map +1 -1
- package/declarations/components/eui-portal.d.ts +1 -1
- package/declarations/components/eui-portal.d.ts.map +1 -1
- package/declarations/components/eui-range-ticks.d.ts +2 -1
- package/declarations/components/eui-range-ticks.d.ts.map +1 -1
- package/declarations/components/eui-range-track.d.ts +2 -1
- package/declarations/components/eui-range-track.d.ts.map +1 -1
- package/declarations/components/eui-tabbed-content.d.ts.map +1 -1
- package/declarations/components/eui-tool-tip-popover.d.ts.map +1 -1
- package/declarations/components/eui-tool-tip.d.ts +1 -1
- package/declarations/components/eui-tool-tip.d.ts.map +1 -1
- package/declarations/components/eui-wrapping-popover.d.ts.map +1 -1
- package/declarations/modifiers/outside-click-detector.d.ts +3 -3
- package/declarations/modifiers/outside-click-detector.d.ts.map +1 -1
- package/declarations/modifiers/resize-observer.d.ts +4 -4
- package/declarations/modifiers/resize-observer.d.ts.map +1 -1
- package/dist/components/eui-accordion.js +13 -10
- package/dist/components/eui-accordion.js.map +1 -1
- package/dist/components/eui-auto-sizer.js +4 -0
- package/dist/components/eui-auto-sizer.js.map +1 -1
- package/dist/components/eui-card.js +4 -0
- package/dist/components/eui-card.js.map +1 -1
- package/dist/components/eui-code-block.js +7 -0
- package/dist/components/eui-code-block.js.map +1 -1
- package/dist/components/eui-code.js +3 -1
- package/dist/components/eui-code.js.map +1 -1
- package/dist/components/eui-collapsible-nav-group.js +2 -2
- package/dist/components/eui-collapsible-nav-group.js.map +1 -1
- package/dist/components/eui-context-menu-item.js +4 -0
- package/dist/components/eui-context-menu-item.js.map +1 -1
- package/dist/components/eui-dual-range.js +4 -0
- package/dist/components/eui-dual-range.js.map +1 -1
- package/dist/components/eui-field-search.js +4 -0
- package/dist/components/eui-field-search.js.map +1 -1
- package/dist/components/eui-file-picker.js +4 -0
- package/dist/components/eui-file-picker.js.map +1 -1
- package/dist/components/eui-global-toast-list.js +1 -0
- package/dist/components/eui-global-toast-list.js.map +1 -1
- package/dist/components/eui-header-section-item-button.js +5 -0
- package/dist/components/eui-header-section-item-button.js.map +1 -1
- package/dist/components/eui-inner-text.js +1 -0
- package/dist/components/eui-inner-text.js.map +1 -1
- package/dist/components/eui-input-popover.js +5 -0
- package/dist/components/eui-input-popover.js.map +1 -1
- package/dist/components/eui-markdown-editor.js +6 -0
- package/dist/components/eui-markdown-editor.js.map +1 -1
- package/dist/components/eui-notification-event-messages.js +2 -2
- package/dist/components/eui-notification-event-messages.js.map +1 -1
- package/dist/components/eui-overlay-mask.js +4 -0
- package/dist/components/eui-overlay-mask.js.map +1 -1
- package/dist/components/eui-popover.js +3 -0
- package/dist/components/eui-popover.js.map +1 -1
- package/dist/components/eui-portal.js +2 -1
- package/dist/components/eui-portal.js.map +1 -1
- package/dist/components/eui-range-ticks.js +4 -1
- package/dist/components/eui-range-ticks.js.map +1 -1
- package/dist/components/eui-range-track.js +4 -0
- package/dist/components/eui-range-track.js.map +1 -1
- package/dist/components/eui-tabbed-content.js +1 -0
- package/dist/components/eui-tabbed-content.js.map +1 -1
- package/dist/components/eui-tool-tip-popover.js +1 -0
- package/dist/components/eui-tool-tip-popover.js.map +1 -1
- package/dist/components/eui-tool-tip.js +8 -5
- package/dist/components/eui-tool-tip.js.map +1 -1
- package/dist/components/eui-wrapping-popover.js +2 -0
- package/dist/components/eui-wrapping-popover.js.map +1 -1
- package/dist/modifiers/outside-click-detector.js +6 -3
- package/dist/modifiers/outside-click-detector.js.map +1 -1
- package/dist/modifiers/resize-observer.js +10 -3
- package/dist/modifiers/resize-observer.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,8 +23,11 @@ class EuiRangeTicksComponent extends Component {
|
|
|
23
23
|
} = this.args;
|
|
24
24
|
return !ticks ? undefined : htmlSafe(`margin: 0 ${this.percentageWidth / -2}%; left: 0; right: 0;`);
|
|
25
25
|
}
|
|
26
|
+
get trackWidth() {
|
|
27
|
+
return this.args.trackWidth || 0;
|
|
28
|
+
}
|
|
26
29
|
static {
|
|
27
|
-
setComponentTemplate(precompileTemplate("\n <div class=\"euiRangeTicks {{if @compressed \"euiRangeTicks--compressed\"}}\" style={{this.ticksStyle}} ...attributes>\n {{#each @tickSequence key=\"value\" as |tickValue|}}\n {{#let (getRangeTick @ticks tickValue @min @max this.percentageWidth
|
|
30
|
+
setComponentTemplate(precompileTemplate("\n <div class=\"euiRangeTicks {{if @compressed \"euiRangeTicks--compressed\"}}\" style={{this.ticksStyle}} ...attributes>\n {{#each @tickSequence key=\"value\" as |tickValue|}}\n {{#let (getRangeTick @ticks tickValue @min @max this.percentageWidth this.trackWidth) as |derivedState|}}\n <button type=\"button\" class={{classNames (if (eq @value tickValue) \"euiRangeTick--selected\") (if derivedState.customTick \"euiRangeTick--isCustom\") \"euiRangeTick\"}} value={{tickValue}} disabled={{@disabled}} style={{derivedState.style}} tabindex=\"-1\" {{on \"click\" (optional @onChange)}}>\n {{!--@glint-expect-error--}}\n {{derivedState.label}}\n </button>\n {{/let}}\n {{/each}}\n </div>\n ", {
|
|
28
31
|
strictMode: true,
|
|
29
32
|
scope: () => ({
|
|
30
33
|
getRangeTick,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-range-ticks.js","sources":["../../src/components/eui-range-ticks.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { htmlSafe } from '@ember/template';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport { eq } from 'ember-truth-helpers';\n\nimport classNames from '../helpers/class-names.ts';\nimport getRangeTick from '../helpers/get-range-tick.ts';\n\nexport interface EuiRangeTick {\n value: number;\n label: Component;\n}\n\ntype Value = string | number;\n\nexport type EuiRangeTicksArgs = {\n ticks: EuiRangeTick[];\n tickSequence: number[];\n value?: Value | Value[];\n min: number;\n max: number;\n compressed?: boolean;\n interval?: number;\n disabled?: boolean;\n onChange?: (e: MouseEvent) => void;\n trackWidth
|
|
1
|
+
{"version":3,"file":"eui-range-ticks.js","sources":["../../src/components/eui-range-ticks.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { htmlSafe } from '@ember/template';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport { eq } from 'ember-truth-helpers';\n\nimport classNames from '../helpers/class-names.ts';\nimport getRangeTick from '../helpers/get-range-tick.ts';\n\nexport interface EuiRangeTick {\n value: number;\n label: Component;\n}\n\ntype Value = string | number;\n\nexport type EuiRangeTicksArgs = {\n ticks: EuiRangeTick[];\n tickSequence: number[];\n value?: Value | Value[];\n min: number;\n max: number;\n compressed?: boolean;\n interval?: number;\n disabled?: boolean;\n onChange?: (e: MouseEvent) => void;\n trackWidth?: number;\n};\n\nexport interface EuiRangeTicksSignature {\n Element: HTMLDivElement;\n Args: EuiRangeTicksArgs;\n}\n\nexport default class EuiRangeTicksComponent extends Component<EuiRangeTicksSignature> {\n get percentageWidth(): number {\n const { max, min, interval = 1 } = this.args;\n\n return (interval / (max - min + interval)) * 100;\n }\n\n get ticksStyle(): ReturnType<typeof htmlSafe> | undefined {\n const { ticks } = this.args;\n\n return !ticks\n ? undefined\n : htmlSafe(`margin: 0 ${this.percentageWidth / -2}%; left: 0; right: 0;`);\n }\n\n get trackWidth(): number {\n return this.args.trackWidth || 0;\n }\n\n <template>\n <div\n class=\"euiRangeTicks {{if @compressed 'euiRangeTicks--compressed'}}\"\n style={{this.ticksStyle}}\n ...attributes\n >\n {{#each @tickSequence key=\"value\" as |tickValue|}}\n {{#let\n (getRangeTick\n @ticks tickValue @min @max this.percentageWidth this.trackWidth\n )\n as |derivedState|\n }}\n <button\n type=\"button\"\n class={{classNames\n (if (eq @value tickValue) \"euiRangeTick--selected\")\n (if derivedState.customTick \"euiRangeTick--isCustom\")\n \"euiRangeTick\"\n }}\n value={{tickValue}}\n disabled={{@disabled}}\n style={{derivedState.style}}\n tabindex=\"-1\"\n {{on \"click\" (optional @onChange)}}\n >\n {{!@glint-expect-error}}\n {{derivedState.label}}\n </button>\n {{/let}}\n {{/each}}\n </div>\n </template>\n}\n"],"names":["EuiRangeTicksComponent","Component","percentageWidth","max","min","interval","args","ticksStyle","ticks","undefined","htmlSafe","trackWidth","setComponentTemplate","precompileTemplate","strictMode","scope","getRangeTick","classNames","eq","on","optional"],"mappings":";;;;;;;;;;AAmCe,MAAMA,+BAA+BC,SAAU,CAAA;EAC5D,IAAIC,eAAAA,GAA0B;IAC5B,MAAM;MAAEC,GAAG;MAAEC,GAAG;AAAEC,MAAAA,QAAW,GAAA;KAAG,GAAG,IAAI,CAACC,IAAI;IAE5C,OAAQD,QAAW,IAACF,MAAMC,GAAM,GAAAC,QAAQ,CAAC,GAAI,GAAA;AAC/C;EAEA,IAAIE,UAAcA,GAAwC;IACxD,MAAM;AAAEC,MAAAA;KAAO,GAAG,IAAI,CAACF,IAAI;AAE3B,IAAA,OAAO,CAACE,KAAA,GACJC,SACA,GAAAC,QAAA,CAAS,CAAa,UAAA,EAAA,IAAI,CAACR,eAAe,GAAG,EAAC,uBAAwB,CAAA;AAC5E;EAEA,IAAIS,UAAAA,GAAqB;AACvB,IAAA,OAAO,IAAI,CAACL,IAAI,CAACK,UAAU,IAAI,CAAA;AACjC;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAgCA,yvBAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,YAAA;QAAAC,UAAA;QAAAC,EAAA;QAAAC,EAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -109,6 +109,10 @@ class EuiRangeTrackComponent extends Component {
|
|
|
109
109
|
styles: htmlSafe(styles)
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
|
+
willDestroy() {
|
|
113
|
+
super.willDestroy();
|
|
114
|
+
this.trackEl = undefined;
|
|
115
|
+
}
|
|
112
116
|
static {
|
|
113
117
|
setComponentTemplate(precompileTemplate("\n <div class={{classNames \"euiRangeTrack\" (if @disabled \"euiRangeTrack--disabled\") (if @showTicks \"euiRangeTrack--hasTicks\") (if (and @levels (gt @levels.length 0)) \"euiRangeTrack--hasLevels\")}} style={{if this.derivedState.styles this.derivedState.styles}} ...attributes {{didInsert (fn this.validateValueIsInStep @max)}} {{didInsert this.registerTrack}} {{didUpdate (fn this.validateValueIsInStep @max) @max}} {{didUpdate (fn this.validateValueIsInStep @max) @min}} {{didUpdate (fn this.validateValueIsInStep @max) @step}}>\n {{#if (gt @levels.length 0)}}\n <EuiRangeLevels @compressed={{@compressed}} @levels={{@levels}} @max={{@max}} @min={{@min}} @showTicks={{@showTicks}} @trackWidth={{this.trackEl.clientWidth}} />\n {{/if}}\n {{#if this.derivedState.tickSequence}}\n {{#if @ticks}}\n <EuiRangeTicks @disabled={{@disabled}} @compressed={{@compressed}} @ticks={{@ticks}} @tickSequence={{this.derivedState.tickSequence}} @value={{@value}} @min={{@min}} @max={{@max}} @interval={{or @tickInterval @step}} @onChange={{@onChange}} @trackWidth={{this.trackEl.clientWidth}} />\n {{/if}}\n {{/if}}\n {{yield}}\n </div>\n ", {
|
|
114
118
|
strictMode: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-range-track.js","sources":["../../src/components/eui-range-track.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { fn } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\nimport { htmlSafe } from '@ember/template';\n\nimport { and, gt,or } from 'ember-truth-helpers';\nimport { range } from 'lodash-es';\n\nimport classNames from '../helpers/class-names.ts';\nimport { isEvenlyDivisibleBy } from '../utils/number/index.ts';\nimport { LEVEL_COLORS } from './eui-range-levels.gts';\nimport EuiRangeLevels from './eui-range-levels.gts';\nimport EuiRangeTicks from './eui-range-ticks.gts';\n\nimport type { EuiRangeLevel } from './eui-range-levels';\n\nexport { LEVEL_COLORS };\n\nexport interface EuiRangeTick {\n value: number;\n label: Component;\n}\n\ntype Value = number | string;\n\nexport type EuiRangeTrackArgs = {\n min: number;\n max: number;\n step?: number;\n value?: Value | Value[];\n compressed?: boolean;\n disabled?: boolean;\n showTicks?: boolean;\n tickInterval?: number;\n ticks?: EuiRangeTick[];\n onChange?: (e: MouseEvent) => void;\n levels?: EuiRangeLevel[];\n};\n\ntype Styling = {\n tickSequence?: number[];\n styles: ReturnType<typeof htmlSafe>;\n};\n\nexport interface EuiRangeTrackSignature {\n Element: HTMLElement;\n Args: EuiRangeTrackArgs;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiRangeTrackComponent extends Component<EuiRangeTrackSignature> {\n @tracked declare trackEl: HTMLElement;\n\n @action\n registerTrack(el: HTMLElement) {\n this.trackEl = el;\n }\n\n @action\n validateValueIsInStep(value: number): number {\n const { min, max, step } = this.args;\n\n if (value < min) {\n assert(\n `The value of ${value} is lower than the min value of ${min}.`,\n false\n );\n }\n\n if (value > max) {\n assert(\n `The value of ${value} is higher than the max value of ${max}.`,\n false\n );\n }\n\n // Error out if the value doesn't line up with the sequence of steps\n if (!isEvenlyDivisibleBy(value - min, step !== undefined ? step : 1)) {\n assert(\n `The value of ${value} is not included in the possible sequence provided by the step of ${step}.`,\n false\n );\n }\n\n // Return the value if nothing fails\n return value;\n }\n\n calculateSequence(\n min: EuiRangeTrackArgs['min'],\n max: EuiRangeTrackArgs['max'],\n interval?: EuiRangeTrackArgs['tickInterval']\n ): number[] {\n // Loop from min to max, creating adding values at each interval\n // (adds a very small number to the max since `range` is not inclusive of the max value)\n const toBeInclusive = 0.000000001;\n\n return range(min, max + toBeInclusive, interval);\n }\n\n calculateTicks(\n min: EuiRangeTrackArgs['min'],\n max: EuiRangeTrackArgs['max'],\n step?: EuiRangeTrackArgs['step'],\n tickInterval?: EuiRangeTrackArgs['tickInterval'],\n customTicks?: EuiRangeTick[]\n ): number[] {\n let ticks;\n\n if (customTicks) {\n // If custom values were passed, use those for the sequence\n // But make sure they align with the possible sequence\n ticks = customTicks.map((tick) => {\n return this.validateValueIsInStep(tick.value);\n });\n } else {\n // If a custom interval was passed, use those for the sequence\n // But make sure they align with the possible sequence\n const interval = tickInterval || step;\n const tickSequence = this.calculateSequence(min, max, interval);\n\n ticks = tickSequence.map((tick) => {\n return this.validateValueIsInStep(tick);\n });\n }\n\n // Error out if there are too many ticks to render\n if (ticks.length > 20) {\n assert(\n `The number of ticks to render is too high (${ticks.length}), increase the interval.`,\n true\n );\n }\n\n return ticks;\n }\n\n get derivedState(): Styling {\n let tickSequence;\n let styles = '';\n const { showTicks, min, max, step, tickInterval, ticks } = this.args;\n\n if (showTicks) {\n tickSequence = this.calculateTicks(min, max, step, tickInterval, ticks);\n\n // Calculate if any extra margin should be added to the inputWrapper\n // because of longer tick labels on the ends\n const lengthOfMinLabel = String(tickSequence[0]).length;\n const lenghtOfMaxLabel = String(\n tickSequence[tickSequence.length - 1]\n ).length;\n const isLastTickTheMax = tickSequence[tickSequence.length - 1] === max;\n\n if (lengthOfMinLabel > 2) {\n styles = `margin-left: ${lengthOfMinLabel / 5}em`;\n }\n\n if (isLastTickTheMax && lenghtOfMaxLabel > 2) {\n styles = `margin-right: ${lenghtOfMaxLabel / 5}em`;\n }\n }\n\n return {\n tickSequence,\n styles: htmlSafe(styles)\n };\n }\n\n <template>\n <div\n class={{classNames\n \"euiRangeTrack\"\n (if @disabled \"euiRangeTrack--disabled\")\n (if @showTicks \"euiRangeTrack--hasTicks\")\n (if (and @levels (gt @levels.length 0)) \"euiRangeTrack--hasLevels\")\n }}\n style={{if this.derivedState.styles this.derivedState.styles}}\n ...attributes\n {{didInsert (fn this.validateValueIsInStep @max)}}\n {{didInsert this.registerTrack}}\n {{didUpdate (fn this.validateValueIsInStep @max) @max}}\n {{didUpdate (fn this.validateValueIsInStep @max) @min}}\n {{didUpdate (fn this.validateValueIsInStep @max) @step}}\n >\n {{#if (gt @levels.length 0)}}\n <EuiRangeLevels\n @compressed={{@compressed}}\n @levels={{@levels}}\n @max={{@max}}\n @min={{@min}}\n @showTicks={{@showTicks}}\n @trackWidth={{this.trackEl.clientWidth}}\n />\n {{/if}}\n {{#if this.derivedState.tickSequence}}\n {{#if @ticks}}\n <EuiRangeTicks\n @disabled={{@disabled}}\n @compressed={{@compressed}}\n @ticks={{@ticks}}\n @tickSequence={{this.derivedState.tickSequence}}\n @value={{@value}}\n @min={{@min}}\n @max={{@max}}\n @interval={{or @tickInterval @step}}\n @onChange={{@onChange}}\n @trackWidth={{this.trackEl.clientWidth}}\n />\n {{/if}}\n {{/if}}\n {{yield}}\n </div>\n </template>\n}\n"],"names":["EuiRangeTrackComponent","Component","g","prototype","tracked","i","void 0","registerTrack","el","trackEl","n","action","validateValueIsInStep","value","min","max","step","args","assert","isEvenlyDivisibleBy","undefined","calculateSequence","interval","toBeInclusive","range","calculateTicks","tickInterval","customTicks","ticks","map","tick","tickSequence","length","derivedState","styles","showTicks","lengthOfMinLabel","String","lenghtOfMaxLabel","isLastTickTheMax","htmlSafe","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","and","gt","didInsert","fn","didUpdate","EuiRangeLevels","EuiRangeTicks","or"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-range-track.js","sources":["../../src/components/eui-range-track.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { fn } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\nimport { htmlSafe } from '@ember/template';\n\nimport { and, gt,or } from 'ember-truth-helpers';\nimport { range } from 'lodash-es';\n\nimport classNames from '../helpers/class-names.ts';\nimport { isEvenlyDivisibleBy } from '../utils/number/index.ts';\nimport { LEVEL_COLORS } from './eui-range-levels.gts';\nimport EuiRangeLevels from './eui-range-levels.gts';\nimport EuiRangeTicks from './eui-range-ticks.gts';\n\nimport type { EuiRangeLevel } from './eui-range-levels';\n\nexport { LEVEL_COLORS };\n\nexport interface EuiRangeTick {\n value: number;\n label: Component;\n}\n\ntype Value = number | string;\n\nexport type EuiRangeTrackArgs = {\n min: number;\n max: number;\n step?: number;\n value?: Value | Value[];\n compressed?: boolean;\n disabled?: boolean;\n showTicks?: boolean;\n tickInterval?: number;\n ticks?: EuiRangeTick[];\n onChange?: (e: MouseEvent) => void;\n levels?: EuiRangeLevel[];\n};\n\ntype Styling = {\n tickSequence?: number[];\n styles: ReturnType<typeof htmlSafe>;\n};\n\nexport interface EuiRangeTrackSignature {\n Element: HTMLElement;\n Args: EuiRangeTrackArgs;\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiRangeTrackComponent extends Component<EuiRangeTrackSignature> {\n @tracked trackEl?: HTMLElement;\n\n @action\n registerTrack(el: HTMLElement) {\n this.trackEl = el;\n }\n\n @action\n validateValueIsInStep(value: number): number {\n const { min, max, step } = this.args;\n\n if (value < min) {\n assert(\n `The value of ${value} is lower than the min value of ${min}.`,\n false\n );\n }\n\n if (value > max) {\n assert(\n `The value of ${value} is higher than the max value of ${max}.`,\n false\n );\n }\n\n // Error out if the value doesn't line up with the sequence of steps\n if (!isEvenlyDivisibleBy(value - min, step !== undefined ? step : 1)) {\n assert(\n `The value of ${value} is not included in the possible sequence provided by the step of ${step}.`,\n false\n );\n }\n\n // Return the value if nothing fails\n return value;\n }\n\n calculateSequence(\n min: EuiRangeTrackArgs['min'],\n max: EuiRangeTrackArgs['max'],\n interval?: EuiRangeTrackArgs['tickInterval']\n ): number[] {\n // Loop from min to max, creating adding values at each interval\n // (adds a very small number to the max since `range` is not inclusive of the max value)\n const toBeInclusive = 0.000000001;\n\n return range(min, max + toBeInclusive, interval);\n }\n\n calculateTicks(\n min: EuiRangeTrackArgs['min'],\n max: EuiRangeTrackArgs['max'],\n step?: EuiRangeTrackArgs['step'],\n tickInterval?: EuiRangeTrackArgs['tickInterval'],\n customTicks?: EuiRangeTick[]\n ): number[] {\n let ticks;\n\n if (customTicks) {\n // If custom values were passed, use those for the sequence\n // But make sure they align with the possible sequence\n ticks = customTicks.map((tick) => {\n return this.validateValueIsInStep(tick.value);\n });\n } else {\n // If a custom interval was passed, use those for the sequence\n // But make sure they align with the possible sequence\n const interval = tickInterval || step;\n const tickSequence = this.calculateSequence(min, max, interval);\n\n ticks = tickSequence.map((tick) => {\n return this.validateValueIsInStep(tick);\n });\n }\n\n // Error out if there are too many ticks to render\n if (ticks.length > 20) {\n assert(\n `The number of ticks to render is too high (${ticks.length}), increase the interval.`,\n true\n );\n }\n\n return ticks;\n }\n\n get derivedState(): Styling {\n let tickSequence;\n let styles = '';\n const { showTicks, min, max, step, tickInterval, ticks } = this.args;\n\n if (showTicks) {\n tickSequence = this.calculateTicks(min, max, step, tickInterval, ticks);\n\n // Calculate if any extra margin should be added to the inputWrapper\n // because of longer tick labels on the ends\n const lengthOfMinLabel = String(tickSequence[0]).length;\n const lenghtOfMaxLabel = String(\n tickSequence[tickSequence.length - 1]\n ).length;\n const isLastTickTheMax = tickSequence[tickSequence.length - 1] === max;\n\n if (lengthOfMinLabel > 2) {\n styles = `margin-left: ${lengthOfMinLabel / 5}em`;\n }\n\n if (isLastTickTheMax && lenghtOfMaxLabel > 2) {\n styles = `margin-right: ${lenghtOfMaxLabel / 5}em`;\n }\n }\n\n return {\n tickSequence,\n styles: htmlSafe(styles)\n };\n }\n\n willDestroy(): void {\n super.willDestroy();\n \n this.trackEl = undefined;\n }\n\n <template>\n <div\n class={{classNames\n \"euiRangeTrack\"\n (if @disabled \"euiRangeTrack--disabled\")\n (if @showTicks \"euiRangeTrack--hasTicks\")\n (if (and @levels (gt @levels.length 0)) \"euiRangeTrack--hasLevels\")\n }}\n style={{if this.derivedState.styles this.derivedState.styles}}\n ...attributes\n {{didInsert (fn this.validateValueIsInStep @max)}}\n {{didInsert this.registerTrack}}\n {{didUpdate (fn this.validateValueIsInStep @max) @max}}\n {{didUpdate (fn this.validateValueIsInStep @max) @min}}\n {{didUpdate (fn this.validateValueIsInStep @max) @step}}\n >\n {{#if (gt @levels.length 0)}}\n <EuiRangeLevels\n @compressed={{@compressed}}\n @levels={{@levels}}\n @max={{@max}}\n @min={{@min}}\n @showTicks={{@showTicks}}\n @trackWidth={{this.trackEl.clientWidth}}\n />\n {{/if}}\n {{#if this.derivedState.tickSequence}}\n {{#if @ticks}}\n <EuiRangeTicks\n @disabled={{@disabled}}\n @compressed={{@compressed}}\n @ticks={{@ticks}}\n @tickSequence={{this.derivedState.tickSequence}}\n @value={{@value}}\n @min={{@min}}\n @max={{@max}}\n @interval={{or @tickInterval @step}}\n @onChange={{@onChange}}\n @trackWidth={{this.trackEl.clientWidth}}\n />\n {{/if}}\n {{/if}}\n {{yield}}\n </div>\n </template>\n}\n"],"names":["EuiRangeTrackComponent","Component","g","prototype","tracked","i","void 0","registerTrack","el","trackEl","n","action","validateValueIsInStep","value","min","max","step","args","assert","isEvenlyDivisibleBy","undefined","calculateSequence","interval","toBeInclusive","range","calculateTicks","tickInterval","customTicks","ticks","map","tick","tickSequence","length","derivedState","styles","showTicks","lengthOfMinLabel","String","lenghtOfMaxLabel","isLastTickTheMax","htmlSafe","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","and","gt","didInsert","fn","didUpdate","EuiRangeLevels","EuiRangeTicks","or"],"mappings":"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"}
|
|
@@ -59,6 +59,7 @@ class EuiTabbedContentComponent extends Component {
|
|
|
59
59
|
//@ts-expect-error
|
|
60
60
|
this.tabsRef.removeEventListener('focusout', this.removeFocus);
|
|
61
61
|
}
|
|
62
|
+
this.tabsRef = undefined;
|
|
62
63
|
}
|
|
63
64
|
removeFocus = blurEvent => {
|
|
64
65
|
// only set inFocus to false if the wrapping div doesn't contain the now-focusing element
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-tabbed-content.js","sources":["../../src/components/eui-tabbed-content.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { scheduleOnce } from '@ember/runloop';\nimport type Owner from '@ember/owner';\n\nimport findBy from '@nullvoxpopuli/ember-composable-helpers/helpers/find-by';\nimport { eq } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport EuiTab from './eui-tab.gts';\nimport EuiTabs from './eui-tabs.gts';\n\nimport type { CommonArgs } from './common.ts';\nimport type { EuiTabsSignature } from './eui-tabs';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface EuiTabbedContentTab {\n id: string;\n name: string;\n content?: ComponentLike;\n disabled?: boolean;\n}\n\nexport type EuiTabbedContentArgs = CommonArgs & {\n /**\n * When tabbing into the tabs, set the focus on `initial` for the first tab,\n * or `selected` for the currently selected tab. Best use case is for inside of\n * overlay content like popovers or flyouts.\n */\n autoFocus?: 'initial' | 'selected';\n /**\n * Choose `default` or alternative `condensed` display styles\n */\n display?: EuiTabsSignature['Args']['display'];\n /**\n * Evenly stretches each tab to fill the horizontal space\n */\n expand?: boolean;\n /**\n * Use this prop to set the initially selected tab while letting the tabbed content component\n * control selection state internally\n */\n initialSelectedTab?: EuiTabbedContentTab;\n onTabClick?: (selectedTab: EuiTabbedContentTab) => void;\n /**\n * Use this prop if you want to control selection state within the owner component\n */\n selectedTab?: EuiTabbedContentTab;\n size?: EuiTabsSignature['Args']['size'];\n /**\n * Each tab needs id and content properties, so we can associate it with its panel for accessibility.\n * The name property (a node) is also required to display to the user.\n */\n tabs: EuiTabbedContentTab[];\n};\n\nexport interface EuiTabbedContentSignature {\n Element: HTMLDivElement;\n Args: EuiTabbedContentArgs;\n Blocks: {\n default: [EuiTabbedContentTab];\n selectedTabContent: [EuiTabbedContentTab];\n };\n}\n\nexport default class EuiTabbedContentComponent extends Component<EuiTabbedContentSignature> {\n @tracked selectedTabId;\n @tracked inFocus: boolean = false;\n tabsRef?: Element;\n\n get autoFocus() {\n return this.args.autoFocus || 'initial';\n }\n\n constructor(owner: Owner, args: EuiTabbedContentArgs) {\n super(owner, args);\n\n const { initialSelectedTab, selectedTab, tabs } = this.args;\n\n // Only track selection state if it's not controlled externally.\n if (!selectedTab) {\n this.selectedTabId =\n (initialSelectedTab && initialSelectedTab.id) || tabs[0]?.id;\n }\n }\n\n get selectedTab() {\n const { selectedTab: externalSelectedTab, tabs } = this.args;\n\n return (\n externalSelectedTab ||\n tabs.find((tab: EuiTabbedContentTab) => tab.id === this.selectedTabId)\n );\n }\n\n setTabsRef = (element: Element) => {\n this.tabsRef = element;\n // Current short-term solution for event listener (see https://github.com/elastic/eui/pull/2717)\n //@ts-expect-error\n this.tabsRef.addEventListener('focusout', this.removeFocus);\n };\n\n willDestroy(): void {\n super.willDestroy();\n\n if (this.tabsRef) {\n //@ts-expect-error\n this.tabsRef.removeEventListener('focusout', this.removeFocus);\n }\n }\n\n removeFocus = (blurEvent: FocusEvent) => {\n // only set inFocus to false if the wrapping div doesn't contain the now-focusing element\n const currentTarget = blurEvent.currentTarget! as HTMLElement;\n const relatedTarget = blurEvent.relatedTarget! as HTMLElement;\n\n if (currentTarget.contains(relatedTarget) === false) {\n this.inFocus = true;\n }\n };\n\n onTabClick = (selectedTab: EuiTabbedContentTab) => {\n const { onTabClick, selectedTab: externalSelectedTab } = this.args;\n\n if (onTabClick) {\n onTabClick(selectedTab);\n }\n\n // Only track selection state if it's not controlled externally.\n if (!externalSelectedTab) {\n this.selectedTabId = selectedTab.id;\n\n const focusTab = () => {\n this.focusTab();\n };\n\n scheduleOnce('afterRender', this, focusTab);\n }\n };\n\n focusTab = () => {\n if (this.tabsRef) {\n const targetTab: HTMLDivElement | null = this.tabsRef.querySelector(\n `#${this.selectedTabId}`\n );\n\n targetTab!.focus();\n }\n };\n\n initializeFocus = () => {\n if (!this.inFocus && this.autoFocus === 'selected') {\n // Must wait for setState to finish before calling `.focus()`\n // as the focus call triggers a blur on the first tab\n this.inFocus = true;\n\n const focusTab = () => {\n this.focusTab();\n };\n\n scheduleOnce('afterRender', this, focusTab);\n }\n };\n\n <template>\n {{#let (randomId) as |rootId|}}\n <div class={{@className}} ...attributes>\n <EuiTabs\n @expand={{@expand}}\n @display={{@display}}\n @size={{@size}}\n {{on \"focus\" this.initializeFocus}}\n {{didInsert this.setTabsRef}}\n >\n {{#each @tabs as |tab|}}\n <EuiTab\n @id={{tab.id}}\n aria-controls={{rootId}}\n @isSelected={{eq tab.id this.selectedTab.id}}\n @disabled={{tab.disabled}}\n {{on \"click\" (fn this.onTabClick tab)}}\n >\n {{tab.name}}\n </EuiTab>\n {{/each}}\n </EuiTabs>\n\n {{#let\n (findBy \"id\" (if this.selectedTabId this.selectedTabId \"\") @tabs)\n as |currentTab|\n }}\n {{#if currentTab}}\n <div\n role=\"tabpanel\"\n id={{rootId}}\n aria-labelledby={{currentTab.id}}\n >\n {{#if (has-block \"selectedTabContent\")}}\n {{yield currentTab to=\"selectedTabContent\"}}\n {{else}}\n {{currentTab.content}}\n {{/if}}\n </div>\n {{/if}}\n {{/let}}\n </div>\n {{/let}}\n </template>\n}\n"],"names":["EuiTabbedContentComponent","Component","g","prototype","tracked","i","void 0","tabsRef","autoFocus","args","constructor","owner","initialSelectedTab","selectedTab","tabs","selectedTabId","id","externalSelectedTab","find","tab","setTabsRef","element","addEventListener","removeFocus","willDestroy","removeEventListener","blurEvent","currentTarget","relatedTarget","contains","inFocus","onTabClick","focusTab","scheduleOnce","targetTab","querySelector","focus","initializeFocus","setComponentTemplate","precompileTemplate","strictMode","scope","randomId","EuiTabs","on","didInsert","EuiTab","eq","fn","findBy"],"mappings":";;;;;;;;;;;;;;;AAoEe,MAAMA,kCAAkCC,SAAU,CAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAC9DC,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,cAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACAC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2B,KAAM;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAClCC,OAAA;EAEA,IAAIC,SAAYA,GAAA;AACd,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,SAAS,IAAI,SAAA;AAChC;AAEAE,EAAAA,WAAAA,CAAYC,KAAY,EAAEF,IAA0B,EAAE;AACpD,IAAA,KAAK,CAACE,KAAO,EAAAF,IAAA,CAAA;IAEb,MAAM;MAAEG,kBAAkB;MAAEC,WAAW;AAAEC,MAAAA;KAAM,GAAG,IAAI,CAACL,IAAI;AAE3D;IACA,IAAI,CAACI,WAAa,EAAA;AAChB,MAAA,IAAI,CAACE,aAAa,GACfH,kBAAA,IAAsBA,kBAAmB,CAAAI,EAAE,IAAKF,IAAI,CAAC,CAAA,CAAE,EAAEE,EAAA;AAC9D;AACF;EAEA,IAAIH,WAAcA,GAAA;IAChB,MAAM;AAAEA,MAAAA,aAAaI,mBAAmB;AAAEH,MAAAA;KAAM,GAAG,IAAI,CAACL,IAAI;AAE5D,IAAA,OACEQ,mBAAA,IACAH,IAAK,CAAAI,IAAI,CAAEC,GAA6B,IAAAA,GAAA,CAAIH,EAAE,KAAK,IAAI,CAACD,aAAa,CACvE;AACF;EAEAK,UAAA,GAAcC,OAAS,IAAA;IACrB,IAAI,CAACd,OAAO,GAAGc,OAAA;AACf;AACA;IACA,IAAI,CAACd,OAAO,CAACe,gBAAgB,CAAC,UAAY,EAAA,IAAI,CAACC,WAAW,CAAA;GAC1D;AAEFC,EAAAA,WAAAA,GAAoB;IAClB,KAAK,CAACA,WAAA,EAAA;IAEN,IAAI,IAAI,CAACjB,OAAO,EAAE;AAChB;MACA,IAAI,CAACA,OAAO,CAACkB,mBAAmB,CAAC,UAAY,EAAA,IAAI,CAACF,WAAW,CAAA;AAC/D;
|
|
1
|
+
{"version":3,"file":"eui-tabbed-content.js","sources":["../../src/components/eui-tabbed-content.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { scheduleOnce } from '@ember/runloop';\nimport type Owner from '@ember/owner';\n\nimport findBy from '@nullvoxpopuli/ember-composable-helpers/helpers/find-by';\nimport { eq } from 'ember-truth-helpers';\n\nimport randomId from '../-private/random-id.ts';\nimport EuiTab from './eui-tab.gts';\nimport EuiTabs from './eui-tabs.gts';\n\nimport type { CommonArgs } from './common.ts';\nimport type { EuiTabsSignature } from './eui-tabs';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface EuiTabbedContentTab {\n id: string;\n name: string;\n content?: ComponentLike;\n disabled?: boolean;\n}\n\nexport type EuiTabbedContentArgs = CommonArgs & {\n /**\n * When tabbing into the tabs, set the focus on `initial` for the first tab,\n * or `selected` for the currently selected tab. Best use case is for inside of\n * overlay content like popovers or flyouts.\n */\n autoFocus?: 'initial' | 'selected';\n /**\n * Choose `default` or alternative `condensed` display styles\n */\n display?: EuiTabsSignature['Args']['display'];\n /**\n * Evenly stretches each tab to fill the horizontal space\n */\n expand?: boolean;\n /**\n * Use this prop to set the initially selected tab while letting the tabbed content component\n * control selection state internally\n */\n initialSelectedTab?: EuiTabbedContentTab;\n onTabClick?: (selectedTab: EuiTabbedContentTab) => void;\n /**\n * Use this prop if you want to control selection state within the owner component\n */\n selectedTab?: EuiTabbedContentTab;\n size?: EuiTabsSignature['Args']['size'];\n /**\n * Each tab needs id and content properties, so we can associate it with its panel for accessibility.\n * The name property (a node) is also required to display to the user.\n */\n tabs: EuiTabbedContentTab[];\n};\n\nexport interface EuiTabbedContentSignature {\n Element: HTMLDivElement;\n Args: EuiTabbedContentArgs;\n Blocks: {\n default: [EuiTabbedContentTab];\n selectedTabContent: [EuiTabbedContentTab];\n };\n}\n\nexport default class EuiTabbedContentComponent extends Component<EuiTabbedContentSignature> {\n @tracked selectedTabId;\n @tracked inFocus: boolean = false;\n tabsRef?: Element;\n\n get autoFocus() {\n return this.args.autoFocus || 'initial';\n }\n\n constructor(owner: Owner, args: EuiTabbedContentArgs) {\n super(owner, args);\n\n const { initialSelectedTab, selectedTab, tabs } = this.args;\n\n // Only track selection state if it's not controlled externally.\n if (!selectedTab) {\n this.selectedTabId =\n (initialSelectedTab && initialSelectedTab.id) || tabs[0]?.id;\n }\n }\n\n get selectedTab() {\n const { selectedTab: externalSelectedTab, tabs } = this.args;\n\n return (\n externalSelectedTab ||\n tabs.find((tab: EuiTabbedContentTab) => tab.id === this.selectedTabId)\n );\n }\n\n setTabsRef = (element: Element) => {\n this.tabsRef = element;\n // Current short-term solution for event listener (see https://github.com/elastic/eui/pull/2717)\n //@ts-expect-error\n this.tabsRef.addEventListener('focusout', this.removeFocus);\n };\n\n willDestroy(): void {\n super.willDestroy();\n\n if (this.tabsRef) {\n //@ts-expect-error\n this.tabsRef.removeEventListener('focusout', this.removeFocus);\n }\n\n this.tabsRef = undefined;\n }\n\n removeFocus = (blurEvent: FocusEvent) => {\n // only set inFocus to false if the wrapping div doesn't contain the now-focusing element\n const currentTarget = blurEvent.currentTarget! as HTMLElement;\n const relatedTarget = blurEvent.relatedTarget! as HTMLElement;\n\n if (currentTarget.contains(relatedTarget) === false) {\n this.inFocus = true;\n }\n };\n\n onTabClick = (selectedTab: EuiTabbedContentTab) => {\n const { onTabClick, selectedTab: externalSelectedTab } = this.args;\n\n if (onTabClick) {\n onTabClick(selectedTab);\n }\n\n // Only track selection state if it's not controlled externally.\n if (!externalSelectedTab) {\n this.selectedTabId = selectedTab.id;\n\n const focusTab = () => {\n this.focusTab();\n };\n\n scheduleOnce('afterRender', this, focusTab);\n }\n };\n\n focusTab = () => {\n if (this.tabsRef) {\n const targetTab: HTMLDivElement | null = this.tabsRef.querySelector(\n `#${this.selectedTabId}`\n );\n\n targetTab!.focus();\n }\n };\n\n initializeFocus = () => {\n if (!this.inFocus && this.autoFocus === 'selected') {\n // Must wait for setState to finish before calling `.focus()`\n // as the focus call triggers a blur on the first tab\n this.inFocus = true;\n\n const focusTab = () => {\n this.focusTab();\n };\n\n scheduleOnce('afterRender', this, focusTab);\n }\n };\n\n <template>\n {{#let (randomId) as |rootId|}}\n <div class={{@className}} ...attributes>\n <EuiTabs\n @expand={{@expand}}\n @display={{@display}}\n @size={{@size}}\n {{on \"focus\" this.initializeFocus}}\n {{didInsert this.setTabsRef}}\n >\n {{#each @tabs as |tab|}}\n <EuiTab\n @id={{tab.id}}\n aria-controls={{rootId}}\n @isSelected={{eq tab.id this.selectedTab.id}}\n @disabled={{tab.disabled}}\n {{on \"click\" (fn this.onTabClick tab)}}\n >\n {{tab.name}}\n </EuiTab>\n {{/each}}\n </EuiTabs>\n\n {{#let\n (findBy \"id\" (if this.selectedTabId this.selectedTabId \"\") @tabs)\n as |currentTab|\n }}\n {{#if currentTab}}\n <div\n role=\"tabpanel\"\n id={{rootId}}\n aria-labelledby={{currentTab.id}}\n >\n {{#if (has-block \"selectedTabContent\")}}\n {{yield currentTab to=\"selectedTabContent\"}}\n {{else}}\n {{currentTab.content}}\n {{/if}}\n </div>\n {{/if}}\n {{/let}}\n </div>\n {{/let}}\n </template>\n}\n"],"names":["EuiTabbedContentComponent","Component","g","prototype","tracked","i","void 0","tabsRef","autoFocus","args","constructor","owner","initialSelectedTab","selectedTab","tabs","selectedTabId","id","externalSelectedTab","find","tab","setTabsRef","element","addEventListener","removeFocus","willDestroy","removeEventListener","undefined","blurEvent","currentTarget","relatedTarget","contains","inFocus","onTabClick","focusTab","scheduleOnce","targetTab","querySelector","focus","initializeFocus","setComponentTemplate","precompileTemplate","strictMode","scope","randomId","EuiTabs","on","didInsert","EuiTab","eq","fn","findBy"],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ class EuiTooltipPopover extends Component {
|
|
|
20
20
|
document.body.classList.remove('euiBody-hasPortalContent');
|
|
21
21
|
window.removeEventListener('resize', this.updateDimensions);
|
|
22
22
|
window.removeEventListener('scroll', this.updateDimensions, true);
|
|
23
|
+
this.popover = null;
|
|
23
24
|
}
|
|
24
25
|
setPopoverRef(popover) {
|
|
25
26
|
this.popover = popover;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-tool-tip-popover.js","sources":["../../src/components/eui-tool-tip-popover.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { fn } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\nimport type Owner from '@ember/owner';\n\nimport type { CommonArgs } from './common.ts';\n\ntype EuiTooltipPopoverArgs = CommonArgs & {\n positionToolTip: () => void;\n title?: Component;\n popoverRef?: (ref: HTMLDivElement | null) => void;\n hasTitle?: boolean;\n };\n\nexport interface EuiTooltipPopoverSignature {\n Element: HTMLDivElement;\n Args: EuiTooltipPopoverArgs;\n Blocks: {\n default: [];\n title: [];\n content: [];\n };\n}\n\nexport default class EuiTooltipPopover extends Component<EuiTooltipPopoverSignature> {\n popover: HTMLDivElement | null = null;\n\n constructor(owner: Owner, args: EuiTooltipPopoverArgs) {\n super(owner, args);\n document.body.classList.add('euiBody-hasPortalContent');\n window.addEventListener('resize', this.updateDimensions);\n window.addEventListener('scroll', this.updateDimensions, true);\n }\n\n willDestroy(): void {\n super.willDestroy();\n document.body.classList.remove('euiBody-hasPortalContent');\n window.removeEventListener('resize', this.updateDimensions);\n window.removeEventListener('scroll', this.updateDimensions, true);\n }\n\n @action\n setPopoverRef(popover: HTMLDivElement | null): void {\n this.popover = popover;\n\n if (this.args.popoverRef) {\n this.args.popoverRef(popover);\n }\n }\n\n @action\n updateDimensions(): void {\n requestAnimationFrame(() => {\n // Because of this delay, sometimes `positionToolTip` becomes unavailable.\n if (this.popover) {\n this.args.positionToolTip();\n }\n });\n }\n\n <template>\n <div\n class=\"euiToolTipPopover\"\n {{didInsert this.setPopoverRef}}\n {{willDestroy (fn this.setPopoverRef null)}}\n ...attributes\n >\n {{#if @hasTitle}}\n <div class=\"euiToolTip__title\">\n {{yield to=\"title\"}}\n </div>\n {{/if}}\n {{yield to=\"content\"}}\n </div>\n </template>\n}\n"],"names":["EuiTooltipPopover","Component","popover","constructor","owner","args","document","body","classList","add","window","addEventListener","updateDimensions","willDestroy","remove","removeEventListener","setPopoverRef","popoverRef","n","prototype","action","requestAnimationFrame","positionToolTip","setComponentTemplate","precompileTemplate","strictMode","scope","didInsert","fn"],"mappings":";;;;;;;;;AA0Be,MAAMA,0BAA0BC,SAAU,CAAA;AACvDC,EAAAA,OAAS,GAAwB,IAAK;AAEtCC,EAAAA,WAAAA,CAAYC,KAAY,EAAEC,IAA2B,EAAE;AACrD,IAAA,KAAK,CAACD,KAAO,EAAAC,IAAA,CAAA;IACbC,QAAA,CAASC,IAAI,CAACC,SAAS,CAACC,GAAG,CAAC,0BAAA,CAAA;IAC5BC,MAAA,CAAOC,gBAAgB,CAAC,QAAU,EAAA,IAAI,CAACC,gBAAgB,CAAA;IACvDF,MAAA,CAAOC,gBAAgB,CAAC,QAAA,EAAU,IAAI,CAACC,gBAAgB,EAAE,IAAA,CAAA;AAC3D;AAEAC,EAAAA,WAAAA,GAAoB;IAClB,KAAK,CAACA,WAAA,EAAA;IACNP,QAAA,CAASC,IAAI,CAACC,SAAS,CAACM,MAAM,CAAC,0BAAA,CAAA;IAC/BJ,MAAA,CAAOK,mBAAmB,CAAC,QAAU,EAAA,IAAI,CAACH,gBAAgB,CAAA;IAC1DF,MAAA,CAAOK,mBAAmB,CAAC,QAAA,EAAU,IAAI,CAACH,gBAAgB,EAAE,IAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"eui-tool-tip-popover.js","sources":["../../src/components/eui-tool-tip-popover.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { fn } from '@ember/helper';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\nimport type Owner from '@ember/owner';\n\nimport type { CommonArgs } from './common.ts';\n\ntype EuiTooltipPopoverArgs = CommonArgs & {\n positionToolTip: () => void;\n title?: Component;\n popoverRef?: (ref: HTMLDivElement | null) => void;\n hasTitle?: boolean;\n };\n\nexport interface EuiTooltipPopoverSignature {\n Element: HTMLDivElement;\n Args: EuiTooltipPopoverArgs;\n Blocks: {\n default: [];\n title: [];\n content: [];\n };\n}\n\nexport default class EuiTooltipPopover extends Component<EuiTooltipPopoverSignature> {\n popover: HTMLDivElement | null = null;\n\n constructor(owner: Owner, args: EuiTooltipPopoverArgs) {\n super(owner, args);\n document.body.classList.add('euiBody-hasPortalContent');\n window.addEventListener('resize', this.updateDimensions);\n window.addEventListener('scroll', this.updateDimensions, true);\n }\n\n willDestroy(): void {\n super.willDestroy();\n document.body.classList.remove('euiBody-hasPortalContent');\n window.removeEventListener('resize', this.updateDimensions);\n window.removeEventListener('scroll', this.updateDimensions, true);\n this.popover = null;\n }\n\n @action\n setPopoverRef(popover: HTMLDivElement | null): void {\n this.popover = popover;\n\n if (this.args.popoverRef) {\n this.args.popoverRef(popover);\n }\n }\n\n @action\n updateDimensions(): void {\n requestAnimationFrame(() => {\n // Because of this delay, sometimes `positionToolTip` becomes unavailable.\n if (this.popover) {\n this.args.positionToolTip();\n }\n });\n }\n\n <template>\n <div\n class=\"euiToolTipPopover\"\n {{didInsert this.setPopoverRef}}\n {{willDestroy (fn this.setPopoverRef null)}}\n ...attributes\n >\n {{#if @hasTitle}}\n <div class=\"euiToolTip__title\">\n {{yield to=\"title\"}}\n </div>\n {{/if}}\n {{yield to=\"content\"}}\n </div>\n </template>\n}\n"],"names":["EuiTooltipPopover","Component","popover","constructor","owner","args","document","body","classList","add","window","addEventListener","updateDimensions","willDestroy","remove","removeEventListener","setPopoverRef","popoverRef","n","prototype","action","requestAnimationFrame","positionToolTip","setComponentTemplate","precompileTemplate","strictMode","scope","didInsert","fn"],"mappings":";;;;;;;;;AA0Be,MAAMA,0BAA0BC,SAAU,CAAA;AACvDC,EAAAA,OAAS,GAAwB,IAAK;AAEtCC,EAAAA,WAAAA,CAAYC,KAAY,EAAEC,IAA2B,EAAE;AACrD,IAAA,KAAK,CAACD,KAAO,EAAAC,IAAA,CAAA;IACbC,QAAA,CAASC,IAAI,CAACC,SAAS,CAACC,GAAG,CAAC,0BAAA,CAAA;IAC5BC,MAAA,CAAOC,gBAAgB,CAAC,QAAU,EAAA,IAAI,CAACC,gBAAgB,CAAA;IACvDF,MAAA,CAAOC,gBAAgB,CAAC,QAAA,EAAU,IAAI,CAACC,gBAAgB,EAAE,IAAA,CAAA;AAC3D;AAEAC,EAAAA,WAAAA,GAAoB;IAClB,KAAK,CAACA,WAAA,EAAA;IACNP,QAAA,CAASC,IAAI,CAACC,SAAS,CAACM,MAAM,CAAC,0BAAA,CAAA;IAC/BJ,MAAA,CAAOK,mBAAmB,CAAC,QAAU,EAAA,IAAI,CAACH,gBAAgB,CAAA;IAC1DF,MAAA,CAAOK,mBAAmB,CAAC,QAAA,EAAU,IAAI,CAACH,gBAAgB,EAAE,IAAA,CAAA;IAC5D,IAAI,CAACV,OAAO,GAAG,IAAA;AACjB;EAGAc,aAAAA,CAAcd,OAA8B,EAAQ;IAClD,IAAI,CAACA,OAAO,GAAGA,OAAA;AAEf,IAAA,IAAI,IAAI,CAACG,IAAI,CAACY,UAAU,EAAE;AACxB,MAAA,IAAI,CAACZ,IAAI,CAACY,UAAU,CAACf,OAAA,CAAA;AACvB;AACF;AAAA,EAAA;IAAAgB,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAPCC,MAAA,CAAA,CAAA;AAAA;AAUDR,EAAAA,gBAAAA,GAAyB;AACvBS,IAAAA,qBAAsB,CAAA,MAAA;AACpB;MACA,IAAI,IAAI,CAACnB,OAAO,EAAE;AAChB,QAAA,IAAI,CAACG,IAAI,CAACiB,eAAe,EAAA;AAC3B;AACF,KAAA,CAAA;AACF;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,kBAAA,EAAA,CARCC,MAAA,CAAA,CAAA;AAAA;AAUD,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAcA,0TAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,SAAA;QAAAd,WAAA;AAAAe,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -148,11 +148,6 @@ class EuiToolTip extends Component {
|
|
|
148
148
|
static {
|
|
149
149
|
n(this.prototype, "visibleDidUpdate", [action]);
|
|
150
150
|
}
|
|
151
|
-
willDestroy() {
|
|
152
|
-
super.willDestroy();
|
|
153
|
-
this.clearAnimationTimeout();
|
|
154
|
-
this.removeAttachToHandlers();
|
|
155
|
-
}
|
|
156
151
|
testAnchor() {
|
|
157
152
|
// when the tooltip is visible, this checks if the anchor is still part of document
|
|
158
153
|
// this fixes when the react root is removed from the dom without unmounting
|
|
@@ -315,6 +310,14 @@ class EuiToolTip extends Component {
|
|
|
315
310
|
static {
|
|
316
311
|
n(this.prototype, "onMouseOut", [action]);
|
|
317
312
|
}
|
|
313
|
+
willDestroy() {
|
|
314
|
+
super.willDestroy();
|
|
315
|
+
this.clearAnimationTimeout();
|
|
316
|
+
this.removeAttachToHandlers();
|
|
317
|
+
this.anchor = null;
|
|
318
|
+
this.popover = null;
|
|
319
|
+
this._attachTo = null;
|
|
320
|
+
}
|
|
318
321
|
static {
|
|
319
322
|
setComponentTemplate(precompileTemplate("\n {{#let (has-block \"content\") (has-block \"title\") (has-block \"anchor\") as |hasContentBlock hasTitleBlock hasAnchorBlock|}}\n {{#if @attachTo}}\n <span {{didInsert this.updateAttachTo}} {{didUpdate this.updateAttachTo @attachTo}} {{didUpdate (if (eq @isShown true) this.onFocus this.onBlur) @isShown}} {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}></span>\n {{else}}\n <span role=\"tooltip\" class={{classNames \"euiToolTipAnchor\" (if (eq @display \"block\") \"euiToolTipAnchor--displayBlock\") @anchorClassName}} {{didInsert this.didInsertAnchor}} {{on \"mouseover\" this.showToolTip}} {{on \"focusin\" this.onFocus}} {{on \"focusout\" this.onBlur}} {{on \"mouseout\" this.onMouseOut}} {{didUpdate (if (eq @isShown true) this.onFocus this.onBlur) @isShown}} {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}>\n {{#if hasAnchorBlock}}\n {{yield this.id to=\"anchor\"}}\n {{else}}\n {{yield this.id}}\n {{/if}}\n </span>\n {{/if}}\n {{#if (and this.visible (or @title @content hasContentBlock hasTitleBlock))}}\n <EuiPortal>\n <EuiToolTipPopover class={{classNames \"euiToolTip\" @className componentName=\"EuiToolTip\" position=this.calculatedPosition}} @positionToolTip={{this.positionToolTip}} @popoverRef={{this.setPopoverRef}} id={{this.id}} @hasTitle={{if (and (argOrDefault @hasTitle true) (or hasTitleBlock @title)) true}} role=\"tooltip\" ...attributes {{style this.toolTipStyles}}>\n <:title>\n {{#if hasTitleBlock}}\n {{yield to=\"title\"}}\n {{else}}\n {{@title}}\n {{/if}}\n </:title>\n <:content>\n <div class=\"euiToolTip__arrow\" {{style this.arrowStyles}}></div>\n <div {{resizeObserver onResize=this.positionToolTip}}>\n {{#if hasContentBlock}}\n {{yield to=\"content\"}}\n {{else}}\n {{@content}}\n {{/if}}\n </div>\n </:content>\n </EuiToolTipPopover>\n </EuiPortal>\n {{/if}}\n {{/let}}\n ", {
|
|
320
323
|
strictMode: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-tool-tip.js","sources":["../../src/components/eui-tool-tip.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\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 didUpdate from '@ember/render-modifiers/modifiers/did-insert';\nimport { cancel, later, next, scheduleOnce } from '@ember/runloop';\n\nimport style from 'ember-style-modifier/modifiers/style';\nimport { and, eq, or } from 'ember-truth-helpers';\n\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport resizeObserver from '../modifiers/resize-observer.ts';\nimport { keys } from '../utils/keys.ts';\nimport { findPopoverPosition } from '../utils/popover/index.ts';\nimport EuiPortal from './eui-portal.gts';\nimport EuiToolTipPopover from './eui-tool-tip-popover.gts';\n\nimport type { EuiTooltipPopoverSignature } from './eui-tool-tip-popover';\n\nexport type ToolTipPositions = 'top' | 'right' | 'bottom' | 'left';\n\nexport type ToolTipDelay = 'regular' | 'long';\n\nconst delayToMsMap: { [key in ToolTipDelay]: number } = {\n regular: 250,\n long: 250 * 5\n};\n\ninterface ToolTipStyles {\n top: string;\n left: string | 'auto';\n right?: string | 'auto';\n opacity?: string;\n visibility?: 'hidden';\n display?: 'inlineBlock';\n}\n\nconst displayToClassNameMap = {\n inlineBlock: undefined,\n block: 'euiToolTipAnchor--displayBlock'\n};\n\nconst DEFAULT_TOOLTIP_STYLES: ToolTipStyles = {\n // position the tooltip content near the top-left\n // corner of the window so it can't create scrollbars\n // 50,50 because who knows what negative margins, padding, etc\n top: '50px',\n left: '50px',\n // just in case, avoid any potential flicker by hiding\n // the tooltip before it is positioned\n opacity: '0',\n // prevent accidental mouse interaction while positioning\n visibility: 'hidden',\n display: 'inlineBlock'\n};\n\nexport type EuiTooltipArgs = {\n /**\n * Passes onto the the trigger.\n */\n anchorClassName?: string;\n /**\n * Passes onto the tooltip itself, not the trigger.\n */\n className?: string;\n /**\n * The main content of your tooltip.\n */\n content?: string;\n /**\n * Common display alternatives for the anchor wrapper\n */\n display?: keyof typeof displayToClassNameMap;\n /**\n * Delay before showing tooltip. Good for repeatable items.\n */\n delay?: ToolTipDelay;\n /**\n * An optional title for your tooltip.\n */\n title?: string;\n /**\n * Unless you provide one, this will be randomly generated.\n */\n id?: string;\n /**\n * Suggested position. If there is not enough room for it this will be changed.\n */\n position?: ToolTipPositions;\n\n attachTo?: undefined | HTMLElement | string | null;\n\n isShown?: boolean | undefined;\n\n /**\n * If supplied, called when mouse movement causes the tool tip to be\n * hidden.\n */\n onMouseOut?: (event: MouseEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n\n hasTitle?: boolean;\n};\n\nexport interface EuiToolTipSignature {\n Element: EuiTooltipPopoverSignature['Element'];\n Args: EuiTooltipArgs;\n Blocks: {\n default?: [id: string];\n title?: [];\n content?: [];\n anchor?: [id: string];\n };\n}\n\nexport default class EuiToolTip extends Component<EuiToolTipSignature> {\n anchor: null | HTMLElement = null;\n popover: null | HTMLElement = null;\n\n @argOrDefaultDecorator('top') position!: ToolTipPositions;\n @argOrDefaultDecorator('regular') delay!: ToolTipDelay;\n\n //STATE\n @tracked visible = false;\n @tracked hasFocus = false;\n @tracked calculatedPosition: ToolTipPositions = this.position;\n @tracked toolTipStyles: ToolTipStyles = DEFAULT_TOOLTIP_STYLES;\n @tracked arrowStyles: { left?: string; top?: string } = {};\n @tracked id: string = this.args.id || guidFor({});\n @tracked _attachTo: undefined | HTMLElement | string | null = null;\n\n private timeoutId?: ReturnType<typeof later>;\n\n @action\n updateAttachTo(): void {\n if (!this.args.attachTo && this._attachTo) {\n this.removeAttachToHandlers();\n this._attachTo = null;\n\n return;\n }\n\n if (this.args.attachTo && this.args.attachTo !== this._attachTo) {\n next(() => {\n this.removeAttachToHandlers();\n this._attachTo = this.args.attachTo;\n this.setupAttachToHandlers();\n });\n }\n }\n\n @action\n setupAttachToHandlers(): void {\n if (this._attachTo && this.attachTo) {\n this.attachTo.addEventListener('mousemove', this.showToolTip);\n this.attachTo.addEventListener('focusin', this.onFocus);\n //@ts-expect-error\n this.attachTo.addEventListener('mouseout', this.onMouseOut);\n this.attachTo.addEventListener('focusout', this.onBlur);\n this.positionToolTip();\n }\n }\n\n @action\n removeAttachToHandlers(): void {\n if (this._attachTo && this.attachTo) {\n this.attachTo.removeEventListener('mousemove', this.showToolTip);\n this.attachTo.removeEventListener('focusin', this.onFocus);\n //@ts-expect-error\n this.attachTo.removeEventListener('mouseout', this.onMouseOut);\n this.attachTo.removeEventListener('focusout', this.onBlur);\n }\n }\n\n @action\n clearAnimationTimeout(): void {\n if (this.timeoutId) {\n cancel(this.timeoutId);\n this.timeoutId = undefined;\n }\n }\n\n @action\n visibleDidUpdate(value: boolean): void {\n if (this.visible === false && value === true) {\n requestAnimationFrame(this.testAnchor);\n }\n }\n\n willDestroy(): void {\n super.willDestroy();\n this.clearAnimationTimeout();\n this.removeAttachToHandlers();\n }\n\n @action\n testAnchor(): void {\n // when the tooltip is visible, this checks if the anchor is still part of document\n // this fixes when the react root is removed from the dom without unmounting\n // https://github.com/elastic/eui/issues/1105\n if (document.body.contains(this._anchor) === false) {\n // the anchor is no longer part of `document`\n this.hideToolTip();\n } else {\n if (this.visible) {\n // if still visible, keep checking\n requestAnimationFrame(this.testAnchor);\n }\n }\n }\n\n @action\n didInsertAnchor(ref: HTMLElement): void {\n this.anchor = ref;\n }\n\n @action\n setPopoverRef(ref: HTMLElement | null): void {\n this.popover = ref;\n\n // if the popover has been unmounted, clear\n // any previous knowledge about its size\n if (ref === null) {\n this.toolTipStyles = DEFAULT_TOOLTIP_STYLES;\n this.arrowStyles = {};\n } else {\n this.positionToolTip();\n }\n }\n\n @action\n showToolTip(): void {\n if (!this.timeoutId && !this.visible) {\n const fn = (): void => {\n this.visible = true;\n };\n\n this.timeoutId = later(\n this,\n () => {\n scheduleOnce('afterRender', this, fn);\n },\n delayToMsMap[this.delay]\n );\n }\n }\n\n @cached\n get attachTo(): Element | null | undefined {\n if (typeof this._attachTo === 'string') {\n return document.querySelector(this._attachTo);\n } else {\n return this._attachTo;\n }\n }\n\n get _anchor(): Element | null {\n return this.attachTo || this.anchor;\n }\n\n @action\n positionToolTip(): void {\n const requestedPosition = this.position;\n\n if (!this._anchor || !this.popover) {\n return;\n }\n\n const { position, left, top, arrow } = findPopoverPosition({\n anchor: this._anchor as HTMLElement,\n popover: this.popover,\n position: requestedPosition,\n offset: 16, // offset popover 16px from the anchor\n arrowConfig: {\n arrowWidth: 12,\n arrowBuffer: 4\n }\n });\n\n const windowWidth =\n document.documentElement.clientWidth || window.innerWidth;\n const useRightValue = windowWidth / 2 < left;\n\n const toolTipStyles: ToolTipStyles = {\n top: `${top}px`,\n left: useRightValue ? 'auto' : `${left}px`,\n right: useRightValue\n ? `${windowWidth - left - this.popover.offsetWidth}px`\n : 'auto'\n };\n\n this.visible = true;\n this.calculatedPosition = position;\n this.toolTipStyles = toolTipStyles;\n\n if (arrow) {\n this.arrowStyles = {\n left: `${arrow.left}px`,\n top: `${arrow?.top}px`\n };\n }\n }\n\n @action\n hideToolTip(): void {\n if (this.args.isShown === true) {\n return;\n }\n\n this.clearAnimationTimeout();\n\n const fn = (): void => {\n if (!this.isDestroying || !this.isDestroyed) {\n this.visible = false;\n }\n };\n\n scheduleOnce('afterRender', this, fn);\n }\n\n @action\n hasFocusMouseMoveListener(): void {\n this.hideToolTip();\n window.removeEventListener('mousemove', this.hasFocusMouseMoveListener);\n }\n\n @action\n onKeyUp(event: KeyboardEvent): void {\n if (event.key === keys.TAB) {\n window.addEventListener('mousemove', this.hasFocusMouseMoveListener);\n }\n }\n\n @action\n onFocus(): void {\n this.hasFocus = true;\n this.showToolTip();\n }\n\n @action\n onBlur(): void {\n this.hasFocus = false;\n this.hideToolTip();\n }\n\n @action\n onMouseOut(event: MouseEvent): void {\n // Prevent mousing over children from hiding the tooltip by testing for whether the mouse has\n // left the anchor for a non-child.\n if (\n this._anchor === event.relatedTarget ||\n (this._anchor != null &&\n !this._anchor.contains(event.relatedTarget as Node))\n ) {\n if (!this.hasFocus) {\n this.hideToolTip();\n }\n }\n\n if (this.args.onMouseOut) {\n this.args.onMouseOut(event);\n }\n }\n\n <template>\n {{#let\n (has-block \"content\") (has-block \"title\") (has-block \"anchor\")\n as |hasContentBlock hasTitleBlock hasAnchorBlock|\n }}\n {{#if @attachTo}}\n <span\n {{didInsert this.updateAttachTo}}\n {{didUpdate this.updateAttachTo @attachTo}}\n {{didUpdate\n (if (eq @isShown true) this.onFocus this.onBlur)\n @isShown\n }}\n {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}\n ></span>\n {{else}}\n <span\n role=\"tooltip\"\n class={{classNames\n \"euiToolTipAnchor\"\n (if (eq @display \"block\") \"euiToolTipAnchor--displayBlock\")\n @anchorClassName\n }}\n {{didInsert this.didInsertAnchor}}\n {{on \"mouseover\" this.showToolTip}}\n {{on \"focusin\" this.onFocus}}\n {{on \"focusout\" this.onBlur}}\n {{on \"mouseout\" this.onMouseOut}}\n {{didUpdate\n (if (eq @isShown true) this.onFocus this.onBlur)\n @isShown\n }}\n {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}\n >\n {{#if hasAnchorBlock}}\n {{yield this.id to=\"anchor\"}}\n {{else}}\n {{yield this.id}}\n {{/if}}\n </span>\n {{/if}}\n {{#if\n (and this.visible (or @title @content hasContentBlock hasTitleBlock))\n }}\n <EuiPortal>\n <EuiToolTipPopover\n class={{classNames\n \"euiToolTip\"\n @className\n componentName=\"EuiToolTip\"\n position=this.calculatedPosition\n }}\n @positionToolTip={{this.positionToolTip}}\n @popoverRef={{this.setPopoverRef}}\n id={{this.id}}\n @hasTitle={{if\n (and (argOrDefault @hasTitle true) (or hasTitleBlock @title))\n true\n }}\n role=\"tooltip\"\n ...attributes\n {{style this.toolTipStyles}}\n >\n <:title>\n {{#if hasTitleBlock}}\n {{yield to=\"title\"}}\n {{else}}\n {{@title}}\n {{/if}}\n </:title>\n <:content>\n <div class=\"euiToolTip__arrow\" {{style this.arrowStyles}}></div>\n <div {{resizeObserver onResize=this.positionToolTip}}>\n {{#if hasContentBlock}}\n {{yield to=\"content\"}}\n {{else}}\n {{@content}}\n {{/if}}\n </div>\n </:content>\n </EuiToolTipPopover>\n </EuiPortal>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["delayToMsMap","regular","long","DEFAULT_TOOLTIP_STYLES","top","left","opacity","visibility","display","EuiToolTip","Component","anchor","popover","g","prototype","argOrDefaultDecorator","i","void 0","tracked","position","args","id","guidFor","timeoutId","updateAttachTo","attachTo","_attachTo","removeAttachToHandlers","next","setupAttachToHandlers","n","action","addEventListener","showToolTip","onFocus","onMouseOut","onBlur","positionToolTip","removeEventListener","clearAnimationTimeout","cancel","undefined","visibleDidUpdate","value","visible","requestAnimationFrame","testAnchor","willDestroy","document","body","contains","_anchor","hideToolTip","didInsertAnchor","ref","setPopoverRef","toolTipStyles","arrowStyles","fn","later","scheduleOnce","delay","querySelector","cached","requestedPosition","arrow","findPopoverPosition","offset","arrowConfig","arrowWidth","arrowBuffer","windowWidth","documentElement","clientWidth","window","innerWidth","useRightValue","right","offsetWidth","calculatedPosition","isShown","isDestroying","isDestroyed","hasFocusMouseMoveListener","onKeyUp","event","key","keys","TAB","hasFocus","relatedTarget","setComponentTemplate","precompileTemplate","strictMode","scope","didInsert","didUpdate","eq","classNames","on","and","or","EuiPortal","EuiToolTipPopover","argOrDefault","style","resizeObserver"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-tool-tip.js","sources":["../../src/components/eui-tool-tip.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\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 didUpdate from '@ember/render-modifiers/modifiers/did-insert';\nimport { cancel, later, next, scheduleOnce } from '@ember/runloop';\n\nimport style from 'ember-style-modifier/modifiers/style';\nimport { and, eq, or } from 'ember-truth-helpers';\n\nimport argOrDefault, { argOrDefaultDecorator } from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport resizeObserver from '../modifiers/resize-observer.ts';\nimport { keys } from '../utils/keys.ts';\nimport { findPopoverPosition } from '../utils/popover/index.ts';\nimport EuiPortal from './eui-portal.gts';\nimport EuiToolTipPopover from './eui-tool-tip-popover.gts';\n\nimport type { EuiTooltipPopoverSignature } from './eui-tool-tip-popover';\n\nexport type ToolTipPositions = 'top' | 'right' | 'bottom' | 'left';\n\nexport type ToolTipDelay = 'regular' | 'long';\n\nconst delayToMsMap: { [key in ToolTipDelay]: number } = {\n regular: 250,\n long: 250 * 5\n};\n\ninterface ToolTipStyles {\n top: string;\n left: string | 'auto';\n right?: string | 'auto';\n opacity?: string;\n visibility?: 'hidden';\n display?: 'inlineBlock';\n}\n\nconst displayToClassNameMap = {\n inlineBlock: undefined,\n block: 'euiToolTipAnchor--displayBlock'\n};\n\nconst DEFAULT_TOOLTIP_STYLES: ToolTipStyles = {\n // position the tooltip content near the top-left\n // corner of the window so it can't create scrollbars\n // 50,50 because who knows what negative margins, padding, etc\n top: '50px',\n left: '50px',\n // just in case, avoid any potential flicker by hiding\n // the tooltip before it is positioned\n opacity: '0',\n // prevent accidental mouse interaction while positioning\n visibility: 'hidden',\n display: 'inlineBlock'\n};\n\nexport type EuiTooltipArgs = {\n /**\n * Passes onto the the trigger.\n */\n anchorClassName?: string;\n /**\n * Passes onto the tooltip itself, not the trigger.\n */\n className?: string;\n /**\n * The main content of your tooltip.\n */\n content?: string;\n /**\n * Common display alternatives for the anchor wrapper\n */\n display?: keyof typeof displayToClassNameMap;\n /**\n * Delay before showing tooltip. Good for repeatable items.\n */\n delay?: ToolTipDelay;\n /**\n * An optional title for your tooltip.\n */\n title?: string;\n /**\n * Unless you provide one, this will be randomly generated.\n */\n id?: string;\n /**\n * Suggested position. If there is not enough room for it this will be changed.\n */\n position?: ToolTipPositions;\n\n attachTo?: undefined | HTMLElement | string | null;\n\n isShown?: boolean | undefined;\n\n /**\n * If supplied, called when mouse movement causes the tool tip to be\n * hidden.\n */\n onMouseOut?: (event: MouseEvent) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n\n hasTitle?: boolean;\n};\n\nexport interface EuiToolTipSignature {\n Element: EuiTooltipPopoverSignature['Element'];\n Args: EuiTooltipArgs;\n Blocks: {\n default?: [id: string];\n title?: [];\n content?: [];\n anchor?: [id: string];\n };\n}\n\nexport default class EuiToolTip extends Component<EuiToolTipSignature> {\n anchor: null | HTMLElement = null;\n popover: null | HTMLElement = null;\n\n @argOrDefaultDecorator('top') position!: ToolTipPositions;\n @argOrDefaultDecorator('regular') delay!: ToolTipDelay;\n\n //STATE\n @tracked visible = false;\n @tracked hasFocus = false;\n @tracked calculatedPosition: ToolTipPositions = this.position;\n @tracked toolTipStyles: ToolTipStyles = DEFAULT_TOOLTIP_STYLES;\n @tracked arrowStyles: { left?: string; top?: string } = {};\n @tracked id: string = this.args.id || guidFor({});\n @tracked _attachTo: undefined | HTMLElement | string | null = null;\n\n private timeoutId?: ReturnType<typeof later>;\n\n @action\n updateAttachTo(): void {\n if (!this.args.attachTo && this._attachTo) {\n this.removeAttachToHandlers();\n this._attachTo = null;\n\n return;\n }\n\n if (this.args.attachTo && this.args.attachTo !== this._attachTo) {\n next(() => {\n this.removeAttachToHandlers();\n this._attachTo = this.args.attachTo;\n this.setupAttachToHandlers();\n });\n }\n }\n\n @action\n setupAttachToHandlers(): void {\n if (this._attachTo && this.attachTo) {\n this.attachTo.addEventListener('mousemove', this.showToolTip);\n this.attachTo.addEventListener('focusin', this.onFocus);\n //@ts-expect-error\n this.attachTo.addEventListener('mouseout', this.onMouseOut);\n this.attachTo.addEventListener('focusout', this.onBlur);\n this.positionToolTip();\n }\n }\n\n @action\n removeAttachToHandlers(): void {\n if (this._attachTo && this.attachTo) {\n this.attachTo.removeEventListener('mousemove', this.showToolTip);\n this.attachTo.removeEventListener('focusin', this.onFocus);\n //@ts-expect-error\n this.attachTo.removeEventListener('mouseout', this.onMouseOut);\n this.attachTo.removeEventListener('focusout', this.onBlur);\n }\n }\n\n @action\n clearAnimationTimeout(): void {\n if (this.timeoutId) {\n cancel(this.timeoutId);\n this.timeoutId = undefined;\n }\n }\n\n @action\n visibleDidUpdate(value: boolean): void {\n if (this.visible === false && value === true) {\n requestAnimationFrame(this.testAnchor);\n }\n }\n\n @action\n testAnchor(): void {\n // when the tooltip is visible, this checks if the anchor is still part of document\n // this fixes when the react root is removed from the dom without unmounting\n // https://github.com/elastic/eui/issues/1105\n if (document.body.contains(this._anchor) === false) {\n // the anchor is no longer part of `document`\n this.hideToolTip();\n } else {\n if (this.visible) {\n // if still visible, keep checking\n requestAnimationFrame(this.testAnchor);\n }\n }\n }\n\n @action\n didInsertAnchor(ref: HTMLElement): void {\n this.anchor = ref;\n }\n\n @action\n setPopoverRef(ref: HTMLElement | null): void {\n this.popover = ref;\n\n // if the popover has been unmounted, clear\n // any previous knowledge about its size\n if (ref === null) {\n this.toolTipStyles = DEFAULT_TOOLTIP_STYLES;\n this.arrowStyles = {};\n } else {\n this.positionToolTip();\n }\n }\n\n @action\n showToolTip(): void {\n if (!this.timeoutId && !this.visible) {\n const fn = (): void => {\n this.visible = true;\n };\n\n this.timeoutId = later(\n this,\n () => {\n scheduleOnce('afterRender', this, fn);\n },\n delayToMsMap[this.delay]\n );\n }\n }\n\n @cached\n get attachTo(): Element | null | undefined {\n if (typeof this._attachTo === 'string') {\n return document.querySelector(this._attachTo);\n } else {\n return this._attachTo;\n }\n }\n\n get _anchor(): Element | null {\n return this.attachTo || this.anchor;\n }\n\n @action\n positionToolTip(): void {\n const requestedPosition = this.position;\n\n if (!this._anchor || !this.popover) {\n return;\n }\n\n const { position, left, top, arrow } = findPopoverPosition({\n anchor: this._anchor as HTMLElement,\n popover: this.popover,\n position: requestedPosition,\n offset: 16, // offset popover 16px from the anchor\n arrowConfig: {\n arrowWidth: 12,\n arrowBuffer: 4\n }\n });\n\n const windowWidth =\n document.documentElement.clientWidth || window.innerWidth;\n const useRightValue = windowWidth / 2 < left;\n\n const toolTipStyles: ToolTipStyles = {\n top: `${top}px`,\n left: useRightValue ? 'auto' : `${left}px`,\n right: useRightValue\n ? `${windowWidth - left - this.popover.offsetWidth}px`\n : 'auto'\n };\n\n this.visible = true;\n this.calculatedPosition = position;\n this.toolTipStyles = toolTipStyles;\n\n if (arrow) {\n this.arrowStyles = {\n left: `${arrow.left}px`,\n top: `${arrow?.top}px`\n };\n }\n }\n\n @action\n hideToolTip(): void {\n if (this.args.isShown === true) {\n return;\n }\n\n this.clearAnimationTimeout();\n\n const fn = (): void => {\n if (!this.isDestroying || !this.isDestroyed) {\n this.visible = false;\n }\n };\n\n scheduleOnce('afterRender', this, fn);\n }\n\n @action\n hasFocusMouseMoveListener(): void {\n this.hideToolTip();\n window.removeEventListener('mousemove', this.hasFocusMouseMoveListener);\n }\n\n @action\n onKeyUp(event: KeyboardEvent): void {\n if (event.key === keys.TAB) {\n window.addEventListener('mousemove', this.hasFocusMouseMoveListener);\n }\n }\n\n @action\n onFocus(): void {\n this.hasFocus = true;\n this.showToolTip();\n }\n\n @action\n onBlur(): void {\n this.hasFocus = false;\n this.hideToolTip();\n }\n\n @action\n onMouseOut(event: MouseEvent): void {\n // Prevent mousing over children from hiding the tooltip by testing for whether the mouse has\n // left the anchor for a non-child.\n if (\n this._anchor === event.relatedTarget ||\n (this._anchor != null &&\n !this._anchor.contains(event.relatedTarget as Node))\n ) {\n if (!this.hasFocus) {\n this.hideToolTip();\n }\n }\n\n if (this.args.onMouseOut) {\n this.args.onMouseOut(event);\n }\n }\n\n willDestroy(): void {\n super.willDestroy();\n\n this.clearAnimationTimeout();\n this.removeAttachToHandlers();\n this.anchor = null;\n this.popover = null;\n this._attachTo = null;\n }\n\n <template>\n {{#let\n (has-block \"content\") (has-block \"title\") (has-block \"anchor\")\n as |hasContentBlock hasTitleBlock hasAnchorBlock|\n }}\n {{#if @attachTo}}\n <span\n {{didInsert this.updateAttachTo}}\n {{didUpdate this.updateAttachTo @attachTo}}\n {{didUpdate\n (if (eq @isShown true) this.onFocus this.onBlur)\n @isShown\n }}\n {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}\n ></span>\n {{else}}\n <span\n role=\"tooltip\"\n class={{classNames\n \"euiToolTipAnchor\"\n (if (eq @display \"block\") \"euiToolTipAnchor--displayBlock\")\n @anchorClassName\n }}\n {{didInsert this.didInsertAnchor}}\n {{on \"mouseover\" this.showToolTip}}\n {{on \"focusin\" this.onFocus}}\n {{on \"focusout\" this.onBlur}}\n {{on \"mouseout\" this.onMouseOut}}\n {{didUpdate\n (if (eq @isShown true) this.onFocus this.onBlur)\n @isShown\n }}\n {{didInsert (if (eq @isShown true) this.onFocus this.onBlur)}}\n >\n {{#if hasAnchorBlock}}\n {{yield this.id to=\"anchor\"}}\n {{else}}\n {{yield this.id}}\n {{/if}}\n </span>\n {{/if}}\n {{#if\n (and this.visible (or @title @content hasContentBlock hasTitleBlock))\n }}\n <EuiPortal>\n <EuiToolTipPopover\n class={{classNames\n \"euiToolTip\"\n @className\n componentName=\"EuiToolTip\"\n position=this.calculatedPosition\n }}\n @positionToolTip={{this.positionToolTip}}\n @popoverRef={{this.setPopoverRef}}\n id={{this.id}}\n @hasTitle={{if\n (and (argOrDefault @hasTitle true) (or hasTitleBlock @title))\n true\n }}\n role=\"tooltip\"\n ...attributes\n {{style this.toolTipStyles}}\n >\n <:title>\n {{#if hasTitleBlock}}\n {{yield to=\"title\"}}\n {{else}}\n {{@title}}\n {{/if}}\n </:title>\n <:content>\n <div class=\"euiToolTip__arrow\" {{style this.arrowStyles}}></div>\n <div {{resizeObserver onResize=this.positionToolTip}}>\n {{#if hasContentBlock}}\n {{yield to=\"content\"}}\n {{else}}\n {{@content}}\n {{/if}}\n </div>\n </:content>\n </EuiToolTipPopover>\n </EuiPortal>\n {{/if}}\n {{/let}}\n </template>\n}\n"],"names":["delayToMsMap","regular","long","DEFAULT_TOOLTIP_STYLES","top","left","opacity","visibility","display","EuiToolTip","Component","anchor","popover","g","prototype","argOrDefaultDecorator","i","void 0","tracked","position","args","id","guidFor","timeoutId","updateAttachTo","attachTo","_attachTo","removeAttachToHandlers","next","setupAttachToHandlers","n","action","addEventListener","showToolTip","onFocus","onMouseOut","onBlur","positionToolTip","removeEventListener","clearAnimationTimeout","cancel","undefined","visibleDidUpdate","value","visible","requestAnimationFrame","testAnchor","document","body","contains","_anchor","hideToolTip","didInsertAnchor","ref","setPopoverRef","toolTipStyles","arrowStyles","fn","later","scheduleOnce","delay","querySelector","cached","requestedPosition","arrow","findPopoverPosition","offset","arrowConfig","arrowWidth","arrowBuffer","windowWidth","documentElement","clientWidth","window","innerWidth","useRightValue","right","offsetWidth","calculatedPosition","isShown","isDestroying","isDestroyed","hasFocusMouseMoveListener","onKeyUp","event","key","keys","TAB","hasFocus","relatedTarget","willDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","didInsert","didUpdate","eq","classNames","on","and","or","EuiPortal","EuiToolTipPopover","argOrDefault","style","resizeObserver"],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ class EuiWrappingPopover extends Component {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
this.args.onWrappingDestroy?.();
|
|
37
|
+
this.portal = null;
|
|
38
|
+
this.anchor = null;
|
|
37
39
|
}
|
|
38
40
|
static {
|
|
39
41
|
setComponentTemplate(precompileTemplate("\n <EuiPortal @portalRef={{this.setPortalRef}} @insert={{this.insert}}>\n <EuiPopover @closePopover={{@closePopover}} @isOpen={{@isOpen}} @anchorClassName={{@anchorClassName}} @portalRef={{@popoverPortalRef}} @anchorPosition={{@anchorPosition}} @attachToAnchor={{@attachToAnchor}} @container={{@container}} @display={{@display}} @hasArrow={{@hasArrow}} @initialFocus={{@initialFocus}} @ownFocus={{@ownFocus}} @panelClassName={{@panelClassName}} @panelPaddingSize={{@panelPaddingSize}} @panelStyle={{@panelStyle}} @panelRef={{@panelRef}} @popoverRef={{@popoverRef}} ...attributes>\n <:button>\n <div {{this.setAnchorRef}} class=\"euiWrappingPopover__anchor\" />\n </:button>\n\n <:content>\n {{yield}}\n </:content>\n </EuiPopover>\n </EuiPortal>\n ", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-wrapping-popover.js","sources":["../../src/components/eui-wrapping-popover.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nimport { modifier } from 'ember-modifier';\n\nimport EuiPopover from './eui-popover.gts';\nimport EuiPortal from './eui-portal.gts';\n\nimport type { EuiPopoverSignature } from './eui-popover.gts';\n\nexport interface EuiWrappingPopoverSignature {\n Element: EuiPopoverSignature['Element'];\n Args: EuiPopoverSignature['Args'] & {\n button?: HTMLElement;\n onWrappingDestroy?: () => void;\n portalRef?: (ref: HTMLElement) => void;\n popoverPortalRef?: (ref: HTMLElement) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiWrappingPopover extends Component<EuiWrappingPopoverSignature> {\n private portal: HTMLElement | null = null;\n private anchor: HTMLElement | null = null;\n\n setAnchorRef = modifier((element: HTMLElement) => {\n this.anchor = element;\n this.anchor.insertAdjacentElement('beforebegin', this.args.button!);\n });\n\n setPortalRef = (element: HTMLElement) => {\n this.portal = element;\n this.args.portalRef?.(element);\n };\n\n get insert(): { sibling: HTMLElement; position: 'after' } | undefined {\n if (this.args.button) {\n return {\n sibling: this.args.button,\n position: 'after'\n };\n }\n\n return;\n }\n\n willDestroy() {\n super.willDestroy();\n\n if (this.args.button && this.args.button.parentNode) {\n if (this.portal) {\n this.portal.insertAdjacentElement('beforebegin', this.args.button);\n }\n }\n this.args.onWrappingDestroy?.();\n }\n\n <template>\n <EuiPortal @portalRef={{this.setPortalRef}} @insert={{this.insert}}>\n <EuiPopover\n @closePopover={{@closePopover}}\n @isOpen={{@isOpen}}\n @anchorClassName={{@anchorClassName}}\n @portalRef={{@popoverPortalRef}}\n @anchorPosition={{@anchorPosition}}\n @attachToAnchor={{@attachToAnchor}}\n @container={{@container}}\n @display={{@display}}\n @hasArrow={{@hasArrow}}\n @initialFocus={{@initialFocus}}\n @ownFocus={{@ownFocus}}\n @panelClassName={{@panelClassName}}\n @panelPaddingSize={{@panelPaddingSize}}\n @panelStyle={{@panelStyle}}\n @panelRef={{@panelRef}}\n @popoverRef={{@popoverRef}}\n ...attributes\n >\n <:button>\n <div {{this.setAnchorRef}} class=\"euiWrappingPopover__anchor\" />\n </:button>\n\n <:content>\n {{yield}}\n </:content>\n </EuiPopover>\n </EuiPortal>\n </template>\n}\n"],"names":["EuiWrappingPopover","Component","portal","anchor","setAnchorRef","modifier","element","insertAdjacentElement","args","button","setPortalRef","portalRef","insert","sibling","position","willDestroy","parentNode","onWrappingDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","EuiPortal","EuiPopover"],"mappings":";;;;;;;;AAuBe,MAAMA,2BAA2BC,SAAU,CAAA;AAChDC,EAAAA,MAAQ,GAAqB,IAAK;AAClCC,EAAAA,MAAQ,GAAqB,IAAK;AAE1CC,EAAAA,YAAe,GAAAC,QAAA,CAAUC,OAAS,IAAA;IAChC,IAAI,CAACH,MAAM,GAAGG,OAAA;AACd,IAAA,IAAI,CAACH,MAAM,CAACI,qBAAqB,CAAC,eAAe,IAAI,CAACC,IAAI,CAACC,MAAM,CAAA;AACnE,GAAG,CAAA;EAEHC,YAAA,GAAgBJ,OAAS,IAAA;IACvB,IAAI,CAACJ,MAAM,GAAGI,OAAA;AACd,IAAA,IAAI,CAACE,IAAI,CAACG,SAAS,GAAGL,OAAA,CAAA;GACtB;EAEF,IAAIM,MAAAA,GAAkE;AACpE,IAAA,IAAI,IAAI,CAACJ,IAAI,CAACC,MAAM,EAAE;MACpB,OAAO;AACLI,QAAAA,OAAA,EAAS,IAAI,CAACL,IAAI,CAACC,MAAM;AACzBK,QAAAA,QAAU,EAAA;OACZ;AACF;AAEA,IAAA;AACF;AAEAC,EAAAA,WAAcA,GAAA;IACZ,KAAK,CAACA,WAAA,EAAA;AAEN,IAAA,IAAI,IAAI,CAACP,IAAI,CAACC,MAAM,IAAI,IAAI,CAACD,IAAI,CAACC,MAAM,CAACO,UAAU,EAAE;MACnD,IAAI,IAAI,CAACd,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACK,qBAAqB,CAAC,eAAe,IAAI,CAACC,IAAI,CAACC,MAAM,CAAA;AACnE;AACF;
|
|
1
|
+
{"version":3,"file":"eui-wrapping-popover.js","sources":["../../src/components/eui-wrapping-popover.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nimport { modifier } from 'ember-modifier';\n\nimport EuiPopover from './eui-popover.gts';\nimport EuiPortal from './eui-portal.gts';\n\nimport type { EuiPopoverSignature } from './eui-popover.gts';\n\nexport interface EuiWrappingPopoverSignature {\n Element: EuiPopoverSignature['Element'];\n Args: EuiPopoverSignature['Args'] & {\n button?: HTMLElement;\n onWrappingDestroy?: () => void;\n portalRef?: (ref: HTMLElement) => void;\n popoverPortalRef?: (ref: HTMLElement) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport default class EuiWrappingPopover extends Component<EuiWrappingPopoverSignature> {\n private portal: HTMLElement | null = null;\n private anchor: HTMLElement | null = null;\n\n setAnchorRef = modifier((element: HTMLElement) => {\n this.anchor = element;\n this.anchor.insertAdjacentElement('beforebegin', this.args.button!);\n });\n\n setPortalRef = (element: HTMLElement) => {\n this.portal = element;\n this.args.portalRef?.(element);\n };\n\n get insert(): { sibling: HTMLElement; position: 'after' } | undefined {\n if (this.args.button) {\n return {\n sibling: this.args.button,\n position: 'after'\n };\n }\n\n return;\n }\n\n willDestroy() {\n super.willDestroy();\n\n if (this.args.button && this.args.button.parentNode) {\n if (this.portal) {\n this.portal.insertAdjacentElement('beforebegin', this.args.button);\n }\n }\n\n this.args.onWrappingDestroy?.();\n this.portal = null;\n this.anchor = null;\n }\n\n <template>\n <EuiPortal @portalRef={{this.setPortalRef}} @insert={{this.insert}}>\n <EuiPopover\n @closePopover={{@closePopover}}\n @isOpen={{@isOpen}}\n @anchorClassName={{@anchorClassName}}\n @portalRef={{@popoverPortalRef}}\n @anchorPosition={{@anchorPosition}}\n @attachToAnchor={{@attachToAnchor}}\n @container={{@container}}\n @display={{@display}}\n @hasArrow={{@hasArrow}}\n @initialFocus={{@initialFocus}}\n @ownFocus={{@ownFocus}}\n @panelClassName={{@panelClassName}}\n @panelPaddingSize={{@panelPaddingSize}}\n @panelStyle={{@panelStyle}}\n @panelRef={{@panelRef}}\n @popoverRef={{@popoverRef}}\n ...attributes\n >\n <:button>\n <div {{this.setAnchorRef}} class=\"euiWrappingPopover__anchor\" />\n </:button>\n\n <:content>\n {{yield}}\n </:content>\n </EuiPopover>\n </EuiPortal>\n </template>\n}\n"],"names":["EuiWrappingPopover","Component","portal","anchor","setAnchorRef","modifier","element","insertAdjacentElement","args","button","setPortalRef","portalRef","insert","sibling","position","willDestroy","parentNode","onWrappingDestroy","setComponentTemplate","precompileTemplate","strictMode","scope","EuiPortal","EuiPopover"],"mappings":";;;;;;;;AAuBe,MAAMA,2BAA2BC,SAAU,CAAA;AAChDC,EAAAA,MAAQ,GAAqB,IAAK;AAClCC,EAAAA,MAAQ,GAAqB,IAAK;AAE1CC,EAAAA,YAAe,GAAAC,QAAA,CAAUC,OAAS,IAAA;IAChC,IAAI,CAACH,MAAM,GAAGG,OAAA;AACd,IAAA,IAAI,CAACH,MAAM,CAACI,qBAAqB,CAAC,eAAe,IAAI,CAACC,IAAI,CAACC,MAAM,CAAA;AACnE,GAAG,CAAA;EAEHC,YAAA,GAAgBJ,OAAS,IAAA;IACvB,IAAI,CAACJ,MAAM,GAAGI,OAAA;AACd,IAAA,IAAI,CAACE,IAAI,CAACG,SAAS,GAAGL,OAAA,CAAA;GACtB;EAEF,IAAIM,MAAAA,GAAkE;AACpE,IAAA,IAAI,IAAI,CAACJ,IAAI,CAACC,MAAM,EAAE;MACpB,OAAO;AACLI,QAAAA,OAAA,EAAS,IAAI,CAACL,IAAI,CAACC,MAAM;AACzBK,QAAAA,QAAU,EAAA;OACZ;AACF;AAEA,IAAA;AACF;AAEAC,EAAAA,WAAcA,GAAA;IACZ,KAAK,CAACA,WAAA,EAAA;AAEN,IAAA,IAAI,IAAI,CAACP,IAAI,CAACC,MAAM,IAAI,IAAI,CAACD,IAAI,CAACC,MAAM,CAACO,UAAU,EAAE;MACnD,IAAI,IAAI,CAACd,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACK,qBAAqB,CAAC,eAAe,IAAI,CAACC,IAAI,CAACC,MAAM,CAAA;AACnE;AACF;AAEA,IAAA,IAAI,CAACD,IAAI,CAACS,iBAAiB,IAAA;IAC3B,IAAI,CAACf,MAAM,GAAG,IAAA;IACd,IAAI,CAACC,MAAM,GAAG,IAAA;AAChB;AAEA,EAAA;IAAAe,oBAAA,CAAAC,kBAAA,CA8BA,6yBAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,SAAA;AAAAC,oBAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -7,9 +7,9 @@ import { n } from 'decorator-transforms/runtime';
|
|
|
7
7
|
class OutsideClickDetector extends Modifier {
|
|
8
8
|
id;
|
|
9
9
|
capturedDownIds = [];
|
|
10
|
-
element;
|
|
11
|
-
named;
|
|
12
|
-
positional;
|
|
10
|
+
element = null;
|
|
11
|
+
named = null;
|
|
12
|
+
positional = null;
|
|
13
13
|
onClickOutside(e) {
|
|
14
14
|
const {
|
|
15
15
|
isDisabled,
|
|
@@ -47,6 +47,9 @@ class OutsideClickDetector extends Modifier {
|
|
|
47
47
|
document.removeEventListener('mouseup', this.onClickOutside);
|
|
48
48
|
document.removeEventListener('touchend', this.onClickOutside);
|
|
49
49
|
this.removeElementEvents();
|
|
50
|
+
this.element = null;
|
|
51
|
+
this.named = null;
|
|
52
|
+
this.positional = null;
|
|
50
53
|
}
|
|
51
54
|
addElementEvents() {
|
|
52
55
|
if (this.element) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outside-click-detector.js","sources":["../../src/modifiers/outside-click-detector.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\n\nimport Modifier from 'ember-modifier';\n\ninterface Named {\n onOutsideClick: (event: Event) => void;\n isDisabled?: boolean;\n onMouseDown?: (event: MouseEvent | TouchEvent) => void;\n onMouseUp?: (event: MouseEvent | TouchEvent) => void;\n onTouchStart?: (event: MouseEvent | TouchEvent) => void;\n onTouchEnd?: (event: MouseEvent | TouchEvent) => void;\n}\n\ntype Positional = [];\n\ninterface OutsideClickDetectorModifierArgs {\n Element: Element;\n Args: {\n Positional: Positional;\n Named: Named;\n };\n}\n\nexport interface EuiEvent extends Event {\n euiGeneratedBy: string[];\n}\n\nexport default class OutsideClickDetector extends Modifier<OutsideClickDetectorModifierArgs> {\n id!: string;\n capturedDownIds: string[] = [];\n\n element
|
|
1
|
+
{"version":3,"file":"outside-click-detector.js","sources":["../../src/modifiers/outside-click-detector.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\n\nimport Modifier from 'ember-modifier';\n\ninterface Named {\n onOutsideClick: (event: Event) => void;\n isDisabled?: boolean;\n onMouseDown?: (event: MouseEvent | TouchEvent) => void;\n onMouseUp?: (event: MouseEvent | TouchEvent) => void;\n onTouchStart?: (event: MouseEvent | TouchEvent) => void;\n onTouchEnd?: (event: MouseEvent | TouchEvent) => void;\n}\n\ntype Positional = [];\n\ninterface OutsideClickDetectorModifierArgs {\n Element: Element;\n Args: {\n Positional: Positional;\n Named: Named;\n };\n}\n\nexport interface EuiEvent extends Event {\n euiGeneratedBy: string[];\n}\n\nexport default class OutsideClickDetector extends Modifier<OutsideClickDetectorModifierArgs> {\n id!: string;\n capturedDownIds: string[] = [];\n\n element: HTMLElement | null = null;\n named: Named | null = null;\n positional: Positional | null = null;\n\n @action\n onClickOutside(e: Event): void {\n const { isDisabled, onOutsideClick } = this.named!;\n\n if (isDisabled) {\n this.capturedDownIds = [];\n\n return;\n }\n\n const event = e as unknown as EuiEvent;\n\n if (\n (event.euiGeneratedBy && event.euiGeneratedBy.includes(this.id)) ||\n this.capturedDownIds.includes(this.id)\n ) {\n this.capturedDownIds = [];\n\n return;\n }\n\n this.capturedDownIds = [];\n\n return onOutsideClick(event);\n }\n\n modify(element: HTMLElement, positional: Positional, named: Named): void {\n this.element = element;\n this.named = named;\n this.positional = positional;\n this._setup();\n registerDestructor(this, () => this._teardown());\n }\n\n _setup(): void {\n this.id = guidFor({});\n document.addEventListener('mouseup', this.onClickOutside);\n document.addEventListener('touchend', this.onClickOutside);\n this.addElementEvents();\n }\n\n _teardown(): void {\n document.removeEventListener('mouseup', this.onClickOutside);\n document.removeEventListener('touchend', this.onClickOutside);\n this.removeElementEvents();\n this.element = null;\n this.named = null;\n this.positional = null;\n }\n\n addElementEvents(): void {\n if (this.element) {\n this.element.addEventListener('mousedown', this.onChildMouseDown);\n this.element.addEventListener('touchstart', this.onChildMouseDown);\n this.element.addEventListener('mouseup', this.onChildMouseUp);\n this.element.addEventListener('touchend', this.onChildMouseUp);\n }\n }\n\n removeElementEvents(): void {\n if (this.element) {\n this.element.removeEventListener('mousedown', this.onChildMouseDown);\n this.element.removeEventListener('touchstart', this.onChildMouseDown);\n this.element.removeEventListener('mouseup', this.onChildMouseUp);\n this.element.removeEventListener('touchend', this.onChildMouseUp);\n }\n }\n\n @action\n onChildClick(\n event: MouseEvent | TouchEvent,\n cb: (event: MouseEvent | TouchEvent) => void\n ): void {\n // to support nested click detectors, build an array\n // of detector ids that have been encountered;\n\n if (event.hasOwnProperty('euiGeneratedBy')) {\n (event as unknown as EuiEvent).euiGeneratedBy.push(this.id);\n } else {\n (event as unknown as EuiEvent).euiGeneratedBy = [this.id];\n }\n\n if (cb) cb(event);\n }\n\n @action\n onChildMouseDown(event: MouseEvent | TouchEvent): any {\n this.onChildClick(event, (e) => {\n const nativeEvent = e as unknown as EuiEvent;\n\n this.capturedDownIds = nativeEvent.euiGeneratedBy;\n this.named?.onMouseDown?.(e);\n this.named?.onTouchStart?.(e);\n });\n }\n\n @action\n onChildMouseUp(event: TouchEvent | MouseEvent): any {\n this.onChildClick(event, (e) => {\n this.named?.onMouseUp?.(e);\n this.named?.onTouchEnd?.(e);\n });\n }\n}\n"],"names":["OutsideClickDetector","Modifier","id","capturedDownIds","element","named","positional","onClickOutside","e","isDisabled","onOutsideClick","event","euiGeneratedBy","includes","n","prototype","action","modify","_setup","registerDestructor","_teardown","guidFor","document","addEventListener","addElementEvents","removeEventListener","removeElementEvents","onChildMouseDown","onChildMouseUp","onChildClick","cb","hasOwnProperty","push","nativeEvent","onMouseDown","onTouchStart","onMouseUp","onTouchEnd"],"mappings":"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"}
|
|
@@ -41,9 +41,9 @@ class ResizeObserver extends Modifier {
|
|
|
41
41
|
height = 0;
|
|
42
42
|
width = 0;
|
|
43
43
|
observer = null;
|
|
44
|
-
element;
|
|
45
|
-
named;
|
|
46
|
-
positional;
|
|
44
|
+
element = null;
|
|
45
|
+
named = null;
|
|
46
|
+
positional = null;
|
|
47
47
|
setSize({
|
|
48
48
|
width,
|
|
49
49
|
height
|
|
@@ -84,6 +84,9 @@ class ResizeObserver extends Modifier {
|
|
|
84
84
|
height: boundingRect.height
|
|
85
85
|
});
|
|
86
86
|
this.observer = makeResizeObserver(element, () => {
|
|
87
|
+
if (!element) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
87
90
|
const boundingRect = element.getBoundingClientRect();
|
|
88
91
|
setSize({
|
|
89
92
|
width: boundingRect.width,
|
|
@@ -99,6 +102,10 @@ class ResizeObserver extends Modifier {
|
|
|
99
102
|
}
|
|
100
103
|
_teardown() {
|
|
101
104
|
this.observer?.disconnect();
|
|
105
|
+
this.observer = null;
|
|
106
|
+
this.element = null;
|
|
107
|
+
this.named = null;
|
|
108
|
+
this.positional = null;
|
|
102
109
|
}
|
|
103
110
|
}
|
|
104
111
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize-observer.js","sources":["../../src/modifiers/resize-observer.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport Modifier from 'ember-modifier';\n\n// IE11 and Safari don't support the `ResizeObserver` API at the time of writing\nconst hasResizeObserver =\n typeof window !== 'undefined' &&\n typeof (window as any).ResizeObserver !== 'undefined';\n\nexport interface Observer {\n disconnect: () => void;\n observe: (element: Element, options?: { [key: string]: any }) => void;\n}\n\nconst mutationObserverOptions = {\n // [MutationObserverInit](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserverInit)\n attributes: true, // Account for style changes from `className` or `style`\n characterData: true, // Account for text content size differences\n childList: true, // Account for adding/removing child nodes\n subtree: true // Account for deep child nodes\n};\n\ninterface ResizeObserverSignature {\n Element: Element;\n Args: {\n Positional: [
|
|
1
|
+
{"version":3,"file":"resize-observer.js","sources":["../../src/modifiers/resize-observer.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport Modifier from 'ember-modifier';\n\n// IE11 and Safari don't support the `ResizeObserver` API at the time of writing\nconst hasResizeObserver =\n typeof window !== 'undefined' &&\n typeof (window as any).ResizeObserver !== 'undefined';\n\nexport interface Observer {\n disconnect: () => void;\n observe: (element: Element, options?: { [key: string]: any }) => void;\n}\n\nconst mutationObserverOptions = {\n // [MutationObserverInit](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserverInit)\n attributes: true, // Account for style changes from `className` or `style`\n characterData: true, // Account for text content size differences\n childList: true, // Account for adding/removing child nodes\n subtree: true // Account for deep child nodes\n};\n\ninterface ResizeObserverSignature {\n Element: Element;\n Args: {\n Positional: ['width' | 'height'] | [];\n Named: {\n onResize: (dimensions: { height: number; width: number }) => void;\n };\n };\n}\n\nconst makeCompatibleObserver = (node: Element, callback: () => void) => {\n const observer = new MutationObserver(callback);\n //eslint-disable-next-line\n observer.observe(node, mutationObserverOptions);\n\n window.addEventListener('resize', callback);\n\n const _disconnect = observer.disconnect.bind(observer);\n\n observer.disconnect = () => {\n _disconnect();\n window.removeEventListener('resize', callback);\n };\n\n return observer;\n};\n\nconst makeResizeObserver = (node: Element, callback: () => void) => {\n let observer: Observer | undefined;\n\n if (hasResizeObserver) {\n observer = new (window as any).ResizeObserver(callback);\n observer!.observe(node);\n } else {\n observer = makeCompatibleObserver(node, callback);\n requestAnimationFrame(callback); // Mimic ResizeObserver behavior of triggering a resize event on init\n }\n\n return observer;\n};\n\nexport default class ResizeObserver extends Modifier<ResizeObserverSignature> {\n height: number = 0;\n width: number = 0;\n observer: Observer | null = null;\n\n element: Element | null = null;\n named: ResizeObserverSignature['Args']['Named'] | null = null;\n positional: ResizeObserverSignature['Args']['Positional'] | null = null;\n\n @action\n setSize({ width, height }: { width: number; height: number }) {\n let [dimension] = this.positional!;\n const doesWidthMatter = dimension !== 'height';\n const doesHeightMatter = dimension !== 'width';\n\n if (\n (doesWidthMatter && width !== this.width) ||\n (doesHeightMatter && height !== this.height)\n ) {\n this.width = width;\n this.height = height;\n this.named?.onResize({ width, height });\n }\n }\n\n modify(\n element: Element,\n positional: ResizeObserverSignature['Args']['Positional'] = [],\n named: ResizeObserverSignature['Args']['Named']\n ) {\n this.element = element;\n this.named = named;\n this.positional = positional;\n this._setup();\n registerDestructor(this, () => this._teardown());\n }\n\n _setup() {\n let { setSize, element } = this;\n\n if (element != null) {\n // ResizeObserver's first call to the observation callback is scheduled in the future\n // so find the element's initial dimensions now\n const boundingRect = element.getBoundingClientRect();\n\n setSize({\n width: boundingRect.width,\n height: boundingRect.height\n });\n\n this.observer = makeResizeObserver(element, () => {\n if (!element) {\n return;\n }\n\n const boundingRect = element.getBoundingClientRect();\n\n setSize({\n width: boundingRect.width,\n height: boundingRect.height\n });\n })!;\n } else {\n setSize({\n width: 0,\n height: 0\n });\n }\n }\n\n _teardown() {\n this.observer?.disconnect();\n this.observer = null;\n this.element = null;\n this.named = null;\n this.positional = null;\n }\n}\n"],"names":["hasResizeObserver","window","ResizeObserver","mutationObserverOptions","attributes","characterData","childList","subtree","makeCompatibleObserver","node","callback","observer","MutationObserver","observe","addEventListener","_disconnect","disconnect","bind","removeEventListener","makeResizeObserver","requestAnimationFrame","Modifier","height","width","element","named","positional","setSize","dimension","doesWidthMatter","doesHeightMatter","onResize","n","prototype","action","modify","_setup","registerDestructor","_teardown","boundingRect","getBoundingClientRect"],"mappings":"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"}
|