@ember-eui/core 12.0.12 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"eui-global-toast-list.d.ts","sourceRoot":"","sources":["../../src/components/eui-global-toast-list.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAQ3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC,OAAO,KAAK,MAAM,mBAAmB,CAAC;AAGtC,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAElF,KAAK,YAAY,GAAG,MAAM,OAAO,WAAW,CAAC;AAE7C,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxE,eAAe,EAAE,MAAM,CAAC;IAOxB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAIF,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,+BAA+B,CAAC;IACvE,UAAU,EAAE,iBAAiB,CAAC;IAE/C,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,iBAAiB,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAM;IAErD,mBAAmB,UAAS;IAC5B,kBAAkB,UAAQ;IAC1B,iBAAiB,UAAS;IAI1B,yBAAyB,SAAK;IAC9B,4BAA4B,SAAK;IAEjC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC1B,qBAAqB,EAAE;QAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;KAC5B,CAAM;IAEP,sBAAsB,IAAI,IAAI;IAoC9B,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAahD,YAAY,IAAI,IAAI;IAiBpB,YAAY,IAAI,IAAI;IAapB,QAAQ,IAAI,IAAI;IAQhB,6BAA6B,IAAI,IAAI;IASrC,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAW3D,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;gBA+BlC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB;IAMnD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjC,WAAW,IAAI,IAAI;CAuDpB"}
1
+ {"version":3,"file":"eui-global-toast-list.d.ts","sourceRoot":"","sources":["../../src/components/eui-global-toast-list.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAQ3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC,OAAO,KAAK,MAAM,mBAAmB,CAAC;AAGtC,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAElF,KAAK,YAAY,GAAG,MAAM,OAAO,WAAW,CAAC;AAE7C,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxE,eAAe,EAAE,MAAM,CAAC;IAOxB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAIF,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,+BAA+B,CAAC;IACvE,UAAU,EAAE,iBAAiB,CAAC;IAE/C,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,iBAAiB,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAM;IAErD,mBAAmB,UAAS;IAC5B,kBAAkB,UAAQ;IAC1B,iBAAiB,UAAS;IAI1B,yBAAyB,SAAK;IAC9B,4BAA4B,SAAK;IAEjC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC1B,qBAAqB,EAAE;QAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;KAC5B,CAAM;IAEP,sBAAsB,IAAI,IAAI;IAoC9B,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAahD,YAAY,IAAI,IAAI;IAiBpB,YAAY,IAAI,IAAI;IAapB,QAAQ,IAAI,IAAI;IAQhB,6BAA6B,IAAI,IAAI;IASrC,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAW3D,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;gBA+BlC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB;IAMnD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjC,WAAW,IAAI,IAAI;CAyDpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"eui-tabbed-content.d.ts","sourceRoot":"","sources":["../../src/components/eui-tabbed-content.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAM3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAStC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG;IAC9C;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9C;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD;;OAEG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAC/B,kBAAkB,EAAE,CAAC,mBAAmB,CAAC,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS,CAAC,yBAAyB,CAAC;IAChF,aAAa,qBAAC;IACd,OAAO,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,IAAI,SAAS,2BAEZ;gBAEW,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB;IAYpD,IAAI,WAAW,oCAOd;IAED,UAAU,GAAI,SAAS,OAAO,UAK5B;IAEF,WAAW,IAAI,IAAI;IASnB,WAAW,GAAI,WAAW,UAAU,UAQlC;IAEF,UAAU,GAAI,aAAa,mBAAmB,UAiB5C;IAEF,QAAQ,aAQN;IAEF,eAAe,aAYb;CAqEH"}
1
+ {"version":3,"file":"eui-tabbed-content.d.ts","sourceRoot":"","sources":["../../src/components/eui-tabbed-content.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAM3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAStC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG;IAC9C;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9C;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD;;OAEG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAC/B,kBAAkB,EAAE,CAAC,mBAAmB,CAAC,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS,CAAC,yBAAyB,CAAC;IAChF,aAAa,qBAAC;IACd,OAAO,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,IAAI,SAAS,2BAEZ;gBAEW,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB;IAYpD,IAAI,WAAW,oCAOd;IAED,UAAU,GAAI,SAAS,OAAO,UAK5B;IAEF,WAAW,IAAI,IAAI;IAWnB,WAAW,GAAI,WAAW,UAAU,UAQlC;IAEF,UAAU,GAAI,aAAa,mBAAmB,UAiB5C;IAEF,QAAQ,aAQN;IAEF,eAAe,aAYb;CAqEH"}
@@ -177,6 +177,7 @@ class EuiGlobalToastList extends Component {
177
177
  timer?.clear();
178
178
  }
179
179
  }
180
+ this.listElement = null;
180
181
  }
181
182
  static {
182
183
  setComponentTemplate(precompileTemplate("\n <div aria-live=\"polite\" role=\"region\" class={{classNames componentName=\"EuiGlobalToastList\" side=(argOrDefault @side \"right\")}} style={{unless this.euiToaster.toasts.length \"padding:0px;\"}} {{didInsert this.didInsert}} {{on \"scroll\" this.onScroll}} {{on \"mouseenter\" this.onMouseEnter}} {{on \"mouseleave\" this.onMouseLeave}} ...attributes>\n {{#each this.euiToaster.toasts as |toast|}}\n <EuiToast class={{classNames \"euiGlobalToastListItem\" (if (get this.toastIdToDismissedMap toast.id) \"euiGlobalToastListItem-isDismissed\")}} @title={{toast.title}} @useMarkdownFormat={{toast.useMarkdownFormat}} @body={{toast.body}} @color={{toast.color}} @iconType={{toast.iconType}} @onClose={{queue (fn this.dismissToast toast) (optional toast.onClose)}} {{didInsert (fn this.didInsertToast toast)}} {{on \"focus\" this.onMouseEnter}} {{on \"blur\" this.onMouseLeave}} />\n {{/each}}\n </div>\n ", {
@@ -1 +1 @@
1
- {"version":3,"file":"eui-global-toast-list.js","sources":["../../src/components/eui-global-toast-list.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { get } from '@ember/helper';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { inject as service } from '@ember/service';\nimport type Owner from '@ember/owner';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport queue from '@nullvoxpopuli/ember-composable-helpers/helpers/queue';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport Timer from '../utils/timer.ts';\nimport EuiToast from './eui-toast.gts';\n\nimport type EuiToasterService from '../services/eui-toaster';\nimport type {\n EuiToastProps,\n EuiToastPropsWithId\n} from '../services/eui-toaster';\nimport type { sideMapping } from '../utils/css-mappings/eui-global-toast-list.ts';\n\ntype EuiToastSide = keyof typeof sideMapping;\n\ntype GlobalToastListArgs = {\n dismissToast?: (this: EuiGlobalToastList, toast: EuiToastProps) => void;\n toastLifeTimeMs: number;\n\n /*\n Determines which side of the browser window the toasts should appear\n Default: 'right'\n\n */\n side?: EuiToastSide;\n};\n\nconst TOAST_FADE_OUT_MS = 250;\n\nexport interface EuiGlobalToastListItemSignature {\n Element: HTMLDivElement;\n Args: GlobalToastListArgs;\n}\n\nexport default class EuiGlobalToastList extends Component<EuiGlobalToastListItemSignature> {\n @service declare euiToaster: EuiToasterService;\n\n dismissTimeoutIds: number[] = [];\n toastIdToTimerMap: { [toastId: string]: Timer } = {};\n\n isScrollingToBottom = false;\n isScrolledToBottom = true;\n isUserInteracting = false;\n\n // See [Return Value](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame#Return_value)\n // for information on initial value of 0\n isScrollingAnimationFrame = 0;\n startScrollingAnimationFrame = 0;\n\n listElement: Element | null = null;\n @tracked toastIdToDismissedMap: {\n [toastId: string]: boolean;\n } = {};\n\n startScrollingToBottom(): void {\n this.isScrollingToBottom = true;\n\n const scrollToBottom = () => {\n // Although we cancel the requestAnimationFrame in componentWillUnmount,\n // it's possible for this.listElement to become null in the meantime\n if (!this.listElement) {\n return;\n }\n\n const position = this.listElement.scrollTop;\n const destination =\n this.listElement.scrollHeight - this.listElement.clientHeight;\n const distanceToDestination = destination - position;\n\n if (distanceToDestination < 5) {\n this.listElement.scrollTop = destination;\n this.isScrollingToBottom = false;\n this.isScrolledToBottom = true;\n\n return;\n }\n\n this.listElement.scrollTop = position + distanceToDestination * 0.25;\n\n if (this.isScrollingToBottom) {\n this.isScrollingAnimationFrame =\n window.requestAnimationFrame(scrollToBottom);\n }\n };\n\n this.startScrollingAnimationFrame =\n window.requestAnimationFrame(scrollToBottom);\n }\n\n @action\n didInsertToast(toast: EuiToastPropsWithId): void {\n this.scheduleToastForDismissal(toast);\n\n if (!this.isUserInteracting) {\n // If the user has scrolled up the toast list then we don't want to annoy them by scrolling\n // all the way back to the bottom.\n if (this.isScrolledToBottom) {\n this.startScrollingToBottom();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n // Stop scrolling to bottom if we're in mid-scroll, because the user wants to interact with\n // the list.\n this.isScrollingToBottom = false;\n this.isUserInteracting = true;\n\n // Don't let toasts dismiss themselves while the user is interacting with them.\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.pause();\n }\n }\n }\n\n @action\n onMouseLeave(): void {\n this.isUserInteracting = false;\n\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.resume();\n }\n }\n }\n\n @action\n onScroll(): void {\n if (this.listElement) {\n this.isScrolledToBottom =\n this.listElement.scrollHeight - this.listElement.scrollTop ===\n this.listElement.clientHeight;\n }\n }\n\n scheduleAllToastsForDismissal(): void {\n this.euiToaster.toasts.forEach((toast) => {\n if (!this.toastIdToTimerMap[toast.id]) {\n this.scheduleToastForDismissal(toast);\n }\n });\n }\n\n @action\n scheduleToastForDismissal(toast: EuiToastPropsWithId): void {\n // Start fading the toast out once its lifetime elapses.\n this.toastIdToTimerMap[toast.id] = new Timer(\n this.dismissToast.bind(this, toast),\n toast.toastLifeTimeMs != null\n ? toast.toastLifeTimeMs\n : this.args.toastLifeTimeMs\n );\n }\n\n @action\n dismissToast(toast: EuiToastPropsWithId): void {\n // Remove the toast after it's done fading out.\n this.dismissTimeoutIds.push(\n window.setTimeout(() => {\n // Because this is wrapped in a setTimeout, and because React does not guarantee when\n // state updates happen, it is possible to double-dismiss a toast\n // including by double-clicking the \"x\" button on the toast\n // so, first check to make sure we haven't already dismissed this toast\n if (this.toastIdToTimerMap.hasOwnProperty(toast.id)) {\n if (this.args.dismissToast) {\n this.args.dismissToast.apply(this, [toast]);\n }\n\n this.toastIdToTimerMap[toast.id]!.clear();\n delete this.toastIdToTimerMap[toast.id];\n\n delete this.toastIdToDismissedMap[toast.id];\n this.toastIdToDismissedMap = {\n ...this.toastIdToDismissedMap\n };\n this.euiToaster.remove(toast);\n }\n }, TOAST_FADE_OUT_MS)\n );\n\n this.toastIdToDismissedMap = {\n ...this.toastIdToDismissedMap,\n [toast.id]: true\n };\n }\n\n constructor(owner: Owner, args: GlobalToastListArgs) {\n super(owner, args);\n this.scheduleAllToastsForDismissal();\n }\n\n @action\n didInsert(element: Element): void {\n this.listElement = element;\n }\n\n willDestroy(): void {\n super.willDestroy();\n\n if (this.isScrollingAnimationFrame !== 0) {\n window.cancelAnimationFrame(this.isScrollingAnimationFrame);\n }\n\n if (this.startScrollingAnimationFrame !== 0) {\n window.cancelAnimationFrame(this.startScrollingAnimationFrame);\n }\n\n this.dismissTimeoutIds.forEach(clearTimeout);\n\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.clear();\n }\n }\n }\n\n <template>\n <div\n aria-live=\"polite\"\n role=\"region\"\n class={{classNames\n componentName=\"EuiGlobalToastList\"\n side=(argOrDefault @side \"right\")\n }}\n style={{unless this.euiToaster.toasts.length \"padding:0px;\"}}\n {{didInsert this.didInsert}}\n {{on \"scroll\" this.onScroll}}\n {{on \"mouseenter\" this.onMouseEnter}}\n {{on \"mouseleave\" this.onMouseLeave}}\n ...attributes\n >\n {{#each this.euiToaster.toasts as |toast|}}\n <EuiToast\n class={{classNames\n \"euiGlobalToastListItem\"\n (if\n (get this.toastIdToDismissedMap toast.id)\n \"euiGlobalToastListItem-isDismissed\"\n )\n }}\n @title={{toast.title}}\n @useMarkdownFormat={{toast.useMarkdownFormat}}\n @body={{toast.body}}\n @color={{toast.color}}\n @iconType={{toast.iconType}}\n @onClose={{queue\n (fn this.dismissToast toast)\n (optional toast.onClose)\n }}\n {{didInsert (fn this.didInsertToast toast)}}\n {{on \"focus\" this.onMouseEnter}}\n {{on \"blur\" this.onMouseLeave}}\n />\n {{/each}}\n </div>\n </template>\n}\n"],"names":["TOAST_FADE_OUT_MS","EuiGlobalToastList","Component","g","prototype","service","i","void 0","dismissTimeoutIds","toastIdToTimerMap","isScrollingToBottom","isScrolledToBottom","isUserInteracting","isScrollingAnimationFrame","startScrollingAnimationFrame","listElement","tracked","startScrollingToBottom","scrollToBottom","position","scrollTop","destination","scrollHeight","clientHeight","distanceToDestination","window","requestAnimationFrame","didInsertToast","toast","scheduleToastForDismissal","n","action","onMouseEnter","toastId","hasOwnProperty","timer","pause","onMouseLeave","resume","onScroll","scheduleAllToastsForDismissal","euiToaster","toasts","forEach","id","Timer","dismissToast","bind","toastLifeTimeMs","args","push","setTimeout","apply","clear","toastIdToDismissedMap","remove","constructor","owner","didInsert","element","willDestroy","cancelAnimationFrame","clearTimeout","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","on","EuiToast","get","queue","fn","optional"],"mappings":"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"}
1
+ {"version":3,"file":"eui-global-toast-list.js","sources":["../../src/components/eui-global-toast-list.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { get } from '@ember/helper';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport { inject as service } from '@ember/service';\nimport type Owner from '@ember/owner';\n\nimport optional from '@nullvoxpopuli/ember-composable-helpers/helpers/optional';\nimport queue from '@nullvoxpopuli/ember-composable-helpers/helpers/queue';\n\nimport argOrDefault from '../helpers/arg-or-default.ts';\nimport classNames from '../helpers/class-names.ts';\nimport Timer from '../utils/timer.ts';\nimport EuiToast from './eui-toast.gts';\n\nimport type EuiToasterService from '../services/eui-toaster';\nimport type {\n EuiToastProps,\n EuiToastPropsWithId\n} from '../services/eui-toaster';\nimport type { sideMapping } from '../utils/css-mappings/eui-global-toast-list.ts';\n\ntype EuiToastSide = keyof typeof sideMapping;\n\ntype GlobalToastListArgs = {\n dismissToast?: (this: EuiGlobalToastList, toast: EuiToastProps) => void;\n toastLifeTimeMs: number;\n\n /*\n Determines which side of the browser window the toasts should appear\n Default: 'right'\n\n */\n side?: EuiToastSide;\n};\n\nconst TOAST_FADE_OUT_MS = 250;\n\nexport interface EuiGlobalToastListItemSignature {\n Element: HTMLDivElement;\n Args: GlobalToastListArgs;\n}\n\nexport default class EuiGlobalToastList extends Component<EuiGlobalToastListItemSignature> {\n @service declare euiToaster: EuiToasterService;\n\n dismissTimeoutIds: number[] = [];\n toastIdToTimerMap: { [toastId: string]: Timer } = {};\n\n isScrollingToBottom = false;\n isScrolledToBottom = true;\n isUserInteracting = false;\n\n // See [Return Value](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame#Return_value)\n // for information on initial value of 0\n isScrollingAnimationFrame = 0;\n startScrollingAnimationFrame = 0;\n\n listElement: Element | null = null;\n @tracked toastIdToDismissedMap: {\n [toastId: string]: boolean;\n } = {};\n\n startScrollingToBottom(): void {\n this.isScrollingToBottom = true;\n\n const scrollToBottom = () => {\n // Although we cancel the requestAnimationFrame in componentWillUnmount,\n // it's possible for this.listElement to become null in the meantime\n if (!this.listElement) {\n return;\n }\n\n const position = this.listElement.scrollTop;\n const destination =\n this.listElement.scrollHeight - this.listElement.clientHeight;\n const distanceToDestination = destination - position;\n\n if (distanceToDestination < 5) {\n this.listElement.scrollTop = destination;\n this.isScrollingToBottom = false;\n this.isScrolledToBottom = true;\n\n return;\n }\n\n this.listElement.scrollTop = position + distanceToDestination * 0.25;\n\n if (this.isScrollingToBottom) {\n this.isScrollingAnimationFrame =\n window.requestAnimationFrame(scrollToBottom);\n }\n };\n\n this.startScrollingAnimationFrame =\n window.requestAnimationFrame(scrollToBottom);\n }\n\n @action\n didInsertToast(toast: EuiToastPropsWithId): void {\n this.scheduleToastForDismissal(toast);\n\n if (!this.isUserInteracting) {\n // If the user has scrolled up the toast list then we don't want to annoy them by scrolling\n // all the way back to the bottom.\n if (this.isScrolledToBottom) {\n this.startScrollingToBottom();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n // Stop scrolling to bottom if we're in mid-scroll, because the user wants to interact with\n // the list.\n this.isScrollingToBottom = false;\n this.isUserInteracting = true;\n\n // Don't let toasts dismiss themselves while the user is interacting with them.\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.pause();\n }\n }\n }\n\n @action\n onMouseLeave(): void {\n this.isUserInteracting = false;\n\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.resume();\n }\n }\n }\n\n @action\n onScroll(): void {\n if (this.listElement) {\n this.isScrolledToBottom =\n this.listElement.scrollHeight - this.listElement.scrollTop ===\n this.listElement.clientHeight;\n }\n }\n\n scheduleAllToastsForDismissal(): void {\n this.euiToaster.toasts.forEach((toast) => {\n if (!this.toastIdToTimerMap[toast.id]) {\n this.scheduleToastForDismissal(toast);\n }\n });\n }\n\n @action\n scheduleToastForDismissal(toast: EuiToastPropsWithId): void {\n // Start fading the toast out once its lifetime elapses.\n this.toastIdToTimerMap[toast.id] = new Timer(\n this.dismissToast.bind(this, toast),\n toast.toastLifeTimeMs != null\n ? toast.toastLifeTimeMs\n : this.args.toastLifeTimeMs\n );\n }\n\n @action\n dismissToast(toast: EuiToastPropsWithId): void {\n // Remove the toast after it's done fading out.\n this.dismissTimeoutIds.push(\n window.setTimeout(() => {\n // Because this is wrapped in a setTimeout, and because React does not guarantee when\n // state updates happen, it is possible to double-dismiss a toast\n // including by double-clicking the \"x\" button on the toast\n // so, first check to make sure we haven't already dismissed this toast\n if (this.toastIdToTimerMap.hasOwnProperty(toast.id)) {\n if (this.args.dismissToast) {\n this.args.dismissToast.apply(this, [toast]);\n }\n\n this.toastIdToTimerMap[toast.id]!.clear();\n delete this.toastIdToTimerMap[toast.id];\n\n delete this.toastIdToDismissedMap[toast.id];\n this.toastIdToDismissedMap = {\n ...this.toastIdToDismissedMap\n };\n this.euiToaster.remove(toast);\n }\n }, TOAST_FADE_OUT_MS)\n );\n\n this.toastIdToDismissedMap = {\n ...this.toastIdToDismissedMap,\n [toast.id]: true\n };\n }\n\n constructor(owner: Owner, args: GlobalToastListArgs) {\n super(owner, args);\n this.scheduleAllToastsForDismissal();\n }\n\n @action\n didInsert(element: Element): void {\n this.listElement = element;\n }\n\n willDestroy(): void {\n super.willDestroy();\n\n if (this.isScrollingAnimationFrame !== 0) {\n window.cancelAnimationFrame(this.isScrollingAnimationFrame);\n }\n\n if (this.startScrollingAnimationFrame !== 0) {\n window.cancelAnimationFrame(this.startScrollingAnimationFrame);\n }\n\n this.dismissTimeoutIds.forEach(clearTimeout);\n\n for (const toastId in this.toastIdToTimerMap) {\n if (this.toastIdToTimerMap.hasOwnProperty(toastId)) {\n const timer = this.toastIdToTimerMap[toastId];\n\n timer?.clear();\n }\n }\n\n this.listElement = null;\n }\n\n <template>\n <div\n aria-live=\"polite\"\n role=\"region\"\n class={{classNames\n componentName=\"EuiGlobalToastList\"\n side=(argOrDefault @side \"right\")\n }}\n style={{unless this.euiToaster.toasts.length \"padding:0px;\"}}\n {{didInsert this.didInsert}}\n {{on \"scroll\" this.onScroll}}\n {{on \"mouseenter\" this.onMouseEnter}}\n {{on \"mouseleave\" this.onMouseLeave}}\n ...attributes\n >\n {{#each this.euiToaster.toasts as |toast|}}\n <EuiToast\n class={{classNames\n \"euiGlobalToastListItem\"\n (if\n (get this.toastIdToDismissedMap toast.id)\n \"euiGlobalToastListItem-isDismissed\"\n )\n }}\n @title={{toast.title}}\n @useMarkdownFormat={{toast.useMarkdownFormat}}\n @body={{toast.body}}\n @color={{toast.color}}\n @iconType={{toast.iconType}}\n @onClose={{queue\n (fn this.dismissToast toast)\n (optional toast.onClose)\n }}\n {{didInsert (fn this.didInsertToast toast)}}\n {{on \"focus\" this.onMouseEnter}}\n {{on \"blur\" this.onMouseLeave}}\n />\n {{/each}}\n </div>\n </template>\n}\n"],"names":["TOAST_FADE_OUT_MS","EuiGlobalToastList","Component","g","prototype","service","i","void 0","dismissTimeoutIds","toastIdToTimerMap","isScrollingToBottom","isScrolledToBottom","isUserInteracting","isScrollingAnimationFrame","startScrollingAnimationFrame","listElement","tracked","startScrollingToBottom","scrollToBottom","position","scrollTop","destination","scrollHeight","clientHeight","distanceToDestination","window","requestAnimationFrame","didInsertToast","toast","scheduleToastForDismissal","n","action","onMouseEnter","toastId","hasOwnProperty","timer","pause","onMouseLeave","resume","onScroll","scheduleAllToastsForDismissal","euiToaster","toasts","forEach","id","Timer","dismissToast","bind","toastLifeTimeMs","args","push","setTimeout","apply","clear","toastIdToDismissedMap","remove","constructor","owner","didInsert","element","willDestroy","cancelAnimationFrame","clearTimeout","setComponentTemplate","precompileTemplate","strictMode","scope","classNames","argOrDefault","on","EuiToast","get","queue","fn","optional"],"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":"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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ember-eui/core",
3
- "version": "12.0.12",
3
+ "version": "12.0.13",
4
4
  "description": "Ember Components for Elastic UI",
5
5
  "keywords": [
6
6
  "ember-addon",